Помощь - Поиск - Пользователи - Календарь
Полная версия: Помогите написать программу сравнения двух строк
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Alexa911
Помогите, пожалуйста, написать программу сравнения двух строк. Программа должна читать строки из файла и сравнивать нечетные и четные строки, которые следуют друг за другом. Я уже ломаю голову как оформить текст программы, но ничего не получается.
Федосеев Павел
А что уже получилось?
Alexa911
не поняла вопрос?
Федосеев Павел
Цитата(Alexa911 @ 17.02.2016 21:10) *

Я уже ломаю голову как оформить текст программы, но ничего не получается.

Кроме ломания, должны существовать какие либо следы научной деятельности. Например, наброски кода.
bel100
Цитата(Федосеев Павел @ 18.02.2016 21:17) *

Цитата(Alexa911 @ 17.02.2016 21:10) *

Я уже ломаю голову как оформить текст программы, но ничего не получается.

Кроме ломания, должны существовать какие либо следы научной деятельности. Например, наброски кода.

var s1,s2,sn:string;
a,b,i,n:integer;
s:array[1..255] of integer;
input,output:text;
begin
assign(input,'input.txt');
reset(input);
n:=1;
for i:=1 to n do
n:=n+1;
writeln(n);
readln(input,s1);
readln(input,s2);
if n mod 2 = 0 then writeln('Строка 1 чётная');
if n mod 2 = 1 then writeln('Строка 1 не чётная');
a:=length(s1);
b:=length(s2);
close(input);
writeln(a);
writeln(b);
if a > b then writeln('Строка 1 больше строки 2');
if a < b then writeln('Строка 1 меньше строки 2');
if a = b then writeln('Строка 1 равна строке 2');
end.
То же не получается полностью выполнить условия задачи:
1) Как пронумеровать и подсчитать количество строк в тексте?
2) Как разбить строки на пары?
Заранее благодарен тому кто сможет разжевать!
Федосеев Павел
Чтение из файла производится циклом while, т.к. заранее неизвестно количество строк.
Цикл for при инициализации определяет количество итераций и дальнейшее увеличение n в теле цикла уже не приводит к увеличению итераций. Это поведение прописано в стандарте Pascal.

Я не понимаю, какие строки должны сравниваться. Вот сравнили 1-ю и 2-ю, следом нужно сравнивать 2-ю и 3-ю или же 3-ю и 4-ю?

Если просто сравнивать строку с предыдущей, и сравнение выполнять по длине строки, то можно так
program CmpStr;

var
StrPrev, StrCurr: string;
LineNumber: integer;
begin

Assign(input, 'input.txt');
reset(input);
LineNumber := 0;
if not EOF(input) then
begin
readln(StrPrev);
LineNumber := 1;
end;
while not EOF(input) do
begin
{считываем очередную строку}
readln(StrCurr);
{увеличиваем количество считанных строк на 1}
Inc(LineNumber);

{сравниваем строки по их длине}
if length(StrCurr) > length(StrPrev) then
writeln('Строка ', LineNumber, ' больше строки ', pred(LineNumber));
if length(StrCurr) < length(StrPrev) then
writeln('Строка ', LineNumber, ' меньше строки ', pred(LineNumber));
if length(StrCurr) = length(StrPrev) then
writeln('Строка ', LineNumber, ' равна строке ', pred(LineNumber));

{для следующей итерации цикла текущая строка становится предыдущей}
StrPrev := StrCurr;
end;
Close(input);
end.
bel100
Спасибо за подсказку(по поводу цикла while), сравнивать нужно первую и вторую, третью и четвёртую и так далее пока не кончатся строки (общее количество неизвестно, зависит от документа( в идеале должен считать любой текстовый документ).
var s1,s2:string;
a,b,i,n:integer;
input,output:text;
begin
assign(input,'input.txt');
reset(input);
n:=0;
while not eof(input) do
for i:=1 to n do
readln(input,s2);
readln(input,s1);
a:=length(s1);
b:=length(s2);
close(input);
writeln(a);
writeln(b);
if a > b then writeln('Строка 1 больше строки 2');
if a < b then writeln('Строка 1 меньше строки 2');
if a = b then writeln('Строка 1 равна строке 2');
assign(output,'output.csv');
rewrite(output);

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