Записать в файл 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
. - Программа ожидает ввода с клавиатуры.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д