Помощь - Поиск - Пользователи - Календарь
Полная версия: Работа с записью в файлы, циклы, сравнение.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Bulkin
Всем привет!
Есть условия:
В один файл (F) пишем 5 чисел. В другой (G) другие 5 чисел. Пример: 12345 и 34567

Потом читаем их из этих файлов и ищем совпадения, те которые совпали пишем в файл (H1) которые не совпали пишем в другой файл (H2).

Мой результат: в H1 пишет цифру 1, в H2 34567.

Где я ошибься!?

Тело программы:

Program Zapis_i_chtenie;
uses crt;
var
n,i:integer;
fs,gs:integer;
f,g,h1,h2:text;
begin
writeln('Vvedite 5 cyfr dlya F: ');
assign(f,'d:\f.txt');
rewrite(f);
append(f);
for i:=1 to 5 do
begin
write('->');
readln(n);
writeln(f,n);
end;
close(f);
Writeln('Vvedite 5 cyfr dlya G: ');
assign(g,'d:\g.txt');
rewrite(g);
append(g);
for i:=1 to 5 do
begin
write('->');
readln(n);
writeln(g,n);
end;
close(g);
assign(f,'d:\f.txt');
assign(g,'d:\g.txt');
assign(h1,'d:\h1.txt');
assign(h2,'d:\h2.txt');
reset(f);
reset(g);
rewrite(h1);
rewrite(h2);
while not EOF(f) do
begin
Readln(f,fs);
begin
while not EOF(g) do
begin
Readln(g,gs);
if fs=gs
then writeln(h1,gs)
else writeln(h2,gs);
end;
end;
end;
close(f);
close(g);
close(h1);
close(h2);
end.
Lapp
М
Плевать на твою сессию. Сделаешь название по правилам - укажем..

Bulkin
Исправил название темы.
Lapp
Цитата(Bulkin @ 24.11.2010 10:19) *
Потом читаем их из этих файлов и ищем совпадения, те которые совпали пишем в файл (H1) которые не совпали пишем в другой файл (H2).
...
Где я ошибься!?

Много, где.

Смотри, я даю тебе прогу, исправленную НАПОЛОВИНУ.
Program Zapis_i_chtenie;
uses crt;
var
n,i:integer;
fs,gs:integer;
f,g,h1,h2:text;
b: boolean;
begin
writeln('Vvedite 5 cyfr dlya F: ');
assign(f,'f.txt');
rewrite(f);
for i:=1 to 5 do
begin
write('->');
readln(n);
writeln(f,n);
end;
close(f);
Writeln('Vvedite 5 cyfr dlya G: ');
assign(g,'g.txt');
rewrite(g);
for i:=1 to 5 do
begin
write('->');
readln(n);
writeln(g,n);
end;
close(g);
assign(h1,'h1.txt');
assign(h2,'h2.txt');
reset(f);
rewrite(h1);
rewrite(h2);
while not EOF(f) do begin
Readln(f,fs);
reset(g);
b:=true;
while b and not EOF(g) do begin
Readln(g,gs);
if fs=gs then begin
b:=false;
writeln(h1,gs)
end
end;
if b then writeln(h2,fs)
end;
close(f);
close(g);
close(h1);
close(h2);
end.

Существенно:
- добавлена булева переменная b (разбирешься, зачем?)
- reset(g) переставлен внутрь цикла

Несущественно:
- убраны ненужные append и лишние assign, а также begin и end

Эта прога пишет все, что нужно в файл H1. Но в файл H2 она пишет только те несовпавшие числа, которые были в файле f. Остается добавить еще один цикл, тоже двойной. В нем только два отличия от того, что есть.
1. надо поменять местами файлы f и g (g - во внешнем цикле, f - во внутреннем).
2. выкинуть запись в файл h1

В промежутке между этими циклами файл H2 не трогай (не открывай заново). Файл H1 можешь закрыть совсем, он уже готов.
Bulkin
Спасибо, твоя ширина мысли намного больше моей и поэтому я не смог уловить ее. Т.е. решение понимаю, но в циклах уже запутался. (нет опыта).

Спасибо, буду дальше искать кто поможет.

----------
Ребята!
Я могу пополнить мобильный, как оплата за решение задачи, напишите мне рабочий код, мне его сегодня-завтра сдавать преподу.

Спасибо!
Lapp
Вот, бери.
Только прошу: разберись.
Что непонятно - спрашивай.
Program Zapis_i_chtenie;
uses crt;
var
n,i:integer;
fs,gs:integer;
f,g,h1,h2:text;
b: boolean;
begin
writeln('Vvedite 5 cyfr dlya F: ');
assign(f,'f.txt');
rewrite(f);
for i:=1 to 5 do
begin
write('->');
readln(n);
writeln(f,n);
end;
close(f);
Writeln('Vvedite 5 cyfr dlya G: ');
assign(g,'g.txt');
rewrite(g);
for i:=1 to 5 do
begin
write('->');
readln(n);
writeln(g,n);
end;
close(g);
assign(h1,'h1.txt');
assign(h2,'h2.txt');
rewrite(h1);
rewrite(h2);
reset(f);
while not EOF(f) do begin
Readln(f,fs);
reset(g);
b:=true;
while b and not EOF(g) do begin
Readln(g,gs);
if fs=gs then begin
b:=false;
writeln(h1,gs)
end
end;
if b then writeln(h2,fs)
end;
reset(g);
while not EOF(g) do begin
Readln(g,gs);
reset(f);
b:=true;
while b and not EOF(f) do begin
Readln(f,fs);
b:=fs<>gs;
end;
if b then writeln(h2,gs)
end;
close(f);
close(g);
close(h1);
close(h2);
end.

А за деньги - в раздел "Задачи на заказ"..
Гость
Спасибо за решение. Все работает.

Прошу извинить меня за то, что 2 раза нарушил правила Форума.
TarasBer
> В один файл (F) пишем 5 чисел. В другой (G) другие 5 чисел. Пример: 12345 и 34567
> var
> n,i:integer;

Эээээ

> 34567
> integer

Надеюсь, у тебя 32-битный режим?
Lapp
Цитата(TarasBer @ 24.11.2010 12:26) *
Эээээ

> 34567
> integer

Надеюсь, у тебя 32-битный режим?

ээээээээ
Running "h:\...\fp101124_bulkin.exe "
Vvedite 5 cyfr dlya F:
->1
->2
->3
->4
->5
Vvedite 5 cyfr dlya G:
->3
->4
->5
->6
->7


smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.