Помощь - Поиск - Пользователи - Календарь
Полная версия: текстовые файлы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
katafract
Народ, у меня последняя зачётная неделя, а я никак не могу решить вот эту задачу:

Даны два текстовых файла F u G. Определить, совпадают ли компоненты этих файлов. Если нет, то получить номер первого несовпадающего компонента. В случае, когда один из файлов имеет n компонентов(n=>0) и повторяет начало другого более длинного, то ответом должно быть n+1.
Пример:

File1.txt File2.txt
Abcd abcdefg

В этом случае ответ 5, т.к. File2 длиннее File1.

File1.txt File2.txt
Abcd abgdtrfg

А здесь ответ 3…


Вообще-то она на вид лёгкая, но у меня после 2-ух недель практики за электрорадиоизмерительными приборами голова не работает… wacko.gif
А самая главная проблема в том, что я не могу понять с чего начать: с While(not EOF(file1)) While(not EOF(file2))… Помогите, пожалуйста!!!:(
мисс_граффити
открыть файлы и все такое... потом:
 while not(EOF(file1)) and not(EOF(file2)) do

а еще я бы добавила флажок и выходила из этого цикла, как только встречу несовпадение.
katafract
Цитата(мисс_граффити @ 22.12.2006 22:20) *

открыть файлы и все такое... потом:
 while not(EOF(file1)) and not(EOF(file2)) do

а еще я бы добавила флажок и выходила из этого цикла, как только встречу несовпадение.



А после "открыть файлы и всё такое..." поподробнее нельзя? unsure.gif
мисс_граффити
считывать компонент из первого, считывать из второго.
переменная-счетчик изменяется на 1.
сравнивать.
если равны - цикл продолжается....
если нет - пользуешься переменной-флажком, о которой я говорила.
после выхода из цикла смотришь, почему вышел: если кончились оба файла и переменная осталась истиной, значит, все совпало. если нет - выводишь значение переменной-счетчика.

полностью код писать не буду.
пробуй сам. не получится - спрашивай.
katafract
Цитата(мисс_граффити @ 24.12.2006 0:04) *

...

Спасибо good.gif
katafract
Вот так вот подойдёт?
Program Lab;
Uses crt;
Var
F,G:text;
K,i,j:integer;
st1,st2:string;
BEGIN
Assign(F,’C:\f1.txt’);
Reset(F);
Assign(G,’C:\g1.txt’);
Reset(G);
K:=1;

While (not EOF(F)) and (not EOF(G)) do begin
Readln(f,st1);
Readln(g,st2);

For j:=1 to length(st2) do begin
If st1[i] = st2[j] then begin
K:=k+1
i:=i+1
end;
Else
Writeln(‘Позиция первого несовпадающего элемента равна’, k);
End;
End;
Close(f);
Close(g);
END.



Немного не так, как ты посоветовала, но это всё, до чего я додумался... rolleyes.gif

М
теги...
мисс_граффити

мисс_граффити
я бы все же задала начальное значение i
и еще... представь, у тебя много элементов не совпадает. что получится? вставь, что ли, break какой-нибудь после
Writeln(‘Позиция первого несовпадающего элемента равна’, k);
katafract
Вот так вот?

Program Lab_2;
Uses crt;
Var
F,G:text;
K,i,j:integer;
St1,st2:string;
Pr:Boolean;

BEGIN
Assign(F,’C:\f1.txt’);
Reset(F);
Assign(G,’C:\g1.txt’);
Reset(G);
K:=1;
Pr:=true;

While (not EOF(F)) and (not EOF(G)) do begin
Readln(f,st1);
Readln(g,st2);

For j:=1 to length(st2) do begin
If st1[i] = st2[j] then
begin
K:=k+1;
i:=i+1;
Pr:=true;
end;
Else
begin
Pr:=false:
Writeln(‘Позиция первого несовпадающего элемента равна’, k);
End;
End;
If pr then writeln(‘Элементы файла равны, но т.к. меньший файл имеет’,k-1,’элементов, то номер первого несовпадающего элемента будет’,k);
End;
Close(f);
Close(g);
END.
мисс_граффити
теги!!!!
katafract
блин, я же говорю, что не понимаю... я этот Паскаль только третий месяц учу...
мисс_граффити
да при чем здесь паскаль?
видишь, как в моих сообщениях код рамочкой обводится?
у тебя так же должно быть.
вместо [cоlor=...] надо писать [ code = pas] [ / code] (без пробелов).

For j:=1 to length(st2) do begin
If st1[i] = st2[j] then
begin
K:=k+1;
i:=i+1;
Pr:=true;
end;

не боишься, что st1 закончится раньше, чем st2?
katafract
вот об этом я тоже думал...Не поможешь? smile.gif
мисс_граффити
пока не отредактируешь свое сообщение - нет.
katafract
Отредактировал...Мне тут ещё преподаватель подсказал, что надо команду Break поставить после
Writeln(‘Позиция первого несовпадающего элемента равна’, k)
для выхода из цикла, чтобы просматривать не все элементы, а только до первого несовпадающего...это как?
мисс_граффити
слушай, а ты читаешь, что я тебе пишу?
сообщение #7 в частности...
katafract
Цитата(мисс_граффити @ 29.12.2006 23:42) *

слушай, а ты читаешь, что я тебе пишу?
сообщение #7 в частности...

Ой, извини...просто в то время до меня просто не дошло что это означает, а когда узнал о "Break" у меня просто из головы вылетело про сообщение номер 7... mega_chok.gif
katafract
Мисс Граффити
Ну где же ты? cray.gif
Archon
Цитата
Мисс Граффити
Ну где же ты?
В смысле ты ещё не понимаешь "это как" или чего другое? Если первое - ответ: буквально. После указанной строчки ставь команду
...
Break;
...
она прерывает выполнение цикла.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.