Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Помогите написать программу сравнения двух строк

Автор: Alexa911 18.02.2016 0:10

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

Автор: Федосеев Павел 18.02.2016 1:10

А что уже получилось?

Автор: Alexa911 18.02.2016 14:09

не поняла вопрос?

Автор: Федосеев Павел 19.02.2016 2:17

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

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

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

Автор: bel100 13.05.2017 21:51

Цитата(Федосеев Павел @ 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) Как разбить строки на пары?
Заранее благодарен тому кто сможет разжевать!

Автор: Федосеев Павел 16.05.2017 1:07

Чтение из файла производится циклом 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 17.05.2017 0:11

Спасибо за подсказку(по поводу цикла 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.