Wyrazy wspak, konkretne zadanie

0

Cześć. Mam taki kod

uses
  SysUtils;
var
slowo, temp: String;
i: Integer;
procedure inwersja(slowo, temp: String; i: Integer);
var
n, m: Integer;
begin
m:=i;
  for n:=1 to i do
    begin
    slowo[i]:=temp[n];
    slowo[i]:=slowo[n];
    slowo[n]:=temp[n];
    i:=i-1;
    end;
end;

begin
 readln(slowo);
 i:= length(slowo);
 writeln(i);
 inwersja(slowo,temp, i);
 writeln(slowo);
 readln;
end.

i takie zadanie "Napisz program (nie rekurencyjnie) który zapisuje słowo wspak. Program
ma wykorzystywać osobna procedurę zamiany wartości dwóch zmiennych." Jakieś pomysły co jest źle? Znaczy, dlaczego program nie działa?

0

Tutaj masz źle:

procedure inwersja(slowo, temp: String; i: Integer);
var
n, m: Integer;
begin
m:=i;
  for n:=1 to i do
    begin
    slowo[i]:=temp[n];
    slowo[i]:=slowo[n];
    slowo[n]:=temp[n];
    i:=i-1;
    end;
end;

Powinno być:

procedure inwersja(var slowo: string; temp: String);
var
n, m, i: Integer;
begin
m:=i;
I := Length(Slowo);
  for n:=1 to i do
    begin
    slowo[i]:=temp[n];
    slowo[i]:=slowo[n];
    slowo[n]:=temp[n];
    i:=i-1;
    end;
end;

Tak mi się w każdym razie wydaje ;-)

1

Musisz użyć oddzielnej funkcji do zamiany! Na przykład:

procedure zamiana(var pierwsza_litera, druga_litera: Char);
begin
  //cośtam
end;

Po drugie, musisz zauważyć, że wszystkie litery zostaną zamienione już w i div 2 operacji (bo zamieniasz literę z lewej strony z literą z prawej strony; wtedy ustawiasz 2 litery w porządku za jednym razem); po wykonaniu i operacji znowu odwrócisz ciąg, czyli powrócisz do punktu wyjścia :D

0

OK, już mam dzięki! Słuszna uwaga z tym i div 2 :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1