Ver. 1.0 Beta, Nie masz kompilatora? Teraz możesz pisać skrypty ONLINE! Wersja podstawowa -nie zawiera wszystkich poleceń Pascala. Służy do nauki podstaw

Pascal

Wsteczwstecz Rekordy i wskaźniki
W góręw górę Podstawy Pascala
Dalejdalej Procedury i funkcje

Szkolne problemy


Odwrócenie liter

Jednym z często spotykanych problemów jest napisanie programu, odwracającego kolejność liter w napisie.


Wystarczy użyć pętli, która podmieni znak z początku na znak z końca i na odwrót, potem zrobi to ze znakiem następnym i następnym aż do... końca napisu? Nie! Gdyby pętla przeszła dalej niż za połowę napisu, zaczęłaby znowu odwracać znaki, które przecież już zostały odwrócone. Efektem nic by się nie zmieniło, choć program byłby napisany ogólnie poprawnie. Pętla odwracająca musi iść od pierwszego znaku, tylko do połowy napisu.


Inny problem pojawi się z zamianą znaku z końca na początkowy I na odwrót. Jaki to problem? Gdy za znak z początku podstawimy znak z końca, to co wstawimy na koniec? Gdybyśmy wstawili teraz znak z początku, to już nie jest to znak, który był rzeczywiście na poczatku. Trzeba po prostu najpierw zapamiętać znak, który jest na początku, potem na początek wstawić znak z końca, a na koniec, ten zapamiętany.



var s : string;
   tmp : char;
   i : Integer;
begin
 ReadLn(s);
 for i := 1 to Length(s) div 2 do {pętla tylko do połowy napisu}
   begin
     tmp := s[i]; {kopiujemy znak z początku}
     s[i] := s[Length(s) + 1 – i]; {wstawiamy znak z końca na początek}
     s[Length(s) + 1 – i] := tmp; {na koniec wstawiamy kopię znaku z początku}
   end;
  WriteLn(s);
end.

Odwrócenie wyrazów

Żeby odwrócić kolejność wyrazów w napisie będziemy musieli wyszukiwać spacje od końca napisu. Gdy znajdziemy spację, kopiujemy wyraz, który będzie za nią do miejsca, na którym skończyliśmy ostatnio i wstawiamy skopiowany wyraz na koniec naszej nowej zmiennej. Idziemy tak aż do pierwszego znaku w napisie.



var s, tmp : string;
    i, koniec : Integer;

begin
  ReadLn(s);
  koniec := Length(s); {To jest numer ostatniego znaku na którym kończymy kopiowanie}
  tmp := '';

  for i := Length(s) downto 1 do {pętla od końca napisu do początku}
    begin
      if s[i] = ' ' then {jeśli znajdziemy spację}
        begin
          tmp := tmp + Copy(s, i + 1, koniec – i) + ' '; {doklejanie wyrazu na koniec}
          koniec := i – 1;
        end;
    end;

  tmp := tmp + Copy(s, 1, koniec);

  WriteLn(tmp);
end.

Kasowanie słowa

Gdy chcemy skasować jakieś słowo trzeba po prostu skopiować wszystko inne.



var s, tmp, wyraz : string;
    i, poczatek : Integer;

begin
  WriteLn('Podaj napis:');ReadLn(s);
  WriteLn('Ktory wyraz skasowac?');ReadLn(wyraz);
  poczatek := 1; {To jest numer znaku od którego zaczynamy kopiowanie}
  tmp := '';

  for i := 1 to Length(s) do
    begin
      if s[i] = ' ' then
        begin
          if Copy(s, poczatek, i – poczatek)<> wyraz then {gdy nie kasowany}
            tmp := tmp + Copy(s, poczatek, i – poczatek + 1); {kopiujemy}

          poczatek := i + 1; {Będziemy zaraz kopiować od znaku za spacją}
        end;
    end;

  if Copy(s, poczatek, Length(s) – poczatek + 1)<> wyraz then
    tmp := tmp + Copy(s, poczatek, Length(s) – poczatek + 1);

  WriteLn(tmp);
end.

Strona korzysta z plików cookie w celu świadczenia usług Google (reklamy, statytyki) oraz Facebook. Jeśli chcesz zablokować pliki cookies wyłacz je w swojej przeglądarce. Potrzebujesz pomocy? kliknij