Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Строка наоборот. Упражнение из учебника. (http://www.tehnari.ru/f41/t33284/)

Linka 19.02.2010 01:58

Строка наоборот. Упражнение из учебника.
 
Задание:
Перевернуть введенную строку. (Например из "диск" получится "ксид").

У меня получилось сделать только так:
Код:

program reversed_string;

var s1:string;
  h,i,n:integer;
  g:char;

begin
readln(s1);
n:=Length(s1);
i:=0;
h:=n;
for i:=0 to h do
begin
g:=s1[n];
write(g);
n:=n-1;
        end;

readln;

end.

Все как бы работает. Но как можно иначе сделать ? Чтобы строка "учавствовала", а не один символ ? Спасибо.

Long Cat 19.02.2010 02:51

Это очень плохое решение.
Сделайте так:
Пройдите по строке от начала до середины, меняя первый элемент с последним, второй с предпоследним, и так далее.

Linka 19.02.2010 03:15

Я именно так и начинал, но вот как раз после середины, показывает неверно.. Что надо делать после середины ?

Код:

program reversed_string;

var s1:string;
  i,n:integer;

begin
readln(s1);
n:=Length(s1);
i:=1;

while (i<=n) do
begin
s1[i]:=s1[n];
i:=i+1;
n:=n-1;
        end;
        writeln(s1);
readln;

end.


Long Cat 19.02.2010 04:27

После середины ничего делать не нужно. Попробуйте на бумаге - поймете.

Linka 19.02.2010 05:36

Не понял( Но на бумаге все красиво =)

Получилось только вот так, со второй одинаковой строкой, и еще ондой переменной:
Код:

program reversed_string;

var s1,s2 : string;
  h,i,n : integer;

begin
readln(s1);
n:=Length(s1);
s2:=s1;
i:=1;
h:=n;
while (i<=h) do
begin
s1[i]:=s2[n];
i:=i+1;
n:=n-1;
        end;
        writeln(s1);
readln;

end.


Long Cat 19.02.2010 05:43

Код:

for i:=1 to length(s) div 2 do
begin
  t:=s[i];
  s[i]:=s[length(s)-i+1];
  s[length(s)-i+1]:=t;
end



Часовой пояс GMT +4, время: 07:50.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.