Sie sind auf Seite 1von 85

CUPRINS

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


Capitolul 7.
PROGRAMARE N LIMBAJ DE ASAMBLARE
7.1. Tiprirea valorii zecimale a unui numr ntreg .............................................................................. 73
7.2. Tiprirea valorii hexazecimale a unui numr ................................................................................. 75
7.3. Interclasarea a dou iruri .............................................................................................................. 76
7.4. Manevrarea biilor .......................................................................................................................... 78
7.5. Probleme propuse ........................................................................................................................... 79

Capitolul 8.
PROBLEME REZOLVATE FOLOSIND TIPUL MULIME SAU ENUMERARE
8.1. Divizori comuni .............................................................................................................................. 89
8.2. Ciurul lui Eratostene ....................................................................................................................... 92
8.3. Statistica culorilor citite .................................................................................................................. 94
8.4. Probleme propuse ........................................................................................................................... 95

Capitolul 9.
PROBLEME CU IRURI DE CARACTERE
9.1. Poziia unui subir ntr-un ir ........................................................................................................ 99
9.2. Afiarea cuvintelor care ncep cu majuscul................................................................................. 100
9.3. Probleme propuse ......................................................................................................................... 102

Capitolul 10.
PROCEDURI RECURSIVE
10.1. Generarea permutrilor .............................................................................................................. 107
10.2. Calculul combinrilor de m elemente luate cte k ..................................................................... 108
10.3. Subprograme mutual recursive .................................................................................................. 109
10.4. Probleme propuse ....................................................................................................................... 110

Capitolul 11.
PROBLEME CU FIIERE
11.1. Construirea, actualizarea i listarea unui fiier ........................................................................... 113
11.2. Probleme propuse ....................................................................................................................... 119

Capitolul 12.
PROBLEME CU LISTE
12.1. Liste nlnuite ............................................................................................................................ 131
12.2. List de articole .......................................................................................................................... 132

12.3. Arbore binar ............................................................................................................................... 135


12.4. Probleme propuse ....................................................................................................................... 137
Capitolul 13.
GRAFIC
13.1. Graficul funciei SIN (n mod text) ............................................................................................ 141
13.2. Graficul funciei SIN (n mod grafic) ......................................................................................... 141
13.3. Recursivitate n grafic ............................................................................................................... 142
13.4. Probleme propuse ....................................................................................................................... 144

Capitolul 14.
PROBLEME DE CONCURS
14.1. Plimbare pe ecran ....................................................................................................................... 153
14.2. Probleme propuse ....................................................................................................................... 156

Capitolul 15.
TIPURI ABSTRACTE DE DATE
15.1. Noiuni fundamentale ................................................................................................................. 163
15.2. TAD enumerare n Pascal .......................................................................................................... 165
15.3. TAD stiv n Pascal .................................................................................................................... 169
15.4. Probleme propuse ....................................................................................................................... 175

Capitolul 16.
PROBLEME CU GRAFE
16.1. Noiuni fundamentale i notaii folosite ..................................................................................... 191
16.2. Tipul abstract de date GRAF ..................................................................................................... 194
16.3. Preluarea reprezentrii geometrice de ctre calculator .............................................................. 208
16.4. Probleme propuse pentru programare ........................................................................................ 219
16.5. Probleme cu caracter teoretic ..................................................................................................... 222

BIBLIOGRAFIE ......................................................................................................................... 227

PREFA

Culegerea de probleme de fa se dorete a fi un ghid io colecie de probleme pentru


nvarea programrii. Diversitatea problemelor propuse i gradul diferit de dificultate fac culegerea
util nu numai studenilor, ci i elevilor de liceu. Iniial ea a fost conceput ca ghid pentru lucrrile de
laborator ale studenilor anilor nti i doi de la secia de Informatic a Facultii de Matematic i
Informatic.
Problemele sunt grupate n 16 capitole, n funcie de specificul i gradul lor de complexitate.
Succesiunea capitolelor din culegere vizeaz o abordare gradual a problematicii, att din punctul de
vedere al complexitii algoritmilor, specificai n limbaj Pseudocod, ct i al nvrii unui limbaj de
programare, n particular limbajul Pascal. Fiecare capitol conine cel puin dou exemple de probleme
rezolvate, pentru care sunt precizai att algoritmii de rezolvare, ct i programele surs Pascal.
Intenia autorilor este de a sugera un anumit stil de rezolvare a problemelor cu calculatorul,
acordndu-se o importan deosebit etapelor de analiz a problemei i de proiectare a algoritmilor,
etape n care limbajul de programare nu este implicat. Din acest punct de vedere, problemele propuse
sunt generale, implementarea soluiilor putnd fi fcut i n alte limbaje de programare.
Problemele de acelai tip sunt grupate n acelai capitol, iar un capitol acoper toat gama de
probleme pentru tema abordat. Astfel, capitolul I conine probleme elementare, a cror rezolvare nu
cere folosirea vectorilor sau a matricelor. Capitolul doi conine probleme referitoare la vectori, n timp
ce capitolul trei conine probleme a cror rezolvare cere folosirea vectorilor. Capitolul patru conine
probleme cu matrice. Capitolul cinci cere folosirea subalgoritmilor. Capitolul ase conine probleme a
cror rezolvare cere folosirea matricelor. Urmeaz un capitol de exemple i probleme pentru
programarea n limbaj main. Capitolul opt conine probleme referitoare la tipurile mulime i
enumerare din Pascal. Capitolul nou conine probleme referitoare la iruri de caractere. Capitolul
zece se refer la recursivitate. Urmeaz un capitol de probleme privind folosirea fiierelor. Capitolul
12 conine probleme care cer folosirea tipului referin n Pascal. Urmtorul capitol conine probleme
de grafic cu calculatorul. Capitolul 14 conine mai multe probleme date la diferite concursuri de
programare. Tipurile abstracte de date sunt obiectul capitolului 15. n sfrit, ultimul capitol conine
probleme despre grafe.
Dei la selectarea problemelor au contribuit toi autorii, fiecare capitol a fost elaborat de unul
sau doi autori, dup cum urmeaz:
Cap.1 - Prof. S.Groze i Prof. M.Freniu;
Cap.2 - Prof. M.Freniu;
Cap.3 - Lect. Robu J. i Prof. M.Freniu;
Cap.4 - Asist. S. Motogna;
Cap.5 - Asist. E.Iacob;
Cap.6 - Conf. Kasa Z. i Asist. S.Motogna;
Cap.7 - Conf. F.Boian;
Cap.8 - Lect. V.Ciobanu;
Cap.9 - Asist. S.Iurian;
Cap.10 - Asist. S.Iurian;
Cap.11 - Asist. H.Pop;

Cap.12 - Lect. V.Prejmereanu;


Cap.13 - Lect. V.Prejmereanu;
Cap.14 - Asist. S.Motogna;
Cap.15 Cap.16 - Conf. T.Toadere.
Eventualele erori nu se pot imputa numai celor de mai sus, toi autorii participnd la corectarea final
a acestei culegeri.
Sperm ca prezentul material s-i ating scopul propus, cel de dezvoltare la cititori a
gustului de programare ntr-un limbaj evoluat, n particular n limbajul Pascal.
Contieni c exist posibiliti de mbuntire a coninutului prezentei lucrri, autorii
mulumesc anticipat pe aceast cale tuturor celor care vor face observaii i propuneri de mbuntire,
de care se va ine seama la o nou editare a culegerii de probleme.

10

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

11

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;

unde prin rad(x) am notat radicalul de ordinul 2 din x definit n matematic.


Urmeaz s precizm metoda de rezolvare a problemei. Se tie c exist cel puin dou
posibiliti de a calcula pe r:
- ca limit a unui ir (definit printr-o relaie de recuren) convergent la r;
- prin rezolvarea ecuaiei r2=x.
Precizm c-l vom calcula pe r rezolvnd ecuaia r2=x. Dar i rezolvarea acestei ecuaii se poate face
a,b] care conine rdcina r la intervalul [a',b'], care este
jumtatea stng, sau jumtatea dreapt a intervalului [a,b], cea care conine rdcina.
Variabilele folosite n descrierea algoritmului sunt:

12

- a i b = capetele intervalului n care se afl rdcina;


- m mijlocul intervalului (a,b). n momentul n care b-a<eps,
m va fi chiar valoarea cutat pentru r.
Algoritmul propriu-zis este descris n continuare:
*Iniializeaz pe a i b;
REPET
FIE m:=(a+b)/2;
* Dac rdcina se afl n [a,m] atunci b:=m altfel a:=m.
-a<eps SF-REPET
FIE r:=(a+b)/2;
n textul de mai sus apar dou propoziii nestandard care sugereaz ns foarte bine ce
aciuni trebuiesc ntreprinse. Prima stabilete intervalul iniial n care se afl rdcina, care depinde de
mrimea lui x: (x,1) cnd x este mai mic dect 1 sau (1,x) n caz contrar. Deci ea se va transcrie n
propoziia standard
DAC x<1 ATUNCI ATRIBUIE a:=x; b:=1
ALTFEL ATRIBUIE a:=1; b:=x
SF-DAC
A doua propoziie njumtete intervalul. Condiia ca rdcina s se afle n jumtatea stng a
intervalului este (a2-x)*(m2-x)<0. Se ajunge la urmtoarea variant final:
{Calculeaz radical din x}

ALGORITMUL RADICAL ESTE:


DATE eps,x;
DAC x<1 ATUNCI FIE a:=x; b:=1
ALTFEL FIE a:=1; b:=x
SF-DAC
REPET
DAC (a2-x)*(m2-x)<0 ATUNCI b:=m
ALTFEL a:=m
SF-DAC
-a<eps SF-REPET
FIE r:=(a+b)/2;
REZULTATE r;
SF-ALGORITM

{Iniializeaz pe a i b}

{rdcina n stnga}
{rdcina n dreapta}

Programul Pascal corespunztor este dat n continuare.


PROGRAM RADICAL;
VAR eps,
x,
r,

{Programul 1.1. Calculeaz radical din x}


{eps= precizia cu care se calculeaz}
{radical din x, eps>0 si x>=0}
{valoarea radicalului x}

13

a,b,
m : REAL;
BEGIN
WRITELN('Se calculeaz radical din x cu precizia eps:');
WRITE('eps='); READLN(eps);
WRITE(' x ='); READLN(x);
IF x<1 THEN BEGIN a:=x; b:=1 END
ELSE BEGIN a:=1; b:=x END;
REPEAT
m:=(a+b)/2;
IF (a*a-x)*(m*m-x)<0
THEN b:=m
ELSE a:=m;
UNTIL b-a<eps;
r:=(a+b)/2;
WRITELN; WRITELN;
WRITELN('Radical(',x:6:1,') = ',r:6:3);
READLN
END.

{capetele intervalului ce conine pe r}


{mijlocul intervalului [a,b]}

{Iniializeaz pe a si b}

{rdcina n stnga}
{rdcina in dreapta}

1.2. NUMERE PITAGORICE.


Numerele a,b,c, se numesc pitagorice dac a2 + b2 = c2 1. S se tipreasc toate tripletele
(a,b,c) de numere pitagorice, cu 0<a<b<c i a+b+c n ordonate dup suma a+b+c.
Specificarea problemei este:
DATE n;
REZULTATE toate tripletele de numere pitagorice (a,b,c) cu proprietatea
Vom nota prin S suma a+b+c. Se tie c (3,4,5) este primul triplet de numere pitagorice. n
acest caz S ia valori de la 12 la n. ntruct 3a<S variabila a ia valori de la 3 la S/3. Apoi 2b<S-a deci
b va lua valori de la a+1 la (S-a)/2. Algoritmul pentru rezolvarea problemei este dat n continuare :
Algoritmul NRPITAGORICE este :
Date n;
Dac n<12
atunci Tiprete "Nu exist numerele cerute"
altfel Pentru S=12,n execut
Pentru a=3,S/3 execut
Pentru b=a+1,(S-a)/2 execut
Fie c:=S-a-b;
Dac

14

{n

-dac

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

{Programul 1.1.2. Numere pitagorice}


{ S = a+b+c
}
{(a,b,c) triplet de numere pitagorice}
{ 0<a<b<c
}
{ contor }

1.3. PROBLEME PROPUSE


1.1. Fie i,j,k

. S se determine restul mpririi numrului natural ij la k.

1.2. S se tipreasc toate tripletele (i,j,k) de numere naturale care verific condiiile
i2 + j2 = k2

15

1.3. S se verifice dac numrul


este perfect. (Un numr n este perfect dac este egal
cu suma divizorilor lui diferii de n; exemplu: 6=1+2+3).
1.4. S se determine numerele perfecte din intervalul [a,b], pentru a,b date.
1.5. Dou numere ntregi x i y sunt "prietene" dac suma divizorilor numrului x este egal
cu suma divizorilor numrului y. S se gseasc numerele "prietene" din intervalul [a,b].
1.6. S se calculeze i s se tipreasc primii n termeni din irul Fibonacci, ir definit de
relaia de recuren
t i+1 = t i + t i-1 2, i=1,2,...
avnd

t 0 = t1 = 1 3.

1.7. Fie
elemente luate cte k.

. S se scrie un algoritm pentru calculul numrului combinrilor de n

1.8. Fie
. S se scrie un algoritm pentru calculul mediei aritmetice, geometrice i
armonice a tuturor divizorilor lui a.
1.9. Fie funcia lui Euler
mai mici ca n. S se tipreasc valorile
1.10. Fie

, unde
este numrul numerelor relativ prime cu n i
=1,2,...,m, pentru
dat.

. S se scrie un algoritm pentru calculul sumei

S = Akn + Ckn + Pn 4.
1.11. S se determine toate numerele ntregi de trei cifre
3

abc 5 cu proprietatea

abc = a + b + c 6.
1.12. Se dau numerele
calendaristic a secolului nostru.

. S se determine dac tripletul (z,l,a) reprezint o dat

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
curent. S se determine vrsta, n zile, a persoanei respective.

( z c ,l c ,ac ) 8 o dat

1.15. Se dau datele de natere ( z1 ,l1 ,a1 ) si ( z 2 ,l 2 ,a2 ) 9 a dou persoane. Se cere s se
precizeze care din cele dou persoane este mai tnr, prin indicatorul r
vrst, 1 dac prima persoan este mai tnr).

16

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.
rime 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
acest ir sunt prime.

n numere din

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.
, se cere un algoritm care s stabileasc cea mai mare

1.20. Fiind date numerele


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
n>0.
1.22. Se cere valoarea funciei f:[-

1,
3-x,

f (x) 2
x +2,
10,

x, dac

pentru x 1
pentru -1<x 0
pentru 0<x 0
pentru x>1

1.23. S se determine soluiile ntregi ale sistemului

y x2
11

2
y 2 x - 16
1.24. Se d

S se calculeze
n

C n(1+ 2 +...+ k ) 12
k=1

1.25. Fie a,b,

+. S se scrie un algoritm pentru rezolvarea ecuaiei

x2 + dx + p = 0 13

17

unde d = (a,b) este cel mai mare divizor comun al numerelor a i b, iar p este probabilitatea ca un
numr
ce verific condiia
, luat la ntmplare, s fie prim.
1.26. Se cere un algoritm pentru determinarea numerelor impare succesive a cror sum este
egal cu n3, pentru n=1,...,20. (Ex.

13 = 1, 23 = 3+ 5, 33 =7 + 9+11 14, etc).

1.27. S se scrie un algoritm care citete succesiv p perechi de numere ntregi (m,n
n i care calculeaz, pentru fiecare pereche coeficientul binomial bn,m definit de relaia recursiv

bn,m

daca m = 0 sau m = n,
1,
15
=
bn-1,m-1 + bn-1,m , in caz contrar .

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
. 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 punctului M fa de laturile triunghiului, marcndu-se cu R
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,

18

. S se determine poziia dreptelor

ax + by + c = 0
17

dx + ey + f = 0
i unghiul dintre ele, exprimat n grade.
1.35. Se cunosc lungimile laturilor unui triunghi. Se cere s se calculeze perimetrul,
unghiurile i aria triunghiului.
1.36. Se consider segmentele de dreapt cu extremitile n punctele A(a1,a2), B(b1,b2),
respectiv C(c1,c2), D(d1,d2). S se determine un algoritm de calcul pentru coordonatele punctului de
intersecie a segmentelor date. n cazul n care acest punct nu exist, se va tipri un mesaj.
1.37. O fabric de mobil primete comenzi pentru producerea unei diversiti de biblioteci,
avnd:
- lungimea cuprins ntre 2-9 m;
- nlimea cuprins ntre 1-3 m;
- un numr de 2,4,6,9 sau 12 corpuri.
Costul unei biblioteci este de a lei pentru fiecare metru cub de volum, la care se adaug b lei pentru
fiecare corp. Construcia unei biblioteci trebuie s respecte anumite condiii impuse de normele de
fabricaie:
- lungimea trebuie s fie de 2-3 ori mai mare dect nlimea;
- limea trebuie s fie 1/3 pn la 1/2 din nlime;
- numrul de corpuri trebuie s fie n raportul de 1/2 pn la 1 fa de produsul dintre lungime i
nlime. Se cere algoritmul de acceptare al unei comenzi i de calcul al preului.
1.38. Fie funcia f:[a,b

ax 2 + bx , daca a x (a + b) / 2

18
f(x) = ax 2 + 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
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.

19

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 mobilului.
Indicaie. Se tie c PI=3.14 i se ine seama c amplitudinea, respectiv perioada micrii
oscilatorie a mobilului sunt date de

A=

x12 v 22 - x 22 v12
x12 - x 22
20
; T = 2PI 2
v 22 - v12
v 2 - v12

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

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

20

21

CAPITOLUL 2

PROBLEME CU IRURI DE NUMERE


2.1. NUMERE DISTINCTE
Se dau n
x1,x2, ...,xn. Se cere s se rein ntr-un vector Y toate
numerele, dar fr a repeta vreunul, deci Y are numai componente distincte.
Specificarea problemei:
DATE n, (xi, i=1,n);
REZULTATE (yj, j=1,k);

{ xi
{ X=Y, unde X este }
{ mulimea ce conine toate numerele xi, i=1,n, }
{ iar Y =mulimea ce conine pe yj, j=1,k i yl j

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

23

n caz contrar. Acest calcul se poate face folosind urmtoarele propoziii:


ind:=1;
DAC xi=yind ATUNCI ind:=0
ALTFEL ind:=ind+1
SF-DAC
SFCu acestea ajungem la versiunea final a algoritmului dorit.
ALGORITMUL DISTINCTE ESTE:
DATE n, (xi, i=1,n);
FIE y1:=x1; k:=1;
PENTRU i:=2,n EXECUT

{ Versiunea final }
{ xi
{Verific dac xi aparine lui Y}

ind:=1;
DAC xi=yind ATUNCI ind:=0
ALTFEL ind:=ind+1
SF-DAC
SF{Dac nu aparine atunci adaug pe xi la Y}
DAC ind>0 ATUNCI k:=k+1;
yk:=xi
SF-DAC
SF-PENTRU
REZULTATE (yj, j=1,k);

{X=Y, unde X este mulimea ce conine }


{ toate numerele xi, i=1,n, iar Y este mulimea }
{ ce conine pe yj, j=1,k i yl j

SF-ALGORITM
Programul Pascal corespunztor este:
PROGRAM DISTINCTE;
VAR n,
i,j,
k,
ind : integer;
X,
Y : array[1..100] of integer;
BEGIN
Writeln('Se da vectorul X cu n componente reale');
Writeln('Se pun in Y toate valorile ce apar in X');

24

{ Programul 2.1. Retine valorile distincte }


{ numrul numerelor date }
{ contor - variabile de lucru }
{ numrul valorilor distincte gsite }
{ indicator; retine daca x[i] este in Y }
{ Vector cu numerele date }
{ Vector cu numerele distincte }

Write(' n='); readln(n);


For i:=1 to n do
begin write('x(',i,')='); readln(x[i]) end;
y[1]:=x[1]; k:=1;
For i:=2 to n do
begin
ind:=1;
While (ind>0) and (ind<=k) do
If x[i]=y[ind] then ind:=0
else ind:=ind+1;
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.

{ Verifica daca }
{ x[i] aparine lui Y }

{ Dac nu aparine lui Y }


{ atunci adaug pe x[i] la Y }
{ Tiprete rezultatele }

2.2. IR DERIVAT DIN NUMERELE NATURALE


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

25

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

{ Pentru cazul k este prim }

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 :
DATE n;
Fie i:=1; t:=1; Tiprete t;
k:=2; ind:=1;
Ct timp i<n execut
t:=k;

26

{ varianta final }

Dac ind=1
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.
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;

{ Programul 2.2. Tiprete n termeni dintr-un ir }


{ Numrul termenilor ce trebuie tiprii }
{ Contor = numrul termenilor tiprii }
{ Contor = de cate ori s-a tiprit d ! }
{ Numr natural din care se obin ultimii termeni }
{ d va lua ca valori divizorii lui k }
{ t = termenul curent din ir
}
{ indicator ce retine daca este k prim }

27

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;
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
numrului n.

d 1 , d 2 ,..., d m 23 ai

2.2. S se genereze toate numerele prime mai mici dect numrul natural n dat.
2.3. Se dau m,n
zecimal.

+.

S se determine primele n cifre din scrierea fraciei 1/m ca fracie

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

28

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
+. 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
i indicele componentei maxime din X.

. S se determine indicele componentei minime

2.8. Se dau numrul natural n > 1 i numerele x1, x2, ..., xn. S se gseasc toate poziiile

p1 , p2 ,..., pk 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.
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
n}.

distincte

2.12. Se dau numrul natural n > 1 i numerele x1, x2, ..., xn. S se gseasc toate numerele
y1 , y2 ,..., 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

max{ x j | x j > 0, j = 1,i }, daca i este par


yi =
26

( x1 + x 2 +...+ x i ) / i, daca i este impar

29

pentru i=1,2,...,n.
2.16. Se dau numrul natural n > 1 i numerele x1, x2, ..., xn. S se formeze vectorul
Y=(y1,y2,...,yn), unde yi ia valoarea 1 dac xi, xi+1, xi+2 pot fi lungimile laturilor unui triunghi i 0 n caz
contrar, pentru i=1,2,...,n. Numerele xn+1, xn+2 se iau egale cu xn.
2.17. Se dau numrul natural n > 1 i numerele x1, x2, ..., xn. S se determine

max{ x j | j = i,n }, daca i este par


yi =
27

daca i este impar


mi ,
unde mi este numrul componentelor vectorului X egale cu xi, pentru i=1,2,...,n.
2.18. Se dau numrul natural n > 1 i numerele x1, x2,..., xn. S se calculeze componentele
vectorului Y = ( y1 , y2 ,..., 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,...,yk i s se calculeze frecvenele de apariie ale acestor numere n irul dat.
2.22. Se dau numrul natural n > 1 i numerele x1, x2,..., xn. S se determine vectorul
Y=(y1,y2,...,yn), 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 {xj j<xi ,j<i}, s se determine vectorul Y=(y1,y2,...,yn).
n
2.24. Se dau numrul natural n > 1 i
. S se determine vectorul Y=(y1,y2,...,yn), unde
yi este poziia valorii minime n secvena de numere x1,x2,...,xi (cea mai mic dac exist mai multe
poziii).

30

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 { xi | m1 - k* s < xi < 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 xo1 xo2 ... xon . 30
2.29. Se dau
, n
x1, x2,..., xn. S se determine cardinalul
(numrul elementelor) mulimii { i | xi 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
,
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
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.
i numerele reale x1, x2,..., xn. S se determine vectorul Z cu

2.32. Se dau
componentele

x1 + x 2 +...+ x i , daca x i > a,


32
zi =

max{ x i , x i+1 ,..., x n }, daca x i a.


i numerele reale

x1 , x2 ,..., x n 33. S se elimine din irul X

2.34. Se dau
i numerele reale
date cresctor dup distana lor fa de numrul real a.

x1 , x2 ,..., x n 34. S se ordoneze numerele

2.33. Se dau
toate elementele mai mici dect a.

2.35. Se dau

, numerele reale a, b, a<b, i vectorul X cu componente reale

31

x1 , x2 ,..., x n 35. S se determine media aritmetic a componentelor lui X aflate n intervalul [a,b]
(i, x i ) 36 pentru care x i 37 a,b].

i s se listeze perechile

numerele reale a, b, a<b, i vectorul X cu componente reale

2.36. Se dau

x1 , x2 ,..., x n 38. S se rein n vectorul Y= (y1,y2,...,yk), toate componentele vectorului X care


aparin intervalului [a,b].
2.37. Se dau

numerele reale a, b, a<b, i vectorul X cu componente reale

x1 , x2 ,..., 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. S se calculeze


d = | x1 - y1|+| x2 - y2|+...+| x n - y n| 41 i v = max { min{ xi , yi }| i = 1,n} 42.
2.38. Se dau

2.39. Se dau

i numerele reale

i numerele reale

x i , y i 43, i=1,2,...,n.

S se rein n

i1 , i2 ,..., ik 44 toate poziiile p pentru care xp=yp.


i numerele reale

2.40. Se dau

x i , y i 45, i=1,2,...,n. S se calculeze

max{ x i + y i },
zi =
max{ x i + y i },

daca x i 0,
46

daca x i 0,

pentru i=1,2,...,n.

x i , y i 47, i=1,2,...,n. S se calculeze


m= ( x1 + x2 +...+ x n ) / n 48 i d = ( x1* x1 + x2 * x2 +...+ 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

2.42. Se dau

i numerele reale

i numerele reale

x i , y i 51, i=1,2,...,n. S se calculeze

daca i este impar ,


xi + yi ,
52
zi =

max{ x1 , x 2 ,..., x i }, daca i este par ,


pentru i=1,2,...,n i

32

v = min{ z1 , z2 ,..., z n } 53.

2.43. Se dau n

i numerele reale

x i , y i 54, i =1,2,...,n. S se calculeze

x i , daca x i < y i ,

ci = 0 , daca x i = y i , 55
y , daca
xi > yi ,
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

( x1 + x 2 +...+ x i ) / i, daca x i < y i ,

0,
daca x i = y i ,
57
zi =
max{| y |,...,| y | }, daca
xi > yi ,
i
n

pentru i=1,2,...,n.

x i , y i 58, i=1,2,...,n. S se calculeze


E = min{| x1|,| y1| } + ...+ min{| x n|,| y n| }, 59
i s se determine elementele mulimii { i | xi * xi > E} 60.
2.46. Se dau n
i numerele reale x i , y i 61,i=1,2,...,n. S se calculeze
2.45. Se dau n

i numerele reale

2.47.

s1 = ( y1 + y 2 + ... + y n ),
62
s2 = ( y1 * x1 + y 2 * x 2 +...+ y n * x n ) / s1,
s3 = ( y1 * x1 * x1 + y 2 * x 2 * x 2 +...+ y n * x n * x n ) / s1,
i m = cardinalul mulimii
2.47. Se dau
componentele

{ xi | 3(s3 - s2* s2) > | xi - s2| } 63.


i numerele reale

x i , y i 64, i=1,2,...,n. S se formeze vectorul Z cu

max{ x1 + x 2 +...+ x i ) / i, y i }, daca y i 0,


65
zi =

min{ x i ,( y1 + y 2 +...+ y i ) / i}, daca y i < 0,

33

pentru i=1,2,...,n.
2.48. Se dau

i numerele reale

x i , y i 66, i=1,2,...,n. S se calculeze

max{ x1 , x 2 ,..., x i },
daca x i < y i ,

z i = max{ min{ x1 , x 2 ,..., x i }, 0}, daca x i = y i , 67

min{ y , y ,..., y },
daca x i > y i ,
i
i+1
n

pentru i=1,2,...,n.
i numerele reale

2.49. Se dau n

x i , y i 68, i=1,2,...,n. S se calculeze

( x1 + x 2 +...+ x i ) / i,
daca x i y i < 0,

ci = max{ x i , y1 , y 2 ,..., y i }, daca x i y i = 0, 69

min{ ,
x i x i+1 ,..., x n , y i }, daca x i y i > 0,

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

i1 , i2 , ... , ik 71, pe care 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. S se determine vectorul

M = ( m1 , m2 ,..., mn ) 73, unde mi 74 este poziia componentei maxime a vectorului


( x1 , x2 ,..., xi , yi , yi+1 ,..., y n ) 75 (dac exist mai multe, poziia primei valori maxime).
n
2.52. Se dau
i
. S se determine poziiile i0 i j0 cu urmtoarea proprietate:
exist m componente consecutive din cei doi vectori, ncepnd cu poziiile i0, respectiv j0, care
coincid i m este cel mai mare posibil. n cazul n care nu exist poziii cu aceast proprietate, i0 i j0
vor fi n+1.

2.53. Se dau n
i

34

x i , y i 76, i=1,2,...,n. S se calculeze


E = | x1 - y1| + | x2 - y2| + ... + | x n - y n| 77
i numerele reale


x i / ( y i * y i + 1),
daca | x i - y i | < E,

ci = max{ x i , y1 , y 2 ,..., y i }, daca | x i - y i | = E, 78

min{ ,
x i x i+1 ,..., x n , y i }, daca | x i - y i | > E,

pentru i=1,2,...,n.
2.54.

Se

dau

numerele

reale

xi , y i , 79 i=1,2,...,n. Dac

x1 < x2 <...< x n si y1 < y2 <...< y n 80 s se depun direct toate numerele distincte n irul Z
ordonat cresctor:

z1 < z2 < ... < z k 81,


deci fr a mai fi necesar ordonarea irului Z.
2.55. Se dau
n
i perechile ( x i , y i ) 82, i=1,2,...,n de numere reale. S se
determine numrul punctelor (xi,yi) din plan care se afl n interiorul cercului de raz a i centru (0,0).

( x i , y i ), 83 i=1,2,...,n de numere reale. S se


determine indicii i1 ,i2 ,...,ik 84 pentru care punctele ( x i , y i ) 85 din plan se afl n interiorul
2.56. Se dau

, n

i perechile

cercului de raz a i centru (0,0).


2.57. Se dau
, 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,

max{0, x i , y i },
daca i = m, 87
zi =
| - y |+| - y |+...+| - y |, daca i > m.
xi i
x1 1 x 2 2
pentru i=1,2,...,n.
2.58. Se dau

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

ci , 91 i=1,2,...,r, ale reprezentrii numrului ntreg C=A+B.

35

2.59. Se dau

i cifrele zecimale

a i , 92 i=1,2,...,m i b j , 93 j=1,2,...,n. Dac A i B

sunt numerele definite n problema 2.58, s se determine indicatorul kod definit astfel:
kod = -2, dac cel puin o valoare a i 94 nu este corect,
kod =
kod =
kod =
kod =

-1,
0,
1,
2,

dac cel puin o valoare


dac A = B,
dac A < B,
dac A > B.

2.60. Se dau

bi 95 nu este corect,

i cifrele zecimale

a i , 96 i=1,2,...,m i b j , 97 j=1,2,...,n. Dac

numerele reale A i B au reprezentrile n baza 10:

A = ( a1 a2 ...ar ,ar+1 ...am )10 98


B = ( b1 b2 ...bs ,bs+1 ...bn )10 99
pentru r<m i s<n dai, s se calculeze indicatorul kod egal cu -1 dac datele iniiale sunt greite, 0
dac A < B, 1 dac A = B, respectiv 2 dac A > B.
2.61. Se d

n>1. Dac X este irul:


1, 1, 2, 1, 2, 3, 1, 2, 3, 4, ...
obinut din irul numerelor naturale prin nlocuirea fiecrui numr natural k cu secvena de numere 1,
2, 3, ..., k, s se construiasc vectorul V = ( v1 , v2 ,... v n ) 100 tiind c cele n componente ale sale
sunt primii n termeni ai irului X.
2.62. Se d

n>1. Dac X este irul:


3, 5, 5, 7, 11, 13, 17, 19, ...
obinut prin scrierea tuturor numerelor prime p i q, unde p i q sunt gemeni, adic numere prime cu
q-p=2, s se construiasc vectorul V = ( v1 , v2 ,... v n ) 101 tiind c cele n componente ale sale sunt
primii n termeni ai irului X.
2.63. Se d
n>1. S se construiasc vectorul V = ( v1 , v2 ,... v n ) 102 tiind c cele
n componente ale sale sunt primii n termeni ai irului:
3, 4, 5, 5, 12, 13, 6, 8, 10, ...
obinut prin scrierea consecutiv a tuturor tripletelor de numere pitagorice p, q, r, p<q<r, triplete
ordonate dup suma p+q+r. Numerele p, q, r se numesc pitagorice dac

p2 + q2 = r 2 103.

2.64. Se dau
n>1. S se construiasc vectorul V = ( v1 , v2 ,... v n ) 104 tiind c
cele n componente ale sale sunt primii n termeni consecutivi ai irului X:
1, 2, 3, 4, 2, 5, 6, 2, 3, 7, 8, 2, ...
obinut prin scrierea numerelor naturale i a divizorilor proprii ai acestor numere, ncepnd cu
x m 105 (fr a reine termenii x i 106 n calculator).
2.65. Se dau
n>1. S se construiasc vectorul V = ( v1 , v2 ,... v n ) 107 tiind c
cele n componente ale vectorului V sunt termeni consecutivi ai irului X:

36

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
n>1. S se construiasc vectorul V = ( v1 , v2 ,... 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
n>1. S se construiasc vectorul V = ( v1 , v2 ,... 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
n>1. S se construiasc vectorul V = ( v1 , v2 ,... 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

i seria

3n - 2
n=1

1
1
. 119
3n - 1 3n

S se construiasc vectorul

V = ( v1 , v2 ,..., v n ) 120 tiind c cele n componente ale vectorului V


sunt sume pariale ale acestei serii, v1 = s20 , vi = s20+5i , 121 i=2,3,...,n, unde sk 122 este suma
primilor k termeni.
2.70. Se d n

i seria

4 1
1
2n-1 + 2n-1 123
2n - 1 2
3
n=1
S se construiasc vectorul V = ( v1 , v2 ,..., v n ) 124 tiind c cele n componente ale vectorului V
sunt sume pariale ale acestei serii, v1 = s20 , vi = s20+5i , 125 i=2,3,...,n, unde sk 126 este suma

(-1 )

n-1

primilor k termeni.

37

2.71. Se dau n

3
1 1* 2
1* 2* 3
(1+ +
+
+... ) 127
2
6 6* 10 6* 10* 14

S se construiasc vectorul

V = ( v1 , v2 ,..., v n ) 128 tiind c cele n componente ale vectorului V


sunt sume pariale ale acestei serii, v1 = s20 , vi = s20+5i , 129 i=2,3,...,n, unde sk 130 este suma
primilor k termeni.
i se cunoate seria

2.72. Se dau n,m

1 1* 2 1* 2* 3

2 1+ +
+
+... 131

3 3* 5 3* 5* 7
S se construiasc vectorul

V = ( v1 , v2 ,..., v n ) 132 tiind c cele n componente ale vectorului V


sunt sume pariale ale acestei serii, v1 = s20 , vi = s20+mi , 133 i=2,3,...,n, unde sk 134 este suma
primilor k termeni.
i se cunoate seria

2.73. Se dau n,m

ui = 1+

1 1 1 1 1 1
+
+
+... 135
3 9 5 92 7 93

S se construiasc vectorul

V = ( v1 , v2 ,..., v n ) 136 tiind c cele n componente ale vectorului V


sunt sume pariale ale acestei serii, v1 = s20 , vi = s20+mi , 137 i=2,3,...,n, unde sk 138 este suma
primilor k termeni.
2.74. Se dau

1+

i se cunoate seria

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

S se construiasc vectorul

V = ( v1 , v2 ,..., v n ) 140 tiind c cele n componente ale vectorului V


sunt sume pariale ale acestei serii, v1 = sm , vi = sm+l*i , 141 i=2,3,...,n, unde sk 142 este suma
primilor k termeni.
2.75. Se dau n,m,l

38

unoate seria

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

V = ( v1 , v2 ,..., v n ) 144 tiind c cele n componente ale vectorului V


sunt sume pariale ale acestei serii, v1 = sl , vi = sl+mi , 145 i=2,3,...,n, unde sk 146 este suma
primilor k termeni.
2.76. Se cunoate seria convergent din problema 2.69. S se determine suma parial sn a
primilor n termeni pentru care
| sn - sn-1| < 147
n fiind cel mai mic numr natural posibil.
2.77. Se cunoate seria convergent din problema 2.70. S se determine suma parial sn a
primilor n termeni pentru care
| sn - sn-1| < 148
n fiind cel mai mic numr natural posibil.
2.78. Se cunoate seria convergent din problema 2.71. S se determine suma parial sn a
primilor n termeni pentru care
| sn - sn-1| < 149
n fiind cel mai mic numr natural posibil.
2.79. Se cunoate seria convergent din problema 2.72. S se determine suma parial sn a
primilor n termeni pentru care
| sn - sn-1| < 150
pent
n fiind cel mai mic numr natural posibil.
2.80. Se cunoate seria convergent din problema 2.73. S se determine suma parial sn a
primilor n termeni pentru care
| sn - sn-1| < 151
n fiind cel mai mic numr natural posibil.
2.81. Se cunoate seria convergent din problema 2.74. S se determine suma parial sn a
primilor n termeni pentru care
| sn - sn-1| < 152
n fiind cel mai mic numr natural posibil.
2.82. Se cunoate seria convergent din problema 2.75. S se determine suma parial sn a
primilor n termeni pentru care
| sn - sn-1| < 153
n fiind cel mai mic numr natural posibil.

39

2.83. S se tipreasc primii n termeni ai irului (xk) definit de relaia de recuren


( x k-1 + a / x k-1 ) / 2, 154 pentru a i x0 numere reale date, pentru care

xk =
| 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 =
pentru m

1
a

* (m - 1) x k-1 + m-1 , 156

m
x k-1
| x n - x n-1|< 0.00001, 157 n fiind cel mai mic posibil.

a, x0

2.85. S se tipreasc primii n termeni ai irului (xk) pentru care | x n - x n-1|< 0.00001, 158
n fiind cel mai mic posibil, n cazul irului

x3
x5
x 2n+1
n
159
+
- ...+(-1 ) *
xn = x 3
5
2n+1
pentru x
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 mic posibil, n cazul irului

x2
xn
x n = 1+ x + +...+ 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 +

x2
xn
+...+ 163
2!
n!

pentru x
2.88. S se tipreasc primii n termeni ai irului (xk) pentru care | x n - x n-1|< 0.00001, 164
n fiind cel mai mic posibil, n cazul irului

xn = x -

x3
x 2n+1
2n+1
+ ... +(-1 ) *
165
3!
(2n+1)!

pentru x
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

40

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] -intervalul [a,b]. S se construiasc irul de intervale

f(x) = 0 are o singur rdcin n


[ x i , y i ] 167, i =1,2,...,n, definit astfel:

[ x0 , y0 ] = [a,b] 168 ;
2. [ x i , y i ] 169 se obine mprind intervalul [ x i-1 , y i-1 ] 170 n trei pri egale
1.

i lund partea care conine rdcina;


3. n este cel mai mic numr natural pentru care
pozitiv dat.

y n - x n 171<eps, pentru eps numr

41

42

CAPITOLUL 3

PROBLEME REZOLVATE CU AJUTORUL


VECTORILOR
3.1. NUMRUL PUNCTELOR DIN CERC
Se dau n puncte n plan i un cerc. Se cere numrul punctelor care se afl n interiorul
cercului.
Rezolvare
Punctele se dau prin coordonatele (xi,yi), i=1,2,...,n. Variabila nr va conine numrul
punctelor din interiorul cercului, care se d prin centrul O(a,b) i raza r.
Deci specificarea problemei este:
{ numrul punctelor date }
{ coordonatele celor n puncte }
{ coordonatele centrului cercului }
{ raza cercului dat }
{ numrul punctelor aflate n interiorul cercului }

DATE n,
(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,
(xi,yi, i=1,n),
a,b,
r;
Fie nr:=0;
Pentru i:=1,n execut
2

Dac ( x i - a) + (
sf-pentru
REZULTATE nr;

{ numrul punctelor date }


{ coordonatele celor n puncte }
{ coordonatele centrului cercului }
{ raza cercului dat }

yi - b)2 < r 2 172 atunci nr:=nr+1 sf-dac


{ numrul punctelor aflate n interiorul cercului }

43

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;

{Programul 3.1 Nr. puncte ntr-un cerc}


{ numrul punctelor date }
{ variabila de lucru - contor }
{ numrul punctelor aflate in cerc }
{ coordonatele centrului cercului }
{ raza cercului dat }
{ x[i] = abscisa iar }
{ y[i] = ordonata punctului "i" }

begin
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

44

Se dau
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),

{ numrul componentelor lui X }


{ numrul componentelor lui Y }
{componentele vectorului X: x1
2
m}
{componentele vectorului Y: y1
2
n}
{ numrul componentelor lui Z: k=m+n }
{ componentele vectorului Z. Ele sunt toate }
{ componentele din X i Y. Avem z1
2
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),
Fie i:=1; j:=1; k:=0;
Dac xi<yj
atunci k:=k+1; z[k]:=x[i]; i:=i+1
altfel k:=k+1; z[k]:=y[j]; j:=j+1
sf-dac
sf-cttimp
Cttimp (i<=m) execut
k:=k+1; z[k]:=x[i]; i:=i+1
sf-cttimp
Cttimp (j<=n) execut
k:=k+1; z[k]:=y[j]; j:=j+1
sfRezultate k,
(zi, i=1,k),

{ Z := X interclasat cu Y }
{ numrul componentelor lui X }
{ numrul componentelor lui Y }
{componentele vectorului X. Avem x1
2
m}
{componentele vectorului Y. Avem y1
2
n}

{ k = numrul componentelor lui Z: k=m+n}


{ componentele vectorului Z. Ele sunt toate }
{ componentele din X i Y i z1
2
k}

45

sf-algoritm
Programul PASCAL este dat n continuare.
PROGRAM INTERCLASARE;
VAR m,
n,
i,j,
k: integer;
X,Y,
Z : array[1..100] of integer;

{ Programul 3.2. Interclasarea }


{ componentelor vectorilor X si Y }
{ numrul componentelor lui X }
{ numrul componentelor lui Y }
{ contori in X, respectiv Y }
{ numrul valorilor gsite in Z }
{ Vectori cu numerele date }
{ Vector rezultat-cu }
{ componentele din X si Y interclasate}

BEGIN
{ Citesc m, X }
Writeln('Se dau doi vectori X i Y');
Write('Nr.comp. lui X='); readln(m);
For i:=1 to m do
begin write('x(',i,')='); readln(x[i]) end;
{ Citesc n, Y }
Write('Nr.comp. lui Y='); readln(n);
For j:=1 to n do
begin write('y(',j,')='); readln(y[j]) end;
{ Interclasarea }
i:=1; j:=1; k:=0;
While (i<=m) and (j<=n) do
If x[i]<y[j]
then begin k:=k+1; z[k]:=x[i]; i:=i+1 end
else begin k:=k+1; z[k]:=y[j]; j:=j+1 end;
While (i<=m) do
begin
k:=k+1; z[k]:=x[i]; i:=i+1
end;
While (j<=n) do
begin
k:=k+1; z[k]:=y[j]; j:=j+1
end;
Writeln;
Writeln(' Numerele ordonate sunt');
For j:=1 to k do write(z[j]:5);
readln
END.

46

{ Tiprete rezultatele }

3.3. PROBLEME PROPUSE


3.1. Se d un polinom P(X) cu coeficieni reali. S se calculeze valoarea polinomului P(X)
ntr-un punct x0 dat.
3.2. Se d un polinom P(X) cu coeficieni reali. S se verifice dac un numr dat r este
rdcina acestui polinom.
3.3. Se d un polinom P(X) cu coeficieni reali. S se calculeze derivata acestui polinom.
3.4. Se d un polinom P(X) cu coeficieni reali. S se calculeze derivata de ordinul k a
polinomului dat.
3.5. Se d un polinom de gradul n cu coeficieni ntregi. S se gseasc rdcinile ntregi ale
polinomului dat.
3.6. Se d un polinom de gradul n cu coeficieni ntregi. S se gseasc rdcinile raionale
ale acestui polinom.
3.7. Se dau dou polinoame P(X) i Q(X). S se calculeze suma lor.
3.8. Se dau dou polinoame P(X) i Q(X). S se calculeze produsul lor.
3.9. Se dau dou polinoame P(X) i Q(X).S se calculeze T(X)=P(Q(X)).
i mulimile

3.10. Se dau

A = { a1 , a2 ,..., a m }
173
B = { b1 , b2 ,..., bn }
S se calculeze C = A

B.
i mulimile

3.11. Se dau

A = { a1 , a2 ,..., a m }
174
B = { b1 , b2 ,..., bn }
S se calculeze C = A
3.12. Se dau

B.
i mulimile

47

A = { a1 , a2 ,..., 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.
3.15. Se dau dou numere scrise n baza b. S se gseasc ctul i restul mpririi primului
numr la al doilea numr.
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.
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.

48

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

49

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

50

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

x
a(i, j) =

k=1

(i j - i +1)

(4.1) 176

pentru i=1,m i j=1,n.


Pentru rezolvarea problemei, algoritmul pe care-l vom descrie folosete un tablou
unidimensional pentru irul X i un tablou bidimensional pentru matricea A. Deci specificarea
problemei este:
DATE m,
n,
X;
REZULTATE A

{numrul liniilor matricei A}


(numrul coloanelor matricei A}
{vector ce conine cele m*n numere date}
{Matrice de dimensiune m*n definit de (4.1)}

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)

{Se calculeaz A conform formulei 4.1}


{m*n este dimensiunea matricei cerute}
{X=(X(i),i=1,m*n) este un vector cu m*n componente date}

51

sf-pentru;
A(i,j):=sum/(i*j-i+1)
sf-pentru
sf-pentru
Rezultate A;
sf-algoritm

{Matrice de dimensiune m*n definit de (4.1)}

Programul PASCAL corespunztor este urmtorul:


Program matrice;
{ Programul 4.1. Construirea unei matrice A }
Type sir=array[1..100] of real;
mat=array[1..10,1..10] of real;
Var m,n,
{m*n este dimensiunea matricei cerute}
i,j,k:integer;
{variabile auxiliare}
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

52

Se dau m,n,k
i numerele ntregi x1,x2,...,xk. 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

{dau dimensiunea matricei}


{numrul componentelor irului X}
{vector de dimensiune k}
{matrice de dimensiune m*n}

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.
Algoritmul MATRICE2 este:
DATE m,n,
k,
X;
Dac m*n>k
atunci Tiprete('Prea puine elemente n ir')
altfel Fie j:=1; l:=1; kod:=0;
Repet
Dac kod=0
atunci kod:=1;
Pentru i:=1,m execut aij:=xl; l:=l+1 sf-pentru
altfel kod:=0;
Pentru i:=m,1,-1 execut aij:=xl; l:=l+1 sf-pentru
sf-dac
pn cnd j>n sf-repet

{dau dimensiunea matricei}


{numrul componentelor irului X}
{vector de dimensiune k}

53

REZULTATE A
sf-dac

{matrice de dimensiune m*n}

Programul Pascal este:


Program matrice2;
{Programul 4.2. Matrice dintr-un vector}
Type sir = array[1..100] of integer;
mat = array[1..10,1..10] of integer;
Var m, n,
{dimensiunile matricei}
i, j,
{indici linie-coloana in matricea A}
k,
{numr natural dat}
l,
{indice n ir}
kod : integer;
{variabila de control}
X : sir;
{vector ce conine numerele date, de lungime k}
A : mat;
{matricea cerut}
Begin
Writeln{'Se constuiete o matrice dintr-un ir de numere');
write('Dai dimensiunile matricei:'); readln(m,n);
write('Dai dimensiunea irului:'); readln(k);
{ Dac elementele irului nu }
if m*n > k
{ "umplu" matricea se }
then write('Prea puine elemente in ir')
{ semnaleaz eroare }
else begin
for i := 1 to k do
begin write('x(',i,')='); readln(x[i]) end;
j:=1; l:=1; kod:=0;
repeat
if kod = 0
then begin
for i:=1 to m do
{ pe coloan de sus in jos }
begin a[i,j]:= x[l]; l:=l+1 end;
kod:=1
{se schimba valoarea lui kod}
end
else begin
{ pe coloana }
for i:=m downto 1 do
{ de jos in sus }
begin a[i,j]:=x[l]; l:=l+1 end;
kod := 0
{ se schimba valoarea lui kod}
end;
j := j+1
until j>n;
{se repeta pana cnd s-a completat coloana n}
for i:= 1 to m do
{ tiprete linia i a matricei }
begin
for j := 1 to n do write(a[i,j]:5);
writeln

54

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.
4.1. Se d o matrice
mai mare element al matricei.

m,n(R+).

S se calculeze raportul dintre cel mai mic element i cel

4.2. Se d o matrice

m,n(R).

S se adauge a (n+1)-a coloan acestei matrice, definit

prin:
n

A(i,n+1)=

A(i, j) 177 , pentru i=1,m.


j=1

4.3. Se d o matrice
m,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
element pozitiv.
4.5. Se d o matrice

Mm,n(R). S se determine linia i coloana care conin cel mai mic

m,n(R+).

Dac vi este valoarea maxim din linia i s se calculeze:

w = min{ vi | i = 1,m} 178.


4.6. Se d o matrice
m,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
m,n(R+). S se schimbe ntre ele liniile matricei A astfel ca prima
coloan s devin ordonat cresctor.
4.8. Se d o matrice
m,n(R+) i un interval
elementele matricei aflate n intervalul
4.9. Se d o matrice
valoarea minim din acea linie.
4.10. Se d o matrice

m,n(R+).

m,n(R).

S se rein ntr-un vector X toate

Pentru fiecare linie s se scad din elementele sale

S se construiasc vectorul X =

( x1 , x2 , ..., x k ) 179 ce reprezint indicii liniilor care conin valori nule.

55

4.11. Se d o matrice
m,n(R). S se tipreasc matricea A completat cu o nou coloan
n care elementul din linia a i-a este egal cu cel mai mare numr negativ din linia a i-a, dac exist
elemente negative, respectiv cu 10 cnd nu exist elemente negative.
4.12. Se d o matrice
m,n(R+) i numerele naturale l i k (1<l<n, 1<k<m). Prin operaii
de schimbare a dou linii ntre ele s se obin pe coloana k elementele ordonate cresctor pn la
linia l i apoi descresctor.
4.13. Se d o matrice
m,n(R+) i numerele naturale l i k (1<k<n, 1<l<m). Prin operaii
de schimbare a dou coloane ntre ele s se obin pe linia k elementele ordonate descresctor pn la
coloana l i apoi cresctor.
4.14. Se d o matrice
media
m,n(R). S se mpart elementele fiecrei linii la
aritmetic a elementelor pozitive din linia respectiv. Dac ntr-o linie nu exist elemente pozitive,
linia rmne neschimbat.
4.15. Se d o matrice
m,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
matricea dat.

m,n(R+).

S se verifice dac exist dou linii proporionale n

4.17. Se d o matrice
m,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
m,n(R+). S se schimbe ntre ele liniile matricei astfel nct irul
sumelor s1 , s2 ,..., sm 180 s fie ordonat descresctor, unde
n

si =

ij

, i = 1,m 181.

j=1

4.19. Se d o matrice
m,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

m,n(R+).

Poziia

( i0 , j0 ) 182 se numete punct a dac:

a i0 , j0 183 este maxim pe coloana j0;


b) a i0 , j 0 184 este minim pe linia i0 185.
a)

S se tipreasc toate punctele a dac exist astfel de puncte sau un mesaj corespunztor n caz
contrar.

56

4.21. Se d o matrice

m,n(R+).

S se formeze matricea B cu m linii i n coloane unde

bij = ( aij - max ) 186, unde max este cel mai mare element al matricei A.
4.22. Se d o matrice A

m,n(R+).

S se formeze matricea B cu m linii i n coloane unde

daca i < j
aij ,

187
bij =
( ai 1+ ain + a1j + a mj ) / 4, altfel.

4.23. Se d o matrice
linii i n coloane unde

m,n(R+).

Se dau numerele x i y. S se formeze matricea B cu m

- 1, daca a ij (x, y)

bij = 0, daca a ij {x, y} 188


1, daca a [x, y].
ij

4.24. Se d

m,n(R).

S se formeze matricea B cu m linii i n coloane unde:

bij = | max{ aik | k = 1,2,...,n}| - aij 189.


4.25. Se d
m,n(R+). S se formeze matricea B cu m linii i n coloane, n care elementul
bij se definete ca suma elementelor matricei A aflate pe linia i, mai puin elementul aflat pe coloana j.
4.26. Se d

m,n(Z).

S se formeze matricele B i C cu m linii i n coloane unde

aij , daca aij este par


190
bij =
0, altfel ,

aij , daca aij este impar


191
cij =
0, altfel.

4.27. Se d
m,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

57


0 , daca a ij <

1 , daca x
a ij

bij =

2 , daca y a ij

3 , daca a ij

4.28. Se d

m,n(R+).

x
< y
< z

192

z.

S se determine vectorii B i C definii astfel :

bi = max{ a ij | j = 1,2,...,n } , i = 1,2,...,m


m

cj =

ij

bi ,

j = 1,2,...,n.

193

i=1

4.29. Se d
m,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
n(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
m,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
n(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
n(R). S se ordoneze liniile i coloanele matricei astfel nct elementele
de pe diagonala principal s fie ordonate cresctor.
4.34. Se d
n(R). n fiecare linie s se schimbe ntre ele elementele care se gsesc pe
diagonala principal cu cele care se gsesc pe cea secundar.
4.35. Se d
n(R). S se determine vectorii X i Y cu n componente, unde:
X(i) = numrul elementelor pozitive din linia i;
Y(i) = numrul elementelor negative din coloana i .
4.36. Se d

58

n(R).

S se calculeze suma primelor n puteri ale matricei A.

4.37. Se d
matricei A.

n(R).

S se calculeze matricea P = A*AT, unde AT reprezint transpusa

4.38. Se d
n(R). S se genereze o matrice
n(R) astfel nct elementele matricei
s reprezinte elementele vectorului X scrise n urmtoarea ordine:
X(1) X(2) ... X(n-1) X(n)
X(4n-4) X(4n-3) ... X(.) X(n+1)
. . ... . .
X(3n-2) X(3n-3) ... X(2n) X(2n-1).
4.39. Se d
n(R). S se genereze o matrice ptrat A de ordin maxim posibil, astfel
nct elementele matricei s reprezinte elementele vectorului X scrise n urmtoarea ordine:
X(1) X(2) X(5) X(10) ...
X(4) X(3) X(6) X(11) ...
X(9) X(8) X(7) X(12) ...
X(16) X(15) X(14) X(13) ...
. . .
4.40. Se d
n(R). S se genereze o matrice A ptrat de ordinul m, cu m maxim posibil,
astfel nct elementele matricei s reprezinte elementele vectorului X scrise n urmtoarea ordine:
X(1) X(2) X(4) X(7) ...
X(3) X(5) X(8) ...
X(6) X(9) ...
X(10) ...
4.41. Se d
n(R). S se genereze o matrice ptrat A de ordinul m, cu m maxim posibil,
astfel nct elementele matricei s reprezinte elementele vectorului X scrise n urmtoarea ordine:
X(1) X(2) X(6) X(7) X(15) ...
X(3) X(5) X(8) X(14) ...
X(4) X(9) X(13) ...
X(10) X(12) ...
X(11) ...
2
4.42. Se dau
i
n(R) pentru n=m . S se construiasc o matrice ptrat de
ordinul m, dac este posibil, astfel:
- deasupra diagonalei principale elementele matricei sunt elementele irului ncepnd cu x1, scrise n
ordine pe linii;
- elementele de pe diagonala principal sunt ai,i = xi*i;
- elementele de sub diagonala principal se calculeaz astfel:

ai,j = max{ xj, ... , xi }.


4.43. Se d
2n(R). S se construiasc o matrice ptratic de ordinul n astfel: se
completeaz diagonala principal de sus n jos cu elemente consecutive din ir ncepnd cu x1;
deasupra diagonalei principale se completeaz matricea paralel cu diagonala principal, de sus n jos,

59

cu elemente succesive din ir, ncepnd cu xn+1, iar sub diagonala principal elementul din linia i i
coloana j a matricei este egal cu elementul xj+i al irului.
4.44. Se d

2n(R).

ai, j

S se construiasc o matrice ptratic de ordinul n astfel nct:

min{ x i ,..., x n },
daca i este par

194
=

max{ x k | x k < 0,k = 1, j}, daca i este impar .

S se formeze matricea A Mm,n(R) din elementele irului


1,1,2,4,3,9,27,1,4,16,5,25,125,...
scrise n ordine pe linii. (Se va observa c irul este obinut din irul numerelor naturale prin nlocuirea
fiecrui numr par p cu o secven format din numerele 1,p,p2 i a numrului impar i>1 cu o secven
format din numerele i,i2,i3) .
4.45. Se dau m, n

4.46. Se dau m, n
S se formeze matricea A Mm,n(R) din elementele irului
1, 2,2, 1,2,3, 4,4,4,4, 1,2,3,4,5, 6,6,6,6,6,6, 1,2, 3,4,5,6,7, 8,8,8,8,8,8,8,8, 1,2,...
scrise n ordine pe coloane. (Se va observa c irul este obinut din irul numerelor naturale prin
nlocuirea fiecrui numr par p cu o secven format din p numere toate egale cu p i a numrului
impar i cu o secven format din numerele 1,2,...,i).
4.47. Se dau

m*n(R).

S se genereze o matrice

m,n(R)

definit astfel:

m*n(R).

S se genereze o matrice

m,n(R)

definit astfel:

( x i + x i+1 +...+ x ij ) / (ij - i +1) , daca x i > 0


195
aij =

max{ x i , x i+1 ,..., x ij } ,


daca x i 0

pentru i=1,2,...,m i j=1,2,...,n.


4.48. Se dau

(i-1)n+ j

a ij =

x l 196

l=(i-1)n+1

pentru i=1,2,...,m i j=1,2,...,n.


4.49. Se dau 2 numere naturale m i n. S se construiasc matricea

m,n(R)

definit

astfel :
A(i,j) =

este numr prim


este numr perfect neprim

pentru i=1,2,...,m i j=1,2,...,n.


4.50. Fie B o matrice definit astfel:
este numr prim
B(i,j) =
pentru i=1,2,...,m i j=1,2,...,n i fie matricea C de aceleai dimensiuni, n care linia i reprezint

60

numrul 2i+1 scris n baza 2. S se determine matricea A = B + C, adunare modulo 2.


4.51. S se construiasc matricea A definit prin :
i*j) , dac i*j < m*n/2
A(i,j) =
i+j) , n caz contrar,
pentru i=1,2,...,m i j=1,2,...,n.
4.52. Se d
i fie M(1)=a. S se formeze matricea ptrat A de ordinul n de forma
M(1) M(12) M(11) M(10)
M(2) M(13) M(16) M( 9)
M(3) M(14) M(15) M( 8)
M(4) M( 5) M( 6) M( 7)

M(k) = I 2M(k-1) + 10 197


pentru k = 2,3,...,n*n, unde I p 198 reprezint rsturnatul numrului p (exemplu: rsturnatul
(n cazul n=4) dac

numrului 123 este numrul 321)


4.53. Un labirint n care exist numai drumuri (poteci, alei) orizontale i verticale, se
reprezint cu ajutorul unei matrice, n care un ir de zerouri reprezint un drum, un ir de 1 un zid. Se
d o poziie iniial n interiorul labirintului. S se gseasc cel mai scurt drum pe care se poate iei
din labirint.
4.54. Se d o matrice cu elemente cuvinte de maximum 30 de litere sau spaii. S se afle
frecvena vocalelor n cuvinte:
- pe linii;
- pe coloane;
- n matrice.
4.55. Se dau vectorii

m(R)

n(R).

S se formeze matricea

m,n(R)

dac

m,n(R)

dac

a(k)
c(i, j) =

k=1
n

b(k)

199

k= j

n cazul n care numitorul este nul, c(i,j)=-1.


4.56. Se dau vectorii

cij =

m(R)

n(R).

S se formeze matricea

ai * b j
200
max{ a1 ,...,a m ,b1 ,...,bn }

n cazul n care numitorul este nul se ia cij = min{ai, bj}.

61

4.57. Se dau vectorii

m(R)

n(R).

S se formeze matricea

m,n(R)

dac

cij = max{ ai , bi , a j + b j }, i = 1,2,...,m, j = 1,2,..n 201.


4.58. Se dau vectorii

m(R)

n(R).

a b

cij =

k=1

4.59. Se dau dou matrice

S se formeze matricea

m,n(R)

dac

m,n(R).

p 202

p=1

S se determine matricea

m,n(R)

unde

cij = max{ aij ,bij } , i = 1,m j = 1,n 203.


4.60. Se dau dou matrice

n(R).

S se determine matricea

n(R)

definit

prin:

cij = min{ aik + bkj | k = 1,2,...,n}. 204


4.61. Se dau dou matrice

m,n(R).

S se determine matricea

m,n(B2)

unde

0 , daca aij bij


205
cij =

1 , daca aij = bij .


4.62. Se dau dou matrice

m,n(R).

a
j=1

S se gseasc mulimea indicilor i pentru care:


n

ij

<

ij

. 206

j=1

4.63. Se cere s se genereze matricea A, ptratic de ordinul n, definit astfel:


C(j,i), dac i<j
A(i,j) =
C(i,j), n caz contrar.
Prin C(n,k) s-a notat "combinri de n luate cte k". S se verifice dac matricea este simetric.
4.64. Se dau n obiecte i o matrice D = d(i,j) simetric, d(i,j) > 0 reprezentnd distana de la
obiectul i la obiectul j (msur a gradului de disimilaritate dintre obiectele i i j). S se determine toate
mulimile nevide de perechi de obiecte pentru care k-1 < d(i,j) k ( k
k
d(i,j)
i,j=1,...,n}).
4.65. S se tipreasc toate matricele ptrate de ordinul 4 care au un singur 1 pe fiecare linie
i pe fiecare coloan iar n rest 0.
4.66. Fie

62

n(R)

trei matrice diagonale, iar

2n(R)

o matrice cu structura:

A B
D =
207
B C
X i P fiind 2 vectori coloan de dimensiune 2n cu componente reale, s se ntocmeasc un algoritm i
s se scrie un program pentru rezolvarea sistemului D X = P.
4.68. Se dau numerele ntregi x1 , x 2 ,..., x n [0,2n ) . 208 S se tipreasc matricea
ptrat de ordinul n care are proprietatea c linia a i-a a acestei matrice reprezint numrul xi n baza
doi.
4.69. Se d
de coloanele matricei.
4.70. Se d

m,n(B2).

n(R).

S se determine numerele a cror reprezentri n baza 2 sunt date

S se formeze matricea A

MPn(R) cu elementele:

max{ x k |k j si k i} , daca j i si x l > 0, l = j, j +1,...,i

daca j i si x l 0, l = j, j +1,...,i 209


a ij = min{ x 2k | j k i},

( x i + x i+1 +...+ x j ) / (j - i +1), daca j > i .

63

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
n ordine cresctoare;
- elementele mulimii
n ordine cresctoare;
- elementele mulimii
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,
m,
A,
B;
REZULTATE nm,
AUB

{numrul elementelor mulimii A}


{numrul elementelor mulimii B}
{mulimea {a1, a2, ... , an } }
{mulimea {b1, b2, ... , bm } }
{numrul elementelor reuniunii }

- o procedur pentru tiprirea unei mulimi: TIPAR(n,A,ch);


DATE {de intrare}
n,
{numrul elementelor mulimii A}
A,
{mulimea {a1, a2, ... , an } }

64

ch;
REZULTATE afiarea elementelor mulimii

{caracter considerat numele 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).
aceeai semnificaie ca la procedura REUN, dar, n plus, se tiprete AUB.
Algoritmul pentru rezolvarea problemei, descris n limbajul PSEUDOCOD, este urmtorul:
Algoritmul Exemplu1 este:
Cheam CIT(n,A);

{ A e vectorul care conine n componentele }


{ sale cele n elemente ale mulimii A}
{ Citete mulimea B}
{ Citete mulimea C}

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}

Subalgoritmii apelai mai sus sunt descrii n continuare:


Subalgoritmul ORDON(r,X) este:
Repet
Fie sch:= 0;
Pentru i:= 1, r-1 execut
Dac xi > xi+1 210 atunci Fie xx:=

{Ordoneaz componentele lui X}


{examineaz toate componentele}
{ipoteza c sunt ordonate}

x i ; 211

xi := xi+1 ; 212
Fie xi+1 := xx; 213
Fie

Fie sch:=1;
sf-dac
sf-pentru
pncnd sch=0 sf-repet
sf-ORDON

{reine c n-au fost ordonate}

65

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
{Ordoneaz i apoi tiprete}
{ cele n componente ale vectorului X}
{ch=numele mulimii reprezentat n vectorul X}

Subalgoritmul TIPORDON(r,X,ch);
Cheam ORDON(p,X);
Cheam TIPAR(r,X,ch);
sf-REUN
Subalgoritmul TIPREUN(n,A,m,B,n1,AUB,ch) este:

{Ordoneaz i tiprete pe AUB}


Cheam REUN(m,B,p,C,m1,BC);
Cheam TIPORDON(r,X,ch);
sf-TIPREUN
Traducerea algoritmului n limbajul PASCAL este urmtoarea:
Program exemplu1;
Type
sir = array [1..30] of real;
s3 = string[3];
Var n, m, p, n1, m1, p1 : integer;
a, b, c,
ab, bc, ca : sir;
Procedure cit(var n: integer; var a: sir; ch: s3);

var i: integer;
begin
write('nr. elementelor mulimii ', ch, ' este:');
readln(n);
for i := 1 to n do
begin write(ch, '[', i, ']='); readln(a[i]) end;

66

{ Programul 5.1 }
{operaii cu mulimi reprezentate ca vectori}

{a,b,c conin elementele a trei mulimi de numere }


{Citete n si }
{ mulimea a cu n elemente}
{ch=numele mulimii citite}

end;
Procedure tipar(n: integer; a: sir;
ch: s3);
var i: integer;
begin
writeln('elementele mulimii ', ch, ' sunt:');
for i := 1 to n do writeln(ch, '[', i, ']=', a[i]);
end;
Procedure ordon(r: integer;
var x: sir);
var xx: real;
i, sch: integer;
begin
repeat sch := 0;
for i := 1 to r-1 do
if x[i] > x[i+1] then
begin
xx := x[i];
x[i] := x[i + 1];
x[i + 1] := xx;
sch := 1
end;
until sch = 0;
end;

{Tiprete mulimea a cu}


{numele ch avnd n elemente}

{Ordoneaz cresctor elementele}


{vectorului X cu r componente}

Procedure tipordon(r: integer; var x: sir; nume:string);


var xx: real;
i, sch: integer;
begin
ordon(r, x);
tipar(r, x, nume);
end;
Procedure reun(n, m: integer; A,B: sir;
var n1:integer; var AUB:sir);
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;

67

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}

5.2. NUMERE PRIME


S se scrie un program care determin primele n numere prime (n>3), folosind o funcie care
stabilete dac un numr este prim sau nu.
Specificarea problemei:
DATE n;
REZULTATE (pj,j=1,n);

{p1,p2,...,pn 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.
poate fi apelat oricnd este nevoie de el. Vectorul P va reine cele n numere prime. n variabila i vom

68

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
Dac prim(i) atunci
Fie k:=k+1; pk:=i;
sf-dac;
Fie i:=i+2;
pn cnd k=n sf-repet
sf-NRPRIME

{Se caut n numere prime}

Funcia PRIM(n) este:


prim:=true;
Pentru i:=2, n/2 execut
Dac n mod i = 0 atunci prim:=false sf-dac
sf-pentru
Sf-PRIM
Programul PASCAL cerut este urmtorul:
Program exemplu2;
Type vector = array[1..999] of integer;
Var n,
i : integer;
P : vector;
function prim(n: integer): boolean;
var i: integer;
begin
prim := true;
for i := 2 to n div 2 do
if n mod i = 0 then prim := false;
end;
Procedure NRPRIME(n:integer;
Var P:vector);
Var k:integer;
begin
i := 5; k := 2;
P[1]:=2; p[2]:=3;
repeat

{Programul 5.2. Gsete primele n numere prime }


{ numrul numerelor gsite }
{ variabila contor in P }
{ Vectorul numerelor prime }
{Dac n e prim atunci TRUE}

{ In vectorul P se obin }
{ primele n numere prime }

69

if prim(i) then begin k:= k+1; P[k]:=i end;


i:= i+2;
until k > n;
end;
begin
write('cate numere prime va intereseaz?');
readln(n);
NRPRIME(n,P);
writeln('primele ', k, ' numere prime sunt urmtoarele:');
For i:=1 to n do
begin
write(P[i]:4);
If i mod 5 = 0 then writeln
end
end.

{programul principal}

5.3. PROBLEME PROPUSE


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
polinoame Q i R, tiprii polinoamele (x + 1)n pentru n = 1,2,...,12.

P = Q R 218 a dou

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.

70

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
punct dat, folosind o funcie de calcul a valorii unui polinom ntr-un punct.

ntr-un

5.10. Folosind dezvoltarea n serie:

1 x3
1 3 x5
1 3 5 x7
arcsin x = x + +
+
+ ... 219
2 3
24 5
246 7
s se defineasc o funcie PASCAL care calculeaz arcsin x cu precizia
tipreasc apoi valorile:

v i = arcsin

= 10-6 . 220

S se

1
, i = 2,3,...,m 221.
i

5.11. Fie irul x1,x2,...,xn. 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:
i

...

...

...

...

.
.
.

.
.
.

.
.
.

10

...

...

i 223

i 224

71

Observaie. Radicalul

r =

m 225 se calculeaz prin rezolvarea ecuaiei t n = m 226.

5.13.
X: x1,x2,...,xn; Y: y1,y2,...,ym; Z: z1,z2,...,zp de numere
ntregi. Pentru fiecare ir se cere s se calculeze i s se afieze frecvenele de apariie ale cifrelor 0,1,
..., 9 n scrierea numerelor din irurile date.
5.14. Fie o grup de studeni care au susinut 5 examene ntr-o sesiune. S se scrie programul
care afieaz:
- primii 6 studeni n ordinea mediei generale obinute;
- studenii care nu au promovat cel puin trei examene.
5.15. S se scrie un program care genereaz un ir aleator de m numere ntregi i care
stabilete frecvena de apariie n acest ir a:
- numerelor prime;
- numerelor divizibile cu 13.
Observaie. Pentru generarea unui numr aleator se vor folosi funcia i respectiv procedura
predefinit RANDOM i RANDOMIZE.
5.16. Fie
i x1, x2,..., xn un ir de numere naturale date. S se scrie un program care
gsete:
a) media aritmetic a acestor numere;
b) maximul din irul y1,y2,...,yn unde yi se obine n felul urmtor:
y1 = x1 , yi = ( xi div xi-1 ) * ( xi + xi-1 ) , i = 1,2,...,n. 227.
c) S se scrie o funcie boolean care stabilete dac cele dou iruri au i alte elemente
comune n afara primului.
5.15. Dou numere prime p, q se numesc gemeni dac p = q + 2. S se determine primele n
perechi de gemeni.
5.18. Trei numere ntregi a, b, c, a < b < c se numesc pitagorice dac
2

c = a2 + b2 228, iar dou triplete ( a1 ,b1 ,c1 ) 229 i ( a2 ,b2 ,c2 ) 230 sunt considerate a fi
asemenea dac

a1
b1
c1
=
=
231.
a2
b2
c2
Se d
i mulimea de numere ntregi X = {xi
Se cere s se afieze mulimea
tripletelor pitagorice din mulimea dat i clasele determinate de relaia de asemnare pe aceast
mulime.
5.19. Fie
mulimea:

72

A1 , A2 , ..., An 232 n mulimi de numere. S se scrie programul care determin


A = (...( A1 A2 ) A3 ) ... An-1 ) An 233,

folosind pentru aceasta o procedur de calcul a mulimii:

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]

a = x0 < x1 < x2 < ... < x n = b 235


care are ca puncte capetele subintervalelor din I;
b) S se calculeze valorile v i = f( x i ) 236, unde
din I n care se afl

f( x i ) 237 este numrul de subintervale

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 n+1

. .
.
.
.
x 2n
x 2 x n+2

.
.
.
x 3 x n+3 .
. x 2n+1
A =
239.
.
.
. .
.
.
.
.
.
.
.
. . x 3n-3 x n-1 x 2n-1

.
.
.
. .
. x 3n-2
x n
S se tipreasc n final

A, A2 , ..., An . 240
x1 , x2 , ..., x n 241. Se cere programul care genereaz

5.22.
matricea de dimensiune

mxk 242 care are pe liniile sale n ordine elemente din irul:
x1 , x2 , ..., x n , x1 , x2 , ..., x n , ... . 243
5.23. tiind c irul

{ x n } 244:

1,2,3,2,5,2,3,7,2,4,3,2,5,11,...
este format din irul numerelor naturale n care fiecare numr compus este nlocuit prin divizorii si
proprii, s se genereze matricea:

73

x1
x2

x m+1
x m+2
A =
.
.

x(m-1)m+1 x(m-1)m+2

x m

. . . x 2m
245.
. . .
.

. . . x m2
. . .

5.24. S se scrie un program care rezolv ecuaia matriceal:


A X + B = C 246,
unde A,B,C 247 M 3x3 248 i X este vectorul necunoscut.
5.25. S se scrie un program pentru rezolvarea unui sistem liniar de patru ecuaii cu patru
necunoscute folosind metoda lui Kramer. Programul va stabili mai nti dac sistemul este compatibil
i unic determinat.
5.26. Se dau

i vectorii X, Y cu n componente numere reale. S se calculeze valorile:

g( x i ), daca x i < 0,

v i = f( x i ) = l( x i ), daca x i = 0, 249
h( y ), daca
x i > 0,
i

pentru i=1,2,...,n, unde:

g( x i ) = max x1 , x 2 , ..., x i,

h( y i ) = min y i , ..., y n ,

250

l( x i ) 251 este media aritmetic a numerelor pozitive din irul { x n 252} cu


valoare mai mic dect | y i | 253.
pentru i=1,2,...,n, iar

5.27. Se dau
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)

74

n-1

3 C1n - 7 C2n + 11 C3n - ... + (-1 ) (4n - 1) Cnn ; 255

b)

3
3
3
( C0n )
( C1n )
( Cnn )
256.
+
+ ... +
0!
1!
n!

5.29. S se scrie un program pentru calculul sumei:

S =
unde

1
1
1
+
+ ... +
, 257
a1 a2 ... a k
a2 a3 ... 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.

5.30. Dac numerele a1 , a2 , ..., an+1 259 sunt primii n+1 termenii ai unei progresii
geometrice, s se calculeze, printr-un program, sumele:

a)

Sn =

b)

S n =

1
+
a - a1p

p
2

a1
+
a2 - a1

p
3

-a

p
2

+ ... +

p
n-1

1
260
- a np

a2
+ ... +
a3 - a2

an
261.
a n+1 - a n

Observaie. Raia i primul termen al progresiei vor fi furnizate programului de ctre utilizator.
5.31. Se dau
care tiprete permutarea

i numerele reale

a1 < a2 < ... < an 262. S se scrie programul

Sn 263 pentru care suma


n

Sn =

( a

- a (i) ) 264

i=1

este maxim, respectiv minim.


5.32.

f(X)= a0 X n + a1 X n-1+...+ an-1 X + an I m , 265

Fie

ai _ , i = 0,n, 266 iar X,Im

unde

M mxm 267 i fie matricele A,B Mmxm 268. S se scrie un

program care calculeaz f(A) + f(B) i f(A+B).


5.33. Se dau

. S se scrie un program care calculeaz suma:


n

cos k


k=1

sin k
269
cos2 k sin 2 k

75

5.34. Dac

x1 , x2 270 sunt rdcinile reale ale ecuaiei de gradul doi (cu coeficieni reali):
a1 x + a2 x + a3 = 0 271, s se scrie programul care calculeaz suma:
2

S =

k=1

x1k

3k
x2

x 2k
2
x12k

x13k
. 272
k
x 2

n cazul n care ecuaia de gradul doi nu are rdcini reale se va da un mesaj de eroare corespunztor.
5.35. Se dau
i n coloane definit prin:

a ij

S se scrie programul care genereaz i tiprete matricea A cu m linii

P(i + j), daca i + j < min(m,n)

2
= R( i2 , j ), daca min(m,n) i + j max(m,n) 273
Q(i + j), daca max(m,n) < i + j

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, 2n - 1 ) > 1 275.

5.37. S se scrie un program care determin cel mai mic numr natural n care are
exact m divizori primi proprii.
5.38. Fie

n * 276 S se scrie un program care calculeaz suma:

S =

d|m

m
(d) 277
d

unde nsumarea se face dup divizorii naturali d ai lui m (inclusiv 1 i m), iar
lui Euler,

76

(n) =

278 este indicatorul

279 numrul numerelor naturale mai mici dect n i prime cu

n, n

* 280 (cu convenia (1) = 1 281 ).


n

5.39. Fie

m =

k
282 unde
C2n

k=0

calculeaz valoarea pe un punct x dat a funciei:

f(x) =

(k - x )

c2k
2n . 283

k=0

( 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.40. Fie

5.41. Se dau
i o matrice
m,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

i funcia

f(n) =

C kn ( k 2 + 1), n par

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.

77

78

CAPITOLUL 6

PROBLEME REZOLVATE CU MATRICE


6.1. RELAII NTRE PERSOANE
Se dau n persoane i matricea

aij

n(B2)

unde

1, daca persoanele i si j se cunosc


=
288
0, in caz contrar

S se gseasc persoanele care nu au nici o cunotin.


Rezolvare.
Specificarea problemei este:
DATE n, A;
REZULTATE k,P;

{ 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;
ij=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

79

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;
a : array[1..20,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}
{ A = matrice de ordinul n }

BEGIN
writeln ('Programul gsete persoanele care intr-un grup de n');
writeln ('persoane nu au nici o cunotina.'); writeln;
{ CITIRE NR. PERSOANE }
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: ');

80

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;

{A=matrice de ordinul n, care reprezint }


{ptratul magic; deci suma elementelor pe }
{ fiecare linie, coloan sau diagonal este aceeai }

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

Pentru trecerea la noua poziie se recomand s se foloseasc formulele:


m1:= (i+n-2) modulo n + 1
m2:= j modulo n + 1.
Algoritmul P_MAGIC este:

DATE n;
Pentru i:=1,n execut

{ Se calculeaz un ptrat magic }


{ Acesta este o matrice ptrat de ordinul n }
{ care are suma elementelor pe fiecare linie, }
{coloan sau diagonal aceeai }
{ iniializare matrice }

81

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

{ fixare locul de pornire}


{ calculul poziiei urmtoare}

{ atribuire noua valoare }


{ i noua poziie }

Programul Pascal echivalent este urmtorul:


Program magic;

Uses Crt;
Var n,
m1, m2,
i, j,
k : integer;
a : array[1..19,1..19] of integer;
Begin
Writeln('Se construiete un ptrat magic cu n linii');
Repeat write ('n=');
readln (n)
until (n in [1..19]) and Odd(n);
for i := 1 to n do
for j := 1 to n do a[i,j] := 0;
i:= 1; j:= n div 2 + 1;
a[i,j]:=1;
for k := 2 to n*n do

82

{ 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 }
{ variabile curente pentru noua poziie }
{ dau poziia curenta in ptrat }
{ valoarea ce se scrie in ptrat }
{ Ptratul magic }

{ Citete n }
{ iniializare matrice }
{ fixare locul de pornire}

begin
m1 := (i+n-2) mod n + 1;
m2 := j mod n + 1;
if a[m1,m2] <> 0 then
if (m1=n) and (m2=1)
then begin m1 := 2; m2 := n end
else begin m1:=i+1; m2 := j end;
a[m1,m2] := k;
i := m1; j := m2;
end;

{ calculul poziiei urmtoare }

{ atribuire noua valoare }


{ Tiprirea rezultatului }

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 }

6.3. PROBLEME PROPUSE


6.1. Se dau n localiti. ntr-o matrice A sunt marcate drumurile directe ntre localiti astfel:
aij = 1, 289 dac exist drum direct ntre localitile i i j;

aij = 0, 290 dac nu exist drum ntre i i j,


pentru i,j=1,2,...,n.
6.1.1. S se determine dac din localitatea x se poate ajunge n localitatea y.
6.1.2. S se determine localitile n care se poate ajunge din localitatea x.
6.1.3. S se determine toate drumurile de la k la l pentru k i l date.
6.2. Se dau n persoane i matricea A cu elementele
aij = 1, 291 dac persoanele i i j se cunosc;

aij = 0, 292 n caz contrar,


pentru i,j=1,2,...,n.
6.2.1. S se determine persoanele care le cunosc pe toate celelalte.

83

6.2.2. S se determine dac cele n persoane pot fi mprite n dou (sau mai multe) grupe
astfel nct nici o persoan dintr-o grup s nu cunoasc pe nimeni din celelalte grupe.
6.2.3. S se determine persoana care are cele mai multe cunotine.
6.2.4. Dac n
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

a i2 293 este

copilul lui a i1 294 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
M = {a1,a2,...,an} 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
matricea O, s se verifice dac H

M'

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.
6.5.6. S se verifice dac operaia admite un element neutru la stnga i n caz afirmativ s se

84

precizeze acest element.


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 j M, 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
are element simetric la stnga fa de operaia dat.

s se verifice dac acest element

6.5.10. Fie k elementul neutru al operaiei. S se determine un vector s, ale crui componente
sunt s1,s2,...,sn, 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
aij = 1, 295 dac i este n relaie cu j (deci iRj),

aij = 0, 296 dac i nu este n relaie cu j (deci

),

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
.
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 , a2 ,..., a m }
297.
B = { b1 , b2 ,..., bn }

85

O relaie R ntre A i B poate fi reprezentat printr-o matrice cu elementele:

r ij

1 , daca a i R b j
298
=
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.7.2. S se verifice dac R1 = R2 .
6.7.3. S se construiasc matricea relaiei R1

R2 (reuniune).

6.7.4. S se construiasc matricea relaiei R1

R2 (intersecie).

6.7.5. Fie R o relaie omogen peste M. S se construiasc relaia Rk, unde Rk = Rk-1 R
(adic R compus cu R).
k-1

6.7.6. Fie R o relaie omogen peste M. S se determine matricea relaiei R+ de nchidere


tranzitiv a lui R (R+ = R R2
Rn)
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.
6.8.5. S se verifice dac structura algebric (M,o1,o2) este corp.
6.9. Se dau dou structuri algebrice finite cu cte o operaie, (M1,o1) i (M2,o2), reprezentate
ca n problema 6.5, cu M1 = M2 = {1,2,...,n}. Se d i aplicaia f : M1 --> M2, reprezentat printr-un
vector F cu n componente astfel: Fi = j dac i numai dac f(i)=j.
a) S se verifice dac f este un morfism.
b) S se verifice dac f este izomorfism.
6.10. Fie A, B, C trei mulimi finite i relaiile R1 peste AxB i R2 peste BxC, reprezentate prin
matricele lor, ca n problema 6.7. S se construiasc relaia compus T = R1 R2.

86

6.11. Se dau n localiti. ntr-o matrice A=(aij), i,j=1,2,..., n, sunt marcate lungimile
drumurilor directe dintre localiti:
aij = d, 299 dac exist drum direct ntre i i j i d este distan ntre i i j;

aij = 0, 300 dac nu exist drum direct ntre i i j.


6.11.1. S se determine drumul de lungime minim ntre dou localiti date.
6.11.2. S se determine matricea D=(dij) a drumurilor, unde dij = distana minim ntre
localitile i i j, pentru i,j=1,2,...,n.
6.11.3.

Dac

d(i,j)

este

distana

minim

ntre

j,

atunci

notm

(i) = max { d(i, j)| j = 1,2,..., n } 301 i localitatea i se numete cea mai central dac
(i) = min { (j)| j = 1,2,..., n } 302

prin

S se determine localitatea cea mai central.


6.12. Se dau n intersecii de strzi ntr-un ora. ntr-o matrice A=(aij), i,j=1,2,...,n, sunt
marcate sensurile de circulaie pe strzile oraului:
aij = 1, 303
dac se poate circula dinspre i spre j,

aij = 0, 304
n caz contrar.
6.12.1. S se determine dac exist n ora strzi care formeaz un circuit.
6.12.2. Dac n fiecare intersecie numrul sensurilor care intr n intersecie coincide cu
numrul sensurilor care ies din ea, s se determine un circuit care parcurge fiecare sens o singur dat,
indiferent din ce intersecie se pornete.
6.13. Se dau rezultatele la meciurile de fotbal a celor n echipe pe primele m etape. Se cere
clasamentul.
6.14. Un pluton de soldai formeaz o coloan de defilare care are m rnduri, cu n soldai pe
primete
primul steag. Al doilea steag este repartizat similar - se aleg din fiecare rnd soldaii cei mai nali, iar
dintre cei alei cel mai scund primete al doilea steag. n cazul n care exist mai muli soldai cu
aceeai nlime, se alege primul dintre ei. S se afieze nlimile purttorilor de steag. Valorile m, n
i nlimile soldailor se dau.
6.15. La un concurs de frumusee pentru cini sunt n participani i m criterii de selecie, iar
rezultatele se reprezint ntr-o matrice X de dimensiune m x n. Pentru fiecare criteriu "i" se cunosc:
MAX(i) = punctajul maxim ce se poate obine la criteriul "i" i
MIN(i) = limita inferioar a punctajului pentru criteriul "i".

87

6.15.1. S se dea numrul cinilor care nu ndeplinesc condiiile de participare.


6.15.2. S se decid dac exist cine ctigtor la fiecare criteriu.
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

88

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.

89

Das könnte Ihnen auch gefallen