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

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


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

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

Выпуск № 849
от 15.09.2007, 22:05

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


Вопрос № 101432: Уважаемые эксперты, подскажите, пожалуйста, как в C++Builder 6 передать информацию в порт LPT и прочитать данные пришедшие в него с подключенного устройства (не принтера)....
Вопрос № 101495: Уважаемые эксперты! Задаю свой вопрос уже в третий раз и снова по-новому. Пишу тестирующую программу на BCB5. Первая форма - регистрационная. Здесь пользователь вводит свои ФИО и нажимает предложенную ниже кнопку "Начать т...
Вопрос № 101524: Доброе время суток эксперты! Скажите как мне побороть преобразование типов. В с++ это какая-то жесть :-) Никак не могу понять, как преобразовывать из типа в тип. Помогите сделать строку в примере и дайте ссылок на то, как выполнять преоб...
Вопрос № 101546: Приветствую! Как на bcb вызывать стандартные функции, написанные самим bcb? Например: if (x == 0 ) вызвать функцию formshow. ...
Вопрос № 101583: Здравствуйте господа программисты разьястните пожалуйста один параметр настройки проджекта "Character Set", что в группе "General", в чём здесь принципиальное различие м/у Unicode и Multi-Byte Character, и почему в Unicode строка ...

Вопрос № 101.432
Уважаемые эксперты, подскажите, пожалуйста, как в C++Builder 6 передать информацию в порт LPT и прочитать данные пришедшие в него с подключенного устройства (не принтера).
Отправлен: 09.09.2007, 21:43
Вопрос задал: 1Beginner1 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Терсков Сергей
Здравствуйте, 1Beginner1!
На сайте www.pcports.ru есть раздел Статьи. В нем вы найдете руководство по программированию LPT-порта. А вообще сайт этим не ограничен и содержит много информации по работе с различными портами и микроконтроллерами.
Ответ отправил: Терсков Сергей (статус: Студент)
Ответ отправлен: 10.09.2007, 03:13
Оценка за ответ: 3
Комментарий оценки:
Спасибо. Информация интересная, но примеры там для Microsoft Visual C++ 6.0, а у меня Borland C++ Builder 6. К сожалению моих знаний пока не хватает для использования полученной информации в этой системе. Вот такая невезуха :-)


Вопрос № 101.495
Уважаемые эксперты!
Задаю свой вопрос уже в третий раз и снова по-новому.

Пишу тестирующую программу на BCB5.

Первая форма - регистрационная. Здесь пользователь вводит свои ФИО и нажимает предложенную ниже кнопку "Начать тестирование". По нажатию на кнопку, создается файл для записи результатов тестирования + пользователь переходит ко второй форме - форма тестирования.

Вторая форма открывается уже с первым считанным из файла вопросом. Под вопросом располагаются три кнопки - возможные варианты ответа на вопрос: "Полностью согласен", "Частично согласен", "Не согласен". Нажимая по одной из кнопок, пользователь получает разное количество баллов. Все продолжается до тех пор, пока не конец первого файла с вопросами.

Как только программа показала все вопросы первого файла, кнопки для ответов блокируются, вместо них становится активной кнопка "Перейти на следующий шаг". Нажав эту кнопку, в файл результатов записывается сумма баллов, которые пользователь заработал за первый этап тестирования + пользователь должен перейти ко второму этапу тестирования в этой же форме. Т.е. должен осуществиться переход от одного файла с вопросами к другому + вывод первого вопроса второго файла с вопросами в эту же форму + разблокировать кнопки для дачи ответов.

У меня все работает только один раз. Другими словами, не получается организовать циклическое выполнение программы. Как это правильно осуществить.

Спасибо всем!!

Нужно чтоб вопросы теста располагались в разных файлах. Каждый файл с вопросом - отдельный раздел. Необходимо организовать переход между файлами. Делаю так:
Отправлен: 10.09.2007, 10:16
Вопрос задала: Stacey_campbell (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Irina Surina
Здравствуйте, Stacey_campbell!
Создаете массив имен файлов и перебираете. Или перебираете все файлы, находящиеся в одном каталоге. Или нумеруете файлы, перебираете по номерам. Напишите конкретнее, что Вы делаете, и что не получается
Ответ отправила: Irina Surina (статус: 1-ый класс)
Ответ отправлен: 10.09.2007, 18:20

Отвечает: Sov
Здравствуйте, Stacey_campbell!
Есть файлы с вопросами question_1.txt question_2.txt... Каждый вопрос это
отдельная строка. Хатя бы 1 строка(вопрс) в каждом файле есть
Для каждого цикла вопросов результаты выводятся в файлы res1.txt res2.txt...

Приложение:

Ответ отправил: Sov (статус: 7-ой класс)
Ответ отправлен: 10.09.2007, 22:06


Вопрос № 101.524
Доброе время суток эксперты!
Скажите как мне побороть преобразование типов. В с++ это какая-то жесть :-)
Никак не могу понять, как преобразовывать из типа в тип.
Помогите сделать строку в примере и дайте ссылок на то, как выполнять преобразования.

Приложение:

Отправлен: 10.09.2007, 15:21
Вопрос задал: Уваров Андрей Александрович (статус: Студент)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 2)

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

Дело в том, что в С/С++ строка представляется массом целых чисел (размером 1 байт (char) для ANSI, 2 и больше байт (wchar_t) для UNICODE), обычно заканчивающийся нулём.

(Напомню, что массив в С/C++ - это непрерывная область памяти, занимаемая однотипными элементами, и представляется указателем на первый элемент. Индексация элементов идет с 0.)

Копирование и конкатенация (сложение) "строк" делается с помощью функций (например, strcpy и strcat), которые работают с элементами массива. Длина "строки" определяется путем нахождения количества элементов массива до первого нулевого элемента.
Единственная поддержка строк предоставляемая в С/С++ - это символьные и строковые константы вида 'a' и "srting". Но, фактически, это те же целые числа и массивы целых чисел (с нулем на конце). Кроме того, 'a' - это символ, а "a" - строка, представляемая массивом из 2х элементов ('a' и 0).
Поэтому числа и строки принципиально не приводимы друг к другу как типы (с помощью опрераторов приведения вроде (float) или (int)).
Для того, чтобы получить _предсталение_ числа в виде строки и, наоброт, из строкового представляения получить число, необходимо использовать специальные функции. Таких функций, на самом деле, достаточно много, вот некоторые из них (входящие в стандартную библиотеку):
atoi - переводит строковое представление в число типа int
atof - переводит строковое представление в число типа double (или float)
itoa - представляет число типа int в виде строки
_gcvt - представляет число типа double (или float) в виде строки
Вы можете посмотреть наличие функций аналогичных FloatToStr, которые идут с компилятором от Borland.
В приложении ваш пример с использованием стандартных функций.

ps: по поводу вашего примера, удобнее было бы хранить все значения в виде чисел, а к строкам обращаться только, например, для вывода на печать или предоставления пользователю в виде сообщений.
pps: если что то останется непонятным, пишите пс.

Приложение:

---------
нет ничего невозможного

Ответ отправил: Aristos (статус: 5-ый класс)
Ответ отправлен: 10.09.2007, 17:15
Оценка за ответ: 5
Комментарий оценки:
Очень большое спасибо! Все так понятно! И теория и практика. А главное работает.

Отвечает: kool
Здравствуйте, Уваров Андрей Александрович!
Так делать
MbPerDay = FloatToStr( float( stat.freeMb )/DaysRemains );
низя.
Можно так
strcpy(MbPerDay,FloatToStr( float( stat.freeMb )/DaysRemains ));
Удачи!


---------
I am.
Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 10.09.2007, 20:05

Отвечает: Зелик Колабухин
Здравствуйте, Уваров Андрей Александрович!

Я полагаю, что Вы с помощью float( stat.freeMb ) желаете преобразовать строку в число. Но stat.freeMb - это указатель на массив из ЧИСЕЛ типа char, т.е. char *. Похоже, что компилятор не позволяет преобразовывать указатели во float. Но это вам и не нужно.
К тому же преобразовываются в с++ числа в числа. И чтобы лучше это представлять, записывайте преобразование в виде (float) stat.freeMb. Тогда четко видно, что программа должна взять то, что находится в stat.freeMb и понимать это как тип float.
Ну а в даном случае придется посимвольно пробежаться по stat.freeMb[] и получить число в численном виде.

И еще, по-моему FloatToStr не стандартная функция. Если она из другого места программы, то должна возвращать указатель на массив из char (если смотреть по программе). Но в программе идет присвоение полученного указателя переменной, которая указывает на совершенно другой массив. Если компилятор пропустит это, то выделенные через char MbPerDay[200]; 200 char'ов зависнут без переменной, которая на них указывает. Но я думаю, что скорее всего и здесь будет ошибка.
С другой стороны, при использовании sprintf нет необходимости делать FloatToStr. Думаю, что вместо %s в sprintf нужно просто написать %d (если не ошибаюсь, т.к. пишу по памяти) и тогда sprintf сама сделает все, что нужно.
Таким образом, пишем sprintf( StatPerDay, "В день: %d Мб", My_float( stat.freeMb )/DaysRemains);.
Ответ отправил: Зелик Колабухин (статус: 3-ий класс)
Ответ отправлен: 11.09.2007, 11:51


Вопрос № 101.546
Приветствую! Как на bcb вызывать стандартные функции, написанные самим
bcb? Например: if (x == 0 ) вызвать функцию formshow.
Отправлен: 10.09.2007, 17:43
Вопрос задал: Попов Максим алексеевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Rockie
Здравствуйте, Попов Максим алексеевич!

Все функции VCL вызываются через косвенный доступ, то есть с применением "->".

if(x==0) Form1->Show();

// либо
if(!x) Form1->Show();
Ответ отправил: Rockie (статус: 3-ий класс)
Ответ отправлен: 10.09.2007, 19:05
Оценка за ответ: 5


Вопрос № 101.583
Здравствуйте господа программисты разьястните пожалуйста один параметр настройки проджекта "Character Set", что в группе "General", в чём здесь принципиальное различие м/у Unicode и Multi-Byte Character, и почему в Unicode строка ниже выдаёт непонятно чё "КРЯКОЗЯБЛИКИ"
Какой параметр ЛУЧШЕ использовать и почему

ЗАРАНЕЕ БЛАГОДАРЕН АЛЕКСАНДР

Приложение:

Отправлен: 10.09.2007, 21:50
Вопрос задал: Новак Александр Васильевич (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Sergey A. Wedensky
Здравствуйте, Новак Александер Васильевич!
В зависимости от этого параметра определяется кодировка строк, используемая по умолчанию в Вашей программе. Большинство API-функций, принимающих строки имеют 2 варианта - юникодный и ANSI, например, CreateWindowA и CreateWindowW. В качестве строковых параметров они ожидают соответственно char* и wchar_t*. В заголовочных файлах определены макросы на каждую такую функцию, например макрос CreateWindow, который при использовании юникода (#define _UNICODE - что и делает параметр компилятора) определен как CreateWindowW, а ANSI или MBCS - CreateWindowA.
Какой набор символов выбрать - Вам решать. Например, если работа ведется в основном с юникод-строками (чтение из файлов и пр.), удобнее выставить юникод всему проекту.
Для задания строковых констант рекомендую пользоваться макросом _T(), который при использовании юникода добавляет префикс L к строке, превращая ее в юникод-строку.
Например, _T("MainWINDOW") разименуется в L"MainWINDOW" если _UNICODE определено, и просто в "MainWINDOW", если нет.
Ответ отправил: Sergey A. Wedensky (статус: Студент)
Ответ отправлен: 11.09.2007, 10:24
Оценка за ответ: 5
Комментарий оценки:
ЯСНЕНЬКО!!!!%-)


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

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

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

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

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


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


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

В избранное