Agnus:Dei
Сообщение
#13171 3.4.2008, 13:59
Задача следующая:
Дан файл, содержащий сведения о сотрудниках отдела учреждения.
Структура записи файла: фамилия, имя, отчество сотрудника, год рождения, должность, домашний телефон, домашний адрес. Записи в файле не упорядочены.
Написать программу которая:
- упорядочивает записи в алфавитном порядке, используя список, и записывает их в новый файл;
- печатает список сотрудников (в алфавитном порядке), у которых есть домашний телефон, выводить только ф.и.о. и номер телефона.
Вопрос - как упорядочить записи в алфавитном порядке и записать их в новый файл?
Последний раз садился за TC в прошлом году, ничего не помню - помогите, пожалуйста.
creer
Сообщение
#13187 3.4.2008, 15:35
Давайте Вы напишете как читаете из файла, а как отсортировать полученные данные я покажу.
Agnus:Dei
Сообщение
#13199 3.4.2008, 17:20
Код
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
Сообщение
#13200 3.4.2008, 17:48
Хм. Я думал что Вы все элементы из файла считываете, скажем, в массив. Тогда можно было бы применить qsort().
Если считывать по одному, то это усложнит сортировку.
Agnus:Dei
Сообщение
#13202 3.4.2008, 18:42
Ох, подскажите пожалуйста тогда как это сделать - я это-то с трудом из себя выдавил, абсолютно всё забыл.
creer
Сообщение
#13213 4.4.2008, 13:29
Посмотрите
здесь. Там подобный пример, но попроще.
Agnus:Dei
Сообщение
#13221 4.4.2008, 21:35
Спасибо большое =)
Julia
Сообщение
#13238 5.4.2008, 16:37
Цитата(creer @ 4.4.2008, 2:48)

Хм. Я думал что Вы все элементы из файла считываете, скажем, в массив. Тогда можно было бы применить qsort().
Если считывать по одному, то это усложнит сортировку.
Считывая данные из файла в массив, вы тем самым переносите их из внешней памяти в оперативную. Лучше этого не делать.
creer
Сообщение
#13267 6.4.2008, 12:07
Считывать данные с жесткого диска все равно придется. Если считывать по одной записи, то это усложнит и крайне замедлит сортировку.
На одну запись не потребуется более 512 байт. Значит, полностью перенеся файл в оперативную память, мы займем, имея 10 000 записей, всего 5 Мегабайт.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста,
нажмите сюда.