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

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


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

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

Выпуск № 428
от 05.06.2006, 20:35

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


Вопрос № 44710: Здравствуйте, Уважаемые Эксперты. Классическая задача: сортировка пузырьком, МСВ 6, язык Си (не Си++). В приложении пример: количество сравниваемых чисел задаю в начале „#define“. А как сделать, чтобы не задавать количество сравниваемых ч...
Вопрос № 44732: Как перевести строку в число и число в строку?...
Вопрос № 44744: Здравствуйте!!! Подкажите, пожалуйста, как сделать чтоб программа сканировала указанный каталог на наличее файлов и заганяла в массив имена файлов и их размер в байтах? Какой командой можно удалить файл из каталога? Где можно подробно на...
Вопрос № 44754: Уважаемые эксперты пытаюсь разобраться как в С++ работают структуры (файлы структур). Данные типа int и float записывать и читать получается, а строковые переменные НЕТ. У меня подозрение что я не правильно использую тип CHAR. Объясните как п...

Вопрос № 44.710
Здравствуйте, Уважаемые Эксперты.
Классическая задача: сортировка пузырьком, МСВ 6, язык Си (не Си++).
В приложении пример: количество сравниваемых чисел задаю в начале „#define“.
А как сделать, чтобы не задавать количество сравниваемых чисел.
Что хочу: при введении буквы конец считывания чисел
и вывод красивенько - без лишних сравнений
(в моём случае 10 сравнений).
Спасибо.

Приложение:

Отправлен: 30.05.2006, 22:02
Вопрос задал: Евсеев В. Н. (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Zitz
Здравствуйте, Евсеев В. Н.!

Если Вы введете букву то scanf вернет 0, т.е. вставив такое условия можно прекратить считывание. Ну и естественно нужно запомнить на каком остановились.
Вы почемуто не используете флаг ff, он задается но Вами нигде не используется... Использовать нужно так - цикл верхнего уровня нужно сделать ПОКА(ff) (тоже самое ПОКА(ff>0), а в приложении - если сканф вернет ноль, т.е. можно и так scanf("%d", &vv[ii]) == 0 )
ff у Вас в программе :)) символизирует количество перестановок, если их за проход не сделано, то значит все уже отсортировано и дальше не нужно, т.е. верхний цикл продолжается пока есть перестановки и следовательно количество проходов сократится, если я правильно понял фрузу "без лишних сравнений"

Приложение:

---------
Успех неизбежен

Ответ отправил: Zitz (статус: Студент)
Ответ отправлен: 30.05.2006, 23:22
Оценка за ответ: 5

Отвечает: Vest
Здравствуйте, Евсеев В. Н.!
NUM 10 нужен только для создания статического массива. Единственная проблема - это просто посчитать кол-во введённых чисел и вывести их ровно столько же. Программу необходимо немного переписать, есть две идеи:
1. Чтобы в начале спрашивалось сколько всего нужно чисел, и тем самым все циклы и массивы будут ограничены этим числом. Далее массив создать динамически.
2. Либо действительно, как указано в пред. ответе выполнять до бесконечности, но просто отдельной переменной считать эти числа, и тогда "абракадабры" в конце не будет. Ну или вообще можно использовать стандартные библиотечные массивы, способные самостоятельно расширяться.

---------
Халявы не бывает
Ответ отправил: Vest (статус: 2-ой класс)
Ответ отправлен: 01.06.2006, 00:48
Оценка за ответ: 5


Вопрос № 44.732
Как перевести строку в число и число в строку?
Отправлен: 31.05.2006, 08:11
Вопрос задал: Гренкин Глеб Владимирович (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Dr_Andrew
Здравствуйте, Гренкин Глеб Владимирович!
В Builder'е можете использовать функции
StrToInt(const AnsiString S); // Переводит в int строку S
StrToFloat(const AnsiString S); // Переводит в float строку S
IntToStr(int Value); // Переводит в строку число Value.
FloatToStr(Extended Value); // То же для float.
Ответ отправил: Dr_Andrew (статус: 1-ый класс)
Ответ отправлен: 31.05.2006, 09:23

Отвечает: Zitz
Здравствуйте, Гренкин Глеб Владимирович!

В приложении atoi - перевести строку в число integer, т.е. целое. В данном случае перевести строку "10" в число 10
itoa - перевести число в строку, в данном случае перевести число 99 в строку str, система счисления десятичная (10). По выолнении в str будет "99"
Есть еще ряд функций atof, atol, ftoa и т.п.

Приложение:

---------
Успех неизбежен

Ответ отправил: Zitz (статус: Студент)
Ответ отправлен: 31.05.2006, 14:05
Оценка за ответ: 5
Комментарий оценки:
Спасибо.


Вопрос № 44.744
Здравствуйте!!!
Подкажите, пожалуйста, как сделать чтоб программа сканировала указанный каталог на наличее файлов и заганяла в массив имена файлов и их размер в байтах?
Какой командой можно удалить файл из каталога?
Где можно подробно на русском почитать о работе с файлами в С++?
Отправлен: 31.05.2006, 10:22
Вопрос задал: Комаров Евгений Сергеевич (статус: 4-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Santana
Здравствуйте, Комаров Евгений Сергеевич!
На пример так

Приведённый ниже пример выводит имена каталогов и файлов ,

WIN32_FIND_DATA Find;
HANDLE hFind;

hFind = FindFirstFile("d:\*" , &Find);
if (hFind != INVALID_HANDLE_VALUE)
{ do
{
ListBox2-> Items ->Add(Find.cFileName);
}
while (FindNextFile(hFind,&Find));

FindClose(hFind);
CloseHandle(hFind);
Ответ отправил: Santana (статус: 3-ий класс)
Ответ отправлен: 31.05.2006, 11:34
Оценка за ответ: 4
Комментарий оценки:
Спасибо! Но эта програма выдает только имена файлов, как узнать их размер?

Отвечает: Zitz
Здравствуйте, Комаров Евгений Сергеевич!

Зря обидели эксперта Santana. Данной командой заполняется структура WIN32_FIND_DATA, если посмотрите ее содержимое, то среди параметров найдете и размер файла
Чтобы удалить файл можно использовать например АПИ функцию (функцию windows) см. в приложении
Если хотите можете скачать справочник по АПИ функциям, посмотрите в ответах по рассылке WinAPI кто-то вроде давал мне ссылочку. Ну или вопросом туда отправте.

Приложение:

---------
Успех неизбежен

Ответ отправил: Zitz (статус: Студент)
Ответ отправлен: 31.05.2006, 13:49


Вопрос № 44.754
Уважаемые эксперты пытаюсь разобраться как в С++ работают структуры (файлы структур).
Данные типа int и float записывать и читать получается, а строковые переменные НЕТ.
У меня подозрение что я не правильно использую тип CHAR. Объясните как правильно вводить/выводить строковые переменные.
ТОЛЬКО БОЛЬШАЯ ПРОСЬБА С УЧЕТОМ ТОГО что я использую TURBO C.

Я только начинающий потому пожалуйста разъясните по-подробнее.
Вот привожу пример (разъясните на нем):

Приложение:

Отправлен: 31.05.2006, 11:28
Вопрос задал: Gh0stik (статус: 10-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Zitz
Здравствуйте, Gh0stik!

сткрока == массив символов заканчивающихся нулем.
char == символ != строка символов
Как такового базового типа строкавая переменная нет.
Т.е. в Вашем случае нужно объявить не char nazv, а например char nazv[20], т.е. название будет состоять максимум из 20 символов. И сначала нужно забить массив нулями (почему? читайте первое предложение)
Это делается макросом ZeroMemory(nazv, 20);
Ну и тогда все получится...
А сейчас вылетает из-за того что Вы говорите строкой printf("Название=%s", vl.nazv); - выведи мне строку, а на вход даете ему char, а не указатель на их массив char *
Если хотите вывести символ, то используйте printf("Название=%c", vl.nazv);
Ну а так вроде типизированный файл (который вы почемуто назвали файл структур) делаете правильно.
Если Вы хотите сделать текстовый файл, то добавьте просто флаг t к открытию, т.е. fopen("fvelos.dat", "w +" "t")
И еще одно замечание вместо goto end используйте break - эта команда прекращает выполнение цикла и никаких меток не нужно, или используйте признак конца файла feof(fvelos)
---------
Успех неизбежен
Ответ отправил: Zitz (статус: Студент)
Ответ отправлен: 31.05.2006, 13:38

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

Строка "char nazv" говорит о том, что nazv - символ. ОДИН!

Нужно, например, так: cahr nazv[10];
Это значит, что nazv - массив из 10 символов, т.е. строка. Последний символ строки используется под символ конца строки '
Из этого вытекает следующее: scanf("%s", vl.nazv) без амперсанда, т.к. имя массива без индекса подразумевает указатель на его начало...
Ответ отправил: Селиванов Александр Владимирович (статус: 2-ой класс)
Ответ отправлен: 31.05.2006, 13:51


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

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

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

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

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


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


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное