![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Здраствуйте. Нужна помощь
Вот условие задачи: "Из двух типизированных файлов с компонентами записей type Stud = record Year: Integer; Name: String[20]; end; получить текстовый файл, в котором объединены эти два файла, но повторяющихся записей быть не должно. в каждом из файлов по отдельности повторяющихся записей нет. а если вместе то могут быть. отсортировать результирующий файл по убыванию года. вывести на экран исходные файлы, результирующий файл." пример: 1 файл Alexander 1989 Masha 1983 2 файл Misha 1932 Gera 1902 Masha 1983 результирующий файл: Alexander 1989 Masha 1983 Misha 1932 Gera 1902 Бьюсь над этой прогой уже довольно долго, получаю всевозможные ошибки. Через минут 5 выложу свой код, но он не правильно работает(поясню почему). Пожалуйста если есть возможность напишите эту программу, по примеру я всё пойму. (через 5 минут своё выложу) |
#2
|
||||
|
||||
![]() Код:
var f: file of Stud; i, j, n, k: integer; a1, a2: array of Stud; t: Stud; begin AssignFile(f, 'C:\file1.dat'); Reset(f); i := 0; while not eof(f) do begin SetLength(a1, i + 1); Read(f, a1[i]); inc(i); end; CloseFile(f); AssignFile(f, 'C:\file2.dat'); Reset(f); n := 0; while not eof(f) do begin SetLength(a2, n + 1); Read(f, a2[n]); inc(n); end; CloseFile(f); j := i; dec(n); while n >= 0 do begin k := i - 1; while k >= 0 do begin if (a1[k].Name = a2[n].Name) and (a1[k].Year = a2[n].Year) then break; dec(k); end; if k = -1 then begin SetLength(a1, j + 1); a1[j].Year := a2[n].Year; a1[j].Name := a2[n].Name; inc(j); end; dec(n); end; // Sorting for i := 0 to j - 2 do begin for n := i + 1 to j - 1 do if (a1[i].Year > a1[n].Year) then begin t.Year := a1[i].Year; t.Name := a1[i].Name; a1[i].Year := a1[n].Year; a1[i].Name := a1[n].Name; a1[n].Year := t.Year; a1[n].Name := t.Name; end; end; AssignFile(f, 'C:\file.dat'); Rewrite(f); for i := 0 to j - 1 do begin Write(f, a1[i]); Writeln(a1[i].Year, ' ', a1[i].Name); end; CloseFile(f); Writeln('Ready'); Readln; end. Меня греют ваши плюсы к моей репутации... |
#3
|
|||
|
|||
![]() файл 1
alexander1992 masha1992 или alexander 1992 masha 1992 пробовал итак и так файл 2 alexander1992 petr1982 bora1711 и с пробелами пробовал. результат на экране : 1919902218 lexander1992 petr19 Ready результат в файле (*)lexander1992 petr19 bor (заместо * там стоит странный значёк) Явно видно, что программа работает не верно. обрезаются имена, выводятся странные цифры и значки. |
#4
|
||||
|
||||
![]() Цитата:
Ну дык ты же щас приводишь просто список имен и годов, это не типизированный. ![]() Меня греют ваши плюсы к моей репутации... Последний раз редактировалось BoRoV, 13.12.2010 в 20:46. |
#5
|
|||
|
|||
![]() типизированный, это когда все переменные байтовые ?
что-то я не очень понял как он задаётся. в самом компиляторе создаётся? (у нас этой темы не было на лекциях, поэтому я так фейлю, пытаюсь гуглить, но там только про байты говорят, а примера нет) |
#6
|
||||
|
||||
![]() Цитата:
Код:
var f: file of Stud; Меня греют ваши плюсы к моей репутации... |