Записать в файл 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.

Объяснение кода листинга программы

  1. Объявлены четыре переменные: f, g, h (файлы), a, b (массивы).
  2. Файлы f и g открываются на чтение, файл h открывается на запись.
  3. Данные из файлов f и g считываются в массивы a и b соответственно.
  4. Если длина массива a или b увеличивается, то новый элемент добавляется в конец массива.
  5. Если файл h существует, то он перезаписывается.
  6. Переменная Flag инициализируется как false.
  7. Для каждой строки в массиве a выполняется поиск соответствующей строки в массиве b.
  8. Если строки совпадают, то они записываются в файл h.
  9. Если Flag остается равным false после цикла, то в файл h записываются все строки из массива a и b.
  10. Файл h закрывается.
  11. Выводится сообщение Fail zapisan.
  12. Программа ожидает ввода с клавиатуры.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.769 из 5
Похожие ответы