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 ]
Probleme rezolvate de programare Subiecte propuse la ATESTAT
4
end;
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] ;
j = contor care numr elementele ce nu aparin [a, b] .
Probleme rezolvate de programare Subiecte propuse la ATESTAT
8
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
Probleme rezolvate de programare Subiecte propuse la ATESTAT
10
ordonarea de la poziia k la n. Ambele proceduri se bazeaz
pe algoritmul bubble sort.
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
Probleme rezolvate de programare Subiecte propuse la ATESTAT
12
z [ i - k] : = x [ i ]
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_LUNG
IME_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 subsiruri
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 m
subsi 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
begi n
i f c = y [ i ] t hen
Probleme rezolvate de programare Subiecte propuse la ATESTAT
24
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.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
30
Program ATESTAT_2006_13_CMMDC;
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 ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
32
end;
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;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
34
wr i t el n ( ' Mat r i cea B est e: ' ) ;
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_PRINCIP
ALA ;
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 uamel 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
wr i t e ( A[i, 1], ' ' ) ; {el ement el e de
pe prima coloana}
Probleme rezolvate de programare Subiecte propuse la ATESTAT
44
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_DIAGONALEI
_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_SECUND
ARA ;
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
numar : = numar DI V 10;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
48
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;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
50
end;
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
end;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
52
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_VARI
ANTA_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 = ' ) ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
62
r eadl n ( b) ;
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_ALE_
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, inclusiv
Probleme rezolvate de programare Subiecte propuse la ATESTAT
66
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 nom
pent 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 ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
72
AfiseazaPol ( ' Se cal cul eaza val oar ea
pol i nomul ui ' , POL1) ;
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
Probleme rezolvate de programare Subiecte propuse la ATESTAT
80
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 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 }
Probleme rezolvate de programare Subiecte propuse la ATESTAT
82
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 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;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
84
procedure 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;
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 ] ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
90
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;
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_PRINCIPALA
;
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_DIAGONALA_
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