|
Модераторы: Poseidon |
|
Hersio |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 12.11.2006 Репутация: нет Всего: нет |
Дана информация о владельцах автомобилей одного города в файле А1. Элемент файла включает фамилию, имя, отчество владельца, марку автомобиля, год его выпуска и номер автомобиля(номер задаётся 4 цифрами)
Найти: Число автомобилей каждой марки с учётом года выпуска. Эти сведения должны включать марку автомобиля, год выпуска, число автомобилей. С файлами пока не работал и даже вообще незнаю что делать, помогите? |
|||
|
||||
Mercator |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 14.11.2006 Репутация: 1 Всего: 2 |
Взять книжку по си и почитать, что делать с файлами.
|
|||
|
||||
Hersio |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 12.11.2006 Репутация: нет Всего: нет |
Книга есть по С++ но там слишком замудрено и непонятно.
Вообще алгоритм какой? Открыть файл записать в массив а - фамилию, в б - Имя, в с- отчество, потом две переменые для года и номера. Вот как дальше то ? Потом сравнивать строки и искать на повторение марки и года выпуска, далее создать новый файл и туа записать результаты? Это сообщение отредактировал(а) Hersio - 5.12.2006, 19:05 |
|||
|
||||
Mercator |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 14.11.2006 Репутация: 1 Всего: 2 |
Hersio, пожалуйста, уточните, надо ли вам на си или си++, потому что у них файловый ввод-вывод разный. И если надо все-таки на си, то читайте книжку по си. И надо скорее всего пользоваться структурами, то есть информацию по каждому владельцу хранить в каждом отдельном экземпляре объявленной вами соответствующей структуры, то есть объявить стуктуру, создать массив структур и в него и читать (про структуры тоже в книжке). К сожалению, сейчас не имею доступа к конкретным материалам, поэтому только даю совет.
|
|||
|
||||
Hersio |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 12.11.2006 Репутация: нет Всего: нет |
мне нужно на си, вот я понять не могу, мне весь файл в массив а потом посимвольно проверять, или каждую строку? помогите объясните как хоть делать?
|
|||
|
||||
Mercator |
|
|||
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 14.11.2006 Репутация: 1 Всего: 2 |
Hersio, так, давайте следующим образом. Тут два главных аспекта я вижу для вас в задаче: первое - как организовать структуры для хранения данных, второе - непосредственно алгоритм подсчета чего вам надо (кстати, объясните, пожалуйста, более подробно, что именно надо посчитать). Вижу вам никто не пишет, так хоть я чего скажу. К сожалению, на си писала давно и сейчас ничего нет под рукой, поэтому могу только дать направление, куда идти.
Начнем с первого. Не знаю, какие у вас есть книжки по Си, я зашла сюда: http://forum.vingrad.ru/topic-33456.html и скачала книжку номер 8 (на русском, естественно). Керниган и Ритчи знают, о чем говорят, когда пишут про Си. Там читаем раздел "структуры" и создаем свою структуру (н-р, autoOwner) с 6 полями, вам нужными. Скорее всего, строковые поля будут указателями на массив символов. Обращайтесь к книжке, там много полезной информации. Ну а год выпуска и номер автомобиля обычные инты. Я не знаю, как у вас организован файл. Допустим, каждое новое значение в новой строке. У нас должен быть массив структур того типа, какой вы определили. Тогда открываем файл и построчно функцией fgets из нее читаем. Значения первых 6 строчек присваиваем соответствующим полям в первой структурке в массиве, следующих 6 строчек - второй и т.д., пока не кончатся строчки, то бишь, файл. Это вам придется самому подумать, как организовать. Наверное, будет проблема, как прочитанную строчку привести к типу инт для года и номера авто. К сожалению, не помню, как это делается. Поищите сами. Про файлы написано у Кернигана доступно в отдельной главе (открыли файл на чтение, прочитали, закрыли файл. Не забывайте закрывать)). Если я правильно поняла, то надо посчитать для каждого года число автомобилей каждой марки. Я бы наверно сделала так (что-то более простое в голову не пришло). Как бы это объяснить попонятнее... Мне понадобится еще один массив строк (назовем его "Марка" и массив целых чисел ("Год"). А в описание структуры я ввожу еще два целочисленных поля, типа марка_id и год_выпуска_id. Фактически каждой отдельной марке (это же строка, да?) я хочу поставить в соответствие целое число, назовем его идентификатором марки, а каждому встречающемуся году - свой идентификатор года. Таким образом в дополнительном массиве строк "Марка" у меня на i-том месте будет записана какая-то марка машины (все марки, естественно, по одному разу), то же самое для года выпуска. Будем считать, что у нас есть уже готовый массив структур с данными, прочитанными из файла. Теперь мне надо в цикле просмотреть все структуры и заполнить эти поля идентификаторы, то есть привести к виду, что например если 3-им элементом у меня в массиве "Марка" идет марка "Хонда", то все структуры с "Хондой" должны в поле марка_id иметь 3, то же самое с годом выпуска. Это можно сделать за один проход массива структур, одновременно заполняя поля-идентификаторы и формируя нужные массивы. Фактически я "проиндексировала" марки и года выпуска. Далее я делаю квадратную матрицу m*n, где m - число разных марок (фактически количество строк в массиве "Марка"), n - число разных годов выпуска. Пусть это будет матрица А и она вся нулевая. Потом еще раз просматриваю массив структур и для каждой увеличиваю А[марка_id][год_выпуска_id] на единицу. В результате получаю матрицу с нужным количеством машин i-той марки j-того года выпуска. Далее тупо просматриваю матрицу и если элемент больше 0 (А[i][j]>0)пишу в файл, что мол в год[j] было А[i][j] машинок марки Марка[i] (то есть как бы обратная замена: вместо индексов - реальные значения). Вот мне как-то так видится.... А для сравнения строк скорее всего придется написать отдельную функцию посимвольного сравнения, на вход подаете две строки (по-видимому, два указателя на char) и на выходе "истина" или "ложь" Прошу прощения, если что не так))) |
|||
|
||||
Hersio |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 12.11.2006 Репутация: нет Всего: нет |
Mercator Большое вам спасибо, сам принцип я понел, а вот как это организовать? Хотелось бы чтобы помог Олегыч)
Олегыч помоги сделаю всё что хочешь |
|||
|
||||
Oleg_Ci |
|
|||
Friend Профиль Группа: Участник Сообщений: 485 Регистрация: 28.5.2006 Где: Новосиб.обл. Репутация: 25 Всего: 30 |
Тут наверно на курсовик потянет
|
|||
|
||||
Oleg_Ci |
|
|||
Friend Профиль Группа: Участник Сообщений: 485 Регистрация: 28.5.2006 Где: Новосиб.обл. Репутация: 25 Всего: 30 |
Ну если создавать файл не надо, то так мажно попробовать
|
|||
|
||||
Hersio |
|
|||
Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 12.11.2006 Репутация: нет Всего: нет |
Вот большое тебе спасибо и респект, ты мозг Шас буду разбираться Если, что-нибудь понадобится пиши, сделаю всё возможное
|
|||
|
||||
Правила форума "Центр помощи" | |
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Центр помощи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |