Top.Mail.Ru
Ответы
Аватар пользователя
9лет
Изменено
Аватар пользователя
Аватар пользователя
Аватар пользователя
Программирование
+3

Помогите с Паскалем

Даны две строки. Необходимо поменять местами последние слова этих строк. Написал программу. Не работает. Где в ней ошибки?

Дополнен
По дате
По рейтингу
Аватар пользователя
Знаток
9лет

Ошибка, например, в циклах for.
Я бы сделал так:
http://pascalabc.net/WDE/?file=06257.pas

Program LastWorlds;
var str1,str2,a,b: string;
i:integer;
pos1,pos2: integer;
begin
write('1st string: ');
readln(str1);

write('2nd string: ');
readln(str2);

str1 := TrimRight(str1);
str2 := TrimRight(str2);

i:=Length(str1);
while str1[i] <> ' ' do
begin
i:=i-1;
end;
pos1 := i;

i:=Length(str2);
while str2[i] <> ' ' do
begin
i:=i-1;
end;
pos2 := i;

a:= RightStr(str1,Length(str1)-pos1);
b:= RightStr(str2,Length(str2)-pos2);

str1:= LeftStr(str1,pos1) + b;
str2:= LeftStr(str2,pos2) + a;

Writeln(str1);
Writeln(str2);

end.

Источник: <a rel="nofollow" href="http://pascalabc.net/WDE/?file=06257.pas" target="_blank">http://pascalabc.net/WDE/?file=06257.pas</a>
Аватар пользователя
Гуру
9лет

Зачем такие сложности?
Так можно:
program words;
var
str1, str2, temp: string;
begin
Writeln('Введи первое слово');
Readln(str1);
Writeln('Введи второе слово');
Readln(str2);
temp := str1;
str1 := str2;
str2 := temp;
Writeln('Первое слово теперь ',str1);
Writeln('Второе слово теперь ',str2);
end.

Аватар пользователя
Профи
9лет

вы стирайте каждый раз как попадает пробел? плохо различимы 1 и i на скрине

Аватар пользователя
9лет

В строке
for i:=1 downto Length(str1) do
ошибка!! Правильнее будет
for i:=Length(str1) downto 1 do

Ведь проверка должна быть с конца! слова, значит, не с 1-го символа, а с последнего!

P.S.
Короче, вот так работает правильно:

Добавить переменные l1 и l2: (L1 и L2, если заглавные буквы)
l1,l2: integer;
А после TrimRight написать так:

for i:=Length(str1) downto 1 do
if str1[i]=' ' then
begin
a:=copy(str1,i+1,255);
l1:=i;
break;
end;
for i:=Length(str2) downto 1 do
if str2[i]=' ' then
begin
b:=copy(str2,i+1,255);
l2:=i;
break;
end;
str1:=copy(str1,1,l1)+b;
str2:=copy(str2,1,l2)+a;

Ну, а потом WriteLn...

Аватар пользователя
9лет

Еще актуально? а то чтот все решения громоздкие =)