Sunteți pe pagina 1din 14

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, vomconserva (vom
pstra neschimbat) valoarea lui NRZECIMAL.
Folosimdoi 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
4
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) ;
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
5
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 algoritmbacktracking.
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
6
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) ;
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, }
{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 }
Probleme rezolvate de programare Subiecte propuse la ATESTAT
7
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:
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
8
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 mf i si er ul f car act er cu car act er }
wr i t e ( c) ; {si af i samcar 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 mdi 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 vomdepune 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}
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 mun 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 amsi r ul car e cont i ne numar ul }
VAL ( sir, x, ER) ; {conver t i msirul i n numar ul x}
V [ i ] : = x; {pr el uamnumar 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 zamsir 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 eceml 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 nemi 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);
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
9
wr i t el n;
{det er mi namnumar ul maxi mdi 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 programrecursiv care calculeaz maximul elementelor unui
vector cu n componente.
Rezolvare:
Definim o funcie recursiv denumit MAXIM, cu care vomdetermina 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 ;
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
10
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 ;
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
11
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) ;
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
12
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 }
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
13
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 nompent r u un X dat ' ) ;
Ci t est ePol ( ' Se cal cul eaza val oar ea pol i nomul ui ' , POL1) ;
Wr i t eLn;
Wr i t e ( ' pent r u X = : ' ) ;
ReadLn( X) ;
X : = RoundR ( X, 5) ; {cel mul t 5 zeci mal e}
VALOARE : = ValPolinom ( POL1, X) ;
Cl r Scr ;
AfiseazaPol ( ' Se cal cul eaza val oar ea pol i nomul ui ' , POL1) ;
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 . . . ' ) ;
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:
Amnotat cu inf, respectiv cu sup, o poziie de nceput, respectiv de sfrit, din vectorul de sortat.
Probleme rezolvate de programare Subiecte propuse la ATESTAT
14
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;
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
15
ATESTAT - 2004 - 29 - S se realizeze un programde 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. Convenimca, 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.
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}
1
2
4 5
3
6 7
Probleme rezolvate de programare Subiecte propuse la ATESTAT
16
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);
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