Documente Academic
Documente Profesional
Documente Cultură
68depagini de Probleme Rezolvate Si Teorieinpascal
68depagini de Probleme Rezolvate Si Teorieinpascal
PREFA ..........................................................................................................................................9
Capitolul 1.
PROBLEME SIMPLE
1.1. Ghid de lucru.............................................................................................................................11
1.2. Numere pitagorice .....................................................................................................................14
1.3. Probleme propuse ......................................................................................................................15
Capitolul 2.
PROBLEME CU IRURI DE NUMERE
2.1. Numere distincte .......................................................................................................................21
2.2. ir derivat din numerele naturale ..............................................................................................23
2.3. Probleme propuse ......................................................................................................................25
Capitolul 3.
PROBLEME REZOLVATE FOLOSIND VECTORI
3.1. Numrul punctelor din cerc ......................................................................................................35
3.2. Interclasare ................................................................................................................................36
3.3. Probleme propuse ......................................................................................................................38
Capitolul 4.
PROBLEME CU MATRICE
4.1. Construirea unei matrice ...........................................................................................................41
4.2. Generarea unei matrice dintr-un ir ..........................................................................................42
4.3. Probleme propuse ......................................................................................................................43
Capitolul 5.
SUBALGORITMI
5.1. Reuniunea unor mulimi ...........................................................................................................51
5.2. Numere prime ...........................................................................................................................54
5.3. Probleme propuse ......................................................................................................................55
Capitolul 6.
PROBLEME REZOLVATE CU MATRICE
6.1. Relaii ntre persoane ................................................................................................................63
6.2. Ptrate magice ...........................................................................................................................64
6.3. Probleme propuse ......................................................................................................................66
PREFA
CAPITOLUL 1
PROBLEME SIMPLE
1.1. GHID DE LUCRU
Rezolvarea unei probleme cu ajutorul calculatorului presupune parcurgerea urmtoarelor faze:
- precizarea complet a problemei de rezolvat;
- proiectarea algoritmului de rezolvare a problemei;
- programarea propriu-zis (implementarea);
- testarea programului obinut;
- exploatarea i ntreinerea programului.
Aceste faze constituie ciclul de via al programului.
De foarte multe ori, atunci cnd beneficiarul discut cu executantul despre problema care trebuie rezolvat,
acesta d un enun vag, incomplet, dac nu chiar inexact sau contradictoriu, pentru problema de rezolvat. Urmeaz mai
multe discuii, uneori ntinse n timp, n urma crora se ajunge la un enun relativ complet i exact al problemei. ntruct
problemele propuse sunt luate din domeniul matematicii sarcina noastr va fi mult mai uoar.
Dup enunarea problemei urmeaz modelarea matematic i cutarea unei metode de rezolvare a ei. Uneori
sunt posibile mai multe moduri de rezolvare, caz n care se va alege metoda considerat cea mai potrivit scopului
urmrit. Modelarea matematic i alegerea unei metode de rezolvare se mbin aproape ntotdeauna cu conceperea
algoritmului, fiind greu s se separe una de cealalt. Activitile de mai sus constituie ceea ce numim proiectarea
programului.
Pe toat durata proiectrii trebuie menionate n scris toate deciziile luate, ntruct este posibil ca ulterior s fie
necesar o reproiectare i deci, s se revin asupra acestor decizii. Documentaia realizat este necesar n primul rnd
pentru urmtoarea faz a ciclului de via al programului, implementarea. De asemenea, n faza de ntreinere a
programului este posibil modificarea unor module, modificare n care sunt necesare s fie cunoscute i aceste decizii. E
bine ca proiectarea s fie astfel fcut nct s permit o ntreinere ct mai uoar. Faza urmtoare, implementarea sau
codificarea, const n traducerea algoritmului ntr-un limbaj de programare. Evident, prima decizie ce trebuie luat
const n alegerea limbajului de programare n care va fi scris programul. n cele ce urmeaz vom folosi n acest scop
limbajul Pascal. De multe ori se vor folosi mai multe limbaje pentru aceast activitate. De exemplu, pot exista unele
module a cror scriere se poate face numai n limbajul de asamblare. Urmeaz testarea programului elaborat, care uneori
pune n eviden erori grave de programare, erori care au dus n unele situaii la refacerea (parial sau integral) a
activitilor anterioare. Sigur c este de dorit s nu se ajung la astfel de situaii i, dac proiectarea i implementarea au
fost fcute corect, n faza de testare nu ar trebui s ntlnim erori.
Urmtoarea faz din viaa programului const n exploatarea propriu-zis a acestuia, faz n care execuia se
face cu date reale. Aceast activitate se ntinde n timp pe mai muli ani i cere adeseori schimbri n program, motiv
pentru care este cunoscut sub numele de ntreinerea programului. Este faza cea mai costisitoare i cea mai important
din viaa unui produsul real. Toat activitatea de realizare a programului trebuie s in seama de acest fapt i programul
s fie astfel conceput nct s se permit modificri n ceea ce face programul cu un numr minim de modificri n textul
acestuia. Documentarea programului presupune elaborarea unor materiale scrise n care se precizeaz toate informaiile
utile despre programul realizat. Pentru proiectarea algoritmilor vom folosi limbajul Pseudocod. Avantajele folosirii
acestui limbaj pentru proiectarea algoritmilor constau n faptul c permit programatorului s-i ndrepte complet atenia
asupra logicii rezolvrii problemei i s uite de restriciile impuse de limbajul de programare i calculatorul folosit. n
aceast faz este necesar o analiz atent a problemei n vederea gsirii unui algoritm corect proiectat.
De asemenea, proiectarea algoritmului permite evitarea duplicrii unui grup de instruciuni n mai multe pri
ale programului. Identificarea unui astfel de grup permite definirea lui ca un singur subalgoritm i folosirea acestui
subalgoritm ori de cte ori este necesar.
n descrierea unui algoritm deosebim urmtoarele activiti importante:
- specificarea problemei;
- descrierea metodei alese pentru rezolvarea problemei;
- precizarea denumirilor i semnificaiilor variabilelor folosite;
- descrierea algoritmului propriu-zis.
Astfel, dac ni se cere s calculm radicalul de ordinul 2 din x, n partea de specificare a problemei vom
meniona:
Se d un numr real nenegativ, notat prin x.
Se cere s gsim un alt numr pozitiv r astfel nct r2=x.
Pentru un informatician este clar c un astfel de numr nu se poate gsi n general prin nici un procedeu finit.
Este ns posibil s gsim o aproximare orict de bun a lui r. Deci specificarea fcut nu este corect, neputnd gsi un
algoritm care s rezolve problema n forma enunat. Vom modifica aceast specificaie, cernd s se calculeze
aproximativ r cu o eroare ce nu depete un numr real eps orict de mic.
Specificaia problemei este:
DATE eps,x;
REZULTATE r;
Urmeaz s precizm metoda de rezolvare a problemei. Se tie c exist cel puin dou posibiliti de a calcula
{rdcina n stnga}
{rdcina n dreapta}
{r-rad(x)<eps}
Sf-pentru
Sf-dac
Sf-algoritm.
Programul Pascal corespunztor este dat n continuare.
PROGRAM NRPITAGORICE;
VAR n,
S,
a,b,c,
k : integer;
BEGIN
WRITELN('Se tipresc tripletele(a,b,c) de numere pitagorice');
WRITELN('cu proprietatea: a+b+c<=n, pentru n dat');
WRITE('Dai valoarea lui n:'); READLN(n);
For k:=1 to 4 do writeln;
k:=0;
IF n<12
THEN WRITELN('Nu exista numerele cerute')
ELSE FOR S:=12 TO n DO
FOR a:=3 TO S DIV 3 DO
FOR b:=a+1 TO (S-a) DIV 2 DO
BEGIN
c:=S-a-b;
IF c*c=a*a+b*b THEN BEGIN
k:=k+1;
WRITELN('Tripletul (a,b,c)',k:3,'= ',a:3, b:3,c:3);
END {IF}
END;
READLN;
END.
1.3. PROBLEME PROPUSE
t 0 = t 1 = 1 3.
1.7. Fie n,k Z+ , nk . S se scrie un algoritm pentru calculul numrului combinrilor de n elemente luate cte
10
1.8. Fie a N. S se scrie un algoritm pentru calculul mediei aritmetice, geometrice i armonice a tuturor
divizorilor lui a.
1.9. Fie funcia lui Euler : N N, unde (n) este numrul numerelor relativ prime cu n i mai mici ca n. S se
tipreasc valorile (k), k=1,2,...,m, pentru mN dat.
1.10. Fie n,k Z, n k. S se scrie un algoritm pentru calculul sumei
S = Akn + C kn + Pn 4.
1.11. S se determine toate numerele ntregi de trei cifre abc 5 cu proprietatea
abc = a 3 + b3 + c3 6.
1.12. Se dau numerele z,l,a . S se determine dac tripletul (z,l,a) reprezint o dat calendaristic a secolului
nostru.
1.13. Se d o zi (z,l,a) dintr-un an. Se cere s se determine a cta zi din acel an este aceast zi.
1.14. Se consider ( z n , l n , a n ) 7 data naterii unei persoane i
determine vrsta, n zile, a persoanei respective.
( z c , l c ,a c ) 8 o dat curent. S se
1.15. Se dau datele de natere ( z1 , l 1 , a1 ) si ( z 2 , l 2 , a 2 ) 9 a dou persoane. Se cere s se precizeze care din cele
dou persoane este mai tnr, prin indicatorul r {0,1,2} (0 dac au aceeai vrst, 1 dac prima persoan este mai
tnr).
1.16. Cunoscnd n ce zi din sptmn a fost 1 ianuarie, s se scrie un algoritm ce determin ziua din
sptmn n care este a n-a zi a anului.
1.17. Anumite numere prime i pstreaz proprietatea de a rmne prime pentru toate permutrile cifrelor lor.
Ex. 13 i 31; 131,113 i 311, etc.). S se scrie un algoritm care determin numerele prime "permutabile", mai mici dect
un numr m dat.
1.18. O formul de generare a unui ir de numere (yi) este
y n = n2 - 79n + 1601 10.
Se cere algoritmul care determin pentru un numr n {1,...,90} cte dintre primele n numere din acest ir sunt prime.
1.19. S se scrie un algoritm care s exprime orice sum de lei S, n minimum de monede de 1 leu, 3 lei, 5 lei,
10 lei , 20 lei, 50 lei i 100 lei.
1.20. Fiind date numerele a,b,c,d Z, se cere un algoritm care s stabileasc cea mai mare dintre fraciile a/b i
c/d.
1.21. S se gseasc soluiile ntregi i pozitive ale ecuaiei ax + by = c, cu proprietatea x+y<n, pentru a,b,c
aparine lui Z i n>0.
1.22. Se cere valoarea funciei f:[-9,9] n punctul x, dac
11
1,
3-x,
f (x) = 2
x +2 ,
10,
pentru x 1
pentru -1<x 0
pentru 0<x 0
pentru x>1
y x2
11
2
y 2 x - 16
1.24. Se d n . S se calculeze
k
1
1
C
(1+ +...+ ) 12
n
2
k
k=1
n
daca m= 0 sau m= n,
1,
15
bn,m =
+
,
in
caz
contrar
.
bn-1,m-1 bn-1,m
1.28. S se afle toate punctele de coordonate ntregi situate n interiorul ptratului cu diagonala determinat de
punctele A(a,b) i C(c,d).
1.29. Fie a,b . S se scrie un algoritm pentru calculul numrului punctelor de coordonate ntregi interioare
elipsei de ecuaie
2
x2 y
+
= 1 16
a 2 b2
1.30. Fie dreapta d determinat de punctele A(a1,a2) i B(b1,b2). S se determine poziia punctelor A i B fa de
dreapta d, prin indicatorul R definit astfel:
R=0, dac punctele A(a1,a2) i B(b1,b2) se afl n acelai semiplan determinat de dreapta d ;
R=1, dac punctele A i B aparin dreptei d;
R=2, dac punctele A i B se afl n semiplane diferite fa de dreapta d.
1.31. Se d un triunghi prin coordonatele vrfurilor sale i un punct M n planul su. S se determine poziia
12
punctului M fa de laturile triunghiului, marcndu-se cu R {1,2,3} trei situaii posibile: interior triunghiului, pe una din
laturi, exterior triunghiului.
1.32. Se d un ptrat P1 de latur 1 cruia i se circumscrie un cerc C1. Cercului obinut i se circumscrie un nou
ptrat P2, acestuia un nou cerc C2, etc. S se calculeze aria ptratului Pn i aria cercului Cn obinute dup un numr de n
pai, prin metoda de mai sus.
1.33. Se dau trei puncte Mi (xi,yi), i=1,2,3, n plan. S se determine parametrul k care s ia valoarea 0 dac
punctele sunt coliniare, respectiv 1 n caz contrar.
1.34. Se dau a,b,c,d,e,f . S se determine poziia dreptelor
ax + by + c = 0
17
dx + ey + f = 0
18
f(x)= ax2 +bx
, daca (a+b) / 2 < x b
x+2
S se calculeze valoarea lui f pentru x [a,b].
1.39. Se cere un algoritm pentru calculul aproximativ al rdcinii unei ecuaii f(x)=0, unde f:(a,b) este
continu i monoton, folosind metoda combinat a coardei i a tangentei. Cu metoda dedus, s se calculeze n M 19.
Indicaie. Se va lua f(x) = xn - M, iar intervalul (a,b), se nlocuiete cu [0,M].
1.40. Dintr-o urn cu m bile (m>1), numerotate de la 1 la m, se extrage la ntmplare o bil. S se scrie un
algoritm pentru calculul probabilitii ca numrul nscris pe bila extras s fie prim.
1.41. Un mobil efectueaz o micare oscilatorie armonic. tiind c pentru elongaiile x1=2 cm i x2=3 cm,
mobilul are vitezele v1=5m/s i respectiv v2=4m/s, s se calculeze amplitudinea i perioada micrii oscilatorii a
13
mobilului.
Indicaie. Se tie c PI=3.14 i se ine seama c amplitudinea, respectiv perioada micrii oscilatorie a mobilului
sunt date de
x12 v 22 - x 22 v12
x12 - x 22
A=
; T = 2PI 2
v 22 - v12
v 2 - v12
20
1.42. Se dau punctele A, B, C, D prin coordonatele lor n plan. Citindu-se coordonatele acestor puncte, s se
stabileasc dac ele sunt vrfurile unui dreptunghi sau nu sunt.
1.43. Se dau punctele A, B, C prin coordonatele lor rectangulare. S se determine punctul D tiind c el este
piciorul perpendicularei dus din A pe BC.
1.44. Se dau punctele A, B, C, D prin coordonatele lor n plan. S se determine punctul E pe segmentul AB i
punctul F pe segmentul CD astfel nct distana dintre E i F s fie minim.
1.45. Se dau punctele A, B, C, D prin coordonatele lor n plan. Dreapta ce trece prin A i B, cercul de centru
(0,2) i raz 5 i parabola de ecuaie y=x2+1 determin o mprire a planului n opt regiuni interioare. S se determine
dac punctele C i D se afl n aceeai regiune sau nu.
1.46. Se dau n {1,2,...,366} i a numr de an al secolului nostru. S se precizeze data corespunztoare celei de a
n-a zi a anului a sub forma (lun, zi).
1.47. Se d numrul n . S se tipreasc acest numr n sistemul de numeraie roman.
1.48. tiind c 1 ianuarie 1994 a fost ntr-o zi de smbt, s se determine n ce zi a sptmnii va fi 1 ianuarie
2020.
1.49. Se consider trei rezervoare cilindrice care conin benzin de trei caliti. Se cere situaia livrrilor
sptmnale, livrrile zilnice nregistrndu-se secvenial. S se precizeze beneficiarul cruia i s-a livrat cantitatea
maxim de benzin.
14
15
CAPITOLUL 2
{ xiZ
, pentru i=1,2,...,n }
{ X=Y, unde X este }
{ mulimea ce conine toate numerele x i, i=1,n, }
{ iar Y =mulimea ce conine pe yj, j=1,k i yly j pentru lj}
Variabilele intermediare folosite i semnificaia lor, precum i metoda folosit vor fi rezultatul rafinrilor
succesive i vor fi nelese din textul versiunilor respective.
ALGORITMUL DISTINCTE ESTE:
DATE n, (xi, i=1,n);
FIE y1:=x1; k:=1;
*Examineaz celelalte numere i dac este cazul pune-le n Y.
REZULTATE (yj, j=1,k);
SF-ALGORITM
{ Versiunea 1 }
Pentru a parcurge celelalte numere avem nevoie de un contor, fie el i, i de folosirea propoziiei PENTRU.
Ajungem la:
ALGORITMUL DISTINCTE ESTE:
DATE n, (xi, i=1,n);
FIE y1:=x1; k:=1;
PENTRU i:=2,n EXECUT
*Verific dac xi aparine lui Y.
*Dac nu aparine atunci adaug pe xi la Y.
SF-PENTRU
REZULTATE (yj, j=1,k);
SF-ALGORITM
{ Versiunea 2 }
Decizia ce trebuie luat este cum s verificm apartenena unui element u la mulimea Y. Pentru aceasta vom
reine n indicatorul ind cele dou situaii posibile: 0 pentru apartenen i pozitiv n caz contrar. Acest calcul se poate
face folosind urmtoarele propoziii:
ind:=1;
CTTIMP (ind1) i (ind<=k) EXECUT
DAC xi=yind ATUNCI ind:=0
ALTFEL ind:=ind+1
SF-DAC
SF-CTTIMP
Cu acestea ajungem la versiunea final a algoritmului dorit.
ALGORITMUL DISTINCTE ESTE:
{ Versiunea final }
17
{ xiZ
, pentru i=1,2,...,n }
ind:=1;
CTTIMP (ind1) i (ind<=k) EXECUT
DAC xi=yind ATUNCI ind:=0
ALTFEL ind:=ind+1
SF-DAC
SF-CTTIMP
DAC ind>0 ATUNCI k:=k+1;
yk:=xi
SF-DAC
SF-PENTRU
REZULTATE (yj, j=1,k);
SF-ALGORITM
IF ind>0 then
begin k:=k+1; y[k]:=x[i] end;
end;
Writeln;
Writeln(' Numerele distincte sunt');
For j:=1 to k do write(y[j]:5);
readln
END.
18
{ Verifica daca }
{ x[i] aparine lui Y }
Se consider irul
1,2,1,3,2,1,4,2,2,5,4,3,2,1,6,2,2,3,3,3,7,6,...
obinut din irul numerelor naturale prin nlocuirea fiecrui numr natural n printr-un grup de numere, dup urmtoarele
reguli: numrul prim p este nlocuit prin numerele p,p-1,...3,2,1, iar numrul compus c este nlocuit prin c urmat de toi
divizorii si proprii, un divizor d repetndu-se de d ori. Dndu-se numrul natural n, se cere s se tipreasc primele n
numere din irul dat.
Specificarea problemei.
Se d un numr natural n i irul de numere naturale descris mai sus.
Se cere tiprirea primelor n numere din irul dat.
Aparent problema este complet specificat, ceea ce nu e complet adevrat. Ne dm seama de acest lucru dac
ncercm s precizm ce rezultate se vor reine n memoria calculatorului. Este posibil ca n memorie s reinem toate
numerele cerute ntr-un vector X sub forma Y = ( y1 , y 2 ,..., y n ) 21, sau s nu le reinem n memorie ci doar s le
afim pe ecran. De fapt exist o variant simplificat a problemei de mai sus n care se cere s se obin doar al n-lea
numr din irul dat.
Specificarea problemei, pentru tiprirea celor n numere, fr reinerea lor n memorie.
DATE n;
REZULTATE afiarea primelor n numere din irul menionat.
{ nN, n>0 }
Pentru a concepe un algoritm de rezolvare, n ambele variante se parcurge irul dat, reinnd sub numele t termenul
curent al irului, iar sub numele i poziia acestui termen n vector. Prin k vom nota numrul natural din care se obine
grupul de termeni din care face parte t, iar prin j indicele lui t n acest grup. Indicatorul ind va primi valoarea 1 dac
numrul k este prim i 0 n caz contrar.
Algoritmul pentru rezolvarea problemei este dat n continuare.
Algoritmul GENERARE1 este:
DATE n;
Fie i:=1;
t:=1; tiprete t;
k:=2;
ind:=1;
Cttimp i<n execut
* execut t:=termenul urmtor din ir;
i:=i+1;
Tiprete t
sf-cttimp;
sf-algoritm
{ varianta1 }
{ nN, n>0 }
Pentru a genera urmtorul termen din ir va trebui s inem seama de valoarea lui ind, prin care tim dac
numrul k este prim sau nu este prim. Pentru a decide dac un numr k este prim sau nu, vom verifica dac k se divide cu
un numr mai mic dect el i diferit de 1. Secvena de propoziii prin care se calculeaz valoarea lui ind este
urmtoarea:
Fie ind:=0;
Pentru j:=2,k/2 execut
Dac k mod j = 0 atunci ind:=1 sf-dac
sf-pentru
innd seama de cele menionate mai sus ajungem la urmtoarea variant a algoritmului:
Algoritmul GENERARE1 este :
{ varianta final }
19
DATE n;
Fie i:=1; t:=1; Tiprete t;
k:=2; ind:=1;
Ct timp i<n execut
t:=k;
Dac ind=1
atunci Ct timp (i<n) i (t1) execut
i:=i+1;
Tiprete t; t:=t-1
sf-ct timp
altfel d:=2; i:=i+1; Tiprete k;
Ct timp d<k i i<n execut
Dac k mod d = 0 atunci
j:=1; t:=d;
Repet i:=i+1;
Tiprete t;
j:=j+1;
pn cnd j>d sf-repet
sf-dac
d:=d+1
sf-ct timp;
sf-dac
k:=k+1;
Fie ind:=1;
Pentru j:=2,k-1 execut
Dac k mod j = 0 atunci ind:=0 sf-dac
sf-pentru
sf-ct timp
sf-algoritm.
{ nN, n>0 }
Pentru a reine termenii dorii ntr-un ir Y este suficient s nlocuim propoziia "Tiprete t" prin propoziia "
Y i 22:=t".
Transcriind n Pascal se obine urmtorul program:
Program SIR;
Var n,
i,
j,
k,
d,
t,
ind : integer;
Begin
for i:=1 to 20 do writeln;
Writeln('Se tipresc n termeni dintr-un ir');
write('Dai n='); Readln(n);
i:=1; t:=1;
write(t);
k:=2; ind:=1;
While i<n do
begin t:=k;
If ind=1
then while (i<n) and (t>=1) do
begin i:=i+1;
write(t:5); t:=t-1;
end
else begin d:=2;
20
i:=i+1; write(k:5);
while (d<k) and (i<n) do
begin
If k mod d = 0 then
begin
j:=1; t:=d;
Repeat i:=i+1; write(t:5); j:=j+1 until j>d;
end;
d:=d+1
end;
end;
k:=k+1; ind:=1;
For j:=2 to k-1 do
If k mod j = 0 then ind:=0;
end {while};
readln(d);
end.
2.3. PROBLEME PROPUSE.
Pentru problemele propuse mai jos se cere s se descrie n limbajul Pseudocod un algoritm de rezolvare,
preciznd i semnificaia variabilelor folosite. De asemenea, s se scrie programul Pascal corespunztor.
2.1. Se d numrul natural n > 1. S se genereze toi divizorii pozitivi
d 1 , d 2 ,..., d m 23 ai numrului n.
2.2. S se genereze toate numerele prime mai mici dect numrul natural n dat.
2.3. Se dau m,n +. S se determine primele n cifre din scrierea fraciei 1/m ca fracie zecimal.
2.4. Se d numrul natural m > 1. S se formeze vectorul ale crui componente sunt primele m numere din irul
lui Fibonacci, definit prin n1=n2=1 i nk+1=nk+nk-1 pentru k=2,3,... .
2.5. Se d numrul natural n > 1. S se tipreasc triunghiul lui Pascal, avnd n linia m toate combinrile
C(m,k) de m obiecte luate cte k, k=0,m, pentru m=1,2,...,n. Se va folosi relaia de recuren:
C(m,k) = C(m-1,k)+C(m-1,k-1)
deci elementele liniei m se calculeaz din elementele liniei m-1 (precedente).
2.6. Se dau m,k +. S se determine numrul n al cifrelor i cele n cifre din scrierea numrului ntreg mk =
(c1c2c3...cn)10.
2.7. Se dau numrul natural n > 1 i X n. S se determine indicele componentei minime i indicele
componentei maxime din X.
2.8. Se dau numrul natural n > 1 i numerele x1, x2, ..., xn. S se gseasc toate poziiile p1 , p2 ,..., p k 24
pe care se afl valoarea maxim.
2.9. Se dau numrul natural n > 1 i numerele x1, x2, ..., xn. S se verifice dac numerele date sunt n progresie
aritmetic sau geometric, calculnd indicatorul Ind definit astfel:
Ind = 1, dac numerele sunt n progresie aritmetic,
Ind = 2, dac numerele sunt n progresie geometric,
Ind = 3, n caz contrar.
2.10. Se dau numrul natural n > 1 i numerele x1, x2, ..., xn. S se gseasc media numerelor date, numrul
valorilor pozitive, produsul valorilor negative i s se tipreasc numerele mai mari dect 100.
21
2.11. Se dau numrul natural n > 1 i numerele x1, x2, ..., xn. S se ordoneze cresctor primele k numere i
descresctor celelalte numere, pentru k dat, k{1,2,...,n}.
2.12. Se dau numrul natural n > 1 i numerele x1, x2, ..., xn. S se gseasc toate numerele distincte
y1 , y 2 ,..., y m 25 din irul X precum i frecvenele acestor numere ntre numerele date.
2.13. Se dau numrul natural n > 1 i numerele x1, x2, ..., xn. S se calculeze yj=x1*x1+x2*x2+...+xj*xj, pentru
j=1,2,...,n i M = max{xj*yj j=1,n }.
2.14. Se dau numrul natural n > 1 i numerele x1, x2, ..., xn. S se determine cel mai mare numr negativ i
poziiile pe care se afl el n irul dat.
2.15. Se dau numrul natural n > 1 i numerele x1, x2, ..., xn. S se calculeze
Y = ( y1 , y 2 ,..., y n ). 28 Componenta yi este media aritmetic a componentelor pozitive de rang mai mic sau egal
cu i ale vectorului X, n cazul n care exist componente pozitive, respectiv -1 n caz contrar.
2.19. Se dau numrul natural n > 1 i numerele x1, x2, ..., xn. S se calculeze yi pentru i=1,n, tiind c
y1 = (x1+x2)/2,
y2 = (x1+x2+x3)/3,
yn = (xn-1+xn)/2, yn-1 = (xn-2+xn-1+xn)/3,
iar yk este media numerelor xk-2, xk-1, xk, xk+1, xk+2, pentru k=3,4,...,n-2.
2.20. Se dau numrul natural n > 1 i numerele x1, x2,..., xn. S se determine numrul k al numerelor negative
din irul X i mediile vi pentru i=1,2,...,k-1. Prin vi s-a notat media numerelor pozitive cuprinse ntre al i-lea i al i+1-lea
numr negativ, dac exist numere pozitive, respectiv 0 n caz contrar.
2.21. Se dau numrul natural n > 1 i numerele x1, x2,..., xn. S se rein toate numerele distincte y1,y2,...,y k i s
se calculeze frecvenele de apariie ale acestor numere n irul dat.
22
2.22. Se dau numrul natural n > 1 i numerele x1, x2,..., xn. S se determine vectorul Y=(y1,y2,...,y n), unde yi
este egal cu numrul valorilor din irul dat mai mari dect xi, pentru i=1,n.
2.23. Se dau numrul natural n > 1 i numerele x1, x2,..., xn. Dac yi este numrul termenilor mulimii
{xjx j<xi ,j<i}, s se determine vectorul Y=(y1,y2,...,y n).
2.24. Se dau numrul natural n > 1 i X n. S se determine vectorul Y=(y1,y2,...,y n), unde yi este poziia
valorii minime n secvena de numere x1,x2,...,x i (cea mai mic dac exist mai multe poziii).
2.25. Se dau numrul natural n > 1 i numerele x1, x2,..., xn. S se calculeze primele k momente m1, m2,..., mk.
Prin momentul de ordinul j, notat mj, se nelege media aritmetic a puterilor de exponent j ale numerelor date.
2.26. Se dau numrul natural n > 1 i numerele x1, x2,..., xn. Dac m1 i m2 sunt primele dou momente (vezi
problema 2.25) s se calculeze s, unde s2=m2-m1*m1 i fj, j=1,9, dac fk este numrul elementelor mulimii
{ x i | m1 - k* s < x i < m1 + k* s} 29.
2.27. Se dau numrul natural n > 1 i numerele x1, x2,..., xn. Secvena xi, xi+1,..., xi+p se numete scar (de
lungime p) dac xi<xi+1<...<xi+p. Se cere s se tipreasc cea mai lung scar din irul dat i poziia i din ir la care
ncepe aceast scar.
2.28. Se dau numrul natural n > 1 i numerele x1, x2,..., xn. S se gseasc permutarea o1, o2,..., on a indicilor
1,2,...,n astfel nct x o1 x o2 ... x on . 30
mulimii
2.29. Se dau a , n i numerele reale x1, x2,..., xn. S se determine cardinalul (numrul elementelor)
{ i | x i a } 31 i indicatorul r definit astfel:
r = i, dac exist i pentru care a=xi, (cel mai mic i)
r = 0, n caz contrar.
2.30. Se dau a , n i numerele reale x1, x2,..., xn. S se determine indicele i (cel mai mic, dac exist mai
muli) pentru care valoarea xi este cea mai apropiat de a.
2.31. Se dau a , n i numerele reale x1, x2,..., xn. S se rearanjeze aceste numere astfel nct toate
numerele mai mici dect a s fie naintea tuturor numerelor egale cu a sau mai mari dect a, cu ct mai puine schimbri,
deci fr a ordona tot irul.
2.32. Se dau a , n i numerele reale x1, x2,..., xn. S se determine vectorul Z cu componentele
+
+...+
,
daca
x
x
x
xi > a,
1 2 i
32
zi =
x1 , x 2 ,..., x n 35. S se
determine media aritmetic a componentelor lui X aflate n intervalul [a,b] i s se listeze perechile
care
(i, x i ) 36 pentru
x i 37 [ a,b].
23
x 2 ,..., x n 38. S se
2.37. Se dau n , numerele reale a, b, a<b, i vectorul X cu componente reale x1 , x 2 ,..., x n 39. S se
gseasc minimul i maximul numerelor mai mici dect b, apoi s se elimine din vectorul X toate componentele care nu
aparin intervalului [a,b].
x i , y i 40, i=1,n.
d = | x1 - y1|+| x 2 - y 2 |+...+| x n - y n | 41 i v = max { min{ x i , y i }| i = 1,n} 42.
2.38.
Se
dau
numerele
reale
se
calculeze
max{ xi + yi }, daca xi 0,
46
zi =
m = ( x1 + x 2 +...+ x n ) / n 48 i
d = ( x1 * x1 + x 2 * x 2 +...+ x n * x n ) / n 49 i s se tipreasc toi indicii i pentru care | x i - m|< 3d 50.
2.41. Se dau n i numerele reale x i , y i 47, i=1,2,...,n. S se calculeze
y
xi + i , daca i este impar,
zi =
52
24
x i , daca xi < y i ,
ci = 0 , daca x i = y i , 55
y , daca > y ,
xi
i
i
pentru i=1,2,...,n.
2.44. Se dau n i numerele reale x i , y i 56, i=1,2,...,n. S se calculeze
0,
daca xi = yi , 57
zi =
max{| y |,...,| y | }, daca > y ,
xi
i
n
i
pentru i=1,2,...,n.
2.45. Se dau n i numerele reale x i , y i 58, i=1,2,...,n. S se calculeze
s1 = ( y1 + y 2 + ... + y n ),
s2 = ( y1 * x1 + y 2 * x 2 +...+ y n * x n ) / s1,
62
s3 = ( y1 * x1 * x1 + y 2 * x 2 * x 2 +...+ y n * x n * x n ) / s1,
i m = cardinalul mulimii
pentru i=1,2,...,n.
2.48. Se dau n i numerele reale x i , y i 66, i=1,2,...,n. S se calculeze
25
max{ x1 , x2 ,..., xi }, daca xi < y i ,
pentru i=1,2,...,n.
2.49. Se dau n i numerele reale x i , y i 68, i=1,2,...,n. S se calculeze
pentru i=1,2,...,n.
2.50. Se dau n i numerele reale x i , y i 70, i=1,2,...,n. S se rein poziiile
cei doi vectori coincid. S se elimine din vectorii X i Y termenii de pe aceste poziii.
2.51. Se dau n
i numerele reale
x i , y i 72, i=1,2,...,n.
E = | x1 - y1| + | x 2 - y 2 | + ... + | x n - y n | 77
i
x i / ( yi * yi +1),
daca | x i - yi| < E,
pentru i=1,2,...,n.
2.54. Se dau n i numerele reale x i , y i , 79 i=1,2,...,n. Dac x1 < x 2 <...< x n si y1 < y 2 <...< y n 80
s se depun direct toate numerele distincte n irul Z ordonat cresctor:
z1 < z 2 < ... < z k 81,
26
i1 , i2 ,..., i k 84 pentru care punctele ( x i , y i ) 85 din plan se afl n interiorul cercului de raz a i centru (0,0).
2.57. Se dau a , n i perechile ( x i , y i ) 86, i=1,2,...,n de numere reale. S se calculeze numrul m al
valorilor yi mai mari dect a i
( x1 + x 2 +...+ x i ) / i,
daca i < m,
daca i = m, 87
z i = max{0, x i , y i },
| - y |+| - y |+...+| - y |, daca i > m.
xi i
x1 1 x 2 2
pentru i=1,2,...,n.
2.58. Se dau m,n i cifrele zecimale a i , 88 i=1,2,...,m i b j , 89 j=1,2,...,n. Dac numerele ntregi A i B
au reprezentrile n baza 10 date de aceste cifre, deci
A = ( a1 a 2 ...a m )10
si
90
B = ( b1 b2 ...bn )10
s se calculeze cifrele
bi 95 nu este corect,
a i , 96 i=1,2,...,m
27
x i 106 n calculator).
2.65. Se dau m,n , n>1. S se construiasc vectorul V = ( v1 , v 2 ,... v n ) 107 tiind c cele n componente
ale vectorului V sunt termeni consecutivi ai irului X:
1,1,2,1,2,3,4,4,4,4,1,2,3,4,5,6,6,...
obinut din irul numerelor naturale prin nlocuirea fiecrui numr natural prim p prin secvena 1,2,...,p i a numrului
neprim c prin scrierea lui de c ori, ncepnd cu x m 108 (fr a reine termenii x i 109 n calculator).
2.66. Se dau m,n , n>1. S se construiasc vectorul V = ( v1 , v 2 ,... v n ) 110 tiind c cele n componente
ale vectorului V sunt termeni consecutivi ai irului X:
1, 2, 2, 3, 3, 3, 4, 5, 5, 5, 5, 5, 6, 7, ...
obinut din irul numerelor naturale prin nlocuirea fiecrui numr prim p cu un grup de p numere toate egale cu p,
ncepnd cu x m 111 (fr a reine termenii x i 112 n calculator).
2.67. Se dau m,n , n>1. S se construiasc vectorul V = ( v1 , v 2 ,... v n ) 113 tiind c cele n componente
ale vectorului V sunt termeni consecutivi ai irului X:
1, 2, 3, 4, 2, 2, 5, 6, 2, 3, 3, 3, 7, 8, 2, ...
obinut prin scrierea numerelor naturale i a divizorilor proprii ai acestor numere, ultimul divizor d repetndu-se de d ori,
ncepnd cu x m 114 (fr a reine termenii x i 115 n calculator).
2.68. Se dau m,n , n>1. S se construiasc vectorul V = ( v1 , v 2 ,... v n ) 116 tiind c cele n componente
ale vectorului V sunt termeni consecutivi ai irului X:
1, 2, 3, 2, 5, 2, 3, 7, 2, 4, 3, 2, 5, 11, ...
obinut prin scrierea numerelor naturale i nlocuirea fiecrui numr compus prin toi divizorii si proprii, ncepnd cu
x m 117 (fr a reine termenii x i 118 n calculator).
2.69. Se dau n i seria
1 1
1
n=1 3n - 2 3n -1 3n . 119
V = ( v1 , v 2 ,..., v n ) 120 tiind c cele n componente ale vectorului V sunt sume pariale
ale acestei serii, v1 = s20 , v i = s20+5i , 121 i=2,3,...,n, unde sk 122 este suma primilor k termeni.
S se construiasc vectorul
2.70. Se d n i seria
28
(-1 )
n-1
n=1
S se construiasc vectorul
ale acestei serii,
4 1
1
2n-1 + 2n-1
2n -1 2
3
123
V = ( v1 , v 2 ,..., v n ) 124 tiind c cele n componente ale vectorului V sunt sume pariale
3
1 1* 2
1* 2* 3
(1+ +
+
+... ) 127
2
6 6* 10 6* 10* 14
V = ( v1 , v 2 ,..., v n ) 128 tiind c cele n componente ale vectorului V sunt sume pariale
ale acestei serii, v1 = s20 , v i = s20+5i , 129 i=2,3,...,n, unde sk 130 este suma primilor k termeni.
S se construiasc vectorul
1 1* 2 1* 2* 3
2 1+ +
+
+... 131
3 3* 5 3* 5* 7
S se construiasc vectorul
ale acestei serii,
V = ( v1 , v 2 ,..., v n ) 132 tiind c cele n componente ale vectorului V sunt sume pariale
ui = 1+
1 1 1 1 1 1
+
+
+... 135
3 9 5 92 7 9 3
V = ( v1 , v 2 ,..., v n ) 136 tiind c cele n componente ale vectorului V sunt sume pariale
ale acestei serii, v1 = s20 , v i = s20+mi , 137 i=2,3,...,n, unde sk 138 este suma primilor k termeni.
S se construiasc vectorul
1+
1
1* 2
1* 2* 3
1* 2* 3* 4
+
+
+
+... 139
3* 3 3* 5* 5 3* 5* 7 * 7 3* 5* 7 * 9* 9
V = ( v1 , v 2 ,..., v n ) 140 tiind c cele n componente ale vectorului V sunt sume pariale
ale acestei serii, v1 = sm , v i = sm+l*i , 141 i=2,3,...,n, unde sk 142 este suma primilor k termeni.
S se construiasc vectorul
1+
1
1* 2
1* 2* 3
1* 2* 3* 4
+
+
+
+... 143
3* 3 3* 5* 5 3* 5* 7 * 7 3* 5* 7 * 9* 9
S se construiasc vectorul
ale acestei serii,
V = ( v1 , v 2 ,..., v n ) 144 tiind c cele n componente ale vectorului V sunt sume pariale
2.76. Se cunoate seria convergent din problema 2.69. S se determine suma parial sn a primilor n termeni
29
pentru care
x k = ( x k-1 + a / x k -1 ) / 2,
pentru a i x0 numere reale date, pentru care | x n - x n-1|< 0.00001, 155 n fiind cel mai mic posibil.
2.84. S se tipreasc primii n termeni ai irului (xk) definit de relaia de recuren
xk =
1
a
xn = x pentru x dat.
x3
x5
x 2n+1
n
159
+
- ...+(-1 ) *
3
5
2n+ 1
2.86. S se tipreasc primii n termeni ai irului (xk) pentru care | x n - x n-1|< 0.00001, 160 n fiind cel mai
30
x n = 1+ x +
x2
xn
+...+ 161
2!
n!
2.87. S se tipreasc primii n termeni ai irului (xk) pentru care | x n - x n-1|< 0.00001, 162 n fiind cel mai
mic posibil, n cazul irului
x n = 1+ x +
pentru x dat.
x2
xn
+...+ 163
2!
n!
xn = x -
x3
x 2n+1
2n+1
165
+ ... + (-1 ) *
3!
(2n + 1)!
pentru x dat.
2.89. Se d f C2[a,b]. tiind c ecuaia f(x) = 0 admite o soluie unic r n intervalul [a,b] i c f' i f" nu-i
schimb semnul pe [a,b], s se aproximeze r folosind
metoda tangentei (a lui Newton), deci folosind faptul c
r = lim xn
n
unde x n+1 = x n - f( x n ) / f ( x n ), 166 n=0,1,2,... iar x0 este ales unul din capetele intervalului [a,b], notat cu c, i
anume cel pentru care f(c)*f"(c)>0.
2.90. Fie f:[a,b] --> o funcie continu. Se tie c ecuaia f(x) = 0 are o singur rdcin n intervalul [a,b].
S se construiasc irul de intervale [ x i , y i ] 167, i =1,2,...,n, definit astfel:
1. [ x 0 , y 0 ] = [a,b] 168 ;
2. [ x i , y i ] 169 se obine mprind intervalul [ x i-1 , y i-1 ] 170 n trei pri egale
i lund partea care conine rdcina;
3. n este cel mai mic numr natural pentru care y n - x n 171<eps, pentru eps numr pozitiv dat.
31
32
CAPITOLUL 3
(xi,yi, i=1,n),
a,b,
r;
REZULTATE nr;
Pentru a calcula valoarea lui nr se iniializeaz cu 0 acest numr i se verific care dintre punctele (xi,yi) au
distana fa de (a,b) mai mic dect r, deci se afl n cerc. Pentru fiecare rspuns afirmativ valoarea lui nr se mrete cu
1.
Algoritmul pentru rezolvarea problemei este dat n continuare.
Algoritmul PUNCTE_IN_CERC este :
DATE n,
{ numrul punctelor date }
(xi,yi, i=1,n),
{ coordonatele celor n puncte }
a,b,
{ coordonatele centrului cercului }
r;
{ raza cercului dat }
Fie nr:=0;
Pentru i:=1,n execut
Dac ( x i - a)2 + ( y i - b)2 < r 2 172 atunci nr:=nr+1 sf-dac
sf-pentru
REZULTATE nr;
{ numrul punctelor aflate n interiorul cercului }
sf-algoritm.
Programul PASCAL este dat n continuare.
Program Nr_Puncte_n_cerc;
var n,
i,
nr : integer;
a,b,
r : real;
x,
y:array [1..50] of real;
begin
33
clrscr;
writeln('Programul numr cte dintre n puncte date');
WRITELN('se afla in interiorul unui cerc dat');
for i:=1 to 3 do writeln;
repeat write('n=');
readln(n)
until (n in [1..50]);
for i:=1 to n do
begin write('x[',i:2,']='); read(x[i]);
write('
y[',i:2,']='); readln(y[i]);
end;
writeln;
writeln('Datele privitoare la cerc:');
write('abscisa='); readln(a);
write('ordonata='); readln(b);
repeat write('raza (>0)=?');
readln(r)
until r>0;
writeln;
{ determinarea nr. de puncte interioare cercului }
nr:=0;
for i:=1 to n do
if (x[i]-a)*(x[i]-a)+(y[i]-b)*(y[i]-b)<r*r
then nr:=nr+1;
{ tiprirea rezultatelor }
writeln('Nr punctelor din interiorul cercului= ',nr);
end.
3.2. INTERCLASARE
Se dau m,n i vectorii X,Y de componente numere ntregi, ordonate nedescresctor. Formai vectorul Z de
dimensiune m+n, avnd drept componente toate componentele vectorilor X i Y, de asemenea ordonate nedescresctor.
Rezolvare
Specificarea problemei este:
DATE m,
n,
(xi,i=1,m),
(yi,i=1,n);
REZULTATE k,
(zi, i=1,k),
Pentru a forma vectorul Z observm mai nti c z1 este cel mai mic dintre x1 i y1. Ct timp mai sunt
componente i n X i n Y urmtorul z va fi cel mai mic dintre xi i yj, i, respectiv j, fiind poziiile n cei doi vectori pn
la care componentele au fost deja depuse n Z. Evident se va ncepe cu i=1 i j=1, iar k - poziia curent n vectorul Z va fi
iniial tot 1.
Algoritmul pentru rezolvarea problemei este dat n continuare:
Algoritmul INTERCLASARE este :
Date m,
n,
(xi,i=1,m),
(yi,i=1,n),
34
{ Z := X interclasat cu Y }
{ numrul componentelor lui X }
{ numrul componentelor lui Y }
{componentele vectorului X. Avem x1 x2 . ..xm }
{componentele vectorului Y. Avem y1 y2 . ..yn }
{ Citesc n, Y }
{ Interclasarea }
{ Tiprete rezultatele }
35
END.
A = { a1 , a 2 ,..., a m }
173
B = { b1 , b2 ,..., bn }
S se calculeze C = A B.
3.11. Se dau m,n i mulimile
A = { a1 , a 2 ,..., a m }
174
B = { b1 , b2 ,..., bn }
S se calculeze C = A B.
3.12. Se dau m,n i mulimile
A = { a1 , a 2 ,..., a m }
175
B = { b1 , b2 ,..., bn }
S se calculeze C = A - B.
3.13. Se dau dou numere scrise n baza b. S se calculeze suma i diferena celor dou numere.
3.14. Se dau dou numere scrise n baza b. S se calculeze produsul celor dou numere.
numr.
3.15. Se dau dou numere scrise n baza b. S se gseasc ctul i restul mpririi primului numr la al doilea
3.16. S se transforme un numr din baza p n baza q.
3.17. Se d o mulime M de n puncte n plan. S se gseasc punctul cel mai deprtat de origine.
36
3.18. Se d o mulime M de n puncte n plan. S se ordoneze n funcie de distana lor fa de axa OX.
3.19. Se d o mulime M de n puncte n plan. S se ordoneze n funcie de distana lor la originea axelor de
coordonate.
3.20. Se d o mulime M de n puncte n plan. S se gseasc triunghiul de arie minim care are vrfurile n M.
3.21. Se d o mulime M de n puncte n plan. S se gseasc numrul triunghiurilor care au vrfurile n
mulimea M.
3.22. Se d o mulime M de n puncte n plan. S se determine submulimea maxim de puncte coliniare.
3.23. Se d o mulime M de n puncte n plan. S se determine submulimea maxim de puncte cu proprietatea
c oricare trei sunt necoliniare.
3.24. Se dau n puncte n plan, un cerc i o elips. S se gseasc punctele care sunt n interiorul cercului, dar nu
se afl n interiorul elipsei.
3.25. Se dau n puncte n plan i un cerc. S se elimine punctele care se afl n interiorul cercului.
3.26. Se dau n puncte P1,P2,...,Pn n plan i un punct M. S se gseasc cte puncte sunt la o distan de punctul
M mai mic dect un numr real r dat.
3.27. Se dau n puncte P1,P2,...,Pn n plan i un punct M. S se calculeze indicatorul Kod definit astfel:
Kod = 0, dac poligonul P1P2...Pn nu este convex;
Kod este pozitiv dac poligonul este convex:
Kod = 1, dac M este interior poligonului;
Kod = 2, dac M este pe una din laturile poligonului;
Kod = 3, dac M este exterior poligonului.
3.28. Se dau coordonatele vrfurilor unui poligon convex, n ordinea lor. S se gseasc diagonala cea mai
lung.
3.31. Se dau n puncte n plan i ecuaia unei drepte. S se numere cte puncte se afl pe dreapt i s se afle
punctul de distan maxim fa de dreapt.
3.32. Se dau n cercuri concentrice. S se gseasc inelul de arie maxim delimitat de dou cercuri consecutive.
3.33. Se dau n puncte pe un cerc. S se ordoneze n ordine trigonometric invers.
3.34. O funcie f : {1,2,...,m} ---> {1,2,...,n} se poate reprezenta n calculator printr-un vector F=(F1,F2,...,Fm)
cu m componente, unde Fi = f(i). S se verifice dac funcia f, dat prin vectorul F este injectiv.
3.35. Se d o funcie f : {1,2,...,m} ---> {1,2,...,n} reprezentat aa cum se menioneaz n problema 3.34. S se
verifice dac funcia f, dat prin vectorul F este surjectiv.
3.36. Se dau funciile f:{1,2,...,m} --->{1,2,...,n} i g:{1,2,...,n}---> {1,2,...,p}, reprezentate aa cum se
menioneaz n problema 3.34. S se determine compunerea celor dou funcii date.
3.37. O aplicaie f : {1,2,...,n} ---> {1,2,...,n} bijectiv se numete permutare. Ea se poate reprezenta n
calculator aa cum s-a artat n problema 3.34. Se d o permutare f. S se determine numrul inversiunilor permutrii f.
3.38. Se d o permutare f aa cum s-a artat n problema 3.37. S se determine ordinul permutrii date. Prin
ordinul permutrii f se nelege cel mai mic ntreg k pentru care fk este aplicaia identic.
37
3.39. Se d o permutare f aa cum s-a artat n problema 3.37. S se calculeze inversa permutrii f.
3.40. Se dau dou permutri f i g aa cum s-a artat n problema 3.37. S se determine compunerea celor dou
permutri date.
3.41. La un concurs de patinaj artistic se cunosc cele n note obinute de un concurent. S se calculeze punctajul
lui, tiind c la calculul mediei nu se ia n considerare nota cea mai mic i cea mai mare obinut (o singur dat n
cazul c sunt dou note egale, deci se face media aritmetic a n-2 note).
3.42. Pentru cei n studeni ai anului nti se cunosc notele mi, i=1,n, la primul examen. Se cere s se determine
numrul studenilor cu nota 10, numrul studenilor cu note de 8 i 9 i s se tipreasc lista studenilor nepromovai.
3.43. Pentru cele 365 de zile ale unui an se cunosc cantitile de precipitaii zilnice pi, i=1,365. Se cere s se
determine numrul zilelor fr precipitaii, mediile lunare i media anual a precipitaiilor i s se listeze zilele cu
precipitaii ce depesc cantitatea a.
3.44. Se dau m,n , intervalele [ai-1,ai], i = 1,m i numerele reale x1,x2, ... , xn. Prin frecvena fi se nelege
numrul valorilor xj care se afl n intervalul [ai-1,ai]. S se determine frecvenele f1,f2,... ,fm i s se listeze indicii j pentru
care xj<a1 sau am< xj.
38
CAPITOLUL 4
PROBLEME CU MATRICE
4.1. CONSTRUIREA UNEI MATRICE
Se dau numerele naturale m i n i un ir de numere reale X(i),i=1,2,...,m x n. S se genereze matricea A, cu m
linii i n coloane, definit prin :
i j
a(i, j)=
x
k=1
(i j - i+1)
(4.1)
176
Deoarece n expresia ce definete elementele matricei A numitorul este ntotdeauna nenul (j=1,n este natural i
i>0, natural) nu vom avea probleme la generarea matricei. Pentru a calcula suma elementelor x(k) pentru k de la 1 la i*j
vom folosi o variabil auxiliar sum. Variabilele i,j,k sunt variabile de ciclare.
Algoritmul pentru rezolvarea problemei este dat n continuare:
Algoritmul MATRICE este :
Date m, n,
X;
Pentru i:=1 la m execut
Pentru j:=1 la n execut
sum:=0;
Pentru k:=1 la i*j execut
sum:=sum+X(k)
sf-pentru;
A(i,j):=sum/(i*j-i+1)
sf-pentru
sf-pentru
Rezultate A;
sf-algoritm
39
X:sir;
{X este un vector cu m*n componente date}
A:mat;
{Matrice de dimensiune m*n definit de (4.1)}
sum:real;
{variabil auxiliar; va conine o suma}
begin
Writeln('Se calculeaz o matrice A de dimensiune m*n');
writeln('dandu-se un vector X cu m*n componente');
write(' Dai numrul liniilor matricei : '); readln(m);
write(' Dati numrul coloanelor matricei: '); readln(n);
writeln(' Dai termenii irului X');
for i:=1 to m*n do
begin write('x(',i,')=?'); readln(x[i]) end;
for i:=1 to m do
for j:=1 to n do
begin sum:=0;
for k:=1 to i*j do sum:=sum+x[k];
a[i,j]:=sum/(i*j-i+1)
end;
writeln; writeln;
Writeln(' Matricea rezultat este:');
writeln;
for i:=1 to m do
begin
for j:=1 to n do write(a[i,j]:8:1);
writeln
end;
readln
end.
4.2. GENERAREA UNEI MATRICE DINTR-UN IR
Se dau m,n,k i numerele ntregi x1,x2,...,x k. Se cere s se construiasc o matrice A cu m linii i n coloane
astfel nct elementele matricei s fie elementele irului n urmtoarea ordine: (considerm m=3 i n=4)
x1 x6 x7 x12
x2 x5 x8 x11
x3 x4 x9 x10
n cazul n care nu exist suficiente elemente n vectorul X, deci matricea nu se poate construi, se va da un mesaj de
eroare.
Specificarea problemei este:
DATE m,n,
k,
X;
REZULTATE A
Se observ c elementele irului sunt puse n ordine pe coloane i anume pe o coloan de sus n jos, iar pe
urmtoarea coloan de jos n sus. Pentru a deosebi cele dou cazuri vom folosi o variabil de control notat kod care ia
dou valori posibile 0 i 1. Dac valoarea lui kod este 0 atunci pe acea coloan elementele din ir se pun ncepnd cu
prima linie i pn la linia a m-a, iar dac valoarea lui kod este 1 atunci pe acea coloan elementele irului se pun
ncepnd cu linia a m-a i pn la prima linie.
Variabile folosite:
X - vector ce conine numerele date, de lungime k;
A - matricea cerut;
m,n - dimensiunile matricei;
l - indice n ir;
kod - variabila de control.
Algoritmul corespunztor este dat n continuare.
40
41
for j := 1 to n do write(a[i,j]:5);
writeln
end
end
end.
4.3. PROBLEME PROPUSE
n cele ce urmeaz vom nota prin Mm,n(D) mulimea matricelor cu m linii i n coloane avnd toate elementele
din domeniul D. n cazul m=n, deci al matricelor ptrate, vom nota Mn,n(D) = MPn(D). Prin Z vom nota mulimea
numerelor ntregi, iar prin R mulimea numerelor reale. Prin Vn(D) se noteaz mulimea vectorilor cu n componente,
toate elemente din domeniul D.
matricei.
4.1. Se d o matrice A Mm,n(R+). S se calculeze raportul dintre cel mai mic element i cel mai mare element al
4.2. Se d o matrice A Mm,n(R). S se adauge a (n+1)-a coloan acestei matrice, definit prin:
n
A(i,n+1)=
4.3. Se d o matrice A Mm,n(R+). S se formeze un vector cu n componente, astfel nct componenta a i-a s fie
egal cu elementul maxim din coloana a i-a a matricei.
4.4. Se d o matrice A Mm,n(R). S se determine linia i coloana care conin cel mai mic element pozitiv.
4.5. Se d o matrice A Mm,n(R+). Dac vi este valoarea maxim din linia i s se calculeze:
w = min{ v i | i = 1,m} 178.
4.6. Se d o matrice A Mm,n(R). S se tipreasc indicii liniilor care conin elemente negative. S se formeze
apoi matricea B, obinut din matricea A prin eliminarea acestor linii.
4.7. Se d o matrice A Mm,n(R+). S se schimbe ntre ele liniile matricei A astfel ca prima coloan s devin
ordonat cresctor.
4.8. Se d o matrice A Mm,n(R+) i un interval [,] . S se rein ntr-un vector X toate elementele matricei aflate
n intervalul [,] .
4.9. Se d o matrice A Mm,n(R+). Pentru fiecare linie s se scad din elementele sale valoarea minim din acea
linie.
4.10. Se d o matrice A Mm,n(R). S se construiasc vectorul X =
42
pozitive din linia respectiv. Dac ntr-o linie nu exist elemente pozitive, linia rmne neschimbat.
4.15. Se d o matrice A Mm,n(R). S se calculeze media aritmetic a elementelor matricei aflate deasupra
diagonalei principale, precum i media armonic a elementelor pozitive care se gsesc sub diagonala principal.
4.16. Se d o matrice A Mm,n(R+). S se verifice dac exist dou linii proporionale n matricea dat.
4.17. Se d o matrice A Mm,n(R+). S se construiasc un vector X de n componente, astfel nct X(i) s fie
numrul elementelor distincte din coloana a i-a, pentru i=1,2,...,n.
4.18. Se d o matrice A Mm,n(R+). S se schimbe ntre ele liniile matricei astfel nct irul sumelor
si =
a ,
ij
i=1,m 181.
j=1
4.19. Se d o matrice A Mm,n(B2), unde B2 ={0,1} i se consider c elementele unei linii sunt cifrele unui numr
ntreg scris n binar. S se gseasc numerele ntregi corespunztoare liniilor matricei.
4.20. Se d o matrice A Mm,n(R+). Poziia ( i0 , j 0 ) 182 se numete punct a dac:
a)
b)
S se tipreasc toate punctele a dac exist astfel de puncte sau un mesaj corespunztor n caz contrar.
2
4.21. Se d o matrice A Mm,n(R+). S se formeze matricea B cu m linii i n coloane unde bij = ( a ij - max )
, unde max este cel mai mare element al matricei A.
daca i < j
aij ,
187
bij =
( ai 1+ ain + a1j + a mj ) / 4, altfel.
4.23. Se d o matrice A Mm,n(R+). Se dau numerele x i y. S se formeze matricea B cu m linii i n coloane unde
43
4.27. Se d A Mm,n(R+). Se dau numerele reale x, y, z, cu x < y < z. S se formeze matricea B cu m linii i n
coloane, unde
192
bij =
cj =
a b
ij i
j = 1,2,...,n.
193
i=1
4.29. Se d A Mm,n(Z). Fiind dat un numr natural p, s se formeze vectorul X cu m componente, unde xi
reprezint numrul elementelor din linia a i-a a matricei A care sunt divizibile cu p.
4.30. Se d A MPn(R). S se determine linia l ce conine cel mai mare element al diagonalei principale i apoi
s se schimbe linia i coloana l cu linia, respectiv coloana nti.
4.31. Se d A Mm,n(R+). S se formeze un vector de n componente, n care componenta vi a vectorului s fie
egal cu raportul dintre suma elementelor din linia i i suma elementelor din coloana i.
4.32. Se d A MPn(R). S se calculeze E=MDP-MDS, unde MDP este maximul dintre sumele elementelor
aflate pe diagonale paralele cu diagonala principal, iar MDS este minimul dintre sumele elementelor aflate pe
diagonalele paralele cu diagonala secundar.
4.33. Se d A MPn(R). S se ordoneze liniile i coloanele matricei astfel nct elementele de pe diagonala
principal s fie ordonate cresctor.
4.34. Se d A MPn(R). n fiecare linie s se schimbe ntre ele elementele care se gsesc pe diagonala principal
44
45
min{ xi ,. .,xn}, daca i este par
ai,j =
194
a ij =
x l 196
l=(i-1)n+1
46
- pe linii;
- pe coloane;
- n matrice.
4.55. Se dau vectorii A Vm(R) i B Vn(R). S se formeze matricea CMm,n(R) dac
i
c(i, j) =
a(k)
k=1
n
b(k)
199
k= j
cij =
ai * b j
200
max{ a1 ,..., a m , b1 ,..., bn }
k=1
p=1
cij = ak bp 202
4.59. Se dau dou matrice A,B Mm,n(R). S se determine matricea C Mm,n(R) unde
cij = max{ a ij ,bij } , i = 1,m j = 1,n 203.
4.60. Se dau dou matrice A,B MPn(R). S se determine matricea C MPn(R) definit prin:
c ij = min{ a ik + bkj | k = 1,2,...,n}. 204
4.61. Se dau dou matrice A,B Mm,n(R). S se determine matricea CMm,n(B2) unde
47
0 , daca aij bij
205
cij =
a <b.
ij 206
ij
j=1
j=1
max
{
|k
j
si
k
i}
,
daca
j i si xl >0, l= j,j+1,...,i
xk
(
+
+...
+
)/(j-i+1),
daca
j>i .
xi xi+1 x j
48
CAPITOLUL 5
SUBALGORITMI
5.1. REUNIUNEA UNOR MULIMI
Se consider, trei mulimi A, B, C. Se cere un program care afieaz:
- elementele mulimii A n ordine cresctoare;
- elementele mulimii B n ordine cresctoare;
- elementele mulimii C n ordine cresctoare;
- elementele mulimii A B n ordine cresctoare;
- elementele mulimii B C n ordine cresctoare;
- elementele mulimii C A n ordine cresctoare.
Rezolvare.
Pentru realizarea programului este necesar construirea a patru proceduri specificate n continuare:
- o procedur pentru citirea unei mulimi: CIT(n,A);
REZULTATE n,A
{primesc valori prin citire}
- o procedur pentru ordonarea unui ir: ORDON(r,X);
DATE {de intrare}
r,
{numrul componentelor vectorului X}
X;
{vector cu n componente}
REZULTATE X
{la ieirea din subalgoritm vom avea: }
{ x1 < x2 < ... < xn }
- o procedur pentru calculul reuniunii a dou mulimi:
REUN(n,m,A,B,nm,AUB);
DATE {de intrare}
n,
{numrul elementelor mulimii A}
m,
{numrul elementelor mulimii B}
A,
{mulimea {a1, a2, ... , an } }
B;
{mulimea {b1, b2, ... , bm } }
REZULTATE nm,
{numrul elementelor reuniunii }
AUB
{AUB = A B }
- o procedur pentru tiprirea unei mulimi: TIPAR(n,A,ch);
DATE {de intrare}
n,
{numrul elementelor mulimii A}
A,
{mulimea {a1, a2, ... , an } }
ch;
{caracter considerat numele mulimii}
REZULTATE afiarea elementelor mulimii
- o procedur pentru ordonarea i apoi tiprirea unui ir: TIPORDON(r,X,ch);
DATE {de intrare}
r,
{numrul componentelor vectorului X}
X,
{ vector cu n componente arbitrare }
ch;
{caracter considerat numele mulimii}
REZULTATE *ordonarea componentelor vectorului X i
* afiarea elementelor ordonate cresctor
- o procedur pentru calculul reuniunii a dou mulimi, cu ordonarea i tiprirea rezultatului:
TIPREUN(n,m,A,B,nm,AUB).
49
Cheam CIT(m,B);
Cheam CIT(p,C);
Cheam TIPORDON(n,A);
Cheam TIPORDON(m,B);
Cheam TIPORDON(p,C);
Cheam TIPREUN(n,A,m,B,n1,AB);
Cheam TIPREUN(m,B,p,C,m1,BC);
Cheam TIPREUN(p,C,n,A,p1,CA);
Sf-algoritm.
{ Tiprete pe AB := A U B}
x i ; 211
x i := x i+1 ; 212
x i+1 := xx; 213
Fie
Fie sch:=1;
sf-dac
sf-pentru
pncnd sch=0 sf-repet
sf-ORDON
Subalgoritmul REUN(n,A,m,B,n1,AUB) este:
Pentru i:=1, n execut AUBi := Ai ; 214 sf-pentru
Fie n1:=n;
Pentru j=1, m execut
Fie i:=1;
Cttimp ( B j Ai ) si (i n) 215 execut i:=i+1 sf-cttimp
Dac i>n atunci Fie n1:=n1+1; 216 sf-dac
sf-pentru
sf-REUN
Subalgoritmul TIPORDON(r,X,ch);
Cheam ORDON(p,X);
Cheam TIPAR(r,X,ch);
sf-REUN
50
{AUB := A B}
{ AUB:= A B}
{Ordoneaz i tiprete pe AUB}
{ Programul 5.1 }
{operaii cu mulimi reprezentate ca vectori}
{Citete n si }
{ mulimea a cu n elemente}
{ch=numele mulimii citite}
{Calculeaza A B}
51
var i, j: integer;
begin n1 := n ;
for i := 1 to n do AUB[i] := A[i];
for j := 1 to m do
begin
i := 1;
while (B[j]<>A[i]) and (i<=n) do i := i+1;
if i > n then
begin n1 := n1+1; AUB[n1] := B[j]; end;
end;
end;
Procedure tipreun(n, m: integer; A,B: sir;
var n1: integer;
var AUB:sir; nume:string);
var xx: real;
i, sch: integer;
begin
reun(n, m, A, B, n1, AUB, nume);
ordon(n1, AUB);
tipar(n1, AUB, nume);
end;
Begin
cit(n, a, 'A');
cit(m, b, 'B');
cit(p, c, 'C');
tipordon(n, a,'A');
tipordon(m, b,'B');
tipordon(p, c,'C');
tipreun(n, m, a, b, n1, ab,'AUB');
tipreun(m, p, b, c, m1, bc,'BUC');
tipreun(p, n, c, a, p1, ca,'AUC');
end.
{Calculeaz reuniunea,}
{ordoneaz elementele i}
{tiprete rezultatul}
{programul principal}
{nN, n>3}
{p1,p2,...,p n sunt primele n numere prime}
Pentru rezolvarea problemei vom utiliza o funcie de tip boolean "PRIM(n)" care ntoarce "true" dac numrul
natural n este prim i "false" n caz contrar. Algoritmul funciei are la baz ideea de a cuta divizori ai lui n ntre primele
n/2 numere naturale.
Algoritmul poate fi util n multe probleme, motiv pentru care lvom descrie ca subalgoritm ce poate fi apelat oricnd
este nevoie de el. Vectorul P va reine cele n numere prime. n variabila i vom avea urmtorul candidat, numr natural
care uneori este prim. Primele dou numere prime fiind 2 i 3, la nceput vom iniializa pe i cu 5. Prin k s-a notat
numrul numerelor prime gsite. Subalgoritmul NRPRIME este urmtorul:
Subalgoritmul NRPRIME(n,P) este:
Fie i:=5; p1:=2; p2:=3; k:=2;
Repet
52
{ In vectorul P se obin }
{ primele n numere prime }
{programul principal}
53
5.1. S se calculeze valoarea ntr-un punct a unui polinom i a tuturor derivatelor sale, folosind pentru aceasta
- o procedur de derivare a unui polinom;
- o funcie care ntoarce ca rezultat valoarea polinomului ntr-un punct x dat.
5.2. Se dau polinoamele P, Q, R :
P = pmXm + ... + p1X + p0,
Q = qnXn + ... + q1X + q0,
R = rkXk + ... + r1X + r0.
S se tipreasc produsele P Q, Q R, R P 217 n ordinea indicat.
5.3. Folosind un subalgoritm pentru efectuarea produsului P = Q R 218 a dou polinoame Q i R, tiprii
polinoamele (x + 1)n pentru n = 1,2,...,12.
5.4. Se cere programul care, folosind cel mult trei iruri, determin rezultatul:
a) reuniunii a n mulimi;
b) interseciei a n mulimi.
5.5. Se cere programul pentru calculul:
a) produsului a n matrice ptratice;
b) puterii a n-a a unei matrici ptratice.
5.6. Se cere programul de calcul al produsului a n polinoame.
5.7. Se cere un program care calculeaz, cu ajutorul unui subalgoritm, media aritmetic a elementelor maxime
corespunztoare fiecrei linii a unei matrici, iar apoi afieaz aceast valoare pentru trei matrice distincte A, B, C.
5.8. Fie f1, f2, ..., fn n polinoame. Se cere un program care calculeaz valoarea sumei celor n polinoame ntr-un
punct dat folosind:
- o procedur de calcul a sumei a dou polinoame;
- o funcie de calcul a valorii unui polinom ntr-un punct folosind schema lui Horner.
5.9. Fie f i g dou polinoame. Se cere s se calculeze valoarea funciilor fg i gf ntr-un punct dat, folosind o
funcie de calcul a valorii unui polinom ntr-un punct.
5.10. Folosind dezvoltarea n serie:
1 x 1 3 x 1 3 5 x
arcsinx=x+ + + +.
2 3 2 4 5 2 4 6 7
3 5 7
219
s se defineasc o funcie PASCAL care calculeaz arcsin x cu precizia = 10-6 . 220 S se tipreasc apoi valorile:
v i = arcsin
54
1
, i = 2,3,...,m 221.
i
5.11. Fie irul x1,x2,...,x n. Se cere un program care determin i tiprete cea mai lung secven din irul dat
care are o anumit proprietate P folosind:
- o funcie care descrie proprietatea P i ntoarce lungimea secvenei care are proprietatea P i ncepe cu x k 222
- o procedur care determin secvena cerut.
(De exemplu, proprietatea P poate cere ca doi termeni vecini s aib semne diferite).
5.12. Folosind un subalgoritm care rezolv ecuaia f(x) = 0 (care are o soluie unic n intervalul [a,b]) prin
metoda njumtirii, tiprii tabelul de mai jos:
Observaie. Radicalul r =
...
...
...
...
.
.
.
.
.
.
.
.
.
10
...
...
i 223
i 224
a1
b1
c1
231.
=
=
a2
b2
c2
Se d nN i mulimea de numere ntregi X = {xii =1,2,...,n}. Se cere s se afieze mulimea tripletelor pitagorice din
mulimea dat i clasele determinate de relaia de asemnare pe aceast mulime.
55
5.19. Fie
A B = (A - B) (B - A) 234.
Observaie. Pentru rezolvarea problemei se vor utiliza cel mult trei iruri.
5.20. Fie I o mulime de subintervale ale intervalului [a,b].
a) S se formeze o diviziune X a intervalului [a,b]
x i 238.
5.21.tiind c irul X:
4,2,6,2,3,8,2,4,9,3,10,...
este obinut din irul numerelor naturale prin eliminarea numerelor prime i scrierea dup fiecare numr compus a
divizorilor si proprii, s se genereze urmtoarea matricea de ordinul n:
x1
x 2n
.
A =
.
.
x n+1
x2
x n+2
x 2n+1
x3
x n+3
x 3n-3
x n-1
x 3n-2
.
239.
.
x 2n-1
x n
x1
x m+1
A =
.
x (m-1)m+1
x2
x m+2
x(m-1)m+2
x m
x 2m
245.
.
x m2
56
metoda lui Kramer. Programul va stabili mai nti dac sistemul este compatibil i unic determinat.
5.26. Se dau nN i vectorii X, Y cu n componente numere reale. S se calculeze valorile:
g( xi ), daca xi < 0,
vi = f( xi ) = l( xi ), daca xi = 0, 249
h( y ), daca > 0,
xi
i
pentru i=1,2,...,n, unde:
g( x i ) = max{ x1 , x 2 , ..., x i} ,
h( y i ) = min{ y i , ..., y n} ,
pentru i=1,2,...,n, iar
250
l( x i ) 251 este media aritmetic a numerelor pozitive din irul { x n 252} cu valoare mai mic
dect | y i | 253.
5.27. Se dau m,nN i o matrice Amxn ( n 10) 254 ale crei elemente sunt cifre de la 0 la 9 i n care fiecare
linie a matricei reprezint un numr n baza zece. S se scrie un program care face o permutare a liniilor matricei astfel
nct n final cele m numere reprezentate pe liniile matricei s fie n ordine cresctoare.
5.28. S se scrie un program care calculeaz sumele:
a) 3 C1n - 7 C2n + 11C3n - ... + (-1 )n-1 (4n - 1)C nn ; 255
b)
3
3
3
( C0n )
( C1n )
( C nn )
256.
+
+ ... +
0!
1!
n!
S =
unde
1
1
1
+
+ ... +
, 257
a1 a 2 ... a k
a 2 a 3 ... a k+1
a n-k+1 ... a n
a n } 258 e o progresie aritmetic pentru care raia i primul termen se cer utilizatorului.
b)
S n =
1
1
1
260
p +
p
p + ... +
p
a - a1
a3 - a 2
a n-1 - a np
p
2
a1
+
a 2 - a1
a2
+ ... +
a3 - a2
an
261.
a n+1 - a n
Observaie. Raia i primul termen al progresiei vor fi furnizate programului de ctre utilizator.
57
a1 < a 2 < ... < a n 262. S se scrie programul care tiprete permutarea
n
Sn =
(a
- a (i) )
264
i=1
f(X) = a0 X n + a1 X n-1 +...+ a n-1 X + a n I m , 265 unde a i _ , i = 0,n, 266 iar X,Im
M mxm 267 i fie matricele A,B M mxm 268. S se scrie un program care calculeaz f(A) + f(B) i f(A+B).
5.33. Se dau R
i nN. S se scrie un program care calculeaz suma:
n
k=1
cos k sin k
269
cos2 k sin 2 k
S=
k=1
. 272
3k 2k
k
x 2 x1 x 2
n cazul n care ecuaia de gradul doi nu are rdcini reale se va da un mesaj de eroare corespunztor.
prin:
5.35. Se dau m,nN. S se scrie programul care genereaz i tiprete matricea A cu m linii i n coloane definit
unde P(k) este numrul prim cel mai apropiat de k, Q(k) este numrul ptratelor perfecte mai mici dect k, iar R(a,b) este
cmmdc(a,b).
5.36. S se scrie un program care determin primele m numere naturale n 274 cu proprietatea
cmmdc ( n, 2 n - 1 ) > 1 275.
5.37. S se scrie un program care determin cel mai mic numr natural
58
proprii.
5.38. Fie n * 276 S se scrie un program care calculeaz suma:
m
(d) 277
d
S=
d|m
unde nsumarea se face dup divizorii naturali d ai lui m (inclusiv 1 i m), iar 278 este indicatorul lui Euler,
* 280
(n) = 279 numrul numerelor naturale mai mici dect n i prime cu n,
5.39. Fie
m=
k=0
1
f(x) =
m
(k - x ) c2k2n. 283
k=0
5.40. Fie ( p1 , p2 , p3 ) ( p1 < p2 < p3 ) 284 un triplet format din numere prime aflate la aceai distan
unul fa de altul, adic p3 - p2 = p2 - p1 = d > 0, 285. S se determine primele n triplete pentru care d este
multiplu de 2 ( n 10 286).
5.41. Se dau m,nN i o matrice AMm,n(N) care are ca elemente numere naturale. S se scrie un program care
genereaz vectorul V ce conine drept componente toate elementele matricei care sunt prime ntre ele dou cte dou.
5.42. S se scrie un program care determin primele n numere prime pentru care suma cifrelor este un numr
divizibil cu 11.
5.43. Se d o matrice A avnd ca elemente caractere alfabetice. S se scrie programul care stabilete dac un
cuvnt dat apare pe vreuna din liniile sau coloanele matricei, iar n caz afirmativ tiprete poziiile din matrice unde
ncepe i respectiv se termin cuvntul cutat.
5.44. Se dau nN i funcia
f(n) =
k=0
n
k=1
1
,
k!
287
n impar
a) Se cere programul care genereaz primele m elemente ale irului xi = f(g(i)), i=1,2,...,n, unde g(n) reprezint
suma cifrelor numrului n din scrierea sa n baza zece.
b) S se afieze frecvena de apariie a fiecrei valori din irul xi.
59
60
CAPITOLUL 6
{ n = numrul persoanelor }
{ A = matrice ptrat de ordinul n }
{k = numrul persoanelor care nu au nici o}
{cunotin. P = un vector cu k componente}
{P reine cele k persoane fr cunotine }
Pentru rezolvarea problemei, n matricea dat se caut liniile care au numai zerouri. n aceast cutare este
nevoie de dou variabile auxiliare i i j, indici n matricea A. Algoritmul pentru rezolvarea acestei probleme este dat n
continuare.
Algoritmul PERSOANE este:
Date n, A;
{n = numrul persoanelor }
{A = matrice ptrat de ordinul n }
Fie k:=0;
Pentru i := 1,n execut
Fie j:=1;
Cttimp (jn) i (aij=0) execut j:=j+1 sf-cttimp
Dac j>n atunci k:=k+1; pk:=i sf-dac
sf-pentru
Rezultate k,P;
sf-algoritm.
La scrierea programului Pascal este necesar s verificm corectitudinea datelor, respectiv faptul c dac
persoanele i i j se cunosc vom avea aij=1, dar atunci i aji=1, deci matricea A trebuie s fie simetric. Aici s-a optat
pentru o alt soluie: nu se citete matricea A ci perechile de persoane care se cunosc, matricea A fiind construit n
program.
Program CUNOSTINTE;
Var n,
k,
i,j : byte;
P : array[1..20] of byte;
{Programul 6.1.}
{ Relaia de cunotine intre persoane}
{ n = numrul persoanelor }
{k = nr. pers. care nu au nici o cunotina}
{ P = vector cu k componente ce}
{reine cele k persoane fr cunotine}
61
a : array[1..20,1..20] of byte;
{ A = matrice de ordinul n }
BEGIN
writeln ('Programul gsete persoanele care intr-un grup de n');
writeln ('persoane nu au nici o cunotina.'); writeln;
repeat
write ('Dai numrul persoanelor:'); readln (n)
until n in [1..20];
{ INITIALIZARE MATRICE }
for i := 1 to n do
for j := 1 to n do a[i,j] := 0;
writeln ('Dai perechile de persoane care se cunosc intre ele.');
writeln ('Persoanele se codifica prin numerele 1,2,...,n.');
writeln ('Introducei cate doua numere pe o linie (separate',
'prin spaiu)');
writeln ('Pentru terminarea introducerii tastai: 0 0 ');
{ CITIREA DATELOR, CU ELIMINAREA CELOR ERONATE }
write ('* '); readln (i,j);
while (i>0) and (j>0) do
begin
if (i<=n) and (j<=n) then
begin a[i,j] :=1; a[j,i] :=1 end {if};
write ('* '); readln (i,j);
end{while};
{ CAUTARE PERSOANE CARE NU AU CUNOSTINTE }
k:=0;
for i := 1 to n do
begin
j := 1;
while (j<=n) and (a[i,j]=0) do j := j+1;
if j > n then begin k:=k+1; P[k]:=i end{if};
end{for};
{ TIPARIREA REZULTATELOR }
writeln; write ('Persoanele care nu au cunotine: ');
if k>0 then for i:=1 to k do write(p[i]:5)
else writeln (' nu exista ');
END.
6.2. PATRATE MAGICE
S se realizeze un ptrat magic de ordin impar.
Rezolvare.
Prin ptrat magic se nelege o matrice ptrat de ordin n cu elementele {1, 2, ..., n2} aezate astfel nct suma
elementelor de pe fiecare linie, coloan sau diagonal este aceeai. Cu aceast precizare specificaia problemei este
urmtoarea:
DATE n;
REZULTATE A;
n general algoritmul de construire a unui ptrat magic este complicat. Dac n = 2k+1 atunci exist mai muli
algoritmi care obin ptratul magic. Vom folosi urmtoarea metod:
- se ncepe cu a1k:= 1.
- Dac aij = k atunci ai- 1,j+1 := k+1, dac locul este liber, altfel ai+1,j := k+1.
62
- irul indicilor se consider circular, adic dup n urmeaz 1, naintea lui 1 este n. Excepie de la regul: dac a1n = k
atunci a2n:= k+1.
Exemplu:
17
23
4
10
11
24 1 8 15
5 7 14 16
6 13 20 22
12 19 21 3
18 25 2 9
DATE n;
Pentru i:=1,n execut
Pentru j:=1,n execut Fie a[i,j] := 0 sf-pentru
sf-pentru
Fie i:=1; j:=n div 2 +1;
a[i,j]:=1;
Pentru k := 2,n*n execut
m1 := (i+n-2) mod n + 1;
m2 := j mod n + 1;
Dac a[m1,m2] 0 atunci
Dac (m1=n) i (m2=1)
atunci m1 := 2; m2 := n
altfel m1 := i+1; m2 := j
sf-dac
Fie a[m1,m2]:=k;
Fie i:=m1; j:= m2;
sf-dac
sf-pentru
REZULTATE A;
sf-algoritm
Uses Crt;
Var n,
m1, m2,
i, j,
k : integer;
a : array[1..19,1..19] of integer;
{ Programul 6.1.}
{ Se calculeaz un ptrat magic. }
{ Acesta este o matrice ptrata de ordinul n }
{ care are suma elementelor pe fiecare }
{ linie, coloan sau diagonal aceeai }
{ nN, n>1, reprezint ordinul matricei }
{ variabile curente pentru noua poziie }
{ dau poziia curenta in ptrat }
{ valoarea ce se scrie in ptrat }
{ Ptratul magic }
Begin
Writeln('Se construiete un ptrat magic cu n linii');
63
{ Citete n }
{ iniializare matrice }
{ fixare locul de pornire}
ClrScr;
for i := 1 to n do
begin
writeln;
for j := 1 to n do write (a[i,j]:4);
end;
writeln;
writeln ('Suma magica = ', n*(n*n+1) div 2);
readln;
END.
{ tiprete linia i }
64
6.2.4. Dac n6, s se verifice dac exist trei persoane care se cunosc ntre ele, sau trei care nu se cunosc ntre
ele.
6.3. Se dau n relaii de rudenie prin matricea A=(aij), i=1,2, ...n, j=1,2, unde
pentru fiecare i=1,2,..., n.
6.3.1. S se gseasc: copiii lui k, prinii lui k, strmoii lui k, pentru k dat.
6.3.2. S se gseasc: persoanele care nu au frai, persoanele care au numai frai vitregi.
6.3.3. S se gseasc verii primari i secundari ai unei persoane date.
6.3.4. S se gseasc toate familiile (grupele formate din persoanele care sunt rude ntre ele).
6.4. Se dau n localiti i matricea A cu elementele aij, i,j=1,...,n, unde aij este egal cu costul construirii
drumului dintre localitile i i j, dac se poate construi un drum, respectiv 0 dac nu se poate construi un drum. S se
gseasc o reea de drumuri care leag toate localitile i este de cost minim.
6.5. Se dau nN, M = {a1,a2,...,a n} i * : M x M --> M o operaie peste mulimea M. Aceast operaie poate fi
identificat cu o operaie definit pe M' = {1,2,...,n} i reprezentat printr-o matrice O cu elementul oij = k dac i numai
dac ai*aj = ak (deci i*'j=k). Deci operaia *, definit peste o mulime arbitrar M, poate fi studiat prin intermediul
operaiei *' definit pe mulimea M' i reprezentat n calculator prin matricea O.
6.5.1. S se verifice dac:
a) operaia * este comutativ;
b) exist element neutru (stnga i dreapta).
6.5.2. S se rezolve ecuaiile: a*X = b i X*a = b.
6.5.3. Dndu-se o submulime de indici H = {i1, i2, ..., im} M' i o operaie dat prin matricea O, s se verifice
dac H este parte stabil n raport cu operaia .
6.5.4. S se verifice dac operaia dat este asociativ.
6.5.5. S se verifice dac operaia admite element neutru la dreapta i n caz afirmativ s se precizeze acest
element.
element.
6.5.6. S se verifice dac operaia admite un element neutru la stnga i n caz afirmativ s se precizeze acest
6.5.7. S se verifice dac operaia admite un element neutru.
6.5.8. Se tie c operaia are ca element neutru pe k. Pentru un jM, s se verifice dac acest element are element
simetric la dreapta fa de operaia dat.
6.5.9. Fie k elementul neutru al operaiei. Pentru un jM, s se verifice dac acest element are element simetric la
stnga fa de operaia dat.
6.5.10. Fie k elementul neutru al operaiei. S se determine un vector s, ale crui componente sunt s1,s2,...,s n,
unde si este 0 dac i nu are element simetric i este j dac j este simetricul lui i.
6.5.11. S se verifice dac structura algebric (M ,*) este un grup.
6.6. Se d o relaie R printr-o matrice cu elementele
a ij = 1, 295 dac i este n relaie cu j (deci iRj),
65
pentru i,j=1,2,...,n.
6.6.1. S se verifice dac relaia R este reflexiv.
6.6.2. S se verifice dac relaia R este simetric.
6.6.3. S se verifice dac relaia R este antisimetric.
6.6.4. S se verifice dac relaia R este tranzitiv.
6.6.5. S se determine relaia R' complementar, definit astfel: aR'b dac i numai dac aRb nu are loc.
6.6.6. S se determine relaia invers R- 1.
6.6.7. S se determine relaia complementar Rc definit astfel:
aRcb prin definiie dac aRb .
6.6.8. Dac se dau dou relaii R1 i R2, s se determine compunerea celor dou relaii: T = R1 o R2 nseamn c
(aTc dac i numai dac exist b astfel ca aR1b i bR2c).
6.7. Se dau mulimile A i B:
A = { a1 , a 2 ,..., a m }
297.
B = { b1 , b2 ,..., bn }
O relaie R ntre A i B poate fi reprezentat printr-o matrice cu elementele:
1 , daca ai R b j
298
rij =
0
,
altfel
.
6.7.1. Fiind date dou relaii R1 i R2 peste aceleai mulimi, s se verifice dac relaia R1 este inclus n R2 sau
nu.
6.8. Se dau dou operaii o1 i o2 peste mulimea M={1,2,...,n}, reprezentate ca n problema 6.5.
6.8.1. S se verifice dac operaia o1 este distributiv la dreapta fa de operaia o2.
6.8.2. S se verifice dac operaia o1 este distributiv la stnga fa de operaia o2.
6.8.3. S se verifice dac structura algebric (M,o1,o2) este inel.
6.8.4. Dac (M,o1,o2) este inel, o1 operaia aditiv, o2 operaia multiplicativ, i1
elementul neutru al operaiei aditive, iar i2 elementul neutru al operaiei multiplicative, s se verifice existena divizorilor
lui zero n inel.
66
67
6.15.3. S se decid dac exist criterii la care exist mai muli ctigtori.
6.15.4. Dndu-se un criteriu s se decid dac exist cine perfect dup acest criteriu.
6.15.5. S se decid dac exist cine care nu ndeplinete condiiile de participare la nici un criteriu.
6.15.6. S se afieze lista ctigtorilor la fiecare criteriu.
6.15.7. S se dea lista ctigtorilor la mai multe criterii.
6.15.8. S se decid dac exist cine care are suma punctajului maxim, dar la fiecare criteriu exist un cine
mai bun dect el.
6.15.9. S se decid dac exist cini ctigtori la un criteriu dar exist criterii la care nu sunt admii.
6.15.10. S se decid dac exist doi cini A i B astfel nct A s fie mai bun dect B la fiecare criteriu.
6.15.11. S se dea lista criteriilor la care exist cini perfeci.
6.16. Se d o matrice A cu 12 linii i n coloane, astfel nct A(i,j) reprezint cantitatea de precipitaii czut n
judeul j, n luna a i-a. S se elaboreze un program care s rezolve urmtoarele cerine :
a) s se stabileasc cantitatea minim i maxim de precipitaii pe fiecare lun ;
b) se cunosc vectorii PMAX i PMIN ce reprezint valoarea maxim i minim a cantitilor de precipitaii nregistrate
pe o perioad de 100 de ani. S se precizeze luna i judeul n care s-a nregistrat o depire a uneia din cele dou valori ;
c) s se calculeze media de precipitaii pe ar pentru fiecare lun ;
d) s se calculeze media de precipitaii anual pentru fiecare jude i media de precipitaii anual pe ar. S se
precizeze judeul care e cel mai aproape de medie i judeul pentru care abaterea de la medie e cea mai mare.
6.17. La o olimpiad particip n ri. Rezultatele se obin ntr-o matrice de dimensiune n x 3. Prima coloan
reprezint numrul medaliilor de aur obinute de fiecare ar, a doua coloan numrul medaliilor de argint, iar a treia
coloan numrul medaliilor de bronz. Se mai d un vector W de dimensiune 3, unde W(1) reprezint punctajul acordat
pentru o medalie de aur, W(2) pentru o medalie de argint, iar W(3) pentru o medalie de bronz. S se adauge la matrice o
nou coloan care s conin punctajul total realizat de fiecare ar participant. Se cere s se afle ara care a realizat
punctajul maxim, ara care a obinut cel mai mare numr de medalii de aur i ara care a primit "lingura de lemn" (cel
mai mic punctaj). S se decid dac exist ar care nu a obinut nici o medalie.
La sfritul olimpiadei s-a depistat un sportiv la controlul antidopping i i se retrage acestuia medalia de aur.
tiind c provine din ara "i" i c medalia nu se acord altcuiva s se afieze clasamentul rilor participante.
68