*
. JU0 In lJrma.'anualelor gi:ducaliei pi
:h,'1!,;661p-
: rra pefltrU: ::.tru Clasa
_: st IftTOt_
: I JaatiOnai,-,. lnaliza
-a lrl de
:,-jo€
E& YM wSgx;t ffi1ffi w, gffi
5IR'-' IILI R'
Capitolulw& w. w& w*a, wttr wt. ,&iw
i]F ilfrIE
1. ORCANIZAREA DATETOR
STUDIU DE CAZ Componio Eficient
Pentru reducerea cheltuielilor cu amenaiarea spaliilor comerciale, reclamd;i personal,compania Eficient selecteazd tineri distribuitori, absolvenli de liceu. Oferta companiei estefoarte atrdgdtoarel de aceea, numdrul solicitantilor depdpe;te numarul de posturi oferite (n),Selectia candidalilor se face in ordinea inregisirdrii sirisorii d" intentie pi a CV-ului. Dosarelecandidalilor sunt pdstrate intr-un fipet, unul peste altul, in ordinea angjirii. periodic, con-pania trimite un angaiat la cursuri de formare; este trimis intotdeauna,iltimut angajat (fig. l ).Angaiatii sunt platili in functie de numdrul de produse distribuite (vAndute) iitnic.Saptdminal, managerul companiei tine evidenla pe zile a produselor distribuite de fiecareangajat, in orice momenl managerul poate determinaangajatul cu cea mai bund activitate intr-o zi sau ziua in @care a fast distribuit cel mai mic numdr de produse. La .,sfArpitul siptdmilnii, dupd ce aplica bonusuri sau pena- 1 ,//'lizdri, managerul centralizeazd aceste date intnun re- j I-A".l--@gistru de evidentd a vdnzdrilor realizate de cdtre fiecare j t- -\angajat. i i
Managerul companiei doreste sa prelucreze cu calcu- tr tr------O-. -. rq ytctuLtczc LU LdtLU- i -latorul datele pentru selectia candidatilor, evidenta anga- E;l [l
ialilar ;i evidenta vAnzdrilor. I L:i "..i L_:J, \_- Fll l:..JI I pflmul angajat candidat nou
1.1. Analiza problemei
Z datele despre candida{i; din CV-ul fiecarui
- numele,
- anul nagterii,
- media la examenul de bacalaureat;
Figura I
candidat vor fi refinute urmatoarele informatii:
t,l.l13
L ila Mi D
Al
A"
An
ffi.
Figura 2
Ar q ................. An
M dupa examinarea unui candidat (selec!ie), datele aces-
tuia nu mai sunt necesare, va intra in seleclie candidatul
urmdtor;
M intotdeauna, datele unui nou candidat sunt agezate dupldatele ultimului candidat care agteapta pentru selecfie;
M datele angajalilor sunt pdstrate intr-o ordine care sipermitd numirea rapidd a ultimului angajat in vederea
trimiterii sale la cursuri;
M pentru eviden[a siptdmAnala a vdnzirilor, se reline
numdrul de produse distribuite (vdndute) zilnic de cdtre
fiecare angajat ffig.2);
M pentru evidenfa centralizatd a vdnzdrilor, totalulvdnzirilor realizate intr-o siptdm6nd de fiecare angajat se
adaugi la vdnzdrile realizate de acel agajat pini la
momentul respectiv (fig. 3)
.tl+tltllEvidenta sdptdmdnald
I
M selec[ia candida{ilor se
datelor personale;
face in ordinea inregistrdrii -9*tcmMlii
tshroF
fluDCJ
#ar
angajagi,//
.h"tF
m&,&(frr
m&([#5
Figura j
1.2. Solulia problemei
M problema propusd de managerul companiei Eficient necesitd prelucrdri matematice cu un grad
mic de dificultate: centralizarea sdptdminald, prin insumare, a valorilor reprezentdnd
vinzdrllerealizate de citre fiecare angqat;
M datele specifice problemei trebuie organizate avantajos, astfel incdt folosirea calculatorului sd
inlocuiasc[ figetele sau mapele in care sunt pdstrate dosarele candida{ilor/angaja{ilor ;i sd
respecte cerin(ele de aqteptare sau prioritate specifice problemei.
1.3. Organizarea datelor
o Din analiza problemei urmirind semnificalia ;i complexitatea datelor, rezultd doud cate-
gorii de date:
8 date elementare, spre exemplu: numarul de produse vdndute de un angajat la un moment dat;
8 date grupate (structurate):
- date cu aceea;i semnificalie (de acelaqi tip) - numite qi date omogene -, spre exemplu: evi-
denla saptimdnald avdnzitrilor pe zile qi angajali, evidenla v0nz6rilor pe angaja{i, datele despre
toli angaja{iilcandida{ii;
: d 1: * d.ra-4i -
, i It;.4.r - .:, .''i ti tr{;il$il*i}qri,'
doqll
oil
.(rf
ff
rriol
I.!
{
r in ordinea inregistrarii - date cu semnificalii diferite- numite qi date neomegene- spre exemplu, datele prin careeste descrisd o persoand (candidat sau angajat): nulne, an, medie.
&r (seleclie), datele aces_nta in selecfie candidatul
adidat sunt aqezate [email protected] pentru selecfle;
re intr-o ordine care siului angajat in vederea
e vdnzarilor, se retinerindute) zilnic de catre
r a vdnzdrilor, totaluld de fiecare angajat se; rcel agajat p6nd la
maEmatice cu un graddorilor r.pr.r.oiend
sirea calculatorului si4ilor angajafilor qi si
t,rezritA dou6 cate-
t Ia un moment dat;
; spre exemplu: evi_pja!, datele despre
E Oe refinut!O persoani este descrisi prin mai multe tipuri de date, ceea ce determini aspectul
neomogen al grupului de date.
Candidalii sau angafalii formeazi grupuri de acelapi lip - persoanii - de unde rezultiaspectul omogen al acestui grup de date.
c Din analiza problemei urmirind restricyiile de intrare-ie;ire (agteptare sau prioritate),dupd care sunt organizate datele dintr-un grup (structuril, rezultir doua categorii de date:
tr 9|te otganizate dupa disciplina specificb unei cozi satfir de asteptare;spre exemplu, can-didalii care aqteaptd pentru selec{ie. intr-o astfel de structuri, intltdeauni, un element noueste a;ezat (intra) dupl ultimul element. Dintr-o astfel de structurd, iese, intotdeauna,primul element - in exemplul nostru, candidatul aflat ,,la rdnd".
8 date organizate dup6 disciplina specificd aqezarii obiectelor unul peste altul, in stivd; spreexemplu, dosarele angajalilor. Intr-o astfel de structurd, intotdeauna, un element nou .it.agezat deasupra celorlalte, invdrful stivei. Dintr-o astfel de structurd, iese, intotdeauna, ele-mentul din vdrful stivei - in exemplul nostru, va fi prelucrat dosarul ultimului angajat.
.*
w$r
Concluzieo organizarea datelor specifice unei probleme se poate face in loca{ii de memorie inde-
pendente - date elementare - sa:u in locafii grupate - structuri de date;o structurile de date pot fi:
- structuri omogene (date cu aceea;i sernnifica{ieltip),
- structtti neomegene (date cu semnifica{iiltipuri diferite);r sEucturile omogene se numesc tablouri;o intr-un tablou, datele pot fi organizate astfel:
- dupd un singur criteriu - tablouri unidimensionale sau vectori; spre exemplu,ubloul pentru evidenlavdnzdilor realizate de fiecare angajat,
- dupi doua criterii ' tablouri bidimensionale sau matrice; spre exemplu, tabloulPentru evidenlavinzdilor realizate zilnic (criteriul I - zilele sdptdmdnii) de citre fiecareangajat (criteriul 2 - angajalli);
o intr-un tablou unidimensional, datele pot fr orgaruzate astfel incdt sd respecte o disci-plina de intrare/ieqire de tip coadd sa:u stivti;
' structurile neomogene se numesc articole sau inregistrdri; mai multe articole caredescriu aceeagi entitate (obiect, persoand etc.) reprezintd un grup de date cu aceeaqisemnifis3lis gi poate fi organizatittr-o structuri omogena de tip tablou unidimensional(vector de articole\.
# TEkgff
1. Explica{i deosebirea dintre analiza datelor din punct de vedere al cornplexitdlii gi analizadatelor din punct de vedere al regulilor de organizare (intrare/ieqire) intr-o structura (grup de
date).
2. Formula{i un exemplu care si eviden}ieze diferen{a dintre datele omogene Ei dateleneomegene.
3. Formulali un exemplu care sd necesite organizarea dupa rrai multe criterii a datelor cu aceeagi
semnifica{ie.
4. Formulali un exemplu care s5: necesite organizarea datelor cu aceeaqi semnifica{ie in structuride tip coadd.
5. Formulali un exemplu care sd necesite organizarea datelor cu aceeasi semnifica{ie in structuride tip stivd.
6. Explicali disciplina stmcturii de date de tip coadd (FIFO - First Input First Output : prirnulintrat, primul ie;it).
7. Explicali disciplina structurii de date de tip stivi (LIFO - Last Input First Output : ultimulintrat, primul ie;it).
8. Formula(i exemple de oganizare a datelor dupa alte reguli decit cele specihce stmchrrilor de
tip coadd sau stiva.
TT d* GKUP
D en sitate a str atu rilor ge olo gice
(ln grup de geologi studiazd densitatea straturilor geologice. in acest scop, s-a L\trascdte o probd pentru fiecare dintre cele n straturi geologice studiate. Fiecare probd este
transmisd la un laborator specializat; pentru fiecare probd se fac mai multe teste, cel multm. intrucdt ntt existd suficiente aparate, analiza de laborator dureazd. La sfdrqitul activitdfii,geologii pdstreazd probele in ordinea naturld a straturilor geologice (fig. a). Rezultateletestelor se pdstreazd astfel incdt sd se poatd determina, cu u;urinlci:
- zdcdmdntul la care s-au obfinut acelea;i v-alori la toate testele;
- zdcdmdntul cu cea mai mare densitate medie la cele m teste;
- zdcdmdntul la care s-a oblinut cea mai mare diferenld intre densitatea maximd ;i den-sitatea minimd din cele m teste.
Cerin{e:
1. Identifica{i formele de organizare a datelor specifice problemei propuse.
2. Fiecare membru al grupului descrie una dintre fonnele de organizare a datelor identi-ficate fiustificare, necesitate, proprietd{i, prelucrari specifice qi alte aspecte).
i ]::L[ruL ::xrS[Il!.nM Im, :
ir:5,3" :f:l:'q:re- i::rirrii"4,. ,-[nf't!t rnrirmuua u P
tI
oJa'-\r.--
rg{ffi#I!trd&PufrWnhndnfruil,ffilr]llill
*.: \ vl]'ffi,. .1 ."- |
1;;;v-6' '',; ,
ra':::{{::':' i;'
_"_,!
r'&= :l complexitdqii qi analizame ias:re r intr-o structura (grup de
he datele omogene qi datele
.u.re cnteni a datelor cu aceeasi
u re:e_.i semnificafie in structuri
r ta:a-ii semnifica{ie in structui
hrs trrput First Output = primul
d hput Fint Output : ultimul
rl ceie specifice stmcturilor de
Ie- rn ;{est scop, s-a extrasfrr.;;;;€, Fiecare probd este'fu ,* multe teste, cel multrac.i- La s_firSitul activittilii,@tre tfig. 4). Rezultateleti*i.weicwe;re demsirutea maximd;i den_
lcmei propuse.
: organizarg a datelor identi_ice si alte aspecte).
3. Grupul compune un scenariu pentru prelucrarea cu calculatorul a datelor specificeacestei probleme; scenariul poate fi ptezerfiat narativ sau organizat pe secvenle (paqi).
4. Grupul realizeazd o prezentare PowerPoint care sd ajute la sus{inerea temei.
Figura 4
sii;;;;;;;;;;;;i;;il; I:I
Prezentdrile pot fi expuse qi analizate in laboratorul de informaticS; se va urmiri corecti- i
n:dinea rezolvdrii, creativitatea prezentdii gi eficien{a lucrului in grup.IIII
dffi:tt!_:t*;*t{*fi#*tkt .. i
ko
-o
()
N n
3
2
1
1
3
n
2. ORCANIZAREA DATELOR CU ACEEASI SEMNIIICATIEiN rnslouRI BtDIMENSIoNATE
APLICATIA I TLAARE DE COLT
Membrii clubului ,,Floare de coly" participd la o tabdrd de vard, timp de o sdptdmdnd,intr-o zond montand greu accesibild. Scopul lor este sd fnregistreze infiecare zi temperaturaaerului ;i sd determine temperatura minimd, temperatura maximd ;i zilele tn care s-au atinsaceste temperaturi.
l. Analiza problemei. Date de intrare
- 7 valori reprezentdnd temperatura
inregistrati in fiecare zi a sdptamdnii
2. Organizarea datelorDatele de intrare au aceeagi semnifica{ie qi vor fi inregistrate intr-un vector (T) cu 7 elemente.
De exemplu: T
tmin : 12 inregistratd miercuri gi duminicltmax = 18 inregistratd luni gi vineri
3. Rayionamentul problemeiSe inregistreazd temperaturile zilnice in vectorul T. Se determind, printr-o singura parcurge-
re, valoarea minima qi cea maximi.Pentru afiqarea zileilzilelor se mai fac doul parcurgeri ale vectorului. Ziuava fi afiqatd ca
indice (1, 2 etc.). Pentru afiqarea zilei prin nume (luni, mar{i etc.) se recomandi introducereastructurii selective dupi zi.
4. Reprez entarea algoritmului
inceput temperaturi Ialoci T[7]pentru zi: 1,7 executl citeqte T[zi] sf0rqit pentrutmin +- T[]tmax <- T[1]
. Date de ieSire
- temperatura minimi (tmin);
- temperatura maximd (tmax);
-ziua/zllele in care s-au atins tmin si tmax.
sf0r;it pentruscne tmmpentru zi:1"7
'
Ideci T[:Itm"St I
sfirgit peilrrscrie trnax
pentru a: l-'lrdrif[:Itf O."i
sf[rs,tt peutnsfEr;it teryfr
4llJgAttA?--f!9-41Mdsararea temPaarii ud
gM. Nunantl volwtsilr bi&rbului a organt'u:ue xfrPiiltars.
Pre I ucr area Y al oi W irqgirl,
- se af5ea:a runWaNT iy pamut s@tdnfui:
- se $$en/i tenWTNaS- se $;eai zona in cDc H
Wvuicezias,@tffiJ
L -atuli;a Prdla*iMdc Ptblana a rcqi
glific4i€ - tery€ret f,rli -. dr se refed h rr.Eq de aceea- pefiu at-rme la$e fuEoduce si crhnd" Rrahi un taHo (T) ofu[ rlim*ini: nrr (liif ftfrlolmE)(fig n
fErrS
pentru zi:2,7 executibloc
ldacn T[zi] < tmin atunci tmin <-. T[zi]I sffirsit daci
;Aaci f1zi1 > tmax atunci tmax +- T[zi]I sfirsit daci
sfflrEit bioc
$$Mr
t8 l5 1,2 t4 18 t5 t2
nTtE
+ timp de o sdptdmdnd,n -fiecare zi temperatura
inimi (tmin);rxima (tmax);e sau atins tmin qi tmax.
rector (T) cu 7 elemente.
inr-o singurd parcurge_
rL Zua va fi afiqatd caecomanda introducerea
sfArgit pentru
lpentru zi = 1,7 executl
I ldac dT[zi]: tmin atunci scrie ziI lsfarsit dacilsfAr;it pentruscrie tmax
;pentru zi= 1,7 executl
I gdacdTlzil: tmax atunci scrie ziI lsfdacllsfdrqit pentrusfdrgit temperaturil
APLICATIA 2 FLOARE DE COLT
Mdsurarea temperaturii aerului in zonele greu accesibile afostfoarte apreciatd de ecolo-gi;ti. Numdrul voluntarilor dornici sd participe la astfel de acliuni a crescut. Instructorulclubului a organizat zece echipe care sd mdsoare temperatura zilnicd in diverse zone deinteres.
P r e luc r are a v alo rilo r tnregis tr at e s e v a fac e as tfel ;
- se afiqeazd temperatura minimd ;i temperatura maximd inregistrate in cele zece zoneoe paratrsul sdptdmdnii ;
- se afi;eazd temperatura medie, pentru oricare dintre zone, la solicitarea celui interesat;
- se afi;eazd zona in care s-a atins cea mai micd, respectiv cea mai mare temperaturd,pentru orice zi a sdptdmdnii solicitatd de cel interesat.
l. Analiza problemeiDatele problemei au aceeaqi
rmnificalie - temperatura zil-r-1ci -, dar se referd la zotteIttrite; de aceea, pentru organi-z"area lor se introduce gi criteriulzonl. Rezulti un tablou (T) cuctrui dimensini: zona (linie) gi
ziua (coloand) (frg. 5).
Figura 5
rS
ffi$r.q
T
21
18
t8 15 t2 t4 t8 l5 t2
t6
T7
l9
20
20
11
l8
Cum organizim datele in tablouri
l. DacI intr-o problemd este necesard memorarea mai multor valori cu aceea;i sem-
nifica{ie, aceste valori vor fi grupate intr-un ansamblu de tip tablou.
2. in funclie de cerinlele problemei Ei de semnificalia datelor, acestea sunt organi-
zate intablouri cu o singuri dimensiune, numite vectori, sau in tablouri cu doud
dimensiuni, numite matrice.3. Elementele unui tablou se identificd printr-o adresd formata din numele tabloului
;i cdte un indice pentru fiecare dimensiune.
4. La tablourile cu doub dimensiuni, primul indice din adresd reprezintd linia, iar cel
de-al doilea coloana tabloului.
5. Opera{iile care se repet[ pentru fiecare element din tablou pot fi grupate in struc-
turi repetitive cu contor. contorul genercazb chiar indicele de adresi'
3. IMPTEMENTAREA TABLOURILOR BIDIMENSIONATE
pentru memorarea gi prelucrarea datelor organizate ca tablouri bidimensionale, inainte de
scrierea unui program trebuie sd cunoaqtem urmatoarele elemente:
- tipul elementelor din tablou (datele cu aceeaEi semnificalie),
- numarul maxim de elemente din tablou (capacitatea tabloului)'
T -:-*--- _-.--;l
! capacitatea tabloului = ffmax -linii * nrmax -coloa .. ,
Aceste elemente rezultit din analiza problemei gi sunt folosite de compilator pentru deter-
minarea zonei de memorie alocatd tabloului'
Figura 6 - Liniarizarea tabloului bidimensional
Tabloul ocupd in memoria calculatorului o,,suprafa{i" (array) compusd din loca{ii invecinate
(adiacente). in fie.ur. loca[ie este memoratd valoarea unui element. Adresa loca{iilor incepe de
ia o roloaru de referinyd specificd limbajului de programare (corespunzitoare primei linii) qi se
construiegte prin valori succesive (corespunzitoare coloanelor de pe linie), pentru fiecare ele-
ment din tabiou. in memoria calculatorului, tabloul este liniarizat: elementele sunt memorate in
localii adiacente, in ordinea liniilor (fig. 6). Adresarea unui element se face printr-o pereche de
indici corespunzdtori liniei gi coloanei pe care se afld elemenful respectiv.
h cnmscmi nPri' trrroc'il'eis
q|i,..r:-_
I 1,;-':q.l7? jq -trinm,j- ttww*r
I -",:.;,;'t ii -i{rl:i;: wfr;,;
-{.eesaiza clgmrrdor {e :^N
mirus:i;
Ftrr *;e-'---'e = "r*sePetrrr -i-€-;'t-\jiE
Prefurcrm rlem
ffir.it Fmr6ndt Fltrr
F!ffiu mcrtxie oe gmne sro' m
tnlr. =-g-;= g ':r:i JsJ' -
a-ijt: 'l-- dE i"L +,&arrprrrn*i ,ic pe;lL',xir.te soh rf,d
gwlc ria swlt ryu
@ptrmmefoTdl'eftmfl 1
fdjr" Tlh;ifh
{&@
tu&lrswicmt'
-ryrm, rrqll-M}'
h[:-il,u5&f q=0. m !tt@ &qp,oru.$fl{L'd
MtBI
tu)
brri
rmnil6J valori cu aceea;i sem_btu de rip tablou.r darelor. acestea sunt organi_frri- sau in tabiouri cu doud
fumara din numele tabloului
.&esi reprezintd linia, iar cel
Slou pot fi grupate in struc_tdcele de adresl.
ONATE
bidimensionale, inainte de
L de compilator pentru deter_
mpusa din loca{ii invecinatert AdrESa locafiilor incepe de
Smzeroare primei linii) qi se: pe [inie), pentru fiecare ele_demetrtele sunt memorate inil se face printr-o pereche deryecdr'.
in consecinfd, tipul variabilelor folosite ca indice de adresd trebuie sd accepte valori indomeniile:
(l) lvaloare de referinld, nnnavliniil pentru indicele de linie qi
(2) lvaloare de referinld, nrmax-coloane] pentru indicele de coloand.
Adresarea elementelor se face, cel mai frecvent, prin doud structuri repetitive cu contor,
imbricate:
pentru indice linie: valoare-de referinld la nr-linii executipentru indice_coloana = valoare-de referinli la nr-coloane executi
ll prelucrarea elementelor din tablou in ordinea aEezdrli pe liniisfirqit pentru
sfffrqit pentru
Pentru indicele de linie sau indicele de coloand, se pot folositpuri diferite de date, ceea ce permite o referire asemdndtoare cu
cea intilnita la jocul de qah; spre exemplu: T[2][C] reprezintitelementul de pe tabla de qah aflat pe linia 2 in coloana C (fig. 7).
Elernentele de sintaxd specifice tablourilor bidimensionalesratprezentate in Tabelul 1.
Tabelul l. Tablouri bidimensionale - elemente de sintaxl
r coloane I-i
*#d{i;'i*ffiffi* e Iqffiilsffia,
PASCAL tar r,. ii:,r:.,,,., :..',, C / C+$ -""tf i - i,l{,rt1i:.J
Declararer
"."r rbhr
^rr^y l*,tabloului
tip e I ement t ab loul nl lfncl;Declararea indicelui de adresl
t'ar l,ciipindice; tipindice l,c;
Adresarea unui element din tablou
ablou fl,cladresa de referin(a este 1.
tablou llllc ladresa de referinld este 0.
Exemplu: pentru tabloul temperaturi cu 100 de elemente de tip intreg distribuite pe l0 liniili l0 coloane: se inilializeazd ct zero elementele de pe primele 5 linii
\ar temperaturi: array [1..10,1..10] of integer;Lc: byte;begin
for l:=1 to 5 do
for c::1 to 10 do
tentperaturi [,c] =0;
end
int temperaturi tl0l [10];short l,c;
{for (l=0; i< 5; i+)for (c=0; i< 10; ix)
temperaturi [i][c]=0;)
Datele organizate in tablouri bidimensionale sunt prelucrate element cu element. Iatidintre cele mai frecvente prelucrdri:
r introducerea valorilor direct de la tastaturd sau dintr-un fiqier;o afigarea valorilor pe ecran sau intr-un fiqier;o verificarea unor proprietifi;. compararea valorilor (aflarea elementului maxim sau minim);o simularea unor situalii reale.
Tabelul 2. Opera{ii la nivel de matrice
]fltn:4lcm'-rsmuffi&-- R, rry. [i-t0' [JqdQrI*-6d.-n : b-l'le
[email protected]," lulurd&e#trsadh tnr
rEPEdi-t'pi(mbictd
:-iG.a * rrlEEIe 'erlElcrR[.:l =l: R$rt =1;
"ffit'mis,mFn"a"*madm.tdt{ drr&l} u tHl}
@lH.ful-:I. w n do
hEg*T@;furc=l Pndo
rm tR[Lc] - '[
$*@
A. lntroducera valorilor in ordinea ,,pe linii"int A [10] [0] ;
int l,c,m,n;
{cout((" numarul de linii:" ; cin>>m;
cout((" numarul de coloane=" ; cin>>n
for ( l=0; l< m; l++)for ( c=0; c< n; c**)
cin >>A[1][c];It
var A: anayfl..10, 1..10] of integer;
lrcrmrn: byte;
begin
write ('numarul de linii:'); readln (m);
write (' numarul de coloane='); readln (n);
for 1::l to m do
for c:=l to n do
readln (A[,c]);end;
B. Afigarea valorilor in ordinea ,,pe coloane"se pistreaz[ declara{iile de la secvenla A
for ( c=0; c< n; c]_l-)TIcout<<endl;
for ( l:0; l< m; 1+i)cout <<A[1][cf1<" ";
\t
beginfor c::1 to n dobegin
writeln;for 1::1 to m do
write (A[,c], ' ');end;
end;
elementului minim de pe o linie oarecare, kse pistreazl declara{iile de la secven{a A
int k, min;
{cout<<" specificati linia:" ; cin>>k;min=A[k][0];
for ( c:l; c< n; cH)ifA[k][c]< min
min=A[k][c];cout(("min. de pe linia"<<k<<"="<<min;
)
var k:b1.te; min: integer;
beginwrite ('specificati linia='); readln (k);min:=A[k,l];for c'.=2 to n do
if A[k,c] < min thenmin:=A[k,c];
write ('min. de pe linia', k, '=', min);end;
di.-.F.-frtlin mdiza P*lcm' em
Grtmfin rcmhucetrffi
LB,o*wdPehdletirudeie EitrfiE ry
r- Pe e{cu$t siqritfi'rMuMturtrq
dE&Pe linrir c'r€rydMudmminsmi
1lrprfueezidffi&
nent cu element. Iata cdteva
',lCHlt"
linii=" I cin>>m;[loanF";cin>>n
)
f,rrg k
t= ; cin>>k;
((k(<"="
rar R: anay [1..10, 1..10] of bye;Lc,ij,d,n: bye;L'egin
rvrite (' numarul de persoane=');readln (n);d:=1;repeat
write ('prietenie intre: '); readln (ij);lrelatia de pritenie este reciproca)
R[ij] :=l; R[,i] ::1;write ('mai sunt prieteni? ');readln (d);
I da (d=l)/ nu (d:0))until d--0;
tor l:=1 to n dobegin
writeln;for c::l to n do
write (R[,c], ' ');
RU0l uoll,c,ij,d:l,n
cout<<" numarul de persoane:" ; cin>>n;while (d)
{cout{<"prietenie intre:" ; cin>>i>>j ;
ll relatia de prietenie este reciprocaRtil[]=1; R[r]til=1;cout<<" mai sunt prieteni?" ; cin>>d;
llda(d=t)l nu (d=0)
)for ( 1:0; l< n; l++)
{cout<<endl;
for ( c=0; c< n; c*t)cout>>Rfll[c]<<" ";
D. Simularea unor situatii reale.E:remplu: memorarea rela{iilor de prietenie dintre memtrii unui grup de n persoane (n<=10)
8-e lyds- s p li s gli s -l! p s r s -4r- s e !l_Din analiza problemei, a reiegit necesitatea orgafizitt'ri datelor intr-un tablou bidimensional.
Continudm rezolv area problemei.
2. Rayionamentul problemeiPentru determinarea temperaturii minime qi a temperaturii maxime inregistrate in cele zece
zofle, pe parcursul sdptdmanii, se prelucreazd toate elementele din tablou.Pentru determinarea temperaturii medii, tmed, se solicita zona gi se prelucreazl doar ele-
:rentele de pe linia corespunzdtoare.Pentru determinarea zonei in care s-a atins temperatura minimd sau maximd, se solicit[ ziua
;i se prelucre azd doar coloana corespunzdtoare.
ffifri,r!
inceput temperaturi2
alocl T[10, 7]
pentru zota:1, l0 executi
I pentru zi-- 1,7 executl
I citeqte Tfzona, zillsfffrfit pentru
sfArqit pentrutmin +- T[1, 1]
tmax €- T[1, 1]
pentru zofia:1, l0 executipentru zi:1,7 executl
sfffrEit pentruscrie tminscrie tmaxscrie "ce zond vd intereseaz6?"
citeqte zona
tmed +-0, pentru zi: 1.7 executiI tmed +- tmed + Tlzona, zlfII sfArEit pentrutmed <- tmedl7
ldaci T[zona, zi] < tmin
I atunci tmin <- Tlzona, ziflsfirgit daclI daci T[zona, zif > tmax
I atunci tmax <- Tlzona, zlfI sfffrsit dacl
sfirqit pentru
scrie zona, tmed
scrie "ce zi vd, inteteseazd2"
citeqte zitmin <- T[1, zi]zmin <- Itmax <- Tll,zl)zmax<- |
bloc
scrie zmin, tmin, zi
scrie zmax, tmax, zi
sfflrEit temPeraturi2
zona= 2, 10 executi
dacl T[zona, zi] < tminatunci
bloctmin <- Tlzona,zl)zmin <- zona
sfflrqit bloc
sfirqit dacidacl T[zona, zi] > tmax
atuncibloc
tmax <- Tlzona,zi)zmax<- zona
sf0rqit bloc
sfArgit dacisf0rsit bloc
pentru
# TEME
3. Reprezentarea algoritmului
l. La cabinetul medical, se calculeaz[ inallimea medie a tuturor baie$lor din qcoald. Precizali
care este fon1a de organizarea datelor corespunzdtoare acestei situalii'
2. La cabinetul medical, se calculeazd indllimea medie a tuturor blie{ilor din Ecoa16, pe grupe de
v0rstd (ani de studiu). Preciza\icare este forma de organizare a datelor corespunzdtoare aces-
tei situalii.
3. La cabinetul medical, se calculeaza indllimea medie a tuturor bdiefilor din qcoala pe giupe de
virstd (ani de studiu), pentru fiecare clas6 in parte (9A,..., 12 c,...). Preciza{i care este forma
de organizare a datelor corespunzdtoare acestei situalii'
4. Administratorul unui bloc cu 12 etajeEi 20 de apartamente pe etaj calculeazi, cheltuielile de
intrelinere, in funclie de numIrul de persoane din fiecare apartament (toate apartamentele au
acelaqi numir de camere).
Rculfl4iI@ trMr@eDG xr
r! i@trs$rnr€o rodmfu &u*a'mnmrl rrry;
uoftnscamliuuh&Pm.- -.=rrtjri giraf cr
Unaon@r'rdld&s !3':<-dtacr*Ei!lll
i334t,@
Iu
5
uCI
5
I
i*w
4U-qqqttL[r
Realizali un program care sd rispundi urmdtoarelor cerin{e:
a) inregistrarea numSrului de peisoane din fiecare apartament, pe etaje, de Ia parter pana la
:ltimul etaj;
b) afiqarea numdrului de persoane din fiecare apartament, pe etaje, de la ultimul etaj pdna la parter;
c) cunoscAnd numdrul unui apartarnent, introdus de la tastaturi, s[ se afiqeze etajul la care se
aJi apartamentul gi numdrul de persoane care locuiesc in apartamentul respectiv'
5- Se considerd tabloui M cu urmitoarele elemente:
l234PrecizalicevaloriafiEeazdsecvenfademaijos:dI
I l0 erecuti
iT[zona- zi] < tminbci
blocrrnin <- Tfzona, zi]zrnin <- zona
sfiirsit blocI drciT{zona- zi] > tmaxtrrci
blocrmax <- T[zona, zi]z\ax<- zona
sfir5it bloct drciI
fiqif61 din qcoald. precizatjEirn-di.
:tllor din qcoali, pe grupe deHor corespunzdtoare aces-
:4lor din Ecoald pe giupe de
--)" Precizati care este forma
4i calculeaz6 cheltuielile deDetrt (toate apartamentele au
pentruc=l,3executl;pentru l= 1.2 executi
I scrie M[, c]
I sfffrqit pentru
sfirgit pentru
5
9
6
t0
7
t1
8
t2
a) 1,5, g,2,6,10,3,7,11; b)1,2,3,5,6,7; c) 1,5,2,6,3,7'
a Ce realizeaz6 urmitoarea secvenld de opera(ii:
aloci M[10, 10]
lPentru i = l, l0 executd
I u1i,4 - i
lsfffrqit Pentru
a) atribuie valori de la 1 la 10 elementelor din vectorul M;
bj atribuie fiecarui element de pe diagonala matricei M o valoare egald cu linia pe care aces-
:a x afl6;
c) atribuie valori de la 1 la 10 primelor 10 elemente din matricea M.
-. care dintre urmitoarele secvenle de operalii memoreazd in colqurile matricei M valori citite
de la tastatur5; matricea are 5 linii qi 5 coloane'
pentrui=l,5executlb)
,7iLzilrU a)pentrui=l,Nexecuti
I lpentruj = 1, N executd
I I citeste M[i, j]
I tsferqit Pentrulsfirqit pentru
pentruj=l,5executlsdacl (i = l) qi 0 = 5)
I atunci citegte M[i, i]
I altfel citegte M[, j]I sf0rqit dacl
sf0rgit pentru
c)l+-1ce5
tpentrux= l,4executi
I citeqte M[, c]
I c<-1I t-.I sfflrtit pentru
d)
sfflrqit pentru
l+-1ce5citeqte M[1, 1], M[], c], M[c,1], M[c, c]
@tr
4. TABLOURI BIDIMENSIONALE - CAZURI PARTICULARE
Matrice patrataRezolvarea problemelor cu calculatorul necesiti
gdsirea soluliilor de organizare qi memorare a datelor,
astfel incAt acestea sd pdstreze semnificaliile reale atit
din punct de vedere al valorilor proprii, cit qi al relali-
ilor cu alte date. Spre exemplu, daci membrii unui
grup (persoane) irnprumuta bani unii de la al1ii,
intereseazf, atAt suma de bani primitd/datorata, cat licine/de la cine a imprumutat. in acest caz, dacd in
grup sunt ,x persoane, u:r tablou bidimensional, G, cu
r linii gi n coloane, este suficient pentru pistrarea atAt
a valorilor imprumutate, cAt ;i a relaliilor de impru-
mut (fig. 8).
Fiecare element din tablou reprezintd valoarea unui imprumut; liniile 9i coloanele reprezintd
persoanele din grup care dau bani unei alte persoane sau primesc bani de la altd persoani din
grup. Fie i gi7 doud persoane: G[ii] teprezintf, suma de bani pe care i-a imprumutat-o 1ui7, adicd
suma de bani pe care j aprimiro de la i. Pentru exemplul din figura 8, G[4,2] reprezinti suma
de 60 lei pe care persoana 4 a imprumutat-o persoanei 2'
Tabloul folosit are o particularitate: numarul de linii este egal cu numdrul de coloane, de
aceea este numit tablou patrat sau, mai simplu, matrice pdtratd'
intr-o matrice pdtrati deosebirn urmitoarele elemente specifice (fig. 8):
- diagonala pinciPald (dP);
- diagonala secundard (ds);
- triunghiurile formate de cele doui diagonale;
- direc(iile paralele cu fiecare dintre cele doud diagonale'
Matrice binariRelu[m situalia grupului de persoane care
imprumuti bani unii de la al1ii, dar urmirim numai
relalia de imprumut: cine/de la cine a primit bani. in
acest caz, nu se mai pdstteazd valoarea imprumutu-
lui. Fie I gi7 doua persoane: G[ii] arc semnifica[ia ia imprumutat bani luiT echivalent cu7 a primit bani
de la i (fig. 9). Elementele matricei nu pot avea decdt
doui valori alese convenlional (spre exemplu 0 sau 1),
cu semnifica{ia:i1
Figra I
l{,moca dE iirg d@@ig. sE lntlmese trusrffi itu
Mic im*irifuiitr grryidcrPw
@reMi dacfutrdd
lI*rcF}[ul= {
l0(iririlG-F
nrmmu*cefrtulrirlEr:ri@ir
-Egn=Fmto}
mrirf*rfkEEdmh'h
1
2
J
4
5
L,&h stogr h@'ffdd*F-Pit&ctut hacfu{!@irift r-EIiltI
Sdtra-ml*@ofri- -trmffi'l
I -:-ldrfrdad.
66 iffgil iFdrffiffreireiiffiPrrbililiri-ffiicndfr#O
thffirituCrf_i=qa,eJnd'-u'i
o,,r, =l'Io
daci i imprumutd bani lui7
daca I nu imprumuta bani 1ui7
Figura 9
u,i | fli{wqe$e4-r-i:ffi&_isp:r*MW r
0 0 1 0 I
1 0 0 0 0
0 0 0 0 0
0 I 0 0 I
0 0 I 0 0
UI-ARE
LIe si coloanel e reprezintdtri de la alta persoana diniryrumutat-o lui j, adicFt
, G[4,2J reprezintd suma
n'rmirul de coloane, de
'8)'
Matricea ale clrei elemente au valori in mulflmea {0,1}, cu semnifica{ii logice comple-Tentare, se numeste matrice binard.
Matrice simetriciDaca in grupul de n persoane urmdrim relafiile de prietenie, acestea pot fi memorate tot intr-o
:arrice binari ale carei elemente au urmitoarea semnifica{ie:
Pliil =
I dac[ i este prieten cu7
0 daca i nu este prieten cuj
Pietenia este o relalie reciprocd; acest aspect se
=;i.se9te in proprietatea de simetrie a matricei bi-m:e asociati grupului de persoane: P [i, jJ = P A, I:+ l0).
Matricea punctelor unui planPe ecranul monitorului, in modul de lucru text, caracterele sunt afigate pe rdnduri, de sus in
ux. de la stdnga la dreapta, pe fiecare r6nd. Se poate spune cI ecranul monitorului este oruarafali pland ale cdrei puncte sunt distribuite pe linii gi coloane (cel mai frecvent, 24 de liniiI yl de coloane). in acest exemplu, regdsim modelul bidimensional de organizare a datelor::ncirei suprafe{e plane ii poate fi asociati o matrice a punctelor. Valorile atribuite elementelorm matrice au semnifica{ia specificd problemei modelate. Pentru exemplul suprafe{ei-ecran,m;i elementele matricei sunt de tip caracter, in matrice poate fi re[inut textul de pe un ecran.
Ln alt exemplu: o imagine - fotografie - este tot o reprezentare in plan. Punctele planuluiftr'neazd obiecte distincte, daci sunt evidenliate diferit de la un obiect la altul, prin culoare.&ci toate punctele unei imagini (suprafa{d) sunt colorate la fel, imaginea este formatd dintr-unsrgur obiect.
Oricdrei imagini ii poate fi asociatd o matrice arunctelor, valorile atribuite elementelor din matrice au sem-njcatia culorii fiecirui punct. in figura I I este reprezentatitmm'icea asociatd unei imagini, in care s-au folosit 3 coduri,re mlori cu semnifica{ia: 0 - alb, l- negru, 2 - roqu.
Cu ajutorul matricelor de tip plan, pot fi modelate gi situ-ci de joc: aqezarca pieselor pe tabla de qah, configura{iamil labirint,,,X qi O",,,avioane" gi altele.
Figura ll
@x*
Figura I
I
2
3
4
5
I I
I I
I I I
I I I
I I
Figura l0
0
0 0 0
0 0 0
0 0
I 0 0
0 0 0 0 0 0 0
0 I I 0 0
I 2 2 2 2 0 0 0
I 2 2 2 0 0 0
I ) 2 I 2 0 0 0
0 I I 2 0
0 0 I 2 2 0
0 I I I 0 0'gtro 9
5 PmEi't-[fl"{'m'E{ TtBt'or-x{wr.l. Determi*afi propriet[lile elementelor aflate pe diagonala principala, intr-o matrice pi,.ratlt' 5"
'' fl'OCadilZer,o Cd'tm
Scrieqi un program pentru ahEarea acestor elemente'
2. Determinafi proprietdlile elementelor aflate pe diagonala secundari' intr-o matric e pdttatd' "FnrT *rr pl?iilsfiil
Scrie{i un program pentru afiEarea acestor elemente' ;fu rurqml *
3. Scrieti un program care sI verifice dacd o matrice pdtratd este simetric6' 6Br'{-Jnrrr olm Ilamsru I rn r'l{rr
4.Formu1a!iunexemp1udeprob1em6caresdnecesiteorganizareadatelorintr.omatricebinar6.ffi5. Formulali un exemplu de problemi care sd necesite orgatizateadatelor intr-o matrice de tip ,@ uf ]tsftero&; n&rm
1mu ma
-umumu d$fiH ${nmx[es r'riur 'lplan.
6. Determinali conditiile de amplasare pe tabla de gah a dou6 piese de joc - dame -' astfel-inciti I {mrm'mu 6uu.pafu'r uu
acestea sd nu se uu... lrnai.ulie: dou6 piese de gah _ dame _ se atacd dac6 sunt amplasate;
pe aceeaqi linie, pe aceeaqi coloan[ sau pe aceeali diagonal6') Ii r*iJ'fs#PT.Construilitablouldevecindtatepentru!6rilesituatepehartadinfigural2.
tiilE&
mrfr[m
,umuffi
Fw{bry"m-m: F@ f,ronP@@Mom,ilAillE@lqr'uilgru&.epoElryi
Figura l2
56 se verifice dacd o matrice pdtratd este ,,tablou magic". intr-un tablou magic, suma ele-
**.1o,. de pe oricare linie esie egal6 cu suma elementelor de pe oricare dintre coloane pre-
cum qi cu suma elementelor de pe oricare dintre diagonale'
ry{
Exemplu:
j
gmala pmcipali, intr-o matrice pdtrati.t-rgmala secundari, intr-o matrice piitratd.'E-
plrui este simetric[.
ecgmizarea datelor intr-o matrice binari.E qanizarea datelor intr-o matrice de tip
t e doui piese de joc - dame -, astfel inc0t* - dame - se atacd dacd sunt amplasateidrgonala.)
:pe harta din figura 12.
3gic-. int-un tablou magic, suma ele-Elor de pe oricare dintre coloane pre-
lr:rrlg.
5. PRELUCRAREA TABTOURILOR BIDIMENSIONALE
5"1. Localizarea elementelor cu aceeasi proprietate
Forma{iuni geograficeSe doreqte determinarea configuraliei unui teren dreptunghiular dupd formaliunile
geografice din Tabelul 3 Sifigura I j.Analiza terenului seface prin seclionarea acestuia pe orizontald ;i pe verticald.Punctele aflate la interseclia dintre secliunile orizontale ;i secliunile verticale sutxt cotate
ifui de nivelul mdrii; cotele sunt valori numerice intregi ;i pozitive.Terenul ute seclionat prin n secliuni orizontale ;i m secliuni verticale.O formaliune geograficd este formatd din cel puyin trei puncte.
Tabelul 3. Forma{iuni geografice
FORMATIUNEA GEOGRAFICA
Pantd a)
Rapd b)
Deal c)
Vale d)
Piatou e)
Teren denivelat 0Funct de tip ;a ry: punct aflat la cotarrarime pe sec{iunea oizofiali;r gi lacua minimd pe sec{iunea verticalEy; se
pae defini gi punct detip Salx g)
Eremplu:In Tabelul 4 este reprezentat un teren pe care s-au flcut patru sec{iuni orizontale qi qapte sec-
@nn verticale.
Tabetul 4. lnregistrarea datelorintr-un teren sec{ionat
r';S'4cf ' ,q#}?t, i
w
1 3 4 5 6 7
I 25 72 '69 69 69 73 40
2 20 40 50 56 30 100
3 15 ,30 35 40 39 20 t04 l0 55 0 60 42 50 l9
Rezultatele atalizeipe sectiuni sunt prezentate in tabelul Tabelul 5.
Tubelul5. Analiza Pe secfiuni
Numlrul sec{iunii i Formaliunea geograficlNumirulsec{iunii
Platou la cota 69
Formafiunea geogralici
Vale cu punct minim la cota 30
Ripn
Vale cu punct minim la cota 40
Teren denivelat
Vale cu punct minim la cota l9
tiruluir
$ir crescdtor/ descrescitor
Existd un punct de tip vArf, astfel inc6t toate
punctele dispuse la st0nga acestuia formeazd
un qir monoton crescdtor, iar toate punctele
dispuse la dreapta acestuia formeazi un qir
monoton descrescitor.
Existd un punct de cota minimi, astfel incAt
toate punctele dispuse la st0nga acestuia
fonneazd un gir monoton descrescdtor, i
toate punctele dispuse la dreapta acestuia
formeazi un Eir monoton crescitor.
Deal cu vdrfla cota 40
Teren denivelat
Tabelul6. Monotonia qirurilor de valori
I:m'ru etsmnuirmm. :serr'
tr=E:mrm,affir j-rrTJrllTmt E :E :
&mufurmu-illmnmtrni d
bry[ rufirt[.I -irrnrren nlnr jimm p
-+nnrrrrfi:ruur r rolfuarnr &[d[r [i[- ] [lli dnrm[ rmfuq rryr,mlrElngilt
' jm :@, UroruI m^lgmc'FrrFil[?n@o*-;r*ffih-: jfrrlbncJI ru umlifon,i'L"trd fl
Li !ffi,ofl <ry
-iT* tS*
fr-i ryP-i
-irff5f .EEEIG.EIN
ry'*[Wi,-il m_c1
ff5ffp0rcmffifunb hr5hP:5
-i uL4h&o
#5#[h'H*Lrt@&adfrEHT*mrffiPL
chrmurffl&.ffi/HtD6:;ffipcfr
dhqpt}m
I,t-@4-
i Platou
tIi*-",*--
":i' 20.. :t: l,rlr:i:.'rr ,l :tr';jril:]'
bdul Tebeiul 5.
ru fi inregisrrate intr-url tablou bidi-tmne - sectiuni verticale.
r mmronia Eirunlor de valori (cotele
euelor cu aceeaqi proprietate dintr-un
ilq descrescdtor
i Fmo de tip v6{ astfel incit toatedispse la stdnga acestuia formeazirmo(on crescdtor, iar toate puncteleh drcapta acesfuia formeazi un sirdescrcscitor.
I Fmct de cok minimd, astfel incdtrtele dispuse la stinga acestuiam sir monoton descrescdtor, iar
mele dispuse la dreapta acestuiam sir monoton crescdtor.
lpfin trei puncte consecutive aflatecoti.
. Pentru exemplificarea rezolvdrii, prezentim, in pseudocod, secvenfa prelucrdrilor pentrudeterminarea forma{iunii de tip platou qi a punctelor ie tip ;a;ry .
Determinqrea formaliunii de tip platouinceput platoull cintarea unei forma{iuni platou pe linia &rsemnificalia variabilelor de lucru'M[00,100] tabloul cotelor cu m sec{iuni verticale/p lungimea platouluicp cotaplatouluiiruqalizar e lungime platou
lP*lcp*lr4[k,l)pentru c=2 la m executi;' se verificl daci punctul lrl[k,c] aparfine platoului
dacl M[k,c] =cpatunci lp e lp+l ll creqte lungimea platouluialtfel
dacl lp>=3 ll existdplatou la copta cpatunci scne platou la cota cp
sfirgit daclI inilializdri pentru determinarea unui nou platou
lP*lcp+-M [k,c]
sfArgit dacisfirgit pentrui se verifich daci linia k se terminl cu platou
dacl lp>=3atunci scne platou la cota cp
slirgit daclslirsit platou
Determinarea punctelor de tip Sa;ryr Ra{ionamentul de rezolvarePasul ISe parcurge tabloul pe linii: pentru fiecare linie, se determini elementul maxim qi se
Snmreaza coloana acestuia in vectorul max linii.Pentru exemplul dat, vectorul max-rini are urmdtoarele valori: 6,7, 4, 4.Pasul 2Se parcurge tabloul pe coloane; pentru fiecare coloani, se determini elementul minim qi se
nisnreaze linia acestuia in vectorul min coloane.Fentru exemplul dat, vectorul min ioroane are urmltoarere valori: 4,3, 4,3,2,2,3.
@xr
Formafiunea geografici
\ale cu punct minim la cota 30
\ale cu punct minim la cota 40
\ale cu punct minim la cota l9
Pasul3Se parcurge vectorul max_linii: in variabila de lucru cmax, se refine valoarea unui
mox_linii[k]cmox: max_linii[k]
se verificd proprietatea de punct ga_xy:
min_colanefcmax]: kPentru exemplul dat, urmdrim datele din Tabelul 7.
Exist[ punct $a_xy pe linia 3, coloana 4.
Tabelul 7. Determinarea punctului qa_xy
linia Cmax min-coloaneIcmax]
I 6 2
2 7 3
4 4 3
o Secven(a pseudocod a prelucrlrilor pentru determinarea punctelor de tip sa xy:
inceput punct_qa_xy
ll cdttarea unui punct ga_xy
i/semnificalia variabilelor de lucru
//M[100,100] tabloul cotelor cu m sec{iuni orizontale gi n sec{iuni verticale
// max_linii [100] vector cu m elemente in care se reline coloana elementului maxim de
fiecare linie// min_coloane[100] vector cu n elemente in care se refine linia elementului minim de
fiecare coloanlllmax valoarea maxim[ pe o linie; cm coloana pe care se afli max
llmin valoarea minimd pe o coloan6; lm linia pe care se afld min
// se determini elementul maxim de pe fiecare liniepentru Fl la m executl
max (- Mthllcm <-1pentru c=2 la n executidacl M[k,c]>max
atuncibloc
mix<- M[k,c]cm<-c
sfArgit bloc
sfArqit daclsfflrqit pentru
in linia h elementul marim se
rar_linii[k]<- cm
sfirsit pentru
se determind elemenhri nrininp€ntru c=1 la n executl
nin (- M[1,c],m e1pentru 1 2la m execuddaci M[lgc]<min
atunciblocmin <- \QaclIm<-ksfiqit bhc
slirsit dac[rlirsjt pentru
I : coloana c, elemetra.i Emu[
mnrr_:nloane[c] <- lm6ndt p€ntru,/' se parcurge vectorui mt-HFru Fl la rn erecuti&Mrtr. +- mar_hdi [k]/ se '. er:ncE proprianrru.,e Pom
H r;r_coloane{cmm;=trnrnci
rcrl Pm6r$t drci
fr pcltru*ti p;nct _s& rl'
IEUE
fuq{r@Eo@mcffitr${tm pe coima 3-
ry&dpGo@-elEMr l.!E&fm rylrmi pcoilm
Lffi@fr@t&ryurfrllqnmffice elbCe
Ltofiidqd&PF-ry-
r{@
F_x-v
F*I
- I
r rcdne valoarea unui element
rcIor detip Sa xy:
rGqiuni verticale
ma elementului maxim de
linia elementului minim de
;di maxrfi min
llinlinia Iq elementul maxim se afli pe coloana cmmax_linii[k]<- cmsf0rsit pentru
// se determini elementul minim de pe fiecare coloanipentru c=l la n executl
min <- M[,c]kn <-Ipentru k=2 la m executldaci M[k,c]<min
atuncibloc
min +- M[k,c]lm<-k
sf0r;it blocsfirqit dacl
sffirqit pentru7 in coloana c, elementul minim se aflI pe linia Immin coloane[c] <- lmsfiir;it pentrui se parcurge vectorul max_liniipentru k=l la m executicmax €- max_linii [k]
se verifica proprietatea de punct qa_xydecl min_coloane[crnax]=k
atunci
scrie punct sa de coordonatek, cmaxrfirsit dacl
dirqit pentrufirtit punct _sa_xy
!-TEUEL cmsruili exemple numerice pentru urmitoarele forma{iuni geografice:
rl platou pe coloana 3, c) r6pd pentru coloana 5, e) punct ga_xy,bt deal pentru linia 1, d) vale pentru linia 4, f) punct qa;n<.
L Construili expresii pentru relafiile de monotonie corespunzdtoare fiecdrei forma{iunigmgrafice.
I Codificafi, in limbajul de programare studiat,@qiunii geografice de tip platou.
{" Codificaqi, in limbajul de programare studiat, secven{a pseudocod pentru determinareapmaelor de tip qa_xy.
secventa pseudocod pentru determinarea for-
ffiSei"1&l': dii}lil : I
!{
lffl"
un program pentru determinarea punctelorfefr/rul9. Ilodele Perm
5. Realiza{i, in limbajul de programare studiat,
tip ga;or.
6. Scrieli secven{ele de instrucliuni pentru determinarea urmdtoarelor
a) rdPi, b) deal, c) vale'
7. Realizali gi testali programul pentru derminarea configura[iei unui teren ale cdrui had€ paralele orizmtale
9i cote se citesc din hqierul teren.in cu urmdtoarea structura:
_peprimalinievalorilenqirnreprezent0nd:nnumdruldesecliuniorizontaleqin
de secliuni verticale;
- pe urmatoarele n linii cite ru valori reprezentind cotele aflate pe fiecare secftune
5.2. prelucrarea elementelor distribuite pe aceleapi direclii(linii, coloane, diagonale)
Analiza problemei
Pentru rezolvarea cu calculatorul, soiurile de plante decorative vor fi codificate' in Tabelul
se prezintd un exemplu de codificare'
Tabelul 8. Codificarea plantelor decorative
Careul pe care va fi probat modelul este format dil n*m Sau fl*,, puncte; in fiecare 1
poate fi saiita o plantd. io fut.tot 9 sunt prezentate c6teva modele dup[ care se vor testa
jamentele florale.
forma{iuni geografice:
Ileruniret dddd
p'ale,le crl 't,+tr
*t&aHerrGgp
aSrrletffirisir
u. . - "-**+4!*,;*Tlffi: {;i&ei"*#,-3j$r
Trand afir imperiaVroqu
rr pentru determinarea punctelor febelul g. Modele pentru aranjamente florale
rmitoarelor forma{iuni geografice:yel€.
qie'i unui teren ale cdruiM:I de sectiuni oizontale qi m
; rflate ps fiecare sec{iune orizon
e ecelea1i direclii
Jqc sd le planteze afit in aranja-frrilor grddinarul vrea sd com-e al plantelor nu poate fi intilrziat,
rrit'e vor fi codificate. in Tabelul
hteretive
r sar n*n puncte; in fiecare "hclt? de rezolvarc
rcdele dupi care se vor testaglEmlle florale vor fi generate intr-ur tablou bidimensional, G, cu nlinii gi z coloane, sau nr* r colmne, in funcfie de model. Pentru fiecare model, se determinl adresele punctelor in carerwwr, Dv uvrstllllll4 atugstrre punctglor m carefi rirfte plantele qi se inregistreazilaaceste adrese codul plantei corespunz6tor modelului.
@,,
I
2
6
7
8
9
Rezolvarea problemei conduce la umplerea matricei cu valori dispuse pe direclii specifice
rnodeiuiui: linii, coloane, triunghiuri, diagonale' spirai6'
in Tabelul 10 sunt prezentitesecventple pseudocod pentru generarea adreselor de umplere
corespunzitoare modelelot ptezentale'
Tsbelull0. Secvenle pseudocod pentru generarea adreselor de umplere
Brazde
orizontale
Triunghi
i Se pot forma n-2
i direcqii (d). Paralele
i cu diagonala Princi-
{ nala li situate
I deasupra acestela,
Spiral6
Se parcurg
de la exterior - Primulcadran-p, sPre
interior, ultimul
cadran-u
up(1 u€nrepeti// se parcurge prima linie, p, din cadran'
//de la stAnga la dreaPta
pentru j=P la u executl
G[pj] € cod
sfflrqit Pentru// se parcurge ultima coloan6, u, din cadran'
// de sus in jos
pentru 1=P+1 ta u executl
G[i,u] € cod
sffirqit Pentru//se parcurge ultima linie, u, din cadran
ruMrem" cffSrmsr pum.rt:[ I
ffiaXrWe.E6r,u@hlh mr
n@wE@cm@ rB prqmriir
illi,ll!!1illlm{ffit [G[E[
&dr ufrd"cimwunEmr
ffmffi(lulffididrlntpffi.'qtmnffi fu(Uqnu
56ilim45;llipiln*ltifl flffiil!
m'
q
;*' ,za":i "--, tr
Triunghi stdnga
\,**.,"*..." _*I
\
\
I Paralele la, raratele Ia
i diagonala prin-
i cipala
\
\
ttiincreuracu o matrice Pdtrat[ nxn
// pe linii i ;i coloane jpentru t=2la n executi
Pentru j=l la i1 executl
G[ij] € cod
sfirEit Pentrusfirgit Pentru
Tlseluieazecu o matrice n*n
// pe linii i Ei coloane ji/ pe diagonalele d
pentru d=\ la n-2 executl
pentru i:l la n-d executl
Gli,i+dl € cod
sfflrgit Pentru
vdori dispuse pe direclii,specifice
tru gmerarea adreselor de umplere
rtcdor de umplere
r aeruti
o marice patrati n*nloene jcrGctrtirl exerutl
o mafice n*nl@e j:d
"2 erecutih n d executl
r,H] € cod
t!
fua linie, p, din cadran,
dreapta
l trecuti
rime coloand, u, din cadran,
t u executi
ima linie, u, din cadran
lldela dreapta la stingapentru j=u -1 Ia p executlG[uj] € codsfirgit pentru
// se parcurge prima coloand, p, din cadran,// de jos in sus
pentrui:u- I Iap- I executlG[i,p] € codsfArqit pentru
// se pregdtesc valorile p gi uI / pentru cadranul urmdtorp€ p+lu€u-1ll se testeazd daci se mai pot forma cadranepini cffnd p>u
# TEME
L CcEsEuiti expresii pentru rela{iile care definesc direc{iile de umplere pentru fiecare dintremodelele propuse.
& Scnet secven{ele de instruc{iuni pentru generarea fiecdrui model.
Realizafi qi testali programul pentru generarea fiecdrui model floral (pentru fiecare model sera scrie un program).
Itrtnr atractivitatea prezentdrli, realiza\i un program care sd afiqeze modelul floral colorat,rmespunzator culorii de cod. (Indica{ie: modul de lucru text permite setarea atributului deculoare atat pentru fond, c0t qi pentru text.)
I€elizafi un progmm care si per-ilrit; ufili2afsrului (grldinarul)si aleaga, pe rdnd, oricare dintremodelele oferite (program cullreriu - fig. la).
Figura l4
&cscrieti secven{a umplerii in spirald astfel incdt sI folosili cdt mai puline structuri repetitive.Cqrneli un model floral nou gi scrie{i secvenla de instrucluni (programul) pentru generareamodelului propus.
. Meniul gridinaruluil. Brazde orizontale2. Triunghi3. Spirald4. Exit
Opliunea:_
,{1-if*r,*rs-,: : , :
+di#[ryp7:rl, " ia+F,** rtr"13\' ;
8. Analiza{i urmdtoarele secvente pseudocod qi determinafi modelul de umplere generat:
a)
pentru i=2 la n executipentru j=n, la n+2-i executl
G[ij] € cod
slhrqit pentru
sfArqit pentru
b)pentru i= I la [n/2] executi
pentru j:i+l la n-i executl
G[ij] € cod
sf0rqit pentru
sfirqit pentru
c)
pentru i=n la [n/2]+1 executlpentru j=n la n+2-i executl
G[ij] € cod
sfArqit pentrusfArqit pentru
d)pentru i=l la n executl
pentru j=1,Ia m executl
G[ij] € cod
sfArEit pentru
sfirqit pentru
5.3. Simularea unor situatii reale
:nrcrmnu"ea rrffis:&ln & uu
llcrLrd h
D4ic'*' rcuohifuIffimrymnUr&qph
5[@,fo'@mOrh*ry-fuiha are I mrmrtrr. gom
rlt-tr*cftt"3P-r rc P
fqprlidkr*gSre;pcm
1lf -; c*clr]f -*rc1r
omirlffiblipcfirrqrohclcILqlnolpoo.&e mfih1r1:oddpIhgr
sgfu;*tipftqr5ic*Ldb&tp
&{p3o&.
&rylrl
ff&!-&
-
5-I
'.?-!5
7
t
Se considerd o familieformatd din pdrinli (l) Si copii (2). Fiecare copil are doi pdrinli intre
care existd relasie de cdsdnrie. Nu toli membiifamiliei sunt cdsdtoilt; nu toli membiifamiliei
au copii.
Rela;iile dintre membrii familiei sunt pdstrate in tabloul de familie (fig. l5)'
Figura 15. Tablou pentru o familie formatd din 8 persoane
I,o**&ffiw
ddul de nmplere generat:;rcrGcuts
I
---JElrErri
I
--_l
I-nterpretarea tabloului de farnilie este prezentatd in Tabelul I l.Tabelul 11.
Membrul familiei Clsitorit cu Copii PIrin(iI 4 6;i87
6 );i73 54 I 6;i85 3 2si66 2 5;i7 I;i47 2si68 I;i4
me copil are doi pdrin{i tntreMF; nu toli membriifamiliei
'fonike (fig. l5).
" familia are 8 membri; pentru fiecare membru (i) analizdmvalorile de pe linia i din tablou,rmrnificafia: (l) - i este crsrtorit cu7, undeT este pozilia varorii l pe linie,(2) - i este pdrinte pentru k, unde I este pozilia varorii 2 pe rinie.
lmli:a inregistrdrilor de tip coloand;'\rla are 8 membri;pentru fiecare membru (j) anarizdmvalorile de pe coloanaT din tabrourrnnificatia: (l) -7 este cisdtorit cu r, unde i este poziqia varorii I pe coroand,
(2) - k este pdrinte pentru7, unde f este pozilia ,attoniife coloana.
Drpa cum rezultl din Tabelul 11, fiecare membru al familiei este complet caracterizat prinh- inregistrdrilor de tip linie gi a inregistrarilor ae tip coloand.lnaliza inregistrdrilor de tip linie;
-:S rela[iile de tip I sau 2 dintre cei n membri ai unei familii, si se construiasci tabloulG furilie-
ffirc4 hbloului de familie: fiind dat un tablou de familie, sd se verifice corectitudineainegimirilor.
@*;
5.4. Prelucrarea imaginilor
Aolicatia 3. Virusuri ?ntr-o matrice
Cum rezolvlm Problema?
codific0nd albul cu zero Ei negrul cu unu'
Cis[torit cu
3. Fiind dat un tablou de farnilie validat, caracterizatifiecare membru al familiei'
4. 56 se determine descendenlii unui membru al familiei (pentru exemplul analizat, I are
pe 6 9i 8 qi nePoli Pe 5 qi 7).
5. a) Realiza{i tabloul de familie pentru fami-
lia cu 10 membri din exemplul urmdtor:
b) Analiza{i tabloul de familie oblinut la
cerin{a a) qi precizali ce restriclii au fost
incdlcate.
6.Cumproceddmpentruadeterminatolidescendenliiunuimembrualfamiliei?
T.Cumproceddmpentruadeterminacelmaivirstnicascendentalfamiliei?
lEry..lnu$uSffi,s:-ir de cErtc p
Lrryr mrr&Ei I'f ::"1:-tucN:-\C imr
/ UIE
xfrl : = i- \f- (sl(rP!ml- = ;.- lrtC c
!ff:'- + Il6r*F*rffip*r
I.ffianuir+ifui prteuslrea#ftffi.:sacfiuta m
lctroril aicmsr- L,,m,
ffi vacmu rre rm @ru MilE NglM[ I'EC
r smrqilrtficl pa
Imqgilr. *liryritu4tu"
smEl*mclh
hqtrfi
Td
1. Introducerea imaginii
De data aceasta, datere de intrare au aspectul unei ,,imagini alb-negru": punctele de i
sunt virusurile colorate in negru; restul suprafelei este coloratd in alb' Pentru a transmlte
ir**iui ,,i*uginea,,, u, treuul se-i spunernculoarea fiecdrui punct. sau, mai simplu, sd-i s
de 1a inceput c[ imaginea este ,,ald6" gi apoi s[-i ddm adresele punctelor colorate in
imagineadescompusdinpoo.t.,'.u.anaatatdebinecuomatrice,inc6teapoatefit
q,.
:i C - ,i,.-,'i.,.
-'"i :3,0 . :":,r t"t1,.
0 I 0 0 0
0 0 I I
0 0 0 1 I 0
0 I 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0
K x
x x x x
x x
e x
mbru al familiei.
Eu exemplul analizat,l are copii
Clsitorit cii
mbru al familiei?
r al familiei?
i-au propus sd le izoleze si, rreme, au constatat cd'nia de bacterii paretnfigura de mai jos.
l. Biologii doresc sdg s rumvre virusuile izolate.
ilbnegru": punctele de int alb. Pentru a transmiteL Saq mai simplu, sd-i spupmctelor colorate in ,
ce, incdt ea poate fi
2 Reprexe n ta rea algo r it m u I uiSecvenla de operafiipentru citirea imaginii:
L- helucrarea imaginii Bordaj ul- =reaza prelucrarea ,,imagi nii": rocarizarea qi numdrarea virusurilor (punctele negre izolate).
;Tff,".J:,:i iT::::._"T::::r;,.*r:i,j,.* ei, pentru necare varoare de 1, se ve_:l*''ii acesteia. un punct,,negru"'este iiorx-dacd,to(i vecinii ,ai ,untffi cle l, se ve-
;Tr;:'#r}:,ffi l#,11 Majoritatea punctelo' uu .at, opt vecini. p*.t.r. de ra ,,bariera,,
}tmru a simplifica procedeul de numrrare a veciniloE vom inconjura colonia cu o zonir frrdH"HlTilH:tdrgeqte.
La fel qi matricea: ro u*u acestui,,boriaj,,, ea se va miri cu doua
edilJul se pregdteqte inalnte. d.e citirea imaginii prin arocarea unui spa{iu de memorie sufi_
ffirtm:.[] nu',a*l de linii $i ;#; necesar memoririi imaginii se mai adaugr
h urmicea uo'aute, necare punct ar imaginii are c6te opt vecini. in figura 16 sunt prezentatede recinitor punctului aflittarddd-;j. --
@*r
0 I 0 0 0 II 0 0 I I
0 0 0 I 1 0
0 I 0 I 0 0
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 I
0 I I I
0 I 0
0 I 0 0
0 0 0
0 0 0
l+1, c-l I l+1, c ll+1, c+l
Figura 16. Vecinii unui punct din matrice
Daca punctul aflat la adresa [], c] are valoarea I Ei fiecare dintre cei opt vecini ai sdi are
loareazero,atunci punctul este izolat. Condilia o vom nota cu cond'
p'to8l f rif PfrOPL S
1i,,, ,r!il:
it ru,r* i -:i:[JI: :;::ia:;[n]nt
[f3FL.c '::.-i-.: ].: - -I:;::=-a-
" .',i J1 il,--"*,ilmd
Cs,hx_ $tmdirjm, 13gr111x flryri:ms' ftignuflm [m lf,rrrJrim ;mE
i. fr.qerii::rn. rm trr:igrnEm .rart
ffir]lmx iI:trJIIl[ -
fipu rlmr.n-mu rsrfiFlt gm.so
- !G .ryEl]f iffr-@Gl[z !E
-p ftrc i uu ie d;,i.mm-E rlrfliln'nr -: lu jc d.r _1gi;
hrilmqc sc"l',m @dii@a ffi
mE mit,IBnAlfts]Mhil*{!D{nffi-t-nm,[lm&rrt ue mlu-ig6tm @l
fipp*"llrrly* jtm i a
Hrmf,rffi,n A,mtr\qm$Lfrrnpgum pomm
nhn - la;amu'I&
- f,fl
I
T-:i'L
4. Reprezentarea algoritmului. Secventa pentru localizarea gi numdrarea punctelor izolate"
# TEMA
Folosind cele doud secvenfe pre zeltate, r ealualialgorifrnul gqTPles$ff*l
r$w|v
inceput puncte izolate
nrp <- 0pentru I = 2,NL * I executl
pentru c = 2,NC+1 executl
dacl M[l,c]= 1 atunci
dacl condatunci
bloc scriel-1,c-nrP <- nrP + I
slhrqit bloc
sflrqit daclsftrqit dacl
slhrgit PentruslhrEit pentru
scrie nrp
sfArgit puncte izolate
E Oe refinut!
1. cu aiutorul matricelor pot fi rezolvate probleme care necesiti descompunerea
imagini in puncte sau probleme de orientare pi deplasare in plan'
2.Pentruugurinlaprelucririipunctelorsefolosegtetehnicabordaiului.
3. Multe iocuri precum ,,X pi zero",rrVaporape", ,,Perspico"' mutarea pieselor pe tabla
gah, ,,Rizboi" pot fi simulate cu aiutorul matricelor'
it
ll
l
i
ime cei opt vecini ai sdi are
l.d.
l,c- lp+l
f,a giprogramul
mcesiti descompunerea
'Lbordajului.
', mrtarea pieselor pe tabla
rB_qstsw{yxqfil?r-_-l"loc
Se dau r jetoane numerotate de la I la n. Din fiecare tip de jeton, exista r bucd{i. Jetoanelet":tuie agezate pe o grild formatd din n*n careuri, ca in exernplul din figura l7 a.
Fi_sua 17. Joc cu jetoaneft
Ccrinle:
-. Stabilili regula dupd care sunt asezatejetoanele pe grila dejoc.l" Realiza{i un program care si aqezejetoanele pe grila dejociupn regula stabilita la cerin{a
pmmudenta.
: Realiza{i un program care sa verifice dacajetoanele de pe grila dejoc respecta regula de@usare stabilita la cerinla l.
Sore exemplu, pentru grila de joc din figura l7 b, nu sunt indeplinite urmdtoarele proprietafi:- pe diagonala secundard se afla unjeton diferi dejetonul r;- x linia 3 nu se afla jetoane distincte;- ue coloana 3 nu se afldjetoane distincte.
-r'dcatie: se vor analiza jetoanele dispuse pe aceeasi linie/coloand sau pe diagonale/paraleleh ciuronale.
!" T{BTTE MATEMATICEI.i{BLA iNrrlurlrutIs'Lzati un program pentru afisarea sub formd de tabel a tablei inmullirii cu 1,2,3, pdnit
&, ",,n,
Spre exemplu, linia 3 va confine tabla inmul{irii cu 3:
U I.{BLA ADTINARII
- tda'zati un program pentru afiqarea sub forma de tabel a tablei adunirii cu l, 2,3, p6nd la 10.
lfne *,emplq liniaT vacon{ine tabla adunarii cu 7:
t7
.&
@ffiffili
ri2 J 4 5
2 J 4 5 6 I
J
,1
4 5 6 I 2
5 6 I 2 3
5i6 I 2 J 4
6il 2 J 4 5
b)
2 -t 4 5
2 J 4 5
J 4 4 2
4 5 I )5 2 3 4
c) TABELAPITAGORA-nReaiizaqi un program pentru afiEarea tabelei Pitagoralt sub formd de tabel cu r
trei coloane: a, b, c. Pentru fiecare linie, valorile din tabela trebuie sd respecte condilia:
axa= b*b * c*c. Exemplu: tabela Pitagora-2
d) MAIRICE A n -PALIN
D ROM
Realiza{i un program care sd verifice dac[ o matrice este n-Palindrorn. O mati
n palindrotm ur"ilini;pe fiecare linie, i, se afl6 cdte n palindromuri distincte formate din
cifre. Un numdr simetric se numeqte palindrom. Exemplu de matrice 5-Palindrom:
7 6 3
22 JJ 66 4455 55
t2t 323 464 585 979
3223 8668 7337 811 8
56365 43234 11111 9t2t9 37473
3. MATRICE RARA
O matrice cu n linii gi rz coloane se numegte matrice rard dacd valorile 0 sunt
Exemplu pentru o matrice cu 3 linii 9i 5 coloane:
intr-o astfel de matrice, intereseazh valorile semnificative, de aceea este suficient sd
rdm valorile diferite de zero ;i poziliile lor in matrice. Poziqia reptezintdin acest caz numdrul
ordine de l la n*m.
Pentru exemplul prezentat, se vor memora perechile: (20, 3) ,(12,9) Ei (88,12 )'
Cerinle:a) propunefi structurile de date
rard;
necesare memordrii valorilor semnificative dintr-o matnce
b) se cunoagte numdrul valorilor semnificative dintr-o
perechile valoare, adresd penfri fiecare numdr semnificativ'
matrice rard (fie p acest numdr) 9i
Scrieli un program care sd genereze gi si afiqeze pe ecran matricearard.
Exemplu: Date de intrare
t=4 nr4 p=2
234 9 14
Date de ieqire - matricea rar6
(TGA"TiEANEA DAIB(
i.3fifrfi A;E.i-cdbracd-il-chi'
dtftffi' fri*d*d/,frErEE
-&cl;ld*-*EadFdt-*til-*;G-*sd*-dlJ**retr,4FE
edrdhfflr
-*F 'd[ td*-b*l}ffrt1--------
@Gflt*drlil@ dreuumd&&m{hciid'9
&'r l-
FrcffidM@@&rsm
Iffi- l[r&upd'
ffi&rydrI
Hu@'enndnfr
@-[de
hbc-rn{il
&piffi
uqffi
iffi*Mffi.$-. a gd:ffi-&N'
0 0 0 6
0 0 0 t2 0
0 88 0 0 0
0 0 0 23
0 0 0 0
0 0 0 0
0 9 0 0
'lli
I
i
itxa_n sub forma de tabel cu n liniili febure sd respecte conditia:
!0iT--0-lIE
A ORGANIZAREA DATELOR iru STNUCTURI NEOMOGENE
rywwII. Studiu de caz Catologut ciaiii,i
intr-o clasd sunt 30 de elevi. Profesorul diriginte&reste si pdstreze, intr-un catalog electronic, urmd-bele informalii (figura 18) :
- numele elevului;
- media generaldt pe semestrul l;- media generald pe semestrul ll;- media generald anuald;
- numdrul de absenle.hofesorul diriginte dorepte sd calculeze media
gxrala a clasei la sfilrgit de semestru sau an scolarti i afseze:
- media generald a clasei;
- lista elevilor dupd media generald;
- lista elevilor dupd numdrul de absenfe.
CATALOG
elev I elev2 elev n
Nume I Medie lAbsenle
trce esre n_polindrom. O nrpalirdromuri distincte formate
de mqx-igg 5 _Pal indrom ;
-:-rr+-_-r:_r i...--L=+
'l) l
9-9 :'-j
i 9t09 i
-+-- i, I _r-4-i Iij
wd daci r.alorile 0 sunt majoritare.
c, de aceea este suficient sd memo.t reprezinti in acest caz numdrul de
,J). (12, 9) 9i (88,12 ).
n-lor semnificative dintr_o matrice
mtice rard (fie p acest numdr) qi
t metrtcea rard.nekicea rard
din
,f,relba problemeiu catalogul electronic se vor pdstra date despre elevi; se poate spune ci in catalogul elec-
i r se vor pastra date cu aceeaqi semnifica{ie. Numdrul inregistrarilor din catalog va Ii egalr@ rrfl*':iml de elevi din clasd. Se va line seama de numdrul maxim de elevi ce pot fi inscrigi intr-o-t*i ,rl0 de elevi).
Caralogul poate fi organizat ca un tablou unidimensional - vector de elevi.l:rtnr fiecare elev se re{in mai multe categorii de date, cu semnificalii diferite - date neo-
no-uqsle. Fiecare informa{ie are un tip specific, spre exemplu:
-:edie de tip real;
- r,nrmir de absenle de tip tntreg cu valori pozitive.
trfrb de organizare a datelor.{namblul datelor despre elev formeaza o structurd de date cu tipuri diferite (structurd neo-ge il nnmiti articol sa:u inregistrare.Ca:alogul electronic al clasei va fi un vector de articole.
fficrarea datelorkrn-r rezolvarea cerin{elor formulate de profesorul diriginte, sunt necesare urmltoarele pre-
llhmir
- Mstrarea datelor pentru fiecare elev;
- i'area datelor despre elevi;
- ed€rminarea qi afiqarea mediei generale a clasei la sfdrqit de semestru;
,f
ffiffim::.t
0 0 0 230 0 0 00 0 0 00 9 0 0
- afi,sarea elevilor in ordine descrescatoare, dupi media generali sernestriald;
- determinarea mediei generale, anttale, pentru fiecare elev;
- afigarea elevilor in ordine descrescatoare, dupd media generala anuall;
- determinarea gi afigarea mediei generale a clasei la sfdrqit de an;
- afigarea elevilor in ordine crescitoare, dupi nurnirul de absen{e.
5,2. Definirea structurilor neomogene de date'articole
Categoriile distincte de infonna(ii re(inute intr-un articol se numesc cdmpuri.
Un articol se caracterizeazdprinurmdtoarele elemente ce fonneazi macheta articoluhti:
- numele articolului;
- doua sau mai multe cdmpuri; pentru fiecare cdmp se precizeaza:
- numele cimpului;
- tipul cdmpului (stabilit in func{ie de semnifica[ia reali a datelor). CAmpurile pot
date elementare sau grupate: vectori, articole.
Exemplul 1:
Pentru exemplul analizat - catalogul clasei -, construim o macheti simplificata (cu
pu{ine cAmpuri) corespunzdtoare articoluhi elev (hg. 19a).
Exemplul 2:
Completam macheta articolului elev cu cdmpul note, un tablou unidimensional (vector)
4 elemente de tip nahrral (fig. l9b).
Elev
Numele cdrnpului Tipul cArnpului
NOTE Vector (4)
MEDIE Real
ABSENTE Natural
Figura 19, b)
mmumqdcprsgrffi frry
@!d rT,treMl lli
YIZ Drfrtrrff
:EI
1L
k
iL,,dY +;.;..-.1,,l{r,l36i lI'
Figura 19, a)
FmralA semestriald;i:
caerala anuali;t de an;
absente.
te
lmrmesc cdmpuri.rmeazd macheta articolului:
izazA:
eale a datelor). Cdmpurile pot
o macheti simplificata (cu
fuu unidimen sional (v e c to r)
i
i
nu
:
l
i
t 19. a)
ii
!rI
.
i
i
JIiI
t, b)
iiecare limbaj de programare dispune de cuvinte cheie pentru declararea structurilor de date
:p articol (Tabelul 12).
Tabelul l2. Definirea articolelor
// cuvdnul cheie pantru
// este struct
Tvpedef structIItipl campl;tip2 camp}'
) articol;
s_If}lqf, T"q:*,':zrfi macheta articolului dafa calendaisticd in care sd fie re{inutd data in formazi, lund, an.
I" flealzad macheta articolului elev care s[ conlind qi c6mpul data nasterii sub fonna grupului
riE dere data calendaristicd.
@xr
6.3. Prelucrarea datelor organizate in structuri neomogene
Prelucrarea datelor inregistrate intr-o structura de tip articol se face lanivel de cdmp. penaccesul la informaliile unui c6mp, referirea acestuia se face pirn adresare punctuald dupa staxa: nume-v ariab ild-delip -artic o l. nume- cdmp.
Exemplu:
- referirea cdmpului medie din articolul eln e.medie- referirea c6mpului absenfe din articolul elev e.absente- referirea unui element, i, al cdmpului medii din articorur erev e.mediifilPrelucrarea acestor date incepe cu introducerea qi memorarea lor in zonade memorie
vatdla definirea variabilei.de tip articol; pentru verificare, datele memorate vor fi afigate. Ficamp poate fi prelucrat prin opera(ii specifice tipului corespunzrtor (Tabelul 13).
Exemplu pentru articolul elev
l. ffiioducerca ji an;hrea datitoiProgram exemplu; #in;ffiAe<ibstiffiI;{ se defineste articolul elev }Type elewrecord
void main 0{i/ se defineste articolul elevTypedef struct
{
float mediel, medie2, medieunsigned:absente;
medie 1, medie2, medie _an:real;absente:byte;
{se defineste variabila cu tipul elev}
var e: elev;
begin
{se introduc datele unui elev}write ('mediel :'); readln (e.mediel );write ('medie2. ); readln (e.medie2);write ('absente:'); readln (e.absente);
{se afiseaza datele elevului}writeln ('medie I :', e.mediel );writeln ('medie:2', e.medie2);writeln ('absente:', e.absente);
end.
) elev;
// se defineste variabila cu tipul elev
eln e;
// se introduc datele unui elevcout(< " mediel:"; cin>> e.mediel;cout(( " medie2i'; cin>> e.medie2;cout<< " absente:"; cin>> e.absente;
ll se afiseaza datele elevului
cout<< " mediel :"<<e.mediel<<endl;cout<< " medie2 :"<<e.medie2<<endl;cout<< " absente:"<< e.absente<<endl;
)
I se calcu a anualil
_an := (e.mediel ]e.r
t,se afiseaza media anuala)
'medie anuala: ', e-m
3. Introdu
:edii:anay [1..3] of real
f!!t"{'
,jefineste variabila cu tip
* eia': i:byte;
rmcroduc mediile unui el
i:i to 3 do
hqsinr,rite ('media:'.i):
readln (e.medii[i]):ilrF
IEUfzub formi de arn
( catc [l matin* cl
in hmbajul de Pn6&&tr descrise la cen::P
in limtajul de 1
5nrc ti zilei curE@- 5
pcztnr dan sim limbayul de p
i0id@esc una dAsiBseefEAsiBsceff,As B rrfri
ffirrraFrrnt sg,lr
Femunmmmfuteilrdd
i$@
Tsbelul 13. Prelucrarea articolelor
i se calculeazi media anuald)c medie_an :: (e.medie I +e.medie2)12;
lse afiseaza media anuala)rnriteln('medie anuala:', e.medie_an);
-\
tcturi neomogene
ol se face la nivel de c6mp. penttprin adresare punctuald dupa si
il els e.medii[iluea lor in zona de memoriede memorate vor fi afiqate. Finzit61(Tabelul 13).
---
i' CIC++
2. Opera(ii asupra datelor
// se calculeazl media anualle.medie_an= (e.medie 1 +e.medie2)12;
ll se afiseaza media anuala
cout((:"medie anuala:"<< e.medie_an;
# TEME
L &scrie[i sub formd de articol urmdtoarele entitd{i:rl carte; b) magind; c) calculator; d) persoand.
!.ilefuiti, in limbajul de programare studiat, tipurile de date qi variabilele corespunzitoare arti-mlelor descrise la cerinla precedentd.
I. Iealizati, in limbajul de programare studiat, un program care sd determine trimestrul calen-Caristic al zllei curente. Se va folosi un articol cu cdmpurile: zi, lund, an.
Eremplu: pentru data curentd: ziura2g luna 08 an:ul2007, se va afiga: trimestrul 3.
{' Rcaliza{i, in limbajul de programare studiat, un program care sd determine dacd doud puncte
-{ si B indeplinesc una dintre urmitoarele condilii:r t prnctele A gi B se afTi pe o dreapti paraleld cu axa OX;br prnctele A gi B se afld pe o dreapta paraleld cu axa Olc t prnctele A qi B se afld pe o dreapti egal depdrtatd de axele OX si OY.Featm fiecare punct se clillosc coordonatele x giy. Fiecare punct va fi descris printr-un articol.
Erenrplu: Pentru punctul A de coordonate x=3, 510 qi punctul B de coordonate x=35, 510m r,r afi5a mesajul: punctele se aJld pe o dreaptd paraleld cu axa OX.
hXtrgeam.h>
le anicolult
elev
iel, medie2, medie_an;fteate:
vuiabila cu tipul elev
htele unui elevrl:": cin>> e.mediel;e2:-: cin>> e.medie2;rie:": cin>> e.absente;
aele elevului
el :"<<e.medie I <<endl;12:"<<e.medie2<<endl.
le:"<< e.absente<<endl;
"&ffid(@ fiiffilIE$ai#ass*ffi B i"{
6.4. Gruparea datelor organizate in structuri neomogene introduc datele unui Pro&'cantitate:');
Datele cu semnifica{ii diferite care necesiti gruparea in stmcturi neomogene reprezinti, (p.cantitate);cele mai frecvente cantri, caracteristici sau atribute ale unei situalii din realitate (entitate):
soand, produs, carte, magind etc. Memorarea datelor prin care poate fi descrisd o entitate se
intr-o singurd zond de memorie (variabila); daci in problemd sunt prelucrate date despre
('pret:'); readln (P.Pret);
calculeaza valoarea Podumulte instanle ale unei entitdli (mai multe persoane, mai multe produse), se vor pdstra
na datele ultimei instan{e introduse (ultima persoand, ultimul produs).;= p.cantitate * p.Prtq
irsrmeazd valoarea la tfitotal + valoare;
Exemplu:La un magazin, se vdnd intr-o zi n produse. Se cunosc cantitatea ;i prelulfiecdrui produs;
dore;te calcularea ;i afi;area valorii totsle a produselor vdndute intr-o zi-frsazavaloarea totala)
Rezolvarea problemei necesitd introducerea, pe rdnd, a datelor despre ltecare produs.
fiecare produs introdus, se calculeaza valoarea:
valoare: cantitate * Pret.
Valoarea calculata se insumeazd la total:total: total* valoare.
La sfirgit, se afiEeazd totalul. (Tabelul 14)
Tabelul 14. Exemplu Magazin
('valoarea totala:', td
Lele mai multe situalii npentru prelucriri la I
despre toli elevii.(qarea instanlelor rmri
valorilor coresFln
sticole.Un element al
de tip articol.program produse;
{ se defineste articolul produs }Type produs=record
cantitate:byte;
ptet:real;
end;
{se defineste variabila cu tipul produs}
var p: produs;
{se definesc variabilele de lucru}
var valoare, total: real;
n, i :integer;
begin
{se introduce numarul de produse}
Write('numarul de produse:');
readln (n);
total:=0;
for i:= I to n do
begin
wllmrF-
#include <iostream.h>
void main 0tt
// se defineste articolul produs
Typedef struct
{unsigned cantitate
float pret;
) produs;
// se defineste variabila cu tipul produs
produs p;//se definesc variabilele de lucru
float valoare, total=0;
int n, i;
//se introduce numarul de produse
cout<< " numarul de produse:";
cin>> n;
for (i:l; l<n; i+r)
{//se introduc datele unui produs
fl4ril unui articol dintr'
cz, numele articolului t
ruI 15. Vectoridc rr
tipului de date otrticol=ecord
ql:,tipl;q2:tip2;
vectorului cu n d
articolului):array [1..10] of r
rmui camp dim'i)
[d.camp
u.'*"fu**ffi.itffir q }Wrkrl&$f
$Y
""1
1r, neomogene
ifructuri neomogene repr ezirlta,ritntii din realitate (entitate):; pmle fi descrisa o entitate se
ri stmt prelucrate date desprec produse), se vor pdstra itrodus).
fratea ;i prelul fi ecdrui produs ;fute int-o zi.
dor despre fiecare produs. pen
L
fi€am.h>
s zticolult'cryld61s
produs
;vziabila cu tipul produs
veriabilele de lucru
, Ual={;
'rrmarul de produse
sul de produse:";
i#)
,lrrele unui produs
ise htroduc datele unui produs)
nrit{'cantitate:');madln (p.cantitate);
('pret:'); readln fu .pret);
Ise calculeaza valoarea produsului)
p.cantitate x p.pret;
|se insumeazl valoarea la total).= total * valoare;
lirc afiseaza valoarea totala)('valoarea totala:', total);
in cele mai multe situalii reale, se plstreazi datele fiecdrei instan{e (fiecare persoanl, fiecare
) pentru prelucrdri la nivel de grup: sortAri, selec{ii. ln Catalogul clasei, se pdstteazd
despre to{i elevii.Cmparea instan{elor unei entitdli (toate persoanele, toate produsele, to{i elevii) se face prin
valorilor corespunzitoare in tablouri unidimensionale care, in acest caz, devinvec-
rfu articole. Un element al vectorului reprezintd o instan{6 (o persoana, un produs, un elev)
*!e ds tip articol.Cimpul unui articol dintr-un vector de articole se adreseazd punctual, cu precizarea cd, in
caz, numele articolului este inlocuit cu adresa acestuia in vector (Tabelul 15).
Hul15. Vectori de articole
cout<< " cantitate:";
cin>>p.cantitate;
cout<< " pret:"
cin>>p.pret;
I I se calculeaza valoarea produsului
valoare : p.cantitate * p.pret;
//se insumeazi valoarea la total)total= total f valoare;It
llse aftseaza valoarea totala
cout(("valoarea totala:"<<total;'I
J
@ri
Exemplul 1 prelucrarea a n Produse
PAS
program produse;
{ se dehneste articolul Produs }
Type produnecordcatrt\tate:byte;
pret.,real;
end;
{se defineste vectorul p cu 100 de elemente
de tip produs)
var p'.anay [1..100] of Produs;
{se definesc variabilele de lucru}
var valoare, total: real;
{se introduce numarul de Produse}write('numarul de produse:');
readln (n);
total:=0;
for i:= I to n do
begin
{se introduc si se memoreaza datele fiecarui
produs)
write('cantitate:');readln (p[i].cantitate);
write ('pret:'); readln (P[i].Pret);
{se calculeaza valoarea produsului}
valoare:= p[i].cantitate * p[i].pret;
{se insumeazd valoarea la total}
total:= total * valoare;
end;
{se afiseaza valoarea totala}
writeln ('valoarea totala:', total);
end.
C/C++
#include <iostream.h>
void main 0{// se defineste articolul Produs
Typedef struct
{unsigned cantitate
float pret;
) produs;
// se defineste vectorul P cu 100
//elernente de tip produs
produs pfi001;
//se definesc variabilele de lucru
float valoare, total=0;
int n, i;
/ise introduce numarul de Produse
cout<< " nufilarul de Produse:";cin>> n;
for (i=0; i<n; i++)
{
//se introduc si se memoreaza datele
fiecarui produs
cout<< " cantitate:";
cin>>pIi].cantitate;
cout(( " pret:"
cin>>pIi].pret;
I I se calculeaza valoarea produsului
valoare = p[i].cantitate * p[i].pret;
{se insumeazS' valoarea la total}
total= total f valoare;
)I I se afiseazavaloarea totala
cout<{'valoarea totala:"<<total;It
hrryhd :{[email protected]^ . TrurE
,r.mry"srwrr iirryn ,llmupud I
UO l"i,m
,ffffipm'p;,:*ll.arm.h
rc fu turmndl o*-!-"
iu=ef m
ufrMh: P[-l]ffilir=rur-[i"-
dlbpmitu'loto
mfrlnlmr&or
lffiuLUtuis@
5fula-rcr
ffi,tdL
Q;*r
itf,r
InF.dchrfr
ui J k;Ye*,^l*: sffif;fl:1fu"f+.fiil .r.: .-- r
|::.
-
r *'1l
il
l
l
**E x e nii I t- t" ;;n* ;;
" ; ; w d*;- - i;lo da E:,b;i ; "'
o r;' -" p.a;s; ;bf{**' '"''*1**iili:iififfiid;a;-*-"1rI- ! i/sortare crescatoare dupa campul pret
i
ur:r: crescatoare dupa campul pret) i do i
micolul produs
anrimte
;ectorul p cu 100
rp produs
:
riabilele de lucruotal:0;
.umarul de produse
rul de produse:";
-)
s€ memoretva datele
tle:";ale;
,:aloalea produsului
rntitate * p[i].pret;;aloarea la total)Ioare:
oarea totala
r totala:"<<total;
i s:0:;,:m-
'=r :o n-l do I r". ii+; i< n-r; i++)tr -- -U rr-r uU [ ^"'\. v, \ 'tL ') t' '/
!e.r: ' if p[i].pret> p[i+l].pret: :':'pret> p[i+ll.pret I
:.:: I //interschimbarea se face la nivel de articol
nrs:;:lmbarea se face la nivel de arlicol I I {:esrn I aux=P[i];::1trI i ss^ ytrl,
:ur:=p[i]; I pitl= P[i+i];p[i]:= p[i+l];
' ot,*ll: aux;
p[i-l]:: aux; I t=1;
1jl)i while (s);
! cout<<"lista pretur
I for (i:0; i< n; i++)I cout<<pIi].pret<<e
il
s::1; 1 ':rd: : )
,r,rl''r. ::_: i while (s);
u-'r-E i lista preturilor'); I cout<<"1ista preturilor"umr =- :.r n do i for (i:0; i< n; i++)nrrrie': :ii] pret); ! cout<<p[i].pret<<end1;
;\;,
# rEr{E
il" I rr:iiati exemple care si necesite organizarea datelor in vectori de articole.
0- ]p:--::ati o situalie reald, care si necesite ordonarea datelor organizate in vectori de articole.
I, g,"lrlrii o listi cu prelucrdri specifice datelor grupate in tablouri unidimensionale; pentru
fe;:r: prelucrare, construili cdte un exemplu care si necesite gruparea articolelor in vec-
utr-- i3 afiicole.
De retinut! ARTlCot
o mnrcturi de date necesari pentru inregistrarea informafiilor despre un aspect al
uniiititii (obiect, persoani/ activitate) cu mai multe caracteristici;
r fiecare caracteristici formeazi un camp al articolului;
o frecare cimp poate avea un tip propriu; acest aspect determini proprietatea de
neomoEena;
o rrrnrnorarea ,si prelucrarea datelor organizate in structuri neomegene se face la nivel
r rer'erirea unui camp se face prin adresare punctuali:
- nume_articol.nume_camp;
r articolele pot fi grupate in structuri omogene: vectori de articole;
e #rea unui cdmp de articol dintr-un vector se face prin adresare punctualA,
-se numele articolului cu adresa acestuia in vector.
@ii
PROBLEME PROPUSE
l. ColeclieSe doreqte inregistrarea urmitoarelor date despre obiectele dintr-o colecfie: denumire,
achiziqiei, valoare.
Cerinle:
a) realizali un program pentru introducerea qi afiEarea datelor despre un obiect din co
b) realizali un program pentru introducerea gi afiEarea datelor despre mai multe obiecte
colecfie (max. 100);
c) realizaliun program care s6 determine cel mai vechi obiect din colec(ie;
d) realiza{i un program care sa afi;eze obiectele din colecfie in ordinea descrescdtoare
vechimii acestora.
2. ConcursSe doregte inregistrarea urmf,toarelor date despre candidalii inscriqi la un concurs: nu
data nagterii (zi, lund, an), are camet de conducere (dalnu).
Cerinle:
a) realizafi un program pentru introducerea qi afiqarea datelor despre un singur candidat;
b) realiza[i un program pentru introducerea qi afiqarea datelor despre mai mulli
(max. 100);
c) realizali un program care sd determine candidatii cu aceeagi virst6, v, introdus[ de la
taturi;d) realizali un program care sd afigeze, in ordinea virstei, candidalii cu carnet de
3. Catalogul clasei
Realizafi un program cu meniu care si rezolve urmitoarele cerinfe ale profesorului dirigi
- inregistrarea datelor pentru fiecare elev;
- afiqarea datelor despre elevi;
- determinarea gi afiqarea mediei generale a clasei la sfdr,sit de semestru;
- afigarea elevilor in ordine descrescf,toare, dupd media generali semestrial[;
- determinarea mediei generale, anuale, pentru fiecare elev;
- afiEarea elevilor in ordine descresc[toare, dupl media generald anuali;
- determinarea gi afiqarea mediei generale a clasei la sfdrgit de an;
- afiqarea elevilor in ordine crescitoare, dupl nurnirul de absenle.
7. ORGANIZAREA DATETOR iU STNUCTURI DINAMICE
7.1. Modele de structuri dinamice
in foarte multe situaqii reale, existd relaqii sau reguli care trebuie modelate astfel incAt
de organizare a datelor si respecte at0t semnificalia, c0t Ei restricfiile de comportament
cifice.
*LM
hM@"trOm
* * $unil' lrtffil
ffdifrE
&obe.[il
rt,fr&HilftrcL
f ftlaerru
irphqilpJ
I 'TE
Ghffm
I
!
i$ffiffiks'
r obiectele dintr-o colec{ie: denumire,
rea datelor despre un obiect din colec
Fea datelor despre mai multe obiecte
rtochi obiect din coleclie;: din colecfie in ordinea descrescdtoare
candidalii inscriqi la un concurs: nudnu).
rea datelor despre un singur candidat;itarea datelor despre mai mulli candi
[ii cu aceeagi vArsti, v, introdus[ de la
virsei, candidafii cu camet de
ftmrele cerinle ale profesorului dir
hsfuit de semestru;
cdia generali semestriald;cre elev;
rdia generali anuald;
h sfiqit de an;
liru|de absen(e.
URI DINAMICE
i cre trebuie modelate astfel inc6t solcl gi restricliile de comportament
Eremple:f.xemplul l. Persoanele care solicit[ un serviciu - co-
la Internet printr-un provider autorizat - se inscriutista de a$teptare. O cerere nouf, este aqezati, intotdeau-
uitima in listi. Serviciul de conectare este acordat, intot-primului solicitant din listd; dupd acordarea servr-
cererea este eliminatd din lista (fig. 20 a).
fremplul 2. O firma de soffware a realizat un program
; programul este imbundtalit continuu, prin tratarea
ri tirugi; oferta de pia{d a firmei este organizatd astfel
clien(ii s[ aiba acces la program, incepdnd intotdeaunaffima versiune a acestuia (fig. 20 b).
mesajul primului copil din lista; ultimul copil
,,qefului" cd rnesajul a ajuns la el (fig. 20 c).
t Frecare persoand are exact doi pArinli; fiecare pirinteopusoana care la rdndul ei are exact doi pdrin{i. Pentru
atdt datele despre persoane, c0t gi rela{iile directe
copil-parinfi, se construies,te arborele de farniliegenealogic (fig. 20 d).
Figura 20
($.-*:
I
Ii
I1
a)(
lc.-l iil---L-l I :*-:l
cerere noud >
Sef 1-\.t\\.J
{ cr \t,\r*
-/
)
{rr}
I
,
1
1
1
1
I
i
Ii**Efrmplul 3. Pentru a comunica rapid gi sigur, ,,Eeful" I (")
gruo de copii a intocmit o listi astfel incdt un mesaj sd
fi transmis intregului grup, din copil in copil; ,,Eeful"
,"rat!c4 1
t _-_.-fc:itl\ /\
ffi:n*?,-:itJe:*; slti# , ;
vn
v2
vl
Fiecare dintre exemplele propuse necesitd organizarea datelor dupa un model
(1) modelul firului de a;teptare; (2) modelul stivei; (3) modelul listei cirulare; (4)
arborescent.
Implementarea acestor modele intr-un limbaj de programare necesita solulionarea
toarelor probleme:
- organizarea datelor dupd semnifica(ia acestora, cel mai frecvent in structuri
tablouri unidimensionale;
- a1ezarca(intrarea) unui element din structurd dupd regula specific[ modelului;
- scoaterea (ieqirea) unui element din strucfura dupa regula specificd modelului;
- accesul la elementele structurii (numirarea/listarea elementelor) dupd regula
modelului.
in fiecare dintre situa{iile reale din exemplele prezentate, numirul elementelor variazi
timp: oric6nd poate sd apari un solicitant pentru serviciul Internet sau o versiune nou6 a
mului antivirus; qi in grupul de copii poate intra sau poate pleca un copil; in orice familie,
devin la rindul lor parin{i, qi arborele genealogic creqte.
intrucdt num[rul elementelor nu este constant qi ruci nu poate fi precizatintimp, structuri
date folosite pentru implementarea acestor modele se numesc shucturi dinamice. Varialia in
a numirului de elemente (aspectul dinamic al structurii) respectd rela(iile qi disciplina (reguli
comportament) specifice modelului. Implementarea structurilor dinamice prin memorarea
ra in tablouri unidimensionale foloseste qlocarea statica a memoriei (mecanism de
memoriei din segmentul de date prin care zona de memorie maxim alocati - corespunzltor
citdtii tabloului - rimAne la dispozilia programului pe toatd durata de execu{ie a acestuia).
Aspectul dinamic al structurilor de date este pus gi mai bine in eviden(i in modul de a
dinamicd a memoriei: mecanism de alocarea a memoriei detip Heap prin care zonele de
morie pot fi solicitate gi eliberate chiar in timpul execu(iei programului.
# TEMT
IMIA,.E Gf,
{rm mmmj,A I&E
ffii muaneuror d ihiilil !l rmIrB
@I&!@il-m
:-n ,!!Effi. 1@hr o mu, rc frur
ltdl ElL lEEfIi
adlmi."wi&Er" ffi@
ffirasrtdtmnme ditmlru;rm,l
tr frFtlrr *,I'Cflumfurmr.m
furn.+lnrn dumolr
derr lgffilrrtnilk
Ufi6n["
,rktffi
mrffi&mi
[uun&m
[ihf ds un,lfmne
1. Formula{i un exemplu real care sf, necesite organizarea datelor intr-un model de tip
a;teptare.Puneli in evidenld aspectul dinamic al structurii.
2. Formula{i un exemplu real care sd necesite organizarea datelor intr-un model de tip
Pune{i in evidenld aspectul dinamic al structurii.
3. Formulali un exemplu real care si necesite orgauzarea datelor intr-un model de tip lista
culard. Pune{i in evidenqa aspectul dinamic al structurii.
4. Formulali un exemplu real care s[ necesite organizarca datelor intr-un model de tip
cent.P:uneliin eviden![ aspectul dinamic al structurii.
5. Asociafi modelul dinamic corespunzitor fiecdreia dintre urmitoarele situalii:
a) organizarea calculatoarelor intr-o re{ea locald de tip inel;
b) organizarea aplicaliilor deschise de un utilizator in sistemul de operare Windows;
c) organizarea informaliilor pe discul sistem;
d) organizarea cererilor de listare la imprimanta;
e) organizarea instrucliunilor unui progam.
&r
it*sffiffi,; i #si+c'i:";s.: +,
tr
uea datelor dupd un modelt aaJelul listei circulare; (4)
ogramare necesiti solufionarea u
I mal frecvent in structuri
tgula specifici modelului;regu.la specifi ci modelului;t elementelor) dupa regula
rrte. numArul elementelor vaiazahernet sau o versiune noui aplcca un copil; in orice familie,
poate fi precizat in timp, structurile
ARBORELE GENEALOGICtemd de compozitie
R.ealizafi arborele genealogic personal printr-o pre-
^rer-:re c6t mai atractivd care si pund in evidenp perso-
'r*i"--atea fiecdrui membru al familiei.Se poate lucra in oricare dintre aplica{iile cu efecte
iurnice cunoscute.
Susestie de rezolvare:
- prezentarea acestei teme de citre elevi, in laborator,xrr.iuce la o activitate foarte atractiva; se pot face
-Jusamente": cel mai ,,i[alt" arbore; cel mai ,,vdrstnic"Imcre. cel mai ,,stufos" arbore.
Figura 2l I***&
* srrucni dinamice. Variatia in ti 7J. Clasificarea structurilor dinamicepai relaliile ;i disciplina (regulilerlh dinamice prin memorarea dintre elemente detennind mai multe categorii de structuri dinamice prezentate in
dinfigwa22.t memoriei (mecanism de alocareama{rn alocatd - corespunzdtordrraia de execufie a acestuia).t in€ in eviden{d in modul deb ap Heap prin care zonele depogramului. hr de aqteptare (coadi)
Structuri dinamice
specl
r datelor intr-un modeldtt datelor intr-un model
de tip fir
de tip sti
helor intr-un model de tip listd
hrelor intr-un model de tip
rrmitoarele situalii:reltemul de operare Windows;
fi*rare dintre categoriile de structuri dinamice din aceastd clasificare are proprietdli speci-T:trelul 16).
Wlul 16. Proprietl{ile structurilor dinamice
CTURA'DINAMI
Intrarea Ei iegirea structurd se regu-
la FIFO (First Input First Output = primul intrat, primul ie;it).
d,MMrw*l
ffiffiffihei
f:gtra 2 2. Clasifi carea structurilor dinatnice
fiile dintre elementele structurii sunt de tip succesor -predecesor; existd un singur element flri predecesor, capul
listei, gi un singur element fErd succesor, ultimul element dinlista.
i Intrarea gi iegirea elementelor din structLrrd se face dupd regula
_,1'llgg:lg1_T'::gr::ty!:!::r::v::::::):I Relaliile dintre elementele structurii sunt de tip succesor -
Listi circulard predecesor; nu existd niciun element fbrA predecesor sau fhrd
succesor.
Reiatffitutr sunt A;Tp a$enaixrt -descendent; existd un singur element fari ascendent -radacina arborelui - qi unul sau mai multe elemente firadescenden{i - elementele terminale sau frunze.
# TEME
l. Identifica[i tipul listei liniare care poate fi asociat unnatoarelor situalir:
a) Profesorul diriginte intocmeqte lista cu elevii care vor participa la o excursie cu numdr li
mitat de locuri (mai puline decit efectivul clasei).
(n>10).
b) predecesor (element 9)
d) predecesor (elernent n)
f) predecesor (element l)
3. Prelucrdri specifice
?:rtru organizarea datelor in str"
r Crearca structurii dinrn.ice.
n:- element din structuri.r Parcurgerea structurii dinanf,:icrura, respectindu-se reguitir -{ctualizarea struclurii dinrm:
iin structuri prin addugare ,
:ot prin actualizare, se pol m
h librlul 17 sunt descnse opt:
fufulul 17. Structuri dinarnice
PRELUCRARE
- ,arTotrlS :
Pamali -::5t
\CauS:r:Insen::
le
\{cc:::=::
olb) intrucdt numdrul elevilor care doresc sI meargf, in excursie este
numdrul de locuri, profesorul diriginte reface lista pentru a-i elirnina mai
inscris mai tdrziu.
c) La ora de Educalie Fizicit, elevii intri pe rdnd din vestiar in sala de sport; fiecare elev
buie sd se alinieze, ocupindu-qi locul astfel incdt, in fiecare moment, qirul elevilor prezen(i
sala si f,re ordonat descrescator dupa inal(ime.
2. Se consideri o listd liniard oarecare cu n elemente
Determinali valoarea urmatoarelor expresii:
a) succesor (element 4
c) succesor (element n
e) succesor (element Ig) succesor (predecesor (n)) : h) predecesor (predecesor (3) =
3. Stabiliti rela{ia prin care o listd liniari oarecare cu ,? elemente poate fi transformata intr-o lr
circulara.
4. 4.1. Pentru fiecare membru din arborele genealogic personal, determinali:
a) numirul descenden{ilor;
b) nurndrul ascenden[ilor;
c) numirul elementelor terminale (fhrd descendenli).
4.2,Precizali care este semnifica{ia elementelor terminale din arborele genealogic pe
4,3, Care este semnificafla elementului rddacina din arborele genealogic personal?
4.4. Cum ar trebui construit arborele genealogic personal, astfel incit autorul sd fie un
ment terminal?
mult mai mare
ugor pe cei care
\e
!r:-;
:,:
il tliiHS,$-SLb)vn
I
ffi ?ffi srmctura striac;Ai$f ;,;grii; Prelucrdri specifice structurilar dinamice liniarefqur = ullmtl intt at, primul ie;it).3t€ strucrunr sunt de tip succesor _
im element Ibra predecesor sau fbrd
te s{ructuru sunt de tip ascendent _
singur element fhra ascendent -unul sau mai multe elemente ftra: terminale sau frunze.
nrelor situatii:r participa la o excursie cu numdr
ercursie
'i eliminaeste mult mai mare decfu
mal ugor pe cel care
tier in sala de sport; fiecare elev tre: moment, sirul elevilor prezenli
f).
lecesor (element 9)hcesor (element n) =lecesor lelement l)lecesor (rredecesor (3)) =
ile poare fi transformatd intr-o li
mal. determina{i:
: din arborele genealogic personal.rele _eenealogic personal?
I astfel incdt autorul sd fie un
iunrnru nu DUpA' pDFl t lal) A Df, Dr)Fr f r-rr r D1
i vul jr
I'RELUCILARE 1 PIIELUCITARI'
Fentnt organizarea datelor in structuri dinarnice liniare, sunt necesare unnitoarele prelucrari:o Crearea struclurii dinamice: aceasta prelucrare corespunde memorarii dateior pentruul element din structurd.
I Parcurgerea structurii dinamice: aceasta prelucrare permite localizarea fiec5mi elementlructurd, respectAndu-se regulile de ordine specifice modelului de structura dinamica.r -{ctualizarea structurii dinarnice: aceasta prelucrare pennite modificarea numarului de eie-: din structura prin adiugare sau inserare de elemente noi sau prin elirninarea unor ele-
m:- tot prin acttalizare, se pot modifica informaliile specifice unui element.
- Tabelul 17 sunt descrise operaliile necesare implenrentarii acestor prelucrari.
[sbelut 17. Structuri dinamice - prelucriri si opera{ii spccifice*"'-' -i" * "-'
: SIAREA STRUCTTIRII
PRELUCRARf, oPER{Trr SPUCTFICE I (n,r,rirul n dc elcmcnte)
- se verificd daci structura ii daca n=0este vidi
(stnlctura este- se lneuroreazi drteic pentnr 'i',i"- vloil lprimul element din structuri I
- localizarea tuturor ele-
raentelorNu se modifrca nici numiml. nicivalorile elernentelor.
tat capacitatea structuriiatunci- se memoreazi datele pen- I dacl
tru un element nou care . n:..rn.itrt." . opcrayie inryosibila
;-+*x.^ -- -- : 'altfclintrd in stn-rcturi respec- i structLrrii I n+t elemente
este vida l. dace ; rtulcl
se elirrind din struchrri un : ,= 0 , operatie intposibila
element respectind rcgrla de . structura esre vidi , 'tltt|- se elirrind din struchrri un ! n= 0
tdnd regula de intrare I I urr sr'trrcrrrs
specificd nrodelului. 1 i
- se verifici dacd structura i : ^...."^,
:: alutciI
i n:1oItlL l
', operurie ftitri sens
].?"GERE
TotalS
Adiugare /Inserare
Se localizeazi (prin parcur- I Nu se rnodifica numiml de elemente dinstructuri; se modifici valorile pentnr
unul sau mai multe elenrente.
gere par'liala) elementul ale
cirui valori trebuie modifl-cate; se rnodificd valorileelementului localizat.
:.'49
carc indeplinesc o conditie i
-:.ry::*ii1 -_:ca.,-.ifi^;A-^;.^^^--r^ i ,se verihcl dacd s-a comple-
f_rcw_1. Preciza{i de ce este necesard cunoaqterea capacitSlii unei structuri dinamice in varianta
mentdrii prin alocarea staticd a memoriei.
2. Identificafi situaliile in care pot fi date urmitoarele mesaje:
a) operaliefdrd sens, listd existentd;
b) operalie imposibild, listd vidd;
c) operalie imposibild, element inexistent;
d) nu este permisd operalia de inserare.
3. Alcdtuili cAte o secvenla de opera{ii elementare, necesari fiecdreia dintre urmdtoarele
crdri:
a) afiqarea numirului de elemente dintr-o list[ oarecare;
b) intrarea unui element nou intr-un fir de aEteptare;
c) afigarea numdrului de ordine al elementelor care respecta o condilie specificatS;
d) verificarea existen{ei in lista a unui element care respecti o condilie specificatd;
e) ieqirea unui element dintr-o stiv6.
7.4. Implementarea structurilor dinamice liniare
7.4.1, FIRUT DE ASTEPTARE (COADA)
Disciplina structurii dinamice fir de asteptare sau coadd este de tip FIFO (First Input
Output : primul'intrat, primul ieSit).Implementarea intr-un limbaj de programare a a(
model de structurd dinamic[ revine la controlul opera{iilor de intrare/ieqire in/din structurd,
fel incAt sd fie respectatd disciplina FIFO.
in acest scop, structura va fi controlatd prin:
(1) doi marcatori (indici) de pozilie pe care ii vom r|(tmi primul 9i ultimul (fig. 24.
<_I 2 J n-l n
ttprimul ultimul
Figura 22
(2) capacitatea strucfitrii (numirul maxim de elemente alocate pe care il vom nota cu 14
Cozuri porticuloreDacd firuI de aEteptare nu con(ine niciun element, firul este gol
- 9*: 3*":x* 3*'ir':"3': *Yg**{ ',:',lpkffir vid).
*6
&
&
&
Itru)crtrua s*s$ oou( ,i*r5 i
lml]ri[ gEm(M ]!Om-
-n'cM pme m.t fo ilim tlncrsrr &qt-rc
mri cirsmemst
rnmmr el"merm ifoWgl
frErnlm. - rya@ &
poom ry&mur@S ictmur u
-almsggi- S 'Iqrrlll
@d
s Po@ *'rrr Pm ftoPp
FfrrrlmffilrfJSsfimM
frrtu&ry".ril{-
imrlmpO[b
cre4ih&tu-u,W
+mthm
itumiqrfrfuCrmdrrmrfu;rft
'tqln.rmsdfuF,p@flro@ffir
kr fr v* \s#!!: X *:;, 50{ *ru",Ii
A B {,:.i;P.q{'rF'
r@
nni drnamice invarianta
rireia dintre urmdtoarele
o condilie specificatd;
i o condi(ie specificati;
are pe care il vom nota cu n).
p*.lsqirils-:eggftselrlduldg-ff-1-"-plereD crearea are sens doar daci firul este gol (fir vid);) intrarea unui element nou:
- Tn element poate intra in structuri, doar daci nu a fost completata capacitatea structurii
sunt locuri libere");
- arotdeauna, noul element se aEazd la sfbrqiful structurii, el devine ultimul;
) ietirea unui element (intrucdt firele de agteptare/coada se formeazd pentru satisfacerea
r ;ereri, ,,servicii", spunem ca ieqirea din fir are loc cAnd primul element a fost servit):
- .n element poate iegi din structur[, doar daci firul nu este vid (existi cel pu[in un element);
- :.iotdeauna, dupi ieEirea unui element din struchrra, toate elementele se deplaseazd ,,in"".
coada ,,avanseazd" Ei elernentul ajuns pe pozi\ia primul poate fi sentit (fi+' 23);
tultimul
liniare Figura 23
D prarcurgerea se poate efectua doar dacl firul nu este vid:
- ,-.urg-.r.u se poate face pentru determinarea numirului de elemente ,,a$ezate la coada",
te de dp FIFO (First Input Fi
tinbaj de programare a
Eare'iesire in/din structurd, ; :.ijsarea elementelor sau pentru determinarea unor proprietdli;
- lr::cnrgerea se face intotdeauna de la primul la ultimttl element.
rnul si ultimul (fi7. 22). L,.mentele firului de agteptare pot fi persoane, obiecte, procese care aqteaptd satisfacerea
:ren; exemple:
- xsoanele inscrise pe o listd de agteptare pentru rezervdri de bilete, acceptarea la un inter-
- lr-oanele care aqteaptb la rdnd pentru efecturea unor pl61i, cump[rarea de produse etc.;
- r,"rinile aflate intr-un spa{iu de parcare la o benzinarie;
- r. =imentele planificate intr-o loca(ie (concerte, concursuri etc.).
.m :ele mai frecvente situajii, se inregistreazdmaimulte informa[ii despre elementele firului
&simr-are. Fiecare element din fir este descris ca o structuri eterogend - articol; firul de
: r.a fi memorat intr-un vector de articole.
!t:r:: inceput, vom considera c6 fiecare element este descris prin numirul siu de ordine
gol
Ut.
(fir vid).;'u valori intregi, pozitive).
rm :,:ri.nuare, se prezinti secvenla pseudocod a opera(iilor necesare implementarii unui firruEry.t3te.
61s;ii;:., , t
.1i' .'.a" '. i'
inceput fir _de- agtePtare-l
// se lucreazi cu vectorul F pentru care se aloci 100 de elemente
ll vai,abile de lucru:
// n numirul maxim de elemente din fir (capacitatea firului )
// primul ultimul marcatori de poziqie
/i i indicele de adresd Pentru F
// nr numdrul de elemente din fir
/i secvenla de inilializare
// secvenia poate fi completatd cu validarea lui n fa{a de numarul de elemente alocate (l
scrie introiuceti valoare pentnt capacitateafirtlui de asteptare' n:
citeqte npentru i=l Ia n exccutlF[i] <- osfflrqit pentru
frimul<-0 ll f* vid;se considerd cI adresarea elementelor din vector incepe de la I
ultimul+-0// sf6rqit secvenia de inilializare
// secvenla pentru creare
dac[ primul: 0
atuncibloc
primul<-1scrie introduceti valoare pentru primul element F[primul]=
citegte F[Primul]
ultimul<-- Primulsfirqit bloc
altfelscrie operatiefara sens: fintl nu estevid
sfflrgit dacl//sf6rqit secventa creare
// secven(a pentru intrarea unui element nou
ultimul <- ultimul+ldacl ultimul < =n
atuncibloc
scrie introdtrceti valoare pentru noul element F[ultimul]=
citegte F[ultimul]sfffrqit bloc
altfelscrie operatie imposibila: firuI este plin
sfffr;it dacl//sfArgit secven{a pentru intrarea unui element nou
I // Drsr.lrr ovv I wr!!qL*-***",**-
h.::"'r :r.*l:.l:,-57=.i,,-{":1.' ::l:
:ec\,enqa pentru iegirea (sen
drci primul =o
atunciscrie 0i
altfelbloc
scrie este sen,it elemenn
i coada avanseaza - secvenE
Ittrtru i= primul la ultimul-l
F [i] <- F[i+l]fir;it pentru
t[ultimul] <- 0
rtrimul <- ultimul -1
sfdr;it bloc
Grs.it daci
@.rsit secvento Pentnt iesi
lldrrcl'enta pentru parcurgerea
-ci primul =o
atunciscrie o.
altfel
bloc
nr<-0Pentru i
b
!
sfir;it P
scrie -fnsfffrgit bloc
dacit secvenla pentru Pa
hr _de
lcmente
f)
mirul de elemente alocate (l?peare, n=
dor din vector incepe de la I
F[pimul]=
[u&imul]:
Fntru i= prirnul la ultimul-1 executiF [i] <- F[i+l]
dlrqit pentruElultimull +- 0
uArimul <- ultimul -l
secven{a B
daci prinui < ultimuiatunci
F[primul] <- 0prirnul <- primul+1sfdrgit daci
' secven{a pentru ieqirea (servirea) unui elementdacl primul =o
atunci
altfeloperatie imposibila: firul este gol
scrie este servit elementul F[primull
coada avanseazd - secventa A
SCTIC
bloc
sf0rsit blocSrsit dacl,'rt6rsit secvenla pentru ie;irea unui element
lHventa pentru parcurgerea firului: se afiseazi elementele din qrr si lungimea firuluilrta primul =o
atunci
scrie operatie imposibila: firul este golaltfel
bloc
nr+-0pentru ;= primul la ultimul executi
bloc
scrie F [i]nr<- nr*1
sfirgit bloc
sf0rEit pentruscrie firul confine nr elemente
sf0rgit blocfrrit dacd
*flir&sit secvenfa pentru parcurgerea firului de asteptare
fr fir_de_ aEteptare_l
h
Meniu F/FO
1. Creare
2. Intrare
3. Servire
4. Parcurgere
5. Exit
inceput hr -de-
a$teptare 2
llse afigeazd opqiunile din meniu
optiune <- 0repeti// se sterge ecranul
i/ afiqare meniu
repetiscrie fir de asteptare -prelucrdri specifice
scrie I creare
scrie 2 intrarea unui element nou
scrie 3 iesirea unui element
scrie 4 parcurgere Figura 24
scrie 5 sfarsit Program
scne introduceti optiunea ( 1,2 j'a' 5) :
citeste optiune
panl cena optiune <=5 ll sevalideazd optiunea
selecteazl oPtiune
optiunrl// secven!6 creare
optiune=2// secven![ intrare element nou
optiunr3// secven{d ieqire element
optiune=4// secven!6 Parcurgere
optiune=5
scrie sfarsit Programsfir;it selecteazl
pinl cffnd optiune=5
sfArgit fir -de-
aqtePtare 2
Pentru simularea aspectului dinamic al firului
crdrilor specihce printr-un program cu rneniu (fig'de aEteptare,
24).
sugeram ):pi fiecare opliune care simuL'
r:a (opfiunea 4) prin care se I
:-: daci programul modeieazi
C.uicati, in limbajul de Progra
nm:ru simularea unui fir de a":
zad care este efectul urmat(
.r :;earea Ei parcurgerea firului
t :learea, intrarea unui nou elt
[ :rearea, ieqrea unui element '
d :+irea unui element din fud': aste efectul eliminani dtn
rr:etare?
.r:une!i un Program nou car€
k:u ieEirea unui element c
,.tr lrsul": secven{aA9i sec\.en1
e Care este semnificafia momt
h C'.rm pot fi utilizate locaqiile
un program cu meluu
!,ki muite persoane se inscnl
eiilli. Se cunosc numarul i
i doresc sd afle num
:brle mai sunt.
:neli o situalie reali a cire
ffim de a;teptare.
ruJ" STrVA
Xhsiptila structurii dinamice
T-sst Input First OutPut =intr-un limbaj de
m';c,uri dinamicI revhe I
:esire in/din structuri- a
Ts LIFO.h acest scoP, strucfura va fi
I doi marcatori (indici) de 1
x-,arf (fi1.25);r':ryacitatea structurii lfiJ
pe care il vom nota cu nl
printr-o singurl rulare a programului, utilizatorul poate s6 aleaga din meniu, de mai
ori, opliunea corespunzdtoare simuldrii firului de aqteptare'
Spre exemplu, pentru simularea intrarii primului element urmat[ de intrarea a incd trei
mente El ieqirea a dtui elemente, utilizatoruipoate dirija execu{ia programului prin
secvenfd de opliuni: l, 4, 2,4,2,4,2 ,4,3,4,3,4,5'
;t@
llrEre, sugerAm implementarea
Meniu FIFO
l. Creare
l. Intrare
3. Servire
4. Parcurgere
i. Exir
Figura 24
rkagd din meniu, de mai
rmali de intrarea a incd trei;ia programului prin u
&scphna structurii dinamice numiti sflvd este de tipy]T Input First Output:ultimul intrat, primut ie;it).
mctura dinamicd revine la controlul operaqiilor demrsire inldin structurd, astfel inc6t si fie respectata
fo r,rest scop, structura va fi controlatd prin:r dnr marcatori (indici) de pozilie pe care ii vom numi
Dupi fiecare op{iune care simuleazd dinamica strucfurii (creare, intrare, ie;ire), s_a ales par_
;:fj,":j,::::lllI:::"_,uf,q,*u-d".mentere din fir. il;;;;;ffi, ur,izatorurpoatedacd prograraul modeleazd corect firuI de aqteptare.
,-[EyL_I
I
IIIII
It
III
iI
Codifica{i, in limbajur de programare studiat, fiecare dintre secven{ere pseudocod propuse;entru simularea unui fir de aqteptare.
L:ciza{i care este efectul urmdtoarei secvente de opfiuni :r r crearea ,si parcurgerea firului de a$eptarg: l crearea, intrarea unui nou element qi parcurgerea firului de aqteptare;"x cr0?r€3, ieqrea unui element;i parcurgerea firului de aqteptare;I iesirea unui element din firuIde aqtepiare.
['ue este efectul elimindrii din prograrn a secven{ei de instrucfiuni pentru crearcafirului dermeptare?
i-'mpune{i un program nou care si nu con{ina secventa de creare.
rtorii doresc si afle numdrur de persoane inscrise, cd{i erevi ,-u, inr.rir, ti. *"ile mai sunt.
xrpune{ o sifua{ie teald a cdrei rezolvare cu calculatorul sd necesite modelarea datelor prinfte de a;teptare.
r;t2 5t,UO
intr-un limbaj de programare a acestui model
LIFO.
Figura 25
. wficitateo structurii (numarul maxim de elementeBx care il vom nota cu n).
knuu ieqirea unui element din coadd, au fost propuse doud secvente care simuleaza"r''ansul": secven{a A qi secven{a B. urmdrili secventa B Ei raspunde{i la urmatoarele intrebari:r Care este semnifica{ia momentuhi primul: ultimul?u cum pot fi utilizate loca{iile de memorie eliberate prin ieqirea unui erement?[eliizad un program cu meniu pentru modelarea urmitoarei situaqii:Ifii multe persoane se inscriu pentru rezervarea de bilete ra un spectacol Ia careau acces
,.1,:ri::::r^r.llTr*t de, bilete qi anul na$rerii fiecdrei persoane inscrisd pe tista.
nw-'f (fis.25);
,s
W*;t
Cozuri porticulore. Daca stiva nu con{ine niciun element, stiva este goali (stivd vidd).
. Daca a fost ocupatd toatl capacitatea structurii, stiva este plind-
Prelucrd,rile s ifice
) crearea are sens doar dacd stiva este goal[ (stivd vida);
) intrarea unui element nou:
- un element poate intra in structurd doar dacd nu a fost completatl capacitatea
(,,mai sunt locuri libere");
- intotdeauna, noul element se aqazi peste celelalte elemente, in vArful stivei;
- dupd intrarea unui element nou in stivd, spunem cd ,,stiva creqte";
) ieqirea unui element:
- un element poate ieqi din structurd, doar dacd stiva nu este vidi (existi cel pu{in un
- intotdeauna, iese din structur[ elementul aflat in vArful stivei;
- dupa ieqirea unui element din stivd, spunem c5 ,,stiva scade ";
L*U frccrrrcsimdi.fuEdellsrdnsnii
fu rtni r re
fup. rm coroftrrei tuqapnin
ilturif riwi
o vcrrrd Sp&humL&dm
ff mcri&pr&&ipm
rEd&Crm{
&iiliilirt,efioqldr
itumFl blanili
.e&rcrA
&i{&
lilr.I:cfl=0
&l*ra
V*lnrrDEFG
?r<- v6rf
Figura 26
) parcurgerea se poate efectua doar dacd stiva nu este vidd:
- parcurgerea se poate face pentru determinarea numdrului de elemente ,,stivuite",
afiqarea elementelor sau pentru determinarea unor proprieti{i;
- parcurgerea se face intotdeauna delavddspre bazd.
Elementele stivei pot fi persoane, obiecte, procese care aqteaptd rezolvatea
dupi regula LIFO; exemple:
- persoanele propuse pentru disponibilizare de la un loc de munca al cdrui manager
seama de vechimea angaja{ilor;
- vagoanele de tren aflate in prob[ pe o linie de manevri;
- programele activate de un utilizator lVindows.
unel soli
&.; I&ffi&liL}. i l:*5*... 'i;t{Y-
fiii idd).t plind.
In cele mai frecvente situalii, se inregistrea zirmaimulte informa{ii despre elementele aflatesrn i' Fiecare element din stivd este descris ca o strucfuri eterogena - arlicol; pentru memo-aa elementelor din stiva se va folosi un vector de articole.
Fentru inceput, vom considera cd fiecare element este descris prinnor cu valori intregi, pozitive). in continuare, se prezintd ,..u*1u
mpletata capacitatea
e. in rdrfulstivei;Grcsje';
rila texisu celpu{in unfeq
e-:
le elemente,,stiwite"
qri rezolvarea unei
munci al cdrui manager
re implernentirii stivei.
numdrul sdu de ordinepseudocod a operatiilor
iaceput stival -*'*^***--lse lucreazd cu vectorul S pentru care se aloca 100 de elemente iq! u yw,.ru lors rE druua luu oc gremente
tvariabile de lucru: in numirul maxim de elemente din stivi (capacitatea stivei ) ,baza virf marcatori de pozilie
1
i indicele de adresd pentru S :
nr numarul de elemente din stiva I
isecvenla de inilializare
t' ;ecven{a poate fi completata cu validarea lui n fa{d de numdrul de elemente alocate ( I 00)
|,
wie intr"oduceti valoare pentnt capacitatea stivei, n= i
otrgste n r -"-' " "'rwvleeevq oo.vL9, t,
I
Piltru i=l la n executl i$-rjeo idlrgit pentru' stiva este vidd; se considerd cd adresarea elementelor din vector incepe de la I,uii{-0yrz:gSI ;firsit secven{a de ini{ializare
r' recvenla pentru crearednci vdrf= 0mnci
HLc
vdrf+-lwb introduceti valoare pentru erementur din varfur stivei s[v6rf]=firrc S[vdrf]
firsit blocdld
rcrie operatiefara sens:stiva nu este vida&dt dacl,,rfrrsit secventa creare
// secvenla pentru intrarea unui element nou
vArf r virf+l // stiva creqte
dacl virf < =natunci
blocscrie introduceti valoare pentru elementul din varful stivei s[v6rfl:
citegte S[vArf]
sf0r;it bloc
altfelscrie operatie imposibila: stiva este plind
sfffrgit daci/Afaiqit secvenla pentru intrarea unui element nou
// secven{a pentru ieEirea unui element
dac[ vdrf =0
atunci
altfelbloc
scrie iese elementul din varful stivei $varfl// stiva scade
scrie operatie irnposibila: stiva este goala
S[varf] <-0varf+- varf- 1
sfffrqit bloc
sfirqit daci//sfar;it secvenla pentru ie;irea unui element
//secven[a pentru parcurgerea stivei:
llse afiqeaiaelementele din stivd Ei indllimea stivei
dacl virf =oatunci
scrie operatie imposibila: stiva este goala
altfelbloc
nr€0Pentru i= v0rf labaza executi
hlocscrie S [i]nr<-nr*1
sfflrgit bloc
sffirqit Pentruscrie sliva contine m elemente
sfirqit bloc
sf6rqit daci/isfArqit secvenla pentru parcurgerea stlet
sfffrqit stival
qcffiryrc.[rmrr
kri6&
prEt[iu
elfr
trsh
F,d,m
#mr
Omi
F
fri1
FIU
vorful stivei S[vddJ:
t plina
stc goala
te goala
P-nu simularea aspectului dinamic al stivei, sugerim implementarea prelucr6rilor specificenr-{n program cu meniu (fig.27).
r;e afigeazi op{iunile din meniuurune-0
lreti/ rc sterge ecranul/r r.isare meniu
repetlie operatii asupra stivei
ffi I crearesie 2 intrare element nousrie -l iesirea unui elementrere 4 parcurgeresric j sfarsit program
ar introduceti optiunea ( 1,2,j,a, | :riune optiune
pinl cffnd optiune <=5 /l sevalideaz[ optiunea
nlecteazl optiune
Wm€=l// secventa creare
rymrrrr€=2
// secventa intrare element nou
Wue=+I I secv enta iesire element
i/ secventa parcurgere5
scrie sfarsit program6rsit selecteazl
cind optiune=5it stiva2
Meniu LIFO
1. Creare
2. Intrare
3. Ieqire
4. Parcurgere
5. Exit
k:-o singurd rulare a programului, utilizatorul poate sd aleaga din meniu, de mai multerirEa corespun zA:.riare simularii stivej.
fure exemplu, pentru simularea intr6rii primului element urmatd de intrarea a incd treic u iegirea a doud elemente, utilizatoruf poate dirija execufia prog,am;ui prin urmd_sr:rfi(i de opfiuni: l, 4, 2, 4,2, 4,2, 4,3, 4,3, 4, 5.
Optiune: _
,*rr, - -1
e Dupi fiecare op{iune care simuleaza dinamica structurii
o*r.u,:g.i* iopt,.,n.o +j f in tart se afigeazielernentele stivei'
.onrrot daci .programul modeleazi corect stlva'
(creare, intrare. ieqire) s-a
in acest rnod, utilizatorul 1
a rezolva mai rePede:
,@Y Wteclia conwmawm. G-". Coada formari la
uu Ia ehiseul G-1"
i un prqram @hid6. 6/. StabiliP singr
i un prqram PenulL:n fslosrtl
i rm program Pentr: texill inrodus e
mucture dinaml
mprogramPeffiufolositL
fbme doEooomdimri.CS.
Cl ese: ?. -1.6- 5.
Cl ere:6- & t-'rE o,nda Ci: i' j- t
lhritummedmi:o Ent mil s
srq7"l-6.5.tcffi6&:.'' 5
*ra S-r:6 & I
lFug!:mc[cmhero
aP{,d,P1
oflirtu
r" {**w.n'Cocltficali,irrlinrbajuldeprogranrarestudiat,fiecaredintresecvenlelepseudocod
pentru simularea sttvet'
2. Precizali care este efectul urmatoarei secven'te de opliuni:
a) crearea qi Parcurgerea stivei;
b) .r.rrau, intrarea unni nou element gi parcurgerea stivet;
c) createa, ieqirea ntitti eletnent gi parcurgerea stivei;
d) iegirea uirui element din stiva'
3. precizati care este efectul elimindLii din program a secven{ei de instruc[iuni pentru
sttvet.
4. Corq:une{i ttn program nou care sd nu con(ina secventa de creare a stlvet'
S.Careesterolulmarcatoruluidepozillebazasrler?
6.Cornpune{lunprogramnouincaremarcatorulbazasaaib6valoarear(capacitateast
?. Realizati un program cu meuiu pentru model*tt lltiu::::1.:::^,i:^. hihriotecara nr' -l1ffii,:[|,li::iX]:"ffi:iffi*.*
";;;u'a' a' solicitate' incit bibriotecara nu re
pune la loc in raft a.'ar l"fo'qitui zrlei;l':=.'lll::::.':l:T::::^'l?Xi]l'r1;,i;i.'LrjlllH:[,)i',.l::iil:]'Hii?il#ffi; n;,'' datd cartea anat6 "lavedere"
(dea
c el o rl aite c ir!i)'Ie ancut ae : ;;il;; ^i' a'p' q i ;'"''"p] i::,!.:i : I' :"', 1)::1f"'*Tl
::H[i: iiilil r,*;;' ;*,, ;,;# 'i anam, ra cerere, numdrul cdrtilor, valoarea acestora
cum qi numdrul .,'Ur""d'-"'*;il:; zr' (Execuiia programului va simula activitatr
restituire qi imprumut pe parcursul unei zile')
S.Propuneliosirualierealdacateirezolvarecucalculatoruls6necesitemodelareadatelorstructuri dinamice de tiP stiv['
rff#w&{N€ywwvw&r.--l.Launcabirretmedical,pacierrliiintralaconsultalieinordineasosirii'Desprefiecare
se cunoa$te *,f "qtti',"*"'' tWf)' indllimea Ei greutatea' Realizali un program
simuleze irr.girtrur.u p;;iliil;in hsta de aqteptare, modif,rcarea tistei dup[ fiecare
talie qi detetminarea unnitoarelor intbnna(tt:
,l'rr*r*f pacien(ilor care aqteapti pentru consultaqie;
b) numrrui pacienlilor barbaii care asteapta Ti]1:::::lt1l'i1,,,,,,,. r. qreutatea z
'S.I
;.i
:
fr
:]l;ffiilii::ffiifi li*d;;;';;,r;;d pentru consurta{ie ( greutatea ) 80
iniltimea (1,70m)"
re. rntrare, iesire) s-ast mod, utilizatorul
:atele pseudocod
nstmcliuni pentru c
srn ei.
:a r (capacitatea stivei
:it bibliotecara nu lepe ntasa; s-a constatal
ata ..la vedere" (ie cunoaEte autorul,or. r'aloarea acestorar a simula activitatea
:e modelarea datelor
i. Despre fiecarezati un program
stei dupa fiecare
ret sreutatea)80
i -:rru a tezolva mai repede solicitarile unor clien(i nemulqurnili de serviciile primite, Oficiut:'':rttru protectia consumatorilor a decis si infiin(eze, pe l6nga ghiEeul de lucru Gl , ungiig.u:"'"'t' G2. Coada fonnati la ghiqeul G/ este reorganizatirartr.i, ciierqli cu numar de ordine"-,ir trec la ghiqeul G2.
!':aliza[i un program pentru simularea celor doui cozi: Gt qi G2 pomind de la o coada:-riald, G1. Stabilili singuri datele memorate pentru fiecare client.
l:;liza!i un program pentru adunarea a doud numere foarte nari. Justifica{i structura dina-:*ci folosita.
I:;lza!i un program pentru afiEarea in ordine inversa a unui text introdus de la tastaturi=''rmplu: textul introdtn este ruai mult ca perfectul textulafigat este lutcefrep ac thtm iam).r;:ifi cati structura dinamica folosita.
i'si-izalr un program pentru transfonnarea unui numir dinbaza 10 inbaza2. Justificati struc-ti: dinamicd folosita.
fu :":'o'ideri formate doud cozi Clqi C2; in cele doud cozi sunt memorate valori munerice. Sa ser;meze o coada noud, C3, prin aqezarea elementelor din coada C2 dupa elementele cozii Cl.Eremplu:, :;;ia Cl este: 7, 3, 6, 5,8,9,2.- :e-la C2 este: 6, 8, 1,2, 5, 1,3, 5, g.
i: :r1ine coada C3: J, 3, 6,5, 8, 9, 2, 6, g, l, 2, 5, l, 3, 5, g.
'fo ::nsidera formate doui stive Sl gi 52; ilr cele doua stive sunt memorate valori numerice. Sani ::meze o stivd noui, 53, prin asezareaelementelor din stiva 52 peste elementele stivei S l.fuenrplu:$r',: S1 este: 7, 3,6, 5,8,9,2.frr-,3 52 este: 6, B, 1,2,5,1,3,5,g.$u ::iine stiva 53: d, 8, 1, 2, 5, 1,3, 5, g,7,3, 6, 5, g, g,2.
I un program care si prelucreze o secven{d de comenzi pentru un calculator de buzu-rfirr: lnma comandd executatd este prirna comandd din secven{a. Fiecare comandd are urma-'m-t sructurd:
operatorl operand operator2twtt operatorl, operator2 sunt valori numerice reale iar operand poate avea valorile
:o1 rHiferen{d P-produs, E-slErqitul secvenfei de comerzi (sfdriit prelu*arei).Ercrnplu: *'"-****-*-"r*
t Secvenqa de comenzi i rezultate 1l'*-"- ----r- *- --j
I 3.4s3 i 0.q i
i 2s.5D20.5 i s ,
, 12P4 i 48 i;_t"tI t-,. I sfar;it pr.eluuare ii-^*-*..--- *^*--**,**J* *-*-.-.-, t
:: caractere con{ine duplicate in serie (caractere de acelaqi fel care se repetd unul dupdSe Coreqte rafinarea qirului prin eliminarea duplicatelor in serie. $irulvid este sir rafinat.
jri$;.6.!.:jj;ti:rrr,, \:
Exemplu:
$irul inilial este: 9 12222223 44 43 5 5 aal 67 7 7 7 1 7 80009 5'
Exemplul 1: in gruP sunt 6 coPii.
Retaqiile de prietenie dintre copii:
Exemplul 2: in gruP sunt 6 coPi
Relaliile de Prietenie dintre
Pentru i=3, ordinea coPiilor
in qir este: 3, 2, 5, I, 4, 6.
BPRO6
EXDA,PLU DE I,
camdodidtin in rle dmii r
m,ei #obltt
IIIII
ffin
o.srmdmi grtrdffir*otlcnr- ln
!mcffi[tm ngpizrFmqjzrg(1ll)ecpcSdccze pc
crcpot&crepot
hllspcrstfmd
rpcil-frturiil
Figura 28
a)
Cerinle
Pentru i=2, ordinea copiilor
in qir este: 2, 1,3,5,4,6-
a)Specificalistructurileoecesareorganiz[riidatelordinaceast[problema.ui rio.""i*1i situaliile parriculare care pot fi intilnite in grupul de copii.
cj Formulali exemple nom"rice care sd pund in evidentd situaliile Ofit-,l.11:
;) -.;iilil;;;;;;rr. s6 afiEeze aranjarea copiilor din grup in ordinea doritd de
fesorul diriginte.
MINPRA'TCT i ru tE ru f * -ewfAryI4-tt -qgNI------l
Etapa: Analizd (identificarea datelor qi a prelucririlor)
Cerin(e:
|. Ana|iza|idatele qi cerinple prezentate in studiul de caz Compania Eficient (pag,3);
--^1,,^'X.ii c
tificali formel. a. orgurrrur. a datelor prin analuacomparativ6 dupd eficienla prelucrdrii
tora cu calculatorul.
2.Alc[tuifidocumentaliadeproiectcorespunz[toareacesteietape.
OIJI (tlJ&pr
Frltl orIffi
ile identificat prin numdrulri din gup.Profesorul dirigida,tiile de prietenie, qi
orrdinea crescdtoare a
copil care urmeazd in girirului; aceqtia se agazd gi ei
isteaza locul in r6nd).
ul 2: in grup sunt 6 copii.: de prietenie dintre copii:
CapitolulIlrxxryxxrxxxxeree{
I.IEPR OGRfr'1 E
UN EXEMPLU DE MODULARIZARE
fi, 0RGANIZAREA FESTtVtTATil DE ABSOTVIRE A L|CEULU!
fii yesupunem cd avem de organizatfestivitatea de absorvire a riceurui.k mult mai greu decdt in caanl organizr{rii unei onomastici; de aceea, vom incerca si,problema" in probleme mai ,,mici":
npl r cum vom contacta invita{ii?flDlt 6um vom organiza partea distractivd?fliFl, cum vom organiza partea culinari?
\t*lem: (pl) se poate gi ea descompune in alte trei probleme:tilD,[-l) lista celor care pot fi anunfafi telefonic;(tp[l) lista celor care pot fr anunfafi prin e_mail;ill[lSllista celor care pot fi anun{a{i prin poqtI.
ryry€ma (e2) se poate descompune in doua subprobleme:
ffiLl I stabilirea scenariului, alegerea formaliilor gi a soliqtilor;t(DLl I anun{area formaqiilor qi a soliqtilor invitali-
W (p3) se poare descompune la rdndur ei in urmdtoarele subprobleme:ffil t alcdtuirea meniului;
hil !) contactarea furnizorilor.
=3, ordinea copiilorE:3.2,5, 1,4,6.
iproblemd.
tl de copii.Ie particulare
rup in ordinea doriti de
ryq,fNI
wnia Eficient (pag. 3);6 eficien{a prelucririi
ape.
mrblemele (lt..I), (p1.2) : ... , (p3.2) sunt murt mai simple qi mai uqor de rezolvat dec6tF$'L." iniqiali; ele pot fi rezolvate qi verificate _ independent;,*a gisiti pentru o Tup-t subprobremi poate fi folosit[ gi pentru arte subprobleme;& aemplu: problemele (p2.2) qi (pz.r) r. poirezolva la fel ca'qffiLma (pr), (frg.29);men frpt determind o mare economie de eiort gi de timp de lucru;
@ru
s solutia gasrta pentru o anumiti subproblemi-poate fi adaptat6 p:nty l"'ol'area altor
bleme: de exemplu, solr'rlia problemei fpZ'il poate fi adantata 11
poate condur
' 11" efort si de
Hffi# d;i.'# hi.t,' , o"u fapt determi,d o mare economie de efort sr
(P) o.sanizr*, f*tivit[lii de']grrc1ttttul'i
1ptI *-*,o,n contacta invitatii?'i_^
(pl.1) lista ceior care pot h anunla{i telefonic;
(pl.2) lista celor care pot fi anunlali Prin e-maill
(p1.3) lista celor care pot fi anunlali prin poqta'
Figura 29. Descompunerea unei problerne in subprobleme
te1ii,
K)LO6[M,YlOOt]L
& prqrer es c
pme fi cmsi.l
FNe dale dt
flici dardc dln lt:
firnizeazareaftl$.699: {6t."5(calculAzi gncr
mirtai*mlvilra sa e$e cgd
fimi cfodctro
pe mmizit- cucrer-stel cid
purnhurdrmcoSL'
"fr-l- - R-, fr{
cntrG$rl 1
$lhqi.t Port
:f + fl, i(v)=
hqh I Pcru
:X+ i. g(-)
:X+ R, fr=
* ll-4.t, mri" 5{h
1La-r,.I/'--t- r E!
aE pentru rezolvarea altor f. CUM FOLOSIM MODULARIZAREA tA NIVEIUt UNUI PROCRAM?adaptati qi poate conde economie de efort Ei de
bpendent de citre diverse: de timp de lucru.
Cl nennilie[m. modul de program este o unitate de prelucrare care face parte dintr-un program.
ei de mai sus in su program poate fi considerat o func[ie in sensul matematic al cuvdntului:: au fost ha;urate identic). -gogramul prirnegte date de intrare (argumente; de ex. numerele: 1500; 19,44; 13,g9;25);
- programul aplica datelor de intrare un qir de prelucriri (de ex.: inmul$rea, ridicarea la,nnpartirea la 2);
-pogramul furnizeazdrezultate (in cazul nostru, va-It3.435; 144.699; 468.7 SO).
.ltneramul" calculeazd energia cinetica dezvoltatdup de masd m (aici: un autoturism de 1,5 tone),dnd viteza sa este egali cu 70, 50, respectiv
{adicd atunci c6nd circuld in localitali, in afaraiv pe autostrdzi). Cu alte cuvinte, avem de a
calcularea energiei cinetice dupd rela{ia:
simple - in loc de una si
**Kxx*
ii:f
ffi.c:e: :.
nail;r*. :
ra.trlrt i.
-f ,R*xR* -> R*, f(m,v)=m.v'
ernFlificam pufin lucrurile qi sd presupunem cd masa corpului pentru care trebuie calculatdunaica este constant[, variind doar viteza. obtinem o func{ie cu un singur argument:
f,:R* -+ R. , fr(r) =!.r'2
examinim expresia funcliei{, observ[m c6 aceasta rezultit din compunerea a douit l) func{ia h pentru ridicarea la pdtrat:
i:R-+ R, h(v)=y2
2r -m'vLr ---c 2 sau, cu o funcfie
tltfiurclia g pentru inmullirea cu o constanti:
g:R-+ R, g(w)=k.w, unde k=L2
adic6:
robleme
fr: R -+ R, -f, = g o h, fr(u) = g(h(v))
= 19,44 m/s2; 50km/tr = 13,89 m/s2; 90km/h * 25 m/s2.
@'
in matematici, putem obline funclii oricdt de complexe prin compunerea funcliilor
mentare (func{ia polinomiald, func{ia ra{ionald, funclia de ridicare la putere sau de
radical etc.).
in programare, putem construi programe oricAt de complexe prin tehnica de modul
adica prin inlln{uirea logic[ a unor ,,uniti1i elementare" de program: citirea datelor de
prelucrarea lor, afiqarea rezultatelor obqinute in urma prelucrdrii datelor. Un modul de
poate rezulta din inlinfuirea logici a mai multor module: calcularea valorii minime dintr
de valori, calcularea valorii maxime dintr-un set de valori, calcularea mediei ari
acestora etc.
ZAR,EA I
tuH Dt ?lootErm*pamw
*!ill[l([.&g5xenl i!
Ii@ffi sssmo dE e
$hrrsl&u
pillf,r:dd
hdt luEthHht
-l*rafiseazl
/ffiffi@inlln[uirea togici a unitililor de program, dupi modelul compunerii funcliilor
pune in evidenld mullimile de valori specifice rezolvdrii problemelor cu calculatorul:
citeqte (date de-intrare i dategogram)
Program (date_de_intrare -+ date_dlieEire) prelucreazi (datejrogram + rezultate)
aftqeazd (rezultate -+ date_de ieqire).
N--s,".l,,,.,.,..,-."i*.&t*ffiffi! S riiffiStr$Iwq
r
Figura logicl a unitililor de program
Iq
] pnn compunerea functiilorlicare la putere sau de extr
lexe pnn tehnica de modulaprosam: citirea datelor de irii darelor. Un modul de prel;ularea valorii minime dintr-un ;a astfel:i calcularea mediei aritmeti
I
j
le pognm
mpunerii funcliilor mamelor cu calculatorul:
de_intrare + datejrogram)date3rogram + rezultate)rltate + date_de ieEire).
IIODU LARIZAREA PROCRAMELOR
q, TIPURI DE PROBLEME (FACUTTATIV)
i-:zolvarea unei probleme cu ajutorul unui program de calculator este etapa finald aunui pro-.rre depinde de gradul in care cunoaltem datele de intrare, tipul rezultatelor, rnetoda de
rre. Jindnd seama de aceste aspecte, problemele cu care suntem zilnic confruntafi se pot
i care nu admit i
i o solu{ie algoritmicd It-..-...*_.*,._,_*_,."*,_.-*_._,..,...,__"., -._,_,*:
Figura jl. clasi
hrnple:a') ;rpblemd informald este o probleml pentru care nu Etim exact de ce date dispunem, nu,nllrlc&stem metoda de rezolvare, nu qtim nici mdcar cum ar trebui sa arate rezultatele. O pro-nml informald poate fi formulati astfel Cum sd procedez pentru afi apreciat de cei din jur?) 'i iroblemd formal,i de analizd este o problemA pentru care cunoa$tem mullimea datelorlnn:;.Le si forma rezultateloE dar nu cunoaqtem metoda de rezolvare; de exemplu: ne aflimfu-:a oraqel portuar strdin, nu cunoaqtem nici mlcar grafia limbii respective Ei dorim sa
qn!*,*ffirm de la hotel in port. Analizdnd problema, constatdm cd nu putem apela la localnici -'Dnr icar la taximetriEti sau hotelieri -, dar, de la lecliile de geografie, qtim cI portul se afld
,*lM"e-lffit, I
{&'csistsfi*ffi} | i'qtr$ffiffi*i
de analizi
\
\
itiv. De aceea, vom recurge la prezentare a problemei corespondenleil PosP. Aceasta
problemi de decizie nerezolvabila algoritmic care, informal, poate fi enun(atd astfel:i&cillre dnirc qlq
diclionar care conline perechi de fi aze ;i fie doud fraze oarecare; se poate decide dacd hrca uoei Probleu}zi- ri. Eei d€fillqdoud fraze au acela;i inleles [n ambele limbi?
in continuare, vom considera o varianta mai simpla a problemei lui Post. Fie doua:ri- !q IDel ffiP-E![Sd ginir€atnnidgp
finitedenumerescriseinbazal0, X= {x,,xr,...,Xn}, Y= {y,y2,...,yn}. Seceresdse imdeam." rtz
mine o secventa de indici i,, i.. .... io. astfel incat nutnerele x,, .r'', xi1 $i )'1, /i. )'10, oblinute
concatenare, sd fie identice. Se poate demonstra ci nu existd un algoritm care sd determine
fel de secven{i de indici, ddndu-se oricare doua mulfimi X qi Y. Spunem cd problema este
cidabild (algoritmic). Exista cazuri particulare ale problemelor nedecidabile care pot fic-griede poH.rcu algoritmi particulari, in func{ie de exemplul tratat; schimbarea datelor de intrare i
in partea sudicd a oragului respectiv. PresupunAnd ca avem parte de o zi insoritd, ne
totugi orienta sI gisim, astfel, drumul.. O problemd formald de sinteza este o problemd pentru care cunoa$tem mullimea
iniliale gi metoda de rezolvare. (Foarte multe probleme de matematicd, ftzicd, chi
parte din aceastd categorie.). O problemd de sintezd care nu poate fi rezolvatd algorittttic este mai greu de explicat
gdsirea unei alte solu{ii (deci a unui alt algoritm!) aga cum vom arita imediat.
Fie nrulqimile X,= {44,48, 84, 88} qi Y r: {4444,4448,4884,8448}. Problema lui
nu are solu{ie pentru aceste mulqimi deoarece oricare dintre numerele din Y, este mai lung
mai multe cifre) decdt oricare dintre numerele din X, .
Fieacummullimile Xr= {121,21,22,1221},Y.: {ll2l, 12,112,122}.Problernalui
are solu{ie pentru aceste rnullirni: secvenla de indici este 4,2,2,1. intr-adevar:
-1. i.)ilx.x^x^x. : l22l2l2tl2l = l22l2l2ll2l : v,v.v.v,
12212121121cttt 'VTVnlu
Yr Y: Y: ll
Ce se intimpli cu mul{imile X, = |.23, 2333, 323} qi Y: = {22, 32323,33}? Du
Xo= {22,2223,333} $i Y+ = {22,22233,32}?Dar cu...?!
I Aceasta probleral a fost formulati in anul 1946 gi publicatd in arlicolui "A variant of a rec
unsolvable problem", in volumul 52 al Bulletin of the American Mathematical Society. Fiind rnai si
decit problema opririi programelor (a se vedea Anexa 1), problema corespondenlei Post este
folositi pentru demonstrarea - prin reducere - a nedecidabiliti{ii unor probleme din informatici.2 Emil Leon POST (1897 - 1954): matetratician de origine polonezd, profesor la City College of
York. in teza sa de doctorat, sus{inuti in1920, Post a demonstrat completitudinea gi nonconhadiclia
culului cu propozi{ii - descris de B. Russell gi A.N. Whitehead in "Principia Mathematica" * folosind
tru prima dati metoda tabelelor de adevir. Este considerat pdnntele teoriei demonstrafiei, un prec
tui Kurt Godel (prin lucrdrile sale privind rnullirnile recursiv enumerabile, gradele de nedecidabili
John von Neumann (printr-un model matematic de maqini de calcul foarte aseminitor celui descris de
Neumann in celebrul sau arlicol din 1946).
i.,brwld fu sncN rytsllicl em
l3r3r folosindtiry
fowli de starpolinorral tchll
rrilizlm modec
tidnhli widi,ir:1 rnri rqmo&
pimmatuluriiW
crcecimrc e urei ffundcrhcmca roo[fu
&lfrtrziipiddEddtFn ch
GrEqlc dh fu&prelmP
rugr cdritobddgrfie nmi tr
P(illl (
dFinffiizml
fuumndalofoctlce dr*
ddrlddn
multimeafizica, chirnie
b este mai greu de explicat i
e O problemd formald de sintezd, care admite o soluSie algoritmicd ;i al cdrei ordin den&ine este polinomial (chiar liniar), este problema ciutdrii secven{iale. Pentru un qir ordo-n - dacd utilizdm metoda clutdrii binare, sfudiati in clasa a IX-a - complexitatea algorit-vndenleit posp. Aceasta
, poate fi enun(atd astfel: Fr, de clutare devine O(logrn).are; se poate decide dacd
Umsformarea unei probleme informale intr-o problemd formald - mai intdi de analizi gi
mei lui Post. Fie doud muoh sinteza - qi, mai departe, intr-o problemd rezolvabild algoritmic este - uneori - extrem
!;, .. ., !n1i. Se cere sd seL Nici gisirea unui algoritm de rezolvare cu complexitate polinomiald, liniara sau loga-
r,;'ri1 $t -/1, /1, )!u, ob{inute
lgontm care sd determine o
ru este intotdeauna... rezolvabild algoritmic!
Sprunem ci problema estedecidabile care pot fi rezo ficirirea datelor de intrare i
UA
parte de o zi insoritd, ne
are cunoaqtem
: matematici,
rita imediat.884. 8448). problema luirele din Y, este mai lung
,112, 1221\. problema luiintr-adevar:
,21212t121
212121121L !1 ,r. ll
= {22,32323,33}? DarIODUTARIZAREA REZOLVARI I
;TOBLEMELORpctica suntem confrunta{i, cel mai adesea, fie cu
olul "A variant ofa care admit solulii algoritmice gi au un grad de com-
rtical Society. Fiind mai siruonabil, fie numai cu cazuri particulare ale unor
wpondenlei posl esteblerne din informatici.
nedecidabile pentru care putem glsi solu{ii con-
h ruolvarea acestorprobleme cu ajutorul unui proirirrim modularizarea atunci cAnd clutdm o solutie
dinhe urmatoarele subprobleme (frg. 32):
introducerea datelor de intrare (modulul deidemonstraliei, un r lrtelor);gradele de nedecidabili pelucrarea datelor (modulul de prelucrare);
Eransmiterea datelor de iegire (modulul desemdndtor celui descris de
r rtzultatelor).
t O prublemd formald de sintezd, care admite o solulie algoritmicd dar al cdrei ordin devainne este exponenlial, este problema determindrii cornbindrilor de n elemente luate citel. l< m ( n folosindbine-cunoscutaproprietate acombinirilor.
sr h ce categorie de probleme se incadreazd urmitoarele enunfuri:
-,crisularea titlului unui aliaj;* itumstruirea unui aeromodel;
u:r:ficare primalit[1ii unui numdr natural dat;
- rcordarea unui imprumut;
- Mtarea crescdtoare a unui qir de numere reale;
-cdcnlul sumei primelor n numere naturale;
- fimrea in cartea recordurilor;
-afu:r.rlarea dob6nzii primite pentru banii depuqi la banc[;elevilor din clasd dupi indl{ime qi greutate.
C.rlilafi exemple din domeniile de interes qcolar sau din sirualii reale pentru frecare din-iile de probleme prezentate.
rofesor la City College ofiudinea qi noncontradictiar Mathematica" - folosind
Figura 32. Modularizarea rezolviriiunei probleme
d
-&ffiM6.*W$lX
Noqiunea de modul este independenta fa{a de limbajul de programare. Un algoritmformat din mai multe module (subalgoritmi). in continuare, vom folosi tennenul defhra a implica prin aceasta folosirea umri anumit lirnbaj de programare.
LPJJ9A$TProble ma traiectoriilorUn tun executd n aruncdri de proiectile. Pentrufiecare aruncare se cunosc viteza
v, Si ttnghittl de tragere a Trebuie detemtinate:(l) - distanla ruaximd,
- viteza inifiald,
- unghiul de tragere pentru care distanla pe orizontald atinsd de proiectil dupd teste maximd;
(2) - indllimea minimd,
- viteza iniliald,
- unghiul de tragere pentru care indllintea pe verticald atinsti de proiectil dupd teste minintd.
Figura 33. Aruncarea unui proiectil
1. Analiza problemeie Date de intrare:
- numdrul de aruncdri (n>1);
- n viteze iniEiale (V);
- n unghiuri de tragere (A).o Date de ieqire:
- cea mai mare distanla la care a ajuns un proiectil dupa t secunde (X,,*);
-viteza iniliald pentru care, dupa t secunde, proiectilul a atins distanta maxima (vu);
- unghiul de aruncare pentru care, dupa t secunde, proiectilul a atins distan{a maximi (
- cea mai micd indl{ime la care a ajuns un proiectil dupd t secunde (Y*,,,);
-viteza iniliald pentru care, dupa t secunde, proiectilul a atins indl{imea minimn (\);- unghiul de aruncare pentru care, dupd t secunde, proiectilul a atins inallirnea minima (
e Conditii girela{ii importante:
Se cunoaqte t = l0 secunde.
$e unlizeazl formulele de calcr
proiectil:
{ll x =v.t.cosd,
{lr y=v't'rirr-8'"2
L. Rrgionamentul problemeiI: ciut[munalgoritm
concomitenti a am
[lml 1. Se citeqte numirul de
[ht 2. Se citesc cele n pet
O'r, An).
3. Se inilializeazi consta
4. Se calculeazd distanta
5.Xr"* € X,, k e6. Se calculeazd o noui I
7.Dacd X, > X.r, atun
kl 8. Daca Y, ( Yr,n afunr
9. Se repeta pagii P6, P7
ILsd 10. Se afiqeazi U, distar
de tragere An, viteza \,
Reprezentarea algoritmull
variabilen,YA,&Y)f,= l0
= 9-8
elrte n
pentru i:l la, n exscur
citeqte Vi, Aisfirqit pentrupentru i =1 la, n execu
Xi <- Vi*t*Yi <- \t*t*
sfirgit pentruXmax <- Xlk <-l
rx@
3 3 5 2 4 6 2
t5 30 15 20 45 60 20 75
€ramare. Un algoritmn folosi tennenul dermare.
care se cunosc viteza
d de proiectil dupd t
i de proiectil dupd t. - fi'r, AJ.
*-*-1
6e (Xr,*)i
listanta rnaxima (Vu);
Iins dis1a116 maximd
rde (Y*,,)i
niltimea minimd (\);ins inalfrnea minima (
. Conditii Ei rela[ii importante:Se cunoaqte t = l0 secunde.
:e 'rtilizeazi formulele de calcul pentru aflarea distanlei (1) qi a inAl{imii (2) din traiectoria:roiectil:
-t x=y.t.cos0,.2
lr !=v.t.sino-8''2
I Rafionamentul problemeiMetoda I: cdutim un algoritm cAt mai eficient pentru rezolvarea problernei. Aceasta inseam-uirionarea concomitentd a ambelor cerinle.Prsul l. Se citeqte numirul de aruncdri n.rlsul 2. Se citesc cele n perechi de viteze iniliale qi unghiuri de tragere (v, A1), (v2,
Frsul 3. Se inilializeazi constantele t: numirul de secunde Ei g = accelera{ia gravitalionald.Ilsul 4. Se calculeaza distan{a X, gi inlllimea Y, conform formulelor (l) gi (2).
Prsul 5. Xrr* € Xt , k <- l, Ymin F Y, j € 1.
Frurd 6. Se calculeazd o noul pereche (Xi,Yi).
hsul 7. Daci X, , Xr,* atunci X.u* €- X, , k <- i.lurul 8. Dacd Y, ( Y*in atunci Ymin e Y, , j <- i.Furul 9. Se repetd pa;ii P6, P7, P8 pentru toate perechile de valori (Vi, AJ.Ftrul 10. Se afiqeaza U, distanla maxima Xr,,* $i inal{imea minirnd yr,n, viteza Vu $i
de tragere Au, viteza \ li unghiul de tragere A,.
!. R.eprezentarea algoritmului
rariabile n, V A, X, Y X*u*, Y.in, k, j, i
s=i.3'E&Se
n
pentru i:l la, n executiciteqte Vi, Ai
sfirqit pentrupentru i =l la, n executl
Xi e Vi*t*cos(Ai)Yi e Vi * t * sin(Ai) - g* t* tl 2
sfirqit pentruXmax <- Xl( el
#
"-f,*;l;n* ll6i{:i't:* j$.iaj : :
2 7
+- Yl
la, n executldacl Xi> Xmax atunci
blocXmax e Xik <--i
sfflrgit bloc
sfirgit dacldacl Yi < Ymin atunci
blocYmin +-Vj +-i
sfArqit bloc
sf0rqit dac[sf0rqit pentruscrie Xmax, Vk, Ak, Ymin, Vj, Aj
sfir;it traiectoriil
Metoda II: rezolvarea prin modularizare
Cdutam sf, descompunem problema in probleme rnai simple, pentru care - eventual - a
solu1ii, chiar sub forma de subalgoritmi:(Ml) modulul de citire a datelor.
(Ml.1) modulul de iniqializare a constantelor: t = l0 qi g = 9,8;
(M1.2) modulul de citire a variabilelor:numarulde aruncdri n, cele n viteze iniliale
V2,..., Vn gi cele n unghiuri de tragere A,, Ar,..., A, ;
(M2) modulul de prelucrare
(M2.1) rnodulul de calculare a distan{elor X1, X2,..., Xn gi a indl{imilor Y1, Y2,..., Yo
aplicarea fonnulelor (1) 9i (2);
(M2.2) modulul de calculare a valorii maxime X.u* dintre X1, X2,..., Xo gi re{inere a
xului corespunzdtor k;(M2.3) modulul de calculare a valorii minime Y-,- dintre Y,, Y,,..., Yn gi relinere a
xului corespunzittor j;(M3) modulul de afisare a rezultatelor
afigarea distan{ei maxime Xru* , ? vitezei iniliale Ei a unghiului de tragere corespunzitor
Au; afiEarea innlfimii rninime Y*in , 0 vitezei iniliale qi a unghiului de tragere corespunzdtor
4..J
Ra{ionamentul modularizat este prezentat in figura 34.
Yrninj <-l
pentru i =2F) Crtcrhrtr d
ficcd dirD--! em) citir€a d
, (}r r.r) *: t:li g=l
= g*f t:) *
: errman I: r rmglruri:-----.........
Sf,!) prehxr
! or z-tl 'i w a inilg
! rlrsirlu
!ruut": Cam Xr.
: QffiSPlE,
i f}I Ul.: dE(rE I,:
:Jo-
ciXre a
iraInII Care:lor
fi,gu
!otII
ILil:f,!
: rr,r#e-.[1d]S"^ilsk-?ffitffkI f, fs+ti ;IFI11*'
i pentru care - eventual -
n viteze iniliale
es;i n, cele
t iniltimilor
K1, \,..., Xn
fl, Yr,..., Yn
Yl, Y2r..., Y,
gi re{inere a
qi re{inere a
ui de tragere corespunzdtor
ri de tragere corespunzdtor I{
"tffi,Ii\l,r{,'dQt*:;$ .,- r ..s I 1
,l
(P) Calcularea distan{ei maxime qi a inll{imii minime atinse de un
proiectil din mai multe arunciri
Lr:x xr:J
! (M1) citirea datelor de intrare:""""""' """""""':: (M 1.1) modulul de inilializare a constantelor: :
i t:10 :
i g=9,8 :
:"""""-" """"""'"':: (M 1.2) modulul de citire a variabilelor: numdrul de :: aruncdri n, cele n viteze iniliale YpY2,,.,.rVn qi cele i
i n unghiuri de tragere A, Arr..., An; iL--r *xx*
M2) prelucrarea datelor I:""""""' ""'"""""": I: (M 2.1) modulul de calculare a distanlelor: X1, X2;..,t Xn i t
i qr u indl{imilor Y1,,Y2r..., Y,, prin aplrcarea formutelor i I
i1ryEi1z;; " iI
:"".J"""' """""""':
i (M 2.2) modulul de calculare a valorii maxime X*u* :
i dintre XpX2r..' Xn gi refinere a indexului :i corespunzdtor k; i:""""""' """""""':: (N12.2) modulul de calculare a valorii minime Y*,n ii dirrt.. Y1,Y2r...rY, Ei relinere a indexului :
: corespunzifior j. :
*r-J
lxn.t
(M3) afisarea rezultatelordistanla maximi X*u*, viteza Vu $i unghiul Au pentru
care a fost atins6;inilfimea minimi Yn,.,n, viteza \ ;i unghiul A, pentru
care a fost atinsd.
L
,ttIItItI
Figura 34. Problenta traiectoriilor - rczolvare modtilarizatd
3. Reprezentarea algoritmului; Atentiehogramul traiectorii I este
rezolvarea acestei probk?rogramul traiectorii 2- poate folosi module deja s
. modulul pentru detenpoziliei pe care apare
. modulul pentru detenpoziliei pe care apare
- m poate adapta mai u,sor;
- prezinta un grad mai mare
rele exemple pun in t
1 1: modulul de den
;;n cel de determinare a
;l din instructiunea de te:
Calcularea minimult modul minim
e Z. VAL, i+21
i= 2la n executiZi < VAL atunci VAL<-it dacipentru
VAL:Itnlm
l2: modulul de deterre Doote obyine din modulu,
mmtctiuni de atribuire:
Calcularea pozifi{
modul pozilie_maximZ,VAL,INDEX, i
<- zli <-1=2Ian executl
A > VAL atunci
lri- <- Zif\DEX <_ i
$$w
II
-_-rrrt
pentruVAL
+21i <-t=2lat executl
A > VAL atunci
variabile Z,VAL,iYAL <_ Z1
pentru i=Zlan executldaciZi > VAL atunci
YAL<_Z1
II,II
a
tItII
; Atentiehogramul traiectorii 1 este realizat printr-o secvenli de operafii ce poate fi folositi doar
rezolvarea acestei probleme.hogramul traiectorii 2- poate folosi module deja scrise, si anume:
o modulul pentru determinarea valorii maxime dintr-o secventi de valori pi relinere apozitiei pe care apare acest maxim,
r modulul pentru determinarea valorii minime dintr-o secventi de valori si retinere apoziliei pe care apare acest minim;
- * poate adapta mai usor;
- pezinta un grad mai mare de generalitate.
Lmitoarele exemple pun in eviden{a flexibilitatea oferitd de modularizare.Ercmplul 'l: rnodulul de determinare a valorii minime dintr-o secvenld de valori se poate:is ;in cel de determinare a valorii maxirne (;i reciproc) prin modificarea operatorului
tnd din instrucliunea de test:
Calcularea minimiilui i'l
modul minimZ,VAL,1 variatrile Z,VAL, i
YAL +21pentru i:2la n executi
dacdZi > VAL atunci VAL<- Zisf6rgit daci
sfir;it pentrureturneazi VAL
sfflrgit maxim
?ZIi= 2la n executi
&jzi < VAL atunci VAL<-Zitfirsit dacl
Ircrrplul 2: modulul de determinare a @ivalorii maxime (mmime) dintr-o secttenyd dei :e poate obyine din moduhl de determinare a valorii maxime (minime) prin addugarea awrsmtcfiuni de atribuire:
Calcularea
t modul pozi{ie_maxim inceput modul maximZ,YAL, INDEX, i
IItIIII
IIIIIIItI.I
er'*AI <- Ziil\,DEX <- i
@t*
sf0rgit blocsfflrqit daci
sf6rqit pentrureturneazl VAL,INDEX
sf6rqit pozilie_maxim
sfirqit dacisfirEit pentrureturneazl VAL
sfArgit maxim
incheierea opera{iei de citire prin:a) citirea numdrului de aruncdri n,'
b) utilizarea unei valori-semafor care sd indice oprirea sau continuarea citirii.2. Scrie{i un modul de program care si numere elementele nenule dintr-o secventa de n
date, n eNfixat.3. Scrieli un modul de program pentru calcularea mediei aritmetice a unor numere intregi
care si poatd fi folosit intr-un alt modul de program.
program care sd determine cifra unitrlilor, a sutelor, a miilor qi - dac6 este cazul - aoanelor; cifrele cdutate vor fi afiqate intr-un alt modul de program.
5. Formula{i exemple de prelucriri care pot fi organizate in module (subalgoritmi) gi utilizaalte prelucrdri (algoritmi).
C. TEHNICI DE MODUTARIZAREPentru modularizarea programelor putem folosi doua tehnici frecvente in proiectare ,si
gramare:
(Tl.) tehnica top-down (de sus in jos, de la complex la sirnplu; tehnica specificd operafieianalizit);
(T2.) tehnica bottom-up (de jos in sus, de la simplu la complex; tehnicd specificide sinteza).
Tehnica top-down constd in descompunerea modulelor in submodule pAnd la izolareamai simple unitili de lucru (este calea pe care am urmat-o in exemplele prezentate).
Tehnica bottom-up procedeazir exact invers: pornegte de la unita{i de prelucraregi - prin compunerea lor - ajunge la solulia problemei. Acest demers este intuitivoperaliei matematice de compunere a func{iilor.
Doud rnodule M, $i M, din cadrul unui program se pot afla unul fa{d de altul in una
urmdtoarele relalii (ilustrate in figura 35):(R1) M2 succede lui Mr; prin urmare, M, gi M, se numesc module independente;(M) Mz face parte din Mr; prin urmare M, se numeqte submodul (subalgoritm,
qi ii este subordonat modulului (algoritmului, programului) M,.ki$ffiP'
r.TgMEUtilizarea modulelor
1. Scrieqi un modul de program pentru citirea datelor din problema traiectoriilor, folosind, inde tablouri unidimensionale, variabile independente. condilia n > l este elirninatd.
Module indePendente (Rl )Figur
h rmbele cazurr, M, ii trans
dacd execu[ia rnodulului M,
4. Se citesc z 2.1 numere intregi strict pozitive mai mari decet ru00. Sd se scrie un modul Cu alte cuvinte, modul M, se P
Aceste date constituie il
- date de intrare, Pentru modul
- date de iesire, Pentru modulu
h cazul (Rl), interfala trebui
t{-: datele de iegire ale modu
pentru acesta.
h. cazul (R2), interfala trebui
I t]tr), cit gi de la submodu
-:lementul de interfa[a, care i
apeleazi rnodul(date-dr
- elementul de interfa(d, care
*'=ilyl:*"i:9:11returneazi(date-de
Figura 36 ilustreazi modul dr
fie in rela(ia (Rl), fie in r
Modulul
unor numere intregi h rmbele cazuri, M, ii transferd controlul lui Mr. Acest transfer are loc necondi{ionat,dacd execufia modulului M, s-a incheiat corect.
L Sd se scrie un modul (u rlte cuvinte, modul M, se poate executa pentru ci modulul M, a pregitit toate datele- dacd este cazul _ aE.
Aceste date constituie interfa{a prin intermediul careia cele doui module comunicd 9i
subalgoritmi) qi utili - oa:e de intrare. pentm rnodului Mr;
- cale de ie$ire, pentru modului M,.
h cazul (Rl), interfa(a trebuie sa asigure numai comunicarea de la modulul M, la modu-
H-: datele de iegire ale modulului M, trebuie transmise modulului M, gi devin date devente in proiectare qi
nici specifi ci operafieipentru acesta.
ffi cazul (R2), interfa{a trebuie sa asigure atAt comunicarea de la modulul (Mr) la submo-
nhnicd specifici r l[,), cdt gi de la submodulul M2 citre modulul Ml:- *mentul de interfa[a, care asigurh comunicarea de la modul spre submodul, se introduce
uaiectoriilor, folosind,> l esre eliminatd.
rtinuarea citirii.ittr-o secven.ta de n n
nle pdnd la izolareale prezentate).
de prelucrare
este intuitiv
H de altul in una
l independente;
rbalgoritm,
Modulul M Modul
lu{odule independente (Rl) Module subordonate (R2)Figra -?J. Subordonarea modulelor
urt intul p_seu9_:::9_:ry1::_liglld: l"lele subnodulului qi rnullimea datelor de intrare;
--f::l:iriM*_1'_1:T) I
- Cementul de interfali, care asigurd comunicarea de la submodul spre modul, se introducenn'intul poseudocod returneazl, urmat de rnulEimea datelor de ieqire.
*fu,1,,.-*.4
t*T:T::11".9-*:::l_ _ i
fryura 36 ilustreazi rnodul de comunicare intr-un program compus din mai multe module,fie in rela{ia (Rl), fie in relalia (R2).
@xr
f*; - - "-'i rnceput program problemei
de i:rtrare:
:::,etele celor doud inten'ale
ae leslre:
m. nesaj coresPunzitor.
tul de rezolvare
: Ilecare pereche de nume
i ..capetele" intervalului:
::..culeaza lungimea fieciLrut
:r:nper[ cele doua lungimr:
=e:este mesajul coresPtru;
:i mai mare
nlarizarea rezolvirii5;,i.''seste un submodul Pentr
barea,,capetelor" inter
Drcrierea fluxului de cont
mri in modulul de citire I
G cfesc cele Patru numerel
apeleazi rnodul
apeleazi modul
ps, (d_i)
s, (d_i)
apeleazd modul s,-, (d_i)
apeleazl modul s,_, (d_i)
apeleazd modul s,*, (d_i)
apeleazl modul s" (d_i)
sfArqit program
Figura 36. Comunicarea intre module
LTTMq.Comunicarea intre module
1. Proiecta{i un modul de program care si numere zilele care au trecut de la inceputul anuluiir,ziua curenti. Ce date de intrare primeqte modulul? Ce date de ieqire returneazd modulul?
2. Se citesc n perechi de numere intregi. Proiectafi un program modularizat pentru:
a) determinarea mediei aritmetice a fiecdrei perechi de numere;
b) determinarea perechilor de numere pentru care media aritrnetica are valoarea maximd.Cdte module poate avea programul? De cdte ori poate fi apelat fiecare modul?
D. IMPTEMENTAREA MODULARIZARII. STIVA SISTEMFiecare apel de modul detennind o intrerupere a prelucrarilor din modulul apelant.
reluarea acestora dupd revenirea in modul, adresa operaliei la care s-a flcut intrerupereare{inuti intr-o zon6 speciala de memorie, la dispozilia procesorului, numita stiva sistem.acelagi nivel al stivei sistem sunt memorate qi datele de intrare in modul. Cu fiecare apeUirupere, stiva sistem cregte; la revenirea din modulul apelat, stiva sistem scade.
Figura 37. Stiva sistem
Exemplu: Intervalul de lungime maximi.Fie doud intervale de numere reale [A, BJ ;i [C, D]. Se cere sd se determine intervalul
lungime maximd.
L;5,Mffil&r$ffiffis: I dlaffi:,:$.t3.r'
-, 1
(?) Determinarea intt
(M1) citirea dat
citeqte A. B. C.
(M2) Prelucr:apeleazi intaapeleazl inta
daci Igl > I4daci Ie2 > Igl
Fig
rnceput modul s..lmsFucliunea klrnsAucliunea k,
ustrucfiunea kh
returneazi (d e)sliirgit modul s.
t& Ia inceputul anului niiFre returneaza modulir
L.Araliza problemeiIlue de intrare:
capetele celor doud intervale (A,B,C,D e R).Dre de ieqire:
un mesaj corespunzltor.Xe$onamentul de rezolvare
fiecare pereche de numere se verifici dacd formeazd interval qi, in caz negativ, seEEmba,,capetele" intervalului;r calculeazd lungimea fiecarui interval;r compard cele doua lungimi;
Xr;rtr:;ff;:ul corespunzdtor: [A, BJ are tungimea cea mai mare sau [C, DJ are
Modularizarea rezolvlriir folosegte un submodur,ry:]1 carcularea rungimii unui intervar qi - daca e cazur - pen-gscbimbarea,,capetelor,'
intervalului.
Ilcscrierea fluxului de controlrs intri in modulul de citire a datelor de intrare (Ml) +-r citesc cele patru numerele reale A, B, C, D;
rhizatpentru:
5 are valoarea maximd.nare modul?
t modulul apelant.
"e ficut intreruperea
.nmaiti stiva sistem.h[ Cu frrrur" up'rii.r scade.
*qntne inter:talul
(P) Determinarea intervalului de funlimffiximX(MI) citirea datelor de intrareciteqte A, B, C, D
apeleazi interval (C, D, lg2)
auxGXXeYY e.aux
sfArqit blocsfirqit dacllg +-Y-Xreturneazl (lg)
dacIX>Yatuncibloc
altfel scrie intervalele au
dacl lgt > lg2 atunci scrie [A, B] are cea mai mare lungidacd lg2 > lg1 atunci scrie [C, Dj are cea *ui ,nu." trrogi
38. Ra{ionamentul problemei
o se intra in modulul de prelucrare (M2) +- se apeleaza submodulul (M 2.1) pentru perechea A gi B +- se lnemoreaza adresa de intrerupere in stiva sistem;
- adresele valorilor A gi B sunt depuse in stiva sistem;
- se executd submodulul (M 2.1) pentru perecliea A gi B +- lungimea intervalului [A, B], este transmisi modulului (M2),
o stiva sistem scade;
- se apeleazd submodulul (M 2.1) pentru perechea C qi D +- se memoreazd, adresa de intrerupere in stiva sistem,
- adresele valorilor C gi D sunt depuse in stiva sistem;
- se executd submodulul (M 2.1) pentru perechea C qi D =o lungimea intervalului [C, D], este transmisd modulului (M2),o se revine in modulul (M2)o stiva sistem scade;
o se intri in rnodulul de afigare a rezultatelor (M3) +o se compard cele doua lungirni de interval lgl qi Ig2 qi se tipdregte mesajul
# TEME
Stiva sistem
l. Explica[i rolul stivei sistem in implementarea fluxului de control modul-submodul atuncimodulele se afld in rclalia (Rl), respectiv (R2).
2. in ce situalie creqte stiva sistem?
3. Ce efecte are ieqirea dintr-un modul asupra stivei sistern?
4. Ce semnifica{ie are stiva sistem goala?-i5. ln ce imprejurari zona de memorie stiva sistem nu mai are spaliu liber iar procesorul trans
mesajul <<stack overflow>> (,,stiva se revarsA")?
6. Scrie{i un program modularizat pentru calcularea mediei valorilor energiei cineticede un automobil, un autocamion qi o motociclet[ pentru un numir dat n de viteze dev, v? ..., u,. Cum se modificd stiva sistem?
3. tUCRUt CU SUBPROCRAME iN PSTUOOCOD
A. STRUCTURA SUBPROCRAMETORStructura unui subprogram nu diferd de structura unui program. in oricare dintre aceste
dule, intdlnim urmdtoarele elemente de structuri:o un antet;
o o secfiune (op{ionald) de declaralii (constante, variabile, alte subprograme);r o sec{iune de instrucliuni executabile (simple sau structurate).
T" DEFINIREA SUBPROGMk cele mai multe dintre limbi
i de instruc{iuni a progra:
unui subprogram insean:t
- aiegerea unui nume;
- >rabilirea datelor de intrare $i
- ;crierea instrucliunilor prin ,
ii datelor de ieqire din subpr
a Atentie,Multimea variabilelor care
mului formeazi lista par
Acqti parametri apar in intr
a sublinia similaritatea dintth punct pi virguli.
c. DECLARAREA SUBPROG
Drlararea unui subprogram ir
care permit comunicarea iin antetul subprogramuhu
r nrldntul rezerv at.subprogrur irrmsls dat de programator sr
r Lsta parametrilor formali.
subprogram num
tremplu: Subprogramul de ca
Lceput subprogram arie (LulAeLung*Latreturneazi (A)
Grsit arie
cuvdntul rezervat pentn
numele sub
hceput subprogram ane
A +- Lung * Latreturneaz[ (A)
firqit arie
da
r$@
B. DETINIREA SUBPROGRAMETOR: cele mai multe dintre lirnbajele de programare, subprogramele sunt plasate ,,inaintea"
;':mi de instruc{iuni a programului propriu-zis (numit, de obicei, program principal).
- llegerea unui nume;
- stabilirea datelor de intrare qi a datelor de iegire proprii subprogramului;- scrierea instruc{iunilor prin care se realizeazd, prelucrarea datelor de intrare in vederea
ii datelor de iegire din subprogram.
tiD=>I
12),
ErD+
ireqte mesajul
modul-submodul atunci
liber iar procesorul
r energiei cinetice dezvolErdat n devitezede
in oricare dintre aceste
rbprograme);
a AtenfieMullimea variabilelor care constituie datele de intrare pi datele de iepire ale sub-
ui formeazi lista parametrilor formali ai subprogramului.{cepti parametri apar?n interiorul unei perechi de paranteze rotunder sublinia similaritatea dintre subprograme pifuncliile matematice) pipunct pi virguli.
C DECLARAREA SUBPROCRAMETORJ:clararea unui subprogram inseamnd, precizarea prin cuvinte rezervate a elementelor de:ri care permit comunicarea intre subprogram ;i programul apelant. Aceste elemente sunt:se in antetul subprogramului prin:
r ;ur Antul r ezeN at.subprogram;r lumele dat de programator subprogramului;I ista parametrilor formali.
Eremplu: Subprogramul de calculare a ariei unui rl
imeput subprogram arie (Lung; Lat;A)AeLung*Latreturneazl (A)
dinit arie
foceput subprogram arie (Lung;A +- Lung * Latreturneazi (A)
rlErqit arie
Lat;A)
'r*,,tunghi:
Figura 39.Declararea unui subprogram in pseudocod
cuvdntul r ezerv at pentru declararea subprogramelor
numele subprogramului
date de iesire ) ,irru parametrilor formali
su bp rogram nume(par_formal, ;par_formal, ; . . . ;par_formal,,)
@Wwrl
.t+7Y T{h4X
Declararea subProgramelor
Declara(i cAte un subprogram pentru rezolvarea urmdtoarelor cerin(e:
a) calcularea ariei gi volumului unei sfere de tazd dati;
bj calcularea perimetrului qi ariei unui triunghi, cunoscindu-i laturile;
c) calcularea greutdlii unui obiect de masd datd;
i) calcularea aensitalii unui lichid, cunoscdndu-i masa Ei volumul'
Explicali semnificalia parametrilor pentru fiecare dintre subprograme'
dul siu, subprograme (figurile 35 9i 36).
prin apeiarea unui subprogram s de c[tre un program apelant P inlelegem o
pe care programul apelant o trimite subprogramului Ei prin care ii cere acestuia sI execute 1
lucrarea din blocul sdu de instrucliuni. Prin aceastd comand6, programul apelant P trebuie:
(l) sa-i fimizezesubprogramului s datele de intrare necesare prelucrarii;
iZi ra-l indice datele de ilEire in care subprogramul S trebuie si-i furnizeze rezultatul -rezultatele - prelucrarilor sale.
Toate aceste informalii sunt transmise subprogramului cu ajutorul
apelul subprogramului. Aceqti parametri se numesc parametri actuali'
apel sunt:
listei de parametri
Elementele comenzii
AtentieDt ce este nevoie de doua listt
rrnetri actuali? Daci ne'arm
ar trebui si aPari - evidem
b la apel, toate Progranrelelista. Existenla celei dea d
iilor enumerate mai sus -dintre programele aPelant
40 ilustreazi doud cazun P
,l t Moduie care se aPeleaz
r.rnul pe celalalt
Figura 40- APla
IETURNAREA VALORILOTtrebuie si Produr
ft fupr, un program aPelea
rezultatului (sau rezulu
mhderea in lista Paramerril'tmnsmrse;
miuderea in corpul subProg
i care sd aslgure comun
comandi contine:
innrl rezervat returneaza-
de variabile care contin \.:
- cuvintul rezewat aPeleazi;
- numele subprogramului;
- lista parametrilor actuali.--------*_l
; apeleazl nume(par-actual,;par-actualr;"';par-ac _lI .--*"_** _
A Atenlieparametrii actuali din comanda de apel trebuie si corespundi - ca tip, numir
ordine de enumerare - parametrilor formali din antetul subprogramului.
Exemplu: Apelarea subprogramului pentru calcularea ariei unui dreptunghi
apeleazl arie( I ;5 ;suPrafa{a)
TEME
Apelarea subProgramelor
Formulali .o*.nril. de apel pentru ftecare dintre subprogramele definite
anterioare - Declararea subprogramelor'
r-
ir,i !;rli1!t**-ir,;.i i:.,82* 1S:; B .4 '.. ':4-i'
erinle:
hturile;
rul-
rame.
pem apelant, deoareceoarecare poate avea, la
nt P in{elegem ore acestuia sA executemul apelant p trebuie:relucririi;.i furnizeze rezultatul _
rul [stei de parametrili. Elementele comenzii
di-caamului.
40 ilustreazd doud cazuri particulare de apelare a subprogramelor.
-"-'--a.
Modulul M
M1
MI
, rl Module care se apeleazir (b) Modul care se apeleazit peunul pe celdlalt
Figura 4 0. Apetareasubprograme;t lT}J,lri parriculare
tip, numir
ptunghi ':ucluderea in lista parametr,or u onri ournar"d. parametri egal cu numdrur de rezultatemie [ansmise;
'mluderea in corpul subprogramului - in poziliadeterminata de fluxur controrurui _ amenzi care sd asigure comunicarea rezultatelor.comandi con{ine:
6,ntul rezervat returneazl,;finite in cadrul
irs: ds variabile care con{in valorile ce trebuie transmise.
ITTURNAREA VALORITOR CATRE PROCRAMUL APETANTs-bprogram trebuie si produci un r.^rrui - pri, prelucrarile efectuate asupra datelor de
-] *ot' un program apeleaz't rubprogrurii ut n.l cdnd are nevoie de acel rezultat.*--rea rezultatului (sau rezurtateror) ret . p.ogru*ur aperant necesita:
f--*" - -**": returneazd(rez.rez^,...,re2y) i
Modulul M
M ItrlM2E]
Exemplu: Returnarea valorii ariei dreptunghiului cdtre programul apelant
returneazl (A)
F. TRANSTERUT PARAMETRILOR LA APEL
Partea cea mai importantd din instruc[iunea de apelare a subprogramelor este
metrilor actuali. in scrierea ei, trebuie sI pornirn de la lista parametrilor formali qi sd
(l) corespondenla dintre parametrii formali gi parametrii actuali ca tip, numir qi ordine;
(2) modul de transmitere a parametrilor: prin valoare sau prin adresd.
Condilia (1) este legati de forma apelului. in apel apar variabile de program (simple
structurate),caracterizateaiciprinrume;itip'lJnparametruactualpoateaveaacelaqinparametrul formal corespunzitor sau poate avea un nurne diferit. In general, este
redenumirea parametrilor formali in lista parametrilor actuali doar acolo unde - altfel - s-ar
confuzii. Tipul de date al parametrului fonnal trebuie si fie identic sau mai cuprinzitor
tipul de date al parametrului actual corespunzitor. Rezultd de aici necesitatea pistrdrii ordi
nivelul ambelor liste. Revenind la subprogramul pentru determinarea ariei unui dreptunghi,
un exemplu gi doua contraexemple de apelare:
apeleazi arie( I 2 ;5 ;suprafala) apeleazl arie( I 2;suprati9- *j
Condilia (2) este legatd de apel. in lista parametrilor trebuie specificat tipul acestora:
- parametri care transmit subprogramului datele de intrare;
- parametri care transmit prograrnului apelant rezultatele'
Uneori, un acelagi parametru poate fi gi data de intrare, necesard subprogramului pentru
area prelucrdrilor, gi datd de ieqire, prin care si transmitd programului apelant rezultatul
Informa{ia depusd intr-un parametru-dati de iegire sau intr-un parametru-dati de in
gi variabilei-parametru actual - chiar daca ele au nume diferite. Pentru ca zona de memori
fie ,,vizibild'i (accesibil6), subprogramul trebuie s6 cunoasc[ adresa acestei zone. in acest
parametrul va fi transmis prin adresi, lucru semnalat - numai in lista parametrilor
printr-un cuvAnt rezevat, adresi, care precede numele parametrului in listd. Spunem cd tt
mitem acel parametru (datd de ieqire sau datl de intrare-iegire) prin adresi (sau prin referi
Un parametru care este datl de intrare pentru subprogram trebuie si fie accesibil
(este principala modalitate de primire a datelor de citre subprogram), dar trebuie sd fie
impotriva unor modificiri prin prelucrdrile din subprogram. Din aceastd cauzi, este
comunicim compilatorului cd trebuie si aloce acelei variabile dou[ locafii de memorie:
accesibili programului - definita in segmentul de date - pe care subprogramul nu o poate
difica, gi una accesibild subprogramului - definiti pe un nivel de stivi - pe care
poate modifica oricum. Spunem cd transmitem acel parametru (dati de intrare) prin
iegire trebuie si fie accesibild at6t pentru subprogram, cit qi pentru programul apelant ( Date de iegire:
poate prelua in vederea unor noi prelucrdri). Din aceastd cauzi, este necesar sd comunicim ct
pilatorului cd trebuie si aloce aceeaqi loca{ie de memorie atdt variabilei-parametru formal,
htmplu: Transmiterea parzu
&eprunghi:
prirnul pamm€
(are acelaqi nu
parametrul forcorespunzatorlo este dati de. este transmi!
valoare.
al doilnume I
formal
' este. mn:
incorecti a parat
: Calcularea lungmrun interval de numere rea.
lnaliza problemeiDate de intrare:
le intervalului (A,B e X
imea intervalului (lg e Rl
Re$onamentul problemeise verifici daci numerele A :
e r alori;se calculeaza lungimea intare foloseqte un submodul pe
Rtprezentarea algortimul
program lungime_intrariabile A,B,lg
Laput subprogram interscl
nriabile auxu(ex
i$w
nul apelant
pogramelor este
tilor formali qi sa
I ca tip, numir gi ordine;frese.fle de program (simple, poate avea acelaqi numegeneral, este
colo unde - altfel - s-ar
c sau mai cuprinzatorecesitatea pastririi ordiniia ariei unui dreptunghi, i
ificat tipul acestora:
bprogramului pentru e
ryelant rezultatulprelparametru-dati de int
t pogramul apelant (
Ecesar si comunicdm
bilei-parametru formal,lEn ca zona de memorieacestei zone. in acest
lista parametrilor
in listd. Spunem cirdresl (sau prin referirie sd fie accesibil
), dar hebuie si fieasti cauzi, este
i hca$i de memorie:pnogramul nu o poate
i - pe care sub
li de intrare) prin
Eremplu: Transmiterea parametrilor la apelul subprogramului pentru determinarea arieidreptunghi:
rpeleazil arie (Lu4g; H; adresa: suprafa(a
prirnul parametru adtual(are acelaqi nume ca qi
parametrul fonnalcorespunzdtor)o este datl de intrare,. este transmis prin
valoare.
al treilea parametru actual (are unnume diferit de cel al parametruluiformal corespunzitor)o este dati de ieqire,o transmis prin adres6.
al doilea parametru actual (are unnurne diferit de cel al parametruluiformal corespunzdtor)o este dati de intrare,o transmis prin valoare.
Imsmiterea incorectd a parametrilor la apel poate genera erori greu de depistat.
trcnrplu: Calcularea lungimii unui intervalFk un interval de numere reale [A,B]. Se cere sd se determine lungimea acestui interval.L -{naliza problemeiI Date de intrare:
capaele intervalului (A,B e R).r Due de ie$ire:iimeimea intervalului (lg e R).
I- Rr$onamentul problemeir ie terifici dacd numerele A qi B formeazd interval qi, dacl este cazul, se interschimbi aces-
e valori;o re calculeaza lungimea intervalului;o re folose$te un submodul pentru interschimbarea "capetelor" intervalului.
L Reprezentarea algortimului
program lungime_intervalwhbileA,B,lgircput subprogram interschimbare(adres[:X;adres[:Y) |
rrirbile auxil:teX
,e-ss ..
aiSl**4S{A)'{:"BS r -
XeYYeauxreturneazd (X;Y)
sf0rEit interschirnbare
citeqte A,Bdac[A>B atunciap ele azd intersc himb are(A; B )sf0rqit dacilg <- B-Ascrie [A, B] are lungimea lgsfirgit lungime interval
4. Verificarea algoritmuluiSi presupunern ci ruldm programul pentru valorile A=5, B=2
A B lg
dacl A>B atuncitp eleazd interschimbare(A;B)
sfdrgit dacl
5 )
2 5
tg e B-A 3
Rezultatele oblinute sunt corecte deoarece am transmis parametrii subprogramului
schimbare prin adresd (ambii sunt date de intrare-iegire).
Sd presupunem cd transmitem ace$ti parametri prin valoare, adica antetul subprogramului
I inceput subprogram interschimbare(X;Y) i
;;;;, ;;;;;;;;;; :;;.";;:. programul apelan nu "vede" zona de
morie in care subprogramul a efectuat interschimbarea Ei calculeazd lg e 2 - 5 .
Stiva ststern Segmentul de date
A B A B lg
citeqte A,B ! 2
daci A>B atunciapeleazi interschimbare(A;B)
sfirqit daci
5 )
2 5
lg e B-A -3scrie [A, B] are lungimea lg
terea parametrilor 1
i de ce un parameml n
icali antetul din dehnitir
incit si pune{i in evido
!,ARIABILE LOCALE SI
modul de program prel
subprogramelor indepenr
alocate pe nivelul de sti
d[r modulul apelant.
ca o variabili sa fie bi"niele;
upui de date pe care le va p
rn-qr.a flg memorie;
de via{a;
iul de vizibilitate.ecum, definirea variabil
lui lor.
zona de memorie a unet
(unde se afl6 locat
urmitoarele zone de n
de date;
I de stiv6;
ha-un registru dedicat al
durata de via{[ a unei vi
care variabila dispune de
(la sfhrqitul intena
deci ultima valoare a vr
varibilele se clasifica in:
bile statice: localiile tperioada execu{iei progr
dinamice: locat-i
n heap).
domeniul de vizibilitatri) in care variabila poi
rariabilele pot fi:ile locale (definite ir
globale (definite
k""^. ,, ",*-... -*'}1\{:Wffi;ffii **l:&$irt&i&Sr
p
TEA4E
Innsmiterea parametrilor prin adresi
'hr;rrca{i de ce un parametru transmis prin valoare nu poate indeplini rolul de data de ieqire.ffi'rcifica{i antetul din definilia subprogramelor din cadrul Temelor de Ia naoinite 7! ci Q.rr'er incdt,6p;;,ri;;;ilil,,#il;ffi;,HJ1ffi,'#"r de ra paginile 78 qi 82
c- VARIABILE I.OCALE ,SI VARIABIIE CLOBALE
H.:,f:*j":::i::Tili:yy11,g.,: o.*:,l,dennite ca variabire rocare Acest aspecrlki subprogramelor independen{a fala de modulur apelanr. variabilele ffi ffi;li::f:,: ir^.:y
pe nivelur de stiva sistem corespunzitor subprogramului; de aceea nu sunt vi_
t2-1
JI
1IJ
l
drn modulul apelant.kru ca o variabila sa fie bine definitd, trebuie specificate:rmmele;r:pul de date pe care le va pasfa;r zuna de memorie;r furata de via{a;r.n:meniul de vizibilitate.ffir'i acum' definirea variabilelor folosite intr-un program s-a limitat la precizareanumeluirtm.lui lor.
hn zona de memorie a.unei variabile in{elegem tipul de memorie intemi in care variabila
,,ffi::,T,lr^1:,:. ufle loca{ia atribuita ei). Griauiiele oricarui progr;*pot fi memorate inurmitoarele zone de memorie internd:dii antetul subprogramului
4elant nu ,.vede" zona de
wAlge2- 5.
rrrmentulde date;r r€mentul de stivd;r fte.up-ul;
segmentulde date
segmentulde stivd
heap
r reriabile statice: loca{iile de memorie se alocS.in momentul compilarii gi sunt disponibile!* ry::rdl execuliei programului (alocare starica in segmenrul de dare);r vrriabile dinamice: locagiile de memorie se alocd in momentul e*J.u1iei (alocare di-rciia heap).Ftm domeniul de vizibilitate al unei variabile in{elegern segmentul de program (blocul de
raport cu segmentul de program in care sunti) in care variabila poate fi utilizata. in
rariabilele pot fi:
,orriabile Iocale (definite in subprogramul apelat);rrryirbile globale (definite in programul apeiant).
"i-,.-.-i':97. '' ,*..;]: "*,):.
Exemplu: Variabile locale 9i globale
Fie o matrice pdtraticd cu elemente numere reale; se cere:
a) sd se tnloiuiascdfiecare element de pe diagonalaprincipald a.matricei cu suma
munielo, de pe linia corispunzdtoare (inclusiv elementul de pe diagonala);
b) sd sei!;r* indexu-l liniei pmtru care suma elementelor este minimd, precum ;iacestei sume.
1. Analiza Problemeio Date de intrare:
- numhrul de linii qi coloane (n),
- matricea (A).
o Date de iegire:
- valoarea celei mai mici sume (Val),
- indexul liniei corespunz6toare acestei sume (pMin)'
2. Modularizarea rezolvlriiVom folosi:
-unsubprogrampentrucalculareasumeielementelordepeliniilematriceiqtacestor sume pe diagonala principald;
- un subpiogrr* d. determinare a minimului unui vector cu k elemente qi a poziliei
3. Ra(ionamentul ProblemeiPasul 1. Se citesc datele de intrare: n, A'pasul 2. se apeleazi subprogramul de calculare a sumei pe linii qi inlocuire a
pe diagonala principali cu suma respectiva'' paiul 3. de depun elementele de pe diagonala principald a matricei intr-un
vector'
Pasul 4. se apeleazd subprogramul de determinare a elementului minim dintr-un vector
poziliei sale.^ Pasul 5. se afigeaz[ suma minim[ qi indexul liniei pe care se afl6 aceasta'
4. Reprezentarea programului cu subprograme
Smit diag
Loeput subprogram;urriabile i\al <- V(1)pNlrne 1
Filtru i:2la k exeudac[ V(i) < Val
etunciVal <- V(i)pMin e i
sfliryit dacirEryit pentrurcturneazl pMin
Gryit pozMinimtctte n Aqdeazi diag(A)
FEu i:l la n execul
\-tit eA(i,i)Gqit pentru
ldeazi pozMinim (\nieVal,pMin
sumaMinimi
6aeliza programuluacest progft
de parametri a suJ
atat datele de intcalcularea sumelor
a fost modificati pisi prin adresi r
: numIrul de linii d
sd in lista de p,a
i pozMin da
i minimu[uf. in care
u pozilia acestuia;
wiabllasuma din sut
Aceastd variabila
valoarea sumei
subprogramuluip
&laratd in program'
ft afisata;
iabilele care apar ie care apar in li
nceput program
variabile n, A, Val,PMin,V,i llinceput subprogram diag(adresa:mat)
variabile suma,ij llpentru i=l la n executfl
suma e mat(i,l)pentru j:2 la n executl
suma (- suma+mat(ij)
sfffrqit Pentrumat(i,i) e suma
sfffrqit pentru
returneaz[ mat
nlmaglobale
locale
!ews
sfhrqit diaginceput subprogram pozMinim(V;k; adresa:pMin)
a matricei cu sumanlil:'aima, precum qi
ile matricei qi
mente qi a poziliei
nlocuire a elementului
i intr-un vector.
rinim dintr-un vector
Eeasta.
variabile iVal e V(t)pMin e Ipentru 1:2lakexecutl
dacl V(i) < Val
atunciVal e V(i)pMin <- i
sf0rqit daclsflirsit pentrureturneazi pMin
rfiirgit pozMinimciteste n,Arpeleazi diag(A)pentru i=l la n executi\'(i)eA(i,i)
ffir;it pentruapeleazl pozMinim (V;n;pMin)rrie Val,pMin
ffirsit surnaMinimd
Iocale
' ista de parametri a subprogramului dr'ag constd dintr-un singur element: o matrice. Aceastatprrn atdt datele de intrare (elementele matricei trebuie transmise subprogramului pentru are calcularea sumelor), cdt qi datele de ieqire pentru subprogram (matricea este returnatd:: a fost modificatd prin depunerea sumelor pe diagonala principali). ca urmare, matricea
l Analiza programuluilmmindnd acest program, observdm:
m.rsmisd prin adresd nu prin valoare;r I = numdrul de linii din matrice este o variabili global6; de aceea aceastl variabila nu tre-
u=rsmisd in lista de parametri a subprogramelor. Totugi, z a fost transmis ca datd de intrareramt]lui pozMin deoarece am folosit forma generald a subprogramului de determinare aminimnlui, in care trebuie sI apari numarul de elemente pentru care se calculeazl mi-
s; poziqia acestuia;r r'tnabila sa ma din subprogramul diag estenecesari numai pentru prelucrdrile din acest sub-@- Aceastl variabili a fost declarati in subprogram qi este variabild locali pentru acesta;r ruci valoarea sumei minime nu trebuia afigatd, atunci variabila Valputea fi declaratd inmBrJ subprogtamului pozMin (deci ar fi fost o variabih locald pentru el, la fel ca variabila i).
,rclaratd in programul principal (apelant) ca variabild globald, valoarea ei s-a pistrat gi a! afiSati;rnriabilele care apar in lista parametrilor actuali trebuie declarate in programul apelant; darmr,eie care apar in lista parametrilor formali nu trebuie declarate. Totuqi, in programul
Msl
slmxaMinitila variabila /, paramehu formal
programul apelant (principal). Motivul: ea
subprogratnului pozM i rt n i nr.
pentru subprogramul pozMinim a
este folositi gi ca parametru actual
tariabile locale qi variabile g
Care dintre afinnaliile de mai
a) nu este pennis[ utilizarea
b) nu este recomandabila util
c) variabilele globale pot fi fd) variabilele globale pot fi f:) datele de intrare ale subpr
neguli de lucru cu subprognCare dintre afirma(iile de mar
a) fie Sl un subprogram din
S i: atunci 52 nu poate confin
bl constantele utilizate intr-
I lor de vizibilitate ca si
intr-un subprogram putem
intr-un program cu subPrr
numai dacd variabila este
rectarea erorilor in subprFie programul de mai jos:
Lceput program test2
reriabile a, b, c
inceput subprogram Sl(x-variabile a, yinceput subprogram S2(t
variabile b
returneazl y
rlirqit 53
returneazi w
fir$it Slhceput subprogram 53 (l
returneazi y
6rtit 53
firsit test
fost declaratd
pentru apel
#-TrNg"-_l. Variabile locale gi variabile globale
Fie programul de mai jos:
inceput program test
variabile a, b, c
inccput subprogram Sl (adresa Y)
returneazl y
sfffrqit S1
inceput subprogram 52 (x, adresa t)
variabile a, yinceput sutrprogram 53 (adresa Y)
variabile b
returneaz[ y
sf6rqit 53
returneazl t
sf0rgit 52
presrtptmem cd plasdm nrmdtoarele instruc{iuni in blocal de instrucliuni exeaiabile al
progro*iloi menlionat. Precizali care dintre instrucliuni vafi corect/incorect plasatd ;i de
a) in subprogramul 53, instruc{iunea a e b
b) in programul test, instrucliunea returneazl S3(3'14)
c) in programul test, instruc[iunea a <- 52(10)
d) in subprogramul S1, apeleazl S3(d)
e) in subprogramul 51, c <- S2(c)
f) in programul test, instrucliunea apeleazn Sl(z)
g) in programul test, instruc{iunea apeleaz[ S1(S2(3)
h) in programul test, instrucliunea apeleazl S2(c)
i) in subprogramul 52, apeleazl 51(y)
j) in subprogramul Sl, Y <- S2(c)
aVinim a
etru actual
fost declaratd
pentru ape
rc{iuni exea$abile allncorect plasatd ;i de
f'eriabile locale Ei variabile globalecare dintre afinnaqiile de mai jos este corect[? corecra{i afima{iile greqite:rl nu este permisd utilizarea variabilelor globale in interiorul unui subprogram;bl nu este recomandabild utilizarea variabilelor globale in interiorul unui subprogram;c-l variabilele globale pot fi folosite exclusiv pentru citirea datelor de intrare in program;Cl variabilele globale pot fi folosite exclusiv pentru citirea datelor de intrare in zubprogram;el datele de intrare ale subprogramelor nu pot fi transmise decAt prin variabile globale.
fquli de lucru cu subprogramelecare dintre afirma{iile de mai jos este corecta/greqitd;justificafi raspunsul:at fie Sl un subprogram din programul principal P qi 52 un subprogram definit in interiorul
l$i: atunci 52 nu poate confine la rdndul sdu alt subprogram;hl constantele utilizate intr-un program cu subprograme unneazi aceleagi reguli privindnpriul lor de vizibilitate ca gi variabilele;
I intr-un subprogram putem declara s,i o variabild gi o constantd sub acela;i nume;dt intr-un program cu subprogtame putem declara qi o variabila gi o constantd sub acelaqi
numai daci variabila este globald iar constanta este locald.
rea erorilor in subprogrameFle programul de maijos:
hput program test2rariabile a, b, cLtrput subprogram S1(x, adresa w)rariabile a, yhceput subprogram S2(adresa y)
variabile b
returneazi y
firqit 53
rcturneazl w
&$itSlLcput subprogram 53 (adresa y)
rcfumeazl y
ft$it 53
#*pgr.;q;*ktisxryv'.
Presupunem cd plasdnt urmdtoarele instrucliuni in blocul de fustrucliuni executabile al
pr"ogramrilui menlionat. Precizali care dintre instrucliuni va fi corect/incorect plasatd ;i t
cu sufrageria: este
IaT=latimeasululuiiniltimea camerei sul
sufragerie. Analog c
ie. in final, calculir
mentul problell. Se citesc datele dr
2. Se calculeazi P €3. Se calculeazi P +
{. Se calculeaz[ P*5. Se calculeazd M6. Se afiqeazd NS, )
rea algoritr
Un progam frtapetl
SI,52,D1,D2,B]
SI.S2,DI,D2,BI,Bl'(sl + s2)
PT
:.(Dl +D2)
PT<- m+H
:*fBl + 82)PT
+ m*Hts\S+ND+NB
NSND,NB,NR
!J,was1,s2,Dl,DeB
subprogram cal
P.m
3'tL+l)PTm*H
Ncalcul
SI,S2,D1,D2,BI.calcul(S l;S2:N
(atintrie la domeniul de vizibilitate al variabilelor):
a) in subprogramul 32, instrucliunea a (- bfj in progrumul test, instruc{iunea apeleazilSzQ'la)
c) in programul test, instrucliunea a <- 51(10)
d) in subprogramul 53, apeleaz[ 52(3'14)
e) in subprogramul 53, c +- Sl(c)q i, p.ogtu*ul test, instruc(iunea apeleazn S3(a)
g) in programul test, instrucliunea apeleazl S1(S3(z))
[i in ptogru*ul test, instrucliunea apeleazn Sl(c)
lj in tutptogramul Sl, instrucliunea apeleazi S3(y)
jj in subprogramul 52, instrucfiunea y <- S1(c)
lf.JJ9ATITTAPETAREA APARTAMENTU LU I
Sd se calaileze suprafa;a de tapet necesard penlru renovarea unei sufragerii, a unui
tor Si a unei bttcdtdrii (toate deformd paralelipipedicd)'
1. Analiza Problemeir Date de intrare:
- lungimile perelilor sufrageriei (S1, S2), dormitorului (D1, D2) gi ai bucatariei (81,
- inallimea perefilor (H),
- 161imea sulului de taPet (T).
o Datc de iegire:
- ri..,1 ir.lri ,le uretri de tapet necesari pentru sufragerie (NS), dormitor (ND), bucdtlrie
^- xrir^ tot.,' (NR).
o L'^, titrr i r.'lalii importante
tL lungimea
camerei
Figura 41. Acoperirea peretilor camerei cu tapet
lII = liqimea T
camerei H =
i$w
lstltc lrni ex e cut abi I e altect/incorect plasatd ;i de
rrei safragerii, a unui
l) 9i ai bucatariei (B1, B2),
mitor (ND), bucdtlrie (
T = ldfimea tapetul
H = indllimea
r camerei cu tapet
Jxcepem cu sufrageria: este suficient sa calculam p = 2*(Sl+S2) = perimetrul camerei qi sa-lulrmlaT=lalimeasululuidetapetpentruaaflam= PIT=catebucAtidetapetdelungimeI cu in61{imea camerei sunt necesare. Apoi, NS = m * H = numdrul de metri de tapet nece-fstr_tlu:u{ag-eri1 Analog oblinem numdrul de metri de tapet necesari pentru dormitor qi pen-uratarie. in final, calculdm numdrul total NR = NS + ND + NB.
L Ra$onamentul problemeiluul l. Se citesc datele de intrare: Sl, 52, Dl,D2,Bl,82, H, T.hsul 2. Se calculeaziPe2 * (Sl + S2); mep/T; NS Fm * H.ltul 3. Se calculeaza P <- 2 * (Dt + D2); m +- p/ T; ND <- m * H.ttsuf 4. Se calculeaza P <* 2 * (Bl + B2); m € p / T; NB +. m * H.luul 5. Se calculeazd NR e NS + ND + NB.hul6. Se afiqeazl NS, ND, NB, NR.
}. Reprezentarea algoritmului
heput tapetlrrriabile S1,52,Dl,D2,Bl,B2,H,T,NS,ND,M,NR imcftste S 1,S2,D 1,D2,B l,B2,H,TFe 2*(Sl + 52)m +- P/T
-!uS <- m*HF * 2*(Dl +D2)m +- P/T!D <- m*Ht- 2*(Bl +82)m +- P/T
ffi+m*H<_ NS+ND+NB
Efo NS,ND,NB,NR
tapet2
rhbile S 1,S2,D l,D2,B l,B2,H,T,NS,ND,NB,NRt subprogram calcul(L;l;adresa:N)
Bm
e m*HN
calcul
S I,S2,DI,D2,B I,B2,H,Tcalcul(S l;S2;NS)
@m*
apeleazl calcul(D1 ;D2;ND)ap eleazl calcul(B 1 ;B2 ;NB)NR <_ NS+ND+NBscrie NX,NS,ND,NBsf0rqit tapet2
Figura 42. Programul tapet2 - fluxul de execu{ie
in figura 42 este evidenliat fluxul de execu{ie a programului:
( I ) controlul este transferat subprogramului;
(2) se executd instruc{iunile subprogramului in acelaEi mod in care s-ar executa dacd
vorba de un program propriu-zis;
(3) dupA parcurgerea intregului flux de execulie al subprogramului, controlul (9i rezul
se transferl programului apelant; execu{ia acestuia continuA cu instrucliuneaaflatd imediat
instrucliunea care apeleaza subprogramul;
(4) f,recare apel determini reluarea fluxului (l), (2), (3).
r_{Euf.-1. Fluxul de execulie
Reprezenta{i stiva sistem corespunzdtor fluxului de execufie program - subprogram
figtra42.
2. Rezolvarea problemelor cu ajutorul subprogramelor
Scrie[i cdte un program cu subprograme pentru rezolvarea fiecdreia dintre urmitoarele
a) Sd se determine num6ru1p de numere prime dinh-un gir de n numere naturale i
la tastaturd. Si se verifice dacd p este numdr prim qi sd se afiEeze un mesaj
Eremplu: pentru n = 5. q
efireaza mesajul: 3 ate m
Si se calculeze numerele
nmir,,mistico' dacl sumi
r3 l3 1).
Si se calculeze divizorii 1
Si se calculeze numerele
numdr perfect dacd suma
un numdr perfect deoarec
FreMomatricecunliniipe liniile pare.
M o matrice cu n linii I
:t:rr comun dintre max Si n
nprezinta cea mai mici v
IPROIECT TN IProiectare (stabilin
U- Organiza(i unitdqile de pde analizit.
Completali documentagii
acestea-
AREA SUT
SUBPROGRAME iN tIfmbajul Pascal se utilize
pr ezenta aserndniril e g
ui de calculare:
Definitie)
m subprogram care prim
$ numar una.
nume(par_formal,
inceput tapet2
citeqte S 1,52,D 1,D2,B 1,B2,H,7
apeleazd calcul (S1; 32; NS)
apeleazi calcul (Dl; D2;ND)
apeleazd calcul (B1; 82; NB)
NR<_NS+ND+NB
scrie NR, NS, ND, NB
sfdrqit tapet2
inceput subprogram calcul(L; 1; adresa: N)P<-2*(L+l)
(2) m+-PlTN<-m*Hreturneazi (N)
sfirqit calcul
Exemplu: pentru n = 5, qirul de numere este:afiqeazd mesajul: 3 este numdr prim.
t' ) sa se c,alciuleze numerele ,,mistice" mai mici dec6t un numdr z E,it/ dat (x e ,/r/ se nume$tenumdr ,,misti co' dacd suma cifreror care il compun este egala cu produsul lor; exernplu: 22,r3131).
cl Si se calculeze divizorii primi ai unui numlr n e N dat.d si se calculeze numerele perfecte mai mici dec6t un numdr n e N dat (x e ,rr/ se numeqtenumar perfect daci suma divizorilor sai primi este egar[ .u p.oa*uiror; exemplu: 6 esteun numdr perfect deoarece l+2+3=2*3).cl Fie M o matrice cu r linii gi rz coloane. Sd se afigeze in ordine crescitoare elementele depe liniile pare.
ffi Fie M o matrice cu n linii qi m coloane. Pentru fiecare linie, sd se afigeze cel mai mare divi-Dr comun dintre max ;i min, unde max reprezintd cea mai mare valoare de pe linie iar minreprezinta cea mai mic6 valoare de pe linie.
ytp_8Qrfg{f-i,:icHr&{.eAJy,f ;AViA-EFietr*rqf-----------,
frepa: Proiectare (stabilirea unitdlilor de program)Crrinqe:
n- organiza{i unitilile de program necesare rezolvdrii modulare a prelucrarilor identificate@ de analbd.
;3T[i1'n documentafia proiectului cu descrierea modulelor gi reprezentarea relaflilor
s-ar executa daci
ontolul (qirezul TPTEMENTAREA SU BPROGRAMETOR iT.{ LIA,I BN'ELE DE PROG RAMARE
25, 3, 42, 29, 7. Se detennini p = 3 qi se
rbprogram calculrdresa: N)2*(L+l),P/Tm*Hneazd (N)lcul
nea aflatd imediat
SUBPROGRAME iN LIMBA'UL PASCAL: FUNCIII,I PROCEDURIlhbajul Pascal se utilizeazi doud categorii de subprograme:
tucdi,
u prezenta asemdnirile gi deosebirile dinke aceste dour categorii de subprograme cu aju_pngramului de calculare a ariei unui dreptunghimr - subprogram
e unnitoarele #,TH,{H care primeqte oricdte valori ca date de inrrare dar rettmeazir ca reztiltat ol
: naturale i:t
formal,,...,par_formal, :tipu): tip; I
l mesal corespu
@r:
function A (L:Real; l:Real): Real;procedure arie(L:Real;
l:Real; var A: Real); eventual
v:=A (Lung;H);
&
$
&
$
$
&
a
- x#fi":x:= nume(par actual, ;par_actualr;. . . ;par_actual*);
sau:
write(nume(par_actual, ;par_ actualr;. . .;par _actual*))i
tri Defini{ie Procedurl
= un subprogram care primeEte oricdte valori ca date de intrare qi poate refurna ca
o valoare, rnai multe valori sau niciuna (poate efectua o prelucrare care si nu aibi ca
oblinerea unei valori).Declarare:
procedurenume([uar]par-formal,,...,par-formal,:tip,;...;lvarlpar-fonnal,,...,
par_formal*:tipu);
Apelare:
nume(par_actual, ;par-actual, ;. . . ;par-actual*) ;
Observaliio Pentru identificarea fiecdrui tip de subprogram se utilizeazd cuvinte rezervate di
function gi respectiv procedure.
o Declaralia var este indus[ intreparanteze drepte deoarece este oplionald.
n;sra de parametri forma
prin adresi egal ct
Lista de pararnetri forsu prin referinld (dac
aprinrumele fur
iunctia are tip" (si anur
ilu blocul de instructiuni
aland ca membru su
fiinctia se apeleaza Prinfrmedura se apeleazi P
Func{ii qi proci
dat nutndrul real a 5
Analiza problemei
Due de intrare:
ta) si exponentul (n)
de iesire:
a"-
llodularizarea rezolvi
utiliza procedura Pti inu-o func(ie gi reciPn
valida datele de intr:
I nu va f,r tratat separatl).
Re$onamentul Probkl. Se citesc datele I
flml2. Dacda = 0 atunt
3.Daca n=0atunf,lsul 1. nn +- n; daci m
trsul 5. i <- 1.
hsul6.r€rxasii<-hsul7. Dacd i ( nn atur
[bdS.Dacdn<0atun'llsul9. Se scrie r.
{ Implementarea algor
lrrgram ridicarelaPutetrer a,r:real;
n:integer;procedure putere 1 (baza
{ rez - parametru transtr
var e,i:integer;
M.{11 lMttffi:"t sffils,jiftw
lii'
Procedurl
tae Si poate returna ca
zi cuvinte rczervate
b qpfionald.
bcrare care s6 nu aibi carrtocedura se apeleazi prin nume Ei listade parametri actuali intr-o instruc{iune de si,e
; [xr] par_formalr,. ..,
lr:nrplu: Punc{ii gi proceduri in limbajul pascalffiwd dat rutnrirul real a ;i numdrul intreg n, sd se calculeze a,,.LAnaliza problemeio Date de intrare:b?" (a) 9i exponentul (r).hme de iesire:
laharea a,t.
L llodularizarca rezolvlrii
tesi este var;
I*m utiliza procedura puterel qi funclia putere2 (pentru a ilustra transfonnarean intr-o func{ie gi reciproc).
n necesitd utilizarea
Ittm valida datele de itttrare, tratdnd cazul 00 intr-un mod particular: 00=0 (cazulbazei egaleI lr va fi tratat separat!).
I Re$onamentul problemeifhsl l. Se citesc datele de intrare: a, n.IhmI 2. Daca a= 0 atunci r G 0 qi salt la pasul g.Ilml3. Daca n = 0 atunci r <- I gi salt la pasul 9lhmt 4. nn <- n; daci nn < 0 atunci nn e _ nn
rreazi folosite in
tbul6.r€-r*aqii+-i+lIbul7. Daca i i nn atunci se reia pasul6.lLsI S. Dacd n < 0 atunci r *- ll rtbrt 9. Se scrie r.
1lr*.ltarea algoritmului in limbajul pascal
* -*tunc{ia
are tip" (gi anurne un tip sirnplu, nestructurat);
*o]::ltt|,.r:t,*l:ecutabile aifuncqiei trebuie sa existe celpu{in o instrucfiune de&mure ai,dnd ca membru st6ng numele funcfiei. - r-'i--- - '^'errsv!rv
lStjll.:: luelealaprin nume qi lista.de pararnetri acuali in interiorul unei expresii.
unel pro-
Fogram ridicarelaputere;Itr a,r:real;
n:integer;procedure puterel (baza:real; expo:integer; var rez:real);{ rez - parametru transmis prin adresd }r:r e,i:integer;
frre arie(L:Real;
I verA: Real); eventual
begin
if (baza = 0.0) then rez:=0.0
else
if (expo=0) then rez:=l.0else
beginrez:=baza;
ifexpo<0 then e:=-expo else e:=expo;for i::2 to e do rez:=rezxbaza;
if expo<0 then rez:=lhez;end;
end; {procedura puterel }functio n puter e2(baza: real; expo :integer) : real; { functie de tip real }var e,i:integer;
tez:real;beginif (baza: 0.0) then putere2:=0.0
else
if (expo=0) then putere2:=I.0else
begin
rez:= baza;if expo<O then e:=-expo else e::expo;for i:=2 to e do rez:=rez*baza;
if expo<0 then rez::lhez;puterc2:= rez;
end;
end; {functia putere2}
begin {program principal}write('a ='); readln(a);write('n ='); readln(n);puterel(a,n,r);
write('Calculul puterii cu procedura puterel: ');writeln(a:4:2,' la puterea',L:2,' este',r: 8 :3);write('Calculul puterii cu functia putere2:');writeln(a:4:2,'la puterea',n:2,' este',putere2(a,n):8:3)
end.
5. Analiza programuluiIdentificatorul putere2 nu desemneazd o va'iabild (avdnd acelaqi nume qi tip ca qi
ci este numele func{iei qi acestuia i se atribuie valoarea variabilei rez. Acesta este motivultru care, in blocul de instruc(iuni executabile al funcliei care nu se apeleazi pe ea inumele func{iei nu poate apitreain membrul drept al unei atribuiri: este necesard utilizarea u
locale. auxiliarplu de sub
defun4ie^E
trl):real;
t
.0) then put
then pul
cxpo<0 then e=i=2 to e do re
qpo<0 then rez:
:: reza
{fimctia putere2l
procedurl la frurmitoan
Verificare (
leranta then
roept=rue.hcrcep:{alse;
teTlprl unuiparametr
0'ptfun
$*@
tEau
Lle locale, auxiliare. Tabelul de mai jos prezinta funclllle putere2 qi putere3 ca exemplu
mntraexemplu de subprograme de tip funclie.
TEMA
hprocedurfl la funcfiei urmltoarea procedurd intr-o func{ie:
Igrl unui parametru formal nu poate fi un tip anonlm:
i nume gi tip ca qi
zAcesta este motivulse apeleazl pe ea
ste necesard utllizar ea
@*r
function putere3 (baza: real,
expo:integer):real;var e,i:integer;
begin
if (baza=O.0) then putere3:=0.0
else
if (expo:O) then putere3:=1.0
else
beginputere3'.=baza;
if expo<0 then e:-expo else e:= expo;
for i:=2 to e do iutere3:= putere3*baza
if expo<O then putere3 := l/putere3;
end
end; {functia putere3}
if tbaza=0.0) then putere2:=0.0
lkeif (expo:O) then putere2::I.0cke
bcgin
ru=baza;if expo<0 then e:=-expo else e:=expo;
hr i:=2 to e do rez:=rez*baza;
il orpo<0 then rez'.=lhez;pttere2:: rez;
od;{functia putere2}
ure Verifi care (err,toleranta : real; var accep: boolean);
L#rf en<toleranta then
rept:=truedierept:=false;
# TEME
Proceduri sau funcfii?
2.
1. Fie doul numere ra{ionale rl qi 12; se cere si se afiqeze: suma, produsul qi cdtul celornumere. Scrieli ;i analizali cele doud solulii posibile: un program cu subprograme de
funclie, respectiv cu subprograme de tip procedurd (pentrufiecare operalie).
Fie M o matrice patratici de ordin n > I cu elemente numere naturale; se cere sd se afinumerele prirne (qi pozilia lor in matrice) aflate ca valoare intre cel mai mic numdr de
diagonala principali qi cel mai mare numir de pe diagonala secundari. Care dintrepoate fi transformat numai intr-o funcfie/numai intr-o procedurd/fie tntr-o procedurd/fie
funclie. Argumentali.
3. Fie vectorul V cu n > I componente, numere naturale; se cere sa se afi;eze:a) numere pare care se gasesc pe pozilii de index impar in V;b) numerele prime din V;c) cifrele numdrului de pe ultima pozilie din vector, in ordine inversi.
Domeniul de vizibilitate al variabilelor
4. Examinali programul Pascal de mai jos din punct de vedere al domeniului de vizibilitatevariabilelor Completali (dupd modelul oferit pe pima linie) toate liniile din tabelalfurni:indicdnd tipul de date al variabilelor (pin iniyiala tipului: I pentru Intege4 R pentruetc.) Si valorile constanteloti in conformitate at cerinlele .fiecfuui bloc de
executabile. Dacd un idenfficator nu este definit intr-un anuruit bloc, atunci intro&tcelicelula respectivd codul N/A.
program domeniu;
const i=10;var a,b:integer;
c,fireal;d,e:char;
g:boolean;procedure P I (a,e:real; c:boolean);
const k:2.1;var f:boolean;
begin {Pl}
end; {Pl }procedure P2(c:integer; g:real);
const b=10;var a:boolean;
e:char;procedure P3(a:char; b:real);
const d=3.14;
var i,f:integer;begin {P3}
end; {P3}procedure P4(a:real);
const e:'a';var g,k:integer;begin {P4}
end; {P4}begin {P2}
end; {P2}procedure P5(e,g: integt
const k=40;uar i:real;begin {P5}
end; {P5}hegin {prograrn principal
crd.
pilnc,
I" SUBPROGRAME iN I
fl:mbajul C/C++ admite r
l principal este o funD:clarare:
tip nume(tipl [&
Declaralia & este inclusd iApelare
v=nume(par_actualL.
*trw
IBm4 produsul si c6tul celort Fogram cu subprograme deufrecare operalie).
:re naturale; se cere sd se afire intre cel mai mic numdr derle secundari. Care dintrefu d/fi e in tr- o p ro c e durti/fi e
de sd se afiSeze:
in 1';
rdine inversi.
e al domenitrlui de vizibilitate) nate liniile din tabelal furni:i: I pentru Integef R pentrule fiecanti bloc de instntctimmit bloc, atunci intro&tcefi
const d=3.14;
var i,f:integer;begin {P3}
end; {P3}procedure P4(a:real);
const e='a';var g,k:integer;
begin {P4}
l
end; {P4}begin {P2}
end; {P2}procedure P5(e,g: integer; d:boolean);
const k=40;rar i:real;begin {P5}
end; {P5}@in {program principal}
(rd.
k
N/A
L SUBPRoGRAME iNt t-lt{gnful c/c++
-;nbajul C/C++ admite un singur tip de subprograme: subprograme de tip funcfie (insuqi
principal este o func{ie cu un nume rezernat: main).)eclarare:
tip nume(tipl [&] par_f"*rl,*,,,p,, t&l p"-f**t} --lI
):clarafia & este inclusi intre paranteze drepte deoarece este op{ional6.
qg= __v=nume(par_actual,,..., par_actualr)i
l ruu
.tTg?::1!--:l*1"!-in limbajul CIC++ existd doud categorii de func{ii:
. functii,,cu tip" - acestea transmit catre programul apelant o valoare atribuit[ nu
func{iei; dac[ tipul expresiei din instrucliuneareturn expresle;
nu este identic cu cel al funcliei, atunci se face automat conversia. O astfel de func(ie se
leazd intr-o exPresie;
o functii ,,frrdtip" -acestea nu transmit cdtre programul apelantdcio valoare; iu acest caz' t
I
IL_*
j
I1
"-,_*-,,-,J
t Implementarea algoritmt
I. Progiam'cu funclie
letqrneazi o valor
ib.h>io.h>
p.r(int a, int b)
S:
a-b)%Z;
S;)
main (void)a-b,S;
<'Da1i intregii a qi b";>a>>b;
a,b);
r S : 0) cout<<"Suma celt
este para";
dse cout<<"Suma celor do
i.rrpara";)
funcfiei este'void, iezultatele prelucr[rilor sunt depuse in variabile globale (Ei astfel progr'
apelant ulre acces la ele) iar r.uenireu in programul apelant se face fie la intdlnirea instruc{iunii
return;
fie dupa executarea tuturor instrucliunilor din corpul func{iei. O astfel de funclie se
printr-o instruc{iune de sine stitdtoare.
in descrierea qi apelul funcliilor trebuie respectate urmdtoarele reguli:
o numele funcliei este precedat de tipul funcliei;
o numele fiecbrui parametru formal este precedat de tipul parametrului;
o transmiterea parametrilor prin adresd, este precizatd prin operatorul & care precede
parametrului formal, de exemPlu:
double arie(doutrle L, double 1, double & A));
o in blocul de instrucliuni al func{iei existd o instrucliune speciald pentru retumarea rezultatu
return expresie; sau return;
return A;
Exemplul 1: verificarea pariti{ii sumei a dou6 numere intregi.
1. Analiza problemeio Date de intrare:
numerele intregi a, b.
r Date de ieEire:
un mesaj care indica dacd suma celor doud numere este par6 sau nu.
2. Modularizarea rezolvdrii
Varianta IVom folosi o func{ie care returnea zd o valoarc (restul imparlirii sumei la 2)'
Varianta IIVom folosi o funclie care nu returneazi nicio valoare (variabila in care se calculeazd
este declaratd variabild globala):
3. Ra{ionamentul ProblemeiPasul 1. Se citesc datele de intrare: a, b'
kemplul 2: Interschimbah ioarte multe prelucri'n. e
, fie acestea a gi b. Die celor doud loca{ii de rprin interschimbare. SubP
i tocalii de memorie.
Pasul 2. Se apeleazd subprogramul de determinare a paritalii sumei celor doui numere'
Pasul 3. Dacd restul returnat de subprogram este zero atunci se afiqeaza mesajul "Suma
pard", altfel se afiEeazd mesajul "Suma este impard"'
: * *s:-'#diui;:ffift*g';
#include<stdlib.h>
#include<conio.h>
void interschimb (int
{int aux;
anx:x; x=y; 5aux;]void main (void)
{int a,b;
cout(( "se introduc
ll arelocinterschimbr
interschimb (q b):
cout << "se afiqeaz
i cout<<a<("u('it
rlant o valoare atribuita nu
m-ersia. O astfel de functie se
bnt nicio valoare; in acest caz, tri&rle giobale (gi astfelne fie la intilnirea instructiunii
flli. O astfel de func{ie se apel
rele reeuli:
prametruiui;upcr-dtorul & care precede nu
ride pentru returnarea rezu
tre,i
ra sau nu
iffi sumei la 2).
iabila in care se calculeazi resfiil
qii sumei celor doud numere.i se afiseaza mesajul "Suma este
l- lmplementarea algoritmului
tib.h>ude<conio.h>
padint a, int b)
&r S;
$.e a+b)%2;
mturn S;)
main (void)
ifot a,b,S;qt<<"Dati intregii a qi b";th>>a>>b;$=a(a,b);il S:0) cout<<"Suma celor doua
re este para";tbe cout<<"Suma celor doua numere
:-rrpara",)
hemplul 2: Interschimbarea a doul valori a gi 6.
h foarte multe prelucrdri, este necesard interschimbarea valorilor re{inute in doud localii de
ie, fie acestea a gi 6. De aceea, este util sa realizdm un subprogram care s6 primeascd
rie celor doud loca{ii de memorie qi sd transmit6 prograrnului principal noile valori rezul-
rin interschimbare. Subprogramul necesiti doi parametri care reprezintd adresele celor
finclude<stdlib.h>#include<conio.h>
void interschimb (int &x, int &y)
{int aux;
aux=x; x=y; 5aux;)void main (void)
{int a,b;
cout<< "se introduc valorile";are loc interschimbarea valorilorinterschimb (a, b);cout << "se afiqeazi noile valori";cout<<a<<""<<b;)
:*r*{s.3es J l-ffi|e3slii4$r;i_ri&*t{;E ; I
#include<conio.h>int S;
void par (int a, int b)
{S:(a+b)%2;}
void main (void)
{int a,b;
cout<<"Se introduc a qi b";cin>>P>b;par(a,b);
if (S:=0) cout<<"Suma celor doua numere
este para";
else cout<<"Suma celor doua numere este
impara";)
# TTME
Utilizarea subprogramelor in limbajul CIC++
l. Fie dou[ numere ra{ionale rl qi 12; se cere sa se afiqeze: suma, produsul gi cdtul celornumere. Scrie{i Ei analizatiunprogram cu subprograme (pentru fiecare opera{ie cdte unprogram).
2. Fie M o matrice pitratici de ordin n > I cu elemente numere naturale; se cere si se anumerele prime (qi pozilia lor in matrice) aflate in intervalul dintre cel mai rnic numdr dediagonala principala qi cel mai mare numdr de pe diagonala secundara. Realizali uncu subprograme. Descrie{i qi argumenta{i tipul fiecarui subprogram.
3. Examina{i prograrnul CIC++ de mai jos din punct de vedere al dorneniului de vizibilitatevariabilelor.
#includxiostream.h>char a,b; int c; float d;
void Pl (float y)
{float b;
void P2(char y)
{._-}char Fl(int x)
{float a; char y;Pl(y);return y;)void main (void)
Presupunem ci plasdm urmdtoarele instruc{iuni in blocul de instruc{iuni executabile alprogramului menfionat. Indicayi care dintre instrucliuni vaJi corect/incorect plasatd Si de ce:
a) in program,
b) in subprogramulFl,c) in subprogramul P2,
d) in program,
e) in subprogramulPl,
c. ExERCtTtr cu SUBPRoGRAME
1. Codifica{i in limbajul de programare studiat urmitoarele secvente gi completa{i tabelulvariafie pentru a determina valoarea variabilelor pe parcursul execu{iei.
P2(Fl(c));Pl(a);Pl(d);a=Fl(c);P2(b).
inceput programvariabile a,b,c,d,r
inceput subprogvariabile a
ael; be7; x<-;returneazl z,u,r
sfArqit Pl;3g-ut;be5;c(-lapeleazl Pl(qb;rscrie a,b,c,d,e
apeleazi Pl(l;2:scrie a,b,c,d,e
slhrqit calcul
inceput programvariable x,yinceput subprog
variabile i,s
se0;pcntrui=llaYs e s+i+xx€-lsfArqit pentruFlessf0rgit Flxe0;y<-lcit timp y +2scrie x,yx e x-Fl(y);] e y+l;sfffrqit cfrt timP
sffirqit opuse
Lctput program ve
inceput subprqdacl vl>v2
atunciscrie vl,v2v3 e v3+l
altfelscrie v2,vl
h*i$ffi$r
&srl qi cdtul celorze opera{ie cite un
rle; se cere si se
od mai mic numir de
ri- Realiza{i un
roiului de vizibilitate
liuni executabile alsut plasatd Si de ce:
inceput program calculvariabile a,b,c,d,e
inceput subprogram Pl(x;y; adresa:z;u;v)
variabile a
ael; be7; xey; zea+x; v?z+breturneazl z,u,v
sf0rqit Pl;36d; be5i c?l2;deb; et-capeleazi P l(a;b;c;d;e)
scrie a,b,c,d,e
apeleazl P I ( I ;2;a;b;c)scrie a,b,c,d,e
sffirgit calcul
t program opuse
variable x,yinceput subprogram Fl(x)
variabile i,s
se0;pentrui=llayexecutls e s+i+x
xe-lsfirEit pentruFl <-ssfffrgit Flx<-o;y<-lcfrt timp y <:2scrie x,yx e x-Fl(y);y e y+l;
sffrrqit cfft timpsftirgit opuse
program verificare
inceput subprogram verificiValori(date de intrare: vl1,v2;v3; date de ieEire:v3)dacl vl>v2
atunciscrie vl,v2v3 <- v3+l
altfelscric v2,vl
a b c d e
x v s I
v3 e v3-lsfirEit daci
sf0rqit verificiValoricontor(-0citeqte indexpentru i:l la index executlcitqte vl,v2,v3,v4contor(-contor*1citeEte v5
cit timp v3<v5
v3ev3+2sf0rqit cAt timpv5€v5+v3daci v3 este par
atunciap eleazl verifi ciVal or i(v 2;v 4 ;v 5)
altfelapeleazi verifi caValori(v 1 ;v3 ;v5)
sfirqit daclsfirqit pentruscrie v1,v2,v3,v4,v5
sfir;it program
2. Corectarea erorilor
- Eliminali erorile din programele de mai jos:
r rite(' Introduceli codul');rcad (cod); writeln;ifcod=cheie then s€n
Func:=sem
{Furc}{program principal}
index:=1 to lirnitailt tunc(chr(index)) rhen
rriteln ('Da');:rd: {if}
{program principal}
VARIANTAPIerorl2;
qb,i:integer;
re P1(var x:integ
{PU
{program principal}s to false
not s
rtedln(a and b);t(Db)ten S1 a, b);dse S1(b,a);
Lr i=l to b dobcgin
=a{b+i);rriteln('a+b:,a+b)cnd for;
{program principal}
e) Realizali un program (
b) Realiza{i un program (
u
$$w
vl v2 v3 v4 v5
program erori;
const limita=10;
var index:integer;
function Func(cheie:char): boolean;
var sem:boolean;
cod:char;
begin {Func}
#include<iostream.h>#include<conio.h>int limita=10;int Func(char cheie)
{int sem,cod;
cout<<"lntroduceli codul ";
r2 y3 v4 v5
iex'r:=false;
rrite(' Introduce{i codul");nd (cod); writetn;f :od=cheie then semaf:=truef -nc:=sem
U lFunc)
{program principal}lr:rdex:=l to limitaf :rac(chr(index)) then
rriteln (.Da,);d: iirl
;program prrncipal)
{program principal}
cin>>cod, cout<<endl;if(cod==cheie)
sernaf= l;return sem;
)
void main (void)for (int index=l ; index<=limita;index++;
{if (func(char(index)))cout<<"Da"'
)
I setchO;
i)*"1_**-*_"
void Pl(int x, int y)
{*=y}void main (void)
{s=o;while (!s)
{cin>>a>>b;if(a>b) S1(a,b);
else Sl(b, a)
for (i=l;i<=b,i++)
{a=a-(b+i);cout<<'3*!= '<<a+b;) )
n s to falsetEe not s
hginmedln(a and b);il,e>b)Len Sl a, b);*e Sl(b,a);tr i=l to b dohginra-{b+i);rriteln('a*b=,a*b)crd for;
r-t>
c)
I codul ";
lprogram principal)
m Realiza{i un program cu subprograme pentru simularea unei stive.tr Realiza{i un program cu subprograme pentru simurarea unui fir de agteptare.
@xl
ffiffifi..ffiffitrffifii
U tilizarea func{iilor predefinite
4. Scrieli c0te un program care sd utilizeze fuirc(iile Ei procedurile standard enumerate
Anexa TAnexa 4.
5. Identifica{i funcfiite predefinite ce se pot folosi in programul de calculare a energiei ci
gi in problema traiectoriilor (pag. 65 qi pag. 70).
6. Se consideri un automobil intr-o curbl derazdr; ddndu-se unghiurile pantelor a 9i 9, se
sd se scrie un program care sA afiqeze viteza maximi 9i viteza minima cu care poate
automobilul curba in condilii de siguranli. Se cunosc umitoarele fomule:
r.g.tg(a-E)vM= , v^=
- iN- PAscA
ffi,iffit.t6.ntii=[componenti a vector
lungimea efectivi i
LIMBAJI.JL PI
Slr;
s:array[1..50]of char
1i: integer;
.n=';; readln(n);i=l to n do read (s[i]
'Sirul citit este:');
(s);
Aten!ielimbaiul Pascal
(nu am mairc
in limbaiul C/C+t
"C.Babbage"), att
; daci este inilializiune expliciti dt
r. TACIUTATI PENIIPASCAT
Limbajul Pascal ofed)
n4ine pind 1a255 ca
LQpe sir=string;rer s:sir;
hacest cazserezewiiinul octet con[ine lut
qirului este 9) -Ltype sirstring[nl;rer s:sir;
Lacest cazserezewliiq - se pot citi Eiruri
Ce subprograme predefinite se potfolosi?
s. prRURl DE CARACTERE
A. PARTICUTARITATI DE MEMORARE A SIRURILOR DE CARACTERE
Cum proceddm pentru a citi ;i aJiSa, pe rdnd, nurnele intentatorilor primelor
mecanice, electromecanice, electronice; John Napier, Wlhelm Schickard, Blaise
Gottfried lMthelnt Leibnitz, Charles Babbage, Konrad Zuse, S.P. Eckert, J.W. Mauchly ;.a.
56 incepern cu C. Babbage: o prima solu(ie consti in utilizarea unui vector cu cel pufio
componente de tipul predefinit char. Putem citi, prelucra gi ahqa tot vectorul sau numai
elemente ale sale (a se vedea figura 43).
indice in vectorul s 0 I 2 J 4 5 6 1 8
caracter tastat C B a b b a ob e
valoare in meinorie 9 067 046 066 097 098 098 091 103 101
(a) varianta Pascal
lll s 0 2 J 4 5 6
ahcaracter tastat C B a b b a
valoare in memorie 067 046 066 097 098 098 097 I
(a) varianta C/C++Figura 43. Memorarea girurilor de caractere
Se observd cd in loca[iile din memoria intemi asociate componentelor vectorului sunt
codurile ASCII (American Standard Code for Information Interchange (ASCID este codul uversal acceptat pentru memorarea interni a caracterelor) ale caracterelor din qir: s[l] conli
valoarea 067 = codul ASCII al caracterului 'C', s[3] confine valoarea 066 = codul lSCllcaracterului 'B', s[5] gi s[6] conlin valoarea 098 = codul ASCII al caracterului 'b'etc. (Anexa
gh
r$@
r.g.tg(a+E)
ocedunle standard emurerate
componenti a vectorului!) este depusi i de la 0!) con{ine, conform convenliei, j
rt ftnai*o^ ^€-^ti,,; ^ .:-,1,,: //^:^:. o\ i,,^r^^-^^ n - ^^J..r /o?rr ^t ^^-^^-^---r--: ,- r Irl de calculare a energiei cin lungimea efectiva " t,*,i(r.,,9]--
i valoarea 0 = codul ASCII al caracterului null
I
nghiurile pantelor u gi rp, se
teza mrnima cu care poate I,IMBAJUL. PASCl@rele fonnule:
I
I
qr s:arrayfl..50] of char;n-i: integer;
hginuriteln('n='); readln(n);h i:=1 to n do read (s[i]);rriteln('Sirul citit este:');wite (s);
void main (void)
{char s[50];int n, i;cout<<,,n=,,; cin>>n;cout<{'Introduceti sirul."<<endl;for (i=0; i<n; i++) cin>>s[i];sIn]=0;
cout<<"Sirul este:"<<endl;for (i:0;i<n;i++)cout<<s Ii] ; ]
DT CARACTERE
tlatorilor primelor calc,Jn Schickard. Blaise p,
I Ecket'r, J.|t/. Mauchly;.a.uea unui vector cu cel puqint to( \'ectorul sau numai
oentelor vectorului sunt
ha-ee (ASCII) este codulrrterelor din s,ir: s[1]almrea 066 = codul ASCITcaracterului'b' etc. (Anexa
+ Atenlie *-* -
]ln limbaful Pascal am putut afisa vectoru! de caractere ca pe o variabili inde- j
fgl::::T::::::19i:*:::rii1_.:i 1T-11.-1|::T:':l: I-------------tin limbajut c/c++, daci vectorul este inilializat prin declarare (char ,i
0]="C.Babbage"), atunci caracterut null este memorat automat in ultima compo-ili; daci este inilializat prin citire (ca mai sus), atunci trebuie inclusi in program o
expliciti de atribuire (s[n]=6).
!. FACITITAII PENTRU PRETUCRAREA ,SIRURITOR DE CARACTERE iNI I.IMBN'ULPASCAT
tr-rmbajul Pascsl oferd un tip de date standard special: tipul string. O variabild de tip stringreline pini la 255 caractere qi poate fi declarata in doud moduri
t.qpe sir:string;nr s:sir;
m acest caz se rezervd in memorie 256 de octe{i - indiferent cite caractere are la citire qirul sprmul octet con{ine lungimea efectiv[ a qirului citit pentru exemplul qirului "C.Babbage"
qirului este 9) -;xnlpe sir=string[nl;rrr s:sirl
a. acest caz se rezervd in memorie n de octe{i - primul octet con{ine lungimea efectivi a qiru-atit; - se pot citi liruri cu maximum n-l caractere
,&**,**dr$-iFJ{O9"q'"1*+tL(1ii$5?1,
*
---.-
6 7:8 i9_-!_ --*;t; g I e rnulll}s7 i Totl rot""j- ooti
# TTMT
1. Ce afiqeaz[ urmitorul Program?
Operalia de atribuire pentru giruri
cin>>s;
cout<<"Sirul introdus:
cout<<s;
Aceasta rnetodi preziatiita o "ftazd" in care "ct
Pentru inliturarea acesl
ilor de caractere de orit
Si presupunem ci trebu
'John Napier a invental
stare sd reducd efectuar'
Acest qir are 182 de c
tLar secv[183];
Frezentim rnai jos cdter
(crl) cin.get(secv, 1 83,".
(cr2) cin.get(secv, I 83);
(ex3) cin.get(secv, I 83,',(ex4) cin.get(secv, 86);
in primele doua cazuri. ,
\apier a inventat nu t
predefinitd are urmz
E nenniqiecin.get(qir, int nr, char
Semnifi calia parametril,o primul parametru ac
, de exemplu, prin to al doilea parametru I
de caractere din $io al treilea parametru a
Efectele apelarii funclieo se citesc nr-1 carac
hsiv spaliile;o caracterul null este nr atunci cdnd apare, ca
{de aceea in exemplul (
2. Variabilele de tip string pot fi inilializate - ca orice variabile - prin citire sau atribuire.
Fie variabileli g Si k inlializate cu Sirurile 'Leibnitz' ;i respectiv 'Zuse'. Care dintre '
toarele moduri de declarare permite efech.tarea corectd (frird trunchiere la dreapta) a
dintre atribuirile: a ?b , b ?a:
C. FACILIAI; PENTRU PRETUCRAREA tlRURltOR DE CARACTERE iN
C/C++Limbajul C/C++ permite citirea 9i scrierea qirurilor de caractere, fdrd a mai preciza
elementelor. Astfel, primul progam care exemplifica pl-qlyggr%gryl]9r de caractere
#include<iostream.h>void main (void)
{ char s[50];
c0ut<<"Introduceti sirul fara spatii"<<endl;
{$@
program sir2;
var s: string;begin
writeln('Introduceti sirul:');readln (s);
writeln(' Sirul',s,' are',ord(s[0]),' caractere') ;
writeln('s[3]=',s[3],'s[5]:',s[5],'s[6]=',s[6]);writeln
end.
a lungimii efective a pirului
idependentd dar ,,
ryonentele oricirui vectod
- prin citire sau atribuire.setiv 'Zuse'. Care dintrewrchiere la dreapta) a
Aceastd metodi prezinti un dezavantaj: ;irul citit nu poate confine mai multe spafii (nu poater:t[ o "frazd" in care "cuvintele" sd fie separate prin spa[ii).Fgrtnr inldturarea acestui dezavantaj, vom folosi o func{ie speciald care permite citireacor de caractere de orice lungime care con{in orice caracter, inclusiv spalii.s.i presupunem ca trebuie si citirn qi sa prelucrim urmatorul - text - gii de caractere:
"iohn Napier a int'entat nu numai logaritmii naturali dar ;i primul calculator mecanic, int;;re sd reducd efechmrea inmullirilor;i impdrlirilor la efectuarea de adnndri si scdderi.'-{cest gir are 182 de caractere, deci poate fi declarat astfel:dar secv[183];
kezentdm rnai jos cateva exemple de citire a acestui Eir cu ajutorul funcliei cin.get.tcrl) cin.get(secv, I 83,..,);rcr2) cin. get(secv, I 83 );rcr3) cin.get(secv, I 83,,,,);ta4) cin. get(secv, 86);
cin>>s;
cout<<"Sirul introdus:"<<endl;cout<<s;
"r pnmele doua cazuri, este citit intregul gir; in ultimele doua cazuri este citit numai subgirulwr \apier a inventat nrt numai logaritmii naturali dar ;i primul calcttlator mecanic,'. Aceastd"
predefinitd are unnitorul antet:
El oenniliecin.get(qir, int nr, char='\n')
,3
I
$
*
ringl8];b:string[8];
ring[20];b:string[20];
E O{RACTERT iru T
tre, fEri a mai precizai $inrilor de caractere devine
Semnifi cafia parametrilor:r pnmul parametru actual trebuie si fie o variabild de tip ,sir de caractere, declaratin*u, de exemplu, prin char v[n];o al. doilea parametru actual trebuie sd fie un numir cuprins intre 0 qi n, care sa indiceuirul de caractere din qir care trebuie citite;r al treilea parametru actual este opfionar; dacr nu apare, atunci se subinfelege ci este ,\n,.Efectele apelarii func{iei (in oricari dintre variante) iunt:I se citesc nr-l caractere (iatd de ce am folosit 1g3 degi qirul nostru areusir spaliile;r caracterul null este inserat automat dupa ultimul caracter din qir;r arunci cAnd apare, caracterul transmis ca al treilea parametru actual fo{eazri sfhrgitul qiru-ik aceea in exemplul (ex3) de mai sus, citirea se opreqte la intdlnirea virgulei).
182 caractere),
@sl
A AtenliePentru a citi numai un prefix al qirului, nu intreg qirul, putem folosi:
i, n#r, ^
.iii rri rlrg* .uru.t.r, fie ci este spaliu sau nu, putetn folosi funclia cin'get f
i*,;;; .*::9,'*1'"T:::"'::::*':::*::]Tira citirea succesiva a mai,rurtor qiruri
program atribuirel;var sl,s2,s3:string;
begin
writeln('Sirurile citite:');
writcln(sl,' ',s2);
s3:=s2;
s2:=sl;s I :=s3;
writeln('Sirurile dupa interschirnbare:');
writeln(sl,'',s2);end.
#include<string.h>#include<conio.h>void main (void)
{clrscr0;ctrar si1101="Charles", s2[10]="3u66utt"'
s3[10];
cout<<s1<<s2<<endl;
strcpy(s3,s2);
strcpy(s2,sl);strcpy(sl,s3);cout<<"Sirurile dupa
interschirnbare :"<<en dl;
cout<<s1<<s2<<endl;getchQ;)
Atenlie (CiC++);terul * care Precede
:u reprezinti valori ci ad:
r de memorie atribuiu at
rea qirurilor de c
lor de caractere li se Pot
c cu cifra 7 sau cu Pan
codurilor ASCII P
lat in reprezentarea sru
al codului literei b. 093
variabile x 5i 1'de hr
crzuri:
ul primului caracter dilu: 'bit'> 'Octet'deoa
:::l prunului caracter din
u: 'Bit'< 'octet'deoe
1primului caracter din
distingem unnatoarele
=1; ahrnci x=y;
1; atunci x>Y (de er.e
=1; atunci y>x;>i: atunci se continua
1. Sa presuPunem ca Pel
- daci h=m=n atutrc
- dac[ h=m<n atunci
- daci h<m atunci r
ulate in x qi Y Pe Pozi$a
l, se procedeaza ant
sl.s2:string;
's1:');readln(s1);'s2:');readln(s2):
i<s2) then
iteln(s1,',<"s2)
strcpy
.h>
mul apelant.
lfrffp;ograme afigeaz6 secven{ele Charles Babbage 9i
char *strcpy(char *destina{ie, char *sursa);
Apelarea:
strcpy(s1,s2);C-a urmare, qirul s2 este depus in qirul
qirul s2 rimAne nemodificat; qirul sl va
tatul operaliei gi va fi retumat cltre
Babbage Charles
o Atribuirea de valori
acter',';
mi funcfia cin.getta mai multor qiruri
ITOR DE
s2[1 0]="Ss66o*.",
inaqie, char *sursa);
[e depus in girulq qirul sl va
E returnat cdtre
Atentie (C/C++)rcterul * care precede numele funcliei si al parametrilor formali indica faptul canu reprezinta valori ci adrese. Cu alte cuvinte, *xnsa reprezinta adresa prrmei localii
de memorie atribuitd acestui parametru al func(iei strcpy.1:wila;e
*"-,*-.*,r^.*r.i
pararea ;irurilor dc caracterelor de caractere li se pot aplica operatorii relalionali ((, ), = etc). Curn putem insa com-
a cu cifra 7 sau cu parutlteza deschisa?! Dar sirul 'aX' cu qirul 'Ar'?l Metoda constaarea codurilor ASCII prin care se reprezintd in memorie caracterele din Sir (aqa cum'at in reprezentarea girului 'c.Babbage', codul literei a,097, este predecesorul in sensal codului literei b, 098).
doua variabile x Ei y de lungime n, respectiv m, care trebuie comparate. Distingem urmi-cazuri:
l primului caracter din x este mai mare decat codul primr"rlui caracter din y; atunci x>ylu: 'bit'> 'Octet'deoarece ASCII('b') = 098 > 079 : ASCI4,O,));I prirnului caracter din x este mai mic decit codul prirnului caracter clin y; atunci x<yiu: 'Bit'( 'octet' deoarece ASCII('B') = 066 < 1l I : lSCl(.o,));
dul primului caracter din x este egal cu codul primului caracter din y (este practic acelaEiI distingem unnitoarele subcazuri:
l; atunci x=y;l; atunci x>y (de exemplu: 'if'>'i');
m>1, atunci se continui cu compararea codurilor caracterelor de pe poziqiile urmitoare1'- Si presupunem ca pentru toate primele h pozitli codurile a, fosr egale:
- dacd h=m:n atunci x:y,- daca h=m<n atunci x>y;
- dacd h<m atunci rela{ia dintre x gi y este rela{ia dintre codurile ASCII ale carac-rtlate in x gi y pe poziqia h+l.
l; se procedeaza analog.
--i *"+irilffi d;< 6 i t iilm-: ti;
#include<string.h>void main(void)
{char s1[20],s2[20];int v;
sl.s2:string;
<s2) then cout<<"\n s 1 :";cin. get(s 1,20);
cin.get0; cout<<"\n s2 :";cin.get(s2,20);[riteln(s 1,',<"s2)
::.:tSr,lll3,:,;i:; t
');readln(sl);');readln(s2);
cout<<endl;
v=strcmp(s1, s2);
if (v < 0) cout<<s1<<"<"<<s2;
else
if (v >0) cout<<s 1<<">"<<s2;
else cout<<s l<{'="<<s2;
)
int strcmp(const char *sirl, const*si12);
Apelarea:
v=strcmp(sl,s2);Func{ia compard sirurile sl qi
cdtre programul apelant o
< 0, daci sl < s2,
= 0, dacd sl = s2,
> 0, daca sl > s2.
program lengthl;var s1:string;
begin
s1:='Acest sir are27 caractere.';
writeln('Acest sir are',ord(s1[0]),' caractere.');
writeln('Acest sir are',length(sl),' caractere.');
end.
#include<string.h>void main (void)
{char sl[28]="Acest sr ue27 caractere-
cout<<"Acest sir are "<< strlen(slcaractete.";
)
size_t strlen (char *sursa);
Apelarea:
n = strlen (s);
Func{ia returneazi cdtre programul
numarul de caractere din girul s (ultimul
rczervat automat caracterului null, nu
numirat).
if(s1>s2) then
writeln(s1,'>',s2)else
writeln(sl,':',s2);end.
tenarea sirurilor dr
TIMBAJUI,.PASC
concat sau
+
concatl;ll.s2,rl,12:string;
'urbo';s2:='Pascal';
l+"*s2;s 1r"rs2);
'Cuoperatorul*:',rl'Cu functia concat: 'J,
concat(s I [,s2,. . .,sn] :s
Eirurile al,a2,...,ain aceasta ordine qi de
Dacd qirul rezultat are r
atunci el este tnx
afiEeazd secvenla,,7ori!)
Atentiede concatenare a 9i
gi s2 : "aac", ambele programe abc> aac
o Determinarea lungimii unui qir de caractere
LIMBAJUL ?ASCAL
effi{iqs,it
n length sau valoarea conlinuta inprimul octet din qir
function length (sursa:string): :Integer;Apelarea:
n:= length(s);
Funcfia returneaz[ citre programul apelant
num[ru] de caractere din qirul s (primuloctet, rezervat automat numirului de carac-
tere din gir, nu este numdrat).
Ambele programe afigeazi textul ,,Acest qir are 27 caractere."
Concatenarea sirurilor de caractere2);I(5]qq"q"1a"2.
".,
((sl((">"<<"?.--,
.<{'="<<s2;
t:
t char *sirl, const
i sirurile slgnmul apelant
nt we 27 caracterc-rrE "<< strlen(sl
m);
re programul
u girul s (ultimulrerului null, nu
S1
o
functia strcat
#include<iostream.h>#include<string.h>void main (void)
{char s 1 [1 0]:"Borland",s2[ I 01="6".strcat (s1, " ");strcat (s1, s2);
couK<"\n"<<s1.It
Definilia funcfei:char *strcat (char *destinafie, char *sursa);
Apelarea:
strcat (al, a2);
Ca urmare, girul al este concatenat la dreapta
strcat(al,a2); strcat(a l,a3); . . . ; strcat(a l,an);
Programul afi;eazir secventa,,Borland C,,(o singurl data)
cu qirula2; qiruls2 ramdne nemodificat; sirul isl va confine rezultatul operafiei qi va fi Iretumat catre programul apelant. pentru u iconcatena n s,iruri, func{ia trebuie apelati den-l ori:
d
@li
aftqeazd,secventa,,Turbo pascal,,
;fin;iil-uiltie"" -""- ,_1functia strupr
' ""'-"- - *--"^" **-*-1-+fi;i'iA;;iffisti6amH-i lr.ogrum upcasel;
1
i i,ar'st:string; ' #include<string'h>
i i,irt.g..; I I'id *1111:',',9, i., ,,
begin i {tt'ut s1{131="61uta.a.Xl-a";
sl::'Clasa a XI-a'; i cout<<"\n Sirul initial: "<<sl<<endl;
rvritcln('Sirul initial: ', s1); I strupr (s1);
for i:=1 to lengtli(sl) do I cout<<"Sirul cu majuscule: "<<sl;
o Convcrsia literclor mici in majuscule
sl [i]:= upcasc(s1 [i])rwriteln('SiLul cu rnajuscule: ', si);
cnd.
il,"rffi:"-* * -- iDi:riniiii runciGl:*
function upcase (car: Char):Char; i char *strupr(char *sursa);
Apelarea: i APclartrd'
w:- upcase (c); i adr:struPr (sl);
Funclia returneazd majuscula corespurza- 1 Funclia retumeaza girul sl, in care
parametru actull; , racterele - aflate in domeniul ?',: u\
daci acest parametru nu se afla in domeniul i transformate in majuscule' Cele din z
a..z atunci el rarrAne neschimbat. I acestui domeniu r[rndn neschimbate'
o Ciutarea unui subqir intr-un gir de caractere
'r..:;,,]!i:':LIfunctia strstr
-posf imprima'"sl I
'mira'.s1);-*mira'' incepe dr
se afla in sir'):
pos(subsir: Strir
I.sl ):
verifici (de la stitsl apare - in inu
sl. in caz afirma
caracterului din s.
drn sl; altfel renr
afiqeazi numt
a unei valo
LIMBAJTJL
-Numarul',a:4)
'Sirul',sl);
lr\-iraro;i char *str
I Ap.lor.u'
#inclfunc{ia pos
dCId;m pfii.;var s1,s2:string;
n:integer;
begin
s I ::'imprimanta' ;
writeln(s1);n1:pos('prim',s1);writeln("'prim" incepe din pozitia:',n);
writcln("'rima" incePe din
i pozitia:',pos(' rirna',s I ));
i n::pos('priura',sl);
I writclnl"'prima" incepe din pozitia:',n);
i writeln("'manta" incePe din
"imprima", *adr;
adr:strstr(s 1,s2);
if (add cout<<adr-s1*1<<endl;
else cout<<"Nu aPare in sir" <<endl;
adr=strstr(s l,s3);
if (adr) cout<<adr-s1*1 <<endl;
t* ". - *" *,." "- " - *- " -, *i..-.......,.......-..-.. ".,
;;,,'
ri,],1.6.S
n.h>t>
Ga a XI-a";nitial: "<<s1<<endl;
majuscule: "<<sl;
r-sl+l<<sndl'
ryare in sir" <<endl;
r-sl+l <<endl;
pos('mira',sl);"'mira" incepe din pozitia:',1,',
1
I adr=strstr(sl, s5);
:',pos('manta',s 1));"'imprima" incepe din
:',pos('imprima',s I ));
nu se afla in sir');
pos(subsir: String; sir: String):
verificd (de la stAnga la dreapta) daclsl apare - in intregime - ins2.itt caz afirmativ, retumeaza
caracterului din s2 care este Ei primul
-'-**- i 1ii6-corii??Xu'aparc m ;ii <ieriat;"adr=strstr(s 1,s4);
if (adr) cout<<adr-s I + 1 <<endl;
else cout<<"Nu apare in sir"<<cndl;
I if (adr) cout<<adr-s1.1-1<<endl;
i else cout<<"Nu apare in sir"<<endl;
1 adr = strstr(sl, s6);
I if 1aA4 cout<<adr-s1+1<<enrll;
i else cout<<"Nu apare in sir"<<endl;
1 adr = strstr(sl, s7);
i if laar; cout<<adr-s1+1<<endl'
I else cout<<"Nu apare in sir"<<entll;)
char *strstr(char *sir, char *subsir)1
Apelarea:
adr:strcstr(s 1 ,s2);
caracter din s2; altfel retumeaza valoarea
r *sursa);
a:
sl,s2);
r5iml sl, in care toate
n domeniul a..z - atJ
tjuscule. Cele din afara
imin neschimbate.
r.h>P
pimanta",
[F'rima",ffhteger;
lflo6;la",s7[5]="11ira", s6[8P 4.s1);
Func(ia verifica (de la stdnga la dreapta) daca I
secventa s2 apare - in intregirne - in
adresa caracterultri din sl carc esre gi prirnrrl
9 * *::5:l :y::: *^
:":::::' I1 * *)!tli :aftEeazd numerele 3, 4, 3, 6, 1, 0
Conversia unei valori numerice intr-o secventl de caractere
'Numarul',a:4);'Sirul ',sl);
,;,LIMBAJUL :C1C++
void main (void)
{int a:2006;
char s1[00];itoa(a,s1,10);
cout<<"Numarul:"<<a;
cout<<"Sirul :"<<s 1 <<endll
)
i$Stil:*r,$iiil
I Oefinilia procedurii:
procedure str(numar:i; var sursa:string);
Apelarea:
str(nr:n,s);
Procedura returteazd qirul s obflnut prin con-
veftirea numdrului nr de la tipul intreg la
tipul string. Parametrul n indica num[ruI
total de caractere pe care se face conversia
(numirul de octe(i ai s).
Definilia funcfiilor:char *itoa(int valoare, char *sir, intApelarea:
itoa(vl, s1, bl);Funclia itoa returneazd girul sl oblinut
conversia numdrului intreg vl din baza bltipul char (daci b1=10 atunci se re(ine
semnul lui vl).Existd doud func{ii similare func{iei igi ultoa. prima convertegte in ;ir otip long int, a doua converteqte o valoare
tip unsigned long.
ckerriteln('Eroare la convr
qia procedurii:
ure val(sursa; var r
sl,nr,c);
returneazf, numila care a fost convertil
intreagd c, indicAnd
conversia: daci sl i
e con{inut decdt cifre, rsemnul * sau -) atunciersia nu s-a realizat).
afiqeazd-pe3nsi Eroare: sl= 17 ani
LEME PROP
[i, in limbajul de Ie probleme:
hecare elev din cla
mari).
se afseze (pentru fiec'yima literd sdfie majre afiseze numele elev,
v ordoneze crescdtorw ordoneze descresca
','erifice dacd o frazdJac cafele. Sa nu iei
al spa{iului este 0i
Ambele programe afrEeazd secven{a
o Conversia unei secvente de caractere intr-o valoare numerici
procedura val
program val1;
var sl:string;i,c:integer;r:real;
begin
sl:='2006';writeln('Sirul: ',s1);
val(s1,i,c);
if c:0 then writeln('Numarul:',i:4)else
writeln('Eroare: s 1:',s1);sl:='-1.23';writeln('Sirul: ',s1);
val(sl, r, c);
if c:0 then writeln('Numarul:',r:5 :2)
else
writeln('Eroare: s 1=',sl );s1:='l7 ani';writeln('Sirul: ',sl);val(s1,r,c);
if r0 then writeln('Numarul:',r:5:2)
$$w
func{iile atol, atof
#include<stdlib.h>void main (void)
{long 1; float f;char s1[5]="2006";
char s2[6]="'1.23";l=atol(sl);cout(("sl : "4451<{';1: "<<l<<endl;l=atol("l 7ani");
cout<<" 1: "<<l<<endl;Fatof(s2);cout<{'s2: "<<s2<<"; f: "<<R<endl;tsatof("3.02*7");cout<{'f: "<<f<<endl;
)
val(sursa; var v:integerl var
refiirneaza numirul nr (intreg sauh care a fost convertit qirul sl qi va-
intreagd c, indicdnd modul in care s-aconversia: dacd sl a pufut fi convertit
con{inut decdt cifre, virgula, punct zeci-remnul * sau -) atunci c = 0; altfel c ? 0
ia nu s-a realizat).
pz[ 5i1ul sl obfinutlui intreg vI din baza
bl=10 atunci se
i similare funcliei iw€rte$te in gir o va!1 Converteste o
lcl
<?d: ,,<<l<<endl;
eudl;
<C'; f: "<<f<<endl.
aodl;
,,,t
rriteln('Eroare la conversie.,);
fiilffiffiffino,1long atol(char *sursa);
double atof(char *sursa);
Apelarea:
n = atol(sl);n = atof(sl);Func{ia atol (atof) converte$te girul sl la unintreg de tip long (la un real de tip float);daci sl nu se poate converti, atunci funcfiareturneazi valoarea 0.
Observatie
Exista Ei funcliile atoi, strtol, strtoul, strtodcare convertesc un qir la: un intreg, un intregde tip long, un intreg de tip long fhrd semn,respectiv la un real de tip double.
Programul afi;eazd - pe 4 rAnduri - 2006,-1.23 qi 3.02
LEME PROPUSE
, in limbajul de programare studiat, cate un program pentru rezolvareafiecareia din-rele probleme:
fiecare elev din clasd se citesc, pe r0nd, numele qi prenumele (scrise cu litere mici gi/mari).
ix afi.seze (pentrufiecare elev), pe un singur rdnd, numere (cu majuscule) ;i prenumeleFtma literd sdfie majusculd).le afiSeze numele elewlui cu cel mai lung prenume ;i prenumele elevului cu cel mai lung
v ordoneze crescdtor elevii dupd numele de familie.v ordoneze descrescdtor elevii dupd prenume.
t verifice dacd o frazd este de tip palindrom (uemple: Au o nava noua. Iue, pui, ciuperci.foc cafele. sa nu iei un as. o rama maro.) in acest scop se vor elimina sfaliile (codul
al spa{iului este 032).
d
W$i
6. Se citegte un gir de cifre zecimal e. Se cere sd se afi;eze ;irul dupd ce toate cifrele pare
apar au fost inlocuite u cifiele corespunzdtoare (9-p) iar cifrele impare i cu cifrele
punzdtoare (i-l). Exemplu: pentru;irul 143265 seva afi;a;irul 052734.
7. Statisticile arutd cd fiecare utilizator de e-rnail are 1,8 (!!) cdsu{e de poqta electronici. tondociteascd toate adresele e-mail ale unei persoane qi sd se afi;eze separat
adresa sen,entltd (codul ASCil al caracteruhti @ este 064).
8. Se citesc mai multe adrese Web. Sd se afi;eze separat strb;irul care reprezintd: schema
3. Se citegte o"frazd". Se cere sd se afi;eze:o numirul "cuvintelor" care apar in"fraza";o cel mai luiig Ei cel mai scurl cuvdnt precum qi pozilia incepdnd cu care apar
"frazd";c sa se gteargd din"frmd" primul "cuvdnt" care incepe cu litera I;o sa se insereze ir"frazd", dupi fiecare "cuvAnt", acelaqi "cuv6nt" dar scris cu
y'. Se citeqte o "frazi". Se cere sd se afi;eze:o toate perechile de "cuvinte" adiacente care "rimeazd",'
c toate perechile de "ctruinte" neadiacente care "rimeazd", impreund cu pozilialitere in frazd (considerdm cd douii cuvinte rimeazd dacd cel pulin ultimele lor doud
coincid).
5. Se citegte un gir fonnat numai din litere gi spafii. Se cere sd se afi;eze qirul, dupd ce
vocalele consecutit,e au fost lnlocuite cu majuscule.
, ftp:// etc.), numele serverult i, calea, rurmele fiqierului care trebuie inccircat.
9. Se citesc doua qiruri. Se cere sa se afi;eze un sub;ir comun de lungime maximd.
10. Se citeEte un gir. Se cere sd se afi;eze cel ntai h.mg subqir format din litere ordonate
(ob. zbbc, afgk etc.).
wgesgrc*xwr {N {tw83A. COMPANIA EFICIENT
Etapa: Realizare ;i tutare (implementarea unitdlilor de progam in limbajul de
studiat)
Cerin{e:1. Realizarea si testarea individuala a programelor.
2. Irtegrar ea programelor intr-o aplicaf ie unitard.
3. Corrpletarea documenta[iei cu specifica{iile tehnice de programare.
SIVITATEA
RE. EXEMPLIFt
algoritrrii sunt reprez
rce: strucfuri secver
algoritm care confine I
rea iterativi a
pdna cdnd este indep
repetitive sunt impl
LIMBAJUL PAS
to downto I do
de operalii
_logica) do
de operalii
de operafii
_logici);
uner secvenge de ilului astfel incdt S sieste in acest caz conu
Iqirea din secvenfa dr
in matematici a unr
construirii mecanismr
I I t*#"rtrfl 0 ilirrii,lt'
ccpand cu care apar ac
f. t,rfot" dar scris cu maj
i4mtnd cu poziliad prrti, ultimele lor doud
* aliseze sirul, dupd ce
W ce toate cifrele pare p'fnle impare i cu cifrelerl 052734.
rts de pogti electronica.
W sepsrat
t@e reprezintd: schema
tebuie incdrcat.
futgime maximd.
w din litere ordonate
l_€ftq,f{Im in limbajul de
qgramare.
to downto I do
IECURSIVITATEA
DEFI N I RE. EXEMP LI F I CARE
Toi algoritmii sunt reprezenta{i printr-o succesiune logica qi finita de paqi descrigi prin struc-ryecifice: structuri secventiale, structuri decizionale sau structuri repetitive.
Un algoritm care confine structuri repetitive poate fi rcprezentat: iirativ sau recursiv.&prezentarea iterativi a unui algoritm repetitiv implicd reluarea parcurgerii secven{ei de
ii pdna cdnd este indeplinita condiqia de oprire. in lirnbajele a. pro,er:urure cunoscute,rile repetitive sunt implementate iterativ cu ajutorul instruc{iunilor corespunzitoare.
",' .r:,.i..l' I i...;:' !:l]I':::T1-:?Yja1?Y\"PLIMBAJUL PASCAL
:, ::'..;.:, ,.t: 1) a'" ' :l ..a::: :::) . iiir ' ,''.':r:-llir:ril: -,r: -
Itondo for (i=l; i<=n; i++)
{ secvenla de opera{ii }
tor (i=n; i>=l; i-){ secvenla de operalii }
mmenta de operatii
de operalii
-logica) do while (cond_logicn) do
{ secvenla de operafii}de operalii
do { }while(cond_logica)
a unei secven(e de instruc{iuni (S) poate fi determinata Ei prin organi zarea modulariui astfel incdt s si aparfini unui modul care se attoapereaza (cap.2, fig. 40b).
rl este in acest caz comanda de execuqie a secvenfei S pentru prelucrarea unor alte date. Iqirea din secven{a de autoapeluri este controlatd printr-o condi{ie de op,re.
in matematici a unor relalii recurente (giruri recurente) si prelucrarea acestora auconstruirii mecanismului recursivitiqii pentru reprezentareaalgoritmilor.
Exemplu:Se considerd un numdr n natural nenul. Si se calculeze qi sa se afryeze n! (factorialul
lui natural n).
Varianta iterativi:Pentru implementarea iterativi se foloseqte relafia:
n! = l*2*...*n , unde 0!= ISe apeleaz[ din programul principal, respectiv din funcqia principali,
returneazi valoarea lui nJ. in corpul funcliei, variabilap se inilializeazd cu
intr-o instruc{iune repetitivi cu contor se repetd de r ori operalia p=p*i,
returna valoarea finald a produsuluip.
Varianta recursivi:Se foloseqte umltoarea rela{ie de recurenli:
Exemplu: Pentru n=4, atunci n! se determind astfel:
Se apeleazd din programul principal, respectiv din func[ia principal[ func{ia
returneazd valoarea lui n /. Func{iafact are ca parametru formal numdrul natural n.
funcfia factvaloarea I Ei
i=1,n. F
pe baza relaliei d
definitA in enunnDupd apel, funcfa s
cu parametrul for
) multiplicat cu n adiciIl.Dacd n>0 atunci s
autoapelul (n * n-l , iafunctiei are valoare
Sirul de autoapeluri scind este indeplinitr
de oprire.
relafiei de recurenqi
ului deducem conditia: n=0.
urile au loc de sus irprincipal - condiqi:
I rar construclia solu-tie:
1os in sus (condilia dr
apelul principal ), adici
4l= fac(4):4 *fact(3):4'
,lutoapeluri ale subpn
:4*13*(2*l
Construiret
IM
PASCAI
fact(n: integer) : longinq
&en fact:=ldre fact:=n*fact(n-l)
a'..*.,*-.-;}i3$ffi',fa;ffih,
ir.
#include<iostream.h>
#include<conio.h>
long fact(int n)
{ int i;long p=l;for (i:1;i<=n;i++)p=p*i;
return p;It
void main$
{ int n;
clrscrQ;
cout(,, n = ,,;gin>oi
cout(" Factorialul "<<rK<"| =
)
11- oentru n =fact(n)={ "/ \ ln x fact(n- 1)
::ta pe baza relaliei de
:n! (factorialul
ipLA, fwclia fact6 cu valoarea I qi
a*i, i=l,n. F
L C/CSr.
<n<<"1 = "<
ipald ft;rriclia factil natural r.
p, definiti in enunlul
ei. Dupd apel, funcfa se
ieazi cu parametrul for-m-l j multiplicat cu ri adicd:
t-l).Dacd n>0 atunci se
autoapelul (n * n-l , iar
func{iei are valoarea
Sirul de autoapeluri se
cdnd este indeplinitaie oprire.
-crm relatiei de recurenti
:alului deducem condiyia
:rl: n=0.
pelurile au loc de sus inlul pnncipal - condilia
: t iar construc{ia solufiel Figura 44
t jos in sus (condilia de
- apelul principal ), adic6:
l' &en fact:=l:se fact:=n*fact(n-l)
n
3)
0?nu
I
I
n=0?nu
II-l
FD
: 4* (3* (2* (t* 1 ))) : 4*(3 *(2 * I )): 4* (3*2):4* 6:24
Construirea soluliei dupa tntdlnirea condiliei de oprire
IMPLEMENTAREA RECURSIV
#include<iostream.h>
#include<conio.h>
long fact(int n)
{ int i;if (!n) return l;else
return n*fact(n-1);
t;-:i- . -;.':. !:' l
d:qhaf2]i i;, l$;tidI".''; #}, '
J:: fac(4):4*fact(3):4*(3 *fact(2))=4x13x(2xfact( l)))-4*(3*(2*(lxfact(0)))): l
-1.|utoapeluri ale subprogramului fact pdnd la tntdlnirea condiyiei de oprire n :0
snsiderd umitoarea def
fl, ttacd n =l=I ffu-t) ,ttact"
la + f(n -t)
prin care se verifica condiqiiie de iesire din autoapelul recusiv. Aceste teste de iegire fi ii alocarea de spaliu pe
rct'enirea in subprogram
r ariabilelor locale, cdt
subprogramelor recr
in ordine, parametrii I
adresa de revenire dupi r
pe acest nivel se depun
le. Cdnd se int6lneste
lprin vArful stivei, de s
iryr:se in secven{a de q
# TEME riva sistemului este vidi
ificarea mecanismulut. Stabiliti care dintre unnatoarele afirmalii sunt adevdrate sau false, prin marcarea casulel
fact(4)
"lant tle apeluri rea,trsit'e".
Pentru a defini corect recursivitatea trebuie umarite urmdtoarele aspecte:
i,** j -ii,,rrtrtict
cle oprire:in corpul subprogramului recursiv exista unul sau mai multe, . _f^*
r , ' Un algorirnl care nu conline struc[url rep
! t i rativ. cat si recursiv. *- -LI - 'i-.1*;.;t;m; seivenle ctffieiaiil."ae un nffilffitC.ii d;-o;ilai. I
\, 2 I tratata iterativ prin intermediul unor structuri repetive corespunzatoare.
i'i" t I
l---i"frc;,iiei-unor secve,le de operaqii, d;.rn ffiffir cr,rioscrit ae [,ij!i[;f-\-
i 1 I trarara recursrv prin intermediul autoapelurilor aceluiaEi subalgoritm de un i
'" ' i ;;, tlnit de ori. :
': n " Subaleoritinul ie autoapeieaza pani cand este ffieptiniti conditil ae op'irtl,
*"' *'. -,""**.*'"-',.L.', l -:
Stabiliti care este conditi;
Pentru n=4 construiqi toa
iliza1i urmitorul enunt siorrcarlu numar nan
DE IMPI
hl '$tbprog'ame' s
memorie denumitd stir
ilor formali trans
extrage n=
calculeazi4x6
Ap.l
Extragerea valorilor d
i le orienteze catre tlna dintre condiliile de oprire'
t '" "il;*,rptrifr.r.ntut,
vaioarea parametrului formal n este decrementati p2nd cAnd
t valoarea 0 (condilia de oPrire).i;
punzatoare:
,"-:I tlr. 1 Afirmatii, : ^lr.lll't
"
i crt. .
:onsideri umatoarea definilie (rela{ie de recurenla):
fl, ctacd n =l,,=] .ffu-11 .lucart>l,a eR.
l,. 11,, -,>>n:
ul *<<n<<"! = "<<fact(n)t
leaza. altfel spus se
bce un prirn aPel al
care nou[ autoaPelare se
. realizindu-se un a$a-
:le aspecte:
isr.1 unul sau mai multe
reste teste de ies,ire i
, in rezolvarea cazului c
npelului recursiv, diferi
procesul apelului rec
ecrementatA PAnd cand
se, prin lnarcarea cdsu{et
ffintiiitafiii{I
roscut de ori, este
espunzatoare. ffi(3) ll ll tacl (2) Il ll fac
Stabiliqi care este condiqia de oprire din autoapel.Fentru n=4 construigi toate autoapelurile realizate.
urmatorul enun! gi pune[i in eviden{a aspectele recurente:oricdnd rutntcir natm'al este un numdr nahral: zero este rumcir natural
NISMUL DE IMPLEMENIARE A RECURSIVITATII
:rpitolul 'Subprograme 's-a precizat ca orice apel de subprogram are ca efect salvarea intr-o0e memorie denumitd stiva (segment de stiva) a adresei de revenire de dr-rpa apel, a valo-
Frametrilor formali transmiEi prin valoare Ei a adresei parametrilor transmiEi prin adrcsS,
si alocarea de spa{iu pe stiva sistemului pentru variabilele iocale ale subprogramului.:evenirea in subprogramul apelant, se extrag in ordine inversd valorile salvate pe stiva
rariabilelor locale, cit Ei ale parametrilor).
crul subprogramelor recursive, la apelul subprogramului se depun pe pnrnul ruvel a1 stiveilul in ordine, parametrii formali transmiqi, se aloca spa{iu pentru variabilele locale (daca este
r rdresa de revenire dupa apel. La fiecare autoapel al subprogramului, se urca cu cite un nivelpe acest nivel se depun noile valon ale parametrilor transmiqi, se aloca spaliu pentrir van-
iocale. Cdnd se intAlnegte condilia de oprire se incheie autoapelul subprogramului, se extrag
tprin vAr{ul stivei, de sus in jos) in ordine inversd valorile depuse gi se efectueazi prelu-
xmPuse in secven{a de operatji executati la {iecare autoapel. CAnd se revine in modululsriva sistemului este vida.
fi carea mecanismului recursivitalii pentru determinarea valorii funcliei 4 !=fact(4).
Apelul din modulul apelant Ei autoapelurileI,
ffiextrage n:1
Conditia de
oprire
H Hct(0)
f,II$
wr,)
extrage n=4calculeaza
4x6
extrage n:3calculeaza
3x2
extrage n=2calculeaza calculeaza
2xl 1xl
Extragerea valorilor depuse pe fiecare nivel al stivei qi calculul factorialului
# TEMX
1. Stabilili care dintre unnatoarele afinnalii sunt adevdrate sau false, prin marcarea
punzdtoare:
Nr.crt.
Afirmatii
te indireclqistd doud sau m
condi{ia de oprire ircest caz se executi
l. Apelul subprogra
2. Apeluri incruci;a3. Revenirea la mo<
(tr)r
condiqia d
la modulul apelant
Reprezenta{i conlinutul stivei pe durata executarii apelului principal, al
extragerii valorilor din stivd., construirea valorii returnate gi revenirea in
apelant pentru urmitoarea defurilie (relalie de recurenld):
fl, dacd n =lI
f(n) =1 ft, -t), dacd n >1, a e R.
la + f(n -t)
C. TIPURI DE RECURSIVITATE
Existd doud tipuri de recursivitate (fig. aO:
a) Recursivitate directlDaci un subprogram se autoapeleazipdn|la intdlnirea condiliei de oprire se spune
sivitatea este directi. in acest caz se executi urmdtorii pagi:
Pasul 1. Apelul subprogramului recursiv.
Pasul 2. Autoapelul subprogramului pdnl la indeplinirea condiliei de oprire.
Pasul3. Revenirea la modulul apelant.
t:
ilryffi?dHshi,"i1::#83
;t'
Prin apelul unui subprogram se salveazd in segmentul de date adresa de
revenire de dupd apel, valorile parametrilor formali transmigi prin valoare
qi adresele parametrilor transmiqi prin adresi gi variabilele locale (dacd este
cazul) ale subprogramului.
La fiecare autoapel al subprogramului se urci cu cAte un nivel in stivd pe
care se depun noile valori ale parametrilor formali gi se alocd spaliu pentru
variabilele locale.
Cdnd se int6lnegte condilia de oprire se incheie autoapelul subprogramului,
se extrage din stiva sistemului it ordinea depunerii lanful de valori depuse
qi se efectueazd prelucrdrile impuse.
E, prin marcarea cisulei
a date adtesa de
mi;i prin valoare
locale (dac[ este
nivel in stivi pe
rci spa{iu pentru
mbprogramului,
de valori depuse
cind s-au extras
ri principal,
qi revenirea
eR'
;iei de oprire se spune ci
di,tiei de oprire.
SU
al
in
Recursivitate indirectlexistd doud sau mai multe subprograme care se apereazit reciproc p6n6 cand secondilia de oprire in cel pu{in unul dintre ele, recursivitatea este indirecta sau incru-
In acest caz se executi urmitorii paEi:
1. Apelul subprogramului.
2. Apeluri incruciqate pdni la intdlnirea condiqiei de oprire.3. Revenirea la modulul apelant.
Figura 46
@sr
recursivit[1ii directe Reprezentarea recursivitalii indirecte
(II) Autoapelul
la modulul apelant
LIMBAJULPASCAL ',1" LIMBAJULC/C++,,.. ; ,-.:,,,,LLiVtItAJUL TAD\'Atf, ' '1
in lirnbajul Pascal se d;6;l';; tur'p'o- ] in limbajul t/9nl t:" n:i: ,1',ti1:.
gram care nu a fost declarat, folosind o i tutt nu a fost declaratd' folosind o
cieclaraiie fictiva (convenlionali) care este i nttiua. (conventiona'') t':t, :1t*:formatd drn antct (riumele subprogramului ; antet (numele subprogramului urmat er
urmat eventual de lista para,netrilor formali) i a. Uutu parametrilor fonnali)' Aceastd
' ' :aqie de func1ie permite referirea la eagi cur anrul rezeruat FORWARD' carc este ' t
separate de antet prtn '; . Aceasta cleclaralie i atn'ita tltl:*:n'*|T:]11:::11ffi;i,;:;;;;;J;r; pemrite referirea lai se va scrie fiind precedat din nou de
ea fbrA a fi clefinitd iu momentul apelarii' i
acesteta'
Corpul subprogratrului se va scrie fiind pre- 1
hnplemerrtarearccut,sivitaliiindirecteinlirrrbajeledeprogranrareareanunite
cedat din nou de antetul acestuia fdr[ a mai fi
necesar declararea pararretrilor formali'
Exemplu tle itnplementare a rearsivitdlii indirecte:
Saseafigezetoatenumerelenaturalecuprinseinintervalrrldat[a,b].
Depeprimalinieafilleruluitextrec_inil,ittsecitescnumereienafuraleagib(arate prin cite un spa[iu. Numerele naturale din intervalul [a. b] sunt afigate in fiEier
Implementarea Problemet:
'':*-'*--' LiMBAJUL PASCAL
i #include<fstream.h>
procedure increment(n :integcr); for-ward;
procedure scrie(n: integer);
beginwrite(g,n,'');if(n<b) then
increment(n+l);
ifstream f ("rec-ind.in");
ofstream g ("rec-ind.out");
int a,b;
void increment(int n);
void scrie(int n)
{ g<'n<'" ";if(n<b)
LIMBAJULPASCA]
increment(n: integer);
);f);close(g);
iad.in
il
APLICATII IMPLEME|{I
Recomanddri Pentru elabo
inte de a trece la imPler
uect rela[ia recursivd; Pot
I relatia recursivi este o fo
o relatia de recuren![ trebu
existen(ei in sub
r evita autoaPelarea la inf
listei Parametriluitili dezavantajoase. Pot I
uebuie stocate in stivd, da
i frecvente in elabora
o daci subprogramul recr
referinla (Prin adresi) 9i
temului se va umPle fo
chiar gi Pentru uo numfu
I un autoapel incorect cuI conditia de ieqire din a
stivei sistem (mesajul: I
:lnteger:
ext;
at a,b'.i
f,g:te
II Vdl t
i^,t
I end;:
1
:_^*-.."
"": "". ,.128, " ,i!;
e are anumlte partlcu
IAJUL C/C ++
l- se poate apela o
lanati, folosind o
nli) care este t,
pogramului unlatr formali). Aceastd
mite referirea 1a ea
nrl apelarii. Corpul
recedat din nou de
.c bl.
e naturale a qi b (a<
mt afigate in figierul
eleazd subprogramul
nera toate numerele
po_eramul scrie(n),
Ia transmis gi apoi
ryrire (n<b).
UUL C/Cff.I,.
r);out");
€/G**;.
APL/IC AT I I t MPLE ME NT ATE REC U RSiV
f,.ecomanddri pentru elaborarea unui subprogram recursiv:
inte de a trece la implementarea unui subprogram recursiv este necesar si se identifice
qect relatia recursivd; pot exista doud situalii:
r relatia recursivi este o formula de recurenla matematicd;
r relafia de recuren{d trebuie determinatd din enunful problemei.
itatea existenfei in subprogram a unei condilii corecte de oprire din autoapeluri pentru a
re evita autoapelarea la infinit.
listei parametrilor formali ai subprogramului poate elimina riscul unei recursl-
rir{i dezavantajoase. Pot fi elirninate din lista parametrilor fonnali acele argumente care nu
tebuie stocate in stivd, declarflnduJe ca variabile globale.
&E$€li frecvente in elaborarea unui program recursiv:
r daca subprogramul recursiv conline parametrii formali transmigi prin valoare sau prin
referin[d (prin adresa) gi/sau variabile locale care ocupd spa{iu mare de memorie, stiva sis-
temului se va umple foarte repede, ajungdndu-se la depaqirea spa{iului rezervat acesteia
chiar qi pentru un numdr mic de autoapeluri;
r un autoapel incorect conduce la un rezultat eronat;
r conditia de iegire din autoapel greqit formulatd conduce la autoapel infinit qi umplerea
stivei sistem (mesajul: Stack ove(low).D;
@*t
Concluzie:Pentru anumili algoritmi .ri. po"Urt
reprezentare simpld, iterativa./ Recursivitatea rednce complu,itatea unor algoitrni.y' De$i programele recursive sunt mai dificil de elaborat, totu$i ele sunt foarte
fo rm dnd b az a limb aj e lo r tut eli g enl ei ar tifi c i al e.
/ La alegerea intre metoda recursivd Si iterativd in elaborarea unui program, trebuiese ,tind seama de eficienla ofenfi programului de cdtre fiecare dintre variante,timpul de rulare ;i spaliul de memorie necesar. Nu in ultimul rdnd, trebuiecl ari t ate a p ro gr amului.
1.,SIRUL tUI FIBONACCIsd se afiqeze al n-lea termen al qirului lui Fibonacci, folosind un program care sd
urmdtoarea definifle:
fibo(n) ={':.ou:^:."[fibo(n - 1) + fibo (n - 2) , altfel
Solufie:
Se scrie o funcfie rec.ursivirfibo(n), care va returna al n-leadefinifiei, acesta este egal cu predecesorul siu t, pe care l-aranteprecedentul sdu fn-, pe care l-ar returna apelulfibo(n-2). Deciapar doui apeluri recursive. Condilia de oprire din lan[ul,,n= I sau, n= 2".
termen al qirului.
returna apelul fibo(n- l)in interiorul apelului
de apeluri recursive
2. CEL MAI MARE DTVIZC
indu-se doud numere intrq
trumere, folosind:
e) algoritmul lui Euclid (se a
h) algoritmul lui Nicomachu
cmmdc(a
a) Algoritmul lui Euclid
$e construieEte funcfia recur
respectiv b sau r. Algo
relatie de ordine intre ele
de instrucfiuni (un "Pas
apeluri recursive are loc c
LIMBAJUIjIPASCAL
cmmdc(a,b : integer) :inte
mod b <>0 then
:=cmmdc(b, a mod b)
cmmdc:=b;
H' a = ');readln(a);
6 = ');leadln(b)i('r?r' ,'rbr' )=
t, cmmd
L) Algoritmul lui Nicomad
Se construieqte funclia recut
de instruc(iuni (un "pa
& apeluri recursive are loc
definilia recursivi a algc
instruc{iune if aceastl de
5i cu orice relalie de ordir
d parametrii efectivi tn
;$@
wntarea recursivd
ele sunt foarte
unui program,
tate variante,
rdnd, trebuie
prro$am care sd
nen al sirului. Conrna apelul fibo(n-l)meriorul apeluluiapeluri recursive
(n-2));
c:<n<<": "<<fibo(n);
Z CEL MAI MARE DIVIZOR COMUNDindu-se doui numere intregi a qi h sd se determine cel mai mare divizor comun al celor
numere, folosind:
el algoritmul lui Euclid (se aplica algoritmul lui Euclid, cunoscut la matematicd);
b) algoritmul lui Nicomachus, descris de urmdtoarea relalie:
( a,dacda:bcmrrdc(a,b) : { cmmdc((a-b),b), dacd a>b
( cmmdc(a, (b-a)), in rest
{Algoritmul lui EuclidSe construieqte funcgia recursivd cmmdc(a,b) care va returna valoarea ultimului rest diferit
respectiv b sau r. Algoritmul prelucreazd perechi de date intregi, de orice semn qi cu
rela{ie de ordine intre ele. Se observi cd Ia fiecare autoapel funclia va executa aceeaqi
de instruc{iuni (un "pas" al algoritmului), dar cu alte valori ale lui a gi }. Oprirea lanfu-
apeluri recursive are loc cdnd restul imp6rlirii intregi al celor doi parametri este zero.
l) Algoritmul lui Nicomachus
Se construiegte func{ia recursivd cmmdc(a,b), la fiecare autoapel funcfia va executa aceeaqi
de instruc{iuni (un "pas" al algoritmului), dar cu alte valori ale lui a gi D. Oprirea lanfu-
& apeluri recursive are loc cind cei doi parametri au devenit egali. Pe baza acestor obser-
i. definilia recursivd a algoritmului este evidentd, iar func{ia recursivd transpune efectiv
instruc{iune if aceastd defini{e. Algoritmul prelucreazd perechi de date intregi, de orice
;i cu orice rela{ie de ordine intre ele, dar la apelul din programul principal sau din funclia
parametrii efectivi trebuie s[ fie in valoare absolutd.
@xr
uLiPASC]{-L-
function cmmdc(a,b:integer):integer;
begin
if (a: b) then cmndc::aelse if (a>b) then cmmdc:: cmmdc(a-b,b)
else cmmdc:=crnmdc(a,b-a);
end;
begin;
clrscr;
write(' a = ');readln(a);
write(' b : ');readln(b);writeln(' (',a,' l,bi) =', cmmdc(abs(a),abs(b)));
end.
#include<iostream.h>
#include<math.h>
int cmmdc(int a, int b)
{if (a-b) return a;
else if (a>b) return (cmmdc(
else return (cmmdc(a,b-a));It
void main0
{ int a,b;
cout<(" 4 = .,;cin>>ai
cout<<,,b =.,;cin>>b;cout<<" ("{aa(a"r"aabaa") =cout<<cmmdc(abs(a),abs(b));
TII DE LAI
3. CITIREA ELEMENTELOR UNUI TABTOU UNIDIMENSIONATSd se scrie un program pentm citirea qi afigarea elementelor unui qir y cu ,n elemente
Dfunensiunea girului qi elementele acestuia se citesc de la tastaturd, iar afiqarea se va face peRezolvare:
Pentru citirea eleurentelor qirului de numere se fiilizeazd subprogramul recursiv citireare ca paramnetru indicele primului element citit. Acest indice este incrementat la fiautoapel, pdnd cdnd devine egal cu dimensiunea n a,sirului. Condiqia de oprire este i=n. inasemdndtor se construieqte qi subprogramul recursiv de afigare a elementelor tabloului.
vary:arrayfl..20] of real; m: integer;procedure citeste(i : integer);
begin
if( i<=m) then
begin
read( y[i]);citire(i+1)
end;
end;
begin
read(m) ; citeste(l);end.
i un program pentru
utilizind subPn
element al qinrlui
pe monitor (separa!
iti care este efectul
rezolva cu ajutonrl
..,'- ,' LrMBA.IIry[..20,1..20]of int
citire(i,mj,n:integi
=m) then
=n) then
tcsinwa(tatil Lj l) ; citire(i"m.1
d
dtke(i+l,m,l,n);
ilk=n) then
{i1;,5.nbecinwrite(g,a[i][],''); afisr
cod;
mign(f,' cit-mat. in' );rese
mim(g,'cit-mat.out');retred(lm,n); citire(l,ndsare(1,m,1,n); close
figierul natricak:linie a fiqierului se cits
pe urmdtoarele lll liniiDatele de ieqire x
Si se scrie un prognm
e) citirea elementelor r
b) afiqarea elementelotLt$w
ffiilrfi,:m.h>Lh>
:a int b)
llrn a;
return (cmmdc(a (cmmdc(a,b-a));
';cin>>a'';cio>b.3a<<"r"<<6<<') =
dabs(a),abs(b));
I il m elemente
a se va face pe
rul recursiv citiremcrementat laprire este i=n. indor tabloului.
A II DE LAp'ARATORun program pentru completarea elementelor unui gir y de numere naturale qi afiqarea
utilizdnd subprograme recursive. Nurndrul de elemente r este citit de la tasturi,* ae element al qirului este generat aleatoriu (O<y[il< 80, i=l,t ). Elementele girului se vorpe monitor (separate prin cite un spa!iu).
i care este efectul programului urmitor. Formulafi un enun{ al unei aplicafii care se
rezolva cu ajutoml acestui program.
lfin figierul matrice.in se citeqte o matrice a cu m x n elemente intregi, astfel: de pe prima
f,nie a fiqierului se citesc numerele naturale nenule m gi r separate prin cdte un spa{iu, iar de
pe urmdtoarele lll linii se citesc n numere intregi separate prin cdte un spa[iu.
Datele de ieqire se vor afiqa, pe linii distincte, in fiqierul malrice.oulSi se scrie un program pentru :
e) citirea elementelor matricei din fiqierul matrice.in
b) afiqarea elementelor matricei in fiqierul matrice,out
@xr
4. SUMA ETEMENTELOR UNUI ,SIR
Se considerd un qir x cu ,, numere reale. Sa se calculeze suma celor n elemente ale ta
Datele de intrare se citesc din fiqierul suma.in, astfel: de pe prirna linie se citeqtesiunea n a tabloului numeric (ze N, 1<n<100), iar de pe urmitoarea linie se citesc nreale separate prin cite un spa[iu.
in fiqierul suma,out se va afiga qirul dat, pe prima linie, iar urmdtoarea linie un numircu trei zecimale, reprezentdnd suma elementelor.
I.ICATIE DE L,
considerd un gir :ia max.in astfel: de
din qir), iar dt
inti elementele q
se se scrie cAte un p
Determinarea simult
Maximul qi minimul
Exemplu: minln5
621-lModifica{i program
lna{i simultan (in ar
ia se vor afiga iExemplu: min ma
5
621',Modihcafi programr
inali simultan (ir
maximului in qir.lt
in f,rgierul min_n
Exemplu: minJru,
5
621,'
PRODUSUT SCAL
considerd doul qin
n, sd se calculeze p
scalar se defir
iasi indici din cele tdatele problemr
le de intrare se ci
r (dimensiunea celt
cLte un spa{iu reprez
prin c6te un spagir
pe monitor.
tipuri de date.
*$@
'lor n elemente ale tablnima linie se cite$te
rea linie se citesc z
etoarea linie un nurnir
BAJUL CIC*
-h>
l.h>
io');-out"):I[
crnre(i+1); )
rn(3)<<xIi]<<" ";
)
qi-1);
):
rctprecision(3)<<suma(l ;
Exemplu: min_maxin5
6217 -3
min_maxoutMinimul = -3
Maxirnul = 7
minltozoutMinimul = -3
Pozilia= 5
mip_map.out
Minimul = -3 pe pozilia 5
Maximul = 7 pe pozilia 4
,.ICATIE OE LASORATOX,k consideri un Eir x cu n elemente intregi. Datele de intrare se citesc din fiqierutain-max.in astfel: de pe prima linie un numdr n nafural nenul (care reprezintd nurrdrul deternente din qir), iar de pe urmitoarea linie n valori intregi separate prin c6te un spafiu (carercrezinta elementele qirului x) .
Sr se se scrie cAte un program pentru fiecare cerin{i :
r Determinarea simultani (in acelagi subprogram) a minimului qi a maximului.\faximul qi minimul se vor afiqa in figierul min max.oat.
r \lodificali programul construit la punctul a) (salva1i-l cu un alt nume) astfel incdt sii simultan (in acelaqi subprogram) minimul gi pozilia acesruia in Eir. Minimul qi po-
cestuia se vor afiga in fiqierul minJtoz,out.Exemplu: min_maxin
5
6 217 -3
: \{odifica{i programul construit la punctul a) sau b) (salva{i-l cu un alt nume) astfel incdtinaqi simultan (in acelagi subprogram) minimul, poziliaminimului in gir, maximul Ei
maximului in gir. Minimul, pozilia minimului, maxirnului gi poziqia maximului in qir se
d:a in lrqierul min max|.out.Exemplu: min max.in
5
6 217 -3
'. PRODUSUT SCATAR
5e considerd doul qiruri de r numere intregi x Ei y, avAnd amAndoud acelaqi numdr de ele-n. sd se calculeze produsul lor scalar.
k:dusul scalar se defineEte ca fiind un numdr rezultat prin insumarea produselor elementelorasi indici din cele doua tablouri.
ktru datele problemei, produsul scalar = xlyt + x2y2 * ... * Xnyn.
)arele de intrare se citesc din fiqierul scular.in astfel: de pe prima linie un numdr naturallr (dimensiunea celor doui tablouri), de pe urmitoarea linie cdte r valori intregi, separate
:ire un spa{iu reprezentdnd elementele tabloului x, iar de pe ultima linie n valori intregi,prin cite un spa{iu reprezentdnd elementele tablouluiy. Valoarea produsului scalar se va
-E:servalie: Problerna are scopul de a exemplifica un proces recursiv in care participa mairpuri de date.
Rezolvare:
Func{ia recursivd prime,ste ca parametru indicele curent al elementelor din celetablouri, al ciror produs este depus pe nivelul curent al stivei sistern. Condilia de oprireindeplinita atunci cand indicele este egal cu r . Tablourile au fost declarate global.
type vect=arrayI I ..20]of integer;
var n:integer;
x,y: vect;
f:text;
function prod_sc(i:integer):integer;
begin
if (i<=n) then
prod_sc:= x[i]*y[i] + prod_sc(i+l)else prod_sc:= 0 ;
end;
procedure citeste(n : integer; var x:vect);begin
for i:=1 to n do
read(fi x[i])end;
end;
beginassign('scalar.in'); reset(f); read([n);citeste(n,x); citeste(n,y);
write(' produsul scalar = ', prod sc(1));close(f)
end.
4fl1 QAtry -A F -+t p 98 lrq 8- _
l. Se considerd un Eir x c\ n (0<n<10) elemente reale. Datele de intrare se citesc din fisioperatiiin astfel: de pe prima linie un numdr z natural nenul (care reprezintd numdrul de
mente din gir), iar de pe urmrtoarea linie r valori intregi separate prin c6te un spa{iu (reprezintir elementele girului x).
Datele de ieqire se vor afiqa, pe linii distincte, in figierul operatii.out
se scrle un program:
citirea elementelor qirului din I
afigarea elementelor qirului in
determinarea gi afigarea sumei
determinarea qi afigarea Produ
determinarea .si afigarea nt'm:
zecimale);
&terminarea Ei afiqarea medit
patru zecimale).
3rs4 23 2 4
consideri o matrice A,r*snice.in astfel: de Pe Prima lit
I iinii se citesc n numere intreg
&nerul matrice.out. Cerinle:
a) Citirea elemetrtelo
b) Afigarea elementel
c) Determinarea ri dd) Determinarea $i ai
e) Afigarea elemente
! Afiqarea elementel
g) DuPd interschimb
leatru fiecare cerin{6 scrieqi cit
[remplu:
{I * {$r*x**l$'qa-itffir r ffikj*Irs4llp
i{
Dl;
nentelor din cele
Condilia de oprireate global.
prod_sc(i+l));
ar = "<<prod_
se citesc din fidntd numdrul de
cite un spa{iu
Si se scrie un program:
et citirea elementelor girului din fiqierul operatii,in
ht afi$area elementelor girului in figierul operatiioutc I detenninarea gi afigarea sumei elementelor girului (cu exact trei zecimale);
dl determinarea qi afiqarea produsului elementelor girului (cu exact trei zecimale);
el determinarea gi afiqarea numdrului de elemente strict negative din Eir (cu exact doud
zecimale);
f,l determinarea gi afiqarea mediei aritmetice a elementelor strict pozitive din gir (cu exact
patru zecimale).
[remplu:
3154 23 2 4
operatiiout3154 2324
Suma = 198
Produsul :1020096
Numarul de elemente irnpare = 2
Suma ultimelor cifre = 18
Se considerd o matrice A,rc'l elemente intregi. Datele de intrare se citesc din figierul
rutrice.in astfel: de pe prima linie se citegte numdrul natural n nenul, iar de pe urm[toarele
r linii se citesc n numere inhegi separate prin cite un spafiu. Datele de ieqire se vor afiqa inisierul matrice. out. Cerinfe:
a) Citirea elementelor matricei din fiqier.
b) Afiqarea elementelor matricei in figierul de ieqire.
c) Determinarea Ei afiqarea sumei elementelor de pe diagonala principala.
d) Determinarea gi afigarea produsului elementelor de pe diagonala secundard.
e) Afigarea elementelor situate deasupra diagonalei principale.
f) Afigarea elementelor situate sub diagonala secundard.
g) Dupn interschimbarea liniei I cu linia n sd se afigeze noua matrice.
lentru fiecare cerin{d scrie}i cdte un subprogram recursiv.
x)
6".- *,ffi$;WS,.6$
6. ORDONAREA ELEMENTELOR UNUI SIRSe considerd un gir x cu ,, numere intregi. S[ se ordoneze crescdtor elementele sirului.Dimensiunea qirului gi cele n elemente ale sale se citesc de la tastaturi, iar girul
afiqeazd pe ecran.
Rezolvare:
subprogramul recursiv ordon(a,n) va returna ,sirul ordonat crescdtor,schimbdrii. Autoapelurile se incheie c6nd este indeplinit[ condiqia de oprire
prin metoda
i=n.
7. SCRIEREA UNUI NUM5e citeEte un numdr natural
Rrolvare:Subprogramul recursiv 6crciml impar(irii lui n la b (c
cdt este 0).
LIMBAJUL PASCAI
crt;
qb:integer
ure baza(n:integer; b:ir
r:- mod b;
lf (n>:b)baza(t div b,b);
rrite(r);ad;
bryrn
clncr;rrite(' n = ');readln(n);
rEpeat
urite(' baza = ');readln(b)
until(b<2 and b>10 );rrite(n,' )', b aza(n,b);
d-
E. INVERSAREA UNUI CI
Si se inverseze caracterele
hti spaliu.
Reolvare:
Se scrie un subprogram frrinou caracter c. Condi$a dt
ryaliu. Afi qarea caractere
iu.cout). Cind este indepl
sunt extrase qi afiqate
type vect=array[ 1 ..20]of integer;
var n,i:integer;
a:vect;
procedure ordon(var x:vect; n,i:integer)var aux:integer;
begin
if i<n then
if x[i]>x[i+1] then
begin
aux:=x[i];x[i]:=xIi+l];x[i+1]:=aux;ordon(x,n,1)
end
else ordon(x,n,i+l)end;
procedure citeste(n,x);
begin
for i:=l to n do
begin
write(' elementul ',i,'= '); readln(x[i])end;
end;
begin;
write(' n = ');readln(n);writeln(' Elementele sirului a');writeln;citeste(n,a) ;writeln;ordon(a,n,1);
writeln(' sirul ordonat crescator : ,);
for i:=l to n do write(a[i],' ')end.
#include<iostream.h>
int vect[20],n;
void ordon(int x,int n, int i){ int aux;
if(i<n)if (x[i]>xIi+1])
{ aux=x[i];x[i]=x[i+1];x[i+1]=aux;ordon(x,n,1);
)else ordon(x,n,i+1);
)
void citeste( int n, int x)
{int i;for (i=1;i<=n;i++)
{cout<<" elementul "<ai<<" ";cin>>xIi];
)
)
void main0
{cout<<"1=",cin)>nlcout<<" citirea siruiui a "<<endl;
citeste(n,a);
cout<<endl;
ordon(a,n, I );cout<<" Sirul ordonat = "<<endlifor(i= I ;i<=;i++) cout<<a[i]<<" ";
)
i:
*$w
t)
;
ll;[;rl);
relementele girului.
mr4 iar qirul
gint n, int i)
,*l);
I int x;
+)
ntll "<<i<<" ";
in >n;
sirului a "<<endl;
donat = "<<endl;
) cout<<a[i]<<" ";
7. SCRIEREA UNUI NUMAN iNTN-O gAzA
Se citegte un nurndr natural nenul n. Sd se transformeinbaza D, unde b=2..9.
Rezolvare:
Subprogramul recursiv baza(n) memoreazape fiecare nivel al stivei restul impar{irii lui n la
s cirul imp[r{irii lui n la b (care reprezintl noua valoare a lui n). Condilia de oprire este n=0
cdt este 0).
c€s crt;
rar n b:integer
Ur,ocedure baza(n:integer; b:integer);lar r:integer;
uegin
r:=n mod b;
rf (n>:b)baza(n div b,b);
*rite(r);end;
begtn
clncr;rrite(' n = ');readln(n);
repeat
write(' baza =');readln(b);until(b<2 and b>10 );rrite(n,'-)', baza(n,b);
crd.
S. INVERSAREA UNUI CUVANT
Si se inverseze caracterele unui cuvAnt citit de la tastaturd, literd cu literi pdnl la intdlnirea
bi spaliu.
Ra,olvare:
Se scrie un subprogram fbr[ parametri formali, inversQ/invers.Lafrecare autoapel, se citeqte
Dou caracter c. Condilia de oprire a lan{ului de apeluri este indepliniti cind caracterul citit
spafiu. Afiqarea caracterelor in ordine inversd este realizati printr-o operalie de scriere
Cdnd este indeplinita condilia de oprire, caracterele depuse in stivd la fiecare
mnpel sunt extrase gi afigate (in ordine inversd).
@xi
procedure inver;var c:char;
begin
readln(c);
if (c+' .) then inver;write(c);
end;
begin
inver;
end.
#include<iostream.h>
void inverQ
{ char c;
cin>>c;
if (c!='0')
{inverQ;cout<<c;
)
var x,y:integer;
procedure t( x:integer; y:integer);begin
if x>0 then
begin
x:=-l;y:=y+l; t(x,y);end;
end;
begin
x:=3;y::1;write(x,' ',yi ,);t(x,y);writeln(x,' .,y);
end.
#include <iostream.h>
int x,y:integer;void t(int x, int y)
{ if (x>0)
{ x=x-l ; y=y+l;t(x,y);
))
void mainQ
{x=3;y=1'g6gf((1((" ..<<y<<,, *.
t(x,y);gg11[(1(" .,<<y<ar, .,(<endl;
)
G.-'*
e)3101.tipdreasci3l0l.tipdreascl 3 l0 4.
subprograme recursr
iile de recuren{d, intr-u
(n +l)P^-,(.
Si se stabilileascd care es
iltr>O) then
begin
writeln('***');s(Y-l);writeln('aaa');end
l) Modifica[i subProgramt
incit sd se afiqeze :
**aa
**aa
**aa
**aa
$e di urmltoarea func{ie re
url x real. Cerin{e:
e) Scrieli expresia duPa ca
I- Polinomui Ceblgev de sP
ll , dacan=
T,(x)=lx,dacdn=1
l2xT,-,1x1 '
rwgtFNE?t??-usr1. Se considerd urmdtorul program :
Precizali ce va tipdri programul de mai sus:a)3lll; b)3103; c)3102; d)3131;Scriefi modificirile in program astfel inc6t dupi execulie s6 seScrie{i modificirile in program astfel incdt dupd execulie si se
N$@
ffiB#ffi,fiCf;ream.h>
em-h>
Y}
y = y+l;
kayaa" ..;
<<y<a" "<<endl;
e)3101.e tipdreascd3 I 0 I.e tipireasci3l04.
subprograme recursive pentru calculul valorii urmatoarelor polinoame care verifici
relatiile de recuren(d, intr-un punctx real, cunoscut.
l" Polinomul Cebiqev de sPe{a I
11 , dacd n: oI
T,(x) = \x , daca n = 1
lz*r, ,1*y - T, r(*) ,
2. Polinomul Cebdgev de sPe{a II
U,,(*) =
fl , daca n=0
)2x,dora n=1
lz*u,,-,ti - u, ,(*) ,
3. Polinomul lui Legendre
ll , daca n=0(n +l)P,*,(x) = i x, daca n =1
lQ"*l)xP,(x) -nP,r(x), dacd n=o
Si se stabilileascd care este efectul urmitorului subprogram recursiv pentru apelul s(4):
b) Modihcati subprogramul s,i precizali apelul din programul principayfunc{ia principali ast-
focit s[ se afiqeze :
**aa
**aa
**aa
**aa
Se dA urmbtoarea func(ie recursivd care calculeazavaloareapolinomului lui Hermite in punc-
ml x real. Cerin{e:
e) Scrieli expresia dupd care se calculeazd valoarea polinomului, punind in eviden{a recuren[a
tici.
@*r
s(y: integer) ;L
r r-r'>0) then
begin
writeln('***');(v-l);writeln('aaa');end
float her(float x, int n)
{ if(n==0) retum 1;
else
if (n==l) retum 2*x;else
retum 2*x*her(x,n-l ) - 2*(n- l)*her(x,n-2);
)
b) Care este valoarea afiqati pentru apelul her(l,3):(i) +; (ii)2; (iii) 0; (iv) 8; (u) a.
c) Sa se scrie un subprogram iterativ echivalent cu cel dat.
5. Se considerd urmdtorul subprogram:
a) Ce se va afis,a pentru n=I8 s,i s=l ?
(i)219321; (i0 21321; (iii) tB2t32t; (iv)2t931; (v)213b) Scrieli instruc{iunea sau instruc{iunile necesare apelului acestui subprogram, prec
limbajul utilizat.c) Formulaf un enun! pebaza cdruia sd poati fi aplicat acest subprogram.
sirul de numere defini
rl Si se scrie un subProg
a parametrului re
)t Care este valoarea ter
5: (ii) 6;
urmatorul subProgran
' VARIANTA PI
u(a:integer)
begin
if a div 8 > 0 the
write(a mod 8)
e) Pentru apelul u(39) t
$)2t 7a; (
L) Transformali subPrq
$ utilizatd.
di urmltorul subPrq
VARIANTAI
fimction f(x:integer) :ir
beginifx >=15tl
(
end;
'l Sd se identihce ca
iinpunctulx=5;i
end;
ui$ffi$v
i)
t\
D - 2*1n- 1 ;*1r.r(x,n-2);
i"
pr{;k%d==0)=t div d;
trk{"'<<p(" *.
<endl;
l93l; (v)2mbprogram,
gram.
lm,dacan=0 meRl"
a,*t= \-,daca n este Par
loo. - l, altfel
r) Sd se scrie un subprogram recursiv pentru calculul termenului reN, n>0, pentru o valoare
qirul de numere dehnit astfel:
I a parametrului real rt.
l) Care este valoarea termenului a* dacdm:2"
5; (ii) 6; (iii) 12; (iv) 7;
urmdtorul subprogram recursiv:
(v) 2.
4.
e) Pentru apelul u(39) precizali: numdrul de autoapeluri ce se va afiqa la revenirea din sub-
(i)2t74; (11)tl7a; $$21 a7; (iv)L147; (v)3147'
) Transforma{i subprogramul recursiv intr-un subprogram iterativ, precizAndu-se varianta
t3t
i utilizatd.
di urmdtorul subprogram recursiv pentru calculul valorilor unei funclii:
e) Sd se identifice care este varianta corectl a conlinutului stivei pentru calculul valorii
iei in punctul x=5 9i care este valoarea func{iei'
@er
void u(int a)
{ if (a/8 >0 ) u(a div 8);
cout<<a%8;
)
u(a:integer)
beginif a div 8 > 0 then u(a div 8);
write(a mod 8)
end;
int f(int x) .
{ if (x >15 ) return x-2;
else return f(x+4) ;
)
fimction f(x:integer) :integer;
beginif x >= 15 then f::x-2
else fl=f(x+4)
end;
(D
Eil ffi r-,=r--l Eil ffi HHJLilEE=]H(ii)ffiH====EJLilEEtr]tr
(iii)
"Ar^ G
\
DIV,DIU DE CAZ _ CAA
lnual are loc Campionatul tclante pe locul I din fi
ilrr,riere fiecare echipd prime
Toate echipele sunt impdrtitt
- ciptigitorul unei grupe s
xmigrupd pi echipa ci;tiginpegita ?n subgrupe, pAN r
echipd. Echipa care esle
corespunzdtoare.Ftlala are loc intre echip* t
5i presupunem cd in anul aaFrima grupd este formati dt
(iv) {14,15, 16,l irle cu numere de inrqistz
E&
EIEI
l-n 1
Hillqlt5l
(iv)EIrzllsl-5-
Hffi=tr=EtrffiHH=HE
Figura 47.
b) Care sunt valorile posibile pe care le poate lua f ?
(i) {13,14,15,16}; (ii) {12,13,15,16}; (iii) {t2, 14,16,18};(v) o infinitate de valori.
9. Implementa{i recursiv preluarile specifice structurii dinamice de tip coadd.10. Implementa{i recursiv prelucrarile specifice structurii dinamice de tip stivti.11. Explicafi aspectul recurent al structurilor dinamice arborescente (arborele de familie).
Otganizatorii afipeazi, pe sitt
semigrupelor qi desft
;.,jfir"'.pfuGrupa I
Echipele care joaci mecir
echipal-echipa2
echipa cdgtigdtoare
din meciul l. 1 . - echipa 3
echipa4-echipa5
j echipa cigtigatoare din rnechipa cdgtigatoare din m
Finala are loc intre echip
Semifinala are loc intre et
t$M