


Помогите с Паскалем
Даны две строки. Необходимо поменять местами последние слова этих строк. Написал программу. Не работает. Где в ней ошибки?
Дополнен
Ошибка, например, в циклах 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.
Зачем такие сложности?
Так можно:
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.
вы стирайте каждый раз как попадает пробел? плохо различимы 1 и i на скрине
В строке
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...
Еще актуально? а то чтот все решения громоздкие =)
