Записать в файл h все совпадающие строки файлов f и g - Free Pascal

Узнай цену своей работы

Формулировка задачи:

Добрый вечер=) Подскажите пожалуйста, было задание: Даны файлы f и g. Записать в файл h все совпадающие строки файлов f и g, если таких строк нет, то в файл h записать строки из файлов f и g, чередуя их, начиная с первой из файла f Так вот, дошла в программе до момента, когда в файлах нет одинаковых строк, и нужно строки из файлов f и g записать чередуя их начиная с первой из файла f в файл h. Я попробовала вот так(вот моя программа). Но здесь сначала записывается первая строка из файла f а затем весь файл g, потом вторая строка из файла f, а затем весь файл g и т.д. Подскажите, как правильно сделать(
Листинг программы
  1. Program File;
  2. var a, b:array of string;
  3. f, g, h: textfile;
  4. i, j: byte;
  5. Flag: boolean;
  6. begin
  7. Flag:=false;
  8. Assign(f, 'f.txt');
  9. Assign(g, 'g.txt');
  10. Assign(h, 'h.txt');
  11. Reset(f);
  12. while not eof(f) do begin
  13. SetLength(a,Length(a)+1);
  14. Readln(f,a[High(a)]);
  15. end;
  16. Reset(g);
  17. while not eof(g) do begin
  18. SetLength(b,Length(b)+1);
  19. Readln(g, b[High(b)]);
  20. end;
  21. Rewrite(h);
  22. for i:=Low(a) to High(a) do
  23. for j:=Low(b) to High(b) do begin
  24. if a[i]=b[j] then
  25. begin
  26. Writeln(h, a[i]);
  27. Flag:=true;
  28. end;
  29. end;
  30. Close(h);
  31. if flag=false then
  32. begin
  33. Rewrite(h);
  34. begin
  35. for i:=Low(a) to High(a) do begin
  36. Writeln(h, a[i]);
  37. for j:=Low(b) to High(b) do
  38. writeln(h, b[j]);
  39. end;
  40. end;
  41. end;
  42. end.

Решение задачи: «Записать в файл h все совпадающие строки файлов f и g»

textual
Листинг программы
  1. var a, b:array of string;
  2.     f, g, h: textfile;
  3.     i, j: byte;
  4.     Flag: boolean;
  5. begin
  6. Assign(f, 'f.txt');
  7. Assign(g, 'g.txt');
  8. Assign(h, 'h.txt');
  9. Reset(f);
  10. while not eof(f) do
  11.  begin
  12.   SetLength(a,Length(a)+1);
  13.   Readln(f,a[High(a)]);
  14.  end;
  15. Reset(g);
  16. while not eof(g) do
  17.  begin
  18.   SetLength(b,Length(b)+1);
  19.   Readln(g, b[High(b)]);
  20.  end;
  21. Rewrite(h);
  22. Flag:=false;
  23. for i:=Low(a) to High(a) do
  24. for j:=Low(b) to High(b) do
  25. if a[i]=b[j] then
  26.  begin
  27.   Writeln(h, a[i]);
  28.   Flag:=true;
  29.  end;
  30. Close(h);
  31. if flag=false then
  32.  begin
  33.   Rewrite(h);
  34.   for i:=Low(a) to High(a) do
  35.    begin
  36.     Writeln(h, a[i]);
  37.     writeln(h, b[i]);
  38.    end;
  39.  end;
  40. close(h);
  41. write('Fail zapisan');
  42. readln
  43. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы