Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на C / C++


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 1015
от 05.03.2008, 09:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 479, Экспертов: 52
В номере:Вопросов: 5, Ответов: 9

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 125237: Здраствуйте Уважаемые эксперты, я недавно перешёл с паскаля на С, помогите пожалуйста перевести с паскаля на С кусок кода, код в приложении. Заранее спасибо :) С Уважением, Станислав....
Вопрос № 125266: Добрый день,Уважаемые эксперты. Помогите новичку. Пишу программу опроса прибора через COM-порт в C++Builder 6, прибор передаёт байт состояния(число), в котором необходимо определить значение некоторых определённых битов. Например, бит5 = 1 -диапазон ...
Вопрос № 125303: Здраствуйте. Не знаю как из DLL прочитать переменную char? При завершении работы функции в DLL вылазит ошибка: First chance exception at $7C81EB33. Exception class EAccessViolation with message 'Access violation at address 20007BE3 in module 'rtl100....
Вопрос № 125305: Здравствуйте! У меня возникли затруднения с простенькой программой. Работа прогрммы, вкратце - состоит из трёх блоков - чтение из файла, арифметические действия, запись ответа в файл. Компилится программа без вопросов. Запу...
Вопрос № 125338: Задача: реализовать обьект lint - сколь угодно большое целое число (знаковое). Необходимо перегрузить все основные операторы (сложение, вычитание, умножение, деление) + осуществить возможность вывода в разных системах счисления. Может быть кто-то уже...

Вопрос № 125.237
Здраствуйте Уважаемые эксперты, я недавно перешёл с паскаля на С, помогите пожалуйста перевести с паскаля на С кусок кода, код в приложении.
Заранее спасибо :)
С Уважением, Станислав.

Приложение:

Отправлен: 28.02.2008, 11:03
Вопрос задал: Станислав (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Титов Михаил Анатольевич
Здравствуйте, Станислав!
Если кратко, то примерно так

while((c = getchar()) != EOF && c != ' ')
{
a[i] = c;
i++;
}

Можно даже покороче

while((c = getchar()) != EOF && c != ' ') a[i++] = c;

В Си нет прямого аналога eoln. Здесь нужно проверять:
1) не достигнут ли конец потока ввода (файла): (c = getchar()) != EOF
2) не обнаружен ли конец строки: c != ' '

Иначе, как через буферную этого не сделать. Переменная должна быть типа int, что бы ей можно было присвоить значение EOF. Ну и конечно еще нужна будет проверка что не переполним массив.
Вообще же на Си в таких случаях принято писать примерно следующее

for(i = 0; (c = getchar()) != EOF && c != ' ' && i < BUFSIZE-1; i++) a[i] = c;

В приложении законченный пример.

Приложение:

Ответ отправил: Титов Михаил Анатольевич (статус: 5-ый класс)
Ответ отправлен: 28.02.2008, 14:14
Оценка за ответ: 5

Отвечает: Xeladen
!!!
Здравствуйте, Станислав!
while(!eoln) eoln требуется либо определить либо использовать иную проверку (см. ответ выше)
{
read(a[i]); функция read имеет прототип int read(int handle, void *buf, unsigned len);
i++; //i=i+1;
}

Простой перевод синтаксиса не годится, это не будет работать. См. ответ Титов Михаил Анатольевич
-----
∙ Отредактировал: Виктор Пырлик (Профессионал)
∙ Дата редактирования: 29.02.2008, 06:36
Ответ отправил: Xeladen (статус: 1-ый класс)
Ответ отправлен: 28.02.2008, 15:22


Вопрос № 125.266
Добрый день,Уважаемые эксперты. Помогите новичку. Пишу программу опроса прибора через COM-порт в C++Builder 6, прибор передаёт байт состояния(число), в котором необходимо определить значение некоторых определённых битов. Например, бит5 = 1 -диапазон измерения100; =0 -диапазон измерения1000. Подскажите пожалуйста, каким образом определить значение бита. Заранее благодарен.
Отправлен: 28.02.2008, 13:19
Вопрос задал: Соколов Владимир Валерьевич (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Mitya86
Здравствуйте, Соколов Владимир Валерьевич!

О, эта та еще задачка! Я когда знакомился с ассемблером долго мучался над подобным вопросом. Решение мне подсказал старший товарищ и вот каким оно оказалось: надо необходимый байт умножить на маску и анализировать результат. Т.е. чтобы определить значение младшего бита см. приложение.

Приложение:

Ответ отправил: Mitya86 (статус: 4-ый класс)
Ответ отправлен: 28.02.2008, 14:13
Оценка за ответ: 4

Отвечает: Zloi_goh
Здравствуйте, Соколов Владимир Валерьевич!
Существуют побитовые логические операторы:
~ инверсия. Каждый бит меняется на противоположное значение(0 на 1, 1 на 0).

& логическое И. Любой бит равен 1 если соответствующие биты обоих операндов равны 1, и равен 0 в любом другом случае.

| логическое ИЛИ. Любой бит равен 0 если соответствующие биты обоих операндов равны 0, и равен 1 в любом другом случае.

^ логическое исключающее ИЛИ. Любой бит равен 1 если соответствующие биты обоих операндов различны и 0 если одинаковы.

В вашем случае подойдет логическое И:

if((arg&0x20)!=0)
{ //условие выполняется если 5й бит 1 }

---------
Лучше идти чем бежать, лучше стоять чем идти, лучше сидеть чем стоять, лучше лежать чем сидеть, лучше умереть чем лежать.
Ответ отправил: Zloi_goh (статус: 1-ый класс)
Ответ отправлен: 28.02.2008, 14:23
Оценка за ответ: 5
Комментарий оценки:
Спасибо большое мне кажется это то,что нужно.

Отвечает: Терсков Сергей
Здравствуйте, Соколов Владимир Валерьевич!
В приложении описана функция get_bit(unsigned long number, int bit). Она возвращает значение бита в позиции bit числа number. Для примера я привел вывод двоичного представления числа с использованием этой функции.

Приложение:

Ответ отправил: Терсков Сергей (статус: Практикант)
Ответ отправлен: 29.02.2008, 03:38
Оценка за ответ: 3
Комментарий оценки:
Спасибо за потраченное время,но мне кажется что существует что-то более простое и компактное.В любом случае спасибо.


Вопрос № 125.303
Здраствуйте. Не знаю как из DLL прочитать переменную char? При завершении работы функции в DLL вылазит ошибка: First chance exception at $7C81EB33. Exception class EAccessViolation with message 'Access violation at address 20007BE3 in module 'rtl100.bpl'. Read of address FFFFFFFF'. Process testex.exe (2172)

Приложение:

Отправлен: 28.02.2008, 17:30
Вопрос задал: Etenity (статус: 7-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 5)

Отвечает: kool
!!!
Здравствуйте, Etenity!

Смотрите строку
FileRead(dat, data,dov);
data - указатель в никуда, для нее память
не выделена. отсюда и все проблемы.
Удачи!

Отредактирован стиль изложения поданного ответа. Отправлено личное письмо.
-----
∙ Отредактировал: Цикалов Игорь Константинович (Профессионал)
∙ Дата редактирования: 29.02.2008, 05:01

---------
I am.
Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 28.02.2008, 20:30
Оценка за ответ: 5


Вопрос № 125.305
Здравствуйте!

У меня возникли затруднения с простенькой программой.

Работа прогрммы, вкратце - состоит из трёх блоков - чтение из файла, арифметические действия, запись ответа в файл.

Компилится программа без вопросов. Запускаю. Чтение из файла происходит успешно, математика тоже, но вот в момент записи ответа в файл выскакивает ошибка "Обнаружна ошибка, приложение будет закрыто..."

Причём, файл на вывод создаётся, но он нулевого размера - пустой.
Понимаю, что проблема в районе предпоследней строчки, но никак не могу понять, в чём именно.

Помогите, пожалуйста.

Приложение:

Отправлен: 28.02.2008, 17:55
Вопрос задал: VeRTeX (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 7)

Отвечает: kool
!!!
Здравствуйте, VeRTeX!
sr - это не строка, а переменная типа float,
поэтому нужно выводить так
fprintf(out,"%f",sr);
или так
fprintf(out,"%d",sr);
Удачи!

В мини-форуме этот ответ был дан ранее другим экспертом. Просматривайте мини-форум перед отправкой ответа во избежании подобных ситуаций.
-----
∙ Отредактировал: Shapoklak (Академик)
∙ Дата редактирования: 29.02.2008, 07:44

---------
I am.
Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 28.02.2008, 18:42
Оценка за ответ: 5
Комментарий оценки:
Спасибо =) 5 за отличную перепечатку ранее данного ответа в мини-форуме =)

Отвечает: Сандров Алекс
Здравствуйте, VeRTeX!

Переменная объявлена, как вещественное число:

float sr;

А пишется она в файл как строчка:

fprintf(out,"%s",sr);

Надо так:

fprintf(out,"%f",sr);

Ответ отправил: Сандров Алекс (статус: 5-ый класс)
Ответ отправлен: 29.02.2008, 06:04
Оценка за ответ: 5
Комментарий оценки:
И вам 5. =)


Вопрос № 125.338
Задача: реализовать обьект lint - сколь угодно большое целое число (знаковое). Необходимо перегрузить все основные операторы (сложение, вычитание, умножение, деление) + осуществить возможность вывода в разных системах счисления. Может быть кто-то уже сталкивался с подобной задачей или у кого-нибудь есть какие-то оптимальные идеи? Я - начинающий программист С++, но, честно говоря, не хотел бы изобретать велосипед, а попытаться оптимизировать уже известные реализации, поэтому мне будет полезна любая информация (идеи, ссылки на литературу, код )
Заранее благодарен)
Отправлен: 28.02.2008, 22:06
Вопрос задал: Прокудин Сергей Викторович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Терсков Сергей
Здравствуйте, Прокудин Сергей Викторович!
Задача непростая и велосипед тут действительно не нужно изобретать. Посмотрите здесь "Длинные числа и операции с ними"algolist.manual.ru). Там вы найдете ссылки на статью по алгоритмам работы с длинными числами, а также на исходники к этой статье. Программы простотой не отличаются, но в этой теме по другому быть не может.
Ответ отправил: Терсков Сергей (статус: Практикант)
Ответ отправлен: 29.02.2008, 03:52
Оценка за ответ: 5


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.72.1 от 04.03.2008
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное