Sunteți pe pagina 1din 14

iruri de caractere*)

!
!
!
!
!

Operaii cu variabile de tip string


Subprograme predefinite pentru string-uri
Implementri sugerate
Probleme propuse
Soluiile problemelor

Capitolul

10

Tipul ir de caractere se identific n Pascal prin termenul string, deoarece n acest


limbaj de programare exist tipul predefinit string pentru tablouri unidimensionale
care au elemente cte un caracter. Diferenele importante dintre un ir de caractere i
un string se desprind din urmtoarele observaii:
Unui tablou i se specific de la nceput numrul maxim de componente pe care
poate s le conin, pe cnd o variabil de tip string are implicit cel mult 255 de
elemente.
Dac la declarare se specific pentru dimensiunea maxim a unei variabile de tip
string un numr mai mic dect 255, va fi valabil declaraia fcut explicit.
Un string se memoreaz pe atia octei cte caractere sunt specificate n declarare, la care se adaug un octet n care se memoreaz lungimea string-ului. Acest lucru nu se ntmpl la tablourile de caractere care se memoreaz pe exact atia octei cte caractere apar n declarare.
Declararea variabilelor de tip string
Cu toate c tipul descrie o structur (ir de caractere), nu este obligatoriu s precizm
o anumit lungime, dar dac dorim s declarm un string mai scurt dect lungimea implicit (255), atunci acest lucru este posibil.
Exemplu
var fraza:string;
cuv:string[20];

*)

{ variabila fraza are cel mult 255 de caractere }


{ variabila cuv poate avea cel mult 20 de caractere }

n cele ce urmeaz, atunci cnd vom scrie string, n acest material, ne referim la un ir de ca-

ractere. Atunci cnd vom scrie string, este vorba de tipul predefinit n limbajul Pascal.

10. iruri de caractere

215

10.1. Operaii cu variabile de tip string


10.1.1. Citirea
O variabil de tip string se poate citi n Pascal, specificndu-i numele. Avantajul fa de tablouri const n faptul c nu trebuie s tim exact numrul caracterelor. n momentul n care am apsat Enter, sau, n caz de citire dintr-un fiier de tip Text, atunci
cnd urmeaz caracterul sfrit de linie, string-ul s-a terminat i prima component
a variabilei (cea cu indice 0) primete o valoare egal cu numrul caracterelor citite.
Exemplu
var s:string;
ss:string[5];
...
ReadLn(s);
ReadLn(ss);
...

Dac pentru s i pentru ss introducem irul de caractere 'ABC', valoarea ambelor


variabile va fi 'ABC'. Dac pentru ss introducem 'ABCABC', valoarea lui ss va fi
'ABCAB', adic se vor pstra cel mult attea elemente cte permite declaraia.

10.1.2. Afiarea
Afiarea se realizeaz specificnd o expresie de tip string.
Exemplu
var s:string;
ss:string[5];
...
WriteLn('ABCABC');
WriteLn(s+ss);
{ dac s = 'str' i ss = 'ing', se va afia 'string' }
...

10.1.3. Atribuirea
Unei variabile de tip string i se poate atribui valoarea unei expresii care are tipul
string. Dac variabila are un tip care precizeaz o lungime mai mic dect string-ul
din expresie, caracterele care depesc lungimea variabilei se pierd.
Exemplu
Fie declaraia:
var ss:string[5];

216

10. iruri de caractere

Dac valoarea lui ss='123', atribuirea ss:=ss+'457890'; se va finaliza cu valoarea '12345' pentru ss.

10.1.4. Concatenarea
Concatenarea se poate realiza utiliznd operatorul '+', dar n Pascal exist i o procedur predefinit n acest scop (Concat).
Exemplu
s3:=s1 + s2; { dac s1 = 'a' i s2 = 'b', atunci valoarea lui s3 va fi 'ab' }
{ valoarea lui s3 va fi 'ab***a' }
s3:=s3 + '***' + s1;

S observm c un string poate fi construit prin adugare de caractere la un


string iniial vid.
Exemplu
var s:string[5];
i:Byte;
Begin
s:='';
i:=0;
while i<5 do begin
Inc(i);
s:=s + 'a'
end;
WriteLn(Ord(s[0]));
WriteLn(s)
End.

{ stringul vid }

{ componenta care pstreaz lungimea string-ului (5) }


{ se va afia 'aaaaa'}

10.1.5. Operaii relaionale


n cazul expresiilor de tip string se pot folosi operatorii relaionali cunoscui:
<, <=, <>, >, >=, =.
Rezultatul a dou comparaii este o constant logic (adevrat sau fals).
Exemplu
var s1,s2,s3:string;

Avnd declaraiile de mai sus, n tabelul urmtor prezentm cteva exemple de expresii relaionale dup efectuarea urmtoarelor operaii de atribuire:
s1:='A';
s2:='ABC';
s3:=s1 + s2;

10. iruri de caractere


Expresie
s1 = 'A'
s2 <> 'ABC'
s3 < 'ABC'
s1 < 'AA'
s3 >= s1

217
Rezultat
true (s-a comparat 'A' cu 'A')
false (s-a comparat 'ABC' cu 'ABC')
true (s-a comparat 'AABC' cu 'ABC' i
'A' < 'B' pe cea de a doua poziie)
true (s-a comparat 'A' cu 'AA')
true (s-a comparat 'AABC' cu 'A')

10.1.6. Accesul la o component


Componenta x[i] reprezint al i-lea caracter din variabila x, de tip string.

10.2. Subprograme predefinite pentru string-uri


Unit-ul System din Borland Pascal 7.0 conine mai multe subprograme predefinite care
pot fi utilizate n prelucrarea string-urilor. Fie s i ss variabile de tip string.
Funcia Pos(ss,s) returneaz valoarea poziiei ncepnd de la care se regsete ss
n s; dac ss nu se gsete n s, atunci i ia valoarea 0.
Funcia Copy(s,i,j) returneaz substring-ul din s care ncepe la poziia i i are j
caractere. Dac n s nu exist j caractere ncepnd cu poziia i, se vor returna attea
cte sunt.
Funcia Length(s) returneaz lungimea stringului (numrul caracterelor din s).
Procedura Delete(s,i,j) are ca efect tergerea din s, ncepnd de la poziia i, a j
caractere. Dac n s nu exist j caractere ncepnd cu poziia i, se vor terge attea
cte sunt.
Procedura Insert(ss,s,i) insereaz caracterele din string-ul ss n s, ncepnd
de la poziia i.

10.3. Implementri sugerate


Pentru a v familiariza cu prelucrrile irurilor de caractere, implementai programele
aferente urmtoarelor exerciii:
1. citirea unui numr caracter cu caracter;
2. citirea unui cuvnt caracter cu caracter;
3. numrarea literelor dintr-un text dat;
4. numrarea cuvintelor dintr-un text dat;
5. numrarea propoziiilor dintr-un text dat;
6. descompunerea n cuvinte a unui text dat;
7. ordonarea unui ir de cuvinte;
8. eliminarea spaiilor duble dintre cuvintele unui text dat.

218

10. iruri de caractere

10.4. Probleme propuse


10.4.1. Litere
Fie un text citit dintr-un fiier. S se afieze acele cuvinte din text n componena crora numrul majusculelor este strict mai mare dect numrul literelor mici.
Date de intrare
Fiierul de intrare LITERE.IN conine textul scris pe mai multe linii.
Date de ieire
Cuvintele se vor scrie n fiierul de ieire LITERE.OUT pe linii distincte, fiecare cuvnt fiind scris pe cte o linie nou.
Restricii i precizri
cuvintele sunt separate prin spaii i/sau caractere de sfrit de linie;
fiierul nu conine linii vide;
liniile conin cuvinte nedesprite;
pe o linie sunt scrise cel mult 255 de caractere;
un cuvnt poate avea cel mult 255 de caractere;
cuvintele conin numai litere mari i mici.
Exemplu
LITERE.IN
Ana AVEA MULte
ACESTa
esTe un eXeMPLu

Mere

LITERE.OUT
AVEA
MULte
ACESTa
eXeMPLu

Explicaii
Ana are dou litere mici i una mare, deci nu se scrie.
AVEA are patru litere mari i nici una mic, deci se scrie.
MULte are trei litere mari i dou mici, deci se scrie.
Mere are o liter mare i trei mici, deci nu se scrie.
ACESTa are patru litere mari i o liter mic, deci se scrie.
esTe are o liter mare i trei litere mici, deci nu se scrie.
un nu are nici o liter mare, deci nu se scrie.
eXeMPLu are 4 litere mari i trei litere mici, deci se scrie.

10. iruri de caractere

219

10.4.2. Text
Se citesc mai multe propoziii dintr-un fiier. Se cere:
s se afieze numrul de cuvinte din fiecare propoziie;
s se determine pentru fiecare propoziie numrul cuvintelor distincte;
s se afieze cuvintele care se repet n cadrul aceleiai propoziii.
Date de intrare
Propoziiile sunt scrise n fiierul de intrare TEXT.IN pe mai multe linii. Dou propoziii sunt separate prin caracterele '.', '!', '?'.
Date de ieire
Rezultatele se vor scrie n fiierul de ieire TEXT.OUT. Pe linia i din fiier se afieaz
datele referitoare la a i-a propoziie. Aceste date se vor separa prin spaiu i vor aprea
n ordinea: numrul cuvintelor din propoziie, numrul cuvintelor distincte, lista cuvintelor care nu sunt distincte n cadrul propoziiei.
Restricii i precizri
din cuvinte poate s fac parte caracterul '-';
dou cuvinte se separ prin caracterele: ' ', ':', ',';
pot exista separatori inutili;
numrul maxim de cuvinte pentru fiecare propoziie este 30;
n text exist litere mari i mici.
Exemplu
TEXT.IN
Sa revenim la coroana pe care am lasat-o in mana lui Arhimede,
care se uita ganditor la ea nestiind ce sa-i faca.
O lasa deceptionat din mana si pleaca la alte treburi.
Dar problema, ca intrebare, staruie in mintea lui; s-o
cantaresc, s-o cantaresc, aude in sine un murmur in surdina,
da, asta stiu, s-o cantaresc, dar ce altceva sa-i mai fac?
TEXT.OUT
22 18 la care
10 10
30 21 in s-o cantaresc

10.4.3. Traducere
Un elev are de scris un text n limba englez, dar nu cunoate destul de bine aceast
limb. Se hotrte s lase cuvintele pe care nu le poate traduce n limba romn, apoi

220

10. iruri de caractere

s le caute n dicionar. Din aceste cuvinte va alctui o list, urmnd ca ulterior s le


nlocuiasc n text.
Date de intrare
Pe prima linie a fiierului TRADUS.IN se afl textul elevului, iar pe fiecare dintre urmtoarele linii se afl un cuvnt n limba romn, urmat, dup un spaiu, de corespondentul su n limba englez.
Date de ieire
Textul tradus, mpreun cu semnele de punctuaie existente n textul dat n fiierul de
intrare, se va afia n fiierul de ieire TRADUS.OUT.
Restricii i precizri
textul n fiierul de intrare trebuie s conin cel mult 255 de caractere;
separatorii folosii n text pot fi ' ', '.', ',';
textul din fiierul de ieire va avea exact aceeai separatori ca i cel de intrare.
Exemplu

TRADUS.IN
Ana has many mere, dar she is going to the piata to vanda them.
mere apples
dar but
piata marketplace
vanda sell

TRADUS.OUT
Ana has many apples, but she is going to the marketplace to sell them.

10.4.4. Culori
La o grdini se va realiza un spectacol, unde copiii trebuie s fie mbrcai n costume de culori diferite. Fiecare copil i spune culoarea preferat, iar nvtoarea formeaz grupuri de copii mbrcai n costume de aceeai culoare. Pe scen copiii se vor
aeza n grupuri, astfel nct cel mai numeros grup va sta n fundal, n faa acestora va
sta grupul din care fac parte mai puini copii etc., iar n fa grupul cel mai puin numeros.
Date de intrare
Datele de intrare se citesc din fiierul CULORI.IN care are urmtoarea structur:
pe prima linie se afl numrul natural n, reprezentnd numrul de copii;
pe urmtoarele n linii sunt scrise numele i prenumele copiilor; numele este separat
de prenume printr-un spaiu;

10. iruri de caractere

221

pe urmtoarea linie este scris numrul natural m, reprezentnd numrul de culori;


pe urmtoarele n linii sunt trecute culorile preferate ale celor n copii sub forma
unor numere naturale din intervalul [1, m] cu care s-au codificat culorile; fiecare
copil alege o singur culoare.
Date de ieire
Datele de ieire se scriu n fiierul CULORI.OUT pe m linii. Fiecare linie conine codul
culorii, urmat de numele copiilor care prefer culoarea respectiv. Numele vor fi desprite printr-un spaiu. Numrul numelor va fi cel mai mare pe prima linie, mai mic
pe linia a doua i cel mai mic pe ultima linie.
Restricii i precizri
2 n 20;
2 m 7;
fiecare culoare dintre cele m va fi preferat de cel puin un copil;
n cazul n care exist dou sau mai multe culori preferate de un numr egal de copii, atunci ordinea n care grupurile corespunztoare se vor aeza pe scen nu conteaz.
Exemplu
CULORI.IN
7
Pop Mihai
Popan Ana
Popa Ion
Popescu Marius
Rus Andrei
Rusu Teodor
Trif Ionut
3
1
1
2
3
3
3
2

CULORI.OUT
3 Popescu Marius Rus Andrei Rusu Teodor
1 Pop Mihai Popan Ana
2 Popa Ion Trif Ionut

222

10. iruri de caractere

10.5. Soluiile problemelor propuse


10.5.1. Litere
Vom citi cte un string de pe o linie din fiier i l vom parcurge n felul urmtor: vom
ignora spaiile pn la apariia primului caracter diferit de spaiu. Apoi, vom construi
din caractere consecutive litere un cuvnt, numrnd n paralel i majusculele. n momentul n care apare primul spaiu, sau am ajuns la sfritul string-ului, prelucrm cuvntul, respectiv decidem dac trebuie s-l scriem n fiier sau nu. Relum algoritmul
pentru restul caracterelor din string-ul citit, apoi pentru restul liniilor din fiier.
Subalgoritm Litere:
ct timp nu urmeaz marca de sfrit de fiier execut:
citete t
{ citim o linie din fiier }
i 1
{ vom parcurge stringul citit }
ct timp i lungimea textului t execut:
ct timp (i lungimea textului t) i (t[i]=' ') execut:
{ spaiile le ignorm }
i i + 1
{ vom construi cuvntul curent }
cuv ''
maj 0
ct timp (i lungimea textului t) i (t[i] ' ') execut:
dac (t[i] 'A') i (t[i] 'Z') atunci
{ majuscul }
maj maj + 1
sfrit dac
cuv cuv + t[i] { concatenm caracterul curent n cuvntul curent }
i i + 1
sfrit ct timp
dac maj > [(lungimea cuvntului cuv)/2] atunci
scrie cuv
sfrit dac
sfrit ct timp
sfrit ct timp
sfrit subalgoritm

10.5.2. Text
Vom reine fiecare propoziie ntr-un ir de caractere i vom construi irul cuvintelor
care fac parte din ea pentru a facilita cutarea cuvintelor care nu sunt unice n cadrul
propoziiei.
Din cauza c o propoziie se poate continua n fiierul de intrare pe mai multe linii,
vom forma propoziiile, citind din fiier caractere. Notm cu pr irul de caractere care
reine propoziia curent i cu c caracterul citit din fiier. Iniializm propoziia cu

10. iruri de caractere

223

stringul vid i caracterele citite le concatenm n pr, pn la apariia unui separator sau
a marcajului de sfrit de linie.
n cazul n care propoziia se ncheie (a aprut un separator) nlocuim separatorul,
adugnd la sfritul variabilei pr un spaiu, pentru a simplifica mprirea pe cuvinte. Trecem la analiza propoziiei.
Dac pe parcursul citirii a aprut marcaj de sfrit de linie, fr ca propoziia s se
termine, acesta se citete din fiier, continund citirea caracterelor i concatenarea
lor n aceeai propoziie de pe linia urmtoare.
Algoritmul care realizeaz formarea unei propoziii este:
Algoritm Text:
{ iniializarea primei propoziiei }
pr''
ct timp nu urmeaz marca de sfrit de fiier execut:
citete c
dac c nu este separator de propoziii i
nu urmeaz marca de sfrit de linie atunci
pr pr + c
{ alipim caracterul curent propoziiei }
altfel
dac c este separator de propoziii atunci
{ suprascriem separatorul cu spaiu }
pr pr + ' '
{ analiza propoziiei }
Analiza(pr)
scrie marca de sfrit de linie
pr ''
{ iniializarea urmtoarei propoziii }
altfel
citete marca de sfrit de linie
sfrit dac
sfrit dac
sfrit ct timp
sfrit algoritm

Analiza propoziiei reinute n irul de caractere pr ncepe cu nlocuirea separatorilor cu spaii, apoi se elimin spaiile inutile i se formeaz tabloul de cuvinte. Se scrie
numrul n al cuvintelor depistate n fiierul de ieire. Algoritmul Analiza(pr) apeleaz subalgoritmul distincte(cuvinte,dist) care numr cuvintele care apar o
singur dat n propoziie i scrie acest numr n fiierul de ieire.
De asemenea, se ine i evidena cuvintelor care se repet i ncepnd de la a doua
apariie se nlocuiesc cu spaiu pentru a nu le mai lua n calcul.
Dup scrierea celor dou numere n fiierul de ieire se trece la cutarea cuvintelor
care se repet. Se numr fiecare apariie i se nlocuiete dublura lui cu spaiu. Dac
se gsesc cuvinte care se repet, acestea se vor scrie n fiierul de ieire.

224

10. iruri de caractere

Subalgoritm Analiza(pr):

{ analizm o propoziie }

suprascriem separatorii cu spaii


eliminm spaiile n plus
cutm cuvinte, le reinem n irul cuvinte i le tergem din propoziie
{ numrul cuvintelor din propoziie }
scrie n,' '
distincte(cuvinte,dist)
{ apelm subalgoritmul distincte }
scrie dist,' '
pentru i=1,n-1 execut:
apare 1
{ numrul cuvintelor care nu sunt distincte }
dac cuvinte[i] ' ' atunci
pentru j=i+1,n execut:
dac cuvinte[i] = cuvinte[j] atunci

{ un cuvnt este nlocuit cu spaiu la a doua apariie }


cuvinte[j] ' '
apare apare + 1
sfrit dac
sfrit pentru
dac apare > 1 atunci
scrie a[i],' '
sfrit dac
sfrit dac
sfrit pentru
sfrit subalgoritm

{ cuvntul nu este distinct }

n algoritmul care calculeaz numrul de cuvinte care apar o singur dat n propoziia pr se numr apariiile fiecrui cuvnt n irul cuvintelor. Dac acesta apare o singur dat se incrementeaz contorul cuvintelor distincte.
Subalgoritm Distincte(cuvinte,dist)
dist 0
pentru i=1,n execut:
apariii 0
pentru j=1,n execut:
dac cuvinte[i] = cuvinte[j] atunci
apariii apariii + 1
sfrit dac
sfrit pentru
dac apariii = 1 atunci { dac cuvinte[i] a aprut o singur dat }
dist dist + 1
{ avem un cuvnt distinct }
sfrit dac
sfrit pentru
sfrit subalgoritm

10. iruri de caractere

225

10.5.3. Traducere
Dificultatea acestei probleme const n faptul c din textul iniial numai anumite cuvinte se nlocuiesc. Cele care trebuie nlocuite i traducerile lor apar n fiierul de
intrare ncepnd de pe linia a doua.
Se parcurge textul iniial t i se rein pe rnd cuvintele n variabila cuvnt. Pentru
fiecare cuvnt cuvnt se verific dac acesta apare printre cuvintele care sunt scrise n
dicionar. Dac acesta exist n dicionar, se reine traducerea lui, urmnd ca aceasta s
substituie cuvntul n textul iniial.
Cutm cuvntul cuvnt n fiierul care conine dicionarul cu urmtorul subalgoritm:
Subalgoritm Caut(cuvnt):
citete marcajul de sfrit de linie din fiierul de intrare
ct timp nu urmeaz marca de sfrit de fiier execut:
citim n dictio o linie din fiier (o pereche de cuvinte)
cutm cuvntul cuvnt n dictio
dac l-am gsit ncepnd cu poziia 1 atunci

tergem din perechea de cuvinte originalul


returnm traducerea
ieim forat din ct timp

altfel

returnm stringul vid

sfrit dac
sfrit ct timp
sfrit subalgoritm

n fiierul de intrare prima linie este ocupat de textul care trebuie tradus. De fiecare dat cnd se caut traducerea unui cuvnt n fiier trebuie s se realizeze saltul peste
prima linie, deci se citete doar marcajul de sfrit de linie.
Selectarea cuvintelor care se caut n dicionar se face n felul urmtor:
Subalgoritm Traducere(t):
cuvnt ''
i 1
ct timp i lungimea textului t execut:
ct timp t[i] este liter execut:
cuvnt cuvnt + t[i]
{ n cuvnt construim cuvinte din text }
i i + 1
sfrit ct timp

226

10. iruri de caractere

trad traducerea lui cuvnt, returnat de subalgoritmul Caut(cuvnt)


dac trad '' atunci
{ dac exist traducere }
inserm traducerea cuvntului n t, ncepnd cu poziia i
tergem cuvntul de tradus din t
i i + lungimea cuvntului trad - lungimea cuvntului cuvnt + 1
{ recalculm poziia din care continum prelucrarea lui t }
cuvnt '' { reiniializm cuvnt pentru a fi util pentru un cuvnt nou }
altfel
{ avansm, cuvntul nu trebuie tradus }
i i+1
cuvnt ''
sfrit dac
sfrit ct timp
sfrit subalgoritm

10.5.4. Culori
n rezolvare variabila num reprezint tabloul care conine numele celor n copii, n
tabloul pref pstrm tabloul care conine numrul de ordine a culorii preferate de
copii, iar cul este tabloul n care se reine numrul de apariii a fiecrei culori.
Exemplu
Fie tabloul num = (Pop Mihai, Popan Ana, Popa Ion, Popescu Marius, Rus Andrei,
Rusu Teodor, Trif Ionut). Presupunem c exist 3 culori (m = 3), iar irul culorilor preferate de copii, n ordinea numelor din tabloul num este pref = (1, 1, 1, 1, 3, 3, 2).
Elementele tabloului cul se determin n paralel cu citirea. Acesta va conine pe poziia i numrul copiilor care prefer culoarea i, deci cul = (4, 1, 2) cu semnificaia: culoarea 1 apare de patru ori, culoarea 2 apare o dat, culoarea 3 apare de dou ori.
Subalgoritm Citire(n,m,num,pref,cul):
citete n
pentru i=1,n execut:
citete num[i]
sfrit pentru
citete m
pentru i=1,m execut:
cul[i] 0
sfrit pentru
pentru i=1,n execut:
citete pref[i]
cul[pref[i]] cul[pref[i]] + 1
sfrit pentru
sfrit subalgoritm

{ culoarea pref[i] a aprut nc odat }

10. iruri de caractere

227

n algoritm vom cuta valoarea maxim n acest ir, apoi pe acei copii care au ales
culoarea i, unde i este poziia pe care s-a gsit valoarea maxim. n exemplu, valoarea
maxim n tabloul cul este egal cu 4 i se gsete pe poziia poz = 1. Aceast variabil
astfel reine codul unei culori. Se caut n tabloul pref indicii elementelor egale cu 1
(selectare). Acetia sunt: Pop Mihai, Popan Ana, Popa Ion, Popescu Marius.
Acum trebuie s gsim grupul n care sunt mai puini copii, dar care, dup ce am
pus primul grup deoparte, sunt cei mai numeroi. nseamn c ne intereseaz al doilea maxim din tabloul cul. Pentru a uura gsirea acestuia, vom nlocui n tabloul cul
valoarea 4 cu 0. La pasul urmtor maximul din tabloul cul = (0, 1, 2) este 2 pe poziia
3 (adic culoarea 3). n tabloul pref se caut toi indicii (copiii) elementelor de valoare
poz. Acetia sunt: Rus Andrei, Rusu Teodor.
Se nlocuiete valoarea 2 cu 0, deci cul = (0, 1, 0). Acum max se gsete pe poziia
2 i este egal cu 1. Se caut, pe baza tabloului pref toi copiii care prefer culoarea 2.
Acetia sunt: Trif Ionu.
Se nlocuiete valoarea 1 cu 0 n tabloul cul, acesta devenind cul = (0, 0, 0) i procesul se ncheie.
Subalgoritm Afiare:
pentru k=1,m execut:
{ copiii se grupeaz n m grupuri }
Maxim(m,cul,poz)
{ maximul din irul cul se afl pe poziia poz }
scrie k,' '
{ codul culorii }
pentru i=1,n execut:
dac pref[i] = poz atunci { afim copiii care prefer culoarea poz }
scrie num[i],' '
sfrit dac
sfrit pentru
cul[poz] 0
{ eliminm "ultimul maxim" }
sfrit pentru
sfrit subalgoritm

S-ar putea să vă placă și