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.