Помощь - Поиск - Пользователи - Календарь
Полная версия: Как упорядочить в алфавитном порядке? > Информатика / Программирование
Образовательный студенческий форум > Другие дисциплины > Информатика / Программирование
Agnus:Dei
Задача следующая:

Дан файл, содержащий сведения о сотрудниках отдела учреждения.
Структура записи файла: фамилия, имя, отчество сотрудника, год рождения, должность, домашний телефон, домашний адрес. Записи в файле не упорядочены.
Написать программу которая:
- упорядочивает записи в алфавитном порядке, используя список, и записывает их в новый файл;
- печатает список сотрудников (в алфавитном порядке), у которых есть домашний телефон, выводить только ф.и.о. и номер телефона.

Вопрос - как упорядочить записи в алфавитном порядке и записать их в новый файл?
Последний раз садился за TC в прошлом году, ничего не помню - помогите, пожалуйста.
creer
Давайте Вы напишете как читаете из файла, а как отсортировать полученные данные я покажу.
Agnus:Dei
Код

void Alphabet(FILE *fin)
{
    char  fname[13];            /* имя выходного файла */
    FILE *fout;                     /* ссылка на выходной файл */
    struct employee tz;         /* текущая запись файла */

    puts ("\nВведите имя выходного файла");
    gets  (fname);
    fout = fopen(fname,"w");
    rewind(fin);
    while (fgets((char *)&tz,sizeof(struct employee),fin))

    [тут сортировка]

    fclose (fout);
    puts("Запись в файл завершена");
}


Как-то так...
creer
Хм. Я думал что Вы все элементы из файла считываете, скажем, в массив. Тогда можно было бы применить qsort().
Если считывать по одному, то это усложнит сортировку.
Agnus:Dei
Ох, подскажите пожалуйста тогда как это сделать - я это-то с трудом из себя выдавил, абсолютно всё забыл.
creer
Посмотрите здесь. Там подобный пример, но попроще.
Agnus:Dei
Спасибо большое =)
Julia
Цитата(creer @ 4.4.2008, 2:48) *

Хм. Я думал что Вы все элементы из файла считываете, скажем, в массив. Тогда можно было бы применить qsort().
Если считывать по одному, то это усложнит сортировку.

Считывая данные из файла в массив, вы тем самым переносите их из внешней памяти в оперативную. Лучше этого не делать.
creer
Считывать данные с жесткого диска все равно придется. Если считывать по одной записи, то это усложнит и крайне замедлит сортировку.
На одну запись не потребуется более 512 байт. Значит, полностью перенеся файл в оперативную память, мы займем, имея 10 000 записей, всего 5 Мегабайт.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.
Русская версия Invision Power Board © 2001-2024 Invision Power Services, Inc.