![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() |
Natalia |
![]() ![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Женский Репутация: ![]() ![]() ![]() |
Доброго времени суток! Помогите исправить ошибки в задаче. Певрый раз пишу такое длинное решение. Условие такое: Создать два файла персон, содержащие записи вида "Алла Борисовна Пугачёва". Отсортировать оба файла в обратном порядке по именам. Написать программу слияния содержимого двух файлов в третий, отсортированный в том же порядке.
Общий костяк программы нам дали на уроке (т. е. список названий процедур и функции). По нему составила программу. Но у меня ошибка: переполнение стека. +Я не понимаю перехода от файла к строке (связки) и связи процедур - могла напутать. Помогите разобраться. Код type massive=array[1..100] of string;{Первые три процедуры: чтение, запись в файл и сортировка - входят в процедуру слияния-Сборка} procedure read_data(fn:string; var mas:massive; n:integer); var f:text; begin assign(f,fn); reset(f); n:=0; while not eof(f) do begin n:=n+1; read(f,mas[n]); end; close(f); end; procedure write_data(fn:string; var mas:massive; n:integer); var f:text; i:integer; begin assign(f,fn); rewrite(f); for i:=1 to n do writeln(f,mas[i]); close(f); end; procedure sort_data(mas:massive; n:integer); var i,j:integer; exchange:string; begin for i:=1 to n-1 do for j:=1 to n-i do if mas[j]<mas[j+1] then begin exchange:=mas[j]; mas[j]:=mas[j+1]; mas[j+1]:=exchange; end; end; procedure sort(fn:string);{Процедура слияния. Сборка} var mas:massive; n:integer; begin read_data(fn,mas,n); sort_data(mas,n); write_data(fn,mas,n); end; procedure copy_files(var f,f_res:text); {При слиянии копирует оставшийся файл (первый или второй) в третий} var n:integer; begin n:=0; while not eof(f) do begin n:=n+1; readln(f,n); writeln(f_res,n); end; end; function test_files(var f1,f2,f_res:text):boolean; {функция проверки: пустой ли файл, если да, то копируется в третий файл с помощью функции} begin if eof(f1) then begin copy_files(f2,f_res); test_files:=false; end else if eof(f2) then begin copy_files(f1,f_res); test_files:=false; end else test_files:=true; end; procedure merge_files(var f1,f2,f_res:text); {процедура слияния} var a,b:string; begin readln(f1,a); readln(f2,b); while not eof(f1) and not eof(f2) do begin if a>b then begin writeln(f_res,a); read(f1,a); end else begin writeln(f_res,b); read(f2,b); end; end; test_files(f1,f2,f_res); end; procedure merge(fn1,fn2,fn_res:string); {Сборка. Процедура слияния файлов} var f1,f2,f_res:text; a,b:string; begin assign(f1,fn1); reset(f1); assign(f2,fn2); reset(f2); assign(f_res,fn_res); rewrite(f_res); if test_files(f1,f2,f_res) then merge_files(f1,f2,f_res); close(f1); close(f2); close(f_res); end; var a,b,c:text; {основная программа} begin sort('a.txt'); sort('b.txt'); merge('a.txt','b.txt','c.txt'); end. Сообщение отредактировано: Natalia - 20.11.2006 23:35 |
![]() ![]() |
![]() |
Текстовая версия | 25.06.2025 1:48 |