Вопрос № 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)
Отвечает: Титов Михаил Анатольевич
Здравствуйте, Станислав!
Если кратко, то примерно так
В Си нет прямого аналога eoln. Здесь нужно проверять:
1) не достигнут ли конец потока ввода (файла): (c = getchar()) != EOF
2) не обнаружен ли конец строки: c != '
'
Иначе, как через буферную этого не сделать. Переменная должна быть типа int, что бы ей можно было присвоить значение EOF. Ну и конечно еще нужна будет проверка что не переполним массив.
Вообще же на Си в таких случаях принято писать примерно следующее
Ответ отправил: Титов Михаил Анатольевич (статус: 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; }
Ответ отправил: Xeladen (статус: 1-ый класс)
Ответ отправлен: 28.02.2008, 15:22
Вопрос № 125.266
Добрый день,Уважаемые эксперты. Помогите новичку. Пишу программу опроса прибора через COM-порт в C++Builder 6, прибор передаёт байт состояния(число), в котором необходимо определить значение некоторых определённых битов. Например, бит5 = 1 -диапазон измерения100; =0 -диапазон измерения1000. Подскажите пожалуйста, каким образом определить значение бита. Заранее благодарен.
Отвечает: 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 - указатель в никуда, для нее память не выделена. отсюда и все проблемы. Удачи!
--------- 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); Удачи!
--------- 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 - сколь угодно большое целое число (знаковое). Необходимо перегрузить все основные операторы (сложение, вычитание, умножение, деление) + осуществить возможность вывода в разных системах счисления. Может быть кто-то уже сталкивался с подобной задачей или у кого-нибудь есть какие-то оптимальные идеи? Я - начинающий программист С++, но, честно говоря, не хотел бы изобретать велосипед, а попытаться оптимизировать уже известные реализации, поэтому мне будет полезна любая информация
(идеи, ссылки на литературу, код )
Заранее благодарен)