Вопрос № 44710: Здравствуйте, Уважаемые Эксперты.
Классическая задача: сортировка пузырьком, МСВ 6, язык Си (не Си++).
В приложении пример: количество сравниваемых чисел задаю в начале „#define“.
А как сделать, чтобы не задавать количество сравниваемых ч...Вопрос № 44732: Как перевести строку в число и число в строку?...Вопрос № 44744: Здравствуйте!!!
Подкажите, пожалуйста, как сделать чтоб программа сканировала указанный каталог на наличее файлов и заганяла в массив имена файлов и их размер в байтах?
Какой командой можно удалить файл из каталога?
Где можно подробно на...Вопрос № 44754: Уважаемые эксперты пытаюсь разобраться как в С++ работают структуры (файлы структур).
Данные типа int и float записывать и читать получается, а строковые переменные НЕТ.
У меня подозрение что я не правильно использую тип CHAR. Объясните как п...
Вопрос № 44.710
Здравствуйте, Уважаемые Эксперты.
Классическая задача: сортировка пузырьком, МСВ 6, язык Си (не Си++).
В приложении пример: количество сравниваемых чисел задаю в начале „#define“.
А как сделать, чтобы не задавать количество сравниваемых чисел.
Что хочу: при введении буквы конец считывания чисел
и вывод красивенько - без лишних сравнений
(в моём случае 10 сравнений).
Спасибо.
Если Вы введете букву то 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
Отвечает: 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
В приложении atoi - перевести строку в число integer, т.е. целое. В данном случае перевести строку "10" в число 10
itoa - перевести число в строку, в данном случае перевести число 99 в строку str, система счисления десятичная (10). По выолнении в str будет "99"
Есть еще ряд функций atof, atol, ftoa и т.п.
Приложение:
--------- Успех неизбежен
Ответ отправил: Zitz (статус: Студент)
Ответ отправлен: 31.05.2006, 14:05 Оценка за ответ: 5 Комментарий оценки: Спасибо.
Вопрос № 44.744
Здравствуйте!!!
Подкажите, пожалуйста, как сделать чтоб программа сканировала указанный каталог на наличее файлов и заганяла в массив имена файлов и их размер в байтах?
Какой командой можно удалить файл из каталога?
Где можно подробно на русском почитать о работе с файлами в С++?
Отвечает: 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) без амперсанда, т.к. имя массива без индекса подразумевает указатель на его начало...