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