informatica-functii siruri caractere

143

Upload: bogdan-iudean

Post on 23-Jan-2016

132 views

Category:

Documents


1 download

DESCRIPTION

Aici se afla o lista a functiilor care opereaza asupra sirurilor de caractere

TRANSCRIPT

Page 1: Informatica-functii siruri caractere
Page 2: Informatica-functii siruri caractere

*

. 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

Page 3: Informatica-functii siruri caractere

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.!

{

Page 4: Informatica-functii siruri caractere

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\.

Page 5: Informatica-functii siruri caractere

# 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;'

Page 6: Informatica-functii siruri caractere

_"_,!

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

Page 7: Informatica-functii siruri caractere

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

Page 8: Informatica-functii siruri caractere

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

Page 9: Informatica-functii siruri caractere

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

Page 10: Informatica-functii siruri caractere

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;)

Page 11: Informatica-functii siruri caractere

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&

Page 12: Informatica-functii siruri caractere

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!

Page 13: Informatica-functii siruri caractere

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

Page 14: Informatica-functii siruri caractere

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

Page 15: Informatica-functii siruri caractere

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

Page 16: Informatica-functii siruri caractere

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

Page 17: Informatica-functii siruri caractere

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:

Page 18: Informatica-functii siruri caractere

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

Page 19: Informatica-functii siruri caractere

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:]'

Page 20: Informatica-functii siruri caractere

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

Page 21: Informatica-functii siruri caractere

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{@

Page 22: Informatica-functii siruri caractere

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

!{

Page 23: Informatica-functii siruri caractere

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

Page 24: Informatica-functii siruri caractere

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

Page 25: Informatica-functii siruri caractere

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

Page 26: Informatica-functii siruri caractere

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\' ;

Page 27: Informatica-functii siruri caractere

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

Page 28: Informatica-functii siruri caractere

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.

@*;

Page 29: Informatica-functii siruri caractere

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

Page 30: Informatica-functii siruri caractere

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

Page 31: Informatica-functii siruri caractere

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'

Page 32: Informatica-functii siruri caractere

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

Page 33: Informatica-functii siruri caractere

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

Page 34: Informatica-functii siruri caractere

'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

Page 35: Informatica-functii siruri caractere

- 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)

Page 36: Informatica-functii siruri caractere

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

Page 37: Informatica-functii siruri caractere

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

Page 38: Informatica-functii siruri caractere

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"{

Page 39: Informatica-functii siruri caractere

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

Page 40: Informatica-functii siruri caractere

""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

Page 41: Informatica-functii siruri caractere

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

|::.

Page 42: Informatica-functii siruri caractere

-

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

Page 43: Informatica-functii siruri caractere

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'

Page 44: Informatica-functii siruri caractere

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

Page 45: Informatica-functii siruri caractere

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

Page 46: Informatica-functii siruri caractere

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.

Page 47: Informatica-functii siruri caractere

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

Page 48: Informatica-functii siruri caractere

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-

Page 49: Informatica-functii siruri caractere

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'

Page 50: Informatica-functii siruri caractere

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'

Page 51: Informatica-functii siruri caractere

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

Page 52: Informatica-functii siruri caractere

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

Page 53: Informatica-functii siruri caractere

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@

Page 54: Informatica-functii siruri caractere

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

Page 55: Informatica-functii siruri caractere

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-

Page 56: Informatica-functii siruri caractere

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

Page 57: Informatica-functii siruri caractere

// 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

Page 58: Informatica-functii siruri caractere

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

Page 59: Informatica-functii siruri caractere

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)"

Page 60: Informatica-functii siruri caractere

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,, \:

Page 61: Informatica-functii siruri caractere

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

Page 62: Informatica-functii siruri caractere

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

Page 63: Informatica-functii siruri caractere

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!

Page 64: Informatica-functii siruri caractere

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.

@'

Page 65: Informatica-functii siruri caractere

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

Page 66: Informatica-functii siruri caractere

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

\

\

Page 67: Informatica-functii siruri caractere

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

Page 68: Informatica-functii siruri caractere

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

Page 69: Informatica-functii siruri caractere

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

Page 70: Informatica-functii siruri caractere

€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

Page 71: Informatica-functii siruri caractere

+- 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*'

Page 72: Informatica-functii siruri caractere

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

Page 73: Informatica-functii siruri caractere

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

Page 74: Informatica-functii siruri caractere

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*

Page 75: Informatica-functii siruri caractere

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

Page 76: Informatica-functii siruri caractere

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

Page 77: Informatica-functii siruri caractere

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

Page 78: Informatica-functii siruri caractere

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

Page 79: Informatica-functii siruri caractere

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$@

Page 80: Informatica-functii siruri caractere

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

Page 81: Informatica-functii siruri caractere

.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'

Page 82: Informatica-functii siruri caractere

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]

Page 83: Informatica-functii siruri caractere

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

Page 84: Informatica-functii siruri caractere

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 -

Page 85: Informatica-functii siruri caractere

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

Page 86: Informatica-functii siruri caractere

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. '' ,*..;]: "*,):.

Page 87: Informatica-functii siruri caractere

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

Page 88: Informatica-functii siruri caractere

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

Page 89: Informatica-functii siruri caractere

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)

Page 90: Informatica-functii siruri caractere

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'.

Page 91: Informatica-functii siruri caractere

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

Page 92: Informatica-functii siruri caractere

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*

Page 93: Informatica-functii siruri caractere

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

Page 94: Informatica-functii siruri caractere

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:

Page 95: Informatica-functii siruri caractere

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'

Page 96: Informatica-functii siruri caractere

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

Page 97: Informatica-functii siruri caractere

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

$*@

Page 98: Informatica-functii siruri caractere

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;

Page 99: Informatica-functii siruri caractere

# 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

Page 100: Informatica-functii siruri caractere

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

Page 101: Informatica-functii siruri caractere

.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

Page 102: Informatica-functii siruri caractere

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";)

Page 103: Informatica-functii siruri caractere

# 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

Page 104: Informatica-functii siruri caractere

&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

Page 105: Informatica-functii siruri caractere

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 ";

Page 106: Informatica-functii siruri caractere

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

Page 107: Informatica-functii siruri caractere

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)

Page 108: Informatica-functii siruri caractere

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

Page 109: Informatica-functii siruri caractere

# 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.

Page 110: Informatica-functii siruri caractere

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

Page 111: Informatica-functii siruri caractere

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

Page 112: Informatica-functii siruri caractere

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);

Page 113: Informatica-functii siruri caractere

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."

Page 114: Informatica-functii siruri 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,,

Page 115: Informatica-functii siruri caractere

;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

Page 116: Informatica-functii siruri caractere

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

Page 117: Informatica-functii siruri caractere

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;

)

Page 118: Informatica-functii siruri caractere

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

Page 119: Informatica-functii siruri caractere

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'

Page 120: Informatica-functii siruri caractere

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.

Page 121: Informatica-functii siruri caractere

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)

Page 122: Informatica-functii siruri caractere

::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

Page 123: Informatica-functii siruri caractere

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. .

Page 124: Informatica-functii siruri caractere

: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

Page 125: Informatica-functii siruri caractere

# 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.

Page 126: Informatica-functii siruri caractere

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

Page 127: Informatica-functii siruri caractere

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!;

Page 128: Informatica-functii siruri caractere

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

Page 129: Informatica-functii siruri caractere

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

;$@

Page 130: Informatica-functii siruri caractere

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

Page 131: Informatica-functii siruri caractere

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

Page 132: Informatica-functii siruri caractere

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

Page 133: Informatica-functii siruri caractere

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.

*$@

Page 134: Informatica-functii siruri caractere

'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.

Page 135: Informatica-functii siruri caractere

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{

Page 136: Informatica-functii siruri caractere

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$

Page 137: Informatica-functii siruri caractere

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

Page 138: Informatica-functii siruri caractere

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

Page 139: Informatica-functii siruri caractere

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$@

Page 140: Informatica-functii siruri caractere

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

Page 141: Informatica-functii siruri caractere

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

Page 142: Informatica-functii siruri caractere

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;

Page 143: Informatica-functii siruri caractere

(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