Записать в файл h все совпадающие строки файлов f и g - Free Pascal
Формулировка задачи:
Добрый вечер=) Подскажите пожалуйста, было задание:
Даны файлы f и g. Записать в файл h все совпадающие строки файлов f и g, если таких строк нет, то в файл h записать строки из файлов f и g, чередуя их, начиная с первой из файла f
Так вот, дошла в программе до момента, когда в файлах нет одинаковых строк, и нужно строки из файлов f и g записать чередуя их начиная с первой из файла f в файл h. Я попробовала вот так(вот моя программа). Но здесь сначала записывается первая строка из файла f а затем весь файл g, потом вторая строка из файла f, а затем весь файл g и т.д. Подскажите, как правильно сделать(
Program File;
var a, b:array of string;
f, g, h: textfile;
i, j: byte;
Flag: boolean;
begin
Flag:=false;
Assign(f, 'f.txt');
Assign(g, 'g.txt');
Assign(h, 'h.txt');
Reset(f);
while not eof(f) do begin
SetLength(a,Length(a)+1);
Readln(f,a[High(a)]);
end;
Reset(g);
while not eof(g) do begin
SetLength(b,Length(b)+1);
Readln(g, b[High(b)]);
end;
Rewrite(h);
for i:=Low(a) to High(a) do
for j:=Low(b) to High(b) do begin
if a[i]=b[j] then
begin
Writeln(h, a[i]);
Flag:=true;
end;
end;
Close(h);
if flag=false then
begin
Rewrite(h);
begin
for i:=Low(a) to High(a) do begin
Writeln(h, a[i]);
for j:=Low(b) to High(b) do
writeln(h, b[j]);
end;
end;
end;
end.Решение задачи: «Записать в файл h все совпадающие строки файлов f и g»
textual
Листинг программы
var a, b:array of string;
f, g, h: textfile;
i, j: byte;
Flag: boolean;
begin
Assign(f, 'f.txt');
Assign(g, 'g.txt');
Assign(h, 'h.txt');
Reset(f);
while not eof(f) do
begin
SetLength(a,Length(a)+1);
Readln(f,a[High(a)]);
end;
Reset(g);
while not eof(g) do
begin
SetLength(b,Length(b)+1);
Readln(g, b[High(b)]);
end;
Rewrite(h);
Flag:=false;
for i:=Low(a) to High(a) do
for j:=Low(b) to High(b) do
if a[i]=b[j] then
begin
Writeln(h, a[i]);
Flag:=true;
end;
Close(h);
if flag=false then
begin
Rewrite(h);
for i:=Low(a) to High(a) do
begin
Writeln(h, a[i]);
writeln(h, b[i]);
end;
end;
close(h);
write('Fail zapisan');
readln
end.
Объяснение кода листинга программы
- Объявлены четыре переменные: f, g, h (файлы), a, b (массивы).
- Файлы f и g открываются на чтение, файл h открывается на запись.
- Данные из файлов f и g считываются в массивы a и b соответственно.
- Если длина массива a или b увеличивается, то новый элемент добавляется в конец массива.
- Если файл h существует, то он перезаписывается.
- Переменная Flag инициализируется как false.
- Для каждой строки в массиве a выполняется поиск соответствующей строки в массиве b.
- Если строки совпадают, то они записываются в файл h.
- Если Flag остается равным false после цикла, то в файл h записываются все строки из массива a и b.
- Файл h закрывается.
- Выводится сообщение
Fail zapisan. - Программа ожидает ввода с клавиатуры.