Sunteți pe pagina 1din 102

Probleme rezolvate de programare Subiecte propuse la ATESTAT

2006
ATESTAT - 2006 - 1 - Se citete de la tastatur un numr
natural n (1 < n < 100) i un ir X de n valori ntregi. S se
nlocuiasc fiecare element din ir cu media aritmetic a
celorlalte n 1 elemente.
Rezolvare:
Calculm suma S a tuturor elementelor vectorului X.
Pentru fiecare poziie i din vector, calculm media
aritmetic a elementelor S x[i].
Program ATESTAT_2006_1_MEDIE_ARITMETICA ;
const
nmax = 100;
t ype
vect or = ar r ay [ 1. . nmax] of i nt eger ;
vect or r eal = ar r ay [ 1. . nmax] of r eal ;
var
n, i , k : i nt eger ;
s: i nt eger ;
x : vect or ;
y : vect or r eal ;
medi a : r eal ;
Begin { PROGRAM PRINCIPAL }
r epeat
wr i t e ( ' Dat i n = ' ) ;
r eadl n ( n)
unt i l ( n >= 1) and ( n <= nmax) ;
wr i t el n ( ' Dat i cel e n el ement e i nt r egi ' ) ;
wr i t el n;
f or i : = 1 t o n do
begi n
wr i t e ( ' Dat i X [ ' , i , ' ] = ' ) ;
r eadl n ( x[ i ] )
end;
s: = 0;
f or i : = 1 t o n do
begi n
s: = s + x[ i ]
end;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
4
f or i : = 1 t o n do
begi n
media := (s - x[i] ) / (n-1);
y[ i ] : = medi a ;
wr i t el n ( ' y[ i ] = ' , y[ i ] )
end;
r eadl n
end.
ATESTAT - 2006 - 2 Se citete de la tastatur un numr
natural n (1 < n < 100) i un ir X de n valori ntregi. S se
construiasc un vector Y care s conin numai elementele
pare din vectorul X.
Rezolvare: Notm cu pare o variabil cu dublu rol: de
contor al numerelor pare gsite n vectorul X, precum i de
index al elementelor vectorului Y.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
5
Program ATESTAT_2006_2_ELEMENTE_PARE ;
const
nmax = 100;
t ype
vect or = ar r ay [ 1. . nmax] of i nt eger ;
var
x, y : vect or ;
n, i , k, par e : i nt eger ;
Begin { PROGRAM PRINCIPAL }
r epeat
wr i t e ( ' Dat i n = ' ) ;
r eadl n ( n)
unt i l ( n >= 1) and ( n <= nmax) ;
wr i t el n;
wr i t el n ( ' Dat i vect or ul X' ) ;
wr i t el n;
f or i : = 1 t o n do
begi n
wr i t e ( ' Dat i X[ ' , i , ' ] = ' ) ;
r eadl n ( x[ i ] )
end;
pare := 0; {i ni t i al i zar e cont or si i ndex}
f or i : = 1 t o n do
begi n
i f x [ i ] MOD 2 = 0 t hen
begi n
par e : = par e + 1;
y [pare] := x[i];
wr i t el n ( ' y [ ' , par e, ' ] =
' , y [ par e] ) ;
end;
end;
r eadl n
end.
ATESTAT - 2006 - 3 Se citete de la tastatur un numr
natural n (1 < n < 100) i un ir X de n valori ntregi.
Verificai dac o valoare a, citit de la tastatur se
gsete n vector i dac da, afiai poziiile pe care apare
i numrul de apariii.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
6
Rezolvare: Aplicm un algoritm de cutare secvenial a
unui element ntr-un vector.
Program ATESTAT_2006_3_CAUTARE ;
const
nmax = 100;
t ype
vect or = ar r ay [ 1. . nmax] of i nt eger ;
var
x : vect or ;
n, i , pozi t i a : i nt eger ;
el em: i nt eger ;
gasi t : BOOLEAN;
Begin { PROGRAM PRINCIPAL }
r epeat
wr i t e ( ' Dat i n = ' ) ;
r eadl n ( n)
unt i l ( n >= 1) and ( n <= nmax) ;
wr i t el n;
wr i t el n ( ' Dat i vect or ul X' ) ;
wr i t el n;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
7
f or i : = 1 t o n do
begi n
wr i t e ( ' Dat i X[ ' , i , ' ] = ' ) ;
r eadl n ( x[ i ] )
end;
gasit := false;
wr i t el n ;
wr i t el n ( ' Dat i el ement ul caut at , el em= ' ) ;
r eadl n ( el em) ;
wr i t el n;
f or i : = 1 t o n do
begi n
i f x [ i ] = el emt hen
begi n
gasit := true;
pozi t i a : = i ;
wr i t el n ( el em, ' apar e i n
pozi t i a ' , pozi t i a) ;
end
end;
i f gasi t = t r ue t hen
wr i t el n ( el em, ' apar t i ne vect or ul ui ' )
el se
wr i t el n ( el em, ' nu apar t i ne
vect or ul ui ' ) ;
r eadl n
end.
ATESTAT - 2006 - 4 Se citete de la tastatur un numr
natural n (1 < n < 100) i un ir X de n valori ntregi. S se
numere elementele din vectorul X care se gsesc n
intervalul [a, b], cu a i b numere ntregi citite de la
tastatur, i s se construiasc un alt vector cu cele care nu
aparin intervalului.
Rezolvare: Vom folosi 2 contori:
k = contor care numr elementele din intervalul [a,
b] ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
8
j = contor care numr elementele ce nu aparin [a,
b] .
Program
ATESTAT_2006_4_NUMARARE_ELEMENTE_DIN_INTERVALUL_
A_B ;
const
nmax = 100;
t ype
vect or = ar r ay [ 1. . nmax] of i nt eger ;
var
x, y : vect or ;
a, b, n, i , k, j : i nt eger ;
Begin { PROGRAM PRINCIPAL }
r epeat
wr i t e ( ' Dat i n = ' ) ;
r eadl n ( n)
unt i l ( n >= 1) and ( n <= nmax) ;
wr i t el n;
wr i t el n ( ' Dat i vect or ul X' ) ;
wr i t el n;
f or i : = 1 t o n do
begi n
wr i t e ( ' Dat i X[ ' , i , ' ] = ' ) ;
r eadl n ( x[ i ] )
end;
wr i t el n;
wr i t e ( ' Dat i a = ' ) ; r eadl n ( a) ;
wr i t e ( ' Dat i b = ' ) ; r eadl n ( b) ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
9
wr i t el n;
k := 0; {contor care numra elementele din
i nt er val ul [ a, b] }
j := 0; {contor care numra elementele ce
nu apar t i n [ a, b] }
f or i : = 1 t o n do
begi n
i f ( x [ i ] >= a) and ( x[ i ] <= b)
t hen
begi n
k: = k + 1;
end
el se
begi n
i f ( x[ i ] <a) AND ( x[ i ] >
b) t hen
begi n
j : = j + 1;
y [j] := x [i];
wr i t el n ( ' y[ ' ,
j , ' ] = ' , y [ j ] ) ;
end;
end;
end;
wr i t el n;
wr i t el n ( ' I n i nt er val ul [ ' , a, ' , ' , b, ' ]
exi st a ' , k, ' el ement e' ) ;
r eadl n
end.
ATESTAT - 2006 - 5 Se citete de la tastatur un numr
natural n (1 < n < 100) i un ir X de n valori ntregi. S se
ordoneze cresctor pn la o poziie k citit de la
tastatur i descresctor de la poziia k la n.
Rezolvare: Definim dou proceduri:
ORDONEAZACRESCATOR, pentru ordonarea pn la
poziia k i ORDONEAZADESCRESCATOR., pentru
ordonarea de la poziia k la n. Ambele proceduri se
bazeaz pe algoritmul bubble sort.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
10
Program ATESTAT_2006_5_ORDONARI ;
const
nmax = 100;
t ype
vect or = ar r ay [ 1. . nmax] of i nt eger ;
var
x, y, z : vect or ;
a, b, n, i , k, aux : i nt eger ;
pr ocedur e ORDONEAZACRESCATOR ( VAR v : vect or ; m
: i nt eger ) ;
var
j , aux, t est : i nt eger ;
begi n
r epeat
t est : = 0;
j : = 1;
r epeat
i f v [ j ] > v [ j + 1] t hen
begi n
aux : = v[ j ] ;
v [ j ] : = v [ j + 1] ;
v [ j + 1] : = aux;
t est : = 1;
end;
j : = j + 1
unt i l j > m- 1
unt i l t est = 0
end;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
11
pr ocedur e ORDONEAZADESCRESCATOR ( VAR v : vect or ;
m: i nt eger ) ;
var
j , aux, t est : i nt eger ;
begi n
r epeat
t est : = 0;
j : = 1;
r epeat
i f v [ j ] < v [ j + 1] t hen
begi n
aux : = v[ j ] ;
v [ j ] : = v [ j + 1] ;
v [ j + 1] : = aux;
t est : = 1;
end;
j : = j + 1
unt i l j > m- 1
unt i l t est = 0
end;
Begin { PROGRAM PRINCIPAL }
r epeat
wr i t e ( ' Dat i n = ' ) ;
r eadl n ( n)
unt i l ( n >= 1) and ( n <= nmax) ;
wr i t el n;
wr i t el n ( ' Dat i vect or ul X' ) ;
wr i t el n;
f or i : = 1 t o n do
begi n
wr i t e ( ' Dat i X[ ' , i , ' ] = ' ) ;
r eadl n ( x[ i ] )
end;
wr i t el n;
wr i t e ( ' Dat i pozi t i a k = ' ) ;
r eadl n ( k) ;
f or i : = 1 t o k do
begi n
y [ i ] : = x [ i ] ;
end;
f or i : = k + 1 t o n do
begi n
z [ i - k] : = x [ i ]
Probleme rezolvate de programare Subiecte propuse la ATESTAT
12
end;
ORDONEAZACRESCATOR (y, k);
ORDONEAZADESCRESCATOR (z, n-k);
f or i : = 1 t o k do
begi n
wr i t el n ( ' y [ ' , i , ' ] = ' , y[ i ] ) ;
end;
wr i t el n;
f or i : = k + 1 t o n do
begi n
wr i t el n ( ' z [ ' , i - k, ' ] = ' , z[ i -
k] ) ;
end;
r eadl n
end.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
13
ATESTAT - 2006 - 6 Se citete de la tastatur un numr
natural n (1 < n < 100) i un ir X de n valori ntregi. S se
afieze subirul de valori cresctoare (aezate pe poziii
consecutive) de lungime maxim.
Rezolvare:
Reinem cele n valori ntregi n vectorul X.
Construim un alt vector subsir cu elemente din X n
ordine cresctoare.
Construim nc un vector LUNGIME n care scriem,
pe fiecare poziie, lungimile subirurilor cresctoare
gsite.
Program
ATESTAT_2006_6_SUBSIR_DE_VALORI_CRESCATOARE_DE_L
UNGIME_MAXIMA ;
const
nmax = 100;
TYPE
vect or = ar r ay [ 1. . nmax] of i nt eger ;
var
max, poz, t , n, i , l ung, j : i nt eger ;
subsi r , l ungi me, x, y : vect or ;
k : BOOLEAN;
Begin { PROGRAM PRINCIPAL }
wr i t e ( ' Dat i n = ' ) ; r eadl n ( n) ;
wr i t el n;
wr i t el n ( ' Dat i vect or ul X' ) ;
f or i : = 1 t o n do
begi n
wr i t e ( ' X[ ' , i , ' ] = ' ) ; r eadl n
( x [ i ] )
end;
wr i t el n;
lung := 0; {contor pentru numrul de
subsi r ur i cr escat oar e}
t:= 1; {t = pozi t i a i n subsi r ul const r ui t
cu el ement e i n or di ne
cr escat oar e}
Probleme rezolvate de programare Subiecte propuse la ATESTAT
14
subsir [t] := x [1]; {i ni t i al i zar ea unui
pr i msubsi r , pr esupunand ca vom
gasi un ast f el de subsi r
chi ar di n pozi t i a 1}
max := 1; {i ni t i al i zar e l ungi me maxi ma
pr esupusa}
f or i : = 1 t o n- 1 do
begi n
i f x [ i ] < x [ i + 1] t hen
begi n
t : = t + 1;
subsi r [ t ] : = x [ i + 1] ;
{depun i n subsi r ur mat or ul el ement }
end
el se
begi n
l ung : = l ung + 1;
l ungi me [ l ung] : = t ; {t = nr .
de el ement e di n subsi r }
{ wr i t el n ( ' l ungi me subsi r =
' , l ungi me [ l ung] ) ; }
i f max < l ungi me [ l ung] t hen
begi n
max : = l ungi me [ l ung] ;
wr i t el n;
poz := i - max + 1;
{pt . ca i = 1. . n- 1}
end;
f or j : = 1 t o t do
wr i t e ( subsi r [ j ] , ' ' ) ;
{t i par esc subsi r cur ent }
wr i t el n;
t : = 1;
{r ei ni t i al i z. pozi t i e nou subsi r }
subsi r [ t ] : = x [ i + 1] ;
end; {sf . I F}
end; {sf . f or }
wr i t el n;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
15
wr i t el n ( ' Ul t i mul subsi r est e: ' ) ;
l ung : = l ung + 1;
l ungi me [ l ung] : = t ; {t = nr . de el ement e
di n subsi r }
f or j : = 1 t o t do
wr i t e ( subsi r [ j ] , ' ' ) ;
wr i t el n;
i f max < l ungi me [ l ung] t hen
begi n
max : = l ungi me [ l ung] ;
wr i t el n;
wr i t el n;
poz := i + 1 - max + 1; {pt . ca i =
1. . n- 1}
i f max < l ungi me [ l ung] t hen
begi n
max : = l ungi me [ l ung] ;
wr i t el n;
poz : = i - max;
wr i t el n;
end;
wr i t el n;
end;
wr i t el n;
wr i t el n ( ' Subsi r ul est e: ' ) ;
wr i t el n;
f or i : = 1 t o n do
begi n
wr i t e ( X[ i ] , ' ' ) ;
end;
wr i t el n;
wr i t el n;
wr i t el n ( ' S- au gasi t subsi r ur i de
l ungi mi l e' ) ;
wr i t el n;
f or j : = 1 t o l ung do
begi n
wr i t el n ( ' Subsi r ul ' , j , ' ar e
l ungi mea ' , l ungi me [ j ] ) ;
end;
wr i t el n;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
16
wr i t el n ( ' Subsi r ul de l ungi me maxi ma ar e ' ,
max, ' el ement e: ' ) ;
wr i t el n ( ' si i ncepe i n pozi t i a ' , poz) ;
wr i t el n;
f or j : = poz t o ( poz + max- 1) do
begi n
wr i t e ( x[ j ] , ' ' ) ;
end;
r eadl n
end.
ATESTAT - 2006 - 7 Se citete de la tastatur un numr
natural n (1 < n < 100) i un ir X de n valori ntregi. S se
afieze toate perechile de elemente ale irului (nu neaprat
consecutive ca poziie) cu proprietatea c ambele elemente
ale perechii au aceeai sum a cifrelor.
Rezolvare: Definim dou funcii:
NRCIFRE pentru a numra cifrele unui
element ;
SUMACIFRE pentru a face suma cifrelor
unui element.
Scriem cifrele unui element ntr-un vector
auxiliar y.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
17
Program ATESTAT_2006_7_SUMA_CIFRE ;
const
nmax = 100;
TYPE
vect or = ar r ay [ 1. . nmax] of i nt eger ;
var
S1, x1, n, i , j : i nt eger ;
x, suma, y : vect or ;
k : BOOLEAN;
function NRCIFRE ( numar : i nt eger ) : i nt eger ;
var
m: i nt eger ;
begi n
i f numar = 0 t hen
m: = 1
el se
begi n
m: = 0;
whi l e numar <> 0 do
begi n
numar := numar DIV
10;
m: = m+ 1
end
end;
NRCI FRE : = m
end;
function SUMACIFRE ( numar : i nt eger ) : i nt eger ;
var
t , s : i nt eger ;
y : vect or ;
begi n
s : = 0;
f or t : = 1 t o NRCI FRE ( numar ) do
begi n
y [ t ] := numar MOD 10;
wr i t el n ( ' y [ ' , t , ' ] = ' ,
y [ t ] ) ;
numar := numar DIV 10;
end;
f or t : = 1 t o NRCIFRE (numar) do
begi n
s : = s + y [ t ]
Probleme rezolvate de programare Subiecte propuse la ATESTAT
18
end;
SUMACI FRE : = s;
end;
Begin { PROGRAM PRINCIPAL }
wr i t e ( ' Dat i n = ' ) ;
r eadl n ( n) ;
wr i t el n;
wr i t el n ( ' Dat i vect or ul X' ) ;
f or i : = 1 t o n do
begi n
wr i t e ( ' X[ ' , i , ' ] = ' ) ;
r eadl n ( x [ i ] )
end;
wr i t el n;
f or i : = 1 t o n do
begi n
suma [i] := SUMACIFRE (x [i] )
end;
wr i t el n;
wr i t el n ( ' Per echi l e de numer e cu sumel e
ci f r el or egal e sunt : ' ) ;
wr i t el n;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
19
f or i : = 1 t o n - 1 do
begi n
f or j : = i + 1 t o n do
begi n
i f suma [i] = suma [j] t hen
begi n
wr i t el n ( ' x[ ' , i , ' ] =
' , x[ i ] , ' x[ ' , j , ' ] = ' , x[ j ] ) ;
end
end
end;
r eadl n
end.
ATESTAT - 2006 - 8 Se citete un numr ntreg strict
pozitiv cu cel mult nou cifre. S se afieze cifra cea mai
mare i de cte ori apare n numr.
Rezolvare: Definim funcia NRCIFRE, pentru a numra
cifrele numrului. Reinem ntr-un vector y cifrele
numrului.
Program ATESTAT_2006_8_CIFRA_MAXIMA;
const
nmax = 100;
TYPE
vect or = ar r ay [ 1. . nmax] of i nt eger ;
var
ci f max, ci f , max, c, x, x1, n, i : i nt eger ;
y : vect or ;
k : BOOLEAN;
ci f r a : ar r ay [ 0. . 9] of i nt eger ;
{vect or ul "ci f r a" cont or i zeaza apar i t i i l e
ci f r el or i n numar ul x}
function NRCIFRE ( numar : i nt eger ) : i nt eger ;
var
m: i nt eger ;
begi n
Probleme rezolvate de programare Subiecte propuse la ATESTAT
20
i f numar = 0 t hen
m: = 1
el se
begi n
m: = 0;
whi l e numar <> 0 do
begi n
numar : = numar DI V
10;
m: = m+ 1
end
end;
NRCI FRE : = m
end;
Begin { PROGRAM PRINCIPAL }
wr i t e ( ' I nt r oducet i un numar nat ur al x =
' ) ;
r eadl n ( x) ;
n := NRCIFRE (x);
wr i t el n ( ' Numar ul ' , x, ' ar e ' , n, ' ci f r e' ) ;
wr i t el n;
x1 : = x; {conser vamval oar ea l ui x,
f ol osi nd un auxi l i ar x1}
wr i t el n ( ' Ci f r el e numar ul ui ' , x, '
sunt : ' ) ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
21
f or i : = n downt o 1 do
begi n
y [ i ] : = x1 MOD 10;
wr i t el n ( ' y [ ' , i , ' ] = ' , y [ i ] ) ;
x1 : = x1 DI V 10;
end;
f or c: = 0 t o 9 do
cifra [c] := 0; {i ni t i al i zamcu
"zer o" t ot i cont or i i ci f r el or }
f or c: = 0 t o 9 do
begi n
f or i : = 1 t o NRCI FRE ( x) do
begi n
i f c = y [ i ] t hen
ci f r a [ c] : = ci f r a [ c] +
1 {maj or amcont or ci f r a}
end
end;
wr i t el n;
wr i t el n ( ' Fr ecvent a de apar i t i e a ci f r el or
est e: ' ) ;
f or c: = 0 t o 9 do
begi n
wr i t el n ( ' Ci f r a ' , c, ' apar e de ' ,
ci f r a [ c] , ' or i ' ) ;
end;
cifmax := 0; {i ni t i al i zar e var i abi l a
"ci f max" }
f or i : = 1 t o NRCI FRE ( x) do
begi n
i f ci f max < y [ i ] t hen
ci f max : = y [ i ]
end;
wr i t el n;
wr i t el n ( ' Ci f r a maxi ma ' , ci f max, ' apar e
de ' , ci f r a [ ci f max] , ' or i ' ) ;
r eadl n
end.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
22
ATESTAT - 2006 - 9 Se citete un numr ntreg strict
pozitiv cu cel mult nou cifre. S se afieze cifrele
distincte precum i de cte ori apar n numr.
Rezolvare: Folosim un vector CIFRA n care memorm,
pe fiecare poziie, frecvenele de apariie ale cifrelor de la 0
la 9. Reinem ntr-un vector y cifrele numrului x.
Program ATESTAT_2006_9_NUMARARE_CIFRE_DISTINCTE
;
const
nmax = 100;
TYPE
vect or = ar r ay [ 1. . nmax] of i nt eger ;
var
c, x, x1, n, i : i nt eger ;
y : vect or ;
k : BOOLEAN;
ci f r a : ar r ay [ 0. . 9] of i nt eger ;
{vect or ul "ci f r a" cont or i zeaza apar i t i i l e
ci f r el or i n numar ul x}
Probleme rezolvate de programare Subiecte propuse la ATESTAT
23
function NRCIFRE ( numar : i nt eger ) : i nt eger ;
var
m: i nt eger ;
begi n
i f numar = 0 t hen
m: = 1
el se
begi n
m: = 0;
whi l e numar <> 0 do
begi n
numar := numar DIV
10;
m: = m+ 1
end
end;
NRCI FRE : = m
end;
Begin { PROGRAM PRINCIPAL }
wr i t e ( ' I nt r oducet i un numar nat ur al x =
' ) ;
r eadl n ( x) ;
n := NRCIFRE (x);
wr i t el n ( ' Numar ul ' , x, ' ar e ' , n, ' ci f r e' ) ;
wr i t el n;
x1 := x; {conser vamval oar ea l ui x,
f ol osi nd un auxi l i ar x1}
wr i t el n ( ' Ci f r el e numar ul ui ' , x, '
sunt : ' ) ;
f or i : = n downt o 1 do
begi n
y [ i ] := x1 MOD 10;
wr i t el n ( ' y [ ' , i , ' ] = ' , y [ i ] ) ;
x1 := x1 DIV 10;
end;
f or c: = 0 t o 9 do
ci f r a [ c] : = 0; {i ni t i al i zamcu
"zer o" t ot i cont or i i ci f r el or }
f or c: = 0 t o 9 do
begi n
f or i : = 1 t o NRCI FRE ( x) do
Probleme rezolvate de programare Subiecte propuse la ATESTAT
24
begi n
i f c = y [ i ] t hen
ci f r a [ c] : = ci f r a [ c] +
1 {maj or amcont or ci f r a}
end
end;
wr i t el n;
wr i t el n ( ' Fr ecvent a de apar i t i e a ci f r el or
est e: ' ) ;
f or c: = 0 t o 9 do
begi n
wr i t el n ( ' Ci f r a ' , c, ' apar e de ' ,
ci f r a [ c] , ' or i ' ) ;
end;
r eadl n
end.
ATESTAT - 2006 - 10 Se citete un numr ntreg strict
pozitiv cu cel mult nou cifre. S se verifice dac cifrele
lui sunt n ordine strict cresctoare.
Rezolvare: Definim funcia NRCIFRE, pentru a numra
cifrele numrului. Reinem ntr-un vector y cifrele
numrului.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
25
Program
ATESTAT_2006_10_CIFRE_IN_ORDINE_CRESCATOARE ;
const
nmax = 100;
TYPE
vect or = ar r ay [ 1. . nmax] of i nt eger ;
var
x, x1, n, i : i nt eger ;
y : vect or ;
k : BOOLEAN;
function NRCIFRE ( numar : i nt eger ) : i nt eger ;
var
m: i nt eger ;
begi n
i f numar = 0 t hen
m: = 1
el se
begi n
m: = 0;
whi l e numar <> 0 do
begi n
numar : = numar DI V
10;
m: = m+ 1
end
end;
NRCI FRE : = m
end;
Begin { PROGRAM PRINCIPAL }
wr i t e ( ' I nt r oducet i un numar nat ur al x =
' ) ;
r eadl n ( x) ;
n := NRCIFRE (x);
wr i t el n ( ' Numar ul ' , x, ' ar e ' , n, ' ci f r e' ) ;
wr i t el n;
x1 := x; {conser vamval oar ea l ui x,
f ol osi nd un auxi l i ar x1}
f or i : = n downt o 1 do
begi n
y [ i ] := x1 MOD 10;
wr i t el n ( ' y [ ' , i , ' ] = ' , y [ i ] ) ;
x1 := x1 DIV 10;
end;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
26
K : = TRUE;
f or i : = 3 t o n do
begi n
i f NOT ( ( y[ i ] > y [ i - 1] ) AND
( y[ i ] > y [ i - 1] ) ) t hen
k : = FALSE
end;
i f K t hen
wr i t el n ( x , ' ar e ci f r el e i n or di ne
cr escat oar e' )
el se
wr i t el n ( x , ' ar e NU ci f r el e i n or di ne
cr escat oar e' ) ;
r eadl n
end.
ATESTAT - 2006 - 11 Se citesc trei numere ntregi
strict pozitive. S se afieze n ordine cresctoare. S se
verifice dac ele formeaz sau nu o progresie geometric.
Rezolvare: n general, un ir de numere se afl ntr-o
progresie geometric dac i Xn + 1 / Xn = raia i Xn /
Xn1 =raia ... i X
2
/ X
1
=raia.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
27
Program ATESTAT_2006_11_PROGRESIE_GEOMETRICA ;
const
nmax = 100;
TYPE
vect or = ar r ay [ 1. . nmax] of i nt eger ;
var
r at i a, n, i , j , k: i nt eger ;
x : vect or ;
OK : bool ean;
procedure ORDONEAZA ( VAR v : vect or ; m:
i nt eger ) ;
var
j , aux, t est : i nt eger ;
begi n
r epeat
t est : = 0;
j : = 1;
r epeat
i f v [ j ] > v [ j + 1] t hen
begi n
aux : = v[ j ] ;
v [ j ] : = v [ j + 1] ;
v [ j + 1] : = aux;
t est : = 1;
end;
j : = j + 1
unt i l j > m- 1
unt i l t est = 0
end;
Begin { PROGRAM PRINCIPAL }
r epeat
wr i t e ( ' Dat i n = ' ) ; r eadl n ( n)
unt i l ( n >= 1) and ( n <= nmax) ;
wr i t el n;
wr i t el n ( ' Dat i vect or ul X' ) ;
wr i t el n;
f or i : = 1 t o n do
begi n
wr i t e ( ' Dat i X [ ' , i , ' ] = ' ) ; r eadl n
( X [i])
end;
wr i t el n;
ORDONEAZA (X, n);
wr i t el n;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
28
wr i t el n ( ' Vect or ul X dupa or donar e est e' ) ;
f or i : = 1 t o n do
begi n
wr i t el n ( ' X [ ' , i , ' ] = ' , X[ i ] ) ;
end;
wr i t el n;
ratia := x [2] DIV x [1];
OK : = TRUE ; {pr esupun ca f or meaza
pr ogr esi e ar i t met i ca}
f or i : = 2 t o n do
begi n
i f x [i] / x [i-1] <> ratia t hen
OK : = FALSE
end;
i f OK = TRUE t hen
wr i t el n ( ' El ement el e f or meaza o
pr ogr esi e geomet r i ca' )
el se
wr i t el n ( ' El ement el e NU f or meaza o
pr ogr esi e geomet r i ca' ) ;
r eadl n
end.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
29
ATESTAT - 2006 - 12 Se citesc dou numere ntregi
strict pozitive. S se calculeze i s se afieze c.m.m.d.c.
al celor dou numere.
Rezolvare: Aplicm algoritmul lui Euclid.
Program ATESTAT_2006_12_CMMDC ;
VAR
A, B, aux, R, cmmdc : i nt eger ;
Begin { PROGRAM PRINCIPAL }
wr i t e ( ' Dat i A = ' ) ;
r eadl n ( A) ;
wr i t e ( ' Dat i B = ' ) ;
r eadl n ( B) ;
i f A< b t hen
begi n
aux : = a;
a: = B;
b : = aux;
end;
R : = A MOD B;
Whi l e R <> 0 do
begi n
A : = B;
B : = R;
R : = A MOD B
end;
cmmdc : = b;
wr i t el n ( ' CMMDC = ' , CMMDC) ;
r eadl n
end.
ATESTAT - 2006 - 13 Se citesc dou numere ntregi
strict pozitive cu cel mult nou cifre. S se afieze
c.m.m.d.c. al lor, apoi s se verifice rezultatul.
Rezolvare: Aplicm algoritmul lui Euclid.
Program ATESTAT_2006_13_CMMDC;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
30
VAR
A, B, aux, R, cmmdc : LONGINT;
Begin { PROGRAM PRINCIPAL }
wr i t e ( ' Dat i A = ' ) ;
r eadl n ( A) ;
wr i t e ( ' Dat i B = ' ) ;
r eadl n ( B) ;
i f A< b t hen
begi n
aux : = a;
a: = B;
b : = aux;
end;
R : = A MOD B;
Whi l e R <> 0 do
begi n
A : = B;
B : = R;
R : = A MOD B
end;
cmmdc : = b;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
31
wr i t el n ( ' CMMDC = ' , CMMDC) ;
wr i t el n;
i f ( A MOD cmmdc = 0) AND ( B MOD cmmdc = 0)
t hen
wr i t el n ( ' Rezul t at CORECT' )
el se
wr i t el n ( ' Rezul t at i ncor ect ' ) ;
r eadl n
end.
ATESTAT - 2006 - 14 Dou numere ntregi strict
pozitive sunt prietene dac suma divizorilor proprii ai
unuia este mai mic cu o unitate dect cellalt numr i
invers. Date dou numere, s se verifice dac sunt prietene.
Rezolvare: Reinem n SA, respectiv n SB, sumele
divizorilor celor dou numere.
Program ATESTAT_2006_14_NUMERE_PRIETENE ;
const
nmax = 30;
t ype
vect or = ar r ay [ 1. . nmax] of i nt eger ;
var
di vA, di vB : vect or ;
SA, SB, A, B, di vi zor , nr di v: i nt eger ;
Begin { PROGRAM PRINCIPAL }
wr i t e ( ' Dat i A = ' ) ; r eadl n ( A) ;
wr i t e ( ' Dat i B = ' ) ; r eadl n ( B) ;
SA : = 0;
SB : = 0;
f or di vi zor : = 1 t o A do
begi n
i f A MOD di vi zor = 0 t hen
SA : = SA + di vi zor ;
end;
f or di vi zor : = 1 t o B do
begi n
i f B MOD di vi zor = 0 t hen
SB : = SB + di vi zor ;
end;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
32
i f ( SA = B- 1) AND ( SB = A - 1) t hen
wr i t el n ( A, ' si ' , B, ' sunt pr i et ene' )
el se
wr i t el n ( A, ' si ' , B, ' NU sunt
pr i et ene' ) ;
r eadl n
end.
ATESTAT - 2006 - 15 Fie A (m, n) o matrice cu m linii
i n coloane. S se genereze i s se afieze matricea B (n,
m) cu n linii i m coloane, ale crei elemente sunt definite
astfel:
B[i, j] = A[j, i], cu i =1 . . n, j =1 . . m.
Rezolvare: Se construiete matricea B, n condiiile din
enun.
Program ATESTAT_2006_15_MATRICI ;
const
nmax = 30;
t ype
mat r i ce = ar r ay [ 1. . nmax, 1. . nmax] of
i nt eger ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
33
var
A, B : mat r i ce;
m, n, i , j : i nt eger ;
Begin { PROGRAM PRINCIPAL }
r epeat
wr i t e ( ' Dat i m= ' ) ;
r eadl n ( m) ;
unt i l ( m>= 1) and ( m<= nmax) ;
r epeat
wr i t e ( ' Dat i n = ' ) ;
r eadl n ( n)
unt i l ( n >= 1) and ( n <= nmax) ;
wr i t el n;
wr i t el n ( ' Dat i mat r i cea A' ) ;
f or i : = 1 t o mdo
begi n
f or j : = 1 t o n do
begi n
wr i t e ( ' Dat i A [ ' ,
i , ' , ' , j , ' ] = ' ) ;
r eadl n ( A [ i , j ] )
end
end;
f or i : = 1 t o n do
begi n
f or j : = 1 t o mdo
begi n
B [i, j] := A [j, i]
end
end;
wr i t el n;
wr i t el n ( ' Mat r i cea A est e: ' ) ;
f or i : = 1 t o mdo
begi n
f or j : = 1 t o n do
begi n
wr i t e ( A [ i , j ] , ' ' )
end;
wr i t el n
end;
wr i t el n;
wr i t el n ( ' Mat r i cea B est e: ' ) ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
34
f or i : = 1 t o n do
begi n
f or j : = 1 t o mdo
wr i t e ( B [ i , j ] , ' ' ) ;
wr i t el n
end;
r eadl n
end.
ATESTAT - 2006 - 16 Fie A (m, n) o matrice cu m linii
i n coloane, cu elemente numere reale i dou linii
distincte L
1
i L
2
cu indicii din intervalul [1 . . m]. S se
schimbe elementele liniei L
1
cu elementele liniei L
2
i s
se afieze matricea rezultat.
Rezolvare: Folosim o matrice auxiliar MATAUX i
aplicm algoritmul folosit schimbarea ntre ele a dou
valori reale.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
35
Program
ATESTAT_2006_16_INTERSCHIMBARE_LINII_MATRICE ;
const
nmax = 30;
t ype
vect or = ar r ay [ 1. . nmax] of i nt eger ;
mat r i ce = ar r ay [ 1. . nmax, 1. . nmax] of
i nt eger ;
var
A, B, MATAUX : mat r i ce;
m, n, i , j , L1, L2 : i nt eger ;
v1, v2, aux : vect or ;
Begin { PROGRAM PRINCIPAL }
r epeat
wr i t e ( ' Dat i m= ' ) ; r eadl n ( m) ;
unt i l ( m>= 1) and ( m<= nmax) ;
r epeat
wr i t e ( ' Dat i n = ' ) ; r eadl n ( n) ;
unt i l ( n >= 1) and ( n <= nmax) ;
wr i t el n;
wr i t el n ( ' Dat i mat r i cea A' ) ;
wr i t el n;
f or i : = 1 t o mdo
begi n
f or j : = 1 t o n do
begi n
wr i t e ( ' Dat i A[ ' ,
i , ' , ' , j , ' ] = ' ) ;
r eadl n ( A[ i , j ] )
end
end;
wr i t el n;
wr i t el n;
f or i : = 1 t o mdo
begi n
f or j : = 1 t o n do
MATAUX [ i , j ] : = A [ i , j ] ;
end;
wr i t el n;
wr i t el n ( ' Dat i l i ni a L1 =' ) ;
r eadl n ( L1) ;
wr i t el n ( ' Dat i l i ni a L2 = ' ) ;
r eadl n ( L2) ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
36
f or j : = 1 t o n do
begi n
aux [j] := MATAUX [L1, j];
MATAUX [L1, j] := MATAUX [L2, j];
MATAUX [L2, j] := aux [j]
end;
wr i t el n;
f or i : = 1 t o mdo
begi n
f or j : = 1 t o n do
B [ i , j ] : = MATAUX [ i , j ] ;
end;
wr i t el n;
wr i t el n ( ' Mat r i cea A est e: ' ) ;
f or i : = 1 t o mdo
begi n
f or j : = 1 t o n do
begi n
wr i t e ( A[ i , j ] , ' ' ) ;
end;
WRI TELN
end;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
37
wr i t el n;
wr i t el n;
wr i t el n ( ' Mat r i cea B est e: ' ) ;
f or i : = 1 t o mdo
begi n
f or j : = 1 t o n do
begi n
wr i t e ( B[ i , j ] , ' ' ) ;
end;
WRI TELN
end;
r eadl n
end.
ATESTAT - 2006 - 17 Se d o matrice ptratic A de
ordinul n. S se ordoneze cresctor elementele de pe
diagonala principal.
Indicaie: dou elemente consecutive de pe diagonala
principal sunt:
A [i, i] i A [i + 1, i + 1].
Rezolvare: Definim procedura ORDONEAZA, bazat pe
algoritmul bubble sort. Folosim un vector auxiliar n
care prelum elementele de pe diagonala principal.
Program
ATESTAT_2006_17_ORDONARE_ELEMENTE_DIAGONALA_PRIN
CIPALA ;
const
nmax = 100;
t ype
vect or = ar r ay [ 1. . nmax] of i nt eger ;
mat r i ce = ar r ay [ 1. . nmax, 1. . nmax] of
i nt eger ;
var
x : vect or ;
m, n, i , j : i nt eger ;
A : mat r i ce;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
38
procedure ORDONEAZA ( VAR v : vect or ; m:
i nt eger ) ;
var
j , aux, t est : i nt eger ;
begi n
r epeat
t est : = 0;
j : = 1;
r epeat
i f v [ j ] > v [ j + 1] t hen
begi n
aux : = v[ j ] ;
v [ j ] : = v [ j + 1] ;
v [ j + 1] : = aux;
t est : = 1;
end;
j : = j + 1
unt i l j > m- 1
unt i l t est = 0
end;
Begin { PROGRAM PRINCIPAL }
wr i t el n ( ' Mat r i cea A est e pat r at i ca, deci m
= n' ) ;
r epeat
wr i t e ( ' Dat i n = ' ) ;
r eadl n ( n)
unt i l ( n >= 1) and ( n <= nmax) ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
39
wr i t el n;
wr i t el n ( ' Dat i mat r i cea A' ) ;
wr i t el n;
f or i : = 1 t o n do
begi n
f or j : = 1 t o n do
begi n
wr i t e ( ' Dat i A[ ' ,
i , ' , ' , j , ' ] = ' ) ;
r eadl n ( A [ i , j ] )
end
end;
wr i t el n;
f or i : = 1 t o n do
begi n
X[ i ] : = A [ i , i ] {pr el uam
el ement el e di agonal ei pr i nci pal e i n X }
end;
wr i t el n;
ORDONEAZA (X, n);
f or i : = 1 t o n do
begi n
A[ i , i ] : = X [ i ]
end;
wr i t el n;
wr i t el n ( ' Mat r i cea A dupa or donar ea
di agonal ei pr i nci pal e est e' ) ;
f or i : = 1 t o n do
begi n
f or j : = 1 t o n do
begi n
wr i t e ( A[ i , j ] , ' ' ) ;
end;
wr i t el n
end;
r eadl n
end.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
40
ATESTAT - 2006 - 18 Fie A (m, n) o matrice cu m
linii i n coloane cu elemente ntregi i un numr ntreg
nenul ad <> 0. S se calculeze i s se afieze:
a). numrul d de elemente ale matricii date divizibile cu
ad.
b). suma S a elementelor strict negative de pe fiecare
coloan.
Exemplu: Pentru m = 3, n = 4, ad = 2
i matricea:
1 2 3 4
5 6 7 8
9 10 11 12
==================
se obin: d = 6
S = 1 16 3 20
Rezolvare: Testul de divizibilitate se face verificnd
condiia: A [i, j] MOD ad = 0.
Program ATESTAT_2006_18_DETERMINARI_IN_MATRICE ;
const
nmax = 30;
t ype
mat r i ce = ar r ay [ 1. . nmax, 1. . nmax] of
i nt eger ;
vect or = ar r ay [ 1. . nmax] of i nt eger ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
41
var
A, B : mat r i ce;
ad, d, m, n, i , j : i nt eger ;
s : vect or ; {vect or suma}
Begin { PROGRAM PRINCIPAL }
r epeat
wr i t e ( ' Dat i m= ' ) ;
r eadl n ( m) ;
unt i l ( m>= 1) and ( m<= nmax) ;
r epeat
wr i t e ( ' Dat i n = ' ) ;
r eadl n ( n)
unt i l ( n >= 1) and ( n <= nmax) ;
wr i t el n;
wr i t el n ( ' Dat i mat r i cea A' ) ;
f or i : = 1 t o mdo
begi n
f or j : = 1 t o n do
begi n
wr i t e ( ' Dat i A [ ' ,
i , ' , ' , j , ' ] = ' ) ;
r eadl n ( A [ i , j ] )
end
end;
wr i t el n;
wr i t e ( ' Dat i ad = ' ) ;
r eadl n ( ad) ;
d:=0;
f or i : = 1 t o mdo
begi n
f or j : = 1 t o n do
begi n
if A [i,j] MOD ad = 0
t hen
d := d + 1
end
end;
wr i t el n ( ' Mat r i cea ar e ' , d, ' el ement e
di vi zi bi l e cu ' , ad) ;
wr i t el n;
wr i t el n;
f or j : = 1 t o n do
begi n
s [ j ] : = 0;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
42
f or i : = 1 t o mdo
begi n
i f A [ i , j ] < 0
t hen
s [j] := s
[j] + A [i,j]
end;
wr i t el n ( ' S [ ' , j , ' = ' , s [ j ]
)
end;
r eadl n
end.
ATESTAT - 2006 - 19 Fie A o matrice ptratic de
ordinul n, cu elemente numere ntregi. S se afieze pe
ecran rama exterioar a matricii.
Exemplu: Pentru n = 3
i matricea: 1 2 3
5 6 7
9 10 11
se va afia succesiunea de elemente: 1 2 3 7 11
10 9 5.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
43
Rezolvare: Afim elementele de pe prima linie, ultima
coloan, ultima linie (de la sfrit ctre nceput) i, n
sfrit, prima coloan (de asemenea, de la sfrit ctre
nceput).
Program
ATESTAT_2006_19_RAMA_EXTERIOARA_A_MATRICII ;
const
nmax = 100;
t ype
vect or = ar r ay [ 1. . nmax] of i nt eger ;
mat r i ce = ar r ay [ 1. . nmax, 1. . nmax] of
i nt eger ;
var
n, i , j : i nt eger ;
A : mat r i ce;
Begin { PROGRAM PRINCIPAL }
r epeat
wr i t e ( ' Dat i n = ' ) ; r eadl n ( n)
unt i l ( n >= 1) and ( n <= nmax) ;
wr i t el n ( ' Dat i mat r i cea A' ) ;
wr i t el n;
f or i : = 1 t o n do
begi n
f or j : = 1 t o n do
begi n
wr i t e ( ' Dat i A[ ' ,
i , ' , ' , j , ' ] = ' ) ;
r eadl n ( A [ i , j ] )
end
end;
wr i t el n;
f or j : = 1 t o n do
wr i t e ( A[1,j],' ' ) ; {el ement el e
de pe prima linie}
f or i : = 2 t o n do
wr i t e ( A [i, n], ' ' ) ; {el ement el e
de pe ultima coloana}
f or j : = n- 1 downt o 1 do
wr i t e ( A[n, j], ' ' ) ; {el ement el e
de pe ultima linie}
f or i : = n- 1 downt o 2 do
Probleme rezolvate de programare Subiecte propuse la ATESTAT
44
wr i t e ( A[i, 1], ' ' ) ; {el ement el e
de pe prima coloana}
r eadl n
end.
ATESTAT - 2006 - 20 Fie A o matrice ptratic de
ordinul n, cu elemente numere ntregi. S se genereze i s
se afieze vectorul format din numerele prime de
deasupra diagonalei principale.
Exemplu: Pentru n = 5
i matricea:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7 ====>
(2 3 5 19 7)
14 23 22 21 8
13 12 11 10 9
Rezolvare: Construim un vector X cu elementele de
deasupra diagonalei principale.
Program
ATESTAT_2006_20_NUMERE_PRIME_DE_DEASUPRA_DIAGONA
LEI_PRINCIPALE ;
const
nmax = 100;
t ype
vect or = ar r ay [ 1. . nmax] of i nt eger ;
mat r i ce = ar r ay [ 1. . nmax, 1. . nmax] of
i nt eger ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
45
var
pr i m, x : vect or ;
t , p, k, m, n, i , j , nr di v, di vi zor : i nt eger ;
A : mat r i ce;
Begin { PROGRAM PRINCIPAL }
r epeat
wr i t e ( ' Dat i n = ' ) ; r eadl n ( n)
unt i l ( n >= 1) and ( n <= nmax) ;
wr i t el n ( ' Dat i mat r i cea A' ) ;
f or i : = 1 t o n do
begi n
f or j : = 1 t o n do
begi n
wr i t e ( ' Dat i A[ ' ,
i , ' , ' , j , ' ] = ' ) ;
r eadl n ( A [ i , j ] )
end
end;
wr i t el n;
k : = 0; {i ndex vect or const r ui t cu
el ement e de deasupr a di ag. pr i nci pal e}
f or i : = 1 t o n do
begi n
f or j : = 1 t o n do
begi n
i f j > i t hen
begi n
k : = k + 1;
x [ k] : = A [ i , j ]
end;
end
end;
p : = 0; {cont or car e numar a pr i mel e gasi t e
i n vect or }
f or t : = 1 t o k do
begi n
nr di v : = 0;
f or di vi zor : = 1 t o x [ t ] do
begi n
i f x [ t ] MOD di vi zor = 0
t hen
nr di v : = nr di v + 1
end;
i f nr di v <= 2 t hen
Probleme rezolvate de programare Subiecte propuse la ATESTAT
46
begi n
p : = p + 1;
pr i m[ p] : = x [ t ]
end;
end;
f or i : = 1 t o p do
begi n
wr i t el n ( ' Pr i m[ ' , i , ' ] = ' ,
pr i m[ i ] ) ;
end;
r eadl n
end.
ATESTAT - 2006 - 21 Fie A o matrice ptratic de
ordinul n, cu elemente numere ntregi. S se genereze i s
se afieze vectorul format din numerele palindroame de
sub diagonala secundar.
Rezolvare: Construim un vector cu elementele de sub
diagonala secundar.
n vector avem elemente ncepnd cu linia i = 2. Pe
aceast linie avem doar ultimul element (j = n)
Probleme rezolvate de programare Subiecte propuse la ATESTAT
47
Observm c: pe linia i = 2, indexul de coloan j ia o
singur valoare j = n, deci jmin =n
pe linia i = 3, indexul de coloan j ia
valori de la jmin =n-1 la n;
pe linia i = 4, indexul de coloan j ia
valori de la jmin =n-2 la n;
pe o linie oarecare i, indexul de coloan
j ia valori de la jmin =n (i 2) la n.
n concluzie, jmin = n + 2 i, pentru orice linie i ntre
2 i n.
Deci, cel mai mic index de coloan, pe o linie i de sub
diagonala secundar, este jmin = n + 2 - i. Altfel spus, pe o
linie i vom avea doar elementele cu indexul de coloan
jde la n + 2 - i la n.
Program
ATESTAT_2006_21_PALINDROAME_DE_SUB_DIAGONALA_SEC
UNDARA ;
uses CRT;
const
nmax = 100;
TYPE
mat r i ce = ar r ay [ 1. . nmax, 1. . nmax] of
i nt eger ;
vect or = ar r ay [ 1. . nmax] of i nt eger ;
var
p, numar , m, n, i , j , t , q : i nt eger ;
A : mat r i ce;
x, v : vect or ;
k : BOOLEAN;
function NRCIFRE ( numar : i nt eger ) : i nt eger ;
var
nr : i nt eger ; {r et i ne nr . ci f r e}
begi n
i f numar = 0 t hen
nr : = 1
el se
begi n
nr : = 0;
whi l e numar <> 0 do
begi n
Probleme rezolvate de programare Subiecte propuse la ATESTAT
48
numar : = numar DI V
10;
nr : = nr + 1
end
end;
NRCI FRE : = nr
end;
function SIMETRIC ( numar : i nt eger ) : bool ean;
var
z1, nr : i nt eger ;
ci f : vect or ;
begi n
nr := NRCIFRE ( numar) ;
z1 : = numar ;
wr i t el n;
f or i : = 1 t o NRCIFRE (numar) do
begi n
cif [ i ] := z1 MOD 10;
{ wr i t el n ( ' ci f [ ' , i , ' ] = ' , ci f
[ i ] ) ; }
z1 := z1 DIV 10;
end;
K : = TRUE; {pr esupun "numar " = SI METRI C}
f or i : = 1 t o nr DI V 2 do
begi n
i f ci f [ i ] <> ci f [ nr - i + 1]
t hen
k : = FALSE
end;
SI METRI C : = k
end; {sf ar si t f unct i e SI METRI C}
Probleme rezolvate de programare Subiecte propuse la ATESTAT
49
Begin { PROGRAM PRINCIPAL }
cl r scr ;
r epeat
wr i t e ( ' Dat i n = ' ) ; r eadl n ( n)
unt i l ( n >= 1) AND ( n <= nmax) ;
wr i t el n ( ' Dat i mat r i cea A' ) ;
f or i : = 1 t o n do
begi n
f or j : = 1 t o n do
begi n
wr i t e ( ' Dat i A [ ' , i , ' , ' , j , ' ] =
' ) ;
r eadl n ( A [ i , j ] )
end
end;
wr i t el n;
wr i t el n ( ' Mat r i cea A est e: ' ) ;
f or i : = 1 t o n do
begi n
f or j : = 1 t o n do
begi n
wr i t e ( a[ i , j ] , ' ' )
end;
wr i t el n;
end;
wr i t el n;
{const r ui r e vect or V cu el ement e de SUB
diagonala secundara}
wr i t el n ( ' El ement el e de SUB di agonal a
SECUNDARA sunt : ' ) ;
wr i t el n;
t : = 0; {i ndex i n vect or ul V}
f or i : = 2 t o n do {pe l i ni a i = 1 nu
exi st a el ement e SUB di ag sec}
begi n
f or j := n + 2 - i to n do
begi n
t : = t + 1;
V [ t ] : = a [ i , j ] ;
wr i t e ( V [ t ] , ' ' ) ;
end;
end;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
50
wr i t el n ( 'Numarul Total de elemente SUB
diagonala SECUNDARA, t = ', t) ;
q := 0; {contor pt. elemente simetrice}
wr i t el n;
wr i t el n ( 'Elemente SIMETRICE SUB diagonala
SECUNDARA: ' ) ;
f or p : = 1 t o t do
{caut i n vect or ul cu el ement e de SUB
di ag sec}
begi n
i f SIMETRIC ( v [p] ) = TRUE t hen
begi n
wr i t el n ( ' V [ ' , p, ' ] = ' ,
V [ p] ) ;
q := q + 1; {amgasi t un
numar SI METRI C, i l numar am}
x [q] := v [p]; {r et i n
el ement ul gasi t i n vect or ul X}
{ wr i t el n ( x [ q] ) ; }
end;
end;
wr i t el n ( 'TOTAL elemente SIMETRICE SUB
diagonala SECUNDARA = ', q) ;
r eadl n
end.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
51
ATESTAT - 2006 - 22 Se dau matricile A i B de tip (m,
n) cu elemente numere reale. S se genereze i s se
afieze matricile C i D de tip (m, n), astfel nct C = A +
B, D = A B, ale cror elemente sunt definite astfel:
C [i, j] = A [i, j] + B [i, j]
D [i, j] = A [i, j] B [i, j] pentru
orice i = 1 . . m i j = 1 . . n.
Rezolvare: Matricile C i D se construiesc foarte simplu n
dou bucle FOR
Program
ATESTAT_2006_22_MATRICI_SUMA_SI_DIFERENTA ;
const
nmax = 30;
t ype
mat r i ce = ar r ay [ 1. . nmax, 1. . nmax] of
i nt eger ;
var
C, D, A, B : mat r i ce;
m, n, i , j : i nt eger ;
Begin { PROGRAM PRINCIPAL }
r epeat
wr i t e ( ' Dat i m= ' ) ;
r eadl n ( m) ;
unt i l ( m>= 1) and ( m<= nmax) ;
r epeat
wr i t e ( ' Dat i n = ' ) ;
r eadl n ( n)
unt i l ( n >= 1) and ( n <= nmax) ;
wr i t el n;
wr i t el n ( ' Dat i mat r i cea A' ) ;
f or i : = 1 t o mdo
begi n
f or j : = 1 t o n do
begi n
wr i t e ( ' Dat i A [ ' ,
i , ' , ' , j , ' ] = ' ) ;
r eadl n ( A [ i , j ] )
end
Probleme rezolvate de programare Subiecte propuse la ATESTAT
52
end;
wr i t el n;
wr i t el n ( ' Dat i mat r i cea B' ) ;
f or i : = 1 t o mdo
begi n
f or j : = 1 t o n do
begi n
wr i t e ( ' Dat i B [ ' ,
i , ' , ' , j , ' ] = ' ) ;
r eadl n ( B [ i , j ] )
end
end;
wr i t el n;
f or i : = 1 t o mdo
begi n
f or j : = 1 t o n do
begi n
C [ i , j ] : = A [ i , j ] + B
[ i , j ] ;
end
end;
wr i t el n;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
53
f or i : = 1 t o mdo
begi n
f or j : = 1 t o n do
begi n
D [ i , j ] : = A [ i , j ] - B
[ i , j ] ;
end
end;
wr i t el n;
wr i t el n ( ' Mat r i cea C est e' ) ;
f or i : = 1 t o mdo
begi n
f or j : = 1 t o n do
begi n
wr i t e ( C [ i , j ] , ' ' ) ;
end;
wr i t el n
end;
wr i t el n;
wr i t el n ( ' Mat r i cea D est e' ) ;
f or i : = 1 t o mdo
begi n
f or j : = 1 t o n do
begi n
wr i t e ( D [ i , j ] , ' ' ) ;
end;
wr i t el n;
end;
wr i t el n;
r eadl n
end.
ATESTAT - 2006 - 23 Pentru un ir de n numere
naturale, s se calculeze recursiv cel mai mare divizor
comun al lor.
Rezolvare: Prezentm dou variante:
Probleme rezolvate de programare Subiecte propuse la ATESTAT
54
VARIANTA 1
Definim o funcie recursiv CMMDC (A, B), n care:
- Dac B = 0, CMMDC = A (B = 0 este i condiia de
oprire a funciei recursive CMMDC);
- Dac B <> 0, funcia CMMDC se va apela cu
parametrii B, respectiv R =A MOD B.
Desigur, aceast funcie se poate aplica doar celor dou
numere A i B. De aceea, vom folosi un vector auxiliar
Caux, n care vom reine CMMDC temporari. De exemplu:
- Dup introducerea lui x [ 1 ] , Caux [ 1 ] =x [ 1 ];
- Dup introducerea lui x [ 2 ], Caux [ 2 ] =
CMMDC ( x [ 2 ], Caux [ 1 ] );
- ..
- Dup introducerea lui x [ i ], Caux [ i ] =
CMMDC ( x [ i ], Caux [ i - 1 ] );
- ..
- Dup introducerea lui x [ n ], Caux [ n ] =
CMMDC ( x [ n ], Caux [ n - 1 ] ).
n final CMMDC =Caux [ n ].
Probleme rezolvate de programare Subiecte propuse la ATESTAT
55
Program ATESTAT_2006_23_CMMDC_RECURSIV_
VARIANTA_1 ;
uses CRT;
CONST
nmax = 100;
TYPE
vect or = ar r ay [ 1. . nmax] of i nt eger ;
VAR
x, Caux : vect or ; {Caux = vect or auxi l i ar i n
car e se r et i n CMMDC t empor ar i }
C, n, i : i nt eger ;
function CMMDC ( A, B : i nt eger ) : i nt eger ;
var
aux, R : i nt eger ;
begi n
i f A < B t hen
begi n
aux : = A;
A : = B;
B : = aux
end;
I F B = 0 t hen
CMMDC : = A
El se
Begi n
R : = A MOD B;
CMMDC := CMMDC (B, R) sau
CMMDC := CMMDC (B, A MOD B)
End;
End; {sf r si t f unct i e CMMDC}
Begin { PROGRAM PRINCIPAL }
CLRSCR;
wr i t e ( ' Dat i nr . de el ement e al e vect or ul ui ,
n = ' ) ;
r eadl n ( n) ;
wr i t el n;
wr i t e ( ' Dat i pr i mul el ement , x [ 1 ] = ' ) ;
r eadl n ( x [ 1] ) ;
Caux [ 1 ] : = x [ 1 ] ;
C : = Caux [ 1 ] ;
wr i t el n ( ' Pana i n acest moment , CMMDC = ' ,
C) ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
56
wr i t el n;
f or i : = 2 t o n do
begi n
wr i t e ( ' Dat i x [ ' , i , ' ] = ' ) ;
r eadl n ( x [ i ] ) ;
Caux [ i ] := CMMDC ( x [i], Caux [i
- 1] );
C : = Caux [ i ] ;
wr i t el n ( ' Pana i n acest moment ,
CMMDC = ' , C) ;
wr i t el n;
end;
wr i t el n ( ' C = ' , C) ;
r eadl n
end.
VARIANTA 2
Pentru un ir de n numere, se poate defini o funcie
recursiv, notat DIVCOM, care calculeaz CMMDC prin
metoda DEI. Se calculeaz CMMDC al primei jumti a
irului de numere i se reine rezultatul n variabila C1; apoi
se calculeaz CMMDC al celei de-a doua jumti i se
reine rezultatul n variabila C2. n final, se determin
CMMDC al C1 i C2.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
57
Program
ATESTAT_2006_23_CMMDC_RECURSIV_VARIANTA_2_DEI ;
CONST
nmax = 100;
TYPE
vect or = ar r ay [ 1. . nmax] of i nt eger ;
VAR
x : vect or ;
C, n, i : i nt eger ;
function DIVCOM ( i ncep, sf : i nt eger ) : i nt eger ;
{ det er mi na CMMDC pr i n DEI }
VAR
mi j , C1, C2 : i nt eger ;
begi n
i f incep = sf t hen
DIVCOM := x [incep]
el se
begi n
i f sf - incep = 1 t hen
DIVCOM := CMMDC ( x [incep],
x [sf] )
el se
begi n
mij : = ( i ncep + sf )
DI V 2;
C1 : = DI VCOM ( i ncep,
mi j ) ;
C2 : = DI VCOM ( mi j + 1,
sf ) ;
DI VCOM : = CMMDC ( C1,
C2)
end
end
end; { sf . f ct . DI VCOM }
Begin { PROGRAM PRINCIPAL }
wr i t e ( ' Dat i nr . de el ement e al e vect or ul ui ,
n = ' ) ;
r eadl n ( n) ;
f or i : = 1 t o n do
begi n
Probleme rezolvate de programare Subiecte propuse la ATESTAT
58
wr i t e ( ' Dat i x [ ' , i , ' ] = ' ) ;
r eadl n ( x [ i ] )
end;
C : = DI VCOM ( 1, n) ;
wr i t el n ( ' C = ' , C) ;
r eadl n
end.
ATESTAT - 2006 - 24 Se citesc pe rnd n numere
naturale. Folosind o funcie recursiv, verificai care sunt
termeni ai irului lui Fibonacci i afiai aceti termeni
cte unul pe un rnd.
Rezolvare: Definim o funcie recursiv FIBO, care
calculeaz termenii irului lui Fibonacci.
Definim nc o funcie numit VERIFICA, pentru a testa
dac un numr este sau nu termen al irului lui Fibonacci.
Program ATESTAT_2006_24_FIBONACCI_RECURSIV ;
VAR
n, i : i nt eger ;
x : i nt eger ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
59
function FIBO ( m: i nt eger ) : i nt eger ;
begi n
i f ( m= 1) or ( m=2) t hen
FI BO : = 1
el se
FI BO : = FI BO ( m- 1) + FI BO ( m- 2)
end;
function VERIFICA ( y : i nt eger ) : bool ean;
l abel
10;
var
j : i nt eger ;
k : bool ean;
begi n
k : = FALSE; {pr esupun ca y nu est e
el ement al si r ul ui Fi bo}
j : = 1;
whi l e FI BO ( j ) <= y do
begi n
i f FI BO ( j ) = y t hen
begi n
k : = TRUE;
GOTO 10;
end;
j : = j + 1;
end;
10: VERI FI CA : = k
end;
Begin { PROGRAM PRINCIPAL }
wr i t e ( ' Dat i n = ' ) ;
r eadl n ( n) ;
wr i t el n ;
wr i t el n ( ' Dat i numer el e ' ) ;
f or i : = 1 t o n do
begi n
wr i t e ( ' x = ' ) ;
r eadl n ( x) ;
i f VERIFICA ( x) = TRUE t hen
wr i t el n ( x, ' apar t i ne si r ul ui
l ui Fi bonacci ' ) ;
end;
r eadl n
end.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
60
ATESTAT - 2006 - 25 Scriei o funcie recursiv care
ntoarce oglinditul unui numr natural. Exemplu, pentru n
= 123 se afieaz 321
Rezolvare: Notm cu INVERS funcia recursiv cerut, n
care facem apel la funcii specifice datelor de tip STRING:
LENGTH i COPY.
Program
ATESTAT_2006_25_INVERSAREA_ELEMENTELOR_UNUI_SIR_
CU_FUNCTIE_RECURSIVA ;
uses CRT;
VAR
si r , i nv : st r i ng;
function INVERS ( s : st r i ng ) : st r i ng;
begi n
i f s = ' ' t hen
I NVERS : = ' '
el se
I NVERS : = s [ LENGTH ( s) ] + I NVERS (
COPY ( s, 1, LENGTH ( s) - 1 ) ) ;
end; { sf ar si t f unct i e }
Probleme rezolvate de programare Subiecte propuse la ATESTAT
61
Begin { PROGRAM PRINCIPAL }
wr i t e ( ' I nt r oducet i si r ul : ' ) ;
r eadl n ( si r ) ;
wr i t el n;
inv := INVERS ( sir );
wr i t el n ( ' Si r ul i nver s est e : ' , i nv ) ;
r eadl n
end.
ATESTAT - 2006 - 26 S se determine i s se afieze
reprezentarea unui numr natural dat ntr-o baz b, b <
10, folosind o funcie recursiv (s se transforme un
numr natural din baza 10 ntr-o alt baz de numeraie
b, b <10, folosind o funcie recursiv).
Rezolvare: A se vedea i alte variante de rezolvare
prezentate la pag. 140 (ATESTAT - 2005 28)
Program
ATESTAT_2006_26_TRANSFORMARE_BAZA_10_IN_BAZA_b_V
ARIANTA_RECURSIVA;
var
n: i nt eger ;
b: byt e;
pr ocedur e TRANSFORMA ( x: i nt eger ; b: byt e) ;
var r : byt e;
begi n
i f x > 0 t hen
begi n
r : = x MOD b;
TRANSFORMA (x DIV b, b);
wr i t e ( r ) ;
end;
end;
Begin { PROGRAM PRINCIPAL }
wr i t e ( ' Dat i n = ' ) ;
r eadl n ( n) ;
wr i t e ( ' Dat i noua baza de numer at i e, b = ' ) ;
r eadl n ( b) ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
62
wr i t el n ( ' Repr ezent ar ea numar ul ui ' , n, ' i n
baza ' , b, ' est e: ' ) ;
TRANSFORMA (n, b);
r eadl n;
end.
ATESTAT - 2006 - 27 S se descompun recursiv un
numr n N, transmis ca parametru, ntr-o sum de
puteri ale lui 2, puterile fiind n ordine strict
descresctoare.
Exemplu: 14 = 8 + 4 + 2 = 2
3
+

2
2
+

2
1
.
Rezolvare: Definim funciile PUTERE (pentru ridicare la
putere), TRANSFORMA (pentru a converti un numr
zecimal n numr binar) i NRCIF (pentru numrarea
cifrelor unui numr).
Program
ATESTAT_2006_27_DESCOMPUNERE_IN_SUMA_DE_PUTERI_A
LE_LUI_2;
uses CRT;
const
nmax = 30;
t ype
vect or = ar r ay [ 1. . nmax] of i nt eger ;
{vect or ci f r e numar }
var
c : vect or ; {vect or ci f r e numar sau vect or
coef i ci ent i ai
put er i l or l ui 2}
Probleme rezolvate de programare Subiecte propuse la ATESTAT
63
zeci m, n: i nt eger ;
b: byt e;
x1, x : i nt eger ;
i , nr ci f r e : i nt eger ;
ZECI MAL, BI NAR, nr 10 : i nt eger ; {numar ul
zeci mal }
nr 2i nver sat , nr 2 : i nt eger ; {numar bi nar
i nver sat r espect i v nr . bi nar f i nal }
R : vect or ; {vect or de r est ur i }
j , k, r est : i nt eger ;
function PUTERE ( z : i nt eger ; m: i nt eger ) :
i nt eger ;
var
p, j : i nt eger ;
begi n
p : = 1;
f or j : = 1 t o mdo
p : = p * z;
PUTERE : = p
end;
procedure TRANSFORMA ( x: i nt eger ; b: byt e) ;
var
r : byt e; {r = REST}
begi n
i : = 0;
i f x > 0 t hen
begi n
i : = i + 1;
r : = x mod b; {b = baza de
numer at i e}
TRANSFORMA (x DIV b, b);
wr i t e ( r ) ;
end;
end;
function NRCIF ( y : i nt eger ) : i nt eger ;
var
nr : i nt eger ;
begi n
i f y = 0 t hen
nr ci f : = 0
el se
NRCI F : = 1 + NRCIF (y DIV 10)
end;
Begin { PROGRAM PRINCIPAL }
Probleme rezolvate de programare Subiecte propuse la ATESTAT
64
cl r scr ;
wr i t e ( ' Dat i numar ul zeci mal = ' ) ;
r eadl n ( nr 10) ;
zeci mal : = nr 10; {conser vamval oar ea
i ni t i al a a numar ul ui zeci mal }
n : = nr 10;
wr i t e ( ' Dat i baza de numer at i e, b = ' ) ;
r eadl n ( b) ;
wr i t el n ( ' Repr ezent ar ea numar ul ui ' , n, ' i n
baza ' , b, ' est e: ' ) ;
wr i t el n;
TRANSFORMA (n, b);
wr i t el n;
nr ci f r e : = NRCI F ( n) ;
wr i t el n ( ' Numar ul ' , n, ' ar e ' , nr ci f r e, '
ci f r e' ) ;
i f nr 10 = 0 t hen
begi n
ZECI MAL : = 0;
i : =1;
R [ i ] : = 0
end
el se
begi n
i : = 0;
ZECI MAL : = nr 10;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
65
whi l e nr 10 <> 1 do
begi n
r est : = nr 10 MOD 2;
i : = i + 1;
R [ i ] : = r est ;
nr 10 : = nr 10 DI V 2;
end;
i : = i + 1;
r [ i ] : = nr 10;
end;
n : = i ;
wr i t el n; wr i t el n;
wr i t e ( ' Numar ul bi nar echi val ent l ui ' ,
ZECI MAL, ' est e ' ) ;
f or i : = n downt o 1 do
begi n
wr i t e ( R[ i ] ) ;
end;
wr i t el n; wr i t el n;
wr i t el n ( ' Numar ul zeci mal ' , ZECI MAL, ' se
poat e scr i e ca suma put er i l or l ui 2 ast f el : ' ) ;
wr i t el n;
f or i : = n downt o 2 do
begi n
wr i t e ( r [ i ] * put er e ( 2, i - 1) , ' +
' ) ;
end;
wr i t e ( r [ i ] * put er e ( 2, 0) ) ;
r eadl n;
end.
ATESTAT - 2006 - 28 Scriei o funcie (iterativ sau
recursiv) care afieaz valoarea unui polinom n punctul
a. Coeficienii polinomului sunt dai ntr-un vector.
Astfel, pentru v =(1, 2, 3), avem polinomului P = x
2
+

2x +
3.
Rezolvare:
Plecm de la observaia c vectorul conine coeficienii
polinomului n ordine descresctoare a puterilor lui x,
Probleme rezolvate de programare Subiecte propuse la ATESTAT
66
inclusiv puterea zero. Definim funcii i proceduri ale cror
roluri rezult din nume.
Program
ATESTAT_2006_28_CALCUL_VALOARE_POLINOM_INTR-
UN_PUNCT;
uses Cr t ;
const
GMaxPol = 20; {Gr adul MAXi mal unui
POLi nom}
TYPE
polinom = r ecor d
GRAD : 0. . GMaxPol ;
COEF : ar r ay [ 0. . GMaxPol ]
of r eal ;
end;
VAR
POL1, POL2, POLREZ, PREST : pol i nom;
NUMAR, A, X, VALOARE : r eal ;
OK, EROARE : bool ean;
OPTI UNE, CC : char ;
function ValPolinom ( var POL : pol i nom; VALX :
r eal ) : r eal ;
var {cal cul ar ea Val oar ea unui Pol i nom}
i : i nt eger ;
VALPOL : r eal ;
begi n
i : = POL. GRAD;
VALPOL : = POL. COEF [ i ] ; {coef i ci ent ul
monomul ui de gr ad maxi m}
Probleme rezolvate de programare Subiecte propuse la ATESTAT
67
whi l e i > 0 do
begi n
i : = i - 1;
VALPOL : = VALPOL * VALX +
POL. COEF [ i ] ;
end; {whi l e}
Val Pol i nom: = VALPOL;
end; {f unct i on}
function RoundR ( NUMAR: r eal ; ZEC: i nt eger ) :
r eal ;
var
P10 : r eal ;
i : i nt eger ;
begi n
P10 : = 1;
f or i : = 1 t o ZEC do
P10 : = P10 * 10; {end f or }
RoundR : = Round ( NUMAR * P10) / P10;
end; {f unct i on}
procedure CitestePol ( MESAJ : st r i ng; var
POL: pol i nom) ;
var
i : i nt eger ;
begi n
r epeat
Wr i t eLn;
Wr i t eLn ( MESAJ , ' : ' ) ;
Wr i t e ( ' - i nt r oducet i gr adul : ' ) ;
ReadLn ( POL. GRAD) ;
i f POL. GRAD > GMaxPol t hen
begi n
Wr i t eLn( ' At ent i e! Gr adul nu poat e
f i mai mar e de ' , GMaxPol , ' ! ' ) ;
Sound( 1200) ; {Beep}
Del ay( 200) ;
NoSound;
end; {i f }
i f POL. GRAD<0 t hen
begi n
Wr i t eLn( ' At ent i e ! Gr adul nu
poat e f i mai mi c decat 0 ! ' ) ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
68
Sound( 1200) ; Del ay( 200) ;
NoSound; {Beep}
end; {i f }
unt i l ( 0 <= POL. GRAD) and ( POL. GRAD <=
GMaxPol ) ;
f or i : = POL. GRAD downt o 0 do
begi n
Wr i t e ( ' - Coef i ci ent ul l ui
X^' , i : 2, ' : ' ) ;
ReadLn ( POL. COEF [ i ] ) ;
POL. COEF[ i ] : = RoundR ( POL. COEF
[ i ] , 5) ; {cel mul t 5 zeci mal e}
end; {f or }
end; {pr ocedur e}
function NrRealSir ( NUMAR : r eal ; SEMN :
bool ean) : st r i ng;
var L, R : i nt eger ;
S : st r i ng;
begi n
St r ( NUMAR: 20: 5, S) ;
L: =1;
whi l e S [ L] = ' ' do
L : = L + 1; {st er ge spat i i l e
nesemni f i cat i ve}
R : = 20;
whi l e S [ R] = ' 0' do
R : = R - 1; {st er ge zer our i l e
nesemni f i cat i ve}
i f R = 15 t hen
R : = 14; {st er ge punct ul si t uat
dupa numer el e i nt r egi }
S : = Copy ( S, L, R- L + 1) ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
69
i f SEMN t hen
begi n
i f NUMAR >= 0. 0 t hen
S : = ' + ' + S;
S : = copy ( S, 1, 1) + ' ' +
copy ( S, 2, Lengt h ( S) - 1) ;
end; {i f }
Nr Real Si r : =S;
end; {f unct i on}
procedure Titlu ( MESAJ : st r i ng) ;
var i : i nt eger ;
begi n
Cl r Scr ;
Wr i t eLn ( MESAJ , ' : ' ) ;
f or i : =1 t o Lengt h ( MESAJ ) + 2 do
Wr i t e ( ' =' ) ; {end f or }
Wi ndow ( 1, 4, 80, 25) ;
end; {pr ocedur e}
procedure AfiseazaPol ( MESAJ : st r i ng; var
POL: pol i nom) ;
var i , L, R : i nt eger ;
S : st r i ng;
begi n
Wr i t eLn;
Wr i t eLn ( MESAJ , ' ( de gr adul ' ,
POL. GRAD: 2, ' ) : ' ) ;
f or i : = POL. GRAD downt o 0 do
begi n
i f ( i >0) and ( Abs ( POL. COEF
[ i ] ) = 1. 0) t hen
S : = ' ' {nu af i seaza
coef i ci ent ul + / - 1, dar va af i sa 0}
el se
S : = Nr Real Si r ( Abs
( POL. COEF [ i ] ) , Fal se) ; {end i f }
i f POL. COEF[ I ] <0. 0 t hen
S : = ' - ' + S
el se
i f i < POL. GRAD t hen
S : = ' + ' + S
el se
Probleme rezolvate de programare Subiecte propuse la ATESTAT
70
S : = ' ' + S; {end
i f }
Wr i t e ( S) ;
i f i > 9 t hen
Wr i t e ( ' x^' , i : 2)
el se
i f i > 1 t hen
Wr i t e( ' x^' , i : 1)
el se
i f i = 1 t hen
Wr i t e ( ' x' )
el se {i =0}
Wr i t eLn; {end
i f }
end; {f or }
end; {pr ocedur e}
Begin { PROGRAM PRINCIPAL }
r epeat
CLRSCR; {st er ge ecr anul si buf f er ul
t ast at ur i i }
whi l e KeyPr essed do
begi n
CC : = ReadKey;
i f Or d ( CC) = 0 t hen
CC : = ReadKey;
end; {whi l e}
{af i seaza meni ul pr i nci pal }
Probleme rezolvate de programare Subiecte propuse la ATESTAT
71
wr i t el n;
wr i t el n ( ' Al eget i una di nt r e opt i uni l e de
mai j os: ' ) ;
wr i t el n;
Wr i t eLn( ' 1 - Pent r u a cal cul a val oar ea unui
pol i nomi nt r - un punct X dat ' ) ;
Wr i t eLn;
Wr i t eLn( ' <Esc> - Pent r u Ter mi nar ea
pr ogr amul ui ' ) ;
wr i t el n;
Wr i t e ( ' Introduceti optiunea dvs : ' ) ;
{ci t est e OPTI UNEA sol i ci t at a}
repeat
until KeyPressed;
OPTIUNE := ReadKey;
i f Or d ( OPTI UNE) =0 t hen
CC := ReadKey;
{anul eaza buf f er ul t ast at ur i i }
whi l e KeyPr essed do
begi n
CC : = ReadKey;
i f Or d ( CC) = 0 t hen
CC := ReadKey;
end; {whi l e}
{execut a oper at i a sol i ci t at a}
OK: =Tr ue;
CASE OPTIUNE of
' 1' : begi n Ti t l u ( ' 1. Val oar ea unui
pol i nompent r u un X dat ' ) ;
Ci t est ePol ( ' Se cal cul eaza val oar ea
pol i nomul ui ' , POL1) ;
Wr i t eLn;
Wr i t e ( ' pent r u X = : ' ) ;
ReadLn( X) ;
X : = RoundR ( X, 5) ; {cel mul t 5
zeci mal e}
VALOARE : = ValPolinom ( POL1, X) ;
Cl r Scr ;
AfiseazaPol ( ' Se cal cul eaza
val oar ea pol i nomul ui ' , POL1) ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
72
Wr i t eLn;
Wr i t eLn ( ' pent r u X = ' , Nr Real Si r
( X, Fal se) , ' ; ' ) ;
Wr i t eLn;
Wr i t eLn( ' Se obt i ne val oar ea
' , Nr Real Si r ( VALOARE, Fal se) , ' ! ' ) ;
end;
el se OK: =Fal se;
end; {case}
i f OK t hen
begi n
Wr i t eLn;
Wr i t eLn;
Wr i t e ( ' Apasat i o t ast a oar ecar e . . .
' ) ;
repeat
until KeyPressed;
Wi ndow ( 1, 1, 80, 25) ;
end; {i f }
unt i l Ord (OPTIUNE) = 27; {Pana se apasa ESC}
end. {sf ar si t pr ogr am}
Probleme rezolvate de programare Subiecte propuse la ATESTAT
73
ATESTAT - 2006 - 29 Se citete o valoare n. S se
scrie un subprogramrecursiv care s calculeze valoarea
expresiei: E = 2 * 4 * 6 * 8* * (2 * n)
Rezolvare: Definim funcia EXPRESIE al crei algoritm
recursiv se aseamn cu algoritmul de calculare a lui x
n
.
Program ATESTAT_2006_29_CALCUL_RECURSIV_EXPRESIE
;
var
E, n : i nt eger ;
f unct i on EXPRESIE ( m: i nt eger ) : i nt eger ;
begi n
I F m= 0 t hen
EXPRESI E : = 1
el se
EXPRESIE := 2 * m * EXPRESIE (m - 1)
end;
Begin { PROGRAM PRINCIPAL }
wr i t e ( ' Dat i n = ' ) ;
r eadl n ( n) ;
E : = EXPRESIE (n);
wr i t el n ( ' E = ' , E) ;
r eadl n
end.
ATESTAT - 2006 - 30 Se citete un numr ntreg i
pozitiv. S se scrie un subprogram recursiv care s
determine suma cifrelor impare ale numrului.
Rezolvare: Definim funciile NRCIF (pentru numrarea
cifrelor unui ntreg) i SUMAIMPARE (pentru
determinarea sumei cifrelor impare ale unui numr).
Program ATESTAT_2006_30_SUMA_CIFRE_IMPARE ;
const
Probleme rezolvate de programare Subiecte propuse la ATESTAT
74
nmax = 100;
TYPE
vect or = ar r ay [ 1. . nmax] of i nt eger ;
var
S1, x, x1, n, i : i nt eger ;
y : vect or ;
k : BOOLEAN;
function NRCIFRE ( z : i nt eger ) : i nt eger ;
var
m: i nt eger ;
begi n
i f z = 0 t hen
m: = 1
el se
begi n
m: = 0;
whi l e z <> 0 do
begi n
z : = z DI V 10;
m: = m+ 1
end
end;
NRCI FRE : = m
end;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
75
function SUMAIMPARE ( z : i nt eger ) : i nt eger ;
var
s, j : i nt eger ;
y : vect or ;
begi n
s : = 0;
f or i : = 1 t o n do
begi n
y [ i ] : = x1 MOD 10;
wr i t el n ( ' y [ ' , i , ' ] = ' , y [ i ] ) ;
x1 : = x1 DI V 10;
end;
f or j : = 1 t o NRCI FRE ( z) do
begi n
i f y [ j ] MOD 2 <> 0 t hen
s : = s + y [ j ]
end;
SUMAI MPARE : = s;
end;
Begin { PROGRAM PRINCIPAL }
wr i t e ( ' I nt r oducet i un numar nat ur al x =
' ) ;
r eadl n ( x) ;
n : = NRCIFRE (x);
wr i t el n ( ' Numar ul ' , x, ' ar e ' , n, ' ci f r e' ) ;
wr i t el n;
x1 : = x;
s1 : = SUMAIMPARE (x);
wr i t el n ( ' Suma ci f r el or i mpar e = ' , S1) ;
r eadl n
end.
ATESTAT - 2006 - 31 Se citete o valoare natural n.
S se scrie cte un subprogram recursiv care s calculeze
valoarea expresiilor :
E1 = 1 * 4 * 7 * (3n 2)
E2 = 2 4 + 6 + + (1)
n + 1
(2 n)
Probleme rezolvate de programare Subiecte propuse la ATESTAT
76
Rezolvare: Funciile PUTERE, EXPRESIE1 i
EXPRESIE2 au algoritmi asemntori.
Program ATESTAT_2006_31_CALCUL_RECURSIV_EXPRESII
;
var
E1, E2, n : i nt eger ;
function PUTERE ( x : i nt eger ; m: i nt eger ) :
i nt eger ;
var
p, i : i nt eger ;
begi n
p : = 1;
f or i : = 1 t o mdo
begi n
p : = p * x
end;
PUTERE : = p
end;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
77
function EXPRESIE1 ( m: i nt eger ) : i nt eger ;
begi n
i f m= 0 t hen
EXPRESI E1 : = 1
el se
EXPRESI E1 : = ( 3*m- 2) * EXPRESI E1
( m- 1)
end;
function EXPRESIE2 ( m: i nt eger ) : i nt eger ;
begi n
i f m= 0 t hen
EXPRESI E2 : = 0
el se
EXPRESI E2 : = PUTERE ( - 1, m+ 1) * ( 2
* m) + EXPRESI E2 ( m- 1)
end;
Begin { PROGRAM PRINCIPAL }
wr i t e ( ' Dat i n n = ' ) ;
r eadl n ( n) ;
E1 : = EXPRESI E1 ( n) ;
E2 : = EXPRESI E2 ( n) ;
wr i t el n ( ' E1 = ' , E1) ;
wr i t el n;
wr i t el n ( ' E2 = ' , E2) ;
r eadl n
end.
ATESTAT - 2006 - 32 Se citesc dou numere naturale
diferite a i b. Cerine:
Definii o funcie recursiv care calculeaz valoarea a
b
.
Definii o funcie recursiv care calculeaz suma valorilor
din intervalul [a, b].
Rezolvare: Funciile recursive PUTERE i SUMA se
bazeaz pe algoritmi cunoscui.
Program ATESTAT_2006_32_FUNCTII_RECURSIVE ;
var
a, b, p, s : i nt eger ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
78
function PUTERE ( y: i nt eger ; m: i nt eger ) :
i nt eger ;
begi n
i f m= 0 t hen
PUTERE : = 1
el se
PUTERE : = y * PUTERE ( y, m- 1)
end;
function SUMA ( a1, b1 : i nt eger ) : i nt eger ;
var
s1, i : i nt eger ;
begi n
s1 : = 0;
f or i : = a1 t o b1 do
s1 : = s1 + i ;
SUMA : = s1
end;
Begin { PROGRAM PRINCIPAL }
wr i t e ( ' Dat i a = ' ) ; r eadl n ( a) ;
wr i t e ( ' Dat i b = ' ) ; r eadl n ( b) ;
p : = PUTERE (a, b);
wr i t el n ( ' P = ' , P) ;
s : = SUMA (a, b);
wr i t el n ( ' S = ' , s) ;
r eadl n
end.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
79
ATESTAT - 2006 - 33 Se citete de la tastatur un
vector cu n elemente numere ntregi.
Cerine:
Scriei o funcie recursiv care calculeaz produsul
elementelor impare din vector.
Scriei o funcie recursiv sau iterativ care determin
dac elementele situate simetric fa de mijlocul
vectorului sunt egale.
Rezolvare: Funcia PRODUS este recursiv; funcia
VERIFIC este iterativ.
Program ATESTAT_2006_33_FUNCTII_RECURSIVE ;
const
nmax = 30;
t ype
vect or = ar r ay [ 1. . nmax] of i nt eger ;
var
x, y : vect or ;
mi j , P, n, i , j , i mpar e : i nt eger ;
b : bool ean;
function PRODUS ( m: i nt eger ) : i nt eger ;
begi n
i f m= 0 t hen
PRODUS : = 1
el se
PRODUS : = y [ m] * PRODUS ( m- 1)
end;
function VERIFICA ( v : vect or ) : bool ean;
begi n
b : = TRUE;
f or i : = 1 t o n DI V 2 do
begi n
i f v [ i ] <> v [ n - i + 1] t hen
b : = FALSE
end;
VERI FI CA : = b;
end;
Begin { PROGRAM PRINCIPAL }
r epeat
wr i t e ( ' Dat i n = ' ) ; r eadl n ( n)
unt i l ( n >= 1) and ( n <= nmax) ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
80
wr i t el n ( ' Dat i vect or ul de i nt r egi ' ) ;
f or i : = 1 t o n do
begi n
wr i t e ( ' Dat i X [ ' , i , ' ] = ' ) ;
r eadl n ( x[ i ] )
end;
impare : = 0; {cont or pent r u numer e i mpar e}
f or i : = 1 t o n do
begi n
i f x [ i ] MOD 2 <> 0 t hen
begi n
i mpar e : = i mpar e + 1;
y [ i mpar e] : = x [ i ] ;
{const r ui esc vect or ul de i mpar e}
end;
end;
p : = PRODUS (impare);
wr i t el n ( ' P = ' , P) ;
wr i t el n;
i f VERI FI CA ( x) t hen
wr i t el n ( ' Vect or ul est e SI METRI C' )
el se
wr i t el n ( ' Vect or ul est e NESI METRI C' ) ;
r eadl n
end.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
81
ATESTAT - 2006 - 34 Se citete de la tastatur un
vector cu n elemente numere ntregi.
Cerine:
Scriei o funcie recursiv care calculeaz suma
elementelor vectorului.
Scriei o funcie recursiv sau iterativ care verific dac
exist cel puin o valoare pozitiv n vector.
Rezolvare: Funcia SUMA este recursiv; funcia
VERIFIC este iterativ.
Program ATESTAT_2006_34_FUNCTII_RECURSIVE ;
const
nmax = 30;
t ype
vect or = ar r ay [ 1. . nmax] of i nt eger ;
var
x, y : vect or ;
mi j , s, n, i , j , k : i nt eger ;
b : bool ean;
function SUMA ( m: i nt eger ) : i nt eger ;
begi n
i f m= 0 t hen
SUMA : = 0
el se
SUMA : = x [ m] + SUMA ( m- 1)
end;
function VERIFICA ( v : vect or ) : bool ean;
begi n
b : = FALSE;
f or i : = 1 t o n do
begi n
i f v [ i ] > 0 t hen
b : = TRUE
end;
VERI FI CA : = b;
end;
Begin { PROGRAM PRINCIPAL }
r epeat
wr i t e ( ' Dat i n = ' ) ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
82
r eadl n ( n)
unt i l ( n >= 1) and ( n <= nmax) ;
wr i t el n;
wr i t el n ( ' Dat i vect or ul de i nt r egi ' ) ;
f or i : = 1 t o n do
begi n
wr i t e ( ' Dat i X [ ' , i , ' ] = ' ) ;
r eadl n ( x[ i ] )
end;
wr i t el n;
s : = SUMA ( n) ;
wr i t el n ( ' S = ' , S) ;
wr i t el n;
i f VERI FI CA ( x) t hen
wr i t el n ( ' Vect or ul ar e cel put i n un
el ement pozi t i v' )
el se
wr i t el n ( ' Vect or ul nu ar e el emnt e
pozi t i ve' ) ;
r eadl n
end.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
83
ATESTAT - 2006 - 35 Fie X un ir de n numere ntregi
i k N, 1 < k < n. S se scrie o funcie care s afieze
irul astfel nct primele k numere s fie n ordine
cresctoare i restul n ordine descresctoare.
Rezolvare: Reinem numerele introduse n vectorul x.
Procedurile ORDONEAZACRESCATOR i
ORDONEAZADESCRESCATOR vor sorta k, respectiv
n - k elemente ale vectorului x.
Program ATESTAT_2006_35_ORDONARI_ELEMENTE_VECTOR
;
const
nmax = 100;
t ype
vect or = ar r ay [ 1. . nmax] of i nt eger ;
var
x, y, z : vect or ;
n, i , k, aux : i nt eger ;
a, b : i nt eger ;
procedure ORDONEAZACRESCATOR ( VAR v : vect or ; m
: i nt eger ) ;
var
j , aux, t est : i nt eger ;
begi n
r epeat
t est : = 0;
j : = 1;
r epeat
i f v [ j ] > v [ j + 1] t hen
begi n
aux : = v[ j ] ;
v [ j ] : = v [ j + 1] ;
v [ j + 1] : = aux;
t est : = 1;
end;
j : = j + 1
unt i l j > m- 1
unt i l t est = 0
end;
procedure ORDONEAZADESCRESCATOR ( VAR v : vect or ;
m: i nt eger ) ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
84
var
j , aux, t est : i nt eger ;
begi n
r epeat
t est : = 0;
j : = 1;
r epeat
i f v [ j ] < v [ j + 1] t hen
begi n
aux : = v[ j ] ;
v [ j ] : = v [ j + 1] ;
v [ j + 1] : = aux;
t est : = 1;
end;
j : = j + 1
unt i l j > m- 1
unt i l t est = 0
end;
Begin { PROGRAM PRINCIPAL }
r epeat
wr i t e ( ' Dat i n = ' ) ; r eadl n ( n)
unt i l ( n >= 1) and ( n <= nmax) ;
wr i t el n;
wr i t el n ( ' Dat i vect or ul X' ) ;
wr i t el n;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
85
f or i : = 1 t o n do
begi n
wr i t e ( ' Dat i X[ ' , i , ' ] = ' ) ;
r eadl n ( x[ i ] )
end;
wr i t el n;
wr i t e ( ' Dat i pozi t i a k = ' ) ;
r eadl n ( k) ;
f or i : = 1 to k do
y [i] := x [i];
f or i : = k + 1 to n do
z [i-k] := x [i]
ORDONEAZACRESCATOR (y, k);
ORDONEAZADESCRESCATOR (z, n-k);
f or i : = 1 t o k do
wr i t el n ( ' y [ ' , i , ' ] = ' , y[ i ] ) ;
wr i t el n;
f or i : = k + 1 t o n do
wr i t el n ( ' z [ ' , i - k, ' ] = ' , z[ i - k] ) ;
r eadl n
end.
ATESTAT - 2006 - 36 Fie X un ir de n numere ntregi.
S se scrie o funcie care s afieze irul astfel nct
numerele s se gseasc n ordinea cresctoare a sumei
cifrelor (primul numr este cel care are suma cifrelor cea
mai mic).
Rezolvare:
Varianta 1: Definim funcia NRCIFRE care determin
numrul cifrelor unui ntreg. Dup introducerea irului de
numere, preluate ntr-un vector X, vom determina, pentru
fiecare numr, numrul de cifre i vom face suma cifrelor
fiecrui numr. Toate cele n sume vor fi reinute ntr-un
vector S al sumelor cifrelor numerelor introduse. Ordonm
vectorul S (al sumelor) i, n funcie de ordinea elementelor
din S, ordonm i vectorul X.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
86
Program
ATESTAT_2006_36_ORDONARI_SUMA_CIFRE_VARIANTA_1 ;
const
nmax = 100;
TYPE
vect or = ar r ay [ 1. . nmax] of i nt eger ;
var
aux, x1, n, nr , i , t est , j , s1 : i nt eger ;
x, v, S : vect or ;
k : BOOLEAN;
function NRCIFRE ( y : i nt eger ) : i nt eger ;
var
m: i nt eger ;
begi n
i f y = 0 t hen
m: = 1
el se
begi n
m: = 0;
whi l e y <> 0 do
begi n
y : = y DI V 10;
m: = m+ 1
end
end;
NRCI FRE : = m
end;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
87
Begin { PROGRAM PRINCIPAL }
r epeat
wr i t e ( ' Dat i n = ' ) ;
r eadl n ( n)
unt i l ( n >= 1) and ( n <= nmax) ;
wr i t el n;
wr i t el n ( ' Dat i vect or ul ' ) ;
f or i : = 1 t o n do
begi n
wr i t e ( ' Dat i X [ ' , i , ' ] = ' ) ;
r eadl n ( x [ i ] )
end;
f or i : = 1 t o n do
begi n
nr : = NRCI FRE ( x [ i ] ) ;
x1 : = x [ i ] ;
S1 : = 0;
f or j : = 1 t o nr do
begi n
v [ j ] : = x1 MOD 10;
s1 : = S1 + v [ j ] ;
x1 : = x1 DI V 10;
end;
s [ i ] : = s1;
end;
r epeat
t est : = 0;
i : = 1;
r epeat
i f S [ i ] > S [ i + 1] t hen
begi n
aux : = x [ i ] ;
x [ i ] : = x [ i +
1] ;
x [ i + 1] : = aux;
aux : = s [ i ] ;
S [ i ] : = S [ i +
1] ;
S [ i + 1] : = aux;
t est : = 1
end;
i : = i + 1;
unt i l ( i > n- 1)
unt i l ( t est = 0) ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
88
wr i t el n ( ' Vect or ul X or donat dupa suma
ci f r el or ' ) ;
f or i : = 1 t o n do
wr i t el n ( ' X [ ' , i , ' ] = ' , X [ i ] ) ;
r eadl n
end.
Varianta 2: Observnd c la ieire trebuie s avem un
vector ordonat (X) n condiiile problemei, vom defini o
procedur AFISEAZA, care va avea ca parametru
vectorul X. n afar de aceast procedur se mai definesc i
procedurile CONSTRUIESTEVECTORSUMECIFRE,
CITESTEVECTOR, ORDONEAZA,.
Program
ATESTAT_2006_36_ORDONARI_SUMA_CIFRE_VARIANTA_2
;
const
nmax = 100;
TYPE
vect or = ar r ay [ 1. . nmax] of i nt eger ;
var
n : i nt eger ;
x, S : vect or ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
89
function NRCIFRE ( y : i nt eger ) : i nt eger ;
var
m: i nt eger ;
begi n
i f y = 0 t hen
m: = 1
el se
begi n
m: = 0;
whi l e y <> 0 do
begi n
y : = y DI V 10;
m: = m+ 1
end
end;
NRCI FRE : = m
end;
procedure CITESTEVECTOR ( VAR V : vect or ; n :
i nt eger ) ;
VAR
i : i nt eger ;
begi n
f or i : = 1 t o n do
begi n
wr i t e ( ' Dat i X [ ' , i , ' ] = ' ) ;
r eadl n ( V [ i ] )
end;
end;
procedure CONSTRUIESTEVECTORSUMECIFRE ( VAR S :
vect or ; n : i nt eger ) ;
VAR
i , j : i nt eger ; {i ndi ci }
nr : i nt eger ;
x1 : i nt eger ;
S1 : i nt eger ;
V : vect or ;
begi n
f or i : = 1 t o n do
begi n
nr : = NRCI FRE ( x [ i ] ) ;
x1 : = x [ i ] ;
S1 : = 0;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
90
f or j : = 1 t o nr do
begi n
v [ j ] : = x1 MOD 10;
s1 : = S1 + v [ j ] ;
x1 : = x1 DI V 10;
end;
s [ i ] : = s1;
end;
end;
procedure AFISEAZA ( VAR V : vect or ; n :
i nt eger ) ;
var
i : i nt eger ;
begi n
wr i t el n ( ' Vect or ul X or donat dupa suma
ci f r el or ' ) ;
f or i : = 1 t o n do
wr i t el n ( ' X [ ' , i , ' ] = ' , V [ i ] ) ;
end;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
91
procedure ORDONEAZAVECTORSUME ( VAR S : vect or ;
n : i nt eger ) ;
var
t est : i nt eger ;
i : i nt eger ;
aux : i nt eger ;
begi n
r epeat
t est : = 0;
i : = 1;
r epeat
i f S [ i ] > S [ i +1] t hen
begi n
aux : = x [ i ] ;
x [ i ] : = x [ i +1] ;
x [ i +1] : = aux;
aux : = s [ i ] ;
S [ i ] : = S [ i +1] ;
S [ i +1] : = aux;
t est : = 1
end;
i : = i + 1;
unt i l ( i > n- 1)
unt i l ( t est = 0) ;
end;
begin { PROGRAM PRINCIPAL }
r epeat
wr i t e ( ' Dat i n = ' ) ;
r eadl n ( n)
unt i l ( n >= 1) and ( n<= nmax) ;
wr i t el n;
wr i t el n ( ' Dat i vect or ul ' ) ;
CITESTEVECTOR (X, n);
CONSTRUIESTEVECTORSUMECIFRE ( S, n );
ORDONEAZAVECTORSUME ( S, n);
wr i t el n;
AFISEAZA ( X, n );
r eadl n
end.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
92
ATESTAT - 2006 - 37 Fie X un ir de n numere ntregi.
S se scrie o funcie care s afieze irul obinut din irul
dat nlocuind fiecare numr cu oglinditul su.
Rezolvare: Observnd c la ieire trebuie s avem un
vector n condiiile problemei, vom defini o procedur
AFISEAZA, care va avea ca parametru acest vector. Se
mai definete, de asemenea, funcia INVERS, care
inverseaz un numr.
Program ATESTAT_2006_37_NUMERE_INVERSATE ;
uses CRT;
const
nmax = 100;
TYPE
vect or = ar r ay [ 1. . nmax] of i nt eger ;
var
n, i : i nt eger ;
numar , er oar e : i nt eger ;
x, xi nv : vect or ;
si r , i nv : st r i ng;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
93
function INVERS ( s : st r i ng ) : st r i ng;
begi n
i f s = ' ' t hen
I NVERS : = ' '
el se
I NVERS : = s [ LENGTH ( s) ] + I NVERS (
Copy ( s, 1, LENGTH ( s) - 1 ) ) ;
end; { sf ar si t f unct i e }
procedure AFISEAZA ( VAR V : vect or ; n :
i nt eger ) ;
var
i : i nt eger ;
begi n
f or i : = 1 t o n do
wr i t el n ( ' Xi nv [ ' , i , ' ] = ' , V [ i ]
) ;
end;
Begin { PROGRAM PRINCIPAL }
r epeat
wr i t e ( ' Dat i n = ' ) ;
r eadl n ( n)
unt i l ( n >= 1) and ( n <= nmax) ;
wr i t el n;
wr i t el n ( ' Dat i vect or ul ' ) ;
f or i : = 1 t o n do
begi n
wr i t e ( ' Dat i X [ ' , i , ' ] = ' ) ;
r eadl n ( x [ i ] ) ;
STR (x[i], sir); { t r ansf or ma
numar ul x[i] int r - un sir}
inv : = INVERS (sir);
VAL (inv, numar, eroare); { t r ansf or ma
si r ul inv i nt r - un numar }
xinv [i] := numar;
end;
wr i t el n;
wr i t el n ( ' Vect or ul r ezul t at est e: ' ) ;
AFISEAZA (xinv, n);
r eadl n
end.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
94
ATESTAT - 2006 - 38 Fie X un ir de n numere ntregi.
S se scrie o funcie care s afieze irul obinut din irul
dat nlocuind fiecare numr cu suma divizorilor si.
Rezolvare: Pentru c la ieire trebuie s avem un vector n
condiiile problemei, vom defini o procedur AFISEAZA,
care va avea ca parametru acest vector. Mai definim, de
asemenea, funcia SUMADIVIZORI, care determin suma
divizorilor unui ntreg.
Program ATESTAT_2006_38_SUMA_DIVIZORI ;
uses CRT;
const
nmax = 100;
TYPE
vect or = ar r ay [ 1. . nmax] of i nt eger ;
var
n, i : i nt eger ;
x, Sum: vect or ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
95
procedure AFISEAZA ( VAR V : vect or ; n :
i nt eger ) ;
var
i : i nt eger ;
begi n
f or i : = 1 t o n do
wr i t el n ( ' SUM [ ' , i , ' ] = ' , V [ i ]
) ;
end;
function SUMADIVIZORI ( numar : i nt eger ) :
i nt eger ;
var
S, nr di v, di vi zor : i nt eger ;
begi n
nr di v : = 0;
di vi zor : = 1;
S : = 0;
f or di vi zor : = 1 t o numar do
begi n
i f numar MOD di vi zor = 0 t hen
s : = s + di vi zor
end;
SUMADI VI ZORI : = S
end;
Begin { PROGRAM PRINCIPAL }
r epeat
wr i t e ( ' Dat i n = ' ) ;
r eadl n ( n)
unt i l ( n >= 1) and ( n <= nmax) ;
wr i t el n;
wr i t el n ( ' Dat i vect or ul ' ) ;
f or i : = 1 t o n do
begi n
wr i t e ( ' Dat i X [ ' , i , ' ] = ' ) ;
r eadl n ( x [ i ] ) ;
SUM [i] := SUMADIVIZORI ( x[i] );
end;
wr i t el n;
wr i t el n ( ' Vect or ul r ezul t at est e: ' ) ;
AFISEAZA (SUM, n);
r eadl n
end.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
96
ATESTAT - 2006 - 39 Fie A o matrice ptratic cu n x
n numere ntregi. S se scrie o funcie care s determine
liniile pentru care suma elementelor este un numr prim,
afind i valoarea sumei respective.
Rezolvare: Definim funcia VERIFICANUMAR, care
face verificrile cerute de problem pentru fiecare element
al matricei. Funcia are la baz algoritmul de testare a
primalitii unui ntreg.
Program
ATESTAT_2006_39_SUMA_ELEMENTE_LINIE_MATRICE ;
const
nmax = 30;
t ype
mat r i ce = ar r ay [ 1. . nmax, 1. . nmax] of
i nt eger ;
vect or = ar r ay [ 1. . nmax] of i nt eger ;
var
A : mat r i ce;
n, i , j : i nt eger ;
s : vect or ; {vect or suma}
Probleme rezolvate de programare Subiecte propuse la ATESTAT
97
function VERIFICANUMAR ( numar : i nt eger ) :
bool ean;
var
nr di v, di vi zor : i nt eger ;
begi n
nr di v : = 0;
di vi zor : = 1;
f or di vi zor : = 1 t o numar do
begi n
i f numar mod di vi zor = 0 t hen
nr di v : = nr di v + 1
end;
i f nr di v <= 2 t hen
VERI FI CANUMAR : = TRUE
el se
VERI FI CANUMAR : = FALSE
end; {sf ar si t f unct i e}
Begin { PROGRAM PRINCIPAL }
r epeat
wr i t e ( ' Dat i n = ' ) ;
r eadl n ( n)
unt i l ( n >= 1) and ( n <= nmax) ;
wr i t el n ( ' Dat i mat r i cea A' ) ;
f or i : = 1 t o n do
begi n
f or j : = 1 t o n do
begi n
wr i t e ( ' Dat i A [ ' ,
i , ' , ' , j , ' ] = ' ) ;
r eadl n ( A [ i , j ] )
end
end;
wr i t el n ( ' Mat r i cea A est e' ) ;
f or i : = 1 t o n do
begi n
f or j : = 1 t o n do
begi n
wr i t e ( A [ i , j ] , ' ' ) ;
end;
wr i t el n;
end;
wr i t el n;
f or i : = 1 t o n do
begi n
Probleme rezolvate de programare Subiecte propuse la ATESTAT
98
s [ i ] : = 0;
f or j : = 1 t o n do
begi n
s [ i ] : = s [ i ] + A [ i , j ]
end;
i f VERIFICANUMAR ( s [i] ) = true
t hen
wr i t el n ( 'Suma elem. liniei ',
i,' este nr. prim ', S [i] )
end;
r eadl n
end.
ATESTAT - 2006 - 40 Fie A o matrice ptratic cu n x
n numere ntregi. S se scrie o funcie care s afieze
matricea obinut prin interschimbarea unor elemente,
astfel nct suma elementelor de pe diagonala principal
s fie maxim.
Rezolvare: Pentru c la ieire trebuie s avem o matrice
n condiiile problemei, vom defini o procedur
AFISEAZA, care va avea ca parametru aceast matrice.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
99
Se mai definete i funcia MAXLINIE, care determin
numrul maxim dintr-o linie a matricii.
Program
ATESTAT_2006_40_SUMA_ELEMENTE_DIAGONALA_PRINCIPA
LA ;
const
nmax = 30;
t ype
mat r i ce = ar r ay [ 1. . nmax, 1. . nmax] of
i nt eger ;
vect or = ar r ay [ 1. . nmax] of i nt eger ;
var
A : mat r i ce;
nr l i ni e, s, n, i , j : i nt eger ;
function MAXLINIE ( nr l i ni e : i nt eger ) :
i nt eger ;
var
max : i nt eger ;
begi n
max : = a [ nr l i ni e, 1] ;
f or j : = 2 t o n do
begi n
i f max < a [ nr l i ni e, j ] t hen
max : = a [ nr l i ni e, j ]
end;
i f A [ nr l i ni e, nr l i ni e] < max t hen
A [ nr l i ni e, nr l i ni e] : = max;
MAXLI NI E : = max
end;
procedure AFISEAZA (VAR W : matrice; n :
integer);
begi n
f or i : = 1 t o n do
begi n
f or j : = 1 t o n do
begi n
wr i t e ( W [
i,j] , ' ' ) ;
end;
wr i t el n;
end;
wr i t el n;
end;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
100
Begin { PROGRAM PRINCIPAL }
r epeat
wr i t e ( ' Dat i n = ' ) ;
r eadl n ( n)
unt i l ( n >= 1) and ( n <= nmax) ;
wr i t el n ( ' Dat i mat r i cea A' ) ;
f or i : = 1 t o n do
begi n
f or j : = 1 t o n do
begi n
wr i t e ( ' Dat i A [ ' ,
i , ' , ' , j , ' ] = ' ) ;
r eadl n ( A [ i , j ] )
end
end;
wr i t el n ( ' Mat r i cea A, i n f or ma i ni t i al a,
est e' ) ;
AFISEAZA (A, n );
f or i : = 1 t o n do
a [ i , i ] : = MAXLI NI E ( i )
wr i t el n ( 'Matricea A DUPA schimbare
este') ;
AFISEAZA (A, n );
s : = 0;
f or i : = 1 t o n do
s : = s + a [ i , i ] ;
wr i t el n ( ' Suma el ement el or di agonal ei
pr i nci pal e est e = ' , s) ;
r eadl n
end.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
101
ATESTAT - 2006 - 41 Fie A o matrice ptratic cu n x
n numere ntregi. S se scrie o funcie care s afieze
elementele matricei care au proprietatea c sunt formate,
fiecare n parte, din cifre distincte. Stabilii apoi dac
elementele de pe diagonala principal formeaz o
secven palindromic: a
11
= a
n n
, a
2 2
= a
n - 1 n - 1
,
Rezolvare:
Vom defini o procedur
AFISEAZAELEMENTECUCIFREDISTINCTE, n
interiorul creia se fac testele, n condiiile problemei i
care afieaz elementele matricii care au proprietatea
cerut. Se mai definete i funcia VERIFICA, pentru
testarea fiecrui element al matricii. Funcia VERIFICA
este apelat n interiorul procedurii AFISEAZA. La rndul
ei, funcia VERIFICA face apel la funcia NRCIFRE, care
numr cifrele unui ntreg.
Program
ATESTAT_2006_41_SECVENTA_PALINDROMICA_PE_DIAGONA
LA_PRINCIPALA ;
t ype
mat r i ce = ar r ay [ 1. . 100, 1. . 100] of i nt eger ;
vect or = ar r ay [ 1. . 100] of i nt eger ;
var
p, q, t , x, x1, n, i , j : i nt eger ;
z, di agonal a, y : vect or ;
k : BOOLEAN;
A : mat r i ce;
function NRCIFRE ( y : i nt eger ) : i nt eger ;
var
m: i nt eger ;
begi n
i f y = 0 t hen
m: = 1
el se
begi n
m: = 0;
whi l e y <> 0 do
Probleme rezolvate de programare Subiecte propuse la ATESTAT
102
begi n
y : = y DI V 10;
m: = m+ 1
end
end;
NRCI FRE : = m
end;
function VERIFICA ( numar : i nt eger ) : bool ean;
begi n
x1 : = numar ;
f or p : = 1 t o NRCI FRE ( numar ) do
begi n
y [ p ] : = x1 MOD 10; {vect or
cu ci f r el e l ui "numar "}
x1 : = x1 DI V 10;
end;
k : = FALSE; {FALSE - pr esupun ca
"numar " nu ar e el ement e egal e}
f or p : = 1 t o NRCIFRE (numar) - 1 do
f or q: = p + 1 t o NRCIFRE
(numar) do
begi n
i f y [ p] = y [ q]
t hen
k : = TRUE {2
el ement e egal e}
end;
VERI FI CA : = k;
end;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
103
procedure AFISEAZAELEMENTECUCIFREDISTINCTE ;
begi n
t : = 0; {cont or pt . di st i nct e}
f or i : = 1 t o n do
begi n
f or j : = 1 t o n do
begi n
wr i t el n ( ' a[ ' , i , ' , ' , j , ' ]
= ' , a[ i , j ] ) ;
{ wr i t el n ( ' nr ci f r e = ' ,
NRCI FRE ( a[ i , j ] ) ) ; }
wr i t el n ( ' VERI FI CA = ' ,
VERI FI CA ( a[ i , j ] ) ) ;
i f VERIFICA ( a[i,j]) =
FALSE t hen
begi n
t : = t + 1;
writeln ('t =
',t);
z [t] := a [i,j]
end;
end;
end;
f or i : = 1 t o t do
begi n
writeln ('z [', i,'] = ', z[i] );
end;
end;
Begin { PROGRAM PRINCIPAL }
r epeat
wr i t e ( ' Dat i n = ' ) ; r eadl n ( n)
unt i l ( n >= 1) and ( n <= nmax) ;
wr i t el n ( ' Dat i mat r i cea A' ) ;
f or i : = 1 t o n do
f or j : = 1 t o n do
begi n
wr i t e ( ' Dat i A [ ' ,
i , ' , ' , j , ' ] = ' ) ;
r eadl n ( A [ i , j ] )
end;
AFISEAZAELEMENTECUCIFREDISTINCTE ;
{***********************************************
*****************************}
Probleme rezolvate de programare Subiecte propuse la ATESTAT
104
{ partea a 2-a a problemei }
f or i : = 1 t o n do {t r ansf er di agonal a
mat r i cei i n vect or ul "di agonal a" }
di agonal a [ i ] : = a [ i , i ] ;
K : = TRUE; {pr esupun ca exi st a SI METRI E pe
di agonal a pr i nci pal a }
f or i : = 1 t o n DI V 2 do
begi n
i f di agonal a [ i ] <> di agonal a [ n -
i + 1] t hen
k : = FALSE
end;
i f K = TRUE t hen
wr i t el n ( ' El ement el e di agonal ei f or meaza
o secvent a PALI NDROMI CA' )
el se
wr i t el n ( ' El ement el e di agonal ei NU
f or meaza o secvent a PALI NDROMI CA' ) ;
wr i t el n ( ' Mat r i cea A est e' ) ;
f or i : = 1 t o n do
begi n
f or j : = 1 t o n do
begi n
wr i t e ( A [ i , j ] , ' ' ) ;
end;
wr i t el n;
end;
wr i t el n;
r eadl n
end.

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