Aplicaţii cu şiruri de caractere şi mulţimi

1.Să se scrie toate prefixele unui cuvânt dat; prin prefix se inţelege şirul format din primele caractere ale cuvântului (minim un caracter, maxim toate).

Rezolvare:

Funcţia length(s:string) intoarce lungimea efectivă a şirului s şi este echivalentă cu ord(s[0]) (folosind helpul, cercetaţi funcţia ord şi inversa ei-chr ). Funcţia copy (s, începutul, lung) întoarce şirul format din primele lung caractere ale lui s incepând de la poziţia început.

 

program prefixe;

var s:string;

      i:byte;

begin

     write (‘ Dati cuvantul: ‘);

     readln(s);

      for i:=1 to length (s) do

         writeln (‘ Prefix de lungime ‘ ,i :3 , ‘ : ‘ , copy (s,1,i));

         readln;

end.

2.Se dă un text de maxim 30 de caractere.Să se listeze toate cuvintele de 2 caractere din acest text.

Rezolvare

Să presupunem că oricare două cuvinte consecutive din text sunt separate printr-un spaţiu şi numai unul. Programul va parcurge tot textul , verificând la fiecare pas patru caractere consecutive: dacă în acest grup primul şi patrulea caracter sunt spaţii, pe pozitia 2 şi 3 se află un cuvânt de doua litere, care se listează.

 

program doua_litere;

var a:string[30]’

            n:integer;

begin

            readln(a);

for(n:=2 to lenght(a)-2 do

if(a[n-1]=` `)and(a[n]<>` `)and(a[n+1]<>`   `)and(a[n+2]=`     `)then

                        writeln(copy(a,n,2) );

                        readln;

end.

 

3.Se da un numar n(n>0);sa se scrie cel mai mare numar ce se poate forma cu cifrele distincte ale lui n.

Rezolvare: 

Algoritmul folosit citeşte n si -1,”sparge” in cifre;introduce apoi fiecare cifră în variabila a de tip mulţime;proprietatea esenţială a tipului mulţime este aceea că ea reţine numai cifrele distincte.În faza a doua,se formează numărul cu elementele lui a luată descrescător.Facem observaţia că operaţia + dintre doua mulţimi reprezintă reuniunea,iar relaţia in desemnează apartenenţa.

 

program numar;

var a:set of 0..9’;

            i,j:integer;

x,n:longint;

begin

write(`dati numarul n=`);

readln(n);

a:=[];

x:=n;

while x>0 do

                        begin a:=a+[x mod 10];

                        x:=x div 10 end;

x:=0;

for i:=9 downto 0 do

if i in a then x:=10*x+i;

writeln(`cel mai mare numar cu cifre diferite ale lui `,n,`este `,x,`);

readln;

end.

 

4.Se dă un text.Să se decidă dacă textul foloseşte numai caractere alfanumerice.

            Rezolvare:

            Se selectează în variabila b de tip mulţime toate caracterele folosite de text.Apoi se verifică dacă mulţimea astfel obţinută este inclusă în mulţimea a formată din toate caracterele alfanumerice(operaţia de incluziune se noteaza cu <=)

Program alfa

const a=[`0`,..,`9`,`a`..`z`,`A`..`z`];

var b:set of char;

            x:string;

            i:integer;

begin

            b:=[];

            writeln(`Dati textul:  `);

            readln(x);

            for i:=`to length(x) do b:=b+[x[i]];

            if b<=a then begin

                        writeln(`Textul foloseste numai caractere alfanumerice.   `);

                        writeln(`Acestea sunt:   `);

                        for i:=48 to 122 do

                                    if chr(i) in b then write(chr(i),`   `);

                        writeln

            end

            else begin

                        writeln(`Textul are si caractere speciale.`);

                        for i:=0 to 255 do

                                    if chr(i) in b-a then write(chr(i),`  `);

                        writeln;

                        end;

readln;

end.

 

 

5.Să se stabilească proprietatea de palindrom a unui cuvânt;el este palindrom dacă orice două caractere egal departate de extremităţile cuvântului sunt identice.

Rezolvare:

program palindrom;

var s:string;

            i,l:byte;

            pali:boolean;

begin

            write(`Dati cuvantul:   `);

            readln(s);

            pali:=true;

            l:=length(s);

            for i:=1 to 1 div 2 do

                        if s[i]<>s[1-i+1]then pali:=false;

            if pali then writeln(`Cuvantul  este palindrom.  `)

                        else writeln(`Cuvantul nu este palindrom.  `);

            readln;

end.

6.Dintr-un şir de cuvinte date să se aleagă şi să se tiparească perechile palindromice(o pereche palindromică este formată din doua cuvinte astfel incat,citind unul din ele de la dreapta spre stânga se obţine celălat cuvânt).

            Rezolvare: 

program perechi;

type cuvinte=array[1..200]of string[30];

var c:cuvinte;

            p:boolean;

            n,i,j,k,l:byte;

begin

            write(`Numar cuvinte:  `);

            eadln (n);

            for i:=1 to n do begin

                        write(`Cuvantul numar `,i,`:  `);

                        readln(c[i]);

            end.

            for i:=1 to n-1 do

                        for j:=i+1 to n do

                        if(length(c[i])=length(c[j])then begin

                                    l:=length(c[i]);

                                    p:=true;

                                    for k:=1 to 1 do

                                                if c[i][k]<>c[j][1-k+1]then p:=false

                                    if p then write ln(c[i],`< ---- >`,c[j]);

                        end.

readln;

end.