Sunteți pe pagina 1din 114

-i

-r-«

.....,
! Dana Lica Mircea Pasol
r"'

II
u
'"l
:J
r-,
INFORMATICA
. i
, I
1_'

rl
I J
FUNDAMENTELEPROGRAMARn
~
Edipe revizuita ~i adaugita
,: ,I
Culegere de probleme - Pascal si C/C++
1 pentru clasa a IX-a
,
L .....i

1
l
l I

n
U
r-,
1 i
lJ

n
[] Editura L&S SOFT

/ 'I
Copyright 2012 e L&S SOFT
Cuprins
Toate drepturile asupra aeestei luerliri apartin editurii L&S SOFf.
Reprodueerea integrala sau partiala a textului dinaeeastii carte este posibila
doar cu acordnl in serisal editurii L&S SOFf. Capitoluli
Pro'i!Yamarea structuratii si instructiuni in limbajul de
pro'i!Yamare Pascali C I C++
Deserierea CIP a BiblioteeiiNationale a Romdniel
LICA,DANA
1.1 Structura liniara si alternativa -- Instructiunea de atribnire si conditionals ~
Informatica: fundamentele programarii : culegere de 1.1.1 Teste en -alegere multiplii ~i duals...__.. .,1
probleme pentru clasa a IX-a I Dana Liea, Mireea Pasoi. _ 1.1.2 Teste cn itemi semiobiectivi.. .. .ll1
c
Bucuresti : Editura.L&S Soft, 2006 1.1.3 Probleme rezolvate .. .7.7.
ISBN 973-86022-9-7 1.1.4 ProbIerne propnse . .c .. .~ .l.Z
I. Pasoi, Mireea _ 1.2 Structuri repetitive -- instructiuni repetitive.. .. .. .Jl.
1.2.1 Teste en alegere multipla ~i duala, .. ._,u
1.2.2 Teste cn itemi semiobiectivi, .. .. .:Y
1.2.3 Prob Ierne rezo ivate .. 19-
1.2.4 Prob Ierne propuse ... ,1Z

1.3 Probleme de concurs ce proceseaza date simple ...... §4.


1.3.1 Prob Ierne rezo Ivate . .. . . .9.1
1.3.2 Prob Ierne propuse .ZQ

Capitolul2
Editura L&S SOFT: Tipuri de date structurate

Telefon: 0722-573701; 0727-731.947;


2.1 Tablout unidimensional ... . : .JiL
E-mail: office@is-infomat.ro 2.1.1 Teste cu alegere multipla si duala.. .l1l
Web Site: www.ls-infomat.ro 2.1.2 Teste cu itemi semiobiectivi.. .. .:_111
2. 1.3 ProbIerne rezo Ivate. ... .. . .. 119.
2.1.4 Prob Ierne propnse__...: ... .. .9.9.
Tiparul executat la S.c. Lumina TIPO s.r.l; 2.2 Tabloul bidimensional .... ..... .... ... .I.Q.Q.
Str. Luigi Galvani Dr. 20 bis, Sector. 4, Bucuresti, teUfax: 211.32.60; tel: 212.29.27 2.2.1 Teste cu alegere multipla ~i dnalii..__.. .. .. .!.Q9.
·E-mail: office@luminatipo.com; www.luminatipo.com 2.2.2 Teste cu itemi semiobiectivi.. .. ..J.J.J.
2.2.3 Probleme rezolvate .. .. .. !.!.,1
2.2.4 ProbIerne propnse.... ...__. ... .. ..J.7.7.

3
2.3 Fisiere text L?2,
2.3.1 Teste cu alegere multiplii ~i dualii.....................•_ UP. C.\PITOLlIL 1
2.3.2 Prob Ierne rezo Ivate............•......................................................•... lJi1
2.3.3 Prob Ierne propuse lJP. Programarea Strueturata si Instructiuni in Limbajul
"
l 2.4 Probleme de concurs ce proceseaza date structurate 1.4.1. de ProgramarePascal1 C I C ++
2.4.1 Prob Ierne rezolvate l1l
2.4.2 Prob Ierne propuse l:1i1 , III Structura liniarii ~i alternativa -sInstructiunea de
Indica'i; si riispunsuri ..__._.__._._._.. ~ ._ .. . .1.72.. atribuire ~i conditionalii '

"
1.1.1 Teste cu alegere multipla $i duala

1. Care dintre urmatoarele valori fac parte din tipul tntreg:


a) 23 .'0
b) -4321
I d) '+1234
e) 12,345
c) -24.0 f) 0.0

2, Care dintre urmatoarele operatii au ca rezultat valori din tipul tntreg sau real?
(Operatorul [] desemneaza parteaintreaga, jar operatorul mod dcsemneaza restulla
impartirea intreaga):
d) 2 mod 10
a) 3 " 4
r b) [10.345) e) 10.01 < 14.5
c} not(5)6) f) .)10.0+6
3. Care dintre urmatoarele operatii sunt corecte sintactic:
a) 10 +
2.3
b) not true;
I d) true and 1.0;
e) not true false;
c) 23 mod 2.0 f) 23.45 < 17;

4. Care dintre urmatoarele operatii au ca rezultat valoarea true stiind di variabilele


intregi a ~i b au valorile a = 23 si b = 50:
a) a '# hi d) b ~ a;
b) a > hi e) a'mod 10;
c) a + 10i f) b;" a;

5. Care dintre urmatoarele operatii au ca rezultat valoarea 3 stiind ca variabilele


,- intregi a si b au valorile a = 45 ~i b = 120:
a} a mod 6; \' dl b d;iv 39:
b) a mod 10; e)b - 2*ai
c) a - 15; f) a mod 7;
r

4
5

",,1
r

6. Care dintre urmatoarele operatii au ca rezultat valoarea I 0.0 stiind eli variabilele 13. Asociati operatorilor din coloana dreapta operatiile corespunzatoare din
reale x, y ~i z au valorile x = 20.0, Y = 15.0 si z = 1.5: coloana stanga: . ~

a) y/z d) x-y/z a) / e) mod I) Inmul(ire 5) Cat la irnpartire


,b) y*z b) div f) [1 6) Conjunctie l'
e) .Jx*z g) and
2) Scadere
cl ..Jx f) x- x/2
c) * 3) Parte intreaga 7) Rest la '-"
dl - h) not
4) Negatie lmplirtire
7. Care dintre urmatoarele expresii sunt corecte sintactic? 8) Impartire ,
;
....J
. a) 1'8 - 3 + 2 e) 3 + 4.mod 2.3 14. Care dintre urmatoarele secvente sunt echivalente (conduc la obtinerea
e- bl 18 + 7/3 + 2 f) 24 div (7 + 1) acelui~i rezultat) cu instructiunea:
c) 2.30 + 3 mod ~1
g) 24 div not(7/31 a+-- (a+b+c)/2;
dl 3 + 7.0/3 h) 3 mod div 4 -1

8. Care dintre urmatoarele expresii sunt.intregi, daca toate variabilele care intervin
a) a .- ti/2 + a/2 + c/2;
b) a .- a + b + c/2;
I dl. a ..... b/l/2 + a/1'/2 + c/l/2;
e) a .- a + bIZ + c/2;
'--"

, ,
c) a _ (a + bl/2 + c/2; f) a _ (a + b)/1/2 + c/1/2;
sunt de tip lntreg?
15. Care sunt valorile variabilelor lntregi a~i b dupa executia instructiunilor, daca L
a) (a+3.5)*2 d) 57 .mod a-ce mod 57
b) a*3 div 4 - x*S e) [3.50*3J - 15 div 3 initial ele aveau valorile a=82 ~i b=24:
r' ..,
c) not(5<98)
f) ..flO *2+4 div a a .- a mod 2 + b div 2 div 2; al a = 5 ~i b = 5
b <- 2 * a mod 2; b) a = 6 :;;i b = 6
a ..... a + b; c) a = 0 ~i b = 6
9. Care dintre urmatoarele expresii sunt reale, daca toate variabilele care intervin b ..... a mod 2 + b + 10 mod 2; d) a = 6 ~i b = 0
sunt de tip lntreg? el a "" 0 ~i b = 0

a) not<x*z<z) 16. Care dintre variabilele a, b, c, d vor avea aceeasi valoare dupa executia
u
b) x*y mod z + x*5 d) .JX*Z*2 - 32
e) [3.S0*x] - 123.45*y
instructiunilor urmatoare, daca initial ele aveau valorile a=10, b=20, c=30 si lF40:
c) (a*2 + 12.5)*5
f) (x+2) 1Dod 3 a) a 100, d = 100
=
a _[.Jd*2+b]; b) a 60, c = 60
=
~

b _a + b d~v 2 *5; c) a = 10, c = 10 ~i d 10


10. Care dintre urmatoarele expresii sunt logice stiind ca toate variabilele care c _{b - d)*5 div 10; dl b = 60, d = 60
intervin sunt de tip numeric (Intreg sau real)? Consideram expresiile ca fiind d _ (d + a + b - c)div 10;
corecte. :
-'
17. Determinati ordinea de. executare a instructiunilor urmatoare pentru ca la final
a) (asex) or (34) (x - yl) d) x*y mod a < a mod x variabilele x, y, ~i z sa aiba valori egale, indiferent de valorile avute anterior: I ~
b) a/x/y - xe y e ) not([3.50]<5)
c) (a«b+x) )and(3<56)
f) Jx+ y *3 +7 d.iv a
a) x ..... x mod 15
b) z _ x d.iv y;
~b,d,~c;
~~d,b,~
u
c) x _100,:
dl y _ x div 10; ~~b,d,c;
11. Care este valoarea expresiei: 20 div 10 *2 + 30 div 15 * 2
~~~~~
-'
a)2 b)O cl8 d) 4 18. Care dintre urmatoarele a(ribuiri fac ca valoarea variabilei reale x sa aiba partea
fractionara egala cu 0.0, indiferent de valoarea initiala a acesteia? (Operatia parte ';
12. Care este valoarea expresiei: 4000110/10*2 + 4*10*10/2 mtreega este desemnata prin operatorul n) , .
w
a)400.0 b)280.0 c1240.0 d) 220.0 a) x <:- x*10; d) x _ x/10;
b) x _ [x] * 10; e) x [x] + 10.03; -: 1

c) x _ [x*10]; I f) x _ [x + 10];
!

6 7
I,
-
,
19. Care dintre urmatoarele atribuiri sunt corecte .stiind ca variabilele a ~i b sunt
a) max-max - 12 div 4
'b) .max_(max-l) + 3 Ic)" inax_2*max - 6
d) max_2 + 5.:mod 2
I intregi, jar variabilele x ~i y sunt reale:
26. Care sunt valorile variabilelor x ~i y dupa executarea in ordine a urrnatoarelor
r-' a) x a*10 div 3; dl c ...... (x + y) div 10 + a mod 2:
trei opera\ii de atribuire? .
,
l
b) a
c) y
[xl~* bmod 2
x mod 2 + 1: I e) .x_ a t
f) y ..... [x-
b/3;
+ a I ·div 3;
x-_ 3;
Y _ x+3;
1 a) x-a . i y~3
b) x=3 ::;;i y=O
r 20. Care dintre urmatoarele operatii iau ca rezultat valoarea True stiind ca x ..... x-"3;
c) x=6 ~i y=o
variabilele intregi a ~i b au valorile a = 23 ~i b = 50: dl x=O :;;i y=6

a) (a::J:. ,b) and (a>b); d) h.mod 10 > a div 7; 27. Care sunt valorile variabilelor reale x ~i y dupa executarea mstructiunilor
b) {(a+10)<b)or false; e) not false and (a div 10 < b);
c) true and (a,~ b) I f) not (true or (a+b<10»; urmatoare:

x ..... 22.50; a) x = 35.0 ,~i y = 25.0


21. Care sunt valorile variabilelor x, y ~i z in urrna executarii secventei de b) x = ~i y =
45.0 75.0
Y _ [x]+8;
.c)x =~28.0 ~i Y = 30.0
instructiuni (Operatorul _ desemneaza operatia de interschimbare a valorilor a x ..... 2*x;
d) x = 22.5 ~i Y = 75.0
doua variabile): Y ..... Y+x;

x ..... 1234; a) x = 12, y = 18,. z = 24 28. Care dintre variabilele care intervin in secventa de operatii urmatoare i~i vor
r-« y ..... x div 100; b) x = 12, y = 24, z = 18 pastra valoarea avuta initial?
x _ x * 2 div 100; c) x = 34, Y = 18, z = 24
z _ (x-ry) div 2: d) x = 18, y = 12, z = 24 a _ b+c; a) a ~i c
z _ x b) b ~i c
c +- a-c;
b _ c; c) c ~i a
c _ a-b; d) a, b, lili c
22. Care dintre operatiile urmatoare atribuie variabilei reale x media aritmetica a
valorilor variabilelor intregi a, b si c : 29. Care sunt valorile variabilelor intregi a ~i b dupa executarea instructiunilor
!~ a) x _(a + b + c)/2; urmatoare:
d) x _a + b/3 + c/3
b) x _ a!3 + b!3 + c/3; e) x -a/3 +b/2 +c/2 a _ 1235; b _ a mod 10; a) a = 1200 :;;i b = 5
c) x _a/1/3 + b/1/3: cl1/3; I f) x _(a + b +.c)/3 ~ca (a-b) mod la~O atunei
a _ a div 100;
b)
c)
a = 12 lili b = 35
a = 3500 :;;i b = 12
d) a = 1200 :;;i b = 12
:- 23. Care dintre operatiile urmatoare atribui~ variabilei intregi x una din cifrele sale, b_ a mod 100;
el a = 1200 ~i b = 35
l stiind ea x> 10000:
c:aca a=b atunci a - a*100; f) a = 100 :;;i b = 35

aj x __ x mod 1'00; d) x - x div 100 mod 10;


r-r- b) x _ x mod 10;
c) x _ x div 10 mod 10;
I e,) x _ x mod 10 div 1;
f) x _ x mod 50;
30. Care sunt valorile obtinute de variabilele intregi x, y ~i z dupa executarea
operatiei -de decizie urrnatoare, daca la intrare aveau valorile .'x = 23, Y = 14 ~i

r
,.
24. Care dintre operatiile. de atribuire urmatoare sunt corecte, stiind eli toate
variabilele au tipul intreg?

a) a_a + 3
bJ ;<_a + 3_2
cJ b_b div 2 + 1 I f)
d) x-, a < 2
e)· 4 + a_b
a ~ x 'div 10 mod 10;
f
z=25?

aJ.tfeJ.
x _ y-z
'v'>_
Y _ x-1;
z +- y+x;
(y-z>O) atunci, a) x = -11, Y = 14,
b) x = 23, Y = 22,
c) x = 23, Y = 22,
d) x = -11, Y = 22,
e) x = 23,
z = 25
z = 37
z = 45
z = 37
Y = -:1;.1, z = 25

25. Variabila 'max are valoarea 3. Care dintre urmatoarele operatii de atribuire
perrnite cavariabila max sa i~i modifice valoarea din 3 in O?

9
8
, 1

J
31. Care dintre secventele de operatii urmatoare conduc la afisarea a doua valori 37. Care dintre -urmatoarele.apeluri sunt incorecte sintactic?
pozitive? a) b)
a) b)
write('13.45') cout « 'A" cout «"13.45"
a) e) write ("AU)
rmea (a>O) and (b=al atunei ~ea (a>O) or (b>O) atunei
L. serie (a, b) L. soria (a, b) e) d)
writeln(3a)
el
cout«1.3«endl
d)
cout « 3a
wri teln (1.3)
b) d)
rmea (a*b»O atunei rmea (a*b>O) -and (b>Olatunei 38. Care dintre urmatoarele apeluri conduce la afisarea unor caractere ce pot
L. seria (a, b) 1. serie (a, b)
reprezenta un numar intreg?
I ..
u
bl a) b) ~
32. Care dintre urmatoarele numere reprezlnta numere intregi din vocabularul a) ., cout.« "123~"
write (-123) write{'1234') cout «·-123 ... ·t·
limbajului Pascal le/c++?
e) dl e) d) .J
writeln(1.0) cout«-1."3«endl cout«1.0«endl
a) -315.2 b) 1982 c) +23 dl 002222 el 23E2 f) '123' writeln(-1.3)

33. Care dintre urmatoarele numere reprezinta numere reale din vocabularul ....J
limbajului Pascal ICIC++? 39. Care dintre tipurile urmatoare reprezinta tipuri de date reale?
a) float b)u!l:signed char
a) 445.6 bl -45.2 cl 22,17 d). pi. e) 23E2 f) , 12.3' a) real . b) byte
i
34. Se considera urmatorul program: c) word d) double I c) unsigned int d) double '-.J

begin void main () 40. Consideram ca variabila a are valoarea -13. Carui tip poate apartine aceasta r 1
'write ('Eu '); cout...c "Eu ";
writeln('sunt I); cout « "sunt" « enol; variabila?
write ('bine') cout « "bine"; b) unsigned a;
end. a)var a:char b)var a:byte a)byte a;

clint a; d) short a;
In ce fel se va face afisarea mesajelor? c)var a:integer d)var
a:shortint
al bl e) dl
Eu Eu sunt Eu sunt bine Eu
sunt bine sunt bine
41. Stabiliti care dintre urmatoarele declaratii de variabile sunt corecte:
bine ....J
a) float 1t,2t;
a) var a: integer[lO];
var x,y:int; bl :int all. .10];
35. Care dintre urmatoarele secvente conduc la 0 afisare In acelasi format cu cel bl
var a,b:real; e) int x,y;
e)
produs de apelul: writeCABC) In Pascal, respectiv cout «'''ABC'' in CIC++? var It,2t:integer; d) string s;
dl doub1e e;v;
0) var z:longinteger; 01
a) b) a) b)
write('AI); write{'AB'); cout« "A"; cout« "AB";
write('B'); writeln('C'); cout« "B";' cotrt; « "c" -c 42. Daca a, b sunt variabile de tip integer (varianta Pascal) I int(varianta CIC++),
write('C'); cout« "C"; endl; iar x, y sunt variabile de tip real (varianta Pascal) I float (varianta CIC++), stabiliti
c) d) e) d) u
wri teln (I AB' ) ; wri teln ( 'ABC' ) cout«"AB"«endl; cout < "ABC"
care dintre urmatoarele secvcnte de atribuiri sunt incorecte:
write('C'); cout « "e"; « endl;
a) x:=20; y:=lO; x:=(x+y)/2; a) b=2; a=b/2;
36. Ce va fi afisat pe ecran In urma apelului writeln(45.23:6:3) ill Pascal, respectiv b) x:=8; y:=10; a:=x+y; b) x~8; y=lO; a==x+y;
~

c) x:=4; b:=2; y:=x/b; c) x=4; b=2; y=x/b;


prinif{"%6.3f1n", 45.23) In CIC++?' til x~~20; y~~10; x~(x+y)/2;
d) b:~2; a:~b/2;
e) a:=5; b:=5; x:=a+b; e) a=b=5.; x=a+b;
a) +45.230 bl 45.230 c) 045.230 d) 45.023

11
10
n
43. Care dintre urmatoarele declaratii suntcorecte sintactic? 49. Care dintre declaratiile devariabile urmatoare sunt corecte?
a) canst ab=30; a) int ab=30; a) var a:byte; b )var d=char; a)char a; b)d=char;
b) var a+b:integer; b) ~ta+b;
c) -var a1: real; c) -fl.oat ali c) var d) -var clint 1a; d)int a;bic;
d) var lab: char; d) char lab ; 1a:integer; a ;b ;c:word;
e) var m.n:boolean; e). int'm.n;

,- 50. Sa consideram urmatoarele declaratii: var x: byte; y: char; (varianta Pascal),


44. Care dintre urmatoarele expresii logice 'au valoarea true(varianta Pascalj/ I Unsigned int x;- char y;(varianta C/C++),
(varianta C/C++) pentru: Care dintre-urmatoarele afirmatii sunt adevarate?
a:=5; b:=3; c:=true; d:=3; a=5; b=3i c=l; d=3; 'a)Variabila x poate avea valoarea 2 d)'Variabila y poate avea valoarea '2'
a) (a<b) or C b) Variabilax poate avea valoarea '12' f) Variabila y poate avea valoarea '-2'
al la<bl II c c) Variabilax, poate avea valoarea 23 e) Variabila y poate avea valoarea 256
b) «(b=d) -and c ) or (a>=b) bl «b~~d) && c) II la>-b)
c) cand (d>b) c) c' && (d>b) 51. Care dintre urmatoarele expresii carecontin numai operanzi re~li,s~nt corecte
d) (a>b) or not (d<a) d) (a>b) I I ! (d<a)
e) (a=b).and c sintactic?
e) (a=;"'b) .&& c
a) (a<=b}or c a) (a<=b) I c
b) (a<>b) and (c<=b) b) lal-b) & (c<-b)
45. Ce valoare are expresia E= alblc*d - a, unde a=36, b=6, c=3, d=4? c) a/c ,and alb
~ c) a/c & alb
d) a and b<c+3 d) a & b<c+3
a) 36.. 0 b) 40.0 c) -28.0 dl -38.0 e) - 36.0 e) a and b and c e) a & b ,& c
f) (a<>2) and false f) (a!=2) & 0
46. Determinati care dintre urmatoarele expresii au valoarea true (varianta Pascalj/
I 1 (varianta C/C++) 52; Se considera expresia (a<b)=«c+a»b), descrisa in limbajul Pascal, respectiv
(a<b) «c+a»b) in varianta C/C++. Variabilele intregi care intervin au valorile
a) ,(3<7) and. (2<0) or (6=1+3) a) (3<7) && (2<0) II 16~1+31 a=2, b=30 ~i c=5. Ce valoare se obtine in unna evaluarii acestei expresii? '
b) (3<7) or (2<O) or (6=3+3l b) 13<7) II (2<01 II (6--3+31
I"" c)not(2<O) or (6=1+3)
I c)! (2<0) II (6--1+31 a) true (Pascal) b)32 c} false{ Pascal) d)25
1 ,IC/C++) o IC/C++I
47. Indicati care dintre urmatoarele expresii sunt incorecte sintactic. Evaluati
r expresiile corecte. 53. Care dintre variabilele declarate in continuare poate avea valoarea -123?
!
a) b) a) b)
a)3.0 = 5*(10 - 3*3)-2; a)3 == 5*(10 - 3*3)-2;
b)25-10 <> 3*5 var nr:byte; var b: char; unsigned char nr; unsigned b;
b)2S-10 != 3*5 c) dl c) - d)
~
c)42 mod 5 < 42 div 5 c) (42 % 51 < (42 / 51
d)10.S div 2 -var a: integer; -var a: longint; int a; l.ong a:
dl10.5 % 2
i ; e)'4 mod (5<4) div 5 e)3.14 % (5 < 41 / 5
f)8*3 < 20/10 mod 2 54. Care va fi valoarea variabilei x dupa efectuarea secventei de instructiuni:

- I
f)8*3 < 20 % 0.0
x:=3 + 17 div 3; x-3 + 17/3;
48. Indicati care dintre expresiile urmatoare sunt corecte sintactic. Evaluati y:=x + 1; y=x + 1;
expresiiJe corecte. x:=y + 1; x=y + 1;
a)3<4 or 5<>6
r a) 3<5 I I 5<>6 a) 8 b) 9 c) 10 d) 11
b)not(true or false) b)! (1 II 0)
c)not true and false c) ! 1 && 0
d)not true or not false dl!l J I !O 55. Determinati valoarea expresiei: abs(-11.2)+sqrt(trunc(16.23)), scrisa in
e)not(18<25)and or(3)0) e) ! (18<25) && II (3)01 limbajul Pascal, respectiv fabs(cII.2)+sqrt(floor(16.23)) in C/C++. '
f)12*2 < 2)+18 f)12*2<2)+18
a) -9.2 bl 15 c) 14.2 d) 15.2

12
- 13
• I
, i

.J

56. Determinati valoarea expresiei trunc(abs(-14.2» mod 7, scrisa in limbajul 63.Ce se va afisa in urma executarii urmatoarei secvente de instructiuni? i
I
Pascal, respectiv «int)fabs(-14.2» % 7 in C/C++? a=lO: b=a+l; LJ
a:=10: 'b:=a+.1:
if a<>b then b:=b+l if (a!=b) b++;
. a) .14 b) 2 c) 0 d) 8 e1.se a++;
·el.se a:=a+l;
a:=b*a; wrf.t e te ," ',b); a=b*a: cout « a « I , « bi
57. Determinati valoarea expresiei (99 mod trunc(trunc(8.9)/sqrt(16» + 1), scrisa '-'
in limbajul Pascal, respectiv 99 % (int) (floor(8.9)/sqrt(16» + I in C/C++? a) 121 11 b) 120 12 e) 120 11 d) 121 12

64. Presupunem ca asupra variabilelor reale X ~i Y au fost efectuate atribuirile


, 1
a) 2 b) 1 c) 0 d) 3
x=:10.23 ~iy:=5.14, tn Pascal, respectiv x=10.23 si y=5.14, in C/C++. Ce se va ~
58. Determinati valoarea expresiei sqr(17 div 5*2) , scrisa in limbajul Pascal, afisa 'in urrna executarii urmatoarei instructiuni?
respectiv (17/5*2)*(17/5*2) in C/C++. if trunc(x)=trunc(y) then if (floor(x)==floor{y» x=y:
x:=y: e1.se x+=y;
a) 1 b) 36 e) 1800 d) 2 e1.se x:=x+y cout « (int)floor(x) « 1 I « '-.J
write{trunc(x),' ',trunc{y»: (int)floor(y):
59. Determinati care dintre expresiile urmatoare pot fi atribuite variabilei reale x: a) 5 5 b) 10 15 e) 15 10 dl 15 5 i

al b) a) b) 65. stiind ca variabilele reale X, y, z au valorile x=12.3, y= - 34.2 ~i z=5.67, ce se va J


8 mod sqrt (4) sqrt (63 mod 2) 8 % sqrt(4l sqrt(63 % 21
e)
afisa in urma executarii urmatoarei instructiuni?
dl el dl
sqr(6 di.v(-3» sqrt (sqr (-2» (6/-3)*(6/-3) sqrt (-2 * -2) if (x>y)
i.f x>ythen
x:=trunc(x)+l x=floor(x)+l:
60. Consideriim ca intr-un program se Iucreaza cu variabila reala x a carei valoare else i.£ z>y then . el.se if (z>y)
este 10.3. z:=trunc(z)+1 z=floor(z) +.1:
else eJ:se
Ce se va afisa in unna apeluIui write(x:5:2, abs(x):6:2, trunc(x):3),pentru limbajul y:=trunc(y)+l; y=ceil(y)+.1:
Pascal, respectiv prin1f(''%5.2f''106.2f''1o3d'', X, fabs(x), (int) x) pentru C/C++? writeln(x:3:0,y:3:0,z:3:0); printf(·'%~.Of%3.0f%3.0f\n",x,y,z)

a) 13-34 6 b) 12 34 6 e) 12-35 6 d) 13 35 5
a) 10.30-10.30 10 b) 10.3010.3010 . c) 10.30 10.30 10 d) 10.30 10.30010
66. stiind ca variabilele caracter X ~i Y au valorile x='*' si y='-', ce se va afisa in
61. Considerand variabila reala x si variabila intreaga a, care va fi secventa de urma executarii urmatoarei instructiuni?
caractere afisate in urma exeoutarii secventei de instructiuni:
a:=l; b:=12; c:=4; a=l; b=12; c=4;
x:=-4.3; x=-4.3; if a>b then begin if (~>b) ( .J
a:=abs(trunc(4»; a=abs(4); if x='*' then a:=a*3 if (x=='*') a*=3;
write(a:2,abs(x) :4:2,trunc(a+x) :2) printf ("%2d%4. 2f%2d", a, fabs (x) , end l
(int) ceil (a+x) ) ; e1.se e1.se {
if y='-' then b:=b-3 if (y=='-') b-=3;
~
4 4.300 b) 44.30 0 el 4 4.30 0 else a:=a+b; e1.se a+=b;
a) d) 44.300
write(a,' ',b,' ',c); }
c o u t c-ca-c'<" I <cb-oc ' "<cc s . I
62. Presupunem ca variabila intreaga a are valoarea 10 iar variabila tntreaga b are a) 13 12 4 b) 3 12 4 c} 1 9 4 dl 3 9 4
vaIoarea S. Ce se va afisa in urma executarii urmatoarei secvente de instructiuni?
67. Identificati care 'dintre urmatoarele instructiuni alternative sunt corecte
aux i e-Lr auxeLr
if a<b then aux:=a; if (a<b) aux=a; sintactic:
a:=b; b:=aux; write(a,' ',b); I a=b; b=aux; cout « a « ' '« b;
a) if a:=10 then write(a); a) if a=10 cout«a;
'-'
a) 5 5 b) 10 5 e) 5 1 dl 10 10 b) i.f 1<x<5 then. begin b) if (l<x<S) { x++; cout«x; }
x=x+l; write{x); end;
....J
14 15
~ c) if (x=3)or(x=5)then write(x); c) if (x==3 I I y==5) cout«x; 70. Care dintre urmlitoarele instructiuni verifieli In mod eoreet daca valorile
variabilelor a, b ~i c au acelasl semn?
d) i~ x<10 ±hen begin I d) if (x<10) { cout«x; }
write (x) ; al al
-end; .if (a>O)and{b>O)and(c>O) 'then if (a>O && b>O && c>O)
write ('Au acelasi semn') cout; « "Au acelasi s.eron";
e],se write (' NU au ace Las j 'semn') else cout «"NU au acelasi seron";
68. Care dintre urmatoarele secvente de instructiuni determina In mod eorect
maximul dintre trei numere? " b)
r;
b'
.if' (a*b>O)and(c*b>O) then if (a*b>O && c*b>O)
I a) if (a>b)and(a>c) thenmax:=a a) if (a>b && a>c) max=a; write ('Au acelasi "aernn' ) cout « "Au acelasi seron";
,,
i !
e],se .e],se e1.se write(' NU au acelasi seron') .e.Lee cout; «"NU au acelasi seron";
if (b>a)and(b>c) then rnax:=b if (b>a && b>c) rnax=b;
e1.se "rnax: =c; 'e1.se max=c; c) c)
I, b) j,f a>b then
j,f a>c then max:~a
b) i f (a>b)
.if (a>c) rnax=a;
'if (a>O)and(b>O)and(c>O) or
(a<O)and(b<O)and(c<O) then
write ( 'Au ace Las L aemn")
if {(a>O && b>O && c>O) I I
(a<O && b<O && c<O»
cout « "Au acelasi seron";
e1.SQ rnax:=c e1.se max:=b ·e1.se max=c;e1.se max=b; e],se write(' NU au acelasi seron')

r c) if a>b then
j,f a>c then max:=a
C), if' (a>b)
if (a>c) max=a;
d)
if (a*b<O)or(c*b<O)or(a*c<O)
el.se cout «"NU ~u acelasi seron·";

d)
~f (a*b<O I I c*b<O I I a*c<O)
e1.se rnax:=c e1.se rnax=c; then write('NU au acelasi seron') cout « "NU au acelasi seron";
e1.se if b>cthen max:=b e1se if (b>c) rnax=b;
r e1.se max:=c; e1se max=c;
e1.se
write(' Au acelasi semn')
e],se
cout «"Au acelasi seron";
d) j,f. a>b 'then d) if (a>b)
if b>c then rnax:=b if (b>c) rnax~b; '71. Care dintre urmlitoarele instructiuni verifica in mod corect daca ~alorile
,e1.se rnax:=c else rnax=c; variabilelor a si b sunt consecutive?
e1.se rnax:=a; eJ.se rnax=a;
a) al
if (a~b+l)and(a=b-l) then if (a==b+l && a==b-l)

r
lJ
69: ,Care dintre urmatoarele instructiuni verifieli In mod corect daca valoarea
variabilei' x apartine intervalului (a,b)?
e1.se
write('sunt consecutive')

write{'NU sunt consecutive')


e1.se
cout « "sunt consecutive";

cout«"NU sunt consecutive";


a) if (x<=a) or (x>=b) then a) if' (x<=a 1 I x>=b) bl bl
cout « uNU Apartine";
I
, J
, write ('NU Apartine')
e1.se write ('Apartine' ) e],se cout « "Apartine";
if (a=b+l)or(a=b-l) then

e1.se
write('sunt consecutive')
if (a==b+l I I a==b-l)

e],se
cout « "sunt consecutive";
b) if (x>a)and(x<b) then b) i f ' (x>a && x<b) write('NU sunt consecutive') cout«"NU sunt consecutive";
wri te ( 'Apartine' ) cout « "Apartine;
~
l ;
e1.se write('NU Apartine') e1.se cout « "NU Apartine"; cl
if (a<>b+l)and(a<>b-l) then
c)
if (a!=b+l && a!=b-l)
c) if (x>a) or (x>b) then c) £f (x>a I I x>b) write('NU sunt consecutive') cout«"NU sunt consecutive";
~
write ('Apartine') cout « "Apartine"; e1.se e1.se
I e1.se write (' NU Apar,tiner) e1.se cout « "NU Apartine "'; write ('sunt consecutive'), cout « "sunt consecutive";
I
I ,
d) if x>a then d) if (x>a) dl dl
if x<b then if ,(x<b) if (a-b=l) and (b-a=l) then if (a-b==l && b-a==l)

r write ( 'Apartine' )
e],se write(' NU Apartine')
cout « "Apartine";
else cout « "NU Apartine"; e1.se
write('sunt consecutive')

write('NU sunt consecutive')


e1.se
cout « "sunt consecutive";

cout«"NU sunt consecutive";

r
16 17
n
.lll '
• -
1.1.2 Teste cu itemisemiobiectivi 4. Se considera urmatorul program pseudocod:
intreg sl,s2,ml,r02,gl,g2,s,
1. Se considera urmatorul algoritm: a) Ce valori vor fi afisate daca ...J
'2' m,g;
'3' eiteste sl,52,nli,r02,gl,g2; sl=20; s2=47; m1=20; m2=10;gl=3;
i intreg a, b, C f di a) Ce valori vor fi afisatedaca a=34 ,4" s ~ 51 + 52; m ~ ~ + ro2; g2=38;
2 citeste a, hi 5 g ~ gl + g2; b) Dati un exemplu pentru datele de
si b=2 ? Dar dacii a=24 ~i b= -2 ?
3. c a + hi s: raaea s>60 ~tunei intrareastfel incat algoritmul sa nu
...J
4
5 roca
d a * bi
c > d atunci
b) Datiun exemplu pentru datele de
intrare astfel tncat algoritmul sa
.7 L.S -- s.mod 60; m ~ m + 1;
efectueze nici una' din operatiile
'8'
6 c .... d; afiseze la final doua valori egale. 9 ~ea m>60 atunei existente In cadrul operatiilor de :I
, '

L. decizie. : !
7
8
9
Eca a mod 2 =
serie c ,
0 atunci
d
c) Dati exemplu de valori pentru a ~i
b astfel incatsa fie afisata 0 pereche
10
11
12
m ~ m mod 60; g -- g + 1;

-aerie g, m, s
c) Realizati un enunt de problema a
~

10 al..t feJ. de valori pare ordonate crescator, 13


carei rezolvare este algoritmul , 1
11 serie d, c; d) Realizati programul in Iimbajul de 14 prezentat. i
i.....'
12 programare studiat PascaIlCIC++. 15 d) Realizati programul in limbajul de
16 programare studiat PascaIlC/C++.
17
2. Se considera urmatorul program pseudocod: 5. Se considera urmatorul algoritrn:
1 :intreg a, hi a) Ce valori vor fi afisate daca j" intreg a, b , c ;
2 real. x , y; a) Ce mesaj va fi afisat pentru a=2, [1
x=34.50 ~iy=17.1? Dardacax=1.5 ~i 2- eiteate a, b, c ;
3 c.iteste X, y; b=6 si c= -10 ? Dar pentru a=1, b=3 ,
4 a ..... Lx * y); y= -2.5? 3
4
ca a*b < 0 .atunei
serie 'Exista nr. negativ' ~i c=1O? J
5
6
7
b _ [x I yJ;
caca a < b atunci.
a .... hi
b) Dati un exemplu pentru datele de
intrare astfel incat algoritmul sa
afiseze la final aceleasi valori care au
5.
6
.7
sea
aJ.tfeJ.
b*c < a .atunei !
aerie 'Exista nr. negativ'
b) Dati un exemplu de valori pentru
datele de intrare astfel incat
algoritrnul sa afiseze un mesaj
8
9
10
taca x #- (x] atunci
serie a, b
fast citite la intrare.
c) Dati exemplu de valori pentru X si
>8
9
aJ.tfeJ.
serie 'NUMERE POZITlVE' necorelat cu semnele datelor de
10 intrare,
11 al.tfeJ. y astfel lncat sa fie afisata 0 pereche 11
12 serie b , a; c) Rescrieti algoritmul astfel incat sa
de valori ordonate descrescator, 12
verifice In mod corect daca toate cele
,
13 13
~

d) Reaiizati programul ln Iimbajul de trei valori ale datelor de intrare sunt


14
program are studiat PascaIlCIC++. 15 pozitive.
16 d) Realizati programul in limbajul de
3. Se considera urrnatorul algoritm: 17 programare studiat PascaIlCIC++.
u
1 intreg at b ,i 18
a) Ce valori vor fi afisate daca a=345
2 citeste a, b s : {a,b>100}
~ca a mod lO<b mod 10 atunci
si b=238? Dar pentru a=7093 ~i b= 6. Se considera urmatorul algoritrn: ,
'3
4 L.a ..... a - a mod 10 + b mod 10 211 ? l.J
1 intreg a, b , c; a) Ce valoare va fi afisata daca a=3
5 b) Dati un exemplu pentru datele de 2 eiteste a, b, c;
6 ca a div 10 mod 10>5 atunci intrare astfel incat algoritrnul sa 3 ea (a + b)/2 = catunei b=8 ~i c= 13 ? Dar pentru a=5, b=10 ~. ·1

7 a..... a - a div 10*10 afiseze la final aceleasi valori ca cele ,4 ~i c=0?

E
serie \ COREeT'
8 a1.tfel. 5' aJ.tfeJ.
b..... b - a mod 100; citite. b) Dati un exemplu pentru datele de
9 6 ea (a + cl/2 = b atunei
10 c) Cum trebuie sa fie valoarea intrare astfel incat algoritmul sa
7 serie 'CORECT'
I I I serie at hi variabilei apentru ca valoarea ei sa afiseze mesajul 'INCORECT'.

r
8 aJ.tfeJ.
12 nu se modifice in unna executarii 9 e a (c+b)/2 = a atunei c) Rescrieti algoritrnul, folosindu-va
...J
operatiilor din algoritm. 10 serie \CORECT' de operatiile logice, astfel incat sa
11 a1tfeJ. contina 0 singura operatic de decizie.
d) Realizati programul in limbaju! de 12 serie 'INCORECT'; '1
programare studiat PascaIICIC++. d) Realizati programul in limbajul de
18 19
~ : ,
j

I, ~!] Ll.'-
programare studiat Pascal/C/C++.
e) Realizati un enunt de problema a i
~-

~'
9. Se considerli urmatorul algoritm:

carei rezolvare este algoritmul ,1' ..intreg a; a) Ce valoare se va afisa pentru a=


prezentat. i:
~
2
3
'4 "
tca a
citeste a
mod '100 < 50 atunei
a _ -a - a mod 100
2345? Dar pentru a= 70189?
, b) Realizati un enunt de problema a
carei 'rezolvare este algoritmul
I , 7. Se considera urmatorul algoritm: 5 al.tfel.
6" a _ a + 100 - a mod 100 prezentat.
.intreg a, b , c; a) Ce valori vor fi afisate daca a=3, 7 c) Realizati programul in limbajul de
I citeste a, b, c;
b=38 ~i c=17? Dar pentru a=73,
8 ~erie a; stop.
prograrnare studiat Pascal/C/C++.
I '3 rt-ca a > b atunei
'4
5,
1. a_ b b=15 si c= 46?
b) Dati un exemplu pentru datele de 10. Se considera urmatorul algoritm:
I" b > e atunei

~
6 intrare astfel Incat algoritmul sa
7 , c .... b 1 real. X; a) Ce valoare se va afisa pentru x=
'8 -al.tfe1
afiseze valori . ce nu 'sunt
'.
ordonate
. .
2 eiteste x; 12.345? Dar pentru x= 12.034?
'9 ~ea a > c atunei crescator, 3 x _ x*lO
10
11-,
t.. .a_ c; c) Cum trebuie modifieat algoritmul 4
5
ea [xl ~od 10 ~O atunei
x _ [x]/lO
b) Dati exemplu de valoare pentru x
'astfel ineat la finalul algoritmului
pentru ca valorile variabilelor a, b, c
1i sa fie ordonate crescator ? . 6 altfel partea intreaga a lui sa fie diferita

r:
serie a, b, c;
d) Realizati programul in limbajul de
programare studiat Pascal/C/C++.
1
8
9
tea [x]
x _ x*lO;
mod 10 ~O atunei
x _ [x]/lOO
falii de cea avuta la intrare.
c) Dati exemplu de valoare pentru x
! 10 al.tfel astfel incat, la final, Sa fie afisata 0
8. Se considera urmatorul algoritm: 11 x _ x/1000 valoare eu parte fractionara egala eu
- 1
l~
intreg a, b ,c ; a) Ce mesaj va fi afisat pentru a=2,
12
13
i41 serie X; stop.
0.00.
d) Realizati prograrnul in limbajul de
eiteste a, b, c ;{a,b,c>O} programare studiat Pascal/C/C++.
3 ea (a+b) <c atunei b=6 si c=10 ? Dar pentru a=3, b=4 ~i
4 serie 'NU' c=5 ?
I' 5, a1tfe1 11. Se considera urrnatorul algoritm:
I 6 ea (c + b) < a atunei b) Realizati un enunt de problema a
7' serie 'NU' i real. a, b, c, xl, x2, delta; a) Ce mesaj va fi afisat pentru a--I,
'8 a1t:fe1 carei rezolvare este algoritmul
2 citeste a, b, c;
9 ea (c + a) < b atunei prezentat. b=2, c = l? Dar pentru a=4, b=-12,

~
r 10 serie 'NU'
3 ea a=O atunei
c=9?
,I 4 serie "Ecuatie de grad lit
11 a1tfe1 serie 'Corect' c) Realizati un algoritm echivalent, 5 al.tfel. b) Dati exemplu de valori naturale
12 6 delta _ b*b - 4*a*c eitite pentru a, b, c astfel incat sa se
,:1.3. .,. folosindu-va de operatiile logice,
7 c a delta>-O atunci
I 14 care sa contina 0 singura operatic de xl _ (-b - ~delta)/(2*a)
tipareasca mesaj ul 'Nu sunt sol
8
I' decizie. 9, x2 _ (-b + ~delta)/(2*a) reale'.

b
10 serie xl, x2 c) Dati exemplu de doua seturi de
d) Realizati programul in limbajul de 11 al.tfel. valori de intrare pentru care una din
~
12 serie "Nu sunt sol reale"
prograrnare studiat Pascal/CzCe-}. 13
valorile afisate sa fie O.
14 d) Identificati care din datele de
intrare pot fi declarate ea date de 'tip
r intreg.
,I ' e) Realizati programul in limbajul de
programare studiat Pascal/C/C-.

I~

20 21
,j
>
II"
r \

1.1.3 Probleme rezolvate .12,


1 11end.write ('Supraunitara') e~se
} cout « "Supraunitara",
1 I u
1. Considerand cunoscute 'trei valori reale, veriflcati dad; elepot reprezenta 3. Fie x un numiir natural de eel mult 9 cifre. Sa se determine ultima cifra a
lungimile laturilor unui triunghi, iar incaz afirmativ determinati tipul puteri 2". I

acestuia: isoscel, echilateraI, dreptunghic sau oarecare. , ..J


Solutie: Ultima cifra a puterilor lui 2 se repeta periodic (din 4 in 4).
Solutie: Algoritrnul testeaza toate cazurile dupa definitiile triunghiului echilateral,
isoscel, respectiv dreptunghic. i var x:longint; #include <iostream.h>
2 begin J.ong x ; '-J
3-· - readln(x); .void main ( ) {
4 if x=O then write (1) cin » x;
1 var a,b,c:real; #include <iostream.h> S eJ.se ·if (x==O) cout « "0";
2 begin fl.oat a,b,c; 6 .if x "1l1od 4 =1 -then write(2) eJ.se , '
3 readln(a,b,c); void maine) { 7 eJ.se if (x%4==1) cout « "Z";
~

4 i f (a<O)or(b<O)or(c<O~ then cin » a » b » c; 8 if x mod 4=2 thenwrite(4) eJ.se


5 writeln('Lungirni negative') i f (a<O I I b<O I I c<O) 9 eJ.se if (x%4==Z) cout « "4";
6 91se cout; «"Lungimi negative\n"; 10 if x mod 4=3 then write(S) eJ.se "
7 if (a>=b+cl or (b>=a+c) or(c>=a+cj then -e.Lee 11 ·eJ.se write(6) if (x%4==3) cout < "S"; ~

8 writeln('Nu este ,triunghi ') if (a>=b+c! I b>=a+cl I c>=a+b) 12. end. eJ.se cout « "6";
9 e1se cout «"Nu este triunghi \n",
10 if (a=b) and (a=c) and (b=cl then e~se .
11
12
writeln('Echilateral')
e1se
if (a==b && a==c && b==c)
cout «"Echilateral\n", 4, Se considers doua triunghiuri in plan, identificate prin coordonatele vilrfurilor J
13 if (a=b)or(a=c)or(b~c) then el.se lor. Sa se realizeze un program care verifica daca cele dona triunghiuri sunt
14 writeln('Isoscel')' if (a==b I I a==c J I b==c) asemenea. ' ~l
15 81sB cout «"Isoscel \n",
16 if (sqr(a)+sqr(b)=sqr(c»or el.se Solutie: Doua triunghiuri sunt asemenea daca lungimile laturilor determina U
17 (s9r (b ) +s q r (c ) = s q r (a » o r if (a*a+b*b==c*c I I
18 (sqr(a)+sqr(c)=sqr(b» then
rapoarta egale(cf. teoremei fundamentale a asemanarii), Fie doua puncte in plan
b*b+c*c==a*a I I
rl
19 writeln{'Dreptunghic') a*a+c*c==b*b) A(xQ,yQ) ~i B(Xb,yb). Distanta dintre cele doua puncte este: ~(xQ-xbf+(yQ-Ybf ' Cu
20 e1se' cout «"Dreptunghic\n",
21 writeln{'Oarecare'); eJ.se
ajutorul acestei formule se determina lungimile laturilor celor doua triunghiuri, w
22 end. cout «"Oarecare\n", verificiindu-seapoi daca rapoartele care se formeaza sunt egale.
23
1 var #include <iostream.h>
2 xl,yl,x2,y2,x3,y3,x4,y4:real; fJ.oat x1,y1,x2,y2,x3,y3,x4,y4,
2. Se co~sidera 0 fractie a carei numitor este un numar prim. Sa se verifice daca .3:. a,b,c,d,e,f,xS,y5,x6,y6:real; x5,y5,x6,y6;
este ireductibila ~i subunitara, 4· begin fJ.oat a,b,c,d,e,f,
S read(xl,yl,x2,y2); void main() {
\
Solutie: Fractia este ireductibila daca numaratorul nu este un multiplu al
numitorului. Variabila a va prelua valoarea numaratorului,
6
7
8.'
read(x3,y3,x4,y4),
read(xS,y5,x6,y6),
a:= (xl-x2) * (xl-x2) +
cin » xl » y1 » x2 » y2
cin » x3 » y3 » x4 » y4
cin » x5 » y5 » x6 » y6
L
9· (yl-y2)* (yl-y2), a=(x1-x2) * (x1-x2) +
1 var a,b:integer, #include <iostrearn.h> 10 b:=(xl-x3)*(x1-x3) + (yl-y2) * (y1-y2) ,
2 begin :i..nt a, b, 11, (y1-y3) * (yl-y3) , b= (xl-x3) * (xl-x3) +
3 readln(a,b), void main () { 12' c:=(x2-x3)*(x2~x3) + (y1-y3)* (yl-y3),
4 if (a mod b=O)then cin » a » b , 13 (y2-y3)*(y2-y3); c~(x2-x3)*(x2-x3) +
5 write ('Reductibila, .) if (a%b~~O) 14 d:= (x4-x5) * (x4-x5) + (y2-y3) * (y2-y3) ;
6 eJ.se cout < "Reductibila"; ~5 (y4-yS) * (y4-y5) ; d= (x4-xS) * (x4-x5) +
7 write (I Ireductibila, ') eJ.se ' 16 e:=(x4-x6) * (x4-x6) + (y4-y5) * (y4-y5);
8 if (a<b)then cout « "Ireductibila"; 17 (y4-y6)*(y4-y6); e=(x4-x6)* (x4-x6) +
9 write('Subunitara') if (a<bJ ~8 f:= (x5-x6) * (x5-x6) + (y4-y6) * (y4-y6) ,
10. eJ.se cout « "Subunitara"; .1.9, (yS-y6) * (yS-y6) ; f= (xS-x6) * (xS-x6) +
22 23

iiLj, ~
r:: ,\

20' ~f (a/ct-b/e)and(a/d-c/f) (y5-y6) * (y5-y6) ; var #include <iostream.h>


~f (a/d==b/e && a/d==c/f)
21 'then xl,yl,xZ,yZ,x3,y3,x4,y4:reali fl.oat xl,yl,x2,y2,x3,y3,x4,y4;
,22 write ('DA') cout « "DAn; beg~n -void main ( ) {
23, el.se ,el:se read{xl,yl,xZ,yZ); cin » xl » yl » x2 » yZ;!
,-24, write ('NU') ; cout « "NU"; read(x3,y3,x4,y4); cin » x3 » y3 » x4 » y4;
,2~ -end , i f (xl+x3=xZ+x4)and i f (xl+x3==x2+x4 &&
(yl+y3=y2+y4) then yl +y3~~y2+y4)
5, Se considera doua puncte In plan, exprimate prin perechi de coordonate (x,y). write ('DA' >. cout « "DA"i
Ele reprezinta centrele a doua cercuri de raza RJ,respectiv R2. Sa se verifice daca -al.se el.se
·write ('NU'); cout « "NU";
cele dona cereuri sunt tangente interne, tangente externe, secante sau exterioare.
Solutie: Pentru a determina pozitia celor doua cercuri vom calcula distanta dintre
cele doua centre. Notlind eu daceastli distanta, -atunci: 7. Realizati un program care verifica daca unpunct X din plan se afla In interiorul
r',
• cercurile sunt exterioare daca d>RJ + R2 unui triunghi, pe laturile acestuia sau este exterior lui. Se cunosc coordonatele
ij • eercurile sunt tangente externe daca d = RJ + R2 punctului A ~i coordonatele varfurilor triunghiului,
• eercurile sunt tangente interne daca d = IRJ - R21
~1 • cercurile sunt secante daca d < IRJ - R2[ ~i d < RJ + R2 Solutie: Punctul X este interior triunghiului ABC dacli suma ariilor triunghiurilor
• un cere este interior eeluilalt daca d < [RJ - R21 AXE, XAC si XBC este egala cu aria' triunghiului ABC. Daca una din ariile
triunghiurilor care it au ca vilrf pe X esteegala cu 0 atunci punctul X se afla pe
1 var xl,yl,rl,x2,y2,r2,d:real; iinclude <iostream.h> laturile triunghiului ABC.
:;-, 2 begin iinclude <math.h>
3' read(xl,yl,rl); fl.oat xl,yl,rl,x2,y2,r2,d;
vo~d main{) ( t var #include <iostream.h>
read(x2,y2,r2); 2 xl,yl,x2,yZ~x3,y3,x,y:real; #include <math.h>
d:=sqrt({xl-xZ)* (xl-x2)+ cin » xl » yl » rl;
cin » xZ » yZ » rZ; 3 a,al,a2,a3:real; float xl,yl,x2,y2,x3;y3,x,y;
(yl-y2)*(yl-y2»; begin float a,al,a2,a3;
d=sqrt«xl-x2)*(xl-x2)+ 4
7 ~f (d>rl+r2) then
., ::8 (yl-y2)*(yl-y2»; 5" read(xl,yl,x~,'y2); void main() {
write('Exterioare')
if (d>rl+r2) "6 read(x3,y3,x~y); cin » xl » yl » x2 » y2i
9' el.se
cout « "Exterioare"; .e ee-abe (xl*.(y2-y3) .:....yl* cin » x3 » y3 » x » yi
10 if (d=rl+r2) then
B' (x2-x3)+x2*y3-x3*y2) *0 ..5; a=fabs(xl*(y2-y3)-yl*
11 write ('Tangente ext') el.se
if (d==rl+r2) 9 al:=abs (xl* (y2-y)-yl* (x2-x3)+x2*y3-x3*y2) *0.5;
12 el.se (xZ-x)+x2*y-x*y2) *0.5;
cout « "Tangente ext"; 10 al=fabs{xl*(y2-y)-yl*
,13 if (d<rl+rZ)and(d>abs(rl-rZ»
14 then el.se su a2:=abs (xl* (y-y3)-yl* (x2-x)+x2*y-x*y2)*O.5i
if (d<rl+r2 &&d>fabs(rl-rZ» 12, (x-x3)+x*y3-x3*y) *0.5; aZ=fabs(xl*(y-y3)-yl*
'15 wri te ( 1 Secante ' )
cout « "Secante"; 13 a3:=abs.(x* (y2-y3)-y* (x-x3)+x*y3-x3*y) *0.5;
al.se
16
17 if (d=abs(rl-r2» then el.se 14 (x2-x3)+x2*y3-x3*y2) *0.5; a3=fabs(x*{y2-y3)-y*
if (d==fabs(rl-r2» 15' i f (al=0)or(a2=0)or(a3=0) (x2-x3)+x2*y3-x3*y2) *0.5;
1B write{'Tangente int')
'16 .then write('Pe laturi') ~f (al~~O I I a2~~O I I a3~~O)
19 el.se cout « "Tangente ~nt";
el.se 17 el.se cout « "Pe laturi";
20 ~f (d<abs{rl-rZ» then
if (d<fabs(rl-r2» , 1B, ~f (al+a2+a3=a) then el.se
,21 write ('Interioare')
cout « "Interioare";} 19 write('Interior') ~f (al+a2+a3 == a)
22 end.
20 El.se write ( I Exterior I ) cout « "Interior"i
,21 end. el.se cout « "Exterior"i}
6. 'Se considera patru puncte In plan A, B, C, D, exprimate prin perechea de
coordonate (x,y) ce formeaza un patrulater convex. Sa se verifice daca cele patru 8. Se considera trei puncte in plan, exprimate prin perechi de coordonate (x,y). Sa
puncte formeaza un paralelogram. Coordonatele punctelor sunt introduse In ordinea se verifice daca un punct A reprezintli centrul de greutate al triunghiului format de
(XA,yA) (XB,yB) (xc,yc) (xD,yD). cele trei puncte. -
Solutie: Patru puncte formeazli un paralelogram daca diagonalele se lnjumatlitesc In
acelasi punct. Yom verifica daca coordonatele mijloacelor celor doua diagonale
sunt aceleasi,

24 25
r:
[
::::
'-

Solutiet Coordonatele centrului de greutateal unui triunghi se obtin ca medie var xl,yl,x2,yZ,x3,y3,x4,y4, #include <iostream.h>
1 f~oat xl'/yl,x2,y2,x~,Y3,x4,Y41
aritmetica a celor trei coordonate corespunzatoare varfurilor triunghiului. .2
x5,yS,x6,yG,x7,y7,xB,y8,
vx, vy: real; x5,y5,xG,y6,x7,y7,x8,y8; o~

Demonstratia -pleaca de la i'aptul eli .acesta se gaseste pe orice mediana la.2/3 de 3 float vx , VYi
·4 begi.n
coordonatele viirfului si la 1/3 de baza, '5 read(xl,yl,x2,y2); void main ( ) {
read(x3,y3,x4,y4); cin » xl » yl » x2 » yZ
.6
j var #include <iostream.h> '7 read(x5,yS,x6,y6); cin » x3 » y3 » x4 » y4
2 xl,yl,x2,y2,x3,y3,xa,.ya:real; f20at xl,yl,x2,yZ,x3,y3,xa,ya; read(x7,y7,xB,yB); cin » x5 » y5 » x6 » y6
8
3 begin void ma1.n() { if (xl<=x5)and(x5<=x2)and cin » x7 » y7 » xB » yB
'9. i f (xl<=x5 && x5<=x2 &&
4 read(xl,yl,x2,yZ); cin » xl » yl » xZ » y2; 10~ (xl<=x6) and (x6<=x2) then
~ read(x3,y3,xa,ya); cin » x3 » y3 » xa » ya; vx:=x6-x5 xl<=x6 && x6<=x2)
"11
6 i f ((xl+x2+x3) /3. O=xa')and i f «xl+xZ+x3)/3.0 == xa && 12 else vx=x6-x5; ~

(yl+yZ+y3)/3.0-- ya) i.f (xS<=xl)and(xl<=xG)and e~se


7 ((y1+yZ+y3) /3.0)-ya)then 13
8 ·.write('Centru de greutate') cout.c-cvcerrt xu de greutate"; 14 (x5<=x2)and(x2<=x6) then i f (x5<=xl && xl<=x6 &&
,eJ.ss 15 vx:=x2-xl x5<=x2 && x2<=x6)
9 eJ.se @
-10 wr.ite('NU') cout « "NU"; 16 e1se vx=x2-xl; ~
if (xl<=xS)and(x5<=x2)then e~se
11 end. 17
18 vx:=x2-x5 i f (xl<=x5 && xS<=x2)
19 e1se vx=x2-xS;
if (xl<=x6)and(x6<=x2)then e1se
9.Se considera patru puncte in plan, exprimate prin perechea de coordonate (xJ'). 20
21 vx:=x6-xl; i f (xl<=x6 && x6<=x2) ,-,
. I
l~!
Sa se verifice daca cele patru puncte formeazii un dreptunghi. i~ 22 vx=x6-xl;
'I if (yl<=y5) and (y5<=y2) and '
~i se ~
23
Solutie: Patru punete formeazii un dreptunghi daca diagonalele sunt egale '24 (yl<=y6) and (y6<=y2) then i f (yl<=y5 && y5<=y2 &&

~ 25 vy:=y6-y5 yl<=y6 && y6<=y2)


injumatatesc in acelasi punct . 26 eJ.se vy=y6-y5;

#include <iostream.h>
~ 27 if (y5<=yl)and(yl<=y6)and e1se
1 var xl,yl,xZ,y2,x3,y3:real: 28 (y5<=y2) and (y2<=y6) then ,i.f (y5<=yl && yl<=y6 &&
f~oat xl,yl,x2,y2,x3,y3,x4,y4; !-
2 dl,d2,x4 /y4:real; 29 vy:=y2-yl y5<=y2 && y2<=y6) i I

3 begin fJ.oat dl,d2i ~~, 30 eJ.se vy=y2-yl;


l..J

4 read(xl,yl,x2,yZ); -void main () ( ~" 31 if (yl<=y5)and(y5<=y2)then e~se

5 read{x3,y3,x4,y4); cin » xl » yl » x2 » y2; ;··.1.·.·

l\
•.

32 vy:=y2-y5 i f (yl<=y5 && y5<=y2)


cin » x3 » y3 » x4 » y4;
.6 dl:=(xl-x3)*(xl-x3)+
dl=(xl-x3) * (xl-x3) +
et 33 else vy=y2-y5;
~j
7 (yl-y3) * (yl-y3) ; 34 if (yl<=y6)and(y6<=y2)then e1se
d2:=(x2-x4)*(x2-x4)+ . (yl-y3) * (yl-y3); 11 i.f (yl<=y6 && y6<=y2)
8 35 vy:=y6-yl;
9 (yZ-y4) * (yZ-y4); d2=(x2-x4) * (x2-x4)+ R .:36 write (vx*vy) ; vy=y6-yl;
10 if (xl+x3=x2+x4) and (yZ-y4)" (yZ-y4); ;1 37 end. cout; « vx*vy;} j
11 (yl+y3=y2+y4)and i f (xl+x3==x2+x4 && if lJ
~
12 (dl=d2) then yl+y3==y2+y4 && dl==d2)
13 write ('DA') cout « "DA";
14 e~se el.se
cout « "NU";
1.1.4 Probleme propuse
15 write ( INU')
1q end.. [I -'
10. Se considers doua dreptunghiuri, cu laturile paralele cu axele, in plan ale carer 1.·.·..1· 1. Realizati un algoritm pentru calculul expresiilor urmatoare: A=2+x-y; B=x*A-
viirfuri sunt exprimate prin pereehi de coordonate (x,y). Sa se determine aria !,l 2+y; C=A-2* Bvx.
~
suprafetei comune ale celor doua dreptunghiuri. :t 2. Realizati un algoritm pentru determinarea perimetrului si ariei unui triunghi
Coordonatele punetelor unui dreptunghi sunt introduse in ordinea (XA,yA), (XBJ'B) H
caruia i se eunosc lungimile laturilor.
(xc,yc) (XDJ'D)' ·1
3~ Realizati un algoritm pentru rezolvarea in multimea numerelor reale a ecuatiei
u
Solutie: Calculam lungimea si latimea suprafetei comune, apoi determinam aria :1
':j degradul I (a *x + b = 0).
acestei suprafete, 1
i
~! ~

26 27

!
14. Realizati un program care determina perimetrul ~i aria unui patrat, cunoscandu-
4. Realizati un algoritm pentru rezolvarea in multimca numerelor reale a sistemului se lungimea laturii acestuia.
i; de ecuatii:
15. Realizati un program care determina un procent p din salariul unui muncitor. Se
a * x + b'* Y = O vor citi de la tastaturaatat salariul ciit procentul dorit.
r { x+c*y=1 Exemplu: Pentru salariul s=3000000 ~i procentulp=15 se va afisa 450000.

16. Cunoscandu-se suma de bani avuta de lonel inainte de a cumpara trei cadouri,
, ,
5. Inflatia produce devalorizarea monedei nationale. Cat a costat un caiet anul ~i valoarea fiecaruia, realizati unprograrn care sa afiseze suma ramasa dupa
trecut, daca inflatia a fost de 50% pe an? Alcatuiti algoritmul de rezolvare a acestei cumpiiraturi.
probleme stiind care este pretul actual al caietului. Exemplu: Pentru suma initiala 0-=3000000 ~icadourile de valoare 100000, 200000
~i 300000 se va afisa 2400000.
:--~ 6. Andrei a depus la 0 banca 0 suma de bani. stlm eli in fiecare luna el primeste 0
I' dobanda de 30% din valoarea initial depusa, Care va fi valoarea detinuta la C.E.C 17. 0 broscuta face in fiecare minut ciite un salt. Lungimea primului salt este p
dupa 3 luni daca se cunoaste valoarea depusaInitial? Alcatuiti algoritmul de (valoare cititii de la tastaturajdupa care, fiecare salt fiicut are lungimea dubla fatii
rezolvare al acestei probleme. de lungimea saltului anterior fiicut. Realizati un program care afiseaza distanta
r-t
totala parcursa de broscuta in cinci salturi. .
7. Maria a depus la banca 0 suma de bani. Se cunoaste ca pe luna ea are 0 dobanda Exemplu: pentrup=2 se va afisa 62 (2+4+8+16+32)
de 30% din valoarea avuta la acel moment. Care va fi valoarea detinuta la C.E.C
dupa 3 luni cunoscand suma initial depusa ~i faptul ca Maria nu a ridicat niciodatii 18. Consideram un numar n> I 00. Realizati un program care afiseaza ultimele doua
r cifre ale lui ~i suma acestora.
dobiinda, ea adaugandu-se in fiecare luria la suma initiala? Alcatuiti algoritmul de
Exemplu:
rezolvare al acestei probleme.
Pentru n=10234 se va afisa 347.
8. Realizati un algoritm care citind de la tastatura trei numere reale calculeazii suma 19. Consideram un numar n de patru cifre. Realizati un program care afiseaza
,
l celor pozitive. primele doua cifre ale lui ~i produsul acestora.
Exemplu:Pentru n=1234 se va afisa 122.
9. Realizati cate un algoritm pentru calculul valorilor urmatoarelor expresii:
20. Consideram un numar n de trei cifre. Realizati un program care afiseaza pe ciite
3 * X- I daca x<O o linie fiecare cifra a acestuia.
A= { s * X da ca x<lO Ex~prn: 1
2-x daca x::::O
B= 2-xdaca OS;xS;lO Pentru n=123 se va afisa : 2
{ 3+xdaca x>lO
2 - X daca x <0 3
, ;-: c= { max (x 2,lIx} daca x2:0 21. Realizati un program care, citind de la tastatura trei numere reale, calculeaza
suma celor pozitive.
10: Realizati un algoritm care verified daca trei numere tntregi sunt pitagorice.
22. Realizati ciite un algoritm pentru calculul valorilor urmatoarelor expresii
11. Realizati un program care va determina media semestriala la 0 disciplina aviind
A={min(x*y,x+Z) ptr x v y min( x * y , x + Z) ptr x e z
la dispozitie cele trei note din oral. B=
Z * Z altfel { max(Z* z,x- y) altfel
r 12. Realizati un program care va determina media sernestrlala la 0 discipline avand
la dispozitie cele trei note din oral ~i nota din teza. 23. Realizati un program care afiseaza in ordine crescatoare cifrele unitatilor ~i
zecilor unui numar natural n citit.
,~
13. Realizati un program care va determina lungimea ipotenuzei unui triunghi Exemplu: Pentru n=1243 se va afisa 3 4
dreptunghic, caruia i se cunosc lungimile catetelor.
29
28

·:":1
24. Realizati un program care verifica dad un numar este impar si afiseaza in caz
r
.~

IfJ Structuri repetitive - Instructluni repetitive


afirmativ.suma dintre cifra zecilor si cifra unitatilor, In situatia cand numarul citit
este par se va afisa mesajul "Numar par"
Exemplu: 1.2.1 Teste cu alegere multipla si duala
Pentru n=1243 se va afisa 7.

25. Realizati un program care determine suma a doua unghiuri exprimate in grade, 1. Care dintre urmatoarele instructiuni efectueazll5 iteratii: '-'
minute si secunde,
Exemplu: a) c)
Pentru primul unghi de masura: 37 1022 (grade, minute secunde), pentru al doilea
unghi de masura: 10 5215, se va afi~a48 2 37.
r.
rntru d ..... 0,5 executa
nr ..... nr+l r nr
1.
e n tru d ..... -1,
..... nr+l
4 executa
~

b) dl
26. Realizati un program care citind de la tastatura 0 valoare x (x<365),afi~eazll1'e rentru j ,..... -1,3 executa
~~ nr+l
j ..... 7,3 -1 executa
ecran in ce luna a anului 5e afta ziua ell numarul x a anului. 1..
nr ..... nr+l '-.J
,

Exemplu:
Pentru x=33 se va afisa "februarie"
2. Care dintre urmatoai-ele'instrucliuni permite afisarea, in ordine, a valorilor 10,
'12,14,16,18,20? ~
27. Se citeste de la tastatura 0 valoare x naturala (x> 10). Daca valoarea citita are
cifra unitatilor egala cu cifra zecilor se vor afisa primele doua numere naturale mai al c) • 1
mari decat valoarea x, In caz contrar se va afisa cifra maxima dintre cifra zecilor ~i rpentru d ..... 8,18 executa rentru d __ 0, 5 executa'
a unitatilor, t. serie {d + 2); 1.serie (10 + d*2); _J
!

Exemplu: bl dl
Pentru n=3455 se va afisa 3456 3457 pen t ru j ..... 10,20 executa , rentru j -- 0,10 executa
Pentru n=3485 se va afisa 8 ~aca j ~od. 2=0 atunei
t..ecea.e J;
1..
serie (j*2 + 10);
C-'
[
28. Se citeste 0 valoare x numar natural. Sa se realizeze un program care va afisa
r ~
cele mai apropiate doua numere pare de numarul x,
Exemplu: Pentru x=14 se va afisa 12 si 16 3. Ce se va afisa pe ecran in unna executarii instructiunilor ? c.J
Pentru x= 15 se va afisa 14 ~i 16 s ...o;

[f~: ~
..... 11,15 executa
29. Se citesc doua numere naturale. Sa se afiseze valoarea fractiei subunitare care mod 2=0 atunc:i. s s - j mod 2
sepoate forma cu cele dona numere. Valoarea va fi afisata cu 3 zecimale. ·al.tfel s s + j mod 2
"Exemplu:
Pentru x=2 si y=4 se va afisa 0.500. sar:i.a s;
stop.
C-'
30. Realizati un program care afiseaza semnul majoritar a 5 valori citite de la a) 3 b) 4 c) -4 d) -3
tastatura ~i afiseaza un mesaj corespunzator,
Exemplu: 4. Care este valoarea finala pe care 0 poate lua contorul pentru ca in unna
Pentru valorile 2, -3, -14.2, 2, -4.3 se va afisa mesajul: "Majoritatea negative" executarii intructiunii de mai jos sa se afiseze valoarea 4 ?
nr.....O;
entru i ..... 10, ? , -1 executa
rtaca i mod 2=0 atunc:i. c.J
[
1.. nr .... n r + l

30 31 ~
iT(;

., 731?
orn.
serie nr; 7. Care dintre urmatoarele secvente de instructiuni pennit afl,area val .
,r-t stop.
a) 1 bl 2 c) 3 d) 4 c)
aJ . nr ..... 137; i ..... 0; ta
-rrr _ 1327; i _ 0;
a t timp nr > 0 e,ceOU
5. Care dintre variantele urrnatoare reprezinta un .algoritm care verifies in mod a t timp nr -c o 'exeCuta i i *10 + nr mod 10i
corect daca un nurnar este prim? ~ea nr'mod 2 = 1 :atunei.
t. i - i*10 + nr ceod 10; [
nr nr div 10 ;

a) eiteste n (n>lJ c) eiteste n (n>l]


nr _ 0 nr..... 0 [ nr _ nr div 10 ; serie i

r
9 n t ru d ..... 1, nex9cuta n tru d - l,n ,executa
~ea n mod d = 0 at~ei ~ea n 'mod d = Oatunei serie i. d)
nr ..... 12307; i ... 0; eet1ta
L.nr - nr + 1 t.nr ..... nr+1 a t timp nr > oex
[ b) i ..... i*10'+ nr~ 10;
nr ..... 731; nr _ nr diV 10 0 ;
e a nr=Oatunei. c a nr=2atunci a t timp nr > 0 execu1t:a [
serie "Prim" serie "Prim" aerie nr mod 10

r
E a~tfel.
serie

b) eiteste n {n>l}
nr _ 0
"N~ este prim
E a~tfeJ.

dl eites~ n {n>l}
nr ..... Or
,
serie "Nu este prim II
[ nr ..... nr div 100 ;
serie L,

afl,a In urma
8. Se considera urmatorulalgoritm descris in pseudocod. Ce sec va 'ntreaga):
1rea
executarii instructiunilor (operatorul % reprezinta restulla Impart I

D
e n t ru. d ..... 2,n-l executa tru d - 2,n-1 executa
n ~aea n mod d = 0 atunei ~ea n div d ~ 0 atunei

lr:a
t.nr-nr+1 ,t..nr ..... nr+l intreg a, b;
[ a ..... 10; b ..... , 2; aJ *
rcat timp a<15 executa

r
e a nr~O atunci c a nr~O atunei ea a %' b~O atunei aced.e '.' bl **
serie "Prim" serie "Prim"
t

,...,
j

E al.tfel.
serie "Nu este prim II
a~tfeJ.
serie."Nu este prim"

6. Care dintre urmatoarele instructiuni conduce Ia afisarea pe ecran a valorii 5?


stop.
a ..... a + 1;
b ..... b + 1;
cJ

dl ****
***

x, astfel Incat
9. Care este valoarea minima pe care 0 poate avea variabila
,..., aJ c) instructiunea while-do urmatoare sa nu efectueze nici 0 iterat ie?
nr ..... 0, i ..... 0; nr ..... 0; i ..... 0;

r r
a t ti.mp nr<10 executa a t timp nr<45 executa intreg x , y; a) 5
e a nr mod 10 = 0 atunei e a nr mod 10 = a atunei x ..... ?; Y ..... 10;
nr nr + 5; nr ..... nr + 5; t ~±mp .2*x-l<y executa bl 0
i i + 1; i _ i + 1;
,: [

serie L.
nr ..... nr + 5 ; [

serie i.
nr ..... nr + 5 ; D ecea.e y;
x ..... x + 1;

stop.
I c)

dl 7
6

OO?
° ° de iterat11-
b) d) 10. Care dintre urrnatoarele instructiuni executa un numar tnfintt

e
nr ..... 1234; i ..... 1; nr _ 1357; i ..... 1;
t t:i.mp nr > 9 executa " a t timp nr > o executa a) x+- 100; cl x _
,r
i i + 1; 100; Y - 10
i i + 1; a t timp x>10 executa t±mp x<Y e~eeuta
nr nr div 100 ; [ nr nr div 10 ;

[:
~aea x mod 2 = 1 atunci

serie i. serie i.
t. aerie x mod 10;
serie x;
..... x div 10
[ x ..... x div 10 ;

32 33
b) dl
r j.ntreg at S; a) 9 3
Cl

1
x _ 100; Y _ 10 x _ 100; s_Oi a - O;
,

a t timp ,x>y :executa t tDp x>10 -executa . Qpeta b) 11 3


scr1e Xi ca ~ :mod 2 = latunci a .- a + 1;
L.
rcts..

[ x - x * lOdiv 10 ; 'ScrJ.8 x ; s _ s + a; c) 10 4
[
[ pana cand s >= 10;
serie s , a; dl 11 4
C.J
stop.

11. Care dintre urmatoarele instructiuni conduce Ia afisarea pe ecran numai a unor 14. Care este valoarea minima pe care 0 poate avea variabila x, .astfeI incat
valori pare? jnstructiunea cu test final urmatoare sa efectueze 0 singura iteratie?

al c)
ai-teste Xi ci-teste x;

[
peta
rt-ca x .mod 2 =
1. eeeae x mod 10;
x ..... x cUv 10 ;
a
atunci

[
r:
e peta
ca x div 2
ser.ie x mod

x ..... x div 10 ;
= a
10;
atunei

pana cand x=O; pana cand x=O;


b) d) 15. Care dintre urmatoarele instructiuni executa un numar infinit de iteratii?
ci-teste Xi Y +- 0; y ..... Ii
e pet a Qpeta
al c)
ca x mod 2 = a ·atunei
~
serie y ; x _ 31; x _ 100;
_ y*10 + x mod 10; [ y ..- y + 2; Qpet a . QP Qt a
pana cand y>=10;
[ rctaea x mod 10 > 0 atunei rtaca x mod 10 < 5 atunci
x x div 10 ; serie y
~
pana cand x=O:
[
. L. X
_
X
+ 2 t. X
+ 1
-
X

pana cand x -mod 10 = 0 [ x _ x div 10 ; ~

12. Care dintre urmatoarele secvente de instructiuni pennite afisarea primei cifre a pana cand x mod 10 1
unui numar? b)
x _ 100; dl
e p e ta x _ 32; c..:
al c)
ci-teste x //x>lO ~ca x mod 10 < 5 atunci. e P Qt a
citeste x //x>10

rr; t.X X
+ 1
raaoa x mod 10 > 0 atunci , .\

r
e P Qta -
x ..... x div 10 ; ca x<10D atunei [ x _ x div 10 ; [
L. x - x + Z
pana cand x>lQ; x ..... x div 10
pana cand x > 9 pana cand x mod 10 = 1
serie Xi altfel
x ..... x div 100
[ 16. Se considera urmatoarea secventa repetitiva:
b) eiteste x / 1x>10 pana cand x<10;

c
~
e peta serie Xi i:=O; j:= ? i=O;
x ..... x div 10 ; while (i+j<=10) do begin whiJ.e (i+j<=10)
, pana cand x<10; d) i:";i+l; i=i+l;
seri.e Xi citeste x //x>lO jl-j-2; j=j-Z;
~
e p e ta end; )
C x ..... x div 10
pana cand x>=10;
serie x
Valoarea minima posibila pentru variabila j astfeI incat instructiunea repetitiva de
mai sus sa nu se execute fa infinit(necontrolat) este: '--1

13. Se considera urmatorul algoritm descris in pseudocod. Ce se va afisa in unna a) 1 bl 5 c) 6 dl 17 e) 10 fl 2


executarii instructiunilor:
~
34 35
, 1
r, 17. Dacii a, b sunt variabile de tip integer (varianta Pascal) I int (varianta C/C-t+), b) for i:=l to 5 do b) for(i=1;i<=5;i++)
stabiliti care dintre unniitoarele structuri repetitive sunt ciclliri infinite: for j :=l··,to i do for,(j=l; j<=i'; j++)
write(i,' '); coutccdc-c" ";
a) a:=lO: b:=O: ,a) a=lO: b=O:
~ 'repeat -dol c) for i:=l to 5 do c) for (i=1;i<=5;i++)
dec(a): inc(b): for j: =1 to i do for (j=l; j<=i; j++)
a--: b++:} cout«j«" ";
i : unti~ a=h: whil.e(a!=b): write(j,' ');

b) a:=l: b:=5: d) for i:=l to 4 do d)for(i=1;i<=4;i++)


b) a=l: b=5: for (j=i+l; j<=5; j++)
whil.e(a+b<=10) do begin for j:=i+1 to 5 do
whil.e(a+b<=10) cout«i«" ";
a:=a+2: b:=b-2: write(i,' ');
a=a+2:
·end:
b=b-2; }
20. Ce se va afisa in unna executlirii urmatorului program?
r-. 0) a:=O: b:=10:
while (a<=lO)and(b>=O) do 0) a=O; b=10:
whil.e «a<=10) && (b>=O» { var n,i :integer ; #include<iostream.h>
begin
inc (b); inc (a); b++: begin int n=7,i;
a++: } n:=7; void main ( ) {
end:
for i :=2 to n-2 do for (i=2; i<=n-2; i++)
d) a=O: b=10: if i mod 2=0 then i f (i%2==0) cout;c i < I • <
d) a:=O: b:=10:
whHe( (a<~10>l l(b>~O» { write(i,' ',n-i,' '); n-i« • I;
whil.e (a<=10) or (b>=O) do
inc (b): b++: } end.
~
a) 2 4 6 b) 2 4 4 6 c) 2 5 4 3 dl 2 5 e),253,4
18. Se considerii urmatoarea secventa de program in care i, k, n sunt variabile de tip
integer I int (varianta Pascal/C-t+), iar a, b, x sunt variabile de tip real I
21. Cilte caractere se vor afisa in' urma executiei urmatoarei secvente de
r--, float(varianta Pascal/C++): -
,
instructiuni? "
read(a,b,n): cin»a»b»n;
var n,i,j :integer Minc1ude<iostream.h>
k:=O: k=O:
for i:=l to n do for{i=l:i<=n:i++) int n, i, j;
r
, ' begin { begin voidmain{} {
n=5;
read(x) ; cin»x: n:=5;
if ..~.. then k:=k+l: for i :=1 to n do beg~n for (i=l; i<=n; i++) {
i f (.."..) k++:
end: write(i); cout«i;
} for (j=l; j<=3; j++) cout«j;
r write(k) ; for j:=l to 3 do write(j);
cout c-ck r
end; }
end. }
Indicati cu care dintre expresiile urmatoare pot fi inlocuite punctele din secventa de
mai sus astfel incat sa se afiseze cste dintre cele n valori citite in x se gasesc in a) 5 bl 6 c) 16 dl 20 e) 24
r intervalul [a.b1(se presupune ca a<=b).
\ j 22. Un numar reprezinta 0 putere a lui Z (ZK) dacii orice divizor al sau (rnai mare ca
a) (a<=x) and (b>=x) a) (a<=x) && (b>=x)
I) este par. Care dintre urmatoarele secvente de instructiuni verifica in mod corect
b) (x>=a) or (x<=b) b) (x>-a) II (x<-b)
I c) not «(x<a) or (x>b»
0) ! «x<a) II (x>b» daca un numar n este 0 putere a lui 2 ?
d) (x<=a) and (x>=b)
l d) (x<=a) && (x>=b)
al a)
ok:=false; ok=O;
19. Care dintre urmatoarele secvente de program afiseaza pe ecran urmatorul sir de for (i=2; i<=n; i++)
r, for i :=2 to n do
numere 1 2 2 3 3 3 4 4 4 4 5 5 5 5' 5 (variabilele i si j sunt de tip intreg)? if (n mod i=O)and(i mod 2=0) if (n%i==O && i%2==0) ok=l;
"

if (ok) cout « "DA";


a) for i:=l to 5 do
for j: =1 to 5 do
write(i,' ');
r) for(i=1;i<=5;i++)
for(j=1;j<=5;j++)
cout«i«" ";
then ok:=true;
if ok then write ('DA' )
el.se 'write ( 'NU' ) ;
el.se cout « "NU";

36 37
"
b) b) 5:=1; 5=1; c 1
ok:=true: ok=l: £or i :=1 -to n div 2 do :for (i=1; i<=n/2; i++)
£or i :=2 to n do
i f (n:mod i=O)·and(i :mod 2=0)
£or (i=2; i<=n: i++)
~f (n%i==O && i%2==0) ok=O:
if n mod i=O then 5:=5+i; if (n%i==O) s+=i: u
if s=n then write('DA') i f (5==n) cout.« "DA":
'then c k t-ef'a Ls e r i f (ok) cout « "DAn; el.se write('NU'); -e.Lee cout « "NU";
~ 1
-if ok then write ('OA' l -slose cout; « ·"NU";
'else write ('NU');
e) e)
24. Care dintre urmatoarele instructiuni permit afisarea unui nurnardel S caractere
ok:=true: ok=l; pe ecran ?
for i :=2 to n do for (i=2; i<=n; i++) ; :
if (n mod i=O)and(i mod 2<>0) i f (n%i==O && i%2>0) Ok=Oi al a)
then ok:=false; i f (ok) cout; « "DAn; for i :=1 to 3 do for (i=1; i<=3; i++) l.....i
if ok then write('DA') .aJ.ee cout «"NU" i for j:=1to 5 do write('DA') for (j=1: j <=5: j++)
e~SQ write ( 'NU' ) ; cout « "DA II ;
bl b) :
i
d) d) for i :=1 to 3 do begin £or (i=l; i<=3; i++) { ,

ok:=false; ok=O: write ('A' ) ; cout « "A";


for i :=2 to n do for (i=2: i<=n: i++) for j:=1 to 4 do for (j=l: j<=4; j++)
i f (n mod i=O)and(i mod 2<>0) if (n%i==O && i%2>0) ok=l: write ('B') ; , cout; « "Btl;
then ok:=true: i f (!ok) cout « "DA"; ,end; )
if not ck then write ('DA') else cout « "NU"; el e)
else write ('NU'); for i :=2 to 4 do for (i=2; i<=4; i++)
for j :=1 to 5 do write ( 'A' ) for (j=1; j<=S; j++)
cout « "All:
23. Un numar este perfect daca suma divizorilor siii (strict mai mici decat el) este d)
dl
egala cu numarul respectiv. De exemplu 6 este numar perfect deoarece 6=1+2+3. for i :=1 to 30 do for (i=l; i<=30: i++)
Care dintre urmatoarele secvente de instructiuni verifica in mod corect daca un if i mod 2=0 then i f (i%2==0) cout < "A";
numiir este perfect? write ('A~)
~

a) a) 25. Ce se va afisa pe ecran in urma executarii urmatoarei secvente de instructiuni,


~iind ea pentru variabilax au fost citite valorile 23, 25, 345, 892 si 3456?
s:=O; s=O;
for i :=1 to n d±v 2 do for (i=1: i<=n/2; i++) for i :=1 to 5 do begin for (i=1; i<=5; i++)
if n mod i=O then s: =s+i; if (n%i==O) s+=1; w
readln (x) ; cin » x;
if s=n then write ('DA' ) if (s==n) cout < uDA"; if i mod 2=0 then if (i%2==O) cout « x%10;
eJ.se write ('NU' ) ; el.se cout « "NU"; ,
write (x mod 10) el.se cout « (x/l0)%10; -~

el.se write{ x div 10 mod 10);


b) b) and:

s:=1; 5=1; a) 3 2 5 9 5 bl 3 5 5 9 2 e) 2 5 5 9 5 d) 2 5 5 2 5 e) 2 5 4 2 5
for i :=2 to n d±v 2 do for (i=2: i<=n/2;· i++)
if n mod i=O then 5:=s+i; if (n%i==O) 5+=i; 26. Care dintre urmatoarele instructiuni FOR sunt incorecte sintactic? ~
if s=n then write ('DA') if (5==n) cout « "DA":
eJ.se write ('NU').: el.se cout « "NU":
a) a)
for i := 1 to n div 2 do for (i=1; i<=n/2; i++)
e) e) write ('i'); cout « ' i I;
~

s:=O; 5=0; b)
bl
for i :=1 to n div 2 do for (i=1; i<=n/2: i++) for i:= n down to n d±v 2 do for (i=1 to n) do
if n div i=O then s:=s+i; if (n/i==O) 5+=i; cout « i;
write(i);
if aen then write ('DA') if (s==n) cout « "DA";
eJ.se write ('NU' ); el.sB cout < '.'NU";
el e)
for i :=1 to n / 2 do for (i=1: i <= n div 2; i++)
d) d) write{'i'): cout « 'il;
~

38 39
1
, d) dl .. I 29. Care dintre urmatoarele instructiuni FOR permit afisarea unor caractere dispuse
I

,...,
;
for i = l t o n di.v 2 do
write (1) ; I £or (1:=1; i<=n/2; .i++)
cout « i;
pe mai multe Iiniisub fonna unui triunghi?

a) a)
.27. Caredintre urmatoarele instructiuni FOR calculeazii in mod corect .suma £or i : = 1to 5 do .begin £or (i=1; i<=5;,1++) 1
writelni cout «endl;
numerelor pare mai mici sau egale ell numarul n? £or j:=l -to i write(i); for (j=l; j<=ii j++) cout «i;
.end; )
~
a) a)
s:=o; 5=0; b) b)
"for i := 1 to n do £or (1=1; i<=n; i++) for i := 1 to 5 "do for (i=1; i<=5; i++)
i f i mod 2=0 then s :=s+1; i f (1%2==0) 5+=1; for j: =1 to i begin" £or (j=l; j<=i; j++)
write (i) ; cout « i;
n b) b) writeln; cout « endl;
I 5:=0; s=o; end; )
for i:= n downto 2do . for (i=n; 1>=2; i--)
if i mod 2=0 then s:= i; if (1%2==0) 5=1; c) c)
,'r for i := 1to 500 begin fqr (i=1; i<=5; i++) {
c) c) writeln; cout « endl;
5:=0; s=o; for j:=l to i for (j=1; j<=i; j++)
for i: = 1 to n div 2 do for (1=1; i<=n/2;"i++) writeln(i) ; cout « i « endl;
s:=5+2*1; 5+=2*1; end;
~

d) d) d) dl
5:=0; 5=0; for i := 1 to 5 do begin for (i=l; i<=5; i++) {
for i :=(n-l) downto 2 do for (i=n-l; i>=2; i--) write; for (j=l; j<=i; j++)
r if i mod 2=0 then s:=s+1; if (1%2==0) 5+=1; for j:=l to i begin cout « i « endl;
writeln (i'-) ;
28. Care dintre urmatoarele instructiuni FOR permit afisarea corecta a tuturor end;

numerelor impare mai mici sau egale cu numarul n?


r-' 30. Ce se va afisa la executarea urmatoarelor instructiuni?
a) a)
k:=l; k~l;
·for i := 1 to n do begin for (i=l; i<=n; i+=3) while k<=7 dobeqin whiie (k<=7) {
write(i); 1:=1+2; cout « i; write (k,' 'l; cout « k « ' ';
end; if kmod 2 = 1 then k:=k+2 if (k%2==1) k+=2; e1se k++;
b) e1se"k:=k+l; }
b) find;
r'
for (i=n; i>=l;-i--)
; , for i := n downto 1 do if (i%2==1) cout « i; a) 1 2 3 4 5 6 7 b) 1 3 5 7 c) 1 3 4 6 7 d) 1 2 4 5 6
lj if i mod 2=1 then write(i);
c)
c) 31. Ce se va afisa la executarea urmatoarelor instructiuni?
for (i=O; ~<=(n-1)/2;i++)
for i = a to (n-l) div 2 do cout « 2*i+1; a:=l; a=l;
I , write(i*2+1); while a mod 5 <>0 do begin whi1e (a%5!=O)
d) write (a mod 5); cout « a%5;
r'
d) a:=a+l; a++;
for (i=l; i<=n/2; i++) end; )
for i = 1 to n div 2 do cout « 2*i+1;
write(i*2+1); a) 0 1 2 3 4 b) 1 2 3 4 0 c) 1 2 3 4 d) .2 3 4 0

l
' ~
, " '
I
,I .'
40 41
.~

~!
,

32. Ce se va afisa la executarea urmatoarelor instructiuni?

'x:=3.00;
y:=2.00;
yhi1e x*y<100 do X:=X*Yi
x=3-.00;
y=2.00;
while (x*y<100) X*=Yi
r @. ce se va afisa la executarea urmatoarelor instructiuni?
a:=Ol
b:~10;
.repeat
a:=a+2; b:=b-2;
a=O;
b=10;
do (
a+=2; b-=2;
-'

r
1

1
I

write(x :2 :0,' 'tY :2 :0); printf ("%2. Of %2. Of", x, y) ; ,); cout « a « « b «
write(a,' ',b,' I I;

-until'a>b; while (a<=b);


a) 48 2 bl_ 48.0 2.0 cl-96.0 2.0 d) _ 96 2
a) 2 8 4 6 6 4 b) 0 10 2 8 4 6 c) 2 8 4 6 dlO 10 2 8 4 6 6 4 ,1
33. Ce se va afisa la executarea urrnatoarelor instructiuni?

x;=32034; x=32034;
@. Ce se va afisa la executarea urmatoarelor 'instructiuni? ~

whi.le x mod 10<>0 do wlti.J.e (x%10>O) x/=10; p:-1; p-1;


x:=x div 10; cout « x « I I « (x/10)%10; repeat do {
write(x,' " x div lOmod 10); p:=p*2; p*=2;
write (p) ; cout « p;
a) 3 0 b) 320 2 c) 320 0 d) 3 3 until pmod 10=6; } -while (p%lO!=6);

a) 2 4 8 6 b) 2486 c) 2 4 8 16 d) 24816 ~

34. Identificati care dintre urrnatoarele instructiuni executa un numar infinit de


iteratii,
~. Ce se va afisa Ia executarea urmatoarelor instructiuni?
a) al j=1;
j:=l;
x:=l; k:=2*x; x=J.; k=2*x; repeat do {
whi.le k>O do begin whi.le (k>O) {
write(j,' '); cout « j « ' '; ~ 1
write (k+x) ; cout « k+Xi if jmod 2 =0 then j:=j+1 if (j%2==0) j++;
k:=k div li k/=l; I

end; }
else j:=j*2; el.se j*=2;
} whil.e (j<=10);
u
until j>10;
b) bl
a:=12; a=12; a) 1 2 3 6 b) 1 3 6 cl 1 2 4 6 d) 1 2 3 6 7
while a mod 10 <> a do begin whiJ.e (a%10>O) ~
write (al ; cont « a; "'-
'3.$. Ce se va afisa la executarea urmatoarelor instructiuni?
a:=a div 10; a/=10;
" '1
end; } a:=2; a=2;
c-I c) repeat do {
x:=231; x=231; write(a:2) ; printf("%2d", a);
while x<>5 do begin whiJ.e (x!=5) a:=sqr(a) ; a*=a;
writeln(x); cout « Xi until. a>20; } whi.l.e (a<=20);
X:=X * (x mod 10); x*=x%lO;
and; } aj 2 4 816 bl 2 416 c) 2 4 8 16 d) 24816 ..J
dl dl
a:=l; a=J.; <'3.'!)Indicati care dintre urmatoarele instructiuni executa un numar infinit de iteratii,
whil.a a mod 10 = 5 do begi.n
writeln(a) ;
whil.e (a%1.0==5)
cout « a; al al
J
write(a div 10); , -cout; « a/lO;
end; I j:=1234; j=1234; ! 1

i:=10; i=10;
repeat do ( -'
write(j); cout « j;
j:= i di.v 10; j=i/10;
until. j>10; ) while -(j<=10);

42 43
I,
i '""' h)

a:=2:
hi
a=2;
c.. I
I '4
5
,6'
n tru i ..... 1, n executa'
citeste X;
~ca (x<n)or (x>2*n) atunci
b) Dati un exemplu de set de date de
intrare pentru care se va afisa
1. nr ..... nr valoarea 0,
r
,,
repeat
a:=a*2;
writeln(a) ;
unt:i~ a>20;
do (
a*=2';
cout « a «
}·whil.e (a<=20);
-endl;
'7
,8'
,9.,
10
G
'Sorie nr;
+ :X;
c) Dati un exemplu de set de date de
intrarepentru -care se va "a:fi~a-suma
celor n numere citite,
il: .top.
d) Realizati programul PascaIlC/C++
c) c)
c- corespunzator algoritrnului prezentat,
I '
a:=2; a=2;
i J
.repeat do { 3. Se considera urmatorul algoritmreprezentat in pseudocod:
writeln(a): cout « a « endl;

"
,
if a <1000 then a:=a*2.
until. a<1;
if (a<1000) a*=2;
} whi-I.e (a>=1); 2
3
i' ~treg
p"ntruX, s,
i_I,
i, j
3
cit_ste X; s ..... 0;
executa
; a) Ce se va afisa pentru sirul de
valori 1,2,1 ?
t. j

d) d), ,4 rpentru j ..... 1, 2 ,executa b) Dati un exemplu de set de date de

r a:=l; a=1;
,5 4.s ..... s + X; intrare pentru care se vor afisa trei
'Ii
,aerie s; valori multipli de 3,
repeat
write(a);
do (
cout « a;
'7'
'S\ l c) De cate ori se efectueaza operatia
de atribuire s .- s + x ?
- a:=trunc(sqrt(a»;
until. a>O;
a=(int)sqrt«double)a);
}whil.e (a<=O):
'9 ' atop.
d) Realizati programul PascaIlC/C++
corespunzator algoritrnului prezentat,
, ,

4. Se considera urmatorul algoritrn reprezentat in pseudocod:


<
" -'1 intreq i, j, s'.

1.2.2 Teste en itemi semiobieetivi


2
3'
lp""tru
-
i_I, 5
citeste X; s ..... 0;
X

executa
; a) Ce se va afisa pentru sirul de
valori 6, 5, 4, 2, I?
4 '~pentru, j ..... 1, i executa
b) Dati un exemplu de set de date de
-5, s ..... s + X; intrare pentru care se vor afisa cinci
L Se considera urmatorul algoritm reprezentat in pseudocod: "6
L; valori consecutive.
. }-- serie s t
c) De cate ori se efectueaza operatia
i intreg at b ,e, i ; a) Ce se va afisa pentru valorile a=3 8
'9 stop. de atribuire s .- s + x ?
I' ,:2 citeste a, b
~i b=10 ? Dar pentru a=4 ~i b=12?
i 3 c ..... 0: d) Realizati programul Pascal/C/C++
b) Dati un exemplu de valori pentru
-'4
5
<6
caca
lpentru i
i
..... a, b executa
mod 2=0 atunci.
c ..... c + 1; .
datele de' intrare astfel incat
algoritrnul sa afiseze mesajul «Nu
corespunzator algoritmului prezentat,

5. Se considera urmatorul algoritrn reprezentat in pseudocod:


,~ 7 exista »
8 ,<j intreg L, j, n ; a) Ce se va afisa pentru n=3?
9 ~ca c > a atunci sorie c c) Creati un enunt de problema a 2 cite.te n r
l~_ ~. al.tfel. sorie uNu exista H carei rezolvare este algoritrnul b) De cate ori contorul i va lua
:-3: lp8ntru i ..... 1, nexecut&

f
r-: 11,_ stop. valoarean?
prezentat. '4 pentru "j ..... 1, n executa
d) Realizati programul PascaIlC/C++
corespunzator algoritrnului prezentat.
,~ aerie
(i-I) + j; ,*n c) De eate ori contoru! j va lua
valoarean?
d) Realizati programul PaseaIlC/C++
-8' stop.
.!" 2, Se considera urmatorul algoritrn reprezentat in pseudocod: corespunzator algoritrnului prezentat,
e) Realizati un enunt de problema a
j~_1 ~treg n , x, nz , i ; a) Ce se va afisa pentru n=4 ~i sirul carei rezolvare este chiar algoritrnul
..'2 01teSte n alaturat
::3 nr ..... 0: de valori 3, 5, 6,10?

44 45
~
t
6. Se considera unniitorulalgoritrn reprezentat in pseudocod:
1 ..:intreg a, nr;
I ~"6
-7
~8;
L I
~
nr ..... nr + 1;

pana cand nr = "2


x astfel incat la final sa nu fie afi~atii
ovaloare divizibila cu 10.
:I
2 citeste a; a) Ce .se va vafisa la introducerea ·9.~ eerie x; d) Realizati programulPascal/CKH+
~

3: nr ..... 0: sirului de valori 2,4 5 74 0 ? -10 stop. corespunzator algoritmuluiprezentat.


<.4"
5
a t "t±mp a *
0 -executa b) Dati unexemplu de valori pentru : 1
~ca a DOd. 2=0 ..atunci datele de intrare .astfel incat
6 L. nr ..... nr + 1. algoritrnul sii afiseze valoarea O.
10. Se considera urmatorul algoritrn reprezentat In.pseudocod:
t: 1 ~ intreg
e [ eiteste a; c) Creati vun enunt de problema a
2.
X, nr:
citeste X; nr ..... 0 ;
a) Ce se va afisa .pentru sirul de
9 carel rezolvare este -algoritmul valori 4 6 5 11 15?
[epeta
10 sorie nr ; ,stop . prezentat.
d) Realizati programul Pascal/C/C++
corespunzator algoritrnului prezentat.
3
'4
'5

7
6.
rca
citeste y:
(y>l)and(y<lO) atunei.
nr ..... nr + 1:
b) Dati un exemplu de sir de valori
pentru care se afiseaza valoarea O.
c) Ce valoare trebuie sa aiba la c :

8 x ._ x - 1; intrare x pentru ca structura repetii sa


~
7. Se considera urmatorul algoritrn reprezentat in pseudocod: 9 pana cand .x=O; efectueze 3 iteratii?
10 serie nr: d) Realizati programul Pascal/C/C++
1 intreg x , -nr: 1:1 stop. r'1
2', ci-teste Xi a) Ce se va rafisa daca x=7? Dar corespunzator algoritmului prezentat.
3 nr,_ D. pentrux=13 ?
4'
'5
t timp x" executa
0
,rt-aca x mod 2=1 atunci
b) Dati un exemplu de valoare x
astfel incat sa seafiseze valoarea I.
11. Se considera urmatorul algoritrn:
'6
7
1. nr <- nr + 1: c) Creati un enunt de problema a
1
2
intreg X, P, i;
i_O;po-'l;
a) Ce valori vor fi afisate daca se vor ,
introduce, in ordine, numerele: ~
8 [ x ..... x div 2: carei rezolvare este algoritrnul 3 ci-teste x;
9 prezentat. 4 a t t:imp(x"O) executa. 2,3,4,5,0;
'10 scrienr: stop. d) Realizati programul Pascal/C/C++ 5 _ i i + 1. b) Deterrninati un set de date de ,i
6 P P * Xi intrare pentru care ultimele doua 1
corespunzator algoritrnului prezentat. 7 ci-teste Xi U
8 [ , scri.e p;
numere afisate sa fie egale.
8. Se considera urmatorul algoritrn reprezentat in pseudocod: 9, c) Modificati algoritmul, ram sa
10 serie i; introduceti noi variabile sau r 1
,
i. intreg x, nr, y:
a) Ce se va afisa pentru sirul de
'11 stop. instructiuni, astfel incat sa se afiseze ..J
"2 citeate Xi nr ..... 0
[at t:imp x" executa valori24657430? succesiv media aritmetica a
'3
-4
"5"
6-
7
rca
c.iteste vs
0

x mod 2=y mod 2.atunci


nr ..... nr + 1:
b) Dati un exemplu de sir de valori
pentru care se afiseaza valoarea O.
c) Dati un exemplu de sir de valori 12. Se considera urmatorul algoritrn:
numerelor citite. ;

8 x ..... Y'; pentru care valoarea afi~atii va fi 1, intreg n, i, ur, X, Si a) Ce valoare va fi afisata pentru n=
9 egala ell numarul de numere 2 ci-teste n; s ..... 0,
5 ~i numerele: 222,2043,29,2,
-10 aerie nr; stop. introdus. ,3 ,ntra i ..... 1, n executa ~

'4 nr ..... 1; ci-teste Xi 20035.


d) Realizati programul Pascal/C/C++ 5 a t timp x > 9 executa b) Determinati un set de date de
corespunzator algoritrnului prezentat. 6 nr ..... nr * 10; intrare pentru care valoarea afisata ,
7 [ x _ [x I 10J; ,
va fi egala en suma numerelor citite? ..J
9. Se considers urmatorul algoritrn reprezentat in pseudocod: 8
9 s ... s + x*nr; c) Realizati programul Pascal/C/C++
:1 .:i.ntreg x, nr; 10 corespunzator algoritmului prezentat.
a) Ce se va afisa pentru x=2? 11 sorie s d) Rescrieti instructiunile repetitive
2
.3!
'4
rrepeta
citeste Xi nr _0

x ..... x + l ;
b) Ce valori poate lua la intrare x
pentru ca la final sa se afiseze 10?
ale algoritrnului folosind numai
,
~
,

instructiunea conditionata posterior.


5 rdaca x.mod 5=0 atunci. c) Dati un exemplu de valoare pentru
~
46 47
,I
i4 LG:"ca ok atunci serie if n-ii variabile astfel Incat 0 pereche de
13. Se considers urmatorul algoritm: 15
16 numeresa nu fie afi~atii de doua ori.
;
l: intreg n, i, j: a) Ce se va .afisa pentru valoarea f) Introduceti 0 instructiune
2 c;iteste nr n=4? alternativa cu scopul de a elimina
r 3'
:4
'5, rntru
ntru i
+- 1,
-, 6 s c r i e ' ';
+- 1, n ' executa
n-iexecuta
j
b) .Scrieti un nou algoritm care va
afisa pe ecranimaginea simetrica
("riisturnatii"), fata de axa orizontala, 16. Se considers urmatorul algoritm:
operatiile inutile ale algoritmului.

r--
I

~ ;
7
.8 rntru
j +- n-i+l,n executa
9 s c r i e '*';
a celei descrise de algoritm.
c) Realizati programul PascaVC/C++
1-
2"
.:i.ntreg n, i, maxl, rnax2, x , c s
citeste n; . a) Ce valori vor fi afisate pentru n=
5 ~i numerele: 322, 3043, 39, 9,
10 corespunzator algoritmului prezentat. 3 maxl _ -1; max2 ..... -1;
11 sorie salt la linie noua d) Scrieti un nou algoritm care va 4 ntru i _ 1., nexecuta 30035 ?
r-- ,'12 5 citeste Xi Co-x mod 10i
afisa imaginea simetrica fata de axa b) Pentru n=4, determinati un set de
verticals. 6 fica c > maxl atunci date de intrare astfel incat una din
7 max2 ..... maxI; maxl _ Ci

14. Se considera urmatorul algoritm:


8
9
10 .
I:ca
. a1.tfe1. '
(c>max2)and (csemax'l )
atunci max2 ..... c;
valorile afisate sa fie -I?
c) Realizati programul PascaVc/C++
corespunzator algoritmului prezentat.
11
i intreg n,x,nr,j: ~ogic ok; a) Ce valoare va fi afisata pentru n= '12
d) Rescrieti algoritmul astfel incat sa
2 ci-teste n: fie afisat numarul de aparitii al celei
3 nr +- 0; x +- n: ok +- True;
31? 13
r ,4 b) Determinati 0 valoare a lui n 14- aerie max2, max!; mai mari cifre a unitatilor numerelor
r e peta
15 stop. introduse.

r 8
5
6
7 L nr +- nr*lO + n mod 10
n <- [n / 10];
pana cand n=O;
~ntru j ..... 2, ["nr] executa
9' L.G:"canr%j~O atunci ok_False
pentru care se obtine 0 egalitate intre
valoarea datei de iesire ~i cea ' de
intrare.
c) Realizati programul PascaVC/C++ 17. Se considers urmatorul algoritm:
,, 10 corespunzator algoritmului prezentat. 1 intreg n, if c, Xi
U d) Rescrieti instructiunile repetitive 2 citeste nj a) Ce valori vor fi afisate pentru n=
12 ea ok atunci 5 ~i numerele: 542, 32103, 3, 91,
ale algoritmului folosind numai 3 tru i 1,n executa
0-
13 serie nr/x {cu 2 zecimale}

E
14 a1t£el instructiunea conditionata anterior. 4 citeste Xi 21035
e) Determinati doua valori ale datei 5 c ..... 0; b) Pentru n=4, determinati un set de
15 serie x/nr {cu 2 zecimale}
6 up ut a
r--
16 de intrare cu proprietatea: ambele 7 c ..... c*10 + x mod 10i
date de intrare format din valori
vor conduce la afisarea valorii 1.00,
dar din considerente diferite.
8
9
10
C x ..:. [x I 100]
panacand x = 0;
serie Ci
distincte pentru care toate valorile
afisate sa fie egale?
c) Realizati programul Pascal/C/C++
11
r-' 15. Se considera urmatorul algoritm: 12";1 stop. corespunzator algoritmului prezentat.
I
d) Rescrieti algoritmul astfel incat sa
1 intreg n ,i ,j; 10gic ok; a) Ce valori vor fi afisate pentru n= contina doar instructiuni repetitive
'2 citeste n;
10? conditionate anterior.
r-t 3 ntru i +- 2, n-2 executa
,4 ok +- True; b) Determinati 0 valoare pentru care
5, ~ntru j ..... 2, ["';i] executa nu se va face nici 0 afisare.
6 L.r:'ca i % j~O atunci ok--Fa.Lae c) Determinati 0 valoare pentru care
7 1.2.3 Probleme rezolvate
vor fi afisate trei perechi de numere. '
i 8
d) Realizati programul PascaVC/C++ 1. Sa se determine eel mai mare numar care se poate forma eu ajutorul cifrelor unui

~
ntru j +- 2, [-.In-i]executa
,
9
,10 ~ca (n-i) mod j = 0 atunci' corespunzator algoritmului prezentat. numar natural citit de la tastatura.
11 L.0k +- False; e) Modificati algoritmul tara a
r-t 'iz Exemplu: pentru nr=30027 se va afisa 73200
13 introduce noi instructiuni sau

48 49

"
:....-'
Solutie: Algoritmul realizeaza numararea aparitiilor rfiecarei eifre in ordine
3. Se considerg un numar real pozitiv eitit de 'la tastatura, Sa se alcatuiasca un r 1
descrescatoare de la 9 la 0 si afisarea succesiva a aeestora.
'program care rotunje~le partea intreaga a aeestuiala eel mai apropiat intreg L...J'
'1 var nr,ap,x,i,c:longinti #include <iostream.h> divizi~il eu 10",unde peste 0 cifra din baza 10. Se considera ca numarul de eifre
2 begin ~ong nr,x,i,ap,ci ale lUlnr este mai mare deeat p:
3 readln(nr); voi.d main(){ Exemplu: pentrunumiirul13087.3 sip=2 se vaafisa 13100.3
4 £or c:=9 downto 0 do .begin cin » nr;
5 x:=nr; for (c=9; c>=O; c--) {
6 ap:=O; x=nr; Solutie: Algoritmul preluereazii partea intreaga a numarului dat. Se ealeuleazii
7 repeat ap=O; valoarea 10", Iar restul modulo 10"indica tipul rotunjirii: prin adaos sau trunehiere. t
8 if x mod 10 = c then do { I

9 inc(ap); "if (x%10==c) ap++; 1 var nr,f:real; !

10 x:=x div 10i x=x/lO; 2 #include <stdio.h>


i,ex,X,P:longint; #include <math.h>
11 until. x=O; } whi1.e (x>O); 3 begin
12 for i:=l to ap do write(c); for (i=1; i<=ap; i++). 4 readln (nr) ; f10at nr,f;
_13 end; cout « c; 5 readln (Pl'; long i,p,x,ex;
14 end. 6 void main (l { '--'
} x:=trune(nr) ;
.15 ) 7 f:=frac(nrl; scanf("%f%ld",&nr,&p);
8 eX:=l; x= (long) nr;
9 'f=nr'- (f1oat)x; i
2. Sa se determine eel mai mic numar care se poate forma ell cifrele unui numar for i:=l to P do ex:=ex*10;
natural eitit de la tastatura. Exemplu: pentru nr=30027 se va afisa 20037
10'
if x mod eX>5*(ex div lO)then
p~powl0 (p);
i f (x%p>S*(p/lO» X+=p-x%p;
J
11
x:=x+(ex-x mod ex) eJ.se x-=x%p;
12 j ,e1se
13 nr=(fJ.oat)x+f;
Solutie: Algoritmul numara aparitiile fiecarei eifre de la 0 la 9 efectuandu-se x:=x-x mod ex; printf("%.2f\n",nr);
14 nr:=x+f;
tiparirea sueeesiv. Cifrele egale eu 0 vor fi afisate numai dupa 0 cifra nenula, 15 cJ
writeln(nr:0:'2) ;
16 end.
1 var nr,ap,apO,x,i,c,w:longint; #include <iostream.h> , I
, !
2 begin 10ng nr,x,i,w,apO,ap,c;
3 readln(nr); w:=O; void main() { 4. R~alizap un program care primeste un numar real pozitiv si Ii trunchiaza partea i.,
4 for c:=O to 9 do begin cin»nr; w=O; fraellonara astfel meat cifrele ramase formeaza un sir monoton.
5 x:=nr; ap:=O; apO:=O; for (c=O; c<=9; C++){ , Exemplu: numaru13.563289 devine 3.56.
6 repeat x=nr; ap=O; apO=O;
7 if x mod 10 = c then do {
8 inc(ap}; if (x%10==c) ap++; Solutie: Algoritmul realizeazii 0 inmultire succesiva a numarului eu 10 cat timp
9
10
if x mod 10 = 0 then
inc(apO);
if (x%10==0) apO++;
x=x/l0;
ei~ z:eilor ~i cifra unitapilor eurente mentin monotonia initiala, Vari::bila okl
11 X:=X div 10; } while (x>O); codifica monotonia iniliala iar ok2 monotonia curenta, fn final, numarul este
12. unti.~ x=O; if (c!=O && ap) { lmpiirlit la ] 0 de tot atatea ori de eate ori a fost inmultit,
13 if (e<>O)and(ap>O) then begin :if (!w) {
i
14 if w=O then.begin cout « c; var x : real;
2 #include <stdio.h>
1,5 write (e) ; for (i=l; i<=apO; i++) i,k,Y:longint; #inelude <math.h>
3
16 for i:=l to apO do cout « 0; ok1,ok2:boolean; fJ.oat X;
'4 begin '--'
17 write (OJ ; ap--; w++; 5 J.ong i,k,okl,ok2,y;
18 dec(ap);inc(w); readln (x);
} 6 void main() (
19 end; for (i=l; i<=ap; i++) X:=x*lO; i:=l;
7 Y:=trunC(x*10); scanf("%f", &x); ! :
20 for i:=l to ap do write(c); cout « c;
21 end; }
9
S
ok1: =y mod 10>y div 10 mod
10;
x=x*lO.O; i=l;
y= (1.ong) (x*lO. 0) ;
U
22 end; } 10 okl~ (y%lO) > (y/lO%lO);
ok2 :=okl;
23 end. }
11 ok2=okl;
whi1e okl=ok2 do begin wh.i1e (okl==ok2) {.
12 inc (i) ;
13
14
x:=x*10; y:= t r unc(x*10);
i++;
x*=10.0; y=(long) (x*10.0);
-
ok2:=y mod 10>y div 10 mod 10;
15 end; ok2-(y%lO} > (y/lO%lO);

50
16 x:=y d..i.v 10;

51
)
x=y/10; J
£or (k=1; k<=i; k++) x/=10; 6 for i:=1 to n-1 do begin cin » x;
r-'1 -1 7 1 for k:=1to i do x:=x/10; 7 -reud.Ln (x) ; if (x<min) min=x;
~8 writeln(x:O:i) printf ("%. *fu, (int) i,x) ;
} 8 ..if x<min then min:=x; if (x>max) max=x;
19- '8lld. ..if x>max then max:=x;
9 }
20 10' end; 'x=min; y-=rnax;
.rr: x;=min;y:-=rnax; 'Whi1e (x! =y)
5. Se considera un ~ir' de nnumere naturale. Sa seafiseze numarul din ~ir a carui 12 whi1e x<>y-do i f (x>y) x-=y;
l ; descompunere contine unnumar maxim de factori primi distincti, '13' ..if x>y then x:=x-y ce1se y-=x;
Exemplu: pentru n=4 ~i numerele23 21 60 71 se va afisa 60 (contine trei factori 14 e1se y:=y-x; cout« min/y « "I" « max/y;
15 write(min div x, '/',max div x) }
primi distincti 22*3*5) 16, .end ,

Solutie: Numerele vor fi descompuse succesiv in factor; primi Iaciindu-se, dupa 7.' Se citeste un numar natural de eel mult 8 cifre. Sa 8e formeze un alt numiir din
caz, actualizarea valorii eu numar maxim de factori distincti. cifrele situate pe pozitii impare (de fa stiinga spre dreapta).
1 var #include <iostream.h> Exemplu: pentru numiirul1234 se va afisa 13.
2 n,maxf,maxn,nrf:longint; 10ng n,maxf,maxn,nrf,xx,f,i,x;
3 xx,f,i,x:longint; int ok;
Solutie: Dupii citirea numarului n se va forma oglinditul acestuia notat cu x (cu
r 4
5
ok:boolean;
begin
void main () {
cin » n; maxf=O; cifrele de la dreapta spre stanga), In final, numarul cautat se va forma din cifrele lui
6 read1n(n); maxf:=O; for (i=l; i<=n; i++) x situate pe pozitii impare, incepiind cu cifra unitatiilor,
7 for i:=1 to n do begin nrf=O; f=2;
cin » x; xx=x;
r
l ,
8
9
10'
nrf:=O; f:=2;
readln(x); xx:=x;
repeat
do {
ok=O;
j
2
3'
var n,x:longint;
begin
readln(n); ~:~O;
#include <iostream.h>
10ng n,x;
void maine) {
11 ok:=false; whi1e (x%f==O) 4' repeat cin » n; x=O;
12- whi1e x mod f=O do begin x=x/f; 5 x:=x*10+n ,mod 10 do {
~ 13 x:=x div 'f; ok=l; 6 n:=n div 10; x=x*10 + n%10;
i , 1.4 ok:=true; ) 7 until, n=O; n=n/10;
l ;
15 end; f++; 8 repeat } whi~e (n!=O);
16 inc (f) ; :if (ok) nrf++; 9 n:=n*10+ x mod 10; do {
r--; 17 if ok then inc (nrf) ; } 10 x:=x div 100; n=n*10 + x%10;
18 until n<f; whil.e (n>=f); 11 until x=O; x=x/100;
19 if nrf>maxf then begin- :if (nrf>maxf) 12 write(n); } whi1e (x!=O);
20 maxf:=nrf; maxf=nrf; 13 end. cout « n;
21 maxn:=xx; maxn=xx;
r
}
11
22 end;
i I 23,' end; }
24 writeln(maxn); cout « maxn; 8. Se considera un numar intreg citit de la tastatura, Sa se afiseze eel mai apropiat
2$ end. } numar prim fata de acesta,
r
Exemplu pentru n=22 se va afisa numarul 23, iar pentru numiirul20 se va afisa 19.
6. Se considera un sir de n numere naturale. Sa se afiseze fractia subunitara
ireductibila care se poate forma din numarul minim ~i numarul maxim din sir. Solutie: Se determina atilt numarul prim eel mai mare mai mic deciit n si cel mai
r
Exemplu: pentru n=4 si numerele 3 2 5 8 se va afisa 1/4. mic mai mare deciit n ~i se va afisa cel mai apropiat. Pentru aceasta s-au folosit
I structurile repetitive conditionate posterior al carer test verifica identificarea unui
Solutie: Se determina minimul ~i maximul din sir, Pentru a afisa fractia sub forma numar prim,
,
,
ireductibila, vom imparti numitorul si numaratorul la c.m.m.d.c.
f' var i,x,n1,n2:1Qngint; #include <iostream.h>
, ;
1 var i,min,max,x,y,n:longint; #include <iostream.h> 2 ok:boolean; void maine) {
"

2 begin 10ng i,roin,max,x,y,n; 3 begin 10ng i,x,n1,n2,ok;


3 read1n (n) ; void main ( ) { ;:4 ~ read1n (x); nl: =x; cin » X;
r 4
5
readln{min);
max: =min;
cin » n » min; max=min;
for (i=l;i<n;i++){
5
;6--
repeat
inc (n1) ;
n1=x;
do {
52 53
r
"

'7 ok:=true: n1++; ok=l; 3 readln(n); nr:=O; void main () { , I


8 for i:=2to trunc(sqrt(nl» for (1=2: i*i<=n1: i++) ,4 for i:=l to r,l. do begin cin » n; nr=O;
9 do if (n1%i==0) ok=O; 5 readln (x) ; for (i=l; i<=n; i++) -J
i

10 :if nl mod i=O then }whil.e (! ok) ; 6 while x>9 do-x:=x div 10; cin » X;
11 ok:=false; . n2=x+l: 7 nr:=nr*lO+x; whi1e (x>9) x/=10;
12 until. okr do { 8 " .end; nr=nr* 1 O+x;
13 n2:=x+l: n2--; ok=l; 9 nrl:=nr; nr2:=O; ) ,
14 repeat for (i=2: i*i<=n2: i++) .10 ~hilenrl<>O -do begin nr1=nr; nr2=O; '-'
15 dec(n2): ',if (n2%i==0) 12 nr2:=nr2*lO+nrl mod 10; ~hi1e (nr1!=0) {
16 ok:=true; ok=O; 13· nrl:=nr1 div.l0; nr2=nr2*10 + nrl%10;
17 for i:=2 -to trunc(sqrt(n2» do } "Whi..le (! ok) ; 14 .end; nr1/=10;
18 if n2mod i=O -then i f (x-n2<nl-x) 15 ..if nr2=nr then )
19 ok:=£alse: cout «·n2: 16 writeln(nr, 'este palindrom') .if (nr2=nr)
20 unti.l. ok; el.se cout « nl: 17 ef.ee. cout«nr«"este palindrom";
21 if x-n2<nl-x then writeln(n2) 18 writeln(nr, 'nu e palindroro') e1se
22 e1.se writeln(nl): 19 end. cout«nr«"nu e palindrom"; :1
i-J
23 end. 20
24
11. Se considera un numar natural de eel mult 8 cifre, Sa se scrie acest numar ca
9. Scrieti in toate modurile posibile ca suma de numere naturale consecutive, un suma fermata doar din termeni egali cu 3 si 5. In situatia in care nu exista solutie se
I 1
L.
numar natural citit de la tastatura. va'afisa mesajul "IMPOSIBIL".
.Exemplu : Pentru n~9 se va afisa : 5 + 4; 2 + 3 + 4. 1
Exemplu: pentru n~7 se va afisa IMPOSIBIL iar pentru n~16 se va afisa 5+5+3+3; , I,

&llil1k:Se genereaza perechi de numere (i,j) verificandu-se daca suma numerelor L..

din~e ele este chiar n, adica (j+,)*(j-i+ 1)/2=n. Solutie: algoritmul de rezolvare al problemei determina numarul termenilor egali
cu 5 astfel incat restul sa fie div'izibil cu 3. In caz contrar problema nu admite 11
: i
j" .var i,j,k,n:longint; *include <iostream.h> solutio. LJ
2~ begi.n long i,j,k,n;
3' readln (n) ; void roain() { 1 var x,nS,n3,i:longint; #include <iostream.h>
4 for i:=1 to n div 2 do cin » n; 2 begin long x,i,n3,nS; . , 1
5 for j:=i+l to'n do for (i=l; i<=n/2; i++) 3 read(x); nS:=O; n3:=0; void main() {
,

6 if (j+i)*(j-i+l)/2=n then for (j=i+l; j<=n; j++) 4 while (x mod 3<>O)and(x>=S)do cin » x; n5=O,; n3=O; L..J
7 begin if((j+i)*(j-i+1)/2==n) 5 begin while (x%3 && x>=5) (
8 for k:=i to j-l do for (k=i; k<j; k++) 6 inc(nS); n5++;
9 write<k,'+'); cout « k « "+"; 7 x:=x-S; x-=5; I, ,'

10 writeln(j, '=',n); cout «j«"="«n« endl; 8 end; )


, '
~
11 end; 9 n3:=x div 3; n3=x/3;
12 end. 10 i f x mod 3<>0 then i f (x%3)
11 write('IMPOSIBIL') cout « "IMPOSIBIL";
10. Se considera un sir de n (n<IO) numere naturale. Sa se verifice daca numarul 12 else begin e1se {
-J
13 for i:=l to nS do for (i=l; i<=nS; i++)
format din primele cifre ale acestora este un palindrom.
14 writerS, '+'); cout « 5 « "+";
Exemplu: pentru n=5 ~i numerele 123,435,92,4002, 10 se obtine numarul 14941 15 for i:=l to n3 do for (i=l; ~<=n3; i++)
care este palindrom. ' 16 write(3,'+');_ cout « 3 « "+";
17- write(#8,' '); )
18· end;
&llil1k: Se determina succesiv cifrele semnificative ale numerelor din sir prin
:t.9.' end.
)

impartiri la 10 pana cand se ajunge la valori rna; mici sau egale cu 9. Cu aceste
cifre se formeaza un nou numar care se verifica daca este palindrom.
12. Realizati un ,program care afiseaza pe ecran ,n caractere "*,, asezate sub forma
1 '\ ,var. nr, nr1, nr2, n, x , i: longint; #include <Lcst.reem. h> unul triunghi isoscel (trapez) ca in exemplul urmator:
1_2 beg~n
Ilong nr,nrl,nr2,n,x,i;
54 55
,,
c-, Pentru n~16 se va afisa Pentru n ~ 12 se va afisa
!
I
.....
• *•
~*** 1.2.4 Probleme propuse
***** ******
n ******* 1. Realizati un program care, pentru un numar natural n calculeazii produsul
i, Pentru n=5 se va afisa IMPOS1BIL. primelor n numere naturale pare. Algoritmul va fi reprezentat in l'seudocod.
Cerinta problemei este ca primul randafisat sa contina unul sau eel mult doua Exemplu: Pentru n=2 se va afisa 8 adica 2*4
caractere, iar fiecare linie sa difere de precedenta prin exact doua caractere,
r Solutie: problema admiie solutio daca numarul n poate fi scris ca suma de numere
2. Realizati un program care citeste de la tastatura n numere naturale si determina
media aritmetica a numerelor prime.
LJ pare sau ca suma de numere impare deci trebuie sa respecte una din urrnatoarele
Exemplu; Pentru n~3 si numerele 4, 5 si 7 se va afisa 6.00
doua forme: n=k*k sau n~k*k+k;
r Cazula) 3. Citind de la tastaturii n numere naturale sa se calculeze produsul celor care sunt
L; n= 2+4+6+...+2*k= 2*(1+2+3+...+k)= 2*k* (k+ 1)/2= k* (k+ 1)= k*k+k, unde k va primecu n.
reprezenta numarul de linii pe care se va face afisarea, Exemplu: Pentru n=3 ~i numerele 4, 5 ~i 6 se va afisa 20
r Cazul b)
n=1+3+...+2*k+1= (1+2+3+...+2*k+ 1)-(2+4+6+...+2*k)= (2 *k+1)*(2*k+2)/2- 4. Pentru un numarx sa se afiseze ultimii p divizorii proprii ai lui(diferiti de I si de
k*(k+1) = k*k+2*k+I=(k+I)*(k+1) unde k+1 reprezintii numarul de linii pe care se el msusi). Daca numarul n are mai putin de p divizori se vor afisa toti,
va face afisarea. Exemplu: Pentru n~24 si p~2 se vaafisaB 12

l i
.2
I
var n,k,i,j,l,ll:integer;
ok:boolean;
*include <iostream.h>
#include <math.h>
5. Realizati un program care calculeaza media aritmetica a tuturor numerelor
3 J.ong n,k,i,j,l,ll,ok; palindrorn din intervalul [a.b].
r 4 begin Exemplu: Pentru a~8 si b~13 se va afisa 933
5 write('N = I). void main ( ) {
I. 6 readln(n) ; cin » n;
6. Realizati un program care permite afisarea primelor n puteri ale lui 2 care apartin
7 k:=trunc(sqrt(n»; k=(int) sqrt{n); ok=O;
c-, 8 ok:=false; if (k*k==n) { intervalului [x,y].
9 if k*k=n then begin l~k-l; ll~l; Exemplu: Pentru n~2 ~i intervalul [5,40] se va afisa 8 16
10 l:=k-l; ok=l;
11 11:=1; }
7. Realizati un program care pennite afisarea valorilor urmatoarelor expresii, in
12 ok:=true; e1se if (k*k+k==n)
care n este un nurnar natural strict rnai mic ca 9, citit de la tastatura,
!,
13
I,
end
eJ.Be
l~k-l;
11=2; E1~12+23+34+...+ n(n+l)
L j 15 if k*k+k=n then begin ok=l;
16 l:=k-l; } E2=1+ 12+123+1234+... + 12...n.
17 11 :=2; if (ok) {
r 18 ok:=true; for (i=l; i<=k; i++) { 8. Se considera un numar n citit de la tastatura, Realizati un program care sa
19 ena; for (j=l; j<=l; j++)
20 .:if ok then begi.n cout « If It; permita afisarea pe ecran a unor caractere dispuse ca in exemplul urrnator:
21 for i: =1 to k do begin for (j=l; j<=ll; j++)
c-,
, 22· for j:=l to 1 do cout « "*"; Exemplu: pentru n = 5 se va afisa :
23 write t ' 1 l ; cout « endl;
23 for j:=l to 11 do 1--; 11+=2; aJ bl cl dl
'25 write('*') ; }
r-r- 26· writeln; } * * * * * * * * * *
27· 1:=1-1; 11:=11+2; e1se cout « "IMPOSIBIL";
* 1
I
* * ** * * * * * * * 1 2
J 28 end; } * * * * * 123
29 end * * * * * *
* * * * * * * * * * * 123 4
30 .J.88 writeln('IMPOSIBIL'); * * * * * * * * * * * 1 2 3 4 5
Ii i
'31 end.
• J
56 57
r-r-
~I

'i,

\i','!J Scrieti un program care citeste de la tastaturli n numere naturale nenule(<32000)


'~hafi~eazii numarul format prin alipirea cifrelor numarului maxim cu eel minim (in
aceasta ordine).
Exemplu:
r Exemplu:
- Pentru n=3~i notele: 8, 6, 8, 10, 8, 8 se va afisa :
'Media clasei oeste'S, Niciun elev corigent, Media maximaeste 9'
c.J

LJ
I

Pentru n=3 ~i numerele 63, 153 ~i 62 se va afisa 15362 18. Citind de la tastaura n numere naturale, sa se calculeze media armonica a lor. ,
, ,
Aceasta medie se calculeazii dupa formula: ~

10. Cunoscandu-se limitele intregi a, bale unui interval ~i un ~ir de n valori, sa se n


realizeze un program care determina media aritmetica a numerelor citite, pentru I I I • !
,
_care suma cifrelor apartine intervalului [a,b]. - + - + ... + - -
nrl nr2 nrN ...J
Exemplu: Pentru a=2, b=IO, n=5 ~i valorile 11,39,32,-80,84 se vaafi~a41.00.

11. Sa se realizeze un program care afiseaza pe ecran toate modalitatile de scriere a 19. Se considera un sir de n perechi de numere naturale care reprezintii limitele
valorii Sea suma de trei termeni nenuli distincti. intregi ale unor intervale. Citirea intervalelor se face in ordine crescatoare a .;
Exemplu: Pentru .5'=8 se va afisa : limitelor inferioare ale intervalelor. Realizati un program care afiseaza:
8=1 +2+5 numarul de intervale disjuncte cu primul interval citit.
8=1 +3 +4 numarul de intervale incluse in primul interval citit.
...J
12. Se citeste de la tastatura un sir de n numere. Realizati un program care-verifica Exemplu: Pentru n=5 si intervalele: (2,6) (3,7) (3,5) (10,12) (15,29) se va afisa : 2 I
daca numarul format din cifrele unitatilor acestora este un numar prim. (doua intervale disjuncte cu (2,6) ~i un interval inelus In (2,6»
Exemplu: Pentru n=4 si numerele 23723 453 II se va afisa : Numarul 7331 este .J
prim. 20. Sa se afiseze cele mai mari doua numere prime strict mai mici decat numarul
natural n (n>4).
13. Se citesc de la tastatura n numere naturale. Afisati numarul de triplete de valori Exemplu: Pentru n=19se va afisa 13 si 17
citite consecutiv care pot reprezenta laturile unui triunghi. '-'
Exemplu: Pentru n=5 si valorile: 10,3,4,5,7 se va afisa 2 (3, 4, 5~i 4,5,7) 21. Se considera un numar n citit de la tastatura. Sa se reaIizeze un program care
afiseaza pe ecran cifrele pare ale acestuia in ordinea inversa a aparitiei, separate
14. Sa se afiseze toate tripletele de numere pitagorice mai mici decat un numar prin cate 0 virgula,
Exemplu Pentru n~1234 se va afisa 4,2 ..J
n dat.
rl

15. Se citesc de la tastatura preturile a n obiecte achizitionate de 0 persoana, 22. Se considera un numar natural 11" Sa se fonneze doua noi numere, until format • I

Valorile citite sunt distincte. Sa se afiseze preturile celor mai scumpe doua obiecte din cifrele pare ale lui n, celalat format din cifrele impare. U
cumparate, Exemplu: Pentru n=13854 se va afisa 84 ~i 135
Exemplu: Pentru n=5 si valorile 18000,230, 190000, 2400, ~i 2000000 se va afisa: , 1
, I

190000 si 2000000 23. Se considera un numar natural n (n> I000). Sa se afiseze cele doua numere i
formate prin "injumatatirea' scrierii zecimale a lui n. ~

16. Se cunosc notele a n elevi la un extempora!. Sa se afiseze care este nota Exemplu: Pentru n=12345 se va afisa 12 si 345. Pentru n=182345 se va afisa 182
maxima Ia test ~i de catre cali elevi a fost obtinuta. ~i 345.

Exemplu: ..J
Pentru n=7 si notele: 4, 6, 4, 8, 8, 5, 8, se va afisa : 'Nota 8 obtinuta de 3 elevi'. 24. Se considera un numar natural n (n> I00). Sa se afiseze cifrele lui situate pe
pozitii impare incepend cu cifra unitatilor, Exemplu : Pentru n=1235 se va afisa 52 - 1
17. Pentru fiecare elev din cei n inscrisi intr-o clasa se eunose cele doua note
obtinute la educatie fizica. Realizati un program care determina media pe clasa la 25. Se considera un numar n natural (n>I00). Sa se afiseze suma primelor doua u
educatie fizica, numarul elevilor corigenti ~i media maxima obtinuta in clasa, cifre ale lui n,
Notele obtinute de un .elev vor fi citite succesiv. Exemplu : Pentru n= 1235 se va afisa 3 ~ :
, ;

L
58 59
· I,
,,
~

26. Se considera un numar n natural. Sa se afiseze eel mai mic multiplu par .al
Exemplu:
Pentru n~7 si m~50 se va afisa: 9 II 13.....59
numiirul format din prima ~i ultima cifra a acestuia.
Exemplu: Pentru n=1235 se va afisa 30 35. Realizati un program care, citind de Ja1:astaturii un· numar n, afiseaza puterile
lui nmai mici decat 30000.
27. Se considera un nurnar natural n (n> I 000). Sa seafiseze numarul format din
cifrele pare ale lui n situatepe pozitii impare tncepand cu prima cifraa sa. 36. Realizati un program care afiseaza 'cifrele unui numar natural x in urma
Exemplu: Pentru n=724582 se va afisa 48 conversiei sale in baza b (b5.9).
,
~

Exemplu:
28. Se considera un numar naturaln (n> 1000). Sa se afiseze numiirul de aparitii a
Pentru x=128 si b=7 se va afisa: 242.
cifrei unitatilor in scrierea lui n.
~ Exemplu: Pentru n=15535 se va afisa 3 (5 apare de 3 ori)
37. Se citesc de la tastaturii doua numere. Realizati un program care 11 afiseaza pe
eel care are un numar mai mare de cifre de 1 in scriereain baza 2.
29. Se considera un numar natural n (n>1000). Sa se afiseze cea mai mare cifra
care apare in scrierea lui n si numarul de.aparitii al ei,
38. Se introduc de la tastatura numere, cat timp ultimul citit nu este egal cu suma
Exemplu : Pentru n=19539 se va afisa "9 apare de 2 ori"
precendentelor doua. Sa se calculeze suma numerelor citite.
I ;
Exemplu: Pentru valorile 3, 5,2,4,6 se va afisa 20
30. Sa se afiseze toate numerele pare Incepand cu valoarea 2, cat timp suma eelor
afisate nu este mai mare dedit numarul n natural citit,
:' 39. Se citeste de la tastatura nn numar n. Sa se afiseze pe 0 singura linie primele n
Exemplu: n=15 se va afisa 2 4 6
,, numere prime.
Exemplu: Pentru n=4 se va afisa 2,3,5, 7
.31. Se citeste de la tastatura un numar n impar. Sa se afiseze primele n perechi de
~,
, numere consecutive a carer suma este divizibila cu nurnarul n.
I
40. Se considera un nurnar n. Daca numarul format din primele luidoua cifre este
Exemplu: Pentru ·n=3 se va afisa:
perfect, atunci se va afisa numarul total de cifre al lui n, in caz contrar se va afisa
12 numarul de cifre pare pe care Ie contine,
45
r
i :
78
Un numar este perfect -dadi suma divizorilor sai, strict mai mici, este egala cu
numarul respectiv: 6=1+2+3.
i ;

32. Se considera un numar n. Daca numarul este palindrom se va afisa numarul Exemplu:
formatdin cifra zeeilor lji cea a unitatilor, in caz contrar se va afisa primacifra a sa. Pentru n=28413 se va afisa numiirul5; Pentru numiirul4914 se va afisa numarul Z,
rI
Un numar este palindrom daca este egal cu numarul obtinut cu cifrele citite de la
i 41. Se citeste de la tastatura, un sir de n numere naturale. Realizati un program
dreapta spre stanga,
Exemplu: pentru determinarea numarului din sir cu cei mai multi divizori,
ri
,
Pentru n=31413 se va afisa numarul 13 ;
I Pentru numiirul3214 se va afisa numarul J 42. Se citeste de la tastatura, un sir de n numere reale. Realizati un program care
determina numarul de aparitii al celui mai mare numar prim din sir,
r 33. Realizati un program care citind de la tastatura un numar real, afiseaza succesiv
cate un numar mai mic cu 2 decat ultimul afisat, incepand cu valoarea citita. Lista 43. Se citeste de la tastaturii, un sir de n numere reale. Realizati un program care
continua dit timp valorile afisate sunt pozitive. determina suma maxima a doua numere din sir.
Exemplu: Pentru n=7.01 se va afisa: 7.01 5.01 3.01 1.01 Exemplu:Pentru n=4 si valorile 8, 3,85 se va afisa 16.

34. Se citesc de la tastatura doua numere naturale n ~i m. Realizati un program care 44. Se citeste de la tastaturii, un sir de n numere naturale. Realizati un program care
afiseaza 0 lista de numere impare consecutive, cat limp diferenta dintre primul si determina numarul total de cifre al tuturor numerelor prime din ~ir.
ultimul numar din lista nu este mai mare decat m. Lista va incepe cu primul numar
impar mai mare decat n.
61
60
I'
~

l~

45. Se considers un numar natural n. Sa se reaIizeze un program pentru


55. Afisati toate numerele naturale nenule de la 1 la n 2 in ordine crescaroare, cate n
determinarea numarului perechilor (a,b) de numerenaturale (a.b ~) ce .au pe un rand (separate prin cate un spatiu), ~,
proprietatea ca a si b sunt prime intre ele. Exemplu: Pentru n=4 se va afisa
1234
46. Se considera un numar natural n, (100 .s n), format din maxim 9 cifre.Realizati 5678
un program care verifica daca numarul n este "bine ordonat". Numerele "bine 9101112
~
ordonate" sunt cele care au proprietateaca cifrele lor.apar fie in ordine crescatoare, 13141516
fie descrescatoare,
'56. Se dau doua numere naturale nenule cu eel mult 10 cifre. Se cere sa se afiseze !
47. Sa se alcatuiasca algoritmul care permite afisarea factorilor primi sia puterilor cifrele comune, . '-'
la care acestia apar in descompunerea unui numar natural n, dat. Exemplu:
Pentru numerele 12323234 ~i 657284 se va afisa 24.
48. Se introduc de la tastatura n numere intregi. 'Afisati pe ecran care dintre ele au
57. Fie doua cifre zecimale a si b. De la tastatura se va introduce un sir de numere ~
suma cifrelor egala ell numarul de ordineavut la citire.
Exemplu: naturale, citirea tenninandu-se ell 0 data cu introducerea valorii O. (care nu va face
\, Pentru n=5 si numerele 2,101,23,3001,234 pe ecran se va afisa 2(101' ~i 3001). parte din sir), Sa se afiseze numarul de valori citite cu proprietatea ca au in scrierea 'i
zecimaUi suecesiunea de cifre abo I
~-"
\ "\ Exemplu: l_·j
fii~~<Se considera trei numere naturale n, a si b (asbsn). Sa se creeze un program
';"it' permite.afisarea factorilorprimi ce apartin intervalului (a, b) ~i a puterilor la Pentru a=2, b=4 si valorile 2342,420, 8248, 15264, 24245, 0 se va afisa 2
care cestia 'apar in descompunerea lui n.
Exemplu: pentru n=36, a=l, b~IO se va afisa:
58. Fiind dat un numiir natural de maxim 9 cifre, sa de determine Intre care din w
cifre Se'poate piasa 'operatom] de inmultire astfel lncat produsu1 celor doua numere
2 exponent 2 obtinute sa fie maxim.
3 exponent 2 Exemplu:
Pentru valoarea 3203 se va afisa 320*3 = 960. -'
50. Se citeste de la tastatura un sir de k intervale, pentru fiecare fiind introduse cele
doualimite [a.b] unde a<b numere intrclgi. Alcatuiti un program' care sa permita 59. Se citesc de la tastatura mai multe siruri de numere intregi, fiecare terminandu,
afisarea Iimitelor intervalului ce contine cele mai multe valori intregi. se eu valoarea O. Operatia de citire se incheie la introducerea valorii 0 de doua ori
Exemplu: consecutiv. Determinati eel mai mare nurnar prim din fiecare sir sau ~ 1 daca nu
J
Pentru k=4 ~i sirul de numere: 2 6 48 3 22 5 10 se va afisa intervalul (3 22). exista numar prim.
Exemplu:
51. Creati un program care sa simuleze urmatorul joc: doi -partencri introduc
Pentru ~ irul 3 5 630 5 6 9 I I 033 0 17 0 13 15 03 4 5 6 70 5 0 0, se va afis a 5, ~-J
alternativ cate un caracter de la tastaturii. Pierde acel jucator care a introdus un I I, -1,17,13,7,5
caracter identic cu ultimul introdus de el sau de partenerul sau,
60. Sa se aflseze primele n numere naturale care au cifra de control egala eu eifra x
r !
.52. Afisati primele n perechi de numere prime'consecutive pe multirnea numerelor I !
citita de la tastatura, Cifra de control a unui numar se obtine prin insumarea cifrelor C-'
impare. Exemplu: pentru n=3 se va afisa (3,5), (5,7) (11,13).
din scrierea zecimaUi a numarului, apoi se insumeaza cifrele acestei sume, s.a.m.d
53. Se dau doua numere naturale nenule a ~i ncu eel mult 10 cifre, Se cere sa se pana cand suma obtinuta este exprimata printr-o cifra. De exemplu numarul 28997 ,
,
are cifra de control 9 (2+8+9+9+7=35, 3+5= 8).
afiseze ultima cifra a puteriid'. Exemplu:
Exemplu: Pentru a= 1222223 si n = 180 se va afisa 1.
Pentru n=2 si x=3 se va afisa: 3, 12
r 1
54. Pentru n numar natural nenul cu eel mult 5Cifre se cere sa se determine in cate
cifre de 0 se termina produsul l-z- ... ·n. ~J

Exemplu: pentru n,=16 se va afisa 3


I T

62 '-'
63
i ;

:~ III Probleme de concurs ce proceseazii date simple 2. (Numiir de valori divizibile cu 3 -**) Fie sirul de numere I, 12, 123, 1234,
,
,
. ,
... 12345678910,.... Considerandu-se primelen numere ale acestui ~ir, trebuie
determinat numarul de-numere care sunt divizibile cu 3.

,,"
1.3.1 Probleme rezolvate Exemplu: Pentru n=5 scva afisa 4.

,
, ,
1. (Pomi - *) Se considera un sir de n<IOO.OOO copaci numerotati cu numerele de
la I la n. Un copil mai niizdravan .concepe un joe dupa urrnatoarea regula. In primul
Solutie:
Se cauta 0 regula pe care 0 respecta asezarea numerelor divizibile cu 3 in sirul dat,
minut al jocului copilul se ascunde dupa copacul I, la minutul doi in spatele ~i se observa ca atunci cand restullui n este 0 sau I raspunsul este 2*(n div 3), iar
copacului 2, s.a.m.d. Sensul de deplasare al copilului se schimba daca minutul in cand restul este 2 raspunsul este 2*(n div 3)+ I.
care se afla este un numar divizibil cu 6 sau are ultima cifra 7.
,~ 1 intreg n r
I
l ; . De asemenea, jocul inceteaza daca nazdravanul nostrueste pus sa iasa in afara 2 eiteste nr
sirului de n pomi, adica respectand regula de deplasare copilul ar trebui sa se 3 faea (n mod 3=0) sau (nmod 3=l)atunci
4 seri.e 2* (n div 3)
ascunda in spatele copacului 0 sau n+ I. 5 a1.tfe1.
6 serie 2*{n div 3)+1;.
Minut Porn Minut Porn Minut Porn Minut Porn 7
8 stop.
I I 6 6 II 9 16 6
2 2 7 5 12 10 17 5
i 3 3 8 6 13 9 18 6 3. (987654321 - **) Pentru un numar n dat, trebuie sa realizati un program care
4 4 9 7 14 8 19' 5 afiseaza cate numere de n cifre din baza 10 au proprietatea ca patratul lor se
5 10 8 15 7 20 4 termina in secventa de cifre: 987654321. . '
~

!
5

Sa se determine care este copacul in spatele caruia se ascunde copilul la momentul Numarul n se va citi de la tastatura ~i va avea maxim 6 cifre.
k<100.000. Daca jocul a fost intrerupt inainte sau la momentul k, atunci se va scrie
r valoarea O. Solutie:Observatia de baza este "Cii ultimele 9 cifre, care ne intereseaza, ale unui
l ; 4 patrat sunt influentate doar de ultimele noua cifre ale numarului ce va fi ridicat la
Exemplu: n-10 k~20.
patrat, Astfel, dupa 0 simpla cautare, pentru n=9 exista 8 numere care ridicate la
1
r patrat se termina in 987654321 (111111111, 888888889, etc.) Astfel pentru n>9
!
Solutie: Se vor simula miscarile copilului respectand regulile impuse in enunt, raspunsul va fi 8*9* 10,,10 (prima cifra trebuie sii fie diferita de 0).

1 intreg n, k; 1 intreg n , i;
r' 2 eiteste n, k; 2 eiteste nr
3 paz +- 0; 3 ea n < 9 atunci serie 0
.
: 4
5
6
[ntru
s ens +- 1;
i _ 1, k executa
" paz +- paz + sens;
4
5
6
rea atunei serie
a1.tfe1.
n ~ 9
a1.tfe1
8

7
8
9
daea (i mod 6=0) sau (i mod 10=7) atunci
sens +- sens * -1;
daea (poz<l) sau (poz>n) atunci
7
8
9.
centra
serie 72
i ... 1, n-10 executa
serie 0
10 serie 0; stop. 10
11
11
12 serie paz; 12
13 stop.

64
65
,

I 1
~

r 1
4. (Numere aproape prime - **) Definim un numar "aproape prim" un intreg 1 intr6lg n;
pozitiv care 'poate fi scris ca produsula doua numere prime. Dandu-se 0 secventa 2 ci teste n s , ,
3 ,serie 1 + n*(n + 1) div 2; '-'
de n<11 mtregi pozitivi de celmult 9 cifre, realizati un program care afiseaza ~ 'Stop.
pentru fiecare dintre ele mesajul "DA" daca numarul este "aproape prim ~i 'NU'in
'caz contrar.
6. (Nwniiriitoare - ***) Determinati numarul de valori dintr-o secventa de N , I
Exemp/u:
numere naturale cel mult egale cu 10.000, care dupa.ridicare la puterea M se vor '-'
divide cuK. (0 <N, M, K < 10.001)
I~
n~2

6
8 Exemp/u:

N=4 ,M=2 K=50 1


Solutie: Se factorizeaza fiecare numar citit ~i se numara eati faetori primi are ~i se . 9 10 11 H 1
I :

afiseaza mesajul corespunzator,


So/utie: Fiecare numar este ridicat la puterea M pastrand la fiecare pas restul ~
1 intreg n, i, nr, c;
2 oiteste n;
impartirii la K, nu intregul numar, Pentru a face ridicarea la putere eficient ne
3 Intru i _ 1, n exeouta folosim de relatiile: a"=(a')' ~i a'P+}=a*a".
4 oiteste nr; c _ 0; -'
5 'pentru d _ 2, -.Jnr exeouta 1 intreg n, m, k, i, j, nr, b, aux,rez;
c a nr mod d ~ 0 atunci

r
6 .2 citeste n, m, k; ( -:
7 . c _ c + 1; 3 rez _ 0;
8 rat_timp nr mod d = 0 executa 4 Intru i _ 1, n -exeoutia
~
9
10
L. nr - nr div d; 5 eiteste, nr;
aux _ nr; b _ 0;
6'
.rz 7 a t timp aux > 0 executa
12 8 aux. _ ~ux di.v 2;
13 c:aoa nr > 1 atunci c _ c + 1; 9 b _ b + 1; ...J
[
14 10
15 ~ea c = 2 atunci sorie "DA" 11 aux _ 1;
16 t:J.tfeJ. seri.e "NU" 12 e n t ru j~_b-l, 0, -1 executa
17 13 aux _ (aux*auxl mod k; w
18 14 ~ca bitul j al lui nr = 1 atunci
15
[
L. aux - {aux*nrl mod k;
16
5. (Trasarea liniilor - ***) Se considera 0 foaie de hartie pe care Gige! va desena 17
linii. Trasand 0 singura linie el imparte foaia de hartie in doua zone. Daca va trasa 18 ~ea aux=O atunci
2 linii el poate obtine 2(linii suprapuse), 3 sau chiar 4 zone. 19 L. rez - .r ez + 1;

-1 1- qsy -8 ~
20
21
22 sorie rez; stop.

7. (Trepte - ***) 0 persoana trebuie sa coboare 0 scara Cll N<40 trepte numerotate .
~

Determinati care este numarul maxim de zone in care poate fi impfu1:ita foaia de 1, 2, ... N. Stiind ca la fiecare pas persoana poate sa coboare una sau doua trepte : ~
hartie trasand n linii (0<n<35000). determinati in cate moduri poate cobori scara. Exemplu: '-J

Exemplu: Pentru n=3 se va afisa 7


N=3 12
Solutie: Se observa ca numarul de moduri in care se urea 0 scara eli N trepte este 1.J
So/utie: Daca am trasat k lin ii, putem trasa a k+ l-a linie, astfel incat sa intersecteze egal cu numiirul de moduri in care se urea 0 scara cu N-l trepte (pas de l) adunat
toate cele k linii trasate anterior, astfel formandu-se inca k+ 1 zone. Astfel, formula ell numarul de moduri in care se urcao scara ell N-2 trepte. In concluzie, raspunsul
pentru numiirul de zone va fi 1+1+2+3+...+n=l+n*(n+1)/2. este eel de-al N-Iea termen al sirului Fibonacci. i :
w'
66 67
I I

1 intreg n,a,b,c,i;
I
ai.teste n; 9. (Virus - '***) La laboratorul de cercetari genetice din Lugoj, in urma unor
! 2
,
I
I
• 3' a ..... 1; b,"'" 1; experiente nereusite, un virus a suferit mutatii, Ca urmare, exista trei tipuri de

,: 4
5
6
~ca n .~ 1 atunci. seri.e a;

r:aca n = 2 .atunc.i seri.e b;


virusi: virusul initial (11 vom numi virus de tip A) ~i doua tipuri de virusi mutanti (ii
vom numi virusi de tip B sivirusi de tip C). Pentru a studia comportamentul
virusilor, cercetatorii au izolat intr-un mediu steril un virus de tip A, un virus de tip
, 7
e n tru i ..... 3, n --executa B si un virus de tip C ~i au observat ca la fiecare secunda se produc urmatoarele
8
9 c ..... a + bi transformari:
::
, I
10 a 4- hi • orice virus de tip A se divide si se obtin un nou virus de tip A, un nou virus
11 [ b ..... c;
12 de tip B ~i un nou virus de tip C.
13 serie'" c; stop. ., dintr-un virus de tip B ~i un virus de tip C se obtin trei noi virusi (unul de tip
, C ~i doi de tip B).
:: 8. (Majoritar - ****) La alegeri au participat N<l.OOO.OOO alegatori fiecare De asemenea, cercetatorii.au observat ea virusii nu mar.
exprimandu-si votu1 sub forma.unui numar care reprezinta codul candidatului ales.
Sa se determine daca exista un candidat care este majoritar, adica numarul de Sa se determine numarul de virusi de fiecare tip, existenti dupa N<26 secunde.
r aparitii ale codului sau este mai mare decat N12. Se presupune ca un astfel de
; candidat exista. Exemplu: Exemplu:
C. .J
N=7 1
N~2 I 4A, 12B Be
1131211 (Concurs "Grigore MoisiI", Lugoj 2001, cis. V-VI)
1
,
~
'

1 j Solutie: Vom parcurge sirul 0 singura data si vom retine 0 variabila c pentru Solutie: Se sirnuleaza evolutia populatiei de virusi timp de n secunde, determinand
candidatul considerat curent majoritar si nr nurnarul de aparitii necontracarate ale' la fiecare moment cati virusi exista din fiecare tip.
~ candidatului. La inceput consideram cii primul elemerit din sir este majoritar. La
I 1 intreg n,i,a,b,c;
fiecare pas, verificam daca numarul curent este egal eu candidatul sau nu si 2 _ aiteste n; .
modificam numarul de aparitii In functie de asta. Daca numarul de aparitii ajunge
[ntru n
I I
3- a ..... 1; b _ 1; c ..... 1;
la un moment dat 0, cu siguranta nu am gasit candidatul majoritar si schimbarn 4 i ..... 1, executa
~
valoarea variabilei c ell DUmaTU1 curent citit. 5 b b + 2*c + a;
,
I
6 c 2*c + a;
: 1 intreg n, i, c , ur; 7 a 2*a;
:2 ci.teste n; 8
Q serie a,b,c; stop.
n
, I
3
4 i
c ..... -1; nr
ntru L
1;
1, n executa
lj 5 eiteste x; 10. (Broasca - **) 0 broasca se deplaseaza efectuiind cate 0 saritura de lungime p

~
, I
6,,'
7
rca x ~ c atunci.
. nr ..... nr + 1;
em la fiecare secunda. Dupa fieeare n secunde broscuta devine mai obosita, iar
lungimea sariturii pe care 0 face se Injumatate~te. Scrieti un program care citeste
8 altfel
( .~
i 9 nr ..... nr - 1; numerele naturale mai mici ca 30.000, p, n, si T - durata totala a deplasarii
10 broscutei exprimata In secunde si care afiseaza distanta totala pe care a parcurs-o
11 caea nr = 0 atunei 'broscu\a cu doua zecimale. Se stie ca Tin < 16.
" 12
13
c _ x; nr ..... 1;
i: 14 Exemplu:
15 serie c; n=10 \35750.00
16 stop. p=20
-I
I
i T=33
(Olimpiada Nationala de Informatica Gimnaziu, Galaciuc2001, cis. V)

Solutie: Se simuleaza miscarea broastei pas cu pas, adunand la fiecare n secunde


Ii numarul de eentimetri parcursi de broscuta,
I: 68 69
~
~ Ill,'I! ,
1 intrE!9 n , t;
2 real d, p; b) Pentru a fi ciit mal multii liniste la premiere, in Consiliul Profesoral se ia decizia I1
I '
3 citeste n, P, t: ca elevii care nu vorfi premiatt sa fie asezati pe terenul de sport pe randuri de cate
4 d ..... 0: pelev~ (unde p'=k).1n acest seop, directorul a numerotat elevii neprerniati de la 1 1' 1,"1¥"I. I..
.,r!
a t timp n .s t ,executa
.5 la k ~l a howiit ca elevii sa fie asezati in ordinea descresciitoare a numerelor
6 d +- d + n*p; asociate. 1',1:1·..:
7 p p*O.5:
"8 " [ t t - n; Scrieti un program care: I.i.:Ir
)',

9
10 d +- d + t*p; citeste de la tastatura n, numarul de elevi din scoala;
determine ~i afileazii peecran numarul de elevi premiati;
,'I,II~';" ,'
11 serie dr
afiseaza pe ecran modul de.asezare a elevilor nepremiati
I'I.
!';

I
!.~f:
,'

c .""',"'
,
;

:] ~~":
l.'3.2Probleme propuse Exemplu:
'Iii!:
n=35 Numaru1 de e1evi premiati: 10 II" I
~! I, ' !

Elevii nepremiati: il'ir-",


1,,1
1. (Cercetasi -**J In zona Vrancea exista doua grupuri de cercetasi, cu sediul in 25 24 23 22 21 Iii;:'

doua regiuni (Galaciuc si Soveja). Cercetasii din Galaciuc sunt organizati in DI 20 19 18 17 16


15 14 13 12 11
i"
detasamente a care NI cercetasi fiecare. Cercetasii din Soveja sunt organizati in D2 :'1(' ,
i!I,W
10 9 B 7 6
detasamente a cate #2 cercetasi fiecare. in unna unui ordin de la Organizatia 5 4 3 2 1
I,":'
ii"
Europeana a Cercetasilor, trebuie ca toate detasamentele din zona Vrancea sa fie (Olimpiada Judeteanade Informatica Gimnaziu, 2002, cis. V)
formate din acelasi numar de cercetasi,
Pentru indeplinireaordinului, trebuie reorganizate detasamentele din fiecare 3. ($Ir - **J Se considera urmatorul sir de numere naturale:
regiune, tara a deplasa cercetasi dintr-o regiune in alta. 7,17,37,47,67,97,107 127, 137, 157, 167, ...
Deduceti regula dupa care sunt generatitermenii sirului si afisati pe ecran al N-lea
Scrieti un program care citeste DI, NI, D2, N2 « 1000) ~i care sa afiseze numarul (N < 2001) termen dinsirul de mai sus.
de cercetasi din fiecare detasament dupa reorganizare, cat mai mare posibil si cate Exemplu:
detasamente S6 formeaza in zona Galaciuc si cate detasarnente se forrneaza in zona N=10
[157
Soveja. (Concurs "Grigore Moisil", Lugoj 2001, cis. V-VI)

Exemplu: 4. (Balaur - **) A fast 0 data un balaur cu 6 capete. Intr-o zi Fat-Frumos s-a
suparat ~i i-a taiat un cap. Peste noapte i-au crescut alte 6 capete In loc. Pe acelasi
0:1.=3 Nr. de cercetasi. di.n fi.ecare
N1.=J.5 detasament: 9 gat! A doua zi, Fat-Frumos iar i-a taiat un cap, dar peste noapte balaurului i-au
D2=2 Nr. de detasamente di.n GaJ.aciuc:5 crescut in lac alte6 capete ... ~i tot asa timp de n zile. In cea de a (n+ 1)-a zi, Fat-
N2=lB . Nr. de detasamente din Soveja: 4 Frumos s-a plictisit li a plecatacasal
(Olimpiada Nationala de Informatica Gimnaziu, Galaciuc 2001, cis. V) Scrieti ~n program careciteste de la tastatura n, numarul de zile, si care afiseaza pe
ecrancatecapete avea balaurul dupa n zile.
2. (La ~coalii - oOJ Directorul unei scoli doreste sa premieze la sfarsitul anului Exemplu:
scolar pe cei mai buni elevi la invatatura. Pentru acest lucru el are de rezolvat dona n=3 I Balaurul. are 15 capete
probleme; (Olimpiada Judeteana de Informatica Gimnaziu, 2002, cis. V)

a) Sa determine cati elevi vor fi premiati dintre cei n (2<=n<=700) elevi ai scolii, 5. (Valori-pantii - **J Se da un sir de N (1<=N<=30) elemente numere naturale (cu
Dupa discutii aprinse ell ceilalti profesori se hotaraste in Consiliul Profesoral ca maxim 8 cifre). Secere:
numarul prerniantilor sa fie n-k, unde k este eel mai mare numar patrat perfect mai a) Sa se afiseze cate elemente din sir sunt valori-panta (numere care privite de la
mic strict decat n. De exemplu, pentru n=150, k este 144 (pentru ca 144=12'), deci stanga sau de la dreapta au cifrele in ordine crescatoare) De exemplu, 136 si 931
vor fi premiati 150-144=6 elevi. . sunt valori-pantii.
b) Sase afiseze ceamaimare ~i cea mai mica valoare-panta,
Daca1a pnnctul a)sunt0 valori-panta, atunci la b) se va afisa mesajul NU EXISTA
70 71
~
,
Exemplu:
Exemplu:
N=6 Numarul. de valori-panta: 4 n=2
p=l
\6CIn
~26 Cea maio "1nare val.oare-panta: .9621
k=8
9621 Cea mai:m.ica -va1.oare-panta: ~26
(OlimpiadaJudeteana de Informatica Gimnaziu, 2003, cis. V)
'" ~21.2

ij 3678 9. (Gardul- **) Doi copii vopsese un gard alcatuit din n<IOO.OOI scanduri pe care
9231
9621 Ie vom numerota de la I la n astfel: -primul ia 0 cutie de vopsea rosie cu care
r (Olimpiada Judeteana de Informatica Gimnaziu, 2002, cis. VI) vopseste scandurile cu numarul p, 2p, Bp, etc. Al doilea procedeaza la fel, tncepe
de la acelasi capat al gardului, dar ia 0 cutie de vopsea albastra si vopseste din q In
6. (Gigel -**) Gigel este un tip ciudat. Lui Ii 1'Iace sa W impresioneze colegii qscanduri.
~ exprimand duratele numai in secunde. De exemplu, dad! it vei intreba cat e ceasul Astfel, cand vor tennina de vopsit; gardul va aveamulte scanduri nevopsite, unele
el iti va raspunde cate secunde s-au scurs de la ora 0.00 din ziua respectiva, Daca ai scanduri vopsite In rosu, altele In albastru, iar altele in violet (cele care au fost
, . sa-l intrebi ce varsta are, el 1ti va raspunde cate secunde au trecut de cand s-a vopsite si cu rosu ~i cu albastru),
nascut. Cunoscand numerele n, p si q afisati:
Colegii lui Gigel au hotarat ca nu e cazul sa se lase impresionati; ca urmare au a) cate scanduri raman nevopsite;
'" nevoie de un program care sa citeasca de' la tastatura un numar natural "N b) cate scanduri suntvopsite in rosu;
(N52000000000) care reprezinta viirsta lui Gigel exprimata In secunde ~i care va c) cate scanduri sunt vopsite In albastru;
afisa pe ecran cali ani, cate luni ~i cate zile are Gigel (orele ~i minutele ramase sunt d) cate scanduri sunt vopsite In violet.
r considerate nesemnificative). Scrieti acest program pentru colegii lui Gige!!
Exemplu:
Nu uitati ea anii bisecti sunt cei divizibili cu 4, dar nedivizibili cu 100 sau divizibili n=25 a) 17
cu 400. De exemplu 1992 si 2000 au fost ani bisecti, Dar anu! 1900 nu a fost bisect. ,p=4 b) 4
Anii bisecti au 366 de zile, spre deosebire de ceilalti care audoar 365. q=6 0) 2
Consideram ca ne aflam In ultima zi de scoala (IS iunie 2002). d) 2
Exemplu: . (Olimpiada Judeteana de Informatica Gimnaziu, 2003, cis. VI)
10. (Siiritura cangurului - **) A fost odata ca niciodata, a fost un cangur care
'" N=69206400 I Gi.geJ. are 2 ani., 2 l.uni. si. 10 zi.l.e
crestea ca Fat Frumos din poveste, intr-un an precum altii in zece. Intr-o zi a
(Olimpiada Nationala de Informatica Gimnaziu, Galaciuc 2002, cIs. V)
inceput sa faca sarituri. Si a sarit pentru inceput 7 metri. A doua zi a sarit, In plus
fata de ziua precedenta, de zece ori mai mult. In a treia zi a reusit sa sara, in plus
~ 7. (Exponent - ***) Se da un numar natural n<IOI ~i 0 cifra k din rnultimea {2, 3,
,
fata de prima zi, de zece ori mai mult dedit in ziua a doua. in a patra zi a sarit, in
5, 7}. Se cere sa se afiseze exponentullui kin descompunerea In factori primi a
plus falii de prima zi, de zeee ori mai mult decat In ziua a treia. Si tot asa mai
produsului 1·2:3·...·n. .
departe.
Exemplu:
n=6 2 Scrieti un program care calculeaza cali metri a sarit cangurul, In total, In
'" k=3 1
n<12 zile.
(Olimpiada Judeteana de Informatica Girnnaziu, 2003, cis. V)
Exemplu:
n=3 1861 m
8. (Pinochio - **) in fiecare zi nelucratoare din saptamana, Pinochio spune cate 0
(Olimpiada Nationals de Informatica Gimnaziu, Focsani 2003, cis. V)
l ; minciuna datorita careia nasul acestuia creste ell cate p<10J'centimetri pe zi.
Sambata si duminica, cand vine bunicu! Gepeto acasa, pentru a nu-I supara prea 11. (Cifre - **) Se dau doua numere naturale a, b cu maxim 9 cifre.
tare, Pinochio reuseste sa nu spuna nici 0 minciuna, ba chiar uitiindu-se In oglinda a) Sa se determine cifrele distincte, comune numerelor a si b.
observa ca in fiecare din aceste zile lungimea nasului sau scade cu cate 1 b) Sa se afiseze numarul eel mai mare format din toate cifrele lui a si b.
centimetru pe zi. Cand incepe 0 noua saptamana, ramanand singur acasa Pinochio Exemplu:
continua sirul minciunilor.
,~
Care este dimensiunea nasului lui Pinochio dupa k<257 zile stiind ca initial nasul
sau masura n<lOOl centimetri?
a=2115
b=29025 I a). 2 5
b) 955222110
(Olimpiada Judeteana de Informatica Girnnaziu, 2004, cis. V)

72 73
r--:
'-'

12. (Concurs - **) La un concurs de matematica participa elevi din mai multe scoli Exemplu:

I~
ka=9 u
din diferite erase. Pentru a seputea deosebi lntre ele lucrarile lor, fiecare lucrare
kb=10
este codificata printr-un numar natural .cu 3 cifre, sa zicem .abc, undea (cifra
sutelor) este codul orasului, b (Olimpiada Judeteana de Informatica Gimnaziu, 2004, cis. VI) , .
(cifra zecilor) este codul scolii din orasul a, iar c (cifra unitatilor) este codul unui i :
~
elev din scoala b. din orasul a. 14. (Excursie - **) Drumul de Ia Galaciuc Ia Soveja este marcat prin n+1 borne
Exemplu: lucrarea cucodul 328 este lucrarea elevului cu codul 8 de Ia scoala cu succesive, borne numerotate de la 0 la n. Borna 0 (Galaciuc) este la altitudinea O.
codul2 din orasul cu codul 3. Se cunosc: un cod (al Iucrarii unui elev H,prietenul Pe fiecare dintre urmatoarele n borne sunt scrise cate doua numere naturale, primul
nostru), numarul n<20 de lucrari premiate si codurile acestora, Codul de oras (cifra reprezentand altitudinea locului ~i al doilea reprezentand distanta rata de borna ...J
sutelor din fiecare cod) este de la I la 5, inclusiv. Codurile scolilor din fiecare.oras precedenta,
(cifra zecilor) este de la 0 la 9, inclusiv, iar codul elevilor (cifra unitatilor) este tot Se consideraca daca 0 borna este la altitudinea x, iar borna urmatoare la altitudinea
de la 0 la 9 inclusiv. y (x < y), atunci drumul intre cele doua borne.urea. Daca 0 borna este la 0 altitudine ~
Se cere sa se rezolve cerintele: x, iar borna urmatoare este la altitudinea y (x > Y), atunci drumul intre cele doua
a) Verificati daca H este premiant, sau nu. '. borne coboara. Daca 0 borna este la altitudinea x, iar borna urmatoare tot la
b) Determinati numiirul de premii luate de elevii din orasul lui H (inclusiv H, daca altitudinea x, atunci drurnul intre cele doua borne este tot timpul plat.
a fost premiat). . Se citeste valoarea n ~i apoi nperechi de numere naturale reprezentand valorile '-'
c) Determinati numarul de premii luate de elevii din scoala lui H (inclusiv H, daca inscrie pe cele n borne. Deoarece turistul care pleaca de Ia Galacic spre Soveja,
a fost premiat). gamie de cate ori urea, vi se cere sa afi~ati Iungimea celei mai lungi portiuni
Exemplu: continue pe care acesta 0 parcurge lara sa gafiiie. Daca exista numai portiuni de
H=234 a) NO w
n=6 b) 3 urcare, se va afisa valoarea o. Toate numerele din problema sunt numere naturale
123 0) 2 nenule de eel mult doua cifre.
232 Exemplu:
125 n=5 I 23 w
222 h1=14 d1=3
421 h2=14 d2=19
, ,
235 h3=8 d3=4
(Olimpiada Judeteana de Informatica Gimnaziu, 2004, cis. V) h4=10 d4=lO
h5=5 d5=17 u
13. (Vaniitoare - **) Vanatorul sef al regelui Arthur a primit Insarcinare sa vaneze (Olimpiada Nationala de Informatica Gimnaziu, Galaciuc 200 I, cis. VI)
primele rate ce se lntorc din tiirile cal de. Regele fiind un tip cu idei fixe, i-a cerut
vanatorului sa vaneze ratele albe cu sageti albe, iar ratele negre cu sageti negre. 15. (Coordonate - **) Numerele naturale se aseaza intr-un triunghi, ca In figura: c..J
Ratele vin in randuri (stoluri) din ce in ce mai mari: mai intai una, apoi doua, trei, Al Bl
cinci, opt, treisprezece, s.a.m.d, Se observa ca numarul de rate dintr-un .rand este \ I
A2 11\ B2
egal cu nurnarul de rate de pe cele doua randuri anterioare.
Ratele fiind niste creaturi ordonate zboara in randuri, in care nu vei putea gasi doua
\ I \ / u
A3 12\ 13\ B3
rate de aceeasi culoare alaturate, fiecare rand incepand cu 0 rata alba. Vanatorul \/ \1 \/
r 1
stie ca daca a inceput sa doboare 0 rata, trebuie sa Ie doboare pe toate de pe riindul A4 /4\ 15\ 16\ B4
\1 \1 \1 \ I
acesteia, deoarece supravietuitoarele vor alerta celelalte rate si ele nu se vor mai 17\ /8\ 19\ 110\
intoarce niciodatii, iar vanatorul nostru l~i va pierde sIujba. Stiind ca vanatorul a
primit lea sageti albe si kb (lea, kb < 2.000.000.001) sageti negre, trebuie sa Fiecare numar este asezat in varful unui romb si este unic determinat de cele doua
determinati cate rand uri de rate a doborat ~i cate sageti de fiecare tip i-au ramas, diagonale (A ~i B). Diagonalele sunt numerotan, de sus Injos, in acest fel:
stiind ca el vrea sa-si pastreze slujba. Se va afisa pe ecran: -'

- numarul de randuri doborate - numarul 1 este asezat pe diagonala Ai si diagonala Bl


- numarul de sageti albe ramase - numiirul2 este asezat pe diagonalaA2 ~i diagonala Bl
- numiiru13 este asezat pe diagonalaAi ~i diagonala B2, s.a.m.d,
- nurnarulde sageti negre rarnase. J
74 75
Fiind dat de la tastatura un numar intreg pozitiv n<32768, so. se scrie coordonatele 'Dandu-se 0 fractie oareeare prin numaratorul ~i numi~orul sau, determinati numaI1.!1
celor doua diagonale pe care se gaseste n. nivelului pe care seafla fractia sau 0 fractie echivalenffi (avand aceeasi valoare) cu
Exemp/u: aceasta. Se citesc doua numere naturale nenule N,M:; 2000000000, separate printr,
n=1.2 A4B2 un spatiu, reprezentend -numaratorul si numitorul unei fractii, ~i se va afisa numar
n=6 I A1."B3
(Concurs Sinaia, 1998, cIs. VII)
natural nenul.rreprezentand numarul nivelului care corespunde fractiei, '
Exemp/u:

r! 16. (Becuri - ***) Pentru iluminatul public pe strada Info se gasesc un numar par
N==13 M=8
N==-12 M=8 I~ ~',

de stalpi, pe fiecare stalp fiind 1'Iasat un singur bee, deculoare alba sau galbena, (Olimpiada Nationala de Informatica, Bacau 2001, cis. IX)
L -'
Pentru a se putea ~ti si ziua, cand becurile sunt stinse, daca un bee este alb sau
galben, elevii de la 0 scoala au 'scris pe fiecare stalp un numar, Numarul de pe 18. (Tub/ou - *****) Generati un tablou bidimensional cu proprietatile:
r-t • contine Nlinii si N coloane (N<lOl);
1 I smlpii cu numar de ordine impar reprezinta numarul de becuri albe ce sunt in partea
1
, :,
stanga a stalpului (exclusiv stalpul respectiv). • elementele sale sunt numere naturale nenule; ..
Numarul de pe stalpii cu numar de ordine par reprezinta numarul de becuri galbene • suma elementeloreste egala cu numarul natural nenul 8 (8<2'1);'
r ce sunt in partea stanga a stalpului (exclusiv stalpul respectiv). Un elev mai • pe niei 0 Iiriie si pe niei 0 coloana nu exista doua elemente identice;
zburdalnic a modificat numerele de pe stalpi, astfel incat numarul scris sub fiecare • diferenta dintre celrnai mare si eel mai mie element ale tabloului este minima.
bee galben este eronat, iar numarul seris sub fiecare bee alb este corect. Elevii care Se citese doua numere naturale nenule, separate printr-un spatiu, .reprezentand
lnvata Informatica au spus ca, in aceste conditii, ei pot sa determine cu exactitate numarul ~e Iinii ~i de coloane ale tabloului, respeetiv valoarea sumei tuturor
I
culoarea fiecarui bee. Scrieti un program care sa citeasca nurnarul de stalpi N<IOOI elementelor din tablou si se va afisa pe N linii elementele tab loului, care 0 linie din
precum ~i numerele scrise pe cei N stalpi ~i care sa afiseze pe ecran culoarea eelor tablou; e!em.entele se v_or separa prin cat: un spatiu, I?aca probl:ma nu are solutle,
!
Nbecuri. se va sene cifra O. Daca problema are mal multe so lutii, se va sene una singura.
Exemp/u: Exemp/u:
N=6 Beeu1. 1: aJ.b N=3 S=5J. 4 6 7
o Beeu1. 2, aJ.b ·7.4 5
o Beeul 3: galben 1 576
1 Becul 4: a1.b (Olimpiada Nationala de Informatica, Bacau 2001, cis. IX)
r 1 Becul. 5: ga1ben
4 Becu1 6: aJ.b
2
(Olimpiada Judeteana de Informatica, Timis 2000, cIs. IX) 19. (Ciupercute - **) Un vrajitor batran vrea so. prepare 0 licoare speciala, Pentru 0
r doza de licoare el are nevoie de M ciuperci fenneeate. 0 ciuperca este fermecatli
I
17. (Fracti! - ****) 0 proprietate interesantii a fractiilor ireductibile este ca orice daca nurnarul bulinelor de pe palaria ei este prim.
fractie se poate obtine dupa urmatoarele reguli: Ucenicul vrajitorului a cules N ciuperei dintre care unele sunt fenneeate, altele nu.
• pe primul nivel se afla fractia 1/1; Vrajitorul vrea sa afle cate doze de licoare poate prepara din ciupercile culese, cate
r,
• pe al doilea nivel, in stanga fractiei 1/1 de pe primul nivel, plasam fractia 1/2 eiuperei fenneeate 'ii raman si cate ciuperci nu sunt bune de nimic. Scrieti un
I
, iar in dreapta ei fractia 2/1; program care sa-l ajute! Fiecare ciuperca are eel putin doua buline. '
nive1ul. 1: 1/1 Exemplu:
n.ivelul 2: 1/2 2/1 M=3 N=8 doze:2
r eiuperei fermeeate ramase:1
2
11 ciuperei care nu soot ferm.ecate: 1
• pe fiecare nivel k se plaseaza sub fiecare fractie itj de pe nivelul de deasupra,
5
fractia il(i+j) in stanga, iar fractia (i+J)1j in dreapta. 15
r--'
7
nivel.ul. 1.: 1./1 3
nive1ul. 2: 1/2 2/1. 13
nivelul. 3: 1/3 3/2 2/3 3/1 23
,~ (Concurs "Grigore Moisil'', Lugoj 2002·, cls. V'VI)
l ,
76 77
r
20. (Cate sunt - *****) Fie rnultimea A={l, 2, ... , n}. Scrieti un program care sa 26. (Seiful - *****) Se considera 0 comisie formata din n<500 p ')
citeasca de la 'tastatura numarul natural n<IO.OOO si care afiseaza pe ecran cate (numerotate de Ia. 1- 1 a n)~ care trebui
e U1~ sa- pasastr,eze -~n~r-un self
. sUbiectele
ersoane
de la
numere rationale .distincte de forma plq cu p ~i q dinA exista, w

examenul de admitere. Sa se .determine numarul rmmm de Iacate Imin n


Exemplu: inchiderii seifului astrel incat sa existe 0 distributie a cheilor lor c ecesa~
N=3 7 indeplineasca urmatoarele conditii: are sa
N=4 n .• oricare doua persoanedetin acelasi numar de chei u
N=5 J.9
N~n ,83 • fiecare persoana detine chei de la lacate diferite
(Concurs "Grigore Moisil", Lugoj 2000, cis. VII-Vill) • toate Iacatele seifului se vor putea deschide numai in prezenta oriciirui
format din cel putin n-I persoane . grup
21. [Factorial> *) Fie N un numiirnatural (1.000;!;N;!;2.000.000.000) despre care se Pentru un lacat pot exista mai multe chei care sa-l deschida, Nici 0 cheie nu
stie ca reprezinta factorialul unui numar k (N= 1*2*3* ... Ok). Scrieti un program desc hid
1 e d oua- Iacate
- diferi
rtente. L acate
- Ie sunt numerotate dee Ia 11a imino poate
care sa citeasca pe N ~i sa determine numarul k. Sa se determine numarul minim de lacate, numarul total de chei distribuit .
Exemplu: .
repartizare a chet'1 or care respecta- con d'N'1
It,I e pro blemei.. e ~l 0
N=5040 k=7
N=362BBOO I
. k=J.O Exemplu:
n=3 l~n=3 chei=6 i :
1: 3 2
~acat : ~

22. (Suma minima - *) Se citeste de la tastatura un numar natural n;!;65.000. ~acat 2: 1 2


.~

Numiirul n sereprezinta in bazele de numeratie de la 2 la 10. Sa se determine lacat 3: 3 1


bazele in care suma cifrelor reprezentarii numarului n este minima. (Barajullotului national de Informatica pentru 101,1998)
Exemplu:
n=13 12 3 6 27. (Tort - _****) .De ':~u~ ei, Ionela a fiicut ~n t"..rt in ~orma triunghiulara. DOrlnd
sa~II~pa:ta ell prietenii ei, l~neiaiefectue.a::a A ta~etuTl dl~tr-u~ colt oareeare ;d B
23. (Pitagora - ****) Se considers a un numar natural nenul (a<30000). Sa se taieturi din alt coil al tortului (un coil adica un viirf at triunghiulu] '·inilial). D _
gaseasca toate perechile de numere naturale b ~i c (a<b<c) care impreuna cu a multe astfel de taieturi, ea este dezorientata: oare cate felii de tort in f up~
formeaza triplete de numere pitagorice. ~ri~nghiula~~ a ~iat? .Prin felie.inlelegem u~ tri~nghi:~ t;(i~t.?ri pe laturi si v:r~
Exemplu: in intersectiile taieturilor. 0 fehe poate contme ~l alte taieturi 10 lOterior. '1
a=9 J.2 J.5 Ajutati-o pe Ionela sa numere feliiIe de tort in forma triunghiulara. Se stie ca A B
I 40 41
sunt numere naturale mai mici ca 30.000. '
24. (Sfera - **) Cate puncte cu coordonate intregi sunt continute intr-o sfera de Exemplu: r 1
raza R cu centrul in originea sistemului de coordonate? Se considera ca R este un
numar natural mai mic sau egal cu 30. Distants d dintre un punct cu coordonatele
A=l B=2
A:=1 B=O
1;5 w

(x, y, z) si originea sistemului de coordonate se determina dupa formula: (http://infoarena.devnet.ro)


, I
d'=~X2 + y2 +Z2 28. (Tabeia - ***) Macarie, pasionat de numere si mai ales de matrice incepe intr- i :

~
Exemplu: zi sa u?,ple 0 fo~ie infinita de matema~ica ~cu patral<;,le) cu numere astfel: In COI\U~
R=4
1
257 cel mal de sus stanga (l, I) pune 0, apoi sene de la stanga la dreapta ~i de sus in . , ,
eel mai mie numar care nu apare pe .l~nia si col~a~a resp~ctiva. Dandu-se linia £o~
25. (Numere - ***) Scrieti un program care descompune nurnarul natural n<51 in coloana C \n.umere naturale sub 2 miliarde) unet casute din tabela aflati numarlll Je w
suma de numere .naturale n=nJ+n2+... +nk • astfel tncat produsul lor p = la acea pozme.
n/*n2*'" *nk sa fie maxim.
0J.23.45 ...
~;~mplu: 1
9
103254 ... ~
230167 ...
n=7 12
32J.076 ...
n=8 J.8
... ... .... ... r ';

w
78 79
Exemplu: CAPlTOLlIL 2
il
L=2 C=3
L=4 C=5 I; (http://infoarena.devnet.ro) Tipuri de Date Structurate
. ,
29. (Factorial - *****J Se dil un nurnar intreg P (O<P<lO'). Problema cere gasirea
celuimai mic numar natural strict pozitiv N pentru care produsul 1*2*,3*... *N are
exact P cifre de 0 la sfarsit, . . Tabloul unidimensional
I' Exemplu:
p=2 10
( .: 2.1.1 Teste cu alegere mult/plii 8/ duala
p=10 1 45
(http://infoarena.devnet.ro)
,
, 1. Identificati care din declaratiile urmatoare suntcorecte:
I ; 30. (Rand - ******)Se considers sirul infinit de numere: 3, 4, 5, 6, 7 8 ...
La fiecare mutare alegi primul numar din sir, fie. acela x, si 11 rnuti pe a x-a pozitie, a) a:array(l .. 100]of integer; ~ i.t a[100);
b) a:array 1 .. 100 of byte; bl char a[1 .. 100I,
~
c) a:array[1.00 .. 10.00]of real; c) float a[l.lO .. 10.00];
i 3,4,5,6,7,8 ---+ 4, 5,3, 6, 7, 8 •.. ---+ 5,3, 6,4, 7, 8 ... ---+ ijj) char a[1001,
d) a:array[1 .. 100] of char;
! 3,6,4,7,5,8, ---+6,4,3,7,5,8 ... etc.
,~
2. Se consideram urmatoarele declaratii: vor a : array[J..5]oj byte; (varianta
Sa se determine pentru u11 numar natural n dat, care este cea mai mica mutare la Pascal), respectiv unsigned char 0[4] . (variant. ctC++). Specifican valoarea
care acesta apare pe prima pozitie. Rezultatul va fi mai mic ca 2 miliarde. elementelor tabloului dupa executia instructiunii:
Exemplu: '
, n=3
n=4
1
2
for i:=l to 5 do a[il:=i-l; I for (~=O; i<5; iH) a[i):::i;

,,
! : n=5
n=6
3
5
a) 1 1 1 1 1 bl 0 0 0 0 0 @01234 dl 1 2 3 4

, 3. Se considers urmatoarele declaratii:

,, var a:array[0 .. 600l of real;


b:array[l. .300] of char; i:byte;
Ifloat
char
a(600);
unsigned char i·
b[300]i
. '
Care din urmatoarele referiri ale elementelor celor doivectori suntincorecte?
i a) a [i*2] ~, ai-i) if) bl'l') dl bli)

I' 4. Fie declaratia var v: array[O..4]ojinteger; (vad.nta Pascal), respectiv int v[4];
, i (varianta CIC++). Specificati valoarea e1ementelor tabloului dupa executia
instructiunii:
r: for i:=1 to 5 do v[i] :=2* (i-i); I for (i=Oii<5;iHl v[i]=2*i;

a) 2 4 6 8 10 (1') 0 2 4 6 8 c) 0 1 2 3 4 dl 1 2 3 4 5

,r-' 5. Se considera urmatoarelc declaratii:


"
var x:array[O .. 300] of char; I char x[30l]i
y:array[O .. 300] ·of byte; i:byte; unsigned char y[301],i;
,~

j
80 81
u

Care din urmatoarele referiri ale elementelor celor doi vectorisunt incorecte? begin 'Void main ,() (
for i: =1 -ee 5do
a} x[y[lJ] G y\1?<i1]}L tyxi'l'] d) x[300-y[0]]. i f i cmod 2<>0 "then ali] :=1
for (i=0;i<5;i++)
~f (i%2==0) afi]=l; L.j
-else a{i] :=i+l; -else a[i]=i+2;
6. Ce valori vor fi afisate In urma rularii urmatorului program? ~or i:=1 -to 5 ·do bfi]:=afi]*2; £or (i=O:i<S;i++) b[i]=afi]*2;
for i:=1 to 5 do write(b[i], I.') for (i=0:i<5;i++)
var
a:array[I .. 5] of integer:
#include <iostream.h>
int a[5],i;
.end ,
,,-~.
couc-ccb l Ll c-c ' ';) u
i:integer; voi.d mad.n (): { a} l 6 1 10 1 \E} 2 6 2 10 2 c) 2 2 6 2 2 d} 2 4 6 8 10
begin £or (i=O;i<5;i++)
for i:=1 to 5 do a[i]:=i*10; a[i]={i+l)*10; ~ :
for i:=2 to S do for (i=l;i<s:i++) 10. Care dintre urmatoarele secvente de instructiunl determinaIn mod corect W
a[i]:=a[i]-a[i-1]; a [i] -=a [i-I] ; elementul maxim din veetorul a: array[1.. 5] ofinteger (varianta Pascal), respeetiv
for i:=1 to 5 do £or (i=0:i<5:i++) int a[4]; (varianta C/C++).?
write{a[i],' ') cout c-ca [i]«' ';
end. a) max:=a(1); <;.j\na>t~a [ 0] ;
for i:=2 to 5 do for (1=I;i<5;i++>
a)10 20 30 40 40 b}O 10 20 30 40 C)IO 10 10 10 10 {:~jlO 10 20 2030 if a[iJ>max then
b) max:=O;
max:=a(i]; if (a[i»max) max=a[i];
r 1
p)max=O;
for i:=1 to 5 do for (i=0;i<5;i++)
7. Ce valori vor fi afisate In urma rularii urmatorului program? i f a[i]>max then max:=afi]; i f (a(i]>max) rnax=a[i];
c) max:=a[n]; {S'Jmax=a [n-l] :
var a:array[I .. 6] of integer; #include <iostream.h> for i:=n downto 1 do for (i=n-l;i>=O;i--) ,
int a{6],i; if a[i]>max then max:=a[i];
i:integer;

begin void maine) {


d) max:=30000;
for i:=5 downto 1 do
I if (a[i]>max) max=a[i];
,.cf))rna>t~30000;
t ....· for (i=4; i>=O; i--)
J
for i:=I·to 6 do a[i]:=O; for (i=0;i<6;i++) a[i]=O; i f a [i] >max then max:=a;[i]; if (a[i]>max) max=a[i];
for i:=1 to 3 do a[2*i]:=i; for (i=0;i<3;i++) a[2*i+l]=i+l;
for i:=1 to 6 do write(a[i], I ') for (i=0;i<6:i++) <ff. Care dintre urmatoarele instructiuni realizeazii deplasarea eu 0 pozitie spre ~
end. cout c-ce ( i ] « ' I:
dreapta a tuturor elementelor tabloului a incepand eu eel situat pe pozitia p.
Valoarea variabilei intregi n reprezinta indieele ultimului element din veetorul a.
(~j)010203 b) 1 0 2 0 3 0 c) 0 2 0 4 0 6 d) 1 2 3 4 5 6 a) for i:=p to n do a) for(i=p;i<=n;i++) ~
. a[i+l] ;=a[i]; a[i+1J=a[i];
8. Ce valori vor fi afisate In urma ruliirii urmatorului program? b) for i:=p+l to n+l do b) for(i=p+l;i<=n+l;i++)
a[i] :=a[i-l]; .. a[iJ=a[i-l);
var a:array[l .. S] of integer; #include <iostream.h>
c) for i:=n+l to downto p do ~'·for (i=n+l; i>=p; i--) !
a Ii] :~a [i-1); u
i: integer; int a[6],i; a[i]=a[i-l];
d) for i:=n downto p do ~'for(i=n;i>=p:i--)
a[i+l] :=a[i]; a[i+l]=a[i];
begin voi.d maine) {
for i:=1 to 5 do ali] :=i-l; for (i=l;i<=S;i++) afi]=i-l;
write(a[2],' '); coutc-ce l z l <c ' '; 12. Care dintre urmatoarele instructiuni realizeaza deplasarea eu 0 pozitie spre '-'
write(a[a[2]],' '); cout«a[a[2]]«' '; stanga a tuturor elementelor tablonlui a incepand eu eel situat pe pozitia p+ 1, In
write(a[a[a(3]]],' '); cout.c-ca Le Ie La j j j cc ' '; vederea stergerii elementului de pe pozitia p? Valoarea variabilei intregi n "'1
end. }
reprezinta indieele ultimului element din a. ,.-
a) for i:=p+l to n do (~l for{i=p+l;i<=n;i++) '-'
a) 1 0 1 b} 1 1 1 c) 1 2 0 '~~d)) 1 0 0
\,. ..
~~ ali] :=a[i-l]; " a[i]=a[i-1);
b) for i:=p to n-l do ~} for(i=p;i<n;i++)
9. Ce valori vor fi afisate in unna rularii urmatorului program? a[i] :=a[i+l]; a[i]=a[i+l];
c) for i:=n to downto p+l do c) for(i=n;i>p;i~-) '-'
var a,b:array[I .. 5] of integer; #include <iostream. h> a[i-1] :-a[i]; a[i-l]~a[iJ
i:integer; int a[5],b[S],i; d) for i:=n downto p do d) fOr (i=n;i>=p:i--)
,"
I a[i+l] :=a[i); a[i+l]=a[i]
w
82 83
r 13. Considerilnd urmatoarele instructiuni identlficati douaechivalente:
a) ~or(i=O;i<n;i++)
111
12
13
r:: tru i_1,
:scrie ali];
stop.
n executa .c) Dati exemplu de set de date de
intrare eu valori neordonate, pentru
care se va afisa un sir de vaiori
a) -for i:=l :to n do 14
if odd (i) -then s:=s+a(i]; i f {i%2!=0) s=s+a[i];
15 ordonate crescator,
b) -for i:=l to n ~v 2 -do \~j)£or (i=l; i<=n/2i i++)
i s:=s+ a[i*2-1]; - s=s+a[i*2-1]i
c) for i:=n to downto 2 do c) £or(i=n-l;i>l;.i--l d) Realizati programul in Iimbajulde
if odd(i) :then s:=s+a[i-1]i if (i%21=0) s=s+a[i-l]; programare studiat PascaI/C/C1+.
I....dh -for{i=2ii<=(n+1) /2;i++)
d) -for i:=2 to (n+l)~v 2 do
."',.-! s=s+a [i*2-3] ;
I s:=s+a[i*2-3]; 2. Se considera urmatorul program pseudocod:
14. Care dintre declaratiile de mai jos reprezinta declararea corecta a unei variabile intreg i, n, a[100]; a) Ce se va afisa pentru n=S ~i
de tip tablou unidimensional cu 20 elemente intregi cu semn: 2· eiteste n;
tabloul a=(22, 4,10,5, 16)?
3 rntru i .....1, n exec:::uta
a) type (~J;int a[20]; 4 c.iteste a (i]; ,
as=array[1 .. 20] of integer; 5 ' b) Dati un exemplu de set de date de
var a: as; b) int a[ ]; 6 [8ntru i .....2, n-1 executa intrare pentru care TIU·se va efectua
r-: bl var
c) unsigned int *a;
7 ·caea a [i] div 10=0 atunei niei 0 modificare a valorilor
a=array[1 .. 20] of integer; 8 ali) ..... a[i-l] + a[i+l];
9 tabloului.
c) var
a:array[1 .. 20]of -33760 ... 33767; dl unsigned int a[20]; 10
d) var
a:array[1 .. 20] of byte; :-e'......} short int a[20];
11
12
rntru i .....1, n executa
serie a [i];
c) Rescrieti instructiunea
/ daea atunci folosind 0
l J el var 13 stop.
a:array['a' .. 't'] of integer; 14 conditieiexpresie logical echivalentii.
15 Realizati doua astfel de instructiuni
r-'
15. Fie a un vector cu n=9 componente intregi, Ce va afisa pentru a=(14, 3, 7, 0,- 16 eehivalente eu cea prezentatii.
17
4,3,10, IS,7))? 18
d) Realizati programul in Iimbajul de
r- s:=O; S=Oi programare studiat Pascal/C/C1+.
, for i:=l to n do for(i~O;i<n;i++)

i : if odd (i) then s:=s+a[i]i if (i%2==0) s+=a[i]; 3. Se considera urmatorul program pseudocod:
write1n{s) ; cout«s;
1 intreg i, n, j, k, a[lOO]; a) Ce se va afisa pentru n~8 ~i
I \J:?li 3 4 c) 21 d) 50
,
a) 0 2
3
4
rntru
eiteste n;

1.
i ...... 1, n executa
eiteste a [i];
tab lou I a=(2, 2, 3, 4, I, 2, 2, 2)?

r-'
5 b) Dati un exemplu de set de date de
2.1.2 Teste en itemi semiobieetivi 6 i ..... 1; j ..... n; intrare pentru care se va afisa acelasi
7 at t~p(a(i]=a[j])and(i~j)
tablou cu eel citit.
8 executa
1. Se considera urmatorul program pseudocod: + 1; j ..... j 1;
r-
9
[ i ..... i -
10 c) Dati exemplu de set de date de
1 intreg i,n,a[100]; a) Ce se va afisa pentru n~6 sl 11 e n t ru k ..... i, j executa intrare pentru care TIU se va afisa nici
.
, '2
3
4
eiteste n;
rntru i .....1, n executa
eiteste a[i];
tabloul a=(2, 0, 1,4,6, 3)? 12
13 C scrie a[k];
stop.
o valoare.

r 5 b) Dati un exemplu de set de date de d) Realizati programul in limbajulde


6 [ntru i .....1, n-1 executa intrare pentru care nu se va efectua programare studiat Pascal/C'Ce-i.
7 r c a a[i]>a[i+1] atunei nici 0 interschimbare.
8 ali] ... a[i+1];
,r-
9
10
84 85
4. Se considera urmatorul program pseudocod:

a) Ce se va afisa pentru x=20341?


15'1
16
17
r: tru i .... 1, n executa
'scriea [i] ;
d) Pentru n> I, exista un set de valori
pentru elementele vectoruJui a, .astfel
'. l

~
1 intreg if n, x, a(100): tncst In final algorimul saafiseze 0
dB
2 citeste Xi singura valoare?
3 n-+- 0; b) Dati unexemplu de datil deintrare
4 t t~p x *
0 executa
pentru care se va afisa un sir.de cifre e) Realizati programul in limbajul de ~
5 n_n+l;
6 a[n] +- x mod 10; identic cu eel citit. programare studiat Pascal/C/C++.
7 x ..... x di.v 10;
[
B c) Rescrieti algoritmul folosind

c:
9 t ru i +- 1, n executa 7. Se considerli urmatorul program pseudocod:
10
structura repetitiva conditionata
_ serie a [i] ; 1 ' intreg nr[lO],c,max,i,n,j,x;
11 stop. posterior, In locul structurii catfimp. a) Ce valori vor fi afisate pentru n=5
2 ci.testa n; max .... 0; ( 1
12 si valorile 22, 235, 233, 6, 22l?
,13 3 ~tru i .... 0, 9 executa
d) Realizati programul in limbajul de
programare studiat Pascal/C/C++.
4 I..
nr[i] - 0;
b) Dati un exemplu pentru dateJe de
5
6 fPSntru i·_ 1, n -executa intrare (nu toate nule), aslfel Incat sa
7 I ci.teste j; se afiseze valoarea 0
5. Se considera urmatorul program pseudocod: B at t~p j ¢ 0 ~xecuta
9 x _ j mod 10;
i ±ntreg i, n , ur, a[100]; a) Ce se va afisa pentru n=6 ~i 10 nr[x] _ nr[x]+li c) Realizati un enunt de problema a
2 citeste u: nr +- 0; tabloul a=(3, -I, -4, 2, 4, 5)? 11 ~ roax< nrIx]abmci carei rezolvare este algoritmul
'3 ~ntru i_1, n executa d2 i
L.max ~ nr[x]; c _ x;
4 .L. citeste ali];
b) Dati un exemplu de set de date de 13
prezentat. ~
I

5 14 j _ j div 10;
6 n t ru i_1, n-l executa intrare pentru care variabila nr va 15 d) Rescrieti algoritmul folosind
~ca a[i]*a[i+1] < a atunci

O
7 primi valoarea n-l. 16 structura conditionata posterior in
8 L. nr +- nr + 1: 17 serie c; locul structurii catfimp,
9
10
c) Dati exemplu de set de date de
11 ~ca nr = a atunci serie 'OA' intrare pentru care se va afisa e) Realizati programulln limbajul de
12 altfel serie 'NU' mesajul 'DA'. programare studiat Pascal/C/C++.
13 l. stop. u
14 d) Realizati programul in limbajul de 8. Se considera urmatorul program pseudocod:
programare studiat Pascal/C/C++.
1 i.ntreg a[lOO], max, i, n; a) Ce valori vor fi afisate pentru n=7
2 eiteste n; max .... 1;
6. Se considera urmatorul program pseudocod: ~i valorile 2, 2, 34, 5, 6, 78, 8 ?
3 [P"n.tru i .... 1, n executa
4 t. citeste a Ii];
.. 1 ci.teste n; a) Ce valori vor fi afisate pentru n=5 5 b) Dati un exernplu pentru dateJe de
2 [pentru i +- 1, n executa ~i vectorul a=(2,5,3,6;1)? Dar pentru 6 serie a[l]; intrare (nu toate nule), aslfel incat sa L.J
3 L. citeste a [i] ; n=5 ~i vectorul a=(2,5,3,1,-1)? 7 tru i _ 2, n executa
nu se afiseze nici un caracter '*'. .
B e a a[iJ< a[i-l] atunci

t
4
9 max _ max + 1; c) Realizati un enunt de problema a
5 i +- 2:
6 cat timp i < n executa b) Dati un exemplu pentru datele de 10 serie ' *', a l a l ; carei rezolvare este algoritmul '-.J
prezentat.

~
7 a[il~a[i-11+a[i+11 atunci intrare astfel tncat sa se afisezc 11 aitfeJ.
B ~ntru j +- i, n executa d2 serie a Id l ; d) Care este numilrul maxim de
valorile din vector nemodificate.
9 t.
a[j) - a[j+1J; 13
14 caractere '*' care pot fi afisate
10
11
12
13
n _ n - 1;
a1 tfel i - i + 1; I
carei ,; teiolvare
prezerttat.
e~te
. ,C) Realizati un enunt de problema a
algoritmul
15 I seri.e max; pentru un tablou cu n elemente?
e) Realizati programulln limbajul de
programare studiat Pascal/C/C++.
~

~ '!
14 I, !
~

86 87
~

9. Se considers urrnatorul program pseudocod:


2.1.3 Probleme rezolvate
1 intreg A[lOO],. max,i,n; a) Ce valori vor fi afisate pentru n=7,
2" citesten;
~
i
i.. :
i 4 rntru
3, P _ 0;
i ._ a, n executa
:S'c:i.teste a l Ll r
x=5 ~i valorile 3, 5,6, 7, 8, 9, 23?
Dar pentru n=7, x=15 si valorile 3, 5,
6,7, 8, 9, 23?
1. Fie un tablou unidimensional care coniine n valori intregi. Realizati un program
,care ordoneaza crescator elementele vectorului folosind "algoritmul de
selectie",

6 Solutie: in cazul sortlirii prin selectie, elementele vectorului sunt divizate in dona
7 i 1;
b) Ce semnificatie dati valorii "liste", una ordonata, iar cealalta neordonata, Considerarn ca ele sunt despartite de
"
I
~
8
9
10
j n;

m _
at timp(i¢j)and(p=O)executa
(i+j) div 2;
variabilei m? Dar variabilei p? un "perete" imaginar.

1.1. ~ea arm] ~ x atunei p _ m c) Realizati un enunt de problema a Algoritrnul de selectie se bazeazii pe n-l pasi succesivi de tipul:
I~ 12 a~tfel. carei rezolvare este algoritmul
13
14
taca a[mJ > x atunci
j .... rn - 1
prezentat. • identificarea celui mai .mic element al Iistei neordonate
15 al.tfel.
• interschimbarea minimului eu primul element al Iistei neordonate.
16 i <- m + 1: d)Cate operatii de comparare se
17 efectueazamaxim In cazul unui Dupa aceasta selectie (identificare a elementului minim) ~i interschimbare,
~8
vector de cu 1024 de valori ordonate "peretele" 'despartitor se va deplasa cu un element inainte. in felul acesta se mareste
19
20 f scri..e Pi crescator? cu 1 numarul de elemente al listei ordonate si se micsoreaza cu I numarul de
r elemente allistei neordonate.
e) Realizati programul In limbajul de
programare studiat PascaI/C/C++. De cate ori se efectueazii aceasta deplasare, spunem cli s-a incheiat un pas complet
al sortlirii. Daca avem n elemente in vector, vor exista n-I astfel de pasi.
10. Se considera urmatorul program pseudocod:
1 var #include <iostream.h>
1 intreg a[lOO], max,i,n; a) Ce valori vor fi afisate pentru n=7 2 a:array[1 .. 100] of integer; int a[lOO],i,n,p,j,auxi
2 citeste n, a[l]; 3 i,n,p,j,aux:integeri voi.d main ( ) {
3 nr .... 1; ~i valorile 3, 5, 6,4, 8, 9,2? 4 begin cin»n;
4 Dar pentru n=7 si valorile 3, 5, 6, 7, 5 readln (n) ; for (i=O;i<n;i++) cin»a[i];
5 ,ntru i .... 2, n executa 8, 9, 23? 6 for i:=l to n do read(a[i]); for (i=O; i+l<n; i++) {
6 ci-teste Xi 7 for i:=l to n-1 do begin p=i;
r~ 7 k ..... Ii
b) Dati exemplu de valori pentru care
8 p:=i; for (j=i+l;j<n;j++)
8 a t timp(x<=a[k])and(k<=nr) 9 for j:=i+l to n do if (a[p]>a[j]l p~j;
9 executa se va afisa sirul de valori 8 5 3 12. 10 if a[p]>a[jl then p:=j; aux=a[i]; a[il=a[p);
.10 k ..... k + 1; 11 aux:=a [i) ; a[p)=aux;
12 a l Ll ee-a Ip l s
r: 11
12
[ c) Ce semnificatie dati valorii
13 a[p] :=aux;
)

13
14
raaca
La
k=nr + 1 atunci
nr_nr+l;
variabilei nr ? 14
15
end;
for i:=l to n do write (a[i], I I)
for (i=Oii<nii++)
couti-c-ca [i)« I I ;

15 d) Consideriind 0 valoare oarecare 16 end.


~
,
16 a[k] ..... Xi pentru n, cum trebuie sa fie sirul
! 17
18
valorilor introduse pentru ca la final 2. Fie un tablou unidimensional care contine n valori intregi. Realizati un program
19 ~tru i .... 1, nr executa sa se afiseze tot cele n valori? careordoneaza crescator elementele vectorului folosind "algoritmul de sortare cu
r 20 L. serie a [i] ; bule'' - (Bubble Sort).
21 e) Realizati prograrnul in limbajul de
22
programare studiat PascaI/C/C++. Solutie: In cadrul acestui algoritrn, elementele vectorului sunt impartite in dona
liste: sortata si nesortata, eel mai mic element este "ridicat" din lista nesortata ~i
mutat in cea ordonata,

88
r- 89
'....J

Dupa .aceasta mutare, "peretele" care desparte cele doua liste tnainteaza ell 0 4. Fie un t.ablou unidimensional Care contine n valor; intregi distincte. Realizati Ull
pozitie, in acest fel marindu-se cu un element lista sortata ~i rnicsorandu-se cu 'un program care ordoneaza crescator elementele vectorului folosind "algoritmul de
elementcea nesortata, La'fiecare pas deacest tip se considera ca s-a incheiatun pas numdrare" . '-'
completal sortarii,
Solutie: Consideram vectorul A. Algoritmulde sortare prin numarare consta in
Consideriind ca vectorul.are n elemente .atunci sortarea necesita n-l .astfel de pasi. gasirea pentru fiecare element a[l1, a numiirului de elemente din vector mai mici ca u
el. Numerele obtinute sunt memorate intr-un alt vector B. Elementele vectorului A
1 var a:array[1 .. 100]of integer; #include <iostream.h>
2 i,n,j,aux:integer; int a[lOO},i,n,j,aux; vor fi initial salvate in vectorul auxiliar C. La finalul algoritmului se vor rescrie in
3 begin void main() { ordine crescatoare elementele vectorului A pe baza valorilor memorate in B si C.
4 readln (n) ; cin»n;
5 for i:=l to n do read(a[i]) ~or (i=O;i<n;i++) cin»a[i}; i ·var #include <iostream.h>
6 -for i:=l to ndo -for (i=O;i<n;i++) .2 a,b,c:arraY[l .. 100]of integer; .int a[lOO],b[100],c[100];
7 -for j:=n downto i+1 do for (j=n-l;j>i;j--) .3 i,n,j,aux:integer; ok:boolean; int i,n,j,aux,ok;
8 i f a (j] <a [j-1] then begin i f (a[j]<a[j-l]) { 4 begin void main ( ) ( ---J
9 aux:=a[j];a[jJ :=a[j-1]; aux=a[j]; a[j]=a[j-1]; 5 readln (n) ; cin»n;
10. a[j-1] :=aux a [j-l]=aux; 6 for i:=1 to n do read(a[i]); for (i=O;i<n;i++) cin»a[i]; , 1
11 .end; ) 7 for i:=l to n do begin for (i=O; i<n; i++) {
12 -for i:=1 to n do write (a [i],' I) for (i=O;i<n;i++) 8 b[i]:=O; c[i]:=a[i]; end; b[i]=O; c[i]=a[i];
9 £or i:=2 to n do '-'
13 end. coutc-ce j t j c-c' '; }
14 10 for j :=1 to i-1 do for (i=l;i<n;i++)
11 if crj]<c[i]~en inc{b[i]) , I
for (j=O;j<i;j++)
12' -eJ.se inc (b [j J) ; ~f (c[jJ<c[i}) b(i]++;
1
3. Fie un t.ablou unidimensional care contine n valori intregi, Realizati un program 13 for i:=l te? n do ~
i
e~se b[j]++;
care ordoneaza crescator elementele vectorului folosind "algoritmul de insertie" - 14 a[1+b[iJ]:= c[i]; for (i=O;i<n;i++l
(Insertion Sort). 15 for i:=l to n do,write(~[i],' ') a[b[i]]~c[i] ;
16 end. for (i=O;i<~;i++)
17 cout.cce [i] «~I ';
Solutie: Algoritmul de sortare prin insertie functioneaza pe aceeasi idee de a divide
vectorul in doua liste: ordonatii si neordonata. La fiecare pas, primul element al 5. Fie N un numar natural de cel mult 9 cifre. Sa se genereze toate numerele care se
listei nesortate este transferat In cea sortata, exact pe pozitia prin care se respecta pot scrie ca produs de doua numere prime mai mici ca N.
ordinea crescatoare a elementelor. Aceastii operatic se va efectua prin deplasarea cu
o pozitie spre dreapta a tuturor elementelor mai mari decat el. Solutie: Pentru optimizarea aJgoritmului de generare a numerelor prime vom
proceda astfel: variabila p va parcurge toate numerele impare mai mici ca n.
j var a:array[1..100]of integer; #include <iostream.h> Pentru a verifica daca peste un numar prim se va testa dad! unul din numerele
2 i,n,j,aux:integer; ok:boolean; int a[100],i,n,j,aux,ok; prime mai mici cael reprezinta un divizor al lui. Vectorul prim va retine toate
3 begin void main() { numerele prime mai mici decat N. Valorile care se vor afisa in final se vor obtine
-4 readln (n) ; cin»n; ca produse a doua elemente ale vectorului prim. ,I
5 for i:=1 to n do xeed Ia ld l ) for (i=O;i<n;i++) cin»a[i];
6 for i:=2 to n do begin for (i=1;i<n;i++) { 1 var prim:array[1 .. 100]of
7 aux:=a[i]; j:=i-1; aux=a[i]; j=i-1; ok=O; _2 integer; m,i,p,n,j : integer;
#include <iostream.h>
.int primI100],m,n,i,p,j;
J
8 ok:=false; whi1e (j>=O && !ok) 3 begin void main ( ) {
9 whi1e (j>=1)and(not ok) do .if (aux<a[j]) ( 4 readln (n) ; cin»n;
10 if aux<a[j] then begin a[j+1]=a[j]; j--; 5 primI1]:= 2; m:= 1; p:= 3;
11 a[j+l] ,~a[j); j:~j-l
prim[0]=2;m=1;p=3;
) 6 whiJ.e p<=n do begin while (p<=n) (
12 end e~se ok=1; 7 i: =1; i=O;
13 e1se ok:=true; a[j+1]=aux; 8 whiJ.e i <=m do whi1e (i<m)
14 a[j+1]:=aux ) 9 .if P mod prim[i]=O then i:=n .if (p%prim[i]==O) i=n;
15 end; for (i=O;i<n;i++) 10 else inc (i); e~se
16 for i:=1 to n do write(a[i],' ') cout-ccaj Lj c-c ' I; 1,1 if i <>n then beg.in i++;
17 end. 12 inc (m); prim[m] :=p; end; if (i!=n) prim[m++]=p;
13 p :=p + 2 ; p+=2;
14: end; ) ,
~
90 91
£or {i=O;i<m;i++) 7 £or i:=2 to n do begin £or (i=l;i<nii++)
15' for i:=lto m do 8 readln(a[i);
for (j=iij<mij++) cin»a[i);
16 for j: =i to m do 9 i f a[i]<min then hegin
17 write1n (prim[i] *prim[j]) cout«prim[i] *prim[j] «endl; if (a (i)<min) {
10 min:=a(i)iP:=ii min=a[i)i p=i;
18 end. 11 ,endi )
r 6. Se considera n intervale inchise [a,b]. Sa se determine reuniunea acestora.
12 endi
"for(i=Oii<p;i++) a[n+i]=a(i]i
13 for i:=l to p-ldo a[n+iJ:=a[i)i for (i=Pii<n+Pi i++)
14' "for i :=p -ee n+p-1do
a(i-p]=a[i)i
15 a[i-p+l]:~a[i]; for (i=Oii<nii++) cout«a[i];
Solutie: Vom reline fiecare capat stiing al intervalelor in vectorul Aiar eel drept in 16 for i:=l to n .dc write{a[iJ) )
,
vectorul B. Primul pas al algoritmului va ordona intervalele in functie de capatul i7 -end .
! !
stang al·acestora. Pentru determinarea reuniunii, este suficienta 0 parcurgere liqjara
a acestora, pastrand la fiecare moment capatul stang ~i drept al intervalului curent 8. Fie 0 multime ce confine n elemente (n <25). Sa se afiseze toate submullimile
al reuniunii,actuali:zAnd la nevoie valorile acestora. acestei multimi, .

1 var a,b:array[l. .100]of integer; #include <iostream.h> Soliaie: Sa consideram multimea reprezentata cu ajutorul vectorului
2 i,n,j,x,y:integer; int a[100],b[100],i,n,j,x,y; A=(a[ 1],a[2],...a[nj),
r
,
3 begi.n void maio () {
Notam cu B 0 submultime a multimii A. Vectorului caracteristic al submullimii
, 4 readln (n) ; cin»n;
5 £or i:=1 to n do read(a[i] ,b[i]); for (i=Oii<o;i++) cuprinde n elemente avand valori din multimea {O,I}.
6 for i:=1 to n-1 do cin»a Ii] »b Ii] ; e[1]= J daea ali] E A
7 for j:=i+1 to n do for (i=0;i+1<0;i++)
c- {
" e[i] = 0 daea ali] " A
i ' 8 if a[i]>a[j] then begin for (j=i+1;j<n;j++)
, j 9 x:=a[i]iaIi]:=a[j]ia[j]:=xi if (a[i]>a[j]) {
10 x:~b[i] ;b[iJ :~b[j] ;b[j] :~x; x=a[ili a[i]=a[j]i a[j]=x;
x~b[i]; b[i]~b[j]; b[j]-x;
Consideram multimea reprezentata cu
11 end; ajutorul vectorului (3,1,4,5,2,8).
r 12 x:~a[l];y:~b[lJ; ) Submultimea {2,4, I} poate fi' reprezentata
Cll ajutoruJ vectorului caracteristic
,
i
13 for i:=2 to n do x~a[O]; y~b[OJ; (0,1,1,0,1,0).
14 i.f a[i]>y then begin for (i=1;i<nii++)
15 writeln (x,' " y) ; if (a[i]>y) {
16 x:=a[i] ;y:=b[i]; end cout«x«' '«y«endl; Aceasta operatic este posibilii prin simularea adunarii in baza 2 dintre I ~i numarul
r-t
17 else x=a[i); y=b[i); ale carui cifre sunt elementele vectorului caracteristic. Reamintim ca 1+1=10, ~i
li 18 i.f b[i]>y then y:=b[i]; } 1+0=1,
19 writeln(x,' ',y) else if (b[i]>y) y=b[i];
2(J end. cout«x«' '«y«endli}
r. I) -Se incepe cu vectorul caracteristic al submultimii vide.
!
2) Pornind de la elementul c[n], atata timp cat se intalnesc elemente egale cu I ele
,. 7. Se considera un tablou unidimensional ce contine n caractere distincte. Sa se
afiseze permutarea circulara a lui, care incepe cu eel mai mic caraeter in sens se transformain zero (1+1=10,). Primul element egal cu 0 se transformg in I.
3) Se tiparesc elementele submultirnii reprezentate de vectorul caracteristic
lexicografic.
r Exemplu: Pentru n=5 ~i tabloul ('m','i' ,'0' ,'a' ,'r') se va afisa Ca','r', 'm' ,'i' ,'0').
obtinut, dupa care se revine la pasul 2.

Solutie: Se va determina pozitia elementului minim in vector, dupa care toate Algoritmul se termina cand a fost generat vectorul caracteristic cu toate elementele
r egale cu I.
elementele din fata lui se vor copia la final, incepand cu pozitia n+ I. Stergerea
~i elementelor din fata minimului se va face prin deplasari spre stiinga ale celorlalte i var c,a:array[1 .. 100] of byte; #include <iostream.h>
prezente in vector. 2 n, i: integer;
unsigned char a[100],c[100];
3 ok:boolean; .i.nt n,i,ok;
4
1 var a:array[1 .. 100]of chari #include <iostream.h>
char a[100),min; 5 begin void maine)
2 i,j,n,p:integer;
i.nt i,j,n,p; 6 read (n) i cin»n;
3 min: char; 7
4 begin void main() { for i:=l to n do read(a[i]); for (i=Oii<n;i++) cin»a[i];
r-t cin»n; cin»a[O]; 8 fill char (cl n , 0) ;
5 readln(n);readln{a[1]); for (i=Oii<n;i++) C[iJ=Oi
p=O; min=a[O]; 9 oko-t.rue s . ok=l;
~ p:=1; min:=a[1]i
92 93
c-
,
i
a. o -whi~e ok do begin whiJ.e(ok) {
,
~

11 i;=n; i=n-.1; Scrieti un program care sa determine suma ~i elementele fieciirei perechi. De la , I

12 -while (c[i]=l)and(i>O) ·"Cia while (c[i]==l && i>=O) { tastatura se citesc: numarul n ~i elementele celor doi vectori. L;
13 begin c[i]=O; . Exemplu : Pentrun=4, A=42 I 5 ~i respectiv B=(5 3 2 6) se va afisa:
i4 c [i] :=0; i--; 7
15 1:=i-1; } 43
,

"1-6 end; i f (i==-1) ok=O; .,, '


,

1-7 i f i=O "then ok:=false -e1.se {


25 c..;

18 else begin c[i]=l; I6


19 eli] :~l; cout«endl; 52 ~ 1

20 writeln; £or (i=O;i<n;i++)


21 for i:=1 to n.do .if (c ILl ) cou't c-ca ILl c-c ' '; l.J
22 if c[i]=l1:han write (a[il,, ') } Solutie: Suma unei perechi se obtine prin Insumarea tuturor elementelor vectori/or
23 ·end; } . A. si B ~iimpiirtireaacestei valori la n. 0 pereche va fi formatil din elementul a[l] Ii
24 -end; } S- a[l](care se regaseste ca element in vectorul B, conform ennntului).
2S -end ,
'1 var j,i,n,5:integer;
9. Se considera un vector cu n elemente intregi. Sa se elimine cat mai putine #include <i05tream.h>
2 a,b:array(l. .100]of integer;
3 begin int j,i,n,a[lOOJ,b[100J,s=O;
elemente de la extremitatile vectorului astfel incat eel doua valori ramase . la void main () {
"capete" sa fie consecutive. 4' 5:=0; xeecn.n mj , cin»n;
5 for i:=1 to n do begin
Exemplu: Pentru n=9 ~i vectorul (8,2,4,5,2,5,3,4,6) se va afisa: (2,4,5,2,5,3) 6 readln(a[i]);
for (i=O;i<nii++) (
deoareee s-a eliminat primul element si ultimele doua, Valorile ramase la capete 7 5:=5+a[i]; cin»afiJ; s+=a[i); :1
]
sunt consecutive. 8 'end; £or (i=O;i<n;i++) {
9 for i: =1 to ndobegin
;10' readln(b[i]); S:=5+bfi]; cin»b[iJ; S+=b[i];
Solulie:Algoritrnul determina pentru fiecare element din vector pozitia elementului }
. 11 end;
s/=n;
"pereche", adica a elementului eel mai apropiat de ultimul element, ell proprietatea
ca valoarea absoluta a diferentei lor este egala cu I.
12
13
5:=5 div n?
writeln(5);'
Cout«S«endli i I
for (i=O;i<n;i++) ~
~14 for i:=1to n do
i var a:array[1 .. 100]of byte; #include <iostream.h> ,~:,15 writeln (a [i],' ',s-a (i]);
cout«a [i J«~If .,«
;'~,6 end. s-a[iJ«endli
2 min,n,i,j,pl,p2,x:integer; #include <rnath.h>
3 begin unsigned char a[100];
4
5
read(n); min:=n; pl:=1; p2:=0; int min,n,i,j,p1,p2,x;
11. Afi~ali cifrele distincte ale unui numar In ordine cresciitoare a numilrului lorde
for i:=1 to n do read(a(i)); void maine) {
aparitii, Exemplu : Pentru n=21223 se va afisaj 3 2
6 for i:=1 to n do begin cin»n;
T for j:=n downto i do min=n; p1=0; p2=-1;
8 if ab5(a[i)-a[j])=1 then for (i=O;i<n;i++) cin»a[i]; Solutie : Pentru codificarea datelor se vor folosi doua tablouri unidimensionale cu ~

9 begin for (i=O;i<n;i++) { indici intre 0 ~i 9:


10 x:=j; break; for (j=n-1;j>=i;j--)
11 if (abs(a[i]-a[jJ)~~l)
- vectorul a In care elementul a[i] va indica numarul de aparitii ale cifrei i In "]
end;
12 x=j; break;
scrierea zecimala a numarului x, citit ca data de intrare;
i f n-x<min then begin
13 - vectorul c in care elementul c[i] face asocierea intre cifra t Ii pozitia i prin ~
min:=n-x; p1:=i; p2:=x; )
14 end; if (n-x<min) atribuirea c[i]+-i.
15 end; { rnin=n-x; pl=i; p2=x; La ordonarea vectorului a se vor interschimba ~i elementele corespunzatoare din :- I
16, for i:=p1 to p2 do } vectorul c.
17 write(a[i], I T) for (i=pl;i<=p2;i++) ~

18 end. cout«a[i]«' 1; In final" afisarea elementelor vectorului c se va face numai pentru cifrele al carer
19, numar de aparitie este strict mai mare decat O.
1 var p,j,i,x:longint;
10. Se considera doi vectori A ~i B cu n elemente valori naturale. Se stie ca toate 2 a,c:array[0 .. 9].of byt er
#include <iostream.h>
elementele lor se pot grupa In n perechi de forma (a[I],bl7]), astfel Inci!.t· suma 3 begin 10ng P,j,i,x,a[lOJ,c[lO];
vo.id main () {
a[I]+bl7] sa fie aceeasi pentru orice pereche. 4 readln (xl; cin»x; <

5 for i=O to 9 do a[i] :=0;


for (i==O;i<==9;i+:!") a[iJ=Oi
94 95
~

'IM
!.:
i
for (i=O;i<=9;i++) c[i']=i; ~,
! 6 for i=O to 9 do c[i):=ii
do {
In cazul 1.1 va trebui incrementatii lungimea secventei curente de elemente de ~
7: .repeat
paritati diferite. In situatia 1.2 secventa se reinitializeaza, lungimea curenla Ie ~,

8 inc (a [x .mod. 10]); a[x%10]++;


devenind liar pozitia de Inceput a secventei va fi indicelecurent i. Dupa 'I~
9 x:=x cliv 10; x/=10; ~,
}whil.e (:<!=O); '4
IO until. x=O; efectuarea uneia dinaceste operatii se actualizeazii, daca este posibil, secventa l~

r: 11 for i:=O to 8 do ~or (i=0;i<=8;i++)


maximala. ~i
~
!

12 :for j:=i+l to 9 do :for (j=i+l;j<=9;j++) I~


i".,j'
13 if (a[i]>a[j) ~en_bagin .:if (a[iJ>a[j]) (
-i -vae a: array [1. .100] of bytier #include <iostream.h>
I~
i~
14 p t ee ld l ;a[i] :~a[jJ ;a[j] :~p; pea I Ll ;a[iJ-a[jJ ;a[j]-p;
p~e[iJ;e[iJ-e[jJ;e[jJ-p; 2 n,i,j,pc,pmax,lc,lmax:bytei int j,i,n,lmax,pmax,lc,pc; i~
n 15
16
p a-ec l Ll ;e[iJ :-e[j] ;e[j] :~p;
end; ) 3
4
begin
readln (n) ;
int a [100] i
void main () { !~
l , 17 for i:=O to 9 do for (i=0;i<=9;i++)
i f (a [i] >0) cou't-ccc [i] <e;'' "; 5 for i:=l to ndo xead t a l Lll r cin»n; !~!~
18 if a[i]>O then write(c[i]); for(i=lii<=n;i++) cin»a[i];
6 lmax:=Oi lc:=li pc:=l;
'19 .end , ' i~
I,
,...J 12. Sa se afiseze cea mai lunga secventa de elemente consecutive de paritati

8
9,
-for. i:=2 to n do begin
i f a[i] 'lnod 2<>a[i-l] mod 2
then inc(lc)
lmax=O; lc=l; pc=l;
for (i=2ii<=n;i++) {
if (a[i]%2!=a[i-l)%2)
'~

;i:
;>1
diferite. 10- -ef.ee .begin 1c++;
r--: Exemplu pentru n=8 si sirul 2 4 3 3 4 7 8 2 se va afisa 3 4 7 8 11 lc:=li else
12 PC:=ii { lc=li pc=i;
Solutie: Aceastii problema poate avea rezolvare decomplexitate cubica (n'):
0 13 .endi i f (lmax<lc) ,j
14 i f lc>lmax then begin { 1max=1c; pmax=pc; ;!
,
Pentru fiecare secventa de elemente situate Intre valorile i §i j (lco;,i<j5J'l) se 15 Imax:=lci }
r
,
actualizeaza daca este posibil secventa de lungime maxima ce contine elemente -16 pmax sepc r for (i=pmaxii<=1max+pmax-1;i++)
consecutive de paritati diferite: 17 endi cout«a[i]«" "i
L j
18 endi
1 -pentru i ..... 1, n-l executa 19 for i:=pmax to lmax+pmax-l do
r 2 ntru j ..... i+1, n executa
Ie ..... j-i+l; ok ..... true; //lc=lungimea secventei curente
2Q
21
write(a[i],l ')i
end.
l~ 3
4 e n tru k ..... j+l, i executa
5 , c:aca ark] mod 2 = a[k-l] mod 2 atunci ok ..... fa15e;~ 13. Se considera doi vectori ale carer elemente sunt ordonate crescator. Sa se
n
I
L. J
i
6
7
8
[
a c a ok atunci.
realizeze un algoritru prin care se realizeaza operatia de interclasare a elementelor
celor doua tablouri. .
9 1max lei /Ilungimea secventei maximale

r
i .i
10
11
12
C pmax i; //pozitia de inceput a secventei Solutie: Algoritmul de interclasare parcurge elementele celor doi vectori realizand
compararea succesiva a elementelor curente. Compararea incepe eu elementele
~,
13 situate pe prima pozitie, eel mai mic fiind plasat intr-un nou vector (C).
14 ~entru i_prnax, pmax+lmax-1 executa Se Inainteazli cu 0 pozitie In vectorul din care s-a copiat elementul plasat In C.
i' 15 L. scrie a [i] i s.a.m.d.
I 16
1 var #include <iostream.h>
,
•>.
Vom opta insa pentru 0 rezolvare liniara, ceea ce inseamna ca dupa 0 singura 2 a,b,c:array[1 .• 100]of integeri int a[lOOj,b[lOO],c[lOO];
n
I
parcurgere a elementelor vectorului a am identificat secventa maximala ceruta. 3 j,k,x,i,n,m:integeri ',nt j,k,x,i,n,m;
Pentru aceasta trebuie studiate operatiile care se impun a fi efectuate la fiecare pas 4 begi.n oid main{) {
5 readln(n); read1n{m)i cin»n; cin»mi
al parcurgerii vectorului: 6 for i:=1 to n 'do read(a[i]); for (i=Oii<n;i++)
7 for i:=1 to rn do read(b[i]); cin»a(i];
r ,
I. verificarea paritatii elementului curent fata de elementul anterior, 8 i:=1i j:=1i k:=Oi for (i=O;i<m;i++)
i 9 whi1e (i<=n)and(j<=m)do begin cin»b[i];
1.1 elementul curent are paritate diferitii falii de elementul anterior, 10 inc(k)i i=O; j=O; k=-li
1.2 elementul curent are aceeasi paritate diferitii cu elementul anterior 11 i f a[il<b[j] then begin whi1e (i<n && j<m)
r-t 12 c l k l aee Ll l s Lnc t Lj r if (a[iJ<b[jJ)
2. actualizarea secventei maximale daca este posibil ;L3, end c[++k]=a[i++];
\! 96 97
r
!
I !

i4
15
eJ.se begi.n
c[k]':=b(jl; inc(j); .end;
eJ.se
c [++k] -b [j++] ; Pe baza acestuia se va construi vectorul in care valorile vor fi plasate in ordine
T
1.-6 end; "for (i~j;i<m;i++) crescatoare, Algoritmul are 0 complexitate Iiniariiin lungimea domeniului de
"17- :for i: =j to -m do begin c[++k]-b[i]; definitie al elementelor. .
.B inc(k);c[kJ:~b[i] _for (j=i; i<n; i++)
19 $nd; c[++k]~a[j] ; j~' ar I#include <iostream.h>
20" "for j :=i to n do begi.n :for' (i=O;i<m+n;i++) 2'.' a, ap:array [0 .. 10000] of integer; int a[lOOOO],ap[lOOOO];
21 inc(k);clk] :~a[jJ ccut.c-ccj Lj c-c ' '; 3 k,max, cl, cz , n , i, j, x,min: integer; ",nt max,cl,c2,n,i,j,x,min;
22 end; 4. begi.n 'oid main () {
23 £or i:=l to m+n do write(c[i]) 5 readln (el, c2, n) ; cin»cl»c2»n;
-end , 6 max;=cl; min:=c2; max=cl; min=c2;
T :for i: =1 -ee n .dobegi.n 'for (i=1; i<=n; i++) (
14. Realizati un program care determina toate numerele mai mici dedit 0 valoare 8 read(x) i inc(ap[x-cl]); cin»x; ap[x-cl]++;
naturala N (N< 30000), folosindu-se de algoritmul numit , Ciurul lui Eratostene", ;9 i f x>max -eben max: =x; i f (x>rnax) max=x;
"10' i.f x<min then .mi.ne ex if (x<min) min=x;
11 'end; )
Solutie: Ciurul lui Eratostene .. cerne" dintre toate numerele naturale mai mici ca .12 k:=O; max:=max-cl;min:=min-cl; k=O; max=max-climin=min_cl;
N, pe cele care nu sunt prime. Ideea sta in eliminarea pe rand a tuturor multiplilor 13 £or i:=min to max do for (i=ndn;i<~ax;i++)
numerelor prime. Se poate folosi un tablou unidimensional ok in care la finalul 1,4 for j :=1 to ap l Ll do begin for (j=l;j<=ap[iJ;j++) {
procesarii ok[ll=true (I pentru CtC++) daca i este prim ~ifalse (0) in caz contrar, 15 inc(k);a(k]:=i+cl; a [++k]=i+cl;
Initial toate valorile sunt considerate numere prime, deci veetorul va contine numai 16 write (a [k]) cout«a[kj«' I;
17 end; }
valoarea true(l). Vectorul ok va fi parcurs incepand cu pozitia Z, plina la .J;, (un t.B end..
numar x este prim daca nu are nici un divizor mai mic decit radical din x).
1 ar iinclude <iostream.h>
2 ok:array[2 .. 30000]of boolean; iiinciude <string.h> 2.1.4 Probleme propuse
3 i,j,n:integer; "nt ok[30000],i,j,n;
4 gi.n 'oi.d main () (
5 readln (n) ; cin»n;
1. Se cunosc notele obtinute de n elevi la extempora!ul de matematica. Sa se
6 fillchar (ok , sizeof (ok) , true) ; memset(ok,l,sizeof(ok»);
realizeze un program care afiseaza:
7 for i :=2 to trunc (sqrt (n) do for (i=2;i*i<=ni i++)
8 i.f ok [i] then begin if (ok[i]) ( a) elite note mai mici ca 5 au fost obtinute;
9 j :=2; j=2; b) care este media aritmetica a notelor peste 5.
10 while i*j<=n do begin whi1.e (i*j<=n) (
ok[i*j]=O;
c) cilte note de 7 au fost obtinute,
11 ok[i*j]:=false;
12 inc (j ),; j++i . d) care este cea mai mare nom obtinuta;
.13 end; )
;14 end; ) 2. Se citeste un sir de n (n<500) numere naturale. Care este numarul maxim ~i de
is for i:=2 to n do for (i=2;i<=n;i++) elite ori apare in cadrul sirului ?
16 i.f ok[i] then write(i,' .) i.f (ok I Ll ) cout « i « ' 'i
1.7 d, Exemplu: n=5 ~i vectorul (8, 9, 6, 9, 9) se va afisa 9 apare de 3 ori

15. Se considera un vector ce contine elemente naturale din intervalul [cl..c2] , 3. Cunoscandu-se un sir de n numere naturale se cere realizarea unui program care
(c2-cl <10000; cl,c2<30000). Sa se ordoneze valorile tabloului folosind sorlarea permite numiirarea elementelor care se divid cu ultimu! element al sirulul,
prin numiirarea aparitiilor fiecarui element (Count Sort). Exemplu: n=5 si vectorul (8, 4, 6, 9, '3) se va afisa 2

Solutie: Datorita lungimii destul de mici a intervalului in care se regiisesc 4. Se considera un sir de n elemente numere reale. Sa se lolocuiasca fiecare
elementele, ne putem folosi de un algoritm ce are la baza detenninarea numarului element cu eel mai apropiat intreg si sa se afiseze in ordine inversil(de la ultimu!
de aparitii a fiecarei valori. Ne vom folosi de. un vector ap in care elernentul ap[x] catre primul).
indica numarul de aparitii al valorii x + cl(pentru a translata indicii in domeniul Exemplu: n=6 si vectorul: (2.72,4.34,9.82, 1.0,4.05,2.45) se va afisa
[0..c2-c1]). 2411043

98 99
~;

r-
,,
5. Se considera un vector cu n elemente numere intregi, Sa se calculeze suma
tuturor elementelor pare situate pe pozitii impare In tablou.
16. Afisati pentru un sir de n elemente careeste numirul de aparitii al ficcarei
valori. Exemplu: n=6 si vectorul: (3,13,3,13,8, 13) se va afisa
Exemplu: n=5 ~i vectorul (3, 4, 6, 7, 8) se va.afisa 14
133
6. Se considera un vector ce coniine n cifre(n<IO). Sa se determine suma 32
~J numerelor formate cu cifrele din vector citite de ladreapta la stanga side la stanga 81.
la dreapta. 17. Determinati suma maxima care se poate forma cu mnumere distincte dintr-un
n Exemplu: n=4 ~i vectorul: (2,0,4,5) se va afi~a2045+5402=7447 vector ce contine n valori intregi. Daca vectorul contine mai putin de m valori
I !

distincte se va afisa mesajullmposibil.


7. Se considers un vector eu n elemente numere naturale. Sa se inlocuiasca fieeare
element nul eu media aritmetica a·~umerelor nenule din vector.
Exemplu: n=6, m=2 ~i vectorul: (3, 13, 3, 13,8, 13) se va afill' 21

f' Exemplu: n=5 ~i vectorul: (2, 0, 4, 0, .3) se va afisa 2 34 3 3 18. Sa'se scrie un program care afi~e~ permutarile cireulare ale unui vector cu n
elemente intregi, 0 permutare circulars se obtae prin rotirea elementelor
8. Se considera un vector cu n elemente numere naturale. Sa se afiseze dupa fiecare
vectorului cu i pozitii (i<n).
element al vectorului valoarea O.
n Exemplu: Pentru n=4 si vectorul (2,5,3,1) se va afisa:
Exemplu: n=3 si vectorul: (2,4,3) se va afisa 20403 0
5312
9. Se citeste un vector cu n elemente numere reale. Sa se afiseze toate perechile de 3 125
elemente egal departate de mijloc, care au aceeasi parte tntreaga. 1253
r Exemplu: n=6 ~i vectorul: (2.32, 4.34, 9.2, 1.0,4.05,2.45) se va afisa 19. Se considera un vector ce contine n numere reale. Vom spune ca doua elemente
2.322.45 respectiv 4.34 4.05
ale sale, formeaza 0 "pereche in dezordine" daca sunt indeplinite simultan
10. Ordonati descrescator elementele nenule ale unui vector ce contine n nurnere
conditiile:
intregi. i<j
I . Exemplu: n=6 si vectorul: (3 0 7 045) se va afisa 7 0 5 043 a[I]>afJ], unde I,;i<n si I <j:5n
~
11. Se considera un tablou unidimensional cu n elemente numere intregi. stergeti Sa se creeze un program care afiseaza perechile In dezordine din vector ii numarul
toate aparitiile primului element si afisati elementele ramase. lor.
I ,
Exemplu: n=5 si vectorul (3, 4, 3, 3, 8) se va afisa 48 Exemplu: Pentru n=4 si vectorul (I, 13,2,4), sevaafisa;
132
r- , ,
12. Se considera un sir de n caractere citite de la tastatura, Care este caracterul care
apare de cele mai multe ori ~i care este numaml de aparitii ?
134
2

r-« 13. Se considera un vector cu n elemente numere reale. Inserati In fata fiecarui 20. Afisati cifrele distincte ale unui numar In ordine crescstoare a numarului lorde
I element negativ un element de valoare O. Elementele vor fi afisate cu 2 zecimale. aparitii, Exemplu: Pentru n=355222 se va afisa J 52.
Exemplu: n=4 ~i vectorul: (2.32, -4.34, -9.2, 1.0) se va afisa 2.32 0.00 c4.34 0.00
-9.20 1.00 21. Se considera un vector ce contine n (n<IOO) numere naturale cuvalori intre 0 ii
60000. Sa se ordoneze elementele pare, lara insa a afecta poziliile pe care sunt
14. Determinati cea mai lunga secventa de elemente pozitive din cadrul situate numerele impare. Programul va afisa pe ecran, vectorol dupa ordonare.
L~ unui vector. Evitati folosirea unui vector auxiliar, Exemplu: Pentru .=7ii sirul (I, 40, 32,44, 3,
Exemplu: n=6 ~i vectorul: (3, -4, 3, 13,8, -3) se va afisa 3 13 8. 8, 17), se va afisa: I 83240344 17.
!r-
15. Determinati multimea ce se formeaza cu elementele unui vector. 22. Se considera un vector care contine n elemente de tip char. Creati un program
Exemplu: n=6 ~i vectorul: (3, 13,3, 13, 8, 13) se va afisa 3 13 8. care afiseaza perechea de dona elemente egal departate de centro, a carer suma a
codurilor ASCII este maxima (printre celelalteperechi).
,
,
,
Exemplu : Pentru n=7 ~i elernentele 'N, 'C', 'B', 'EI, 'zl, II" 'EI se va afisa Bz

100
101
-
-:-1.
i .1

'-"

23. Creati un program care sorteaza elementele situate intre elementul minim ~i 30. Se considera un tablou unidimensional A .cu n elemente ce reprezinta o i i
maxim dintr-un vector de lntregi. Daca minimul si maximul se afla pe lJozitii permutare a multimii Ln. Asupra elementelor lui se vor face urmatoarels tipuri de ..J
consecutive, se va afisa rnesajul "Nu se efectueaza sortarea". mutari: In ordine dela I la n, fiecare element all] se vainterschimba cu elementul
Exemplu: Pentru n=7~i elementele 14, -13,21, I, 120, 1000,21 se va afisa: de pe lJozitia i+a[z]' Daca iaceasta pozitie este· mai mare decat n, atunci
14 -13 I 21 120100021 numaratoarea se continua cu pozitia 1. Sa se -afiseze continutul vectorului la finalu] . ,
operatiilor, '-.!
24. elementele reale ale vector de dimensiune 2*n. Sa n
Exemplu: Pentru n=4 si A=( 2, 4, 1,3) se va afisa: (2, 4, 3, I) , deoarece se Obline "
S e c u n o s c u n u i s e a f i s e z e

numere Teale obtinute prinadunarea partilor intregi cu partile fractionare a


succesiv (I, 4, 2, 3); (I, 4, 2, 3); (2, 4, 1,3); (2, 4, 3, I) ~
elementelor egal departate de centru. Afisarea numerelor se va face cu 3 zecimale.
Exemplu: Pentru n=3 ~i numerele.ZB, 12.09.218.98021,31.05, -212.098, 12.75,se
31. Sa se stearga din vectorul A de lungime n, un numar de elemente, astfellncat Ia
va afisa: 2.750 12.098218.050
final sa se obtina un sir strict crescator de elemente. Primul element din veetoml : I
initial nu se va sterge, , i
25. Se considers dona multimi retinute In doi vectori. Sa se realizeze un program '-"

care determina reuniunea, intersectia si diferenta lor. Exemplu: Pentru n=7 ~i A=(3, 4, 8,4,2,1,9) se va afisa: (3,4, 8, 9)
Exemplu: A=(2,4, 1,6,7), B=(3, 4, 8,9) se va afisa: ~1

32. Se considera un vector cu n elemente naturale. Sa se afiseze pe lin ii, elementele I.


Au B =(2, 4,1,6, 7,3, 8,9);A n B=(4) ; A - B=(2,1,6,7) din A grupate dupa cifra dominants (prima In scrierea zecimala), Pe aceeas] Iinie ~
vor fi sense elemente ell aceeasi citra dominanta,
26. Fie un tablou unidimensional ce contine n numere naturale In care exista un Exemplu: Pentru n=7 si A=(334, 124,21,34,122,1,39) se va afisa:
singur element nul. Sa se realizeze un program care ordoneaza descrescator 124122 I
elementele vectorului, efectuand interschimbari doar prin intermediul elementului 21
nul (orice interschimbare are loc intre un element nenul ~i eel nul) 3343439
Exemplu: Pentru vectorul (0,3,2) pasii sortarii pot fi (3,0,2) ~i (3,2,0)
33. Fie un tab lou unidimensional cu n elemente valori naturale. Sa se ordoneze
27. Se considera dona tablouri unidimensionale A §i B ce contin n respectiv m descrescator aeeste valori, dupa numarul de cifre distincte pe care le contin.
elemente(n<m). Verificati daca exista In B 0 secventa de n elemente (situate pe
Exemplu: Pentru n=7 ~i A=(334, 124, 21, 34, 222,1, 39) se va afisa: !
pozitii consecutive), nu neaparat In aceeasi ordine. Daca nu exista afisati 0, altfel '-.J
afisati primul indice din B de la care se regasesc toate elementele din A. 1243342134392221
Exemplu: Pentru n=3, m=7,A=(2,4,1) ~i B~(3, 4, 8, 4, 2,1, 9) se va afisa: 4 'j
34. Se considera un vector cu n elemente numere reale. Sa se ordoneze elementele
28. Sa se genereze primii n termeni ce fac parte din sirul definit dupa cum crescator dupa valoarea partiilor intregi a elementelor, iar Ia valori cu partea LJ
urmeaza : intreaga egala, ordonarea se va face descrescator dupa partea fractionara,
primul termen I. Exemplu: Pentru n=7 si A=(3.34, 12.4, 3.41, 3.04, 12.8,1.3, 3.9) se va afisa: 1.3,
daca x apartine sirului atunci ~i 2x+ I ~i 3x+ I se regasesc In sir; 3.9,3.41,3.34,3.04, 12.8, 12.4
Observatie: termenii sirului nu sunt neaparat distincti,
35. Consideram un tablou unidimensional ce contine un numar par de elemente
Exemplu: Pentru n=6 se va afisa :1, 3, 4, 7,10,9 (2*n). Creati ell aeeste valori un sir de n fractii a carer suma este maxima. Fiecare !,
fractie se va afisa pe cate.o linie printr-o pereche de numere reprezentand In ordine w
29. Un numar are forma unui "munte", daca cifrele ce apar in scrierea lui zecimala, "numarator - numitor".
formeaza initial un sir crescator, apoi un sir descrescator, De exemplu numarul !, I.
2556431 este un numar munte. Verificati daca scrierea unui nurnar n Exemplu: Pentru n=3 si A=(3, 12,21,34,2,39) se va afisa:
(n<2.000.000.000) citit de la tastatura, respecta regula precizata, 343 L...,
21 12
392 :1
'-"
102 103
. 1
. ,
,
,
i!
i j

,r1 42. Fie un tablou unidimensional co 2n elemente valori naturale. Din .acesta se
, 36. Se considerii un vector ce contine n elemente fntregi. In fata oriciirui element
poate obtine unalt vector B cu 2"'} elemente astfel; Elementul b[l] se va fi egal cu
I.
I '
precedat .de .UD' element .de semn contrar -se introduce un element pozitiv,.a .carul
produsul 0[1]*0[2], b[2] cn produsul 0[3]*0[4] s.a.m.d, Operatia se poate aplica in
valoare este obtinuta 'prin .alipirea cifrelor celor douii numere de semne contrare, in
.continuare si asupra vectorului B. Practic, .ea se poate efectuasuccesiv de eel mult
1 1 ordine. Sii se afiseze continutul vectorului .dupiiefectuarea operatiilor cerute.
nori asupra vectorului obtinut la pasul precedent. Scrieti un program care executa
i
Exemplu: Pentru n=6~i A=(3,-I, 73,5,-9,2) se vaafisa: 3, 31,-1, 173,73,5,59, -9, operatia descrisacat timp toate elementele obtinute sunt mai .mici ca un numar S
92,2 (citit de la intrarea standard). Afisati elementele obtinute in final in vector.
Exemplu: Pentru n=3, S=200 si A=(I, 2,4, 5,2, 5, 3, 6) se va afisa 40 180. Din
'"' 37. Fie un tablou unidimensional cu 2*n elemente valori naturale. Din vector sunt
vectorul initial s-a obtinut vectorul (2,20, 10, 18), iar la pasul urmiitor (40 180).
sterse pe rand elemente din k in k pozitii, Numiirarea pozitiilor de va face cu
revenire la prima in cazul in care indicele curent este mai are .decit n. Operatia se
43. Se considers un tablou unidimensional cu n(<100) elemente intregi
repetii de n ori. Determinati pozitia de inceput a numiiratorii, astfel incat elementele (pozitive/negative). Avem Ia dispozitie K«n) semne minus (-) pe care vom folosi
ramase sa aiba surna maxima, Se va afisa pozitia de inceput a numaratorii ~i surna pentru schimbarea semnelor la K elemente din vector. Nu se pot folosi doua semne
elementelor ramase in vector.
minus pentru un singur element. Determinati produsul maxim care se poate obtine
, ~ Exemplu: Pentru n=3, k=3 ~i A=(3, 10, 15,4, 2,10) se va afisa: 2 35. Incepand cu n-l elemente din vector dupii ce s-au schimbat semnele la k elemente si valorile
I numiiriitoarea de la pozitia 2, au fost sterse in ordine elementele de pe pozitiile care an fost inmultite,
4,1,5. Exemplu:Pentru n=7, k=6 ~iA=(- 2,- 4,5,-2,6,3,6) se afiseaza 4320.
4*(-5)*2*(-6)*(-3)* (-6).
38. Se considerii un tablou unidimensional cu n«100) elemente naturale. Sii se
"l ,
! determine numarul minim de subsiruri strict crescatoare de valori consecutive in 44. Se considera sirul urmator: 1,3,4,7,8, 10, 11, 15, 16, 18, 19,22,23,25,26,
care poate fi partitionatvectorul. Prin subsir se intelege 0 secventa de elemente din ,31, 32 ....Sii se determine al n-Iea termen al sirului.
vectorul initial ce nu se aftii neapiirat pe pozitii consecutive.
~
;1 '
Exemplu: Pentru n=7 ~i A=(3, 10,4,4,5, 11,6) se va afisa: 3 (3 4 5 6; 10 1I; 4) 45. Se citesc de la tastaturii valorile din doi vectori. Primul contine n elemente in
IJ ordine crescatoare, iar. al doiJea m elemente in ordine descrescatoare, Sa se
39. Se considerii un tablou unidimensional cu n«IOO) eJemente intregi. Sa se realizeze un program care interclaseaza doar elementele impare din cei doi vectori
determine toate secventele de elemente de pe pozitii consecutive, care au surna ~i afiseaza pe ecran sirul obtinut,
I: egalii cu S. Fiecare secventa de elemente va fi afisata pe cate 0 Iinie pe iesirea
,i ! Exemplu: Pentru n=8, m=5, A=(l3, 26, 44, 54,112,115,311,600) B=(567,55,
standard. 48, 5; 3) se va afisa: 3, 5, 13, 55, 115, 3 I 1, 567
Exemplu: Pentru n=7, S=9 ~i vectorul (3, 2, 3, 4, 5, 11, -7) se va afisa:
n
: I
234 46. Se citeste de Ia tastaturiin elemente ale unui vector. Sa se realizeze un program
f : 45 care sterge elementele situate intre prima aparitie a unui element cub perfect ~i
5 11 -7 ultima aparitie a unui element cub perfect.
r
, ;
40. Fie un tablou unidimensional cu n elemente valori naturale. Sii se determine 0
Exemplu: Pentrn n=8 ~i A=(13, 26, 28, 54, 112, 8, 2197, 600) se va afisa: A=(l3,
26,600)
submultime de elemente din tabloul citit, pentru care suma elementelor este
divizibiJii cu n. 47. Se considera un sir de n valori numere naturale si m perechi de indici (i, j) unde
r Exemplu: Pentru n=7 ~i A=(3, 6, 4, 2, 11, 5, 11) se va afisa: 6, 4,2,11,5 o < i <j < n+I. E1ementele situate intre i ~ij i~i inverseazii pozitiile, ca in exemplu
de mai jos. Sii se afiseze ordinea elernentelor din vector la finalul operatiilor.
41. Se considers doi vectori de lungime n respectiv m ce contine elemente naturale Exemplu: Pentru n=8, A=(13, 26, 28, 54, 11, 78, 21, 60), m=2 ~i perechiJe (1,8) ~i
r-: ordonate ·cresciitor. Se cere interclasarea valorilor pare din cei doi vectori. In urma (2,5) dupii prima operatie de rotire vectorul aratii:
interclasarii elementele vor fiplasate intr-un nou vector. 60,21,78, 11,54,28,26,13;
l Exemplu: Pentru n=8, m=5, A=(13, 26, 44, 54,112,115,311,600) B=(3, 28, 48, Dupa a doua operatie de rotire, intre pozitiile 2 ~i 5, vectorul contine:
55, 56) se va afisa: 26, 28, 44, 48, 54, 56, 112, 600 60,54,11,78,21,28,26,13.

104 105
it.?"
:, ,i
I
U'

III Tabloul bidimensional 6. Consideram un tablou ell n linii !ji m coloane, Cate elemente sunt situate pe
marginea tabloului (prima si ultima Iinie, prima ~i ultima coloana)?
~

e)2*n+2*m-4
2.2.1 Teste cu alegere multiplii $i dualii a) 2*m+2*n b) m*n-2*n-2*m d) 2*n+2*m-2

1. Consideram declaratia var a:array[l..10.1..10]of byte (varianta Pascal), 7 Caredintre urmatoarelc variante calculeaza in mod coreet numarul de elemente .
nule de pe fiecare linie a unei matrici patratice de ordin n? Afisarea rezultatelor
respectiv int a[10][10] (varianta C/C++). -ldentificati care din urmatoarele
accesari de elemente ale variabileia sunt incorecte: trebuie facuta tncepand cu prima linie.
I ,
a) nr=O;
a) a [2*3] a) a[2*3] a) nr:=O;
-for i: =1 to n .ae -begin for (i=O;i<n;i++) { U
b) a[2*3,3-2] 0) a[2*3J [3-2) -for (j=O;j<n;j++)
c) allO] 1[1] c) a [10, 1] for j:=lto n do
i f a[i,j]=O then ine(nr); i f (a[i] [j]==O) nr++;
d) a[10,10] d) a[9] [9]
write (nr) end.; cout « nr; } ! i
'-J
2. Care din urmatoarele declaratii sunt incorecte sintactic? b) for i:=1to n do .begin b) for (i=O;i<n;i++)
nr:=O; nr=O;
a) a:array[1 .. 10J [1 .. 10]0£ char a) char a [1. .10J [1. .10] for j:=1 to n do -for (j=O;j<n; j++)
b) a:array[2 ... 10;3 ... 10]of real b) float a[2 ... 10;3 ... 10] i f a[i,j]=O then ine(nr); i f (a[i] [j]==O) nr++;
c) a:array['a' .. 'z' ,1 .. 5]of real c) float a [26J [5] write (nr) ,end; eout < nr;)
dl a:array[1 .. 5,6 .. 9]0£ char d) char [5] [9]
c) for i :=n downto 1 do begin c) for (i=n-l; i>=O; i--) {
nr:=O; nr=Oi
3. Care dintre urmatoarele variante reprezinta declaratia unui tablou bidimensional for (j=n-1;j>=Oij--) ~
for j:=n c;lownto 1 do
cu 5 linii ~i 5 coloane ale carui elemente sunt de tip real? i f a[i,j]=O then'ine(nr); if (a[i] [j]==O) nr++;
write (nr) end; cout « nxs I r 1
a) a:array[O .. 5,O .. 5Jof real a) fJ.oat a[6] [6]
!
b) a:array[lO .. 14,1 .. 5]of real b) float a [5] [5] d) for i:=1 to n do begin d) for (i=O;i<n;i++) ! '
'-"
c) a:array(' at .. ' e" ,1 .. 5] of real c) double a[5J [5] nr=O;
nr:=O;
d) a:array['O' .. '5' ,1 .. 5]of char d) char a[6] [5J 'for j:=n downto 1 do for (j=n-1;j>=O;j--)
i f a[i,j)=O then inc{nr); if (ali] [j]==O) nr++; i1
4. Consideram urmatoarele declaratii: write (nr) end; cout « nr;}
J
var a:array[O .. 4,O .. 4Jo£ byte; unsigned char a[s] [5]; 8. Consideram declaratia, var a: array[1 ..3,1..3]of byte; (varianta Pascal),
b:array[ \a' .. 'e' ,1 .. 5}of real; I noat b [5] [5];
respectiv int a[3][3]; (varianta C/C++). Specificati care va fi continutul tabloului : 1
Care dintre variantele urmatoare acceseaza coreet un element din eele doua tablouri dupa executia secventei urmatoare de instructiuni: J
situat pe linia a treia ~i coloana a doua?
I
for i:=1 to 3 do for (i=O;i<3;i++)
for j:=1 to 3 do a[i,j]:=i+j; for (j=O;j<3;j++) a[i] [j]=i+j+2; '-!
al a[2,3] a) a[2] [3] I
bl a[3,2] b) a [3] [2) U
a) 2 2 2 b) 2 3 4 c) 2 2 2 d) 2 3 4
c) b[3,2J c) b[ Ie'] [2] 444 234 333 345
dl b['e' ,2] d) b[2] [1]
e) a [2, 1] e) a[2] [1]
666 234, 444 456 ~1
f) b[ vc ", 'b'] f) b[le'] ['b']
9. Consideram declaratia var a : array[J..3,J..3]of byte; i, j: byte (varianta Pascal), U
5. Consideram un tab lou ell n linii si m coloane in care toate elementele primei linii respectiv int i, I. a[3][3]; (varianta C/C-H-). Specificati care va fi continutul
sunt nule. stiind ca nu exista alt element egal cu zero (nesituat pe prima linie), elite tabloului dupa executia secventei urmatoare de instructiuni: ~~I,
elemente nenule sunt in tablou? for (i=O;i<3;i++)
u
for i:=1 to 3 do
for j:=1 to 3 do for (j=Q;j<3ij++)
a) (m+n)-n b) {m+n)-m e)n*m-n d)n*m-m a [i, j] :=abs (i-j) ; \ ali] [j]=abs(i-j);
, ,

107 U
106
:):'1

r-' a) 1 1 1 b) 1 1 1 c) 0 1 2 d) 1 2 3 c) for j:=l to n do begin cJ £or (j=Oij<n;j++)


222 111 101 2,1 2 aux:=a[ll, j]; aux-a(ll][j],
![ j
333 111 210 3 2 1
a[ll, j]:~a[12,j]; a[1l][j)=a[12](j] ;
a[12,j]:=aux; a[12][j]=aux;
r-' 10, Consideram declaratia var a : array[J..3,J..3]oj byte; i, j: byte (varianta end; }
I : Pascal), respectiv int i, j, a[3][3]; (varianta C1C-t+). Care sunt instructiunile
i : d) :"for j :=1 -tic rodo .begin d} -for (j=O;.j<rnij++)
necesare pentru ca tabloul a sa contina elementele:
123 aux:=a[ll,j]; . aux=a[ll](j],
456 a[11, j) :~a[12, j); a[ll][j ]=a[12][j],
, 789 a[l2, j]: =aux; a[12][j]=aux;
i -end;
a) £or i:=lto 3 do al for (i=Oii<3ii++)
~ £or j :=1 to 3 do for (j=O:j<3ij++) 13. 0 matrice patratica este simetrica falii de diagonalaprincipalii dacii pentru orice
I a til [j l-abs [i-j+2) ;
, a [i, j] :=abs (i-j);
pereche de indici ( i,j):
I ,
bl for i:=l to 3 do b) for (i=O:i<3:i++)
for j:=l.to 3 do for (j=Oij<3ij++) a) a[i, j]=-a[j, i]; e) a[i][j]==-a[j)[i];
~
a[i,j]:= i+j: ali] [j]=i+j+2: b) ali, j]=l/a[i, j], bl a[i][j]=l/a[i][j];
I c) a[i,j]-a[j,i); cl a[i][j]==a[j][i],
t j
c) for i:=l to 3 do c) for (i=O:i<3;i++) d) . ali, j]<>a[i, j]; d) a[i][j]l=a[i)[i]'
for j:=l to 3 do for (j=Oij<3;j++)
a[i,j] :=i*j; a [il [j}= (i+ll * (j+ll ;
~
14. Se considera urmatoarea secventa de program in care a este 0 matrice patratica
L , d) for i:=l to 3 do d) for (i=Q;i<3ii++) cu n linii si n coloane, iar i,j, k ~i 1 sunt variabile de tip intreg:
for j:=l to 3 do for (j=Dij<3;j++)
a[i,j] := (i-l)*3+j; ali] [j]=i*3+j+l; for i:=l to n do fOr (i=l; i<=n; i++l
for j:=l to n do read(a[i,j); for (j=l;j<=n;j++) cin»a[i] [jJ;
i:=2; i=2;
[ j 11. Care dintre declaratiile urmatoare reprezinta declaratia unui tablou
j :=n-1; j=n-l;
bidimensional cu 10 linii si 20 coloane ~i componente de tip real: for 1:=1 to n di.v 2 do begin for (1=1; 1<=n/2; 1++)
for k:=i to j do for (k=i; k<=jik++)
! a) type matrice: a) typedef fl.oat m[lO][20] matrice: write(a[l,k],' I); cout«a[1j [k]«" ";
i j array[l. .10, 1. .20]0£ real; matrice mat; writeln; cout.ccendl r
var mat=rnatrice; inc (i); i++;
dec (j); j--;
~ b) var mat: array[l. .10, 1. .20] of bl float mat[10][20): end; }
real; Secventa de mai sus afiseaza:
c) var mat:array[1 .. 20,1..lO] of c) int mat[20][10); a) elementele matricei a aflate atilt strict sub diagonala secundara, cat ~i strictsub
'r- integer; diagonala principala;
b) elementele matricei a aflate strict deasupra diagonalei secundare;
d) var mat:array[1 .. lO,1 •. 20] of dl double mat[101 [20J;
extended; c) elementele matricei a aflate atilt strict deasupra diagonalei secundare, cat ~i
strict deasupra diagonalei principale;
12. Care dintre secventele de mai jos realizeaza interschimbarea a doua Iinii, 11 d) elementele matricei a aflate strict deasupra diagonalei principale.
L,
respectiv 12, ale uneimatrice cu n linii ~.i m coloane de numere intregi? 15. Se considera urmatoarea secventa de program in care a este 0 matrice piitraticii
cu n linii si n coloane, iar i, j si k sunt variabile de tip intreg:
,
~
a) for j:=l to m do al for (j=O;j<m;j++)
a[ll, j]:-a[12. j], a[1l][j]~a[12][j], k:=-l; k=-l;
for i:=l to n do begin for(i=1;i<=n;i++)
b) for j:=l to n do bl for (j=O; j<n; j++) :if k=-l then iflk==-ll
a [12, j]:-a[ll, j], a[12][j]-a[1l][j] ; for j:=l to n do for (j=l; j<=n;j++)
write(a[i,j], I I} cout«a[i] [j]«" "; ;:!
i:'
108 109 !,:I
':
:;1
Ii: I
~

else ,.else
for j: =n downto 1 do ~tim ca vectorul X a fost folosit pentru liniarizarea matricei a. Care. dintre
"for (j=n; j>=l; j--)
write(2*a[i,j],' '); cout«2*a[iJ fj]«" "; elementele din x urmatoare, .reprezinta elementul de pe linia i si coloana i-din , .
k:~k*(-l); k*=-l; matriceaa: '--'
end; l
a) xli * 10 + j -1]
Stiind cii dupii executarea secventei de program de rnai sus au fost afisate valorile I bl x[(i-l) * 10 + j - 1]
2 3 8 6 4 3 4 5 ~i ciimatricea piitraticii a are 3 linii si 3 coloane, stabiliti care dintre c) xli * 10 + jl e-J
tablourile de mai jos reprezintii rnatricea a. d) xl (i-ll * 10 + j]
a) b) c) dl c '
321 123 123 123 19. Care din urmatoarele variante reprezintii 0 declaratie corecta a unui tablou ,
864 567 234 234 U
543 345 345 unidimensional cu 10 de componente de tip caracter:
5 4 3

16. Se considers urmatoarea secventa de program in care a este 0 matrice patratiea a) var mat:array[1 •. 10] of byte; a) char mat[1 .. 10];
cu n linii ~i n coloane, iar i ~ij sunt variabile de tip intreg: b) var mat:array[1 .. 10] of char; b) char mat[lO];
c) var sir[1 .. 10J of char; c) mat[lO] of char; ~
for 1:=1 to 4 do for (1=1; i<=4;1++) d) var sir=array[1 .. 101 of char; d) char[IO);
£or j:=l to 4 do for(j=1;j<=4;j++)
if i<=j then afi,j] :=1 cif(i<-j) ali] [j]~i;
el.se afi,j):=j; else ali] [j]=j; 2.2.2 Teste cu itemi semiobiectivi ...J

Stabiliti care dintre variantele de mai jos reprezinta matricea a obtinuta dupa
executarea secventei de mai sus:
a) bl cl
111 1
d) 1. Se considera urmatorul program pseudocod:
1 1 1 1 1 2 3 4 1 111
222 2
333 3
1 2 2
123
2
3
1 233
1 2 2 2
222 1 1 intreg ifni x, atlO] [~O); a) Ce se va afisapentru n=2, m=3 ji I,
3 332 2 citeste n , m;
444 4 123 4 1 1 1 1 4 3 2 1 tabloul A cu elementele citite in
3 n t ru i .... 1, n executa
4 ntru j .... l,m executa ordine pe linii:12, 40, 51, 44, 654,
17. Dacii a este un tablou unidimensional de numere intregi si n lungimea sa, iar
~C.i.teste
O
5 _ a[i,j]; 33?
aux este 0 variabila de tip intreg ce efect are sccventa urmatoare: 6
b) Dati un exemplu de set de date de
for 1:=1 to n-l do for (i=O;i+l<nii++) 7
intrare pentru care se va afisa un sir ~
i f (a[1»a[1+1]) begin i f (a[L]>a[.i+l]) { 8 n t ru i - 1, n executa
x _ 0;
aux:=afi]; aux=a[i"); 9 de valori crescatoare,
10 ntru j _ 1, m executa
a[i) :=a[1+1]; a[1J=a[i+1];
11 ~~ _ x + a[i,j] mod 10, c) Dati exemplu de set de date de

U
a [1+1] :=aux; a [i+l]=aux;
e~; } 12 intrare pentru care se va afisa un un
13 scr1e x;
a) Ordoneaza crescator elementele tabloului sir de valori reprezentand Burna
14 stop.
elementelor pe fiecare linie.
b) Interschimba elementele tabloului astfel incat la final eel mai mare element se I
afla pe ultima pozitie a tabloului d) Realizati programul in limbajul de cJ
c) Interschimba elementele tabloului astfel Incat la final eel mai mic element se programare studiat PascaI/C/C++.
afla pe prima pozitie a tabloului
2. Se considera urmatorul program pseudoeod:
d) Interschimba elementele de pe pozitii pare cu cele de pe pozitii impare ~

1 cii.teste n,mi a) Ce se va afisa pentru n=3, m=3 si


18. Se considera declaratiile: 2 ontru i _1, n executa tabloul A cu elementele eitite in
3 ~ntru j _l,m executa
var a:array[O .. 9,O .. 9]of integer;
x:array[O .. 99] of integer;
lint arlO] [10J, x[lOO);
4
5
ci.teste a[i,j]; ordine pe linii: 15,40,51,44, 12,33,
2,33, 5?
LJ

6
7, max o- 0; , .

110 111 U
. i
I

Ii e entru j ....1, m executa b) Care este valoarea maxima pe care

r:
9 x +- 0;
4. Se considera urmatorul program pseudocod:
o poate lua variabila max? Dati un
1'0 [entru L. ..... l,n .execwca 'U.:i.ntreg it n , j, arlO] [10]:
11· a[i,j] mod 3=0 .atunci exemplu de set de date de intrare a) Ce se va afisa pentru n=4?
2 citeste n;
,..., 22 x ..... x +1; pentruaceasta situatie, b) Ce se va afisa daca instrucpunea :
i 13 3 ontJ::u j - 1, nexecuta a[iJ] <- j devine a[iJl +- i?
( ,: 14 4 centru i 1, n 'executa
c) Dati exemplude set de date de 5 a[i,j] j; c) Modificati algoritrnul astfel incat
15 rdaca x>max atunei max +-Xi
-6
16 ~ intrare pentru care se va .afisa elementele in eadrul unei Iinii sa fie
valoarea O. 7
egale cu numarul Iiniei respective.
" 17
181 seri.e max;
9
8 [entru i ..... 1, n -execwca
centru j ..... 1, n, -executa d) Realizati programul in limbajul de
19- stop. d) Modificati algoritrnul astfel incat 10 aerie a[i,j]; programare studiat PascaIlC/C++,
sa .afiseze §i numarul coloanei pe 11 pentru algoritmul de la punctul c).
care s-a obtinut valoarea finals a 12
13 stop. e) Modificati algoritrnul astfel incat
variabilei max. 14 elementele matrieei sa fie
completate, in ordine, pe eoloane eu
e) Realizati programul in limbajul de prirnele n2 numere pare.
" programare studiat Pascal/C1C++,
pentru algoritrnul de la punctul d) 5. Se considera urmatorul program pseudocod:

n 1 intreg i,n,rn,j,a[10] [10]; a) Ce se va afisa daca la intrare vor fi


3. Se considera urmatorul program pseudocod: 2 citeste n, m; k ..... 0;
3 ,entru i ..... 1, n executa
.introduse valorile: n=4 si m=3 ?
i intreq it n, linie, x, a) Ce se. va afisa pentru n=3, m=4 ~i 4 aea i mod 2 = 1 atunei b) Ce se va afisa daca instructiunea
2 max, arlO] (10]; 5 fPGntru j ..... 1, rn executa a[ij]<-k devine a[iJl <-n *m-k+I?
tabloul A cu elementele citite in
! 3 oiteste n, m; 6 L.k ..... k+,l; a(i,jJ\ ..... k; c) Modificati algoritrnul astfel incat
I 4. e n t ru i __ 1, n executa ordine pe linii: 7, 7, 3, 2, 34, 3, 3, 2, 7
5 ~ntru j +- 1, m executa 2,2,4,2? 8 al.tfel.
elementele tabloului sa fie
6 La ci-teste a u , j] ; 9 fentru j .....rn, 1, -1 executa completate pe coloane dupa aceeasi

r 8
7

9
[

max ... 0:
b) Care este valoarea maxima pe care
o poate lua max? Dati un exemplu de
10
11
12
t.k.....k + 1; a[i,j] ..... k; regula prezentata alaturat,
d) Ce se va afisa daca instructiunea
pentru de pe linia 9 devine pentru
,, 10
11
linie ..... 0;
,ntru i __ 1, n executa
x __ 0:
set de date de intrare pentru aceasta
situatie,
13
14 n tru i ..... 1, n executa j.f:-l,m eXecuta

O
, , 12 15 rntru j ..... l,n executa e) Realizati programul In limbajul de
l, ;
13
14 rmca
n tru j ..... 2, m executa
a[i,j.J=a[i,ll atunei. c) Dati exemplu de set de date de
16
17
t. aerie ,a[i,j]; programare studiat PascaI/C/C++,
pentru algoritmul de la punctul c).
L.
r
! ,
lj
15
16
17
18
O x -- x + 1i

rdaca x > max atunei.


intrare pentru care se vor afisa
valorile 0 O.

d) Modificati algoritrnul astfel incat


18

6. Se considerii unniitorul program pseudocod:


19 I max ..... Xi f ' intreg i, n, j, m, a(lOO) [lOO]; a)Ce valori vor fi afisate pentru
20 I I linie .- i: sa afiseze si produsul elementelor
, ,
2 citeste n , In;
n=4 si m=4? Dar pentru n=4 ~i m=1?
,
21
22
l..~ situate pe linia pe Care s-a obtinut 3 [entru i ..... l, n executa
b) Dati un exemplu pentru date Ie de
I valoarea finals a variabilei max. 4 rntru j l, In executa'
23 serie linie, max; 5 ali,j] i; intrare, astfel incat numarul de
24 stop. 6 elemente nenule din matrice sa fie
r e) Realizati programul in limbajul de 7
programare studiat Pascal/C/C++, egal cu nurnarul de elemente nule.
8 ontru i ..... 1, n executa
pentru a1goritmul de la punctul d) 9 centru j ..... 1, i executa c) Determinati in functie de II ~ i m
10 a[i,m-j+ll ..... 0, care este numarul de valori nule?
11 d) Realizati programul in limbajul de
12
programare studiat PascaIlC/C++.
112 113
~7",.

....J
7. Se considera urmatorul program pseudocod:

rr
8. n t ru i -_ n, 2, -1 executa c) Modificati limitele de ciclare ale i
·9 pPBntru j_ n,n-i+2,-1 ~xeo. ,

;;i .:i.ntreg if ,j, s,a[lOO) [100]; 10 I m_ m + 1; instructiunii de pe linia 5astfelincat


Of
a) Ce -se va .afisa l'entru n=4 ~i elementelor de pe diagonala -J
2 c:i.teste 0; Tl II a[i,j]_m;
tabloul Acu elementele citite in
3 s_ 0;
ordinepe linii: 1,2,3,.4,4,3,2, 1, 1,
42
l.~ secundara sa nu lise .atribuie nici 0
(!
~tru i ..... 1, nexecuta 13 valoare?
t
4 .
5 ntru j ..... 1, n executa 2,3,.4,4,3,2,1,-? 14
[:"eiteste a[i,j]; 15 d) Realizati prograrnul in limbajul de ..J
b) Determinati in functie de n pentru programare studiat PascallC/C++.
·9
10
[entru i_1, (0+1) div -exec.
2
[:"ntru j ..... i, n-i+lexecuta
cate elementedin matrice a fost
calculatii suma? 10. Se considera urmatorul program pseudocod:
11 s ..... s + a{i,j]; c) Modificati instructiunile .de pe
12 ,1 ~ntreg i, n, ,j, m,a[100] [100]; a) Care vor fi elementele tabloului A
Iiniile 9 ~i 10 astfel incat sa fie
13
14
15
serie s . calculatii suma elementelor dispuse
simetric rfata de Iinia de mijloc a
2
3
4
ontru
citeste n;
i - 1, n executa
ntru j _ 1, n <£lXecuta
l'entru n = 4?
b) Determinati 0 valoare a lui n --.J

tabloului? .~. [:"ali,j] _ li-jl+1; astfel incat elementele pe linii sa.


formeze siruri monoton crescatoare
d) Realizati programul tn limbajul de
programare studiat PascallC/C++. 8
9
ontru~tru
i -
j
1, n executa
_ 1, n -executa
sau descrescatoare?
c) Modificati instructiunea de
,
~
,

10 ,scr~e a[i,j); atribuire de pe linia 5 astfelIncat,


8. Se considera urmatorul programpseudocod: 11 completiind elementele dupa aceeasi
12 regula, cea mai midi valoare din
intreg if n , , j I p, a [100] [100] ; 13
1
2 ai-teste 0, a) Ce se va afisa pentru n=4 ~i matrice sa fie o.
tabloul A cu elementele citite in
3
4
5
ontru
p ..... 1i

centru i ..... 1, n executa


j ..... 1, n executa
ordine pe linii: 2, 2, 2, 2, 3, 3, 3,3,4,
4A, 4, 5, 5, 5, 5, ?
d) Realizati programul in limbajul
de programare studiat Pascal!
C/C++.
r ~

6 citeste a [i, j] ;
7 b) Determinati in functie de n pentru ~ 1
8
9
10
[entru j .....1, (n+ljdiv 2 exec.
ce;tru i ..... j, n-j+l -executa
cate elemente din matrice a fost
calculat produsul? 2.2.3 Probleme rezolvate
,
w
,

11 p ..... P * a[i,j]; c) Modificati instructiunile de pe r 1


12 liniile 9 si 10 astfel incat sa fie
13 1. Completati elementele unui tablou bidimensional patratic de ordin n, sub form.
14 serie p. calculatii suma elementelor dispuse --.J
unor patrate concentrice de valori consecutive, incepand cu I.
15 simetric falii de coloana de mijloc a
tabloului? Exemplu: Pentru n =4 elementele tabloului vor fi: , 1
d) Realizati programul in limbajul de
111 1 u
programare studiat Pascal/C/C++.
122 1
122 1
9. Se considera urmatorul program pseudocod: 1111 I
--.J
Solutie: Trebuie traversate un numiir de [(n+1)/ 2] patrate concentrice. Algoritmul
1 citeste 0; m ..... 0; a) Care vor fi elementele tabloului A , .,
2
3
4
5
6
r e n t ru i ..... 1, n executa
fPSntru j ..... 1,- n-i+1 executa
1m ..... In + 1i
I I
l.~
a[i,j] _ m;
pentru n=4?
b) Determinati 0 valoare a lui n astfel
tncat elementele sa fie ordonate
va parcurge succesiv patratele, traversand simultan cele doua linii (latura de sus _
latura de jos) respectiv cele doua coloane (latura smnga -latura dreaptii) .

:t'lvar
'cZ',.- a:~~ay(~ .. 10,1..10]of byte;
#i n C1 Ud e <iostrearn. h>
~Sign~d.char a[10] [10];
w
r

·7
114
crescator pe linii?
I_3_~ n,~,J,r:~nteger;

115
l
:a.nt n,~,J,r;
~

~i
ij!

4 'begin 'void main ( ) { 3. Se considerii un tablou bidimensional cememoreazape fiecare din cele n linii
5 readln (n) ; cin»n; cate 0 multime .de m elemente. Sa 'se realizezeun program care determina pereehea
6 for r:=l to (n+l)d.iv 2 do begin £or (r=1;r<=(n+1)/2;r++) {
for j:=r to n-r+l do begin £or (j=r;j<=n-r+l;j++)· { de multimi cu intersectie de cardinal maxim. Se vor afisa numerele de ordine ale
7
r 8 a{r,j]:=r; a[n-r+1,j]:=r; a[r-1J [j-1J~r; liniilor din pereche.
i ! 9 .end; aIn-r] [j-1]=r; Exemplu: seva afisa:
lD for i:=r+1 ~o n-r ,do begin )
Pentru n=4, m=4 I 3
11 afi,r] :=r; afi,n-r+l] :=r; for (i=rtl;i<=n-r;i++) (
si matricea A:
- 12
13
14
end;
end;
fOr i: =1 to n do begin
a[i-11 [r-1]=r; a[i-l] [n-r]=r;

)
) 8679
2145
15 for j:=l to ndo writ,e(a[i,j]"); for (i=O;i<n;i++) { 9278
16 write1n for (j=O;j<n;j++)
17 end; cout;c (.int) a [i] Ij}; 4237
,18 end. cout«endl;} }
Solutie: Algoritrnul identifies perechea de linii eu intersectie maxima in O(n 4 ) .
2. Se considera un tablou bidimensional eu n linii ~i m eoloane. Sa se determine Pentru oricare doua linii, toate elementele de pe una dintre ele sunt cautate pe
~
,
nurnarul de perechi de linii monotone; Doua linii se numese monotone .daca orieare cealalta, contoriziindu-se numarul de elemente comune.
,
pereche de elemente ale lor situate pe aceeasi coloana respecta monotonia
1 var #include <iostream.h>
elementelor de pe prima coloana. ' 2 a:arrayIl..IO,1..10]of byte; int arlO] [lO],n,l,i,j,nr,m,rnax,
Exemplu: se va afisa: 3 n,l,i,j,nr,m,rnax,c,x,y,t:byte; c,x,y,t;
r Pentru n=3, m=4 I 4 begin Ivoid main () {
:l ; si matricea A : Liniile 1 ~i 3 formeaza 0 pereche de linii ,5 readln(n,m); max:=O; cin»n»rn;
6 for i:=l to n do max=O;
8676 monotone. 7 for j :=1 to m do read(a[i,j]); for (i=O;i<n;i++)
2147 8 for i:=l to n-e L do for (j=O;j<m;j++) cin»a [i] [j];
r
I
4235 9 for j :=i+l to n do begin for (i=O;i+l<n;i++)
10 nr:=O; for (j=i+l;j<nij++)
Solutie: Algoritmul testeaza pentru orice pereehe de doua linii daca sunt monotone. 11 for c:=l to m do nr=O;
Pentru aceasta se memoreaza In variabila mt relatia de monotonie dintre primele 12 for t:=l to m do for (c=O;c<In;c++)
l~ if a[i,c)=a[j,tJ than inc(nr); for (t=O;t<mit++)
doua elemente. Toate celelalte m-1 perechi de elemente de pe cele doua linii 14 if nr>max then begin if (a[i] [cl==a[j] [t]) nr++;
l . trebuie sa aiba aceeasi monotonie. 15 rnax:=nr; x:=i; y:=j; if (nr>max) {max=nrix=iiy=ji}
16 end; )
1 var #include <Loatxre em, h> 17 end; cout«x+l« '«y+l«endl;
,r 2 a:array[l .. lO,1 .. 10]0£ byte; unsigned char a[10} [10]; 18 write1n (x,' " y); end. )
I

I 3 n,1,i·,j,nr,m:integer; int n,1,i,j,nr,rn,rnt,ok;


\
4 mt,ok:boolean; void maine) {
5 begin cin»n»m; nr=O; 4. Se considera un tab lou bidimensional ce memoreazii pe fieeare din eele n linii
6 read1n(n,m); for (i=O;i<n;i++) cate a multime de m elemente. Sa se realizeze un program care determina perechea
7" nr:=O; for (j=O;j<m;j++) c Lroo-a [i] [j]; de multirni eu reuniunea de cardinal maxim. Se va afisa numerele de ordine ale
8 for i:=l to n do for (1=0; l+l<n; 1++) liniilor din pereche.
~; for j:=l to m do read(a[i,j]); for (i=l+l; i<n; i++) {
10 for 1:=1 to n-l do mt~a[lJ [OJ<a[iJ [OJ; ok-e Ls
11 for i:=1+1 to ~ do begin for (j=l;j<m;j++) Exemplu: se va afisa:
i
12 mt:=a[1,1]<a[i,1]; i f ({a [lJ [j J <a [iJ [j J ) !='11lt) Pentru n=4, m=4 I 2
13 ·ok:=true; ok=O; si matricea A:
14 for j:=2 to m do .if (ok) nr++;
i 15 if (a[1,j]<a[i,j])<>mt then }
8679
16 ok:=fa1se; cout«nr; 2145
17 if ok then inc(nr); ) 9278
18 end; 4237
-
I
19 writeln (nr) ;
20,- end.

116 117
!:<-
i ,

....J

Solutie: Algoritmul identifica perechea de linii cu reuniune maxima In ooo. 1(>


11
i:=2i
'While i <=n do
'Whi.~e (i<n)
i.f (5[a[i] [OJJ~~l) f
Pentru oricare doua Iinii, se considera di reuniunea lor are cardinalul egal eu 2 -* m,
12 if s[a[i,l]]= 1 then begin :for (1=i+1;1<ni 1++)
[
,
adica nu tau elemente comune. Grice element comuncare 'este identificat 13 :for l-:=i+l,:ton do -.£or (j=O;j<m;j++)
~

micsoreaza cardinalul reuniunii ell 0 unitate. 14: :for j :=1 -to m do a[l-l] [jJ-a[l] [jJ;
1~5· a[l-l,j] :=a[l,j]; n--i }
1 var #includa <iostream.h> 16 dec (n) ;.end -else i++;
2 a:array[1 .. 10,l .. lO]of byte; :i.nt arlO] [lO],n,l,i,j,nr,rn,rnax, 17- '81.8e .Lnc (i) ; :for (i=O;-i<n; i++) ( ~

3 n,l,i,j,nr,m,max,c,x,y,t:byte; c,x,y,t; 18 for i:=l -to ndo begin cout«endl;


4: begi.n ivoi.d main ( ) 19 writeln; -for (j=O;j<m;j++)
S: readln{n,rn); max:=O; cin»n»mi 20 :for j:=l to m do write{a[i,j]) cout«a{i] Id l c-c ' I;
6· for 1:=1 to udo max=O; Zl,' -end; end. ) } w
7 for j :=1 to In do read(a[i,j]); for (i=Oii<nii++)
8 for 1:=1 to n-l do -for (j=Oij<mij++) 6. Fie un tablou bidimensional de n linii ~i m coloane, Sa se realizeze un program
:g', for j :=i+1 to n do begi.n cin»a [i] [j] ;
10 nr:=2*m; for (i=Oii+1<n;i++)
care insereaza in fata oricarei linii ale carei elemente sunt ordonate crescator sau
11 for c:=l to In do for (j=i+1ij<n;j++) descrescator, 0 nona linie en elemente egale eu valoarea maxima de pe linia ~
12 for t:=l to m do nr=2*m; ordonata,
'-13 i f a[i,c]=a[j,tl then dec (m;) ; for (c=O; c<m; c++) Exemplui . se va afisa : 8888
lA i.f nr>max then begi.n for (t=O;t<m;t++)
Pentru n=2, m=4 1458
IS
16 end;
max:=nr; x:=i; y:=j; if (a[i] [c]==aJj] it] )nr--i
~i matricea A: 9999 LJ
i f (nr>rnax) {max=nrix=i;y=j;}
',17' end; ) 1458 9852
,'18 writeln (x, I " y) ; cout«x+1«' '«y+1«endl; 9852 ;
;19: end.
~
Solutie: Inserarea unei linii i se face prin deplasarea tuturor liniilor incepand cu n,
5. Fie un tablou bidimensional de n linii si m coloane. Sa se stearga toate liniile n-l, .. .i eu 0 pozitie mai jos. Valoarea variabilei i care indica Iinia curenta in
! 1

care incep cu un element ce se regaseste pe prima linie. Valorile elementelor sunt prelucrare, se incrementeaza cu 0 unitate daca fiU s-a efectuat inserarea unei linii, I
I
naturale mai mici dedit 1000. Exemplu: sau eu dona unitatii daca s-a inserat 0 nona linie pe pozitia, U
Pentru n=4, m=4 si matricea A : se va afisa : Fieeare operatie de inserare este insotita de 0 inerementare a numarul de linii a
8679 8679 tabloului. r .~

7145 4237 ;...,;


var #include <iostream.h>
9278 a:array[1 .. 10,1 .. 10]of bytei unsigned char a[10] [10];
4237 ok,w:boolean; int ok,w,n,l,i,j,ro,c,v;
n,l,i,j,m,c,v:integer; ,void main () {
Solutie: Algoritmul foloseste un vector suplimentar s cu indici mai mici ca 1000, begin cin»n»ro; ,
w
ale carui elemente sunt 0 sau 1. Astfel, s['l=1 daca valoarea i se gaseste pe prima readln (n, m) ; for (i=O;i<n;i++)
linie in matrice. for i:=l to n do for (j=O;j<ro;j++)
,8" for j:=l to m do read(a[i,j]); cin»a [i] [j]; fl
Stergerea unei linii x se face prin deplasarea tuturor liniilor x+ 1,... n cu 0 pozitie ;:9 i=O; ,i
i:=l;
mai sus. Valoarea variabilei i care indica linia curenta in prelucrare, se :20 while i<=n do begin while (i<nl ( u
incrementeaza eu 0 unitate, nurnai daca linia respectiva nu a fost stearsa, Fiecare '11 ok:=a[i,1]<a[i,2]; ok~a[iJ [OJ<a[iJ [lJ; w~l;
operatie de stergere este insotita de 0 decrementare a numarul de linii a tabloului. "12, w:=true; for (j=1;j+1<m;j++)
",13 for j:= 2 to ro-1 do if «(a[i] [j]<a[i] [j+1] l !=okl
1" var #include <iostream.h> '14, if (a[i,j]<a[i,j+1]l<>ok then w=O;
if (w) {
-'
2 a:array[1 .. 10,1..10]of byte; int a[10J [10),5[1001J; "'1'5:',1 w:=false;
3
4
s:array[O .. 1000] of byte;
n , 1, i, j , nr, m: integer;
int n,l,i,j,nr,m;
void maine) {
1'"
"J..7
if w then beg:in
for l:=n dOWnto i do
for, (1=n-1;1>=iil--)
for (c=O;c<m;c++l
. 5; begi.n cin»n»m; ,18 for c:=l to ro do a[1+1) [eJ~a[lJ [eJ;
6' readln{n,m); for (i=Oii<nii++) 19 a [1+1, c] ;=a [1, c); if (ok) v=a [i] [rn-1]; w
7 for i:=l to n do for '(j=O; j<m; j++) cin»a [i] [j] ; 20 if ok then v:=a[i,ml else v=a [i] [0];
8 for j:=l to m do read(a[i,j]); for (i=O;i<m;i++) s [a[O] [i] ]=1; :21 e1.se for (c=O;c<m;c++) ali] l c l vvr ': -':
9 for 1:=1 to m do s[a[l,i]]:=li i=li :2~ v:=a[i,1]; n++; i "
~
118 119
23 £or c:=l to m,do a[i,c]:=v; i+=2; . 8. Se considera un tablou bidimensional A(n,m) cu elemente in multimee cifrelor
24 inc(n); )
0..9. Realizati un program Care determina pentru fiecare linie baza minimain care
25 inc(i,2) e1se i++;
.26 end ) cifrele respective pot reprezent~ un. numar, Considerand ca ~e linie este descris in
27 41se inc (i) ; } aceasta baza un numar, determinati valoarea obtinuta la conversia lui in baza 10.
! 28 end;
? end.
Pentru fiecare linie se va afisa bazaminima ~i valoarea dupa conversie.

Exemplu: Pentru n=3, m=3 se va afi~a:


,~ 7. Se consideriiuntablou bidimensional A(n,m) cu elemente intregi, Realizati un si matriceaA: 4 27
"program care inverseaza elementele tabloului, prin intennediul unui vector de n*m 123 2 5
elemente: 101 10 789
Exemplu: 789
: ,
" .J Pentru n=3, m=3 se va afisa :9 8 7 Soiutie: In scrierea unui numar in baza b se folosesc cifrele Oub-I. Algoritmu~
~i matricea A : 654 identifica elementul maxim de pe fiecare linie,iar baza minima corecta este mal
123 32 1 mare cu 0 unitate decat acesta.
456
789 1 var #include <iostrearn.h>
2 a: array [1. .10,1..10]of byte; .int a[10] [10];
Solutie: Algoritmul liniarizeaza matricea folosind vectorul auxiliar v. Astfel, 3 n,b,i,j,m,nr:integer; int n,b,i,j,m,nri
4 begin void main () I
oricare element al tabloului bidimensional a[ll[Jl se va regasi in vector pe pozitia 5 read1n (n, m) ; cin»n»m;
(i-I)*m+j. . 6 for i:=1 to n do for (i=Oii<n;i++)
7 for j:=l to m do read(a[i,j]); for (j==O;j<mij++)
i var #include <iostream.h> 8 for i:=1 to n do beqiri cin»a[ij [jj;
2 a:arraY[1~.10r1 . . 10)of byte; unsigned char a [10] [10] ,v[lOO); 9 b:=a [i, 1] ; for (i=O;i<n;i++)
3 v:array{1 .. 100]of byte; int n,x,i,j,m; 10 nr:=O; b=a[i] [0]; nr=O;
4 n,x,i,j,m:integer; :vo;i.d main ( ) { 11 for j:=2 to m do for (j=l;j<m;j++l _ ..
5 begi.n cin»n»m; 12 if a(i,j]>b then b:=a[i,j]; i f (ali] Ij]>bl b~al;'] IJI,
6 read1n (n,m) ; for (i=O;i<n;i++) 1'3 inc(b); b++;
7 for i:=1 to n do for (j=O; j<m; j++) 14 for j:=l to m do for (j==O;j<m;j++)
8 forj:=1to-mdo cin»a [i] [j] ; 15 nr:=nr*b+a[i,j]; nr=nr*b+a[i] [j];
9 read(a[i,j]); 16 writeln(b,' ',nr); cout«b«' '«nr«endli
10 for i:=l to n do for (i=O;i<n;i++) 17 end; )
11' for j:=l tomdo for (j=O;j<m;j++) J.B end. )
12 v[(i-l)*m+j]:=a[i,j.); v[i*rn+j]=a[i] [j].;
13 for i:=1 to m*n div 2 do begin for (i=O;i«m*n)/2;i++) (
14 x:=v[i]; x=v[i]; v[i]=v[m*n-i-1];
9. La un concurs de patinaj ce contine m probe, participa n sportivi identificap prin
15 v[i]:=v[rn*n-i+l]; v[m*n-i-1]=x; numere de la 1 la n (n,m <100). Sa se afiseze numerele de ordine ale sportivilor ce
16 v[rn*n-i+1]:=x; ) au obtinut cele mai mari 3 punctaje total~. Punctajele concurcntilor sunt intro duse
18 end; for (i=O;i<n;i++) 'de la tastatura, in ordinea numerelor de concurs. Nota maximaa unei probe este 10.
.19 for i:=1 to n do for (j=O;j<m;j++)
20 for j:=l to m do a[i] [j]=v(i*m+j);
21 a[i,j] :=v[ (i-l)*m+j]; for (i=O; i<n; i++) { Exemplu: Pentru n=5, m=3 si punctajele: 5,2,3; 5,5,5; 1 0 I; 7 8 9; 442 se
22 for i:=l to n do begin cout«endl; va afisa:
23. writeln; for (j=O;j<rn;j++) PremiulI: 4; Premiul2: 2 ; Premiul3 : 1,5.
24 for j:=l to m do write(a[i,j]) cout«a [i] [j] ;
25 end; )
2p end.
Solutie: Se vor plasa intr-o matrice de doua coloane, pentru fiecare concurent,
)
numarul de identificare si suma punctajelor obtinuts de acesta. Matricea va fi
ordonata descrescator dupa coloana punctajelor (a doua).

120 121
i var #include <iostream.h> Exemplu: Pentru n=3 se va afisa: r .~

2 a:array[l .. 100,1.~2Jof byte; ,.;int a[100J [2J;


3 n,b,i,j,x,m,p:integer; int n,b,i,j,x,m,p; 022 , ,
4 begin Ivoi.d -meLn ( ) ( 102 '-'
5 readln (n, rn) ; cin»n»m; I I0
6 ~for i: =1 to n do ..begin :for (i=O;i<n;i++) 1 ,
a[iJ [lJ-O; .
7 a[i,2] :=0;
a [iJ [O)-i;
4. Se considera doua tablourf bidimensionale de dimensiuni identiee (nxm). Sa se
8 a Ii, 1] :=i;
9 :for j: =1 to m do begin "for' (j=O;j<m;j++) afiseze transpusa matricei suma, Transpusa unei matrice se obtine prin schimbarea
"10 read(x); { cin»x; Iiniilor eu eoloanele. ~ !
.11 inc(a[i,2],x); a [i] [lJ+-x; } Exemplu: Pentru n=3, m=2 si I Se va afisa:
12 'Gnd.; ) u
. '13 end.; :for (i=0;i+1<n;i++)
tablourile:
14 £or i:=1 ~o n-1 do for (j=i+1;j<n;j++) 23 56 744
~5 for j:=i+1 to n do i f (a[iJ [11<a[jJ [lJ) 34 I I 959
:16 if a[i,2]<a[j,2] then begin xea [iJ [lJ ; 49 00 :i
~17 x:=a[i,2]; a[iJ [lJ-a[jJ [lJ; ~
18 a[i,2J:~a[j,2J; a[jJ [lJ-x;
19 a[j,2] :=X; x-a[iJ [OJ; 5. Realizati un program care determine numarul liniei eu eele mai multe elemente
,
20 x:=a[i,l]; a[iJ [OJ~a[jJ [0]; pare, al unei matrice patratice de dimensiune nxn. Daca exista rnai rnulte linii cu
'21 a[i,1]:=a[j,1]; a[jJ [OJ~x; } numar maxim de elemente pare se va afisa una singura.
22
23
a[j,1]:=x;
end;
cout c-ca In l [OJ+1«1 '; p=O; i=1;
whi1e (i<n && p<3) (
Exemplu: Pentru n=3 ~i matrieea: I se va afisa 2.
2~ write(a[1,1]); i f (a [iJ [lJ i=a [i-1J [lJ) 12130
24
'25
p:=1;
i:-2;
{ p++;
cout c-cend'Lr }
4 ISO 6
78900
u
26 whi1e (i<=n)and (p<=3) do begin if (p<3) cout«a [i] [0]+1«' ';
27
28
if (a[i,2J<>a[i-1,2]) then
begin inc(p);writeln;end;
i++;
6. Se considera un tablou bidim~nsional eu n linii ~i m coloane, Realizati un "1
) )
29 if p<4 then write(a[i,1]); program care identifie~ linia cu eele mai multeelemente divizibile eu primul J
,3D inc(i); element situat pe ea.
31 end; Exemplu: Pentru n=3, m=3 ~i matrieea: I se va afisa 2.
;"32 end.
22135 1
3 1506 -'
2.2.4 Probleme propuse 78900
11
1. Se consideraun tablou bidimensional cu n linii ~i m coloane ce contine numere
naturale. Realizati un program care determina suma elementelor de pe fiecare linie
.7. Realizati un program care deterrnine eel mai mare divizor comun al elementelor
situate pe fiecare coloana, a unei matrici patratice.
J
cu numar de ordine par si produsul elementelor de pe fiecare coloana cu numar de Exemplu; Pentru n=3 ~i matrieea: I se va afisa I 2 15.
ordine impar. 24135 1
3 16015 u
2. Se considera un tablou bidimensional cu n linii si n coloane ce contine numere 7630
naturale. Realizati un program care deterrnina elementul maxim de pe diagonala
principala a matricei si linia pe care acesta este situat. 8. ~ealizali un program care otdoneazii crescator doar elementele pare, situate pe u
liniile ell numar de ordine par, al unui tablou bidimensional cu n linii si m coloane.
3. Scrieti un program care completeazii elementele unui tablou patratic de ordin n Exemplu: Pentru n=3, m=4 si matrieea: se va afisa r -~

astfel: 24132 24132


elementele diagonalei principale sunt egale cu 0; 24 I 6 12 6 I 1224 -'
elementele situate sub diagonala principals sunt egale cu I 167302 167302
elementele situate deasupra diagonalei principale sunt egale cu '2 ( )
,

~
122 123
Exemplu: Pentru n=3, m=4 lili matricea: se va afisa '4 apare de 5 ori '
r 9. Realizati un program care ordoneaza descrescator elementele de pe prima Iinie a
,
24132
unui tablou bidimensional numai prin operatia de interschimbarea coloaneJor.
34604
Exemplu: Pentru n=3, m=4 si matricea: se va afisa
164304
24132 13422
316013 601313
18. Sa sedetermine multimea fermata din elementele distincte de pe marginea unui
167301 307162
tablou bidimensional patratic,
r~
10. Realizati un program care permutii circular liniile unui tablou bidimensional cu Exemplu: Pentru n=3 ~i matricea: I se va afisa 1 2 3 4 6
n linii si m coloane, ell 0 pozitie rnai sus: 243
Exemplu: Pentru n=3, m=4 ~i matricea: se va afisa 346
24132 3 1 60 13 143
r 3 1 6013 167302
167302 24132 19. Se considera un vector de n*m caractere. Sa se completeze 0 matrice de n linii
lili m coloane cu codurile ASCII asociate caracterelor respective.
11. Se considera un tablou bidimensional patratic cu n linii, Sa se determine Exemplu: Pentru n=3, m=4 si vectorul se va afisa matricea:
c.m.m.d.c al valorilor ce reprezintii suma elementelor de sub diagonala principala si 'A','B','C','D','a','b','c','d','A','a','B 65666768
suma elementelor de deasupra diagonalei rrinCiPale. , ','b' 979899100
Exemplu: Pentru n=3 si matricea: se va afisa 3 65976698
I 60
r
I 916 20. Realizati un program care afiseaza 0 matrice patratica de ordin n ale carei
991 ' 2
elemente sunt numerele de la 1 la n , comrletate in ordine incepiind cu prima linie.
Exemplu: Pentru n=3 se va afisa: , 12 3
r-, 12. Se considera un tab lou bidimensional patratic cu n linii. Sa se determine
456
elernentele care sunt situate pe linii si coloane de suma egala. Un element a[ij) va
789
fi afisat dad suma pe linia i este egala cu suma pe coloanaj.
13. Se considera un tablou bidimensional patratic cu n linii. Sa se determine toate 21. Se considera un tablou bidimensional cu n linii ~i m coloane (l9n,n:s:IOO)
,
elementele ce reprezinta puncte '~a'(element minim pe linie ~i maxim pe coloana avand elemente intregi. Sa se determine numarul de linii care au toate
(
pe care este situat). componentele egale.
Exemplu: pentru n=5, m=3 si tabloul de mai jos, se va afisa:
r 14. Se considera 0 matrice patratica de n linii. Sa se afiseze suma elementelor 763 12
1. ; situate pe celedoua diagonale alaturate celei principale. 444
Exemplu: Pentru n=4 si matricea: I
se va afisa 12 (6+6) 383
123 4 666
in 2 123
I 456
.. , ,
321 2
4 '3 2 I
22. Se considera un tablou bidimensional cu m linii si n coloane (19n,n:S:100)
r, , 15. Sa se afiseze toate elementele dintr-o matrice de n linii lili m coloane care au toti avand ca elemente cifre binare. Fiecare linie reprezinta un numar in baza 2. Se cere
,I vecinii numere pare. Elementele vecine lui a[iJl sunt a[i-Ij}, a[ij-I], a[i+IJl si sa se afiseze aceste numere convertite in baza 10. Exemplu: Pentru m=5,n=4 ~i
L .'
a[ij+ I], daca existii. tabloul:
- , 16. Se considera 0 matrice patratica de n linii. Sa se stearga toate liniile din tablou
care incep eu un numar divizibil ell 10.
001 I
100 1
se va afisa:
3 9 14 5 0
•• 11 I 0
17. Sa se determine clementul cu numar maxim de aparitii al unui tablou 0101
, ~
'
bidimensional ell n linii ;;i m coloane. 0000
: ,
, J
124 125
j--
!:
'j;
'1,.-1
fh :
23. Se considera un tabloubidimensional cu n linii si n coloane (1:92:>;100) avand
componete de tip intreg, Cele doua diagonaleale tabloului impart'tabloul in patru
Exemplu: n=3, m=4 Ii matricea se va afisa:
!'r ,
3 1 89 o1 I 2 I
regiuni in forma de triunghi. Se cere sa se determine. suma componentelor din 4657 3345 w
interiorul fiecarei zone, 2013 " ,
6789
Exemplu: Pentru n=5 ~i tablouI:
01 1 1 0 se va aflsa: 29. Realizati un program care afileazii elementele unei matrice de dimensiune nxn, , ,
l....:
20103 Suma(zl)=4 parcurse in spirala, Exemptu: Pentru n=31i matricea:
22033 Suma(z2)=8 012 sevaafi~a:OI234567
783 ,
20403 Suma(z3)=12
04440 Suma(z4)=16 654
u
30. Cr~li un program care afiseaza elementele unei matri7e 'pa~tice de
24. Se considera un tablou bidimensional cu n Iinii ~i m coloane (1:>;m,n:>;lO) avand dimensiune nxn, dupa stergerea elementelor situate pe)diagonala principals. 1
componete cifre zecimale. Fiecare linie a tabloului reprezinta cifrele unui numar Exemplu: Pentru n=4 Ii matricea: se va afisa:
natural in baza 10. Se cere sa se afiseze peacelasi rand cifrele sumei celor n -'
0112 112
numere descrise prin tabloul anterior, des]'artite prin virgula. 3345 345 : "~
Exemplu: Pentru n=4, m=4 si tabloul lse va afisa: 6789 679
o9 1 4 1,3,6,9,5 7895 789 -'
921 1
3547 31. Realizari un. program care completeazii elementele unu! tablou bi~imensi?~a~ r 1

0023 A(n,m) cu valor! consecutive pe HnH, incepand de la numarul de ordme al liniei i


respective.· ,".
25. Fie a 0 matrice cu n linii si m coloane. Scrieti un program care verlfica daca
exista elemente aij ell proprietatea ca sunt egale ell c.m.m.m.c dintre suma Exemplu: Pentru n=3 si m=4 elementele tabloului A vor fi : . 1
elementelor de pe linia i ~i produsul elementelor de pe coloana}. 1234
2345
26. Se considera un tab lou bidimensional cu n linii si m coloane (I5im,nSSO) avand 3456
componete numere intregi. Se cere sa se afiseze liniile din tablou care au cele mai !
multe componente egale. 32. Se considera. 0 matrice A(n,m) ce confine numere int!e.gi. ~r~?nali crescator
Exemplu:Pentru n=4, m=5 ~i tabloul: se va afisa: elementelepare SItuate pe ultima coloana, prin interschimbarl de linii.
52845 85955 Exemplu: Pentru n=3, m=4 ~i matricea se va afisa :
85955 68616 A: 3452
79722 1234 1234
68616 2345 2345
3452
27. Se considera un vector cu nsm elemente de tip char. Stim cil el reprezinta forma
. un tablou bidimensional
33. Fie . . . ' un program care inverseaza
A(n,m). Realizati
liniarizata a unei matrice de dimensiune nxm. Sa .58 completeze ~i afiseze L....J
elementele matricei, tinand cont de aceasta presupunere.. elementele de pe liniile care incep cu un numar prim.
Exemplu: pentru n=3, m=2 si vectorul Cpl, 'v', 'c', 'd', 'b', 'a'), afisarea pe linii a Exemplu: Pentru n=3, m=4 ~i matricea se va afisa :
elementelormatricei este: A: 4237
pvc 4237 5432 -'
dba 2345 2543
3452
28. Sa se rearanjeze elementele unei matrice de dimensiune nxm, astfel incat ele sa
fie ordonate crescator atat pe linii cat ~i pe coloane. 34, Determinali numerele de ordine ale liniilor unui tablou bidimensional A(n,m)
care contin ceIe mal. mu Ite vaIon' pahndrom.
.

126 127 -J

,I~
Exemplu: Pentru n=3, m=4 si matrieea se va afisa :
Determinati linia ~i coloana pe care se va aseza regina si numilrul de pioni de pe
11 21 33 43 23 diagonale ataeate.
'. ,
22341452 Exemplu:
3245352 Pentru n=5, m=4, tabloul ;
~
se vaafisa 4 2 5 (linia 4, coloana 2, 5
I 100 pioni)
,, .35. Fie un tablou bidimensional cu n linii ~i m coloane eu elemente numere
01 0 I
naturale mai rnici decat 10000. Un element din .tablou are ea vecini, elementele
I0I0
,- situate In imediata vecinatate pe verticala ~i orizontala, Sa se identifiee doua
, 1000
elemente din matrice care au proprietatea di produsul vecinilor lor reprezintii cele
101 0
mai mari doua valori ee se pot obtine, Pentru fiecare element determinat se va afisa
valoarea acestuia ~i aprodusului eleinentelor vecine. .
39. Fie un tablou bidimensional cu n linii ~i m coloane cu elemente intregi, Din
r-i
, Exemplu: Pentru n=4, m=4 ~i tabloul: se va afisa : punetul de linia x ~i coloana y se poate parasi tabloul me~gand numaipe orizontala
0858 24096 sau v~rti:ala, ?ar. numai daca elementul este a[xJl] este negativ- P.e tras~ul urmat nu
8285 5512 trebuie sa se intalneasea alt element negativ. Sa se determine linia ~l coloana de
3830 unde se poate 'parasi matrieea, aslfelineiit surna elementelor iamlnite pe traseu sa
0262 fie minima. Afisati linia si coloana punctului de start ~i surne elementelor de pe
drum.
36. Fie un tablou bidimensional patratic deordin n cu elemente naturale. Se Exemplu:
n considers un traseu ee pleaca din matriee de pe linia x si coloana y. Directia de Pentru n=4, m=6 ~i tabloul : se va afisa 3 3 8 (linia 3, coloana 3,
miscare ne este datil de un sir de p caractere N, V, E, S care indica directia de 50 60 90 50 60 60
, , suma 8)
deplasare. Determinati suma elementelor situate pe drum. Elementul de start 40 30 -9 -3 40 .70
apartine drumului. 40 ci -8 5 2 I
,
n

Exemplu: 80 80 80 80 90 20
I , Pentru n=4, m=4, x=3,y=2,p=6, I se va afisa 30 (8 +2+9+5+1+2+3)
traseul N,N,E,S,V,V si tabloul :
0958
3215 III Fisiere text
3830
0262
2.3.1 Teste eu alegere ",ultiplii si dualii
, ,
(j 37. Fie un tablou bidimensional patratic de ordin n. Consideram un traseu ce plead 1. Care dintre urmatoarele variante realizeaza deschiderea la eilire a fisierului text
din matriee de pe liniax si coloana y. Directia de miscare ne este indicata de un sir 'A. TXT' .
,n de p caractere N, V, E, Scare reprezinta directia de deplasare. Determinati
!
,
elementele prin care s-a trecut de cele mai multe ori. De la intrarea standard se va a)reset(f) ;assign(f, 'A. txt'} a) f=fopen ("A. txt", "w");
b)assign(f,'A.txt'};rewrite(f)
prelua n, x, y, p si traseul urmat. Pentru fiecare element din solutio va afisa linia ~i c)assign(f,'A.txt') ;reset(A.txt)
b)f=fopen("r", "A.. txt") ;
coloana pe care este situat. c) f=fopen ("A. txt", r) ;
d) assign'(f,' A.txt' ); reset (f)
r
,
d) f=fopen ("A. txt", "r") ;
Exemplu:
,,
,

Pentru n=4, x=3,y=2,p=8 ~i 22 2. Care dintre urmatoarele variante realizeaza deschiderea la scriere a fisierului text
'B. TXT'
traseul N, N, E, S, V, S, S, V 1 32
a)rewrite(f);assign(f,'B.txt') a)f=fopen("B.txt", Urn);
38. Se considera 0 tabla de sah cu n linii si m coloane, pe care sunt plasate pioni. b)assign(f,'B.txt') ;rewrite(f); b) f=fopen("B.txt", "w");
C) assign (f, , B. txt' ) ; rewrite,(B); c) f=fopen ("w", ns. txt .. ) ;
Pionii sunt codificati la citire prin valoarea 1. Regina adversa trebuie plasata intr- d)assign(f, B.txt );rewrite(f); d) f=fopen ("B. txt", w) ;
un punet al tablei aslfel incat pe cele doua diagonale pe care Ie ataca, sa se afle cati
mai multi pioni.
128
129
r-r-

..J

3. Care dintre urmatoarele instructiuniau ca efeet eitirea unui earaeter din fisierul 6. Stiind ea fisierul 'E.TXT are urmatorul continut, ce se .va afisa in unna
; I
'C.TXI'. executaril prograrnului urmlitor?
a) a) ....J
assign(f,'C.txt'); reset(f); f=fopen C"C.txt", "r"); E.TXT
close(f); fal05a'(f) .- 123 4
b) b) 67 34 23
assign(f,'C.txt');"reset(f); £=fopen("C.txtll,·"r") ; 567 546 677
read(x); close(f}; scanf(t1%c",&x); £al05e(£); 1234 3234 4565 6564
c) c) 12345 12445 12223
assign(f,'C.txt'); reset(f); f=fopen("C.txt", "r");
. read(f.x); close{f); fscanf (f, "%,0", &x); falose (f) ; "ar #include <stdio.h>
d) d). f:text; x,y,z:integer; FILE *f; int x,y,z;'
assign(f,'C.txt'); reset(f); f=fopen ("C. txt", " r") ; begin void main { ) (
close{f); read(f,x)i falose (fl; fscanf,(f, "%c~J, &x) ; assign(f,'E.txt'); reset(F); f=fopen ("E. txt", "r") ;
read(f,x,yl; fseanf(f, "%d %d",&x,&y);
4. Consideriind ca variabila f este .de tip text/fi§ier, care dintre urmatoarele readln{f,z); fscanf(f,"%d\n",&z);
"-'
writeln(x,' ',y,' ',z,' '); printf("%d %d %d \n",x,y,z);
instructiuni verifica in mod corect daca s-a ajuns la finalul fisierului indieat de el. end. )
a) a)
i f eaIn(f) 1:hen :if (eof (fll al12 3 bl1 2 67 c) 1 67 567 d)2 3 4
write ('Final de fisier') eout « "Final de fisier"; w
el.se write ( 'Nu' ) e1.se cout « "Nu"; 7. Stiind ca fisierul 'F. TXT' are urmatorul continut, ce se va afisa in urma
executarii programului urmator?
bl 0) F.TXT ,
:if eof (f) -then :if (£eo£(£» 12345 12 ....J
write{'Final de fisier') cout « "Final de fisier"; 93 16 32
el.se write ( 'Nu' ) e1.se cout « "Nu"; 8.023 322 21 ( t
0.823 21 i ~
c) c) 0.21 213.12
~
if eoln{f)=false then i f (!eof(f»
write('Final de fisier') cout; -cc : "Final de fisier";
var #include <stdio.h>
else write ( 'Nu') e1.se cout « "Nu"; ~ ~
f:text; FILE *f; char x,y,z;
d) x,y,z:ehar; voi.d main ( ) (
dl begin ~

i f not eo£(£) then write('Nu') i f (! feof (f) ) cout« "Nu"; f=fopen(ffF.txt","r");


else write('Final de fisier') e1.se eout « "Final.4e fisier"; assign(f,'F.txt');reset(f); fscanf(f,"%c",&x);
read(f,x); readln{f,y); fseanf(f,"%c",&y); f "

5. stiind ea fisierul 'D. TXT are urmatorul continut, ce se va afi§-~ in unna read(f,z); while (getc (f) ! =' \n ' ); ,
I,

writeln(x,' ',y,' ',z,' '); fscanf(f,"%c",&z}; i,.....)


executarii prograrnului urmator? end. printf("%c %e %e \n",x,y,z);
D.TXT
13 45 23 a)l 2 3 b) 1 2 9 c) 1 9 8 d)l 9 3
32 42 234
L;
56 78
32 23 43
8. Stiind ca fisierul 'G. TXT' are urmatorul continut, ce se va .afisa in urma
32 32 32 32 executarii programului urmator?
var f:text; x,y,z:integer; #inelude <stdio.h> G.TXT
begin FILE *f; int x,y,z;
IaEaW5
. assign(f,'D.txt');reset(F); void ma i.n () (
S,a.d sdll
readln(f,x,y); f=fopen("D.txt", "r");
-dsa
read(f,z); fscanf (f, "%d %d %d\n", &x, '&y, &z) ;
Xda dsa asd
writeln(x,' ',y,' " z,' '); . fscanf (f, "%d", &z) ;
da
end. printf("%d %d %d \n"ix,y,Z);}
sda sad
a)13 45 23 b) 13 32 56 cl 13 32 23 d)13 45 32

130 131 --'


var #include <stdio.h> 7 whi1e not(eof(f) do begin
f:text; FILE *f: char x,y,z; ·8 read(f,ch); while (!feof(flll (
x,y,z:char: -void main ( ) ( 9 write(g,ch); ·fscanf(fi, "ts",&s);
begin f=fopen("G.txt",,"r") ; 10, ok:=true; if (strlen(s)=l)
assign (If' G.-txt'); reset (f) ; while(getc(f)!='\n'): 11 'Whi1.e:not(eoln{f) do .begin fprintf (f2, "te\n", s [OJ) ;
r: readln(f) " fscanf(f,"%c",&x); 12 read ef, (ch) ; else {
readln(f,x); while (getc (f) ! = I \n I ) ; 13 ok:=falsei i"printf (f2, "te", s [OJ);
readln(f,y); fscanf(f,"%c",&y); 14 end; fprintf(f2, "tc",s[strlen{s)-lJ) ;
readln(f,z); while (getc (f) !='\n 1 ) ; :I5 fprintf (f2, "\n");
,~ writeln(x,'
end.
'fY,' ',z,'
.
'); fscanf(f,"%c\n",&z);
printf("%c %e %e \n",x,y,z);}
16
17
i f not ok then write{g,Ch);
readln(f); writeln{g);
end;
,I
fclose(f1); fclose(f2);
18 close(f); close(g);
all S - b)a S - c) S - X d)l E S 19 unlink("in. txt");
erase(f); rename(g, 'in.txt');
20 end. rename("0. txt", "in. txt"); }
9. Care va fi continutul fisierului H.TXT In urma executarii programului urmator?
var #include <stdio.h> . text contine
2. Un fisier . numere ' . dispuse
rntregl . pe mal' 1 1011, Se.,dore~te
mu te I'·' d 1
f:text; FILE *f;char x,y,z; .
Inlocuirea '.... . ··
m nsier a tuturor epantii or1nom' numar x eu un atI num 'ar Y,....
citit e a
~
i x,y,z:char; voi.d maine) { tastatura, Realizati un program care pennite efectuarea acestei modificarl asupra
'begin f=fopen ("H. txt" , "w") ; continutului fisierului IN. TXT.
assign(f,'H.txt'); rewrite(f); fprintf{f, "led.. %d\n", 13);
writeln(f,'Ieri " 13): fp,rintf (f, "Azi' %d " I 14);
~ write ('Azi " 14); fprintf (f, "Maine %d\n", 15); Solutie: Se foloseste un fisier auxiliar OUT.TXr deschis la operatia de scriere~, i~
wri teln ('Maine ',15); fclose(f); care se vor piasa toate numerele din IN. TXT, excep!ie fac.\nd x care va fiinlocUit c.
close (f); )
end.
y. Dupa aceasta operatie fisierul IN.TXT vafi sters iar Our.1XT va fi redeuumlt
cu numele IN. TXT.
r a) b) c) d) 1 var f,g:text;
Ieri Ieri 13 Ieri 13 Ieri 2 iinclude <stdio.h>
x,y,nr:integer;
13 Azi "14 Azi 14 Maine 15 Azi 14 13 Azi 14 Maine 3 begi.n int X,¥,numar; char c;
Maine Maine 15 15 4 void main() {
r--:
15 assign (f, 'in. txt') ; reset (f);
I 5 assign(gl 'out.txt');rewrite(g); printf("nr de cautetr"}!
,
( j 6 writeln('nr de cautat'); scanf{"%d",&x); " .
7 read{x) ; printf("Inlocuiesc cu: )'.
8 writeln('Inlocuiesc cU'); scanf("%d",&y); tr "r");
,~
, ,
9 read(Yl; FILE *fl=fopen("in.tx\:, "w");
2.3.2 Probleme rezolvate 10 whi1e not(eof(f)) do begin FILE *f2=fopen("out.tx ,
11 whi1e not eoln(fl do begin while (! fecf (fll) f &c) ;
'12 read(f,nr) ; rscenr (f1, "%d%c", &numar,
1. Eisierul text IN. TXT sufera urmatoarea prelucrare: de pe fiecare linie sunt sterse 13 if. (x=numar)
,~
i f nr=x then write (g, v.: ')
toate caracterele cu exceptia primului ~i ultimului. Realizati un program care 14 e1.se write (g,nr,.' '); fprintf (i2, "%d ", y) ;
efectueazii aceasta operatic asupra continutului fisierului IN. TXT. "15 end; else
16 readln{f); writeln(g); fprintf(f2,"%d ",numa r);
17 end; if (c='\n')
r-' Solutie: Se va folosi un fisier auxiliar 0. TXT pentru scrierea pe fiecare linie a 18 fprintf/f2, "\n");
close(f); close(g);
primului ~i ultimului caracter de pe linia corespunziitoare din IN. TXT. Dupa aceasta 19. erase'(f) ; )
.. ~-k-

operatic fisierul IN. TXT va fi sters, iar O.TXT va fi redenumit cu numele IN. TXT. 20 rename(g, 'in.txt'); fclose(fl}; fclose(f2);
'21 end. unlink(lIin.txt"l,ill: txt") i
r: 1 var f,g:text; #include <stdio.h> rename("out. txt' , J.n.
.2 ch:char; #include <string.h> I
l ;
3. In fisierul text iN.TXT existil dispuse pe fiecare linie cate lIU numilT din.~iru~
3 ok:booleani char s{256];
'4 begi.n void maine) (
r 5 assign(f/'in.txt'); reset(f); FILE *fl=fopEm("in.txt", r " ) ;
U numerelor primelor n (n<30000) numere naturale nenule. Exceptie face UU smgu
6 assign(g, 'o ..txt') i rewrite (g) ; FILE *f2=fopen ("0. txt" , "w") ; numar care a fost omis. Realizat] unprogram care determine numarullipsil.
132
133

:...J
9"

Exemplu: 4 begin
5 void main ( ) {
assignef, 'in.txt·); reset(f);
IN. TXT Se va afisa. 3 6 surna:=o; -i.nt i;
2 7 ok:=true; FILE *f=fopen(lrin.txt","r"); ..J
8 whilenot(eof(f) and ok do do {
4 fscanf (f ,-"%d~', &Curent); ,
'9 .begin ,
5 10 read(f,curent); if (curent>suma+l) {
I 11 i f curent>suma+1 ~n printf ("Nr. maxim -»
12 printf ("%d\n", sumaj , ,
ok:=false
13 return;
Solutie: Suma primelor n numere naturale este n*(n+ I )div 2. Se va calcula suma 14
418e suma:=suma+curent;
-end; }
numerelor din fisier ~i numarul acestora. Pe baza formulei de mai sus se determina 'd5 ' close (f); suma+=cur~nt;
numarul lipsa. ' 16 } wh:i.~e (! feof (f) ) . '-'
"17 end.
writeln ('Nr. maxim " aumaj ; } ,
h •.•

i var f,g:text; #include <stdio.h>


'Z. aux,suma,nr:longint; int nr,aux; ~ong surna;
5. Sa se inlocuiasca toate caracterele neimprimabile din fisierul text A.IN prin codol
3 begin voi.d maine) (
ASCn allor, precedat de caracterul " # ". . ..J
4 assign(f,'in.txt'); reset(f)'; FILE *f=fopen("in.txt","r");
5 nr:=O; whi~e (!feof(f» (
-6: whi~e not(eof(f» do begin fscanf(f,"%d\n",&aux); Solutie: Un caracter neimprimabil are codul ASCII mai mic sau egal co 2. Fisierul
7 readln{f,aux)i surna+=(1ong)auxi A.IN va fi parcurs la citire ~i simultan se va crea fi~ierul B.IN in care caracterele vor
-'
8 suma:=suma+aUXi nr++i fi scrise conform cerinlei. La final, fisierul initial va fi sters, iar B.IN va f
9 inc(nr); } redenumit cu numele A.IN.
10 end; fclose(f)i
nr= (long) (nr+l) * (nr+2) /2- 1- var f,g,h:text;
11 close(f);
12 nr:=(nr+ll*(nr+2) div 2-sumai (long) euma r 2 m~i,j:integer; # i nc lude <stdio.h>
*h -J
3 x:char; FILE «s , *g, ;
13 writeln('Numarullipsa=',nr); printf ("Nr .lipsa=%d\n", nr) ; int m,i,j; char X;
4 begin
~4 end. }
5 assign(f, 'a~in'); 'void main () {
6 reset(f); f=fo en ("a. in", "r n ) ;
4. in fisierul IN. TXT exista pe prima linie un sir crescator de numere naturale. 7 assign(g, 'b.in'); g=fopenP ("b . in" , "w")., ~

Citirea din fisier a unui nou numar este conditionata de obtinerea, ca suma fermata 8 rewrite (g); whiJ.e (! feof (f)) {
din termeni distincti cititi din fisier, a unui sir de numere consecutive incepand cu 9 while not eof(f)do begin r '1
do {
fscanf· ( f , "% c,
" &x I ;
10 whi~e not eoln{f) do begin
1. Sa se determine care ,este numarul maxim care se poate obtine respectand 11 if (x==='\n' IlfeOf(f)) break;
read(f,x) ; -'
regula data. 12 if ord(x)<=32 then
'f (x<=32)
13 .1 fprintf(g,"#%d",(int}x);
write (g, '# I , ord{x»
14 e~se write(g,x);
else fprintf (g, "%c",x);
Exemplu: Pentru fisierul: } whi.J,.e (1);
IN.TXT • 15 end;
fscanf (f, "\n"); -'
16 writeln(g); readln(f);
12410 11 323243241 54321 17 end; fprintf (g, "\n");
Se va afisa 7 18 Close{f); close(g); } [ "
Citirea se va incheia 0 data eu citirea valorii 10, deoarece valoarea 8 uu se poate 19 erase(f); rcacee (f); fclose(g);
20 unj, ' nk ( "a. in") ,;
forma ca suma de termeni preluati din fisier, rename{g, 'a.in') ~
rename ("b. a. n "," a a.n
. II
);
21 end. c

1,2,3(1+2),4,5(1+4),6(2+4),7(1+2+4) } , ,,
6•. Fie fisierul text IN.TXT ce conIine doar caractere alfanumerice. Realizap un
Solutie: Se citesc succesiv numere din fisier, pana la intalnirea unui numar care
program Care creeaza fisierul OUT. TXT in care se regasesc caracterele situate pe J
depaseste cu mai mult de 0 unitate suma numerelor anterior citite. Fie S aceasta pozitii pare(al doilea, al patrulea, ~.a.m.d.) din cadrul liniile cu numiir de ordine
suma. in acesta situatie valoarea S+ 1 nu se mai poate obtine. impar.
Exemplu: IN. TXT
r~ I f:text;
var ok:boolean;
suma,curent:longint;
#include <stdio.h>

I
int n,curent;
long suma;
ADFABET
M23CRI
123456789
OUT. TXT
DAB
2468
-J

i
134 W
135
21 .if ok then if (ok)
r Solutie: La parcurgerea fisierului A.IN vor fi ignorate la operatla de scriere Iinile cu 22 writeln('Continut identic') printf("Continut identic\n");
I numilr de ordine par ~i caracterele situate pe pozitii impare in cadrul acestora. 23' .l.8e ·e~se '
~ j
:24" writeln'~ 'Continut diferit') printf("Continut diferit\n");
.i var f,g,h:text; x:char; iinclude <stdio.h> .:end •
~
::2 "beqin FILE *f,-*g,*h; char x;
I 3. assign(f, 'a.in'); reset(f); void main ( ) { 8. Fisierul text IN.TXT contine pe prima Iinie un sir de caractere alfanumerice.
4) assign(g, 'b.in l ) ; rewrite(g); f=fopen("in.txt", "r");
Creati un .alt fisier text OUT.TXT in care sa se regaseasca continutul din IN. TXT
5 whil.e -not eof (f) do begin g=fopen("out. txt", "w");
-;6 whil.e (!feof(f) { dispus pe mai multe linii in felul urmator: pe prima linie primul caracter, pe a doua
r whil.e'not eoln (f) do begin
"7 read(i,x); do linie unniitoarele douii caractere s.a.m.d, panii cand au fost plasate toate caracterele.
"~8 - .if not eoln(f)then-begin { Ultima linie afisierului OUT. TXT poate avea mai putine caractere dedit linia
~ read(f,x); write(g,x) fscanf (i, "%c", &x) ; precedenta,
TO end;
if (x=='\n'l Ifeof(f» break;
r-r- fscanf (f, "%c", &.x) ;
1'1 end;
1'2;, readln (f) ; .if (x=='\n'l lfeof(£» break; Exemplui IN.TXT OUT. TXT
13 readln (i) ; fprintf(g,"%c",x); MWQDWEFR M
} whil.e (1);
1·4 writeln (g) ;
while (!feof(f) && getc{f) !='\n');
WQ
r-i ,,15 ,end;
DWE
'16 close(f); fprintf (g, "\n") ;
i j 17 close (g); } FR
18 end. fclose{f); fclose(g);
i9, ) Solutie: Scrierea in fisierul OUT. TXT se va realiza simultan cu citirea caracterelor
i 7. Scrieti un program care verifies daca douii fisiere text II.TXT si 12.TXT au
din IN.TXT. Pentru respectarea fonnatului impus la scriere, ne vom folosi de 0
1. J
variabila care, contorizeaza numarul liniei curente pe care se face serierea.
continut identic.
,-., 1 var f,g:text; x s che r r #include <stdio.h>
I Solutie:Pentru\. verifica dacii douii fisiere au continut identic vor trebui parcurse 2 In,i,j:integer; FILE *f,*g; ohar x;
i
( ,: simultan la citire ~i verificata egalitatea earacter eu earaeter. 3 ' ~gin" int In, i, j;
, ~" 4 assign(f,'in.txt');reset(f); void maine) {
Nu trebuie scapat din vedere ca 0 linie a unui fisier poate reprezenta prefixul liniei 5 assign (g, lout. txt' ) ; rewri te(g); f=fopen ("in. txt", "r") ;
corespunzatoare celuilalt fisier. De exemplu, pe 0 linie se pot gasi caracterele ' eu 6, In:=Q; g=fopen("out.txt", "w");
si mama', iar pe linia corespunzatoare din celalalt fisier ' eu si mama vin' 7 "hi.l.e not eof (f) do begin In=O;
8 inc(ln);j:=O; wh~l.e (!feof(f») {
.1 var't',g:text; iinclude <stdio.h> -9": ."hi.l.e (j<ln)and not eof(f) do In++; j=O;
2 ok:boolean; FILE *f,*g; 10 begin whil.e (j<ln && !feof{f»)
':3, ~,y:char; int ok; 1'1 read(f,x); fscanf(f, "%c", &x);
4 begirl char x,y; i2 write(g,x); fprintf(g,"%c",x);
'S assign{f,' i1.txt'); reset (f); oid main() ( 13 inc(j); j++;
,'-" 6 assign(g, 'i2.txt'); reset(g); f=fopen("il.txt","r") ; 14" end'; }
.7 ok:=true; g=fopen{"i2.txt", "r"); '15 writeln (g) ; fprintf (g, "\n") ;
8 whil.e not eof (f) and not eof (g) ok=l; 1'6' and; }
-9 do begin whi~e (! feof (f) &&. ! feof (g» 17 close(f); fclose(f);
10 while not eoln(f) and not eoln(g) do ( 18 close(g); fclose(g);
fscanf(f,"%c",&x) ; ~9 end. }
11 do begin
, . ~2 read(f,x); read{g,y); fscanf(g,':%c",&y) ;
13 if x<>y then ok:=false; i f (x=='\n.'lly=='\n' II
feof (f) I I feof (g») break;
9. In fisierul TEXT.TXT se afla mai multe "parole" formate din caractere de tip
14 end; majuscule, scrise fiecare pe cate 0 linie, Fiecareia i se asociaza un numar obtinut ca
r 15 if eoln(f)<>eoln(g) then if (x!=y) ok=Q;,}
16 ok:=false; whi~e (1); produs al numerelor de ordine ale literelorln alfabet. De exemplu pentru cuviintul
17 readln(f); readln(g); if (x!=y) ok=O; "BAC" numiirul asociat este 2*1*3=6. Sii se creeze fisierul OUT. TXT in care pe
18 end; fscanf (f, li\n") ; fscanf (g, "\n") ; cate 0 linie se afla parolele.care au numarul asociat cel mai mare.
19 if eof{f)<>eof(g) then )
20 ok:=false; if (feof(f) !=feof(g)) ok=O;

136 137
~
~

Solutie: La prima traversare a fisierului TEXT. TXT se va crea fisierul P.TXTin care Conversia unui caracter numeric in valoare numerica se poate face prin intennediul
sunt depuse numerele asociate fiecarei parole, cite unul pe fiecare linie. Ambele codului ASCII. L.i
fisiere vor fi inchise siapoi redeschise la operatia de citire pentru crearea lui
1 var f, g: text"; x: char; *include <stdio.h>
OUT.TXT.
'2 s,nr:integer; FILE *f,*g; char x;
3 int s,nr;
j var f,g,h:text; m,i,j:integer: #include <stdio.h> 4 begin ;void main () ( ~
'2 x:char; FILE -*£,*g, *h; 5 assign(f,'in.txt'); reset(f);
int m,i,j;char X; f=fopen("in.txt", "r");
3 begin 6 assign(g, 'out.txt');xewrite(g); g=fopen ("out. txt", "w");
4 assign(f, 'text. txt') ; ivoid main () { 7 whi1e not eof (f) do begin whiJ.e (!feof(£» {
-5 reset (f) ; f=fopen("text.txt", "r"); S s:=O; nr:=O;' s=O; nr=O;
·6< assign(g,'out.txt'); g=fopen{"out. txt", "w"); 9 whiJ.e not eoln (f) do begin do {
7· rewrite(g); h=fopen ("p. txt .. , "w"); m=O; 10 read(f,x); fscanf (f, "'c", &x);
8 assign (h, 'p. txt') ; whi~e (!feof(f» { 11 i f x<>',' then i f (x==c'\n') break;
9 rewrite (h) ; j=1; 12 nr: =nr*10+ord (x)-48 i f
~o m:=O; do ( .if(x!=',')nr=nr*10+(int)X_48; L.J
13. e~se begin e~se" {
11 whi.1e not eof(f)do begin fscanf(f,"%c",&x); 14. s:=s+nr; nr:=O; s+=nr; nr=O;
1'2 j :=1; if (x=='\n'l lfeof(f» break; 15 end; wh-i.J.e (1);
13 while not eoln(f) do begin j *= (int) x-64; 16 'end; s+=nr;
14 read(f,x); } whi~e (1); 17 s:=s+nr; write1n(g,s); fprintf (9, "%d", s);
15 j:=j*(ord(x)-64); fprintf(h,"%d\n",j); 18 readln(f); fscanf(f,"\n IT ) ;
16 end; fscanf(f, "\n");
1T writeln (h, j) ; readln (f) ; if (j>m) m=j;
19 end; ) ,
20 close{f); c1ose(g); fclose(f); fClose(g);
18 if j>m then m:=j; ) 21· end. }
1.9 end; fc1ose(f);fc1ose(h); ....i
20 close(f); close{h); f=fopen("text.txt", "r");
21 reset(f); reset{h); h=fopen("p.txt","r") ; " ..~

22 whi1e not eo£(£) do begin whi~e (!feof{f» {


23 readln(h,j); fscanf (h, "%d\n", &j); 2.3.3 Probleme propuse ,
~
.
24 i f j =rn then begin i f (j-_) {
25 whi1e not eoln(f) do begin do { 1. Se considera fisierul IN. TXT ce contine pe prima linie un numar n natural, iar pe
26 read(f,x); fscanf(f,"%c",&x); a doua linie n numere intregi, Afisati pe ecran primul ~i ultimul numar de pe Iinia
27 write (g,x) i f (x=='\n' I Ifeof(f) break; adoua. ~
28 end; fprintf(g, "%c",x);
29 writeln(g): } wh.i1e (1);
30 end; fprintf(g,"\n") ;} 2. Se considera doua fisiere IJ. TXT si f2. TXT. Verificati care dintre ele confine mai
31 readln(f); el.se multe caractere. Afisati pentru aceasta numele fisierului,
32 end; . whi~e(getc(f) !='\n'&&!feof(f»; L
33 close(f); close(g); close{h); ) 3. Se considera fisierul IN.TXT care contine 10 numere intregi scrise fieeare pe cate
34 end. fc1ose(f);fc1ose(g) ;fclose(h);}
o linie. Afisati prima si ultima cifra a fiecarui numar rara a prelua valorile intr-un
vector. : ;
10. Se considera fisierul text IN.TXT ce contine numere intregi dispuse pe mai ~
multe linii. Numerele sunt separate in cadrul liniilor prin caracterul virgula ",". 4. Se considera fisierul REAL. TXT ce contine numere reale dispuse pe mai multe
Scrieti un program care creeazii un fisier OUT. TXT ce contine pe fiecare linie suma linii. Sa se creeze un alt fisier INTREG.,TXT in care sa se regaseasca valorile din
, 1
!
numerelor situate pe aceeasi linie in fisierul IN TXT. primul fisier rotunjite fiecare dintre ele la eel mai apropiat intreg ~i dispuse in
aceeasi ordine.
Solutie :in problema de falii separatorii unor date numerice sunt reprezentati de
caracterul virgula, Aceasta situatie impune folosirea la citire a unei variabile de tip Exemplu: REAL. TXT fNTREG.TXT ::
2.34.05 2 4
char. 1.0 12.8 3.45 1 13 3 ~

Exista evident problema eonversiei unei valori de tip caracter in valoare numerica 1. 93 2
~i pe de alta parte construirea numarului citit cifra cu cifra,

138 139
-, 14. Se considera doua fisiere IJ.TXT ~i 12.TXT. Unul contine pe fiecare linie cate
5. Se considerafisierul REAL. TXT ce contine numere reale dispuse pe maimulte
linii. Sase creeze un .altfisier FRACT.TXT tn care sa se regaseasca partile doua numere reprezentand notele Ia 'rnatematicavale unor elevi, -jar Iiniile
fractionare ale fiecarei valori din primul fisier, cu doua zecimale exacte dar dispuse corespunzatoare din celalalt fisier numele acestora codificat printr-o majuscula, Sa
pe 0 singura linie. secreeze un nou fisier 13. TXT in care pe fiecare linie sa se regaseasca numele
~
Exemplu: REAL. TXT FRAC.TXT elevului ~i mediala matematica exprimata ell dona zecimale.
2.3 4.05 0.30 0.05 0.00 0.80 0.45 0.93
1.0 12.8 3.45 Exemplu: 11. TXT 12.TXT 13.TXT
1. 93 10 8 I I 9.00
7 8 M M 7.50
6. Se considera doua fisiere II.TXT ~i I2.TXT. Unul contine numere reprezentand 5 9 V V 7.00
],0 10 M M 10.00
varsta unor elevi, iar liniile corespunzatoare din celalalt fisier numele acestora,
6 8 U U 7.00
codificate printr-o majuscula, Sa se afiseze pe ecran codificarile numelor celor mai 5 6 D D 5.50
tineri elevi.
Exemplu: II. TXT 12.TXT I
Se va afisa: I D
13 I
15
16
M
V
!II Probleme.de concurs ce proceseazii date structurate
13 D
2.4.1 Probleme rezolvate
7. Consideriim fi~ierulIN.TXT care cuprinde pe fiecare linie caractere alfanumerice
(litere ~i cifre). Creati un fisier cu numele OUT.TXTtn care se regasesc liniile din 1. (Secvenfa.de suma maxima - ***). Sa se afiseze secventa de suma maxima
IN. TXT din care au fost eliminatecifrele. dintr-un sir de numere intregi si valoarea acestei sume.
...., Exemplu: pentru n=8 si sirul Z -4 -3 5 -4 7 8 -2 se va afisa
8.. Scrieti un program care creaza un fisier text 13.TXT prin concatenarea suma=16
continuturilor a doua fisiere text numite II. TXT ~i 12.TXT. 5-478
9. Se considera fisierul text INPUT..TXT. Sa se scrie un program care creaza un
r: Solutle: Vom opta pentru 0 rezolvare liniara a problemei, algoritmii de
fisier OUTPUT. TXT ce contine liniile cu numar de ordine impar din INPUT. TXT .
complexitate cubica si respectiv patratica fiind neinteresanti in conditii de concurs.
10. Sa se scrie un program care creaza un fisier text OUT. TXT ce va contine pe 0
singura linie, codurile ASCII ale tuturor caracterelor ce se afla in fisierul IN. TXT. La fiecare pas al parcurgerii vectorului a se impun efectuate urmatoarele operatii:
1. verificarea semnului sumei secventei curente (sc)
11.' Sa se scrie un program care determina caracterul neimprimabil (cod ASCII mai
1.1 daca sc>O atunci la ea se va adauga si elementul curent
mic decat 32) cu frecventa de aparitie maxima tn fi~ierulIN. TXT.
1.2 daca sc este negativa atunci secventa curenta se reseteaza, efectuandu-se
r:
"

reinitializarile sumei curente cu elementul ali} (sc+-a[i}) ~i a pozitiei de inceput pc


12. Creati un program care transforma toate literele mici din fisierul IN. TXT In
cu i(pc+-i}.
majuscule.
;;--. 2. actualizarea secventei de suma maxima daca este posibil, eu pastrarea indicelui
13. Avem in directorul curent fisierul text IN.TXT care contine caracterele de inceput tc si a indicelui de sfiir~it sf
alfanumerice. Consideram ca literele sunt separatorii numerelor, De exemplu, daca
pe 0 linie apar caracterele A23sc345ss5e,' atunci ea contine trei numere, separate i . max ..... a[1]; sc ..... a[1]; ic ..... 1; sf ..... 1; pc ..... 1;
prin cate un spatiu: 23 345 5. Realizati un.program care creaza fisierul OUT.TXT
", 2 n tru i- 2, n executa

nFse _
I
in care se regasesc date de tip mtregi preluatein ordine de pe liniile fisierului. 3 ca sc > a atunci sc ..... sc + a[i]
4 al.tfel.
5 a[i];
6 I I pc ..... i;
7 IlJI
140 141
'lr 1
I""j l
hl~
i '·.'1
~ca se > max -atunci
l'
8
s
JO
II ic
I I sf
PCi
ii
Solutie: Consideram q un factor prim din descompunerea lui n!. Exponentulla care
apare acest factor in descompunerea lui n! este dat de formula urmatoare (operatia
! j

J1 I I max SCi o desernneazii partea intreaga): .


J.~
J2

HI H;J+···+o
\ l

13
14
J5
,r:entru i .... ie, sf -execuea .eeeae a [i] ; [~Hq~
Rlimiine de determinat fiecare factor prim al lui n! caruia i se va caleula ~i afila
2. (Secvenla .de produs maxim - ~**) Se considera un sir de n (O<n<IOO) numere exponentul dupa formula descrisa mai sus. Pentru implemeutare vom folosi un
intregi,·printre care exista eel putin un elementpozitiv. Scrieti un program care singurtablouunidimensional care va refine toatenumerele prime mai mici decat n.
determina secventa de elemente alaturate aviind produsul elementelor maxim. Notiind cu m numarulacestor valori prime, .atunci vectorol este PRlM(M).
Exemplu: Pentru n= 10 ~i sirul: (I 2 --6 3 4 5 -2 10 -5 6), secventa 34 5 -2 10 -5 6 Retinerea lor optimizeazii algoritmul de gerierare.
are produsul maxim= 36000.
i . prim[1J -- 2; m _ 1,; p _ 3;
Solutie: Problema intervine de fapt la un numar impar de elemente negative. Se ·2 ...J
'at ti.mp p S n executa / /generarea numerelor prime < n
pleaca in parcurgerea vectorului cu 0 variabila pi=1. La primul numar negativ, se 3 i _ 1;
initializeaza un p2 cu I(se ignoraacel numar negativ). Succesiv se inmultesc 4 8 t t 1mP i ~ mexecuta
5'
elementele din vector la pi si p2, eventual actualiziind 0 variabila pmax
6
~ca p mod prim[iJ = 0 atunci i,_ n ·
·
reprezentand produsul maxim. La intalnirea unui zero se reseteaza ambele valori L.a1tfel i __ i' + 1;
7
[
ale p l ~i p2 la I ~i se continua. 8
9 1
1 pl .... 1; p2 0; ic .... 1; sf .... 1; pel .... If max .... a[1]; rdaca i ¢ n atunci
10 I m -- m + 1;
· !
"2 l.PGntru i I, n executa U
• r
11 I I prim[m] __ p;
3 rdaca ali) ~ Oatunci 12
4
5
I roaca p2
I pI .... pI * a[i];
~0 atunci
13
14
L:'-P+2;
6
7
L. p2 .... p2 * ali]; 15 ntru i - 1, m -executie / /determina exponentii factorilor -'
16 q -- prim[i];
8 ~ca (a[i]<O) and (p2=O)atunci 17 [1.r _ 0;
9
10
L. p2 .... 1; pcZ .... i + Ii 18 J x -- n div q;
1
iI;1..r
19 a t t1mP x > a executa
11 ~aca pl > max atunci 20 -!
r __ r + X;
12
13
L. max .... pl; ic .... pel; sf - i; 21
x - x div q;
22
14
15
~aca
L.
p2 > max atunci
max .... p2 ; ic .... pcZ; sf .... i;
23
24
:~r:aca r > 0 atunci scrie q, r; 'j
-'
16 25
17
18 al.tfel
19 pI .... 1; pel .... i + 1; p2 0; 4. (Clasament - ****). N sportivi numerotati cu numere de la IlaNiau parte laun :
,
1
'
20 maraton. Clasamentul final este codificat sub forma unui vector A de lungime N. '-'
21 Fiecare element ali] din vector are urmatoarea interpretare: coneurentul e1asat pe
~;I u:ant ru i .... ie, sf executa soria a[i];
locul ia devansat un numar de all] concurenti ale caror numere de pe trieou sunt >":J i
mai mari dedit al lui. In decursul ultimului an, toti acesti N sportivi, au partieipat "- 'I
3. (Descompunerea factorialului - ***) Se considera un numar natural n mai mic la M probe de maraton si de fiecare data au avut acelasi numar pe tricoul de
dedit 10'. Sa se determine descompunerea in factori primi ai factorialului ( n! =
1*2*3..*n). Exemplu: Pentru n=5 se va afisa:
concurs. Toate clasamentele finale au fost codificate dupa regula deserisa
Stiind ca toti sportivii au terminat fiecare din cele M probe de maraton, aflati care
· .
2.3 concurenti au evoluat din ce in ce mai bine, adica la fiecare noua proba loeul pe -'
care l-au ocupat a fost strict mai mic decat la proba anterioara,
3I
5I · ,
'W
142 143
if In fisierul text 1N.IN pe prima linie se.afla doua numere N ~i M, despartiteprintr-un
spatiu, Pe urmatoarele M linii, In ordinecronologica a momentului desfasurarii,
clasamentele finale. In cadrul liniilor numerele sunt despartite prin cate un
I~~I Ll.""
spatiu.(0<N<3000; O<M<IO) 5. (Cere - .***) . Consideram ca 2*n copii au tricouri numerotate cu numere de la I
Ii In fisierul text OUT.OUT, 'pe 0 singura linie,se vor scrie in ordine .crescatoare, la 2*n. Asezati copiii In cere astfel Incat extragandu.I din k In k sa paraseasca
numerele de pe tricou ale concurentilor identificati cu evolutii ascendente. In cadrul cercul cei cu numere parepe tricou, in ordine crescatoare,apoi" cei ell numerele
liniilor, numerele vor fidesparpte prin cate un spatiu. Daca nu exista solutie, impare pe trieou, de .asemenea in ordine crescatoars, Afi~area va incepe de la
,~
fisierul de iesire va contine valoarea O. primul copil care va fi extras din cere.
IN.IN OUT. OUT
Exemplu: pentru n=l si k=3 copiii vor fi dispusl In cere astfel: 2 5 8 4 7 3 6 I.
5 2 14 Extragerea din 3 In 3, incepand cu primul din lista se va face In ordinea ceruta,
, 32210 adica:24681357
! 3 3 110
.r ' ; Solutie: Algoritrnul presupune completarea elementelor unui vector din k In k
Pentru prima proba de maraton clasamentul final a fost2, 3, I, 4, 5, iar pentru a
~ doua proba 2, I, 4, 3, 5. Concurentul cu tricoul I s-a clasat pe locul 3, iar la a pozitii ignorandu-le pe cele deja "ocupate". Indicele curent x Care va fi completat
,

doua proba pe locul 2. Concurentul cu tricoul 4 s-a clasat In ordine initial pe locul 4 traverseaza prin incrementare toate cele 2*n pozitii, revenind la valoarea I dupg
atingerea pozitiei 2*n.
~i apoi 3.
Vectorul a se completeaza initial cu valorile pare 2, 4... 2*n, apoi cu cele impare I,
~ Solutie: In procesul de identificare a clasamentului final se incepe cu elementul 3, ...2*n-1.
, i a[l] care indica numarul tricoului primului clasat: n-a[l] selectandu-se acest x _ 1
numar. Se continua identificarea ordinii la sosireignorandu-se numerele de tricou 1
2 pentru i _ 1, 2*n executa
deja selectate. La finalul fiecarei probe, se retine intr-un vector pozitia in clasament 3 nr _ 0;

I
i J
a fiecarui concurent, marcandu-se cei care nu au avut 0 evolutie ascendenta,
Ca structuri de date vom folosi trei tablouri unidimensionale :
4
5
a t ti.mp nr < k executa sel[i] _ False
~ca x < 2*n atunci. x _ x+1

• A(N) retine clasamentul pentru fiecare proba 6 L.a1tfel x __ 1


,. • peN) retine pentru fiecare concurent pozitia ocupata In cadrul ultimei probe
desfasurate. Daca la proba curenta, concurentul j, nu a avut 0 evolutie
7
8
[
c:aca a[x] = 0 atunci. nr _ nr + 1
,I 9
,. ascendenta faiR de proba anterioara, atunci pfJJ <-'n+1 10
• SEL(N) indica, pentru fiecare proba In parte, daca un concurent a trecut sau nu 11 c;aca i = a atunci. x _ 1
,
~
linia de sosire. 12,
13 ~ca i ~ n atunci a[x] _ 2 * i
1 ,entra k __ 1, m executa 14
LI L.a1tfel a[x] - ((i-1) mod n)*2 + 1
2 c;entru i - 1, n executa sel[i] _ False 15
3 16

I '
r 4
5
l:entra i -- 1, n executa ci.teste a [i] ;
j
6 ,entru i __ 1, n executa 6. (Multiplu - '****) Fie n un numar Intreg. Gasiti un numar In baza 10 divizibil cu
7 j -- n + 1; nr _ 0; n ~i format numai din cifre de I ~i O. (n<=IOOO)
,

~
'8 at ti.mp (j > 1)and{nr ~ a[i]) executa
" }
9 j. __ j - 1; Solutie: Vom considera sirul numerele I, 11, 111, ... , 11...1 (ultimul avand n cifre
,
, ,
, 10 C:aca not sel[j] atunci nr _ nr + 1; de I). Putem avea doua situatii:
11
12 • Printre numere exista unul care este multiplu de n. Rezulta ca acesta este
:' 13
14
sel[j] _ True;
rdaca p[j] = 0 atunci. p[jJ _ i
numarul cautat,
15 ]aJ.tfeJ.
• Toate numerele anterioare dau la impartirea cu n resturi nenule, adica 1,2, ... ,
16 ~aca (p[j] >i) and (p[j] ¢ n + 1) atunci. prj] - i n- 1. Intrucat avem n numere ~i ~-l resturi, conform prineipiului lui Dirichlet
,...,
f
17
18
III ~ltfeJ. p[j] _ n+1

144
exista doua numere care dau acelasi rest. Obtinem astfel ca diferenlaacestor
doua numere este numarul cautat (care este, evident, format din cifrele 0 ~i I).
145
r.
I
Numerele din sir nu pot fi memorate ca intregi (datorita numarului mare de cifre).
De fapt ne intereseazii numai resturile lor la impartirea cu n, Notam cu x restul
8. (lnmulfire - **) Se considera un numar A cu eel mult 100 de cifre si B un numa i
mai mic ca 32.768. Sa se scrie un program care inmulteste cele doua numere. ~
obtinut peutru un numar oarecaredin sir, format din i cifre de 1. Atunci restul
numarul ce contine i+1 cifre de I se obtine ca (x* 10+1) mod n. Solutie: Primul numlir este reprezentatca la operatia deadunare. Se simuleazr.
.. operatia de inmultire folosind algoritmul invatat la matematica.
Pentru implementare vom folosi un singurtablou unidimensional A(N-l). ~

Elemental a[r] va reprezenta numarul de cifre de I din care este format un numar t +- Oi i ,+- 1; I It este cifra de transport rest
din sir, care da restu! r la impartirea la n. ·2 t timp (i <= a[O] )or(t > 0) -execuua
3 t +- t + a[i]*bi
4' a [i] +- t :mod 10;

D
r' ;[1J ..... 1; x 1; .....;
-nx 1; ok
True; '5. t +- t di.v 10; Iinoua valoare a cifrei de transport
2 <-
.,'6 i +- i + 1;

i)-
3
.4
5
r a t timp ok -executa
nr
1 r
nr + 1;
(x*10 + 1) -mod n
71.
"8, a[O] _ i - 1, Iinumarul de cifre al produsu1ui "

~
'[

6 oa r '" 0 atunci
7 .ca a [r] = 0 atunci. 9. (Sciidere - **) Se considera doua numere A ~i B, cu eel mult 100 de cifre. Sa se ,
8 a[r] ..... nr; scrie un program care calculeazii diferenta A-B. .
9 x _ r
~
10 altfel.
11 ~entru i 1, nr - a[r] executa serie 1 Solutie: Numerele sunt reprezentate ca la operatia de adunare. Se simuleazli
12 operatia de scadere folosind algoritmul Invatat la matematica,
13 r:entru i l, a[r] executa serie 0 "
14 i
15
16
17
ok ..... False

altfel
2
3
4
t[;;:tO~-(~;<~
a[i] +- a[.i] - b[iJ; -
daca a [il, < 0 atunc.i t
t;
a[O])or(t

+-
> 0) executa

L
18
19
20
r:entru
ok ..... False
i __ 1, nr-executa serie 1
5
6
7
aJ.tfel. t
a[i] +- a[i] + t*10i
i+-i+l;
+- 0; ...,
21 8
·22 9 ~t timp (a[D] > O)and(a[a[O]] = 0) executa
10 c.J
t.a[O] - a[O] - 1;
7. (Adunare - **) Se considera doua numere A ~i B cu eel mult 100 de cifre, Sa se .11
o serie un program care determina suma celor doua numere. • 1
10. (lmpiirpre - **) Se considera un numlir cu eel mult 100 de cifre ~i altul mai rnio i
Solutie: Se retin numerele in vectori [0... 100] astfel: elementul 0 va indica numarul ca 32.768. Sa se scrie un program care determina ciitul impartirii celor doua~
de cifre ~i elementele de la 1 tncolo vor reline cifrele in ordine inversa, De exemplu numere.
(1
numliruII25 este retinut ca (3, 5, 2,1). : I

Aceasta modalitate de reprezentare usureaza simularea operatiei de adunare Solutie: Primul numar este reprezentat ca Ja operatia de adunare. Se simuleazaJ
folosind algoritrnulinvatat la matematica, operatia de impartire folosind algoritmul invatat la matematica.

1 t 0; i ..... 1;
..... lIt este cifra de transport = rest i t +-0; i +- a[O]; i
a t t~p (i <= a[O])or{i <= b[O])or(t > 0) executa : .2 a t timp i > 0 executa ~
2
3 t ..... t + a.[i J' + b[i]; //adun cifre corespunzatoare + rest 3 t +- t*10 + a[i];
ali] .... t mod 10; 4 . a[i] +- t di.v bi
4
5 t t div 10i //noua valoare a cifrei de transport 5 t +- t mod hi
[ i 6 [ i +- i-1; ,
6 i + 1; .
7 7
B a{O] i - 1; Iinurnaru1 de cifre al sumei 8 rcat timp (a[O] > O)and(a[a[O]] 0) executa
, ...
9 t.a[D] - a[D] - 1; ~

~O
~

146 147
~1

,. 11. (Piiianjen - ***) Sa ne imaginiim 0 retea fermata din noduri situate In punctele Exemplu: siruri.in
3
siruri.out
de coordonate intregi, fiecare nod fiind unit prin bare paralele cu axele de 4 2
1 1
coordonate de cele 4 noduri vecine. Unpaianjen este plasat initial In originea -1 2
:r sistemului de coordonate. La fiecare secunda, paianjenul se poate deplasa din ·nodul 1 3
in care se afla in unul dintre-cele 4 noduri vecine, -1
Scrieti un program care sa determine In cate moduri sepoate deplasapaianjenul din -1
-1
pozitia Initiala, intr-o pozitie finala data, In timpul eel mai scurt. 1
Fisierul de intrare spider. in contine pe 0 singura linie abscisa §i ordonata 1
punctului final, separate prin spatiu: x y (0 < x , Y ,;;80)
In fisierul de iesire spider. out se va afisa pe prima linie numarul de moduri Solutie: Se parcurg cele doua siruri pozitie cu pozitie, iar unde difera se face 0
detenninat Nr. operatie in pozitia respectiva, La sfarsit se verifica daca cele doua siruri sunt egale,
Exemplu:
I"
I
spider. in I
I,
I 10 spider. out
1 ~ntru i ..... 1, n - k + 1 executa

· r,
2 3
(Olimpiada Judeteana de Informatica Gimnaziu, 2001, cis. VII-VIII)
2
3
4
[centro
aca a [i] :# b [i]atunci.
j - i, i+k-1
a[jJ - -a[jJ;
executa
5
, ~ -; Solutie: Se calculeaza pentru fiecare pozitie (x, y) In cate moduri se poate ajunge 6 serie i;
acolo astfel: A[x,y] ~ A[x-l,y] + A[x,y-l]. 7
~
8
j
, 1 c:ntru i .- 0, x executa
: J
2 a[OJ [iJ _ 1;
13. (Semne - ****) Pentru un numar N (O<N<I 000) natural nenul, sa se gaseasea 0
3
r-', 4 c:ntru i .- 0, y executa cornbinatie de semne + si - ,adica un vector .x=(X,,x2,...,xk), Xi din multimea {-I I}
2
5 a[iJ [OJ _ 1; astfel fncat: N= xl*12+ x2*2 ir ... + xk*k, unde k este numar natural ce reprezinta
numarul operatorilor folositi,

,.
6
7
8
[entru i .- 1, x executa
entru j .- 1, Y executa

,, :
;0 Cali] [jJ - a[i-1J [jJ + a[iJ [j-1J; Fisierul s emne, in contine pe fiecare linie valorile lui n pentru care se doresc
reprezentari ca mai sus.
11 Fisierul sernne.out va contine pe cate 0 Iinie combinatia de semne corespunutoare
12 serie a[x] [y]; fiecarui numar de pe aceeasi linie din fisierul de intrare.
r
i Exemplu:
,
[
"
12. ($iruri - **) Se dau doua siruri de lungime N ~i un numar K (N<I OOO,K<1000). samne.in semne.out
Cele doua siruri au numai numere I ~i -I . Scopul este sa-l transformam pe primul 2 ---+
in al doilea. Singura operatie permisa este sa selectiim 0 secventa de K elemente 4 +--+

,r
8
alaturate ~i sa Ie inversam semnul la toate numerele cuprinse in aceasta zona. 5
+--++--+
++--+
Secventa poate sa inceapa eel mai devreme la primul element ~i sa se sfarseasca eel
mai tiirziu la ultimu!' Solutie: Solutia se bazeaza pe inductie dupa n ~i pe urmatoarea observatie:
r
Fisierul de intrare siruri. in contine pe prima linie N §i K separate printr-un x 2 _ (x+1)2 _(x+2)2 + (x+3i = 4.
spatiu, Pe urmatoarele N linii vor fi cate un numar (I sau -I) reprezentand Astfel, daca avem 0 solut