Sunteți pe pagina 1din 29

Probleme rezolvate de programare Subiecte propuse la ATESTAT

2004
Pentru anul 2004, am inclus n lucrarea de fa doar problemele
noi, care nu au fost propuse i n 2003 la examenul de atestat.
ATESTAT - 2004 - 4 - Se citesc pe rnd numere naturale pn
la introducerea lui 55. Stabilii cte cifre de zero i cte cifre
de 1 sunt necesare pentru reprezentarea n baza 2 a tuturor
numerelor anterioare.
Rezolvare:
Din enun nu rezult, n mod necesar, c numerele naturale
introduse sunt consecutive. Prin urmare, se pot introduce
numere naturale la ntmplare, numrul acestor numere
nefiind precizat. Introducerea se va ncheia la ntlnirea
numrului 55. O variant simplificat a problemei const n
introducerea tuturor numerelor naturale ntre 1 i 55. Vom
lua n consideraie ambele situaii.
Pentru transformarea numrului ZECIMAL n numr
BINAR, mprim numrul ZECIMAL la 2 i reinem
resturile obinute la mprire ntr-un vector de resturi R.
Numrul BINAR echivalent se obine citind vectorul R de la
sfrit ctre nceput. Pe noi ne intereseaz doar cifrele
numrului BINAR, deci este suficient s numrm cifrele de
ZERO i de UNU din vectorul R asociat numrului
BINAR.
Definim o procedur TRANSFORMA, care convertete
fiecare numr natural (zecimal) introdus din n numr binar.
Procedura va avea ca parametru de ieire vectorul de resturi
R, dar i numrul de cifre n ale numrului binar echivalent,
adic numrul de elemente din R.
n procedur, folosim o variabil auxZECIMAL, ale crei
valori vor evolua ntre NRZECIMAL i 1, pe msur ce
auxZECIMAL va fi mprit la 2. Folosind
auxZECIMAL, vom conserva (vom pstra neschimbat)
valoarea lui NRZECIMAL.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
4
Folosim doi contori zero i unu, care numr cifrele de
0 i de 1 din numrul binar obinut.
Program ATESTAT_2004_4_NUMARA_CIFRE_BINARE;
uses CRT;
Const
nmax = 100;
TYPE
vect or = ar r ay [ 1. . 100] of i nt eger ;
VAR
NRZECI MAL, auxZECI MAL, zer o, unu, n, i , r est :
i nt eger ;
R : vect or ; {vect or de r est ur i }
procedure TRANSFORMA (NRZECIMAL : integer; VAR R :
vector; VAR n : integer);
begi n
i f NRZECI MAL = 0 t hen
begi n
auxZECI MAL : = 0;
i : =1;
R[ i ] : = 0
end
el se
begi n
i : = 0;
auxZECI MAL : = NRZECI MAL;
whi l e auxZECI MAL <> 1 do
begi n
r est : = auxZECI MAL MOD 2;
i : = i + 1;
R [ i ] : = r est ;
auxZECI MAL : = auxZECI MAL
DI V 2;
end;
i : = i + 1;
R [ i ] : = auxZECI MAL;
end;
n : = i ;
end; {sf ar si t pr ocedur a}
Probleme rezolvate de programare Subiecte propuse la ATESTAT
5
Programul principal se va scrie astfel:
Varianta A Dac numerele naturale se introduc ntr-o ordine
oarecare, pn la introducerea lui 55, atunci vom folosi o
structur REPEAT:
Begin { PROGRAM PRINCIPAL }
cl r scr ;
zer o : = 0; {i ni t i al i zar e cont or i car e numar a
ci f r el e de zer o si de unu}
unu : = 0;
wr i t el n;
REPEAT
wr i t e ( ' Dat i ur mat or ul numar ul zeci mal = ' ) ;
r eadl n ( NRZECI MAL) ;
TRANSFORMA (NRZECIMAL, R, n);
wr i t el n;
wr i t e ( ' Numar ul bi nar echi val ent l ui ' ,
NRZECI MAL, ' est e ' ) ;
f or i : = n DOWNTO 1 do
wr i t e ( R[ i ] ) ;
wr i t el n;
wr i t el n;
f or i : = 1 t o n do
begi n
i f R [ i ] = 0 t hen
zer o : = zer o + 1
el se
unu : = unu + 1
end;
UNTI L ( NRZECI MAL = 55) ;
wr i t el n;
wr i t el n;
wr i t el n ( ' Tot al ci f r e de ZERO = ' , zer o) ;
wr i t el n;
wr i t el n ( ' Tot al ci f r e de UNU = ' , unu) ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
6
r eadl n
end.
Varianta B Dac numerele naturale introduse sunt cuprinse
ntre 1 i 55, vom folosi o structur FOR:
begi n { PROGRAM PRINCIPAL }
cl r scr ;
zer o : = 0; {i ni t i al i zar e cont or i car e numar a
ci f r el e de zer o si de unu}
unu : = 0;
wr i t el n;
FOR NRZECI MAL : = 1 t o 55 do
begi n
TRANSFORMA (NRZECIMAL, R, n);
wr i t el n;
wr i t e ( ' Numar ul bi nar echi val ent l ui ' ,
NRZECI MAL, ' est e ' ) ;
f or i : = n DOWNTO 1 do
wr i t e ( R[ i ] ) ;
wr i t el n;
wr i t el n;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
7
f or i : = 1 t o n do
begi n
i f R [ i ] = 0 t hen
zer o : = zer o + 1
el se
unu : = unu + 1
end;
end; {sf ar si t FOR ext er i or }
wr i t el n;
wr i t el n;
wr i t el n ( ' Tot al ci f r e de ZERO = ' , zer o) ;
wr i t el n;
wr i t el n ( ' Tot al ci f r e de UNU = ' , unu) ;
r eadl n
end.
ATESTAT - 2004 - 17 - S se aranjeze n regi pe o tabl de ah
de dimesiune n x n astfel nct s nu se atace.
Rezolvare: Aceast problem este asemntoare cu
problema celor n regine, pe care o vom adapta la cerinele de
mai sus.
Pentru ca doi regi s nu se atace, ei trebuie s NU fie
situai:
pe aceeai linie, unul lng altul,
pe aceeai coloan, unul lng altul sau
pe aceeai diagonal, unul lng altul.
Pe fiecare linie vom plasa cte un rege. Pentru ca poziia
regilor s fie complet determinat, este suficient s reinem, pentru
fiecare rege, coloana n care este plasat, ntr-un vector soluie f, de
dimensiune n, unde f [i] reprezint coloana n care este plasat
regele de pe linia i. Generarea matricilor n condiiile problemei
se va face apelnd la un algoritm backtracking.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
8
Observaii:
Notm cu x, respectiv i o linie oarecare i cu f [x],
respectiv f [i] coloana pe care se gsete regele de pe linia x,
respectiv linia i.
Condiiile interne:
a). f [x] =1, 2, ..., n, pentru oricare x =1, 2, ..., n
b). Doi regi nu pot fi plasai pe aceeai coloan se va exprima
analitic astfel:
f [x] f [y] pentru orice x y, cu x, y = 1, 2,...,n.
c). Celelalte condiii interne sunt inserate i comentate direct n
program.
Definim o procedur AFIARE astfel:
n momentul apelrii procedurii, este clar c s-a gsit o
soluie pe care o numrm scriind:
Nrsol := Nrsol + 1
i apoi afim Nrsol.
Vom parcurge toate coloanele de la 1 la n. Pentru aceasta
avem nevoie de un contor poziional col care va lua valori de la 1
la n.
n procedur, col este o coloan curent, iar f [lin] este
tot o coloan, i anume coloana pe care se gsete regele de pe
linia lin.
Procedura va tipri " * " dac pe coloana curent col exist
un rege, adic atunci cnd col = f [lin], i va tipri "o"
dac aceast condiie nu este satisfcut.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
9
Program ATESTAT_2004_17_ASEZARE_REGI;
uses cr t ;
const
nr maxr egi = 8;
t ype
vect or sol ut i e = ar r ay [ 0. . nr maxr egi ] of
0. . nr maxr egi ;
var
f : vect or sol ut i e;
n, x, i : 0 . . nr maxr egi ;
ok : bool ean;
nr sol : wor d;
cond1, cond2, cond3, cond4, COND : bool ean;
procedure AFISARE;
var
i , j : 0 . . nr maxr egi ; {i = l i ni e, j =
col oana, f [ i ] = col oana }
begi n
nr sol : = nr sol + 1;
wr i t el n;
wr i t el n ( ' Sol ut i a nr . ' , nr sol ) ;
f or i : = 1 t o n do
begi n
f or j : = 1 t o n do
begi n
i f j = f [ i ] t hen
wr i t e ( ' * ' )
el se
wr i t e ( ' o ' )
end;
wr i t el n;
end;
wr i t el n;
r eadl n
end; { sf ar si t pr ocedur a }
Begin { PROGRAM PRINCIPAL }
cl r scr ;
wr i t e ( ' I nt r oducet i numar ul de pat r at el e n =
' ) ;
r eadl n ( n) ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
10
nrsol:=0;
x : = 1; { vi r f ul st i vei } { x = l i ni e }
f [ x] : = 0;
while x > 0 do { cat t i mp st i va nu est e vi da
}
begi n
while f [x] < n do { cat t i mp exi st a
val or i di sponi bi l e }
begi n
f [ x] : = f [ x] + 1;
ok : = t r ue;
f or i : = 1 t o x do
begi n
cond1 : = ( f [ i ] = f [ x] ) and
( ABS( x- i ) = 1) ;
{Daca sunt pe
aceeasi col oana, f i =f x}
{dar pe l i ni i
veci ne, adi ca x- i =1}
{ cond1 : = ( i > 1) AND ( f [ i - 1] =
f [ i ] ) ; }
{Daca sunt pe
aceeasi col oana, f [ i - 1] =f [ i ] }
{dar pe l i ni i
veci ne, adi ca pe i si i - 1}
cond2 : = ( ABS ( i - x) = ABS ( f [ i ] -
f [ x] ) )
and ( ABS ( i - x) =1 ) ;
{Daca sunt pe
di agonal a, i - x=f i - f x}
{l a di st ant a de 1
casut a, i - x=1}
{ cond2 : = ABS ( f [ i ] - f [ i - 1] ) =
1 ; }
{Daca sunt pe
di agonal a, }
Probleme rezolvate de programare Subiecte propuse la ATESTAT
11
{l a di st ant a de 1
casut a }
{ cond3 : = ABS ( f [ x] - f [ x- 1] ) =
1 ; }
{sau ( ( ABS ( f [ i ] - f [ x] ) =
1) and ( x=i ) ) }
COND := cond1 OR cond2 { OR
cond3 } ;
i f COND t hen
begi n
ok : = f al se;
end
end; {f or }
i f ok = t r ue t hen { Daca val oar ea
est e val i da }
begi n
i f x = n t hen { Daca st i va
est e pl i na }
AFISARE
el se
begi n
x := x + 1; { PAS
INAINTE }
f [ x] : = 0
end;
end;
end; { sf ar si t WHI LE i nt er i or }
x := x - 1 { PAS
INAPOI }
end; { sf ar si t WHI LE ext er i or }
r eadl n
end.
ATESTAT - 2004 - 18 - Se d un fiier text care conine pe
prima linie numere naturale. S se afieze numrul valorilor
din fiier i valoarea maxim a acestora.
Rezolvare:
Probleme rezolvate de programare Subiecte propuse la ATESTAT
12
n ipoteza c fiierul text nu exist deja pe disc, vom crea
acest fiier cu acelai program care face i celelalte
determinri cerute de enun. Vom introduce n fiierul text
n numere naturale, folosind o bucl FOR, astfel:
Dup citirea de la tastatur a unui numr x, l vom
converti ntr-un ir, prin apelarea procedurii
STR.
Dup fiecare astfel de ir, vom lsa un singur spaiu
liber (blank). n acest fel, se va crea o linie n
fiierul text. Evident, linie este tot un i de
caractere.
Celelalte etape sunt comentate direct n program.
Program
ATESTAT_2004_18_FISIER_TEXT_CU_NUMERE_NATURALE;
const
nmax = 100;
t ype
vect or = ar r ay [ 1. . nmax] of i nt eger ;
var
f : t ext ;
l i ni e, si r : st r i ng; {l i ni e = o l i ni e di n
f i si er ul t ext }
{si r = si r ul i n car e se
t r ansf or ma numar ul x cu STR }
poz : i nt eger ; {pozi t i e i n si r ul de car act er e
"l i ni e"}
ER : i nt eger ; {var i abi l a EROARE = par amet r u al
pr ocedur i i VAL}
c : char ;
max, n, i , x : i nt eger ;
V : vect or ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
13
Begin { PROGRAM PRINCIPAL }
assi gn ( f , ' c: \ nat ur al e. t xt ' ) ;
r ewr i t e ( f ) ;
n : = 10;
f or i : = 1 t o n do
begi n
wr i t e ( ' Dat i un nou x = ' ) ;
r eadl n ( x) ;
STR (x, sir); {pr ocedur a STR t r ansf or ma
numar ul x i n si r }
wr i t e ( f , si r + ' ' ) ; {se l asa un spat i u
dupa f i ecar e si r }
end;
wr i t el n ( f ) ; {i nchei e l i ni a i n f i si er ul f }
wr i t el n;
wr i t el n ( ' Cont i nut ul f i si er ul ui f est e: ' ) ;
RESET ( f ) ; {pr egat i mf i si er ul f pent r u ci t i r e}
whi l e not EOF ( f ) do
begi n
r ead ( f , c) ; {ci t i m f i si er ul f
car act er cu car act er }
wr i t e ( c) ; {si af i sam car act er el e pe
un si ngur r and}
end;
wr i t el n; {l i ni e de spat i er e}
{recuperarea - extragerea numerelor din fisierul
text}
RESET ( f ) ; {pr egat i mf i si er ul f pent r u ci t i r e}
READ ( f , l i ni e) ; {ci t i m di n f o l i ni e = si r
de car act er e}
{l i ni a cont i ne numer e ur mat e de
cat e un spat i u}
wr i t el n ( ' Cont i nut l i ni e = ' , l i ni e) ; {opt i onal ,
af i saml i ni a ci t i t a}
wr i t el n;
i : = 0; {i ndex i n vect or ul V, i n car e vom
depune numer el e ci t i t e}
{di n f i si er , DUPA conver t i r ea l or di n
si r ur i i n numer e}
si r : = ' ' ; {i ni t i al i zar e si r cu si r ul vi d}
Probleme rezolvate de programare Subiecte propuse la ATESTAT
14
poz : = 1; {i ncepand cu pr i ma pozi t i e di n l i ni a
ci t i t a di n f i si er }
whi l e poz <= LENGTH ( l i ni e) do {cat t i mp l i ni a
nu a f ost epui zat a}
begi n
I F l i ni e [ poz] <> ' ' t hen {daca i n
pozi t i a poz nu est e un blank}
sir := sir + linie [poz] {r econst i t ui m
un numar di n ci f r el e sal e}
{f ol osi nd un
sir i n car e depunem}
{pr i n
concatenare ci f r el e numar ul ui }
el se {daca s- a aj uns l a un bl ank,
i nseamna ca s- au par cur s }
{dej a ci f r el e unui numar }
begi n
i : = i + 1; { numar am si r ul car e
cont i ne numar ul }
VAL ( sir, x, ER) ; {conver t i m sirul
i n numar ul x}
V [ i ] : = x; {pr el uam numar ul
x i n vect or ul V}
wr i t el n ( ' V[ ' , i , ' ] = ' , V[ i ] ) ;
{opt i onal , af i samV[ i ] }
si r : = ' ' ; {r ei ni t i al i zam sir
cu si r ul vi d, }
{i n event ual i t at ea}
{ca i nca nu s- a
epui zat f i si er ul si mai sunt }
{numer e de ext r as di n
f i si er }
end; {sf ar si t ELSE}
poz := poz + 1 {t r ecem l a
ur mat oar ea pozi t i e di n "l i ni e"}
end; {sf ar si t WHI LE}
n := i; {r et i nem i n "n" ul t i ma val oar e a
cont or ul ui "i " }
{deci n = numar ul t ot al de numer e
ext r ase di n "l i ni e"}
writeln (Fisierul contine n = , n, numere
naturale);
Probleme rezolvate de programare Subiecte propuse la ATESTAT
15
wr i t el n;
wr i t el n ( ' Vect or ul V est e: ' ) ; {opt i onal ,
af i samvect or ul }
f or i : = 1 t o n do
begi n
wr i t el n ( ' V[ ' , i , ' ] = ' , v[ i ] ) ;
end;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
16
wr i t el n;
{det er mi nam numar ul maxi m di n vect or , deci
di n f i si er }
max : = V[ 1] ;
f or i : = 2 t o n do
begi n
i f max < v[ i ] t hen
max : = v[ i ]
end;
wr i t el n;
writeln ('Numarul maxim din fisier este MAX =
', max);
r eadl n
end.
ATESTAT - 2004 - 19 - S se scrie un program recursiv care
calculeaz maximul elementelor unui vector cu n componente.
Rezolvare:
Definim o funcie recursiv denumit MAXIM, cu care vom
determina maximul ntr-un interval din vector cuprins ntre
dou valori notate cu ncep, respectiv sf. Funcia va fi
apelat iniial pentru ncep = 1 i sf = n (poziiile extreme
din vectorul x).
Dac sf ncep <> 1, se determina mijlocul intervalului sf
ncep i se apeleaz funcia MAXIM pentru jumtatea
stng, respectiv dreapt a intervalului al crui mijloc a fost
calculat. Se determin, astfel, dou maxime, notate m1 i
m2, pentru cele dou subintervale. n final, va fi validat cea
mai mare dintre valorile determinate.
Program
ATESTAT_2004_19_Determinare_MAXIM_RECURSIV_DEI;
uses CRT;
t ype
vect or = ar r ay [ 1. . 10] of i nt eger ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
17
VAR
x : vect or ;
MAX, n, i : i nt eger ;
function MAXIM ( i ncep, sf : i nt eger ; x : vect or )
: i nt eger ;
var
m, m1, m2 : i nt eger ;
begi n
I F sf - i ncep = 1 t hen
begi n
i f x [ i ncep] > x [ sf ] t hen
MAXI M : = x [ i ncep]
el se
MAXI M : = x [ sf ]
end
ELSE
begi n
m: = ( i ncep + sf ) DI V 2;
m1 : = MAXI M ( i ncep, m, x) ;
m2 : = MAXI M ( m, sf , x ) ;
i f m1 > m2 t hen
MAXI M : = m1
el se
MAXI M : = m2
end;
end; { sf . f unct i e }
Probleme rezolvate de programare Subiecte propuse la ATESTAT
18
Begin { PROGRAM PRINCIPAL }
CLRSCR;
wr i t e ( ' n = ' ) ; r eadl n ( n) ;
f or i : = 1 t o n do
begi n
wr i t e ( ' x [ ' , i , ' ] = ' ) ;
r eadl n ( x[ i ] ) ;
end;
MAX : = MAXI M ( 1, n, x) ;
wr i t el n;
wr i t el n ( ' MAX = ' , MAX) ;
r eadl n
end.
ATESTAT - 2004 - 21 - S se afle valoarea unui polinom
ntr-un punct.
Rezolvare:
Se definesc funcii i proceduri ale cror nume sugereaz i
scopul.
Program ATESTAT_2004_21_Polinom_1;
uses
Cr t ;
const
GMaxPol = 20; {Gr adul MAXi mal unui POLi nom}
t ype
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 ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
19
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}
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 ;
{r ot unj est e un 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}
Probleme rezolvate de programare Subiecte propuse la ATESTAT
20
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) ;
Del ay( 200) ;
NoSound; {Beep}
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 ! ' ) ;
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) ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
21
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 de dupa numer el e
i nt r egi }
S : = Copy ( S, L, R- L+1) ;
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 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, ' )
: ' ) ;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
22
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
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}
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}
Begin { PROGRAM PRINCIPAL }
r epeat
CLRSCR; {st er ge ecr anul si buf f er ul t ast at ur i i }
Probleme rezolvate de programare Subiecte propuse la ATESTAT
23
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 }
wr i t el n;
Wr i t eLn ( ' PROGRAM TEST' ) ;
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 el n; 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 eLn; wr i t el n; Wr i t eLn;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
24
Wr i t e ( ' I nt r oducet i opt i unea dvs : ' ) ;
{ci t est e OPTI UNEA sol i ci t at a}
r epeat
unt i l KeyPressed;
OPTI UNE : = 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 OPTI UNE 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 ;
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;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
25
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 . . .
' ) ;
r epeat
unt i l KeyPr essed;
Wi ndow ( 1, 1, 80, 25) ;
end; {i f }
unt i l Or d ( OPTI UNE) = 27;
end. {pr ogr am}
ATESTAT - 2004 - 22 - S se sorteze cresctor un ir de n
numere ntregi memorat ntr-un vector v, folosind metoda
sortrii rapide (quick-sort).
Rezolvare:
Am notat cu inf, respectiv cu sup, o poziie de nceput,
respectiv de sfrit, din vectorul de sortat.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
26
Program ATESTAT_2004_22_QUICK_SORT;
uses CRT;
CONST
nmax = 50;
TYPE
vect or = ar r ay [ 1. . 50] of r eal ;
VAR
x : vect or ; {x = var i abi l a gl obal a}
i , n : i nt eger ;
procedure QUICK ( i nf , sup : i nt eger ) ;
VAR
i , j : i nt eger ;
aux : r eal ;
b : bool ean;
begi n
i f i nf < sup t hen
begi n
i : = i nf ;
j : = sup;
b : = TRUE;
r epeat
i f x[ i ] > x[ j ] t hen
begi n
aux : = x[ i ] ;
x[ i ] : = x[ j ] ;
x[ j ] : = aux;
b : = not b;
end;
i f b = TRUE t hen
j : = j - 1
el se
i : = i + 1;
unt i l i = j ;
QUICK ( inf, i - 1);
QUICK ( i + 1, sup);
end;
end;
Begin { PROGRAM PRINCIPAL }
CLRSCR;
r epeat
wr i t e ( ' n = ' ) ; r eadl n ( n)
unt i l ( n >= 1) and ( n <= nmax) ;
wr i t el n;
Probleme rezolvate de programare Subiecte propuse la ATESTAT
27
wr i t e ( ' I nt r oducet i el ement el e vect or ul ui ' ) ;
wr i t el n;
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;
wr i t el n ( ' Si r ul i ni t i al : ' ) ;
wr i t el n;
f or i : =1 t o n do
wr i t e ( x[ i ] , ' ' ) ;
QUICK (1, n);
wr i t el n;
wr i t el n ( ' Si r ul sor t at : ' ) ;
wr i t el n;
f or i : =1 t o n do
wr i t e ( x[ i ] , ' ' ) ;
r eadl n;
end.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
28
ATESTAT - 2004 - 29 - S se realizeze un program de
parcurgere a unui arbore binar.
Rezolvare:
S presupunem c arborele binar bina are configuraia din figura
de mai jos.
Observaii:
Nodurile terminale
sunt 4, 5, 6, 7 (aceste
noduri nu mai au
descendeni sau fii). Prin
urmare, subarborii stng
i drept ai nodurilor
terminale vor fi
reprezentai prin NIL.
Convenim ca, la introducerea datelor, s introducem
valoarea 0 (zero) pentru aceti subarbori, pentru a marca
faptul c nodurile terminale 4, 5, 6, 7 nu mai au
descendeni.
Pentru crearea arborelui, putem alege oricare dintre
variante: PREordine, Inordine, POSTordine.
Convenim s crem arborele din figura de mai sus
introducnd nodurile n PREordine (Rdcin,
subarbore STNG, subarbore DREPT). n acest caz,
nodurile se vor introduce astfel:
1, 2, 4, 0, 0, 5, 0, 0, 3, 6, 0, 0, 7, 0, 0.
La parcurgerea arborelui n PREordine, succesiunea nodurilor
vizitate va fi:
1, 2, 4, 5, 3, 6, 7.
La parcurgerea arborelui n INordine, succesiunea nodurilor
vizitate va fi:
4, 2, 5, 1, 6, 3, 7.
1
2
4 5
3
6 7
Probleme rezolvate de programare Subiecte propuse la ATESTAT
29
La parcurgerea arborelui n POSTordine, succesiunea
nodurilor vizitate va fi:
4, 5, 2, 6, 7, 3, 1.
Program ATESTAT_2004_29_PARCURGERE_ARBORE_BINAR;
uses CRT;
TYPE
ARBORE = ^NOD;
NOD = Recor d
Data : i nt eger ; {numar ul
nodul ui , car e coi nci de, }
{pent r u
si mpl i f i car e, cu dat a
ut i l a}
stg, dr : ARBORE
END;
VAR
Radacina : ARBORE;
procedure CreareArb (VAR R : ARBORE);
VAR
n : i nt eger ; {n = numar ul nodul ui }
BEGI N
wr i t e ( ' Dat i numar ul nodul ui , n = ' ) ;
r eadl n ( n) ;
I F n = 0 t hen {ur meaza subar bor e VI D }
R : = NI L
ELSE
begi n
NEW( R ) ;
R^. Dat a : = n;
Cr ear eAr b ( R^. st g) ;
Cr ear eAr b ( R^. dr )
end;
end; {sf ar si t pr ocedur a Cr ear eAr b}
Probleme rezolvate de programare Subiecte propuse la ATESTAT
30
procedure PREordine (R : arbore);
begi n
I F R <> NI L t hen
begi n
wr i t e ( ' ' , R^. Dat a, ' ' ) ;
PREor di ne ( R^. st g) ;
PREor di ne ( R^. dr )
end
end;
procedure INordine (R : arbore);
begi n
I F R <> NI L t hen
begi n
I Nor di ne ( R^. st g) ;
wr i t e ( ' ' , R^. Dat a, ' ' ) ;
I Nor di ne ( R^. dr )
end
end;
procedure POSTordine (R : arbore);
begi n
I F R <> NI L t hen
begi n
POSTor di ne ( R^. st g) ;
POSTor di ne ( R^. dr ) ;
wr i t e ( ' ' , R^. Dat a, ' ' ) ;
end
end;
Begin { PROGRAM PRINCIPAL }
CLRSCR;
wr i t el n ( ' I nf or mat i a nodur i l or Ar bor el ui
par cur s i n PREor di ne: ' ) ;
CreareArb ( Radacina );
wr i t el n;
wr i t el n;
wr i t el n ( ' Ar bor el e par cur s i n PREor di ne: ' ) ;
PREordine (Radacina);
Probleme rezolvate de programare Subiecte propuse la ATESTAT
31
wr i t el n;
wr i t el n;
wr i t el n ( ' Ar bor el e par cur s i n I Nor di ne: ' ) ;
INordine (Radacina);
wr i t el n;
wr i t el n;
wr i t el n ( ' Ar bor el e par cur s i n POSTor di ne: ' ) ;
POSTordine (Radacina);
wr i t el n;
r eadl n
end.

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