PROGRAMOWANIE TP łancuchy

 

Program szukanie;

USES crt;

VAR s,s1,s2:STRING;

    k,n1,n2:byte;

PROCEDURE podkresl;

VAR k:byte;

BEGIN

 FOR k:=1 TO 79 DO write('-');

   writeln

END;{Procedury}

BEGIN

clrscr;

 writeln('Wpisz napis s1 i jeden znak s2, a dowiesz sie,na którym miejscu ');

 writeln('w s1 występuje s2, czyli poznasz działanie funkcji POS');

podkresl;

 write('Napisz łańcuch znaków s1:'); readln(s1);

 write('Znak (litera, spacja)'); readln(s2);

podkresl;

   writeln('Znak s2 występuje na ',POS(s2,s1),' pozycji łańcucha s1');

podkresl;

 writeln('A teraz jak działa instrukcja DELETE(s,n1,n2)');

  write('Napisz łańcuch znaków s: '); readln(s);

  write('Od którego znaku zacząć wycinać łańcuch s ? n1= '); readln(n1);

  write('Ile znaków wyciąć? n2= '); readln(n2);

podkresl;

  DELETE(s,n1,n2);

  {Instrukcja DELETE wycina z łańcucha s n2 znaków, poczynając od pozycji n1}

  IF length(s)<=0 THEN writeln('Wyciałem cały łancuch') ELSE

  {Jeżeli n1=1, a n2>dlugosci łańcucha, to po wycięciu nie pozostaje łańcuch}

  writeln('Nowy łańcuch, po wycięciu n2 znaków z łańcucha s: ',s);

readln

END.

 

PROGRAM na_odwrot; { Uzyskać rekurencyjnie zadane słowo wspak }

 

var txt : String;

 

 

 procedure wspak(i:Integer; txt:String);  { 'i' - numer znaku w tekście 'txt', który ma być pokazany }

 begin

  if i=length(txt) then write(txt[i])  { jeśli jest to ostatnia litera                                    - drukujemy je }

       else begin            { w przeciwnym przypadku }

            wspak(i+1,txt);  { wywołujemy funkcję rekurencyjnie }

            write(txt[i])    { a potem drukujemy t‘ liter‘ }

            end              { taka! kolejność ostatnich dwu procedur zapewnia wyświetlanie wpierw liter dalszych ze zmiennej 'txt' }

 end;  { procedury wspak }

 

 

begin

  writeln('Podaj tekst');

  readln(txt);

  writeln('wspak: ');

  wspak(1,txt);

  readln

end.

 

PROGRAM SUMA_LANC;

USES crt;

VAR s1,s2:STRING;

    k,i:byte;

PROCEDURE podkresl;

VAR k:byte;

BEGIN

 FOR k:=1 TO 79 DO write('=');

   writeln

END;{Procedury}

BEGIN

clrscr;

 writeln('Wpisz dwa napisy, a otrzymasz trzeci napis składający się z tych ');

 writeln('znaków napisu pierwszego, które nie występują w drugim.');

podkresl;

 write('Napis pierwszy    '); readln(s1);

 write('Napis drugi       '); readln(s2);

podkresl;

   FOR i:=1 TO length(s2) DO

   WHILE POS(s2[i],s1)<>0 DO DELETE(s1,POS(s2[i],s1),1);

   writeln('Napis trzeci      ',s1);

podkresl;

readln

END.

 

 

PROGRAM ANAGRAM; { Anagramy }

uses Crt;

const maxdl=5;  { maksymalna długość słowa }

var txt, anagram : String[maxdl];

    i, j, dltxt  : Integer;

 

{ procedura rekurencyjna wybierająca kolejne litery ze zmiennej 'txt'

i wstawiająca je do zmiennej 'anagram';

kolejne wywołania procedury następują z coraz krótszym tekstem (pozostałymi literami);

procedura zaś na danym poziomie wywołania dołącza na k-tym miejscu w wyrazie

(gdzie k-liczba kolejnych wywołań procedury) kolejno wszystkie pozostałe litery }

 procedure litera(txt:string);

 var i,n : Integer;

     lt  : String[1];    { litera jako zmienna typu STRING a nie CHAR aby

                           ułatwić operacje na tekście }

 begin

  n:=length(txt);

  if n=0 then

 writeln(anagram){ jeśli już nie ma liter do dołączenia drukuj anagram}

         else

         for i:=1 to n do      { dla wszystkich pozostałych liter }

          begin

           anagram[dltxt-n+1]:=txt[i];  { dołącz kolejne liter‘ }

           lt:=copy(txt,i,1);           { zapamiętaj je na tym poziomie wywołania procedury }

           delete(txt,i,1);             { usuń liter‘ z tekstu }

           litera(txt);                 { wywołaj procedur‘ litera' z krótszym tekstem }

           insert(lt,txt,i);            { dołącz poprzednio usunięte litery }

          end;

 end;

 

(*********** program główny ***********)

begin

  ClrScr;

  writeln('Napisz jakieś słowo (do 5 znaków) i naciśnij ENTER');

  readln(txt);

 

  dltxt:=length(txt);

  anagram[0]:=Chr(dltxt); { ustalamy długość anagramu }

  litera(txt);            { wywołanie procedury rekurencyjnej }

 

  readln;

end.

program kalkulator_duzy;

uses crt;

type liczby=string[255];

VAR

X,Y,O:LICZBY;

PROCEDURE INICJUJ;

VAR I:BYTE;

    A:LICZBY;

        BEGIN

        A:='0';

        FOR I:=1 TO 254 DO A:=A+'0';

        O:=A;

        END;

     PROCEDURE CZYTAJ (VAR X:LICZBY);

       VAR I,N:BYTE;

       POM: LICZBY;

       BEGIN

       READLN (X);

       POM:=O;

       N:=LENGTH(X);

       FOR I:=1 TO LENGTH (X) DO

       POM[I]:=X[(N+1)-I];

       X:=POM;

       END;

              FUNCTION DODAJ (X,Y:LICZBY): LICZBY;

              VAR I,TEMP,X1,Y1:BYTE;

              KOD: INTEGER;

              C:STRING[2];

               BEGIN

               DODAJ:=O;

               TEMP:=0;

               FOR I:=1 TO 255 DO

                   BEGIN

                   VAL(X[I],X1,KOD);

                   VAL(Y[I],Y1,KOD);

                   STR(X1+Y1+TEMP,C);

                   CASE LENGTH(C) OF

                     1:BEGIN

                     TEMP:=0;

                     DODAJ[I]:=C[1]

                     END;

                     2:BEGIN

                     TEMP:=1;

                     DODAJ[I]:=C[2];

                     END;

                    END;

                END;

                END;

                PROCEDURE NAPISZ(X:LICZBY);

                  VAR I,J:BYTE;

                  BEGIN

                  REPEAT I:=I-1

                  UNTIL X[I]<>'0';

                  FOR J:=I DOWNTO 1 DO

                  WRITE (X[J]);

                  WRITELN;

                  END;

                    BEGIN

                    CLRSCR;

                    INICJUJ;

                    CZYTAJ (X);

                    CZYTAJ (Y);

                    NAPISZ( DODAJ(X,Y));

                    READLN;

                    END.