| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Центр помощи > [c++]Struct |
| Автор: Goth 18.5.2007, 11:29 |
| Вот такая вот задача стоит предо мной: описать структуру с именем MARSH, содержащую поля: • BEGST – название начального пункта маршрута; • TERM – название конечного пункта маршрута; • NUMER – номер маршрута. Написать программу, выполняющую следующие действия: • ввод из файла данных в массив TRAFFIC, состоящий из десяти структур типа MARSH; записи должны быть упорядочены по номерам маршрутов; • вывод на дисплей информации о маршрутах, которые начинаются или кончаются в пункте, введенном с клавиатуры; • если таких маршрутов нет, вывести соответствующее сообщение. Кто осилит?:) |
| Автор: Xenon 18.5.2007, 20:44 | ||||
Непонятка - бинарный файл со структруми уже есть? Если да, то :
Если нет - файл нужно сначала чем-то заполнить ... Как-нибудь вот так:
|
| Автор: Goth 19.5.2007, 10:08 |
| Вместо "std::" нужно что-то подставить или что? Иначе компиллятор отказывается переваривать эту программу=) |
| Автор: Xenon 19.5.2007, 14:14 |
| zkv, когда же наконец-то в институты/универы поставят нормальные компиляторы ... спасибо за поправку |
| Автор: zkv 19.5.2007, 14:44 | ||
наверное, сначала в них (в институтах) должны появиться преподаватели, которые этих компиляторов (нормальных) сами не будут бояться |
| Автор: Goth 19.5.2007, 18:57 |
| Самое смешное, что дело удалением "std::" не закончилось. Компиллятор выдал целый букет ошибок;))) Ну, к примеру, Borland не признает тип string и тд. Может есть возможность у тов. Xenon'a переделать прогу под Borland C++ 3.1? А то остальные ошибки вообще не понятны=)) Буду оч благодарен) З.Ы. а про универы верно подмечено;)) |
| Автор: Alexeis 19.5.2007, 19:13 |
| Хм.. насколько я знаю в Borland C++ 3.1 нет поддержки STL. Так что работать не будет |
| Автор: Goth 19.5.2007, 19:20 |
| Вот я и говорю, что много непонятных мне и компиллятору "ошибок". Поэтому взываю к добрым людям;)) |
| Автор: Xenon 19.5.2007, 20:12 | ||
Не дай бог у меня в универе будет борланд
|
| Автор: Goth 19.5.2007, 20:57 |
| И опять компиллятор выдает море ошибок. Сейчас посмотрим, что там.... |
| Автор: zkv 19.5.2007, 21:06 | ||
вот прога Xenon'a, которая точно(нашел даже этот раритет
|
| Автор: Goth 19.5.2007, 21:31 |
| Эта программа ничуть не лучше=) Может я, конечно, чего-то недопонимаю, но компиллятор опять же выводит несуразные замечание (хотч их всего 2!), а именно "undefined symbols ..." ... Даже не знаю, что с этим можно сделать ;) |
| Автор: zkv 19.5.2007, 21:41 |
| Goth, этот код я проверял на Borland C++ Version 3.1, он только два ворнинга выдает несущественных (обеспокоен тем что не пользуемся argc и argv). Так что показывай на какие выдает ошибки, и в каких строках. |
| Автор: Goth 20.5.2007, 08:53 |
| Компилится нормально, но .EXE файл не линкуется... Привожу точный текст ошибки "Linker error: Undefined symbol _vector_new_(void far*, unsigned int, unsigned long, unsigned int,...) in module <имя файла с текстом программы>.CPP" И вот эта: "Linker error: Undefined istream::getline(char far*, int, unsigned char) in module <имя файла с текстом программы>.CPP" Никогда с таким не сталкивался. Может я что-то не так делаю? :) |
| Автор: zkv 20.5.2007, 14:08 |
| Goth, к либ файлам в директориях пути нормально прописаны? Посмотри в файловом менеджере (проводнике например) сначала, где папка с файлами у тебя с расширениями lib, по идее она LIB должна называться, потом пропиши путь к этим файлам в Directories, если не получится, то тебе не повезло |
| Автор: Goth 20.5.2007, 16:06 |
| Папка с .lib файлами так и называется. В Directories путь прописан к этой папке. Все остальные проги нормально компиллятся. Ничего не понимаю... |
| Автор: dizzy1984 23.5.2007, 12:47 | ||
Options->Linker->Libraries->Standart Run-time Libraries вместо None поставить Static
Такой, какой мы ее знаем на текущий день нет - но было некое подобие. Были все потоковые классы - fstream, iostream. Существовали контейнерные классы - Array(теперь vector), Queue, List, правда они не были шаблонными. Различия по примеру Xenona. std нет, т.к нет концепции о пространстве имен. Типа string нет, зато есть тип String, правда с другими методами. Нет типа bool и ключевых слов false и true reinterpret_cast и иже с ним также отсутствуют Все остальное портабельно |
| Автор: Goth 23.5.2007, 16:48 |
| так, действительно запускается (видимо уж совсем устарел мой С++, скачал с бОльшим кол-вом библиотек). Но вот что должен из себя представлять файл для считывания? Какова должна быть структура записи информации в нем? Перепробовал уже множество вариантов. И как можно вывести на экран уже отсортированный массив структур? |
| Автор: Xenon 24.5.2007, 00:01 | ||||
| Goth, я уже приводил функцию формированию файла на основе данных. Иначе никак, ведь формат данных бинарен, поэтому ручками не получится. Вот та самая функция:
Вывод? Везде, где угодно после функции sort():
|
| Автор: Goth 24.5.2007, 14:10 |
| Понятно. Только проблема вот в чем: мой компиллятор не признает 11ую строку первого кода (что не удивительно). Чем можно заменить её в Borland? |
| Автор: zkv 24.5.2007, 14:16 | ||||||
reinterpret_cast - это не понимает? меняй
на
|
| Автор: Goth 24.5.2007, 16:37 |
| Всё равно не то... Но уже хотя бы запускается. Файл создается криво, далее не читается. А я уж думал сегодня отмечу задачу " как решенную" =)) |
| Автор: Xenon 24.5.2007, 17:38 | ||
Не знаю как ты делал, но у меня все работает:
|
| Автор: Goth 26.5.2007, 11:54 | ||
Ну чтож, могу отчитаться. Немного поразмыслив над всеми представленными кодами, я добавил кое-что в последний код тов. Xenon (а именно сделал поиск номера маршрута по начальному или конечному пути, т.к. предоставленный код отказывался всё это осуществлять), и в результате получилось нечто следующее:
В связи с этим выражаю благодарность следующим личностям: Xenon, zkv. =))) |
| Автор: Xenon 26.5.2007, 13:33 | ||
Goth,
Так работает? |
| Автор: Goth 26.5.2007, 14:58 |
| Это чисто из спортивного интереса? З.Ы. Xenon, опять хромает поиск номера маршрута по началу и концу пути... |
| Автор: Xenon 26.5.2007, 22:59 |
| Goth, чего- то у меня даже в голове не укладывается ... вроде же правильно все: если результат первого или второго сравнения равно -1 или 1, то уже автоматом выражение в скобках принимает true, а операцией инверсии '!' получается false. А если и то и другое сравнение вернуло 0, значит и та и другая строка равны, в скобках получится false, а из-за '!' получится true ... Ну правильно кажись все. |
| Автор: lrad 27.5.2007, 11:02 | ||
| У меня была похожая задача 1. Структура с именем MARSH содержит следующие поля: - название начального пункта маршрута; - название конечного пункта маршрута; - номер маршрута. 2. Условие поиска – вывод на экран информации о маршруте, номер которого введен с клавиатуры. вот решение а под твой вариант переделать элементарно
|
| Автор: Goth 27.5.2007, 12:38 |
| Xenon, насколько я понял, сравнить начало и конец пути можно только с помощью strcmpi, точную формулировку не помню, но вроде как в таком случае не учитывается "как" мы записывали поля структуры в файл (что-то там с двоичной системой связано). А вот насчет strcmp, которую используешь, не уверен. Irad, вся проблема заключалась как раз в записи в файл и считывании с файла полей структуры, а остальное не так уж проблемно=))) |
| Автор: Xenon 27.5.2007, 15:32 |
| Goth, strcmp(const char* str1, const char* str2) стандартная функция сравнивающая две строки: если она вернет -1, значит st1 меньше st2, если 0, то они равны, если 1, то st1 больше st2. |