Documente Academic
Documente Profesional
Documente Cultură
CULEGERE PROBLEME
DE
INFORMATIC
-TURBO PASCAL-
CUPRINS
I. Instruciuni de introducere, afiare i calcul..............................................................................................................
II. Instruciunea de decizie ; algoritmi cu ramificaii.......................................................................................................
I.
1) S se afieze triunghiul
*
**
***
2) S se introduc un caracter de la tastatur i s se afieze un triunghi asemntor folosind caracterul introdus.
3) Se d un numr natural n. Afiai un triunghi de forma
n
n+2 n+2
n+4 n+4
n+4
n+6 n+6
n+6
n+6
(CNI-etapa judeean, Petroani, 2005)
4) ntr-o tabr numrul de biei este cu 10 mai mare dect cel al fetelor. Dac se citete de la tastatur numrul de fete,
s se spun ci elevi sunt n tabr. Exemplu: date de intrare: 50 date de ieire: 110.
5) ntr-un autobuz care pleac n excursie sunt 7 copii. De la nc dou coli urc ali copii, numrul acestora citindu-se de
la tastatura. Ci copii au plecat n excursie? Exemplu: Date de intrare: 15 20 Date de ieire: 42 copii.
6) Un brdu este mpodobit cu globulee albe, roii i albastre. Numrul globuleelor albe se citete de la tastatur. Cte
globulee are brduul, tiind c numrul de globulee roii este cu 3 mai mare dect numrul de globulee albe, iar
globuleele albastre sunt cu 2 mai puine dect totalul celor albe i roii. Exemplu: Date de intrare: 12 Date de ieire: 52.
7) Ion i Vasile joac urmtorul joc: Ion spune un numr iar Vasile trebuie s gseasc cinci numere consecutive,
cresctoare, numrul din mijloc fiind cel ales de Ion. Exemplu : Ion spune 10, Vasile spune 8 9 10 11 12. Ajutai-l pe
Vasile s gseasc rspunsul mai repede.
8) Doi copii au primit acelai numr de mere Introducnd de la tastatur numrul de mere primte, afiai cte mere are
fiecare copil dup ce primul copil mnnc un mr i d unul celuilalt copil. Exemplu : Date de intrare : 10 Date de
ieire : primul copil 8 mere al doilea copil 11 mere.
9) Maria vrea s verifice dac greutatea i nlimea ei corespund vrstei pe care o are. Ea a gsit ntr-o carte urmtoarele
formule de calcul ale greutii i nlimii unui copil, v fiind vrsta : greutate=2*v+8 (n kg), nlime=5*v+80 (n cm).
Realizai un program care s citeasc vrsta unui copil i s afieze greutatea i nlimea ideal, folosind aceste
formule.
10)
Se introduc de la tastatur trei cifre. Afiai pe aceeai linie 5 numere formate cu aceste cifre luate o singur dat.
Exemplu : date de intrare : 3 4 2 Date de ieire : 324 342 243 234 432.
11)
Date trei numere, s se calculeze toate sumele posibile de cte dou numere. Afiarea s cuprind i termenii
sumei, nu numai valoarea ei. Exemplu: Date de intrare : 2 13 4 Date de ieire: 2+13 =15 2+4=6 13+4=17.
12)
Afiai tabla nmulirii cu numrul n. Exemplu: pentru n=5, se va afia pe vertical 1x5=5 2x5=10 3x5=15 4x5=20
5x5=25 6x5=30 7x5=35 8x5=40 9x5=45 10x5=50.
13)
Se introduc lungimea i limea unui dreptunghi. S se afieze cuvntul PERIMETRU urmat de valoarea
perimetrului acelui dreptunghi.
14)
Dan are de fcut mai multe exerciii de transformare n centimetri a unei mrimi date n metri. Realizai un
program care s citesc valoarea n metri i s o afieze n centimetri. Exemplu: date de intrare: 72 date de ieire: 7200
cm.
15)
S se scrie un program care citete un numr de ani i calculeaz numrul de luni, zile i ore corespunztoare.
Se consider c un an are 365 zile. Exemplu: date de intrare: 2 date de ieire: 24 luni 730 zile 17520 ore.
16)
Mriuca ine evidena iepurilor din cresctorie. Ea i noteaz ci iepuri sunt la nceputul fiecrei luni, ci au murit
i ci s-au nscut n cursul fiecei luni. Putei s realizai un program care, primind aceste date, s afieze la sfritul
fiecrei luni ci iepuri sunt n cresctorie? Exemplu : Date de intrare : nr. Iepuri la nceput de luna 10 nr. iepuri morti 2
nr. iepuri nascuti 6 Date de ieire : 14 iepuri.
17)
ntr-o gospodrie sunt 4 gini. Introducei n calculator prin variabilele a, b, c, d numrul de ou pe care-l d
fiecare gin ntr-o zi. Afiai cte ou se obin ntr-o sptmn.
18)
Se introduc n calculator dou date n variabilele a i b. S se fac un program care s schimbe ntre ele valorile
acestor variabile i s afieze noile valori ale lui a i b.
O nav parcurge distana d ( n km ) dintre dou staii orbitale n a sptmni i b zile. S se determine viteza
navei exprimat n km/or.
19)
II.
Problema 2
var x,y: integer;
begin
write(varsta primul copil =);read(x);
write(varsta al doilea copil =); read(y) ;
if x>y then
writeln (primul copil este mai mare cu ,x-y, ani)
else
writeln (al doilea copil este mai mare cu ,y-x, ani);
end.
Problema 3
var a,b: integer;
begin
write(introdu cele doua punctaje );
read(a,b);
if a<b then writeln(b, ,a)
else writeln(a, ,b);
end.
Problema 4
var n1,n2,n3,s:integer;
begin
write(introdu trei numere );read(n1,n2,n3);
write(introdu suma a doua nr );read(s);
write(in cutie a ramas numarul );
if n1+n2=s then write(n3);
if n1+n3=s then write(n2);
if n2+n3=s then write(n1);
end.
Problema 5
var a,b: integer;
begin
write(introdu doua numere ); read(a,b);
if a>b then writeln (a*2, ,b*3)
else writeln (b*2, ,a*3);
end.
Problema 6
var a,b: integer;
begin
write(introdu doua numere ); read(a,b);
if a=b-1 then writeln(a, e predecesorul lui ,,b)
else writeln(a, nu e predecesorul lui ,,b)
end.
Problema 2
var a,b,c,x,y,z: byte;
begin
write(numar pacient, glicemie ); readln(a,x);
write(numar pacient, glicemie ); readln(b,y);
write(numar pacient, glicemie ); readln(c,z);
writeln(Pacienti cu glicemie mare);
if x>100 then writeln(a);
if y>100 then writeln(b);
if z>100 then writeln(c);
end.
Problema 4
var a,b: integer;
begin
write(doua numere ); read(a,b);
if b<>0 then writeln(catul=,a/b:5:2)
else writeln(impartire imposibila);
end.
Problema 5
Problema 6
var x,y: byte;
var a,b,c,d,e,f,g : byte ;
begin
begin
write( greutatile copiilor );read(x.y);
write(numar ore zilnic );read(a,b,c,d,e,f,g);
if x+y>100 then writeln( INTRA PE RAND)if a+b+c+d+e+f+g>20
then writeln(va fi pedepsit)
else writeln(INTRA AMBII COPII);
else writeln(nu va fi pedepsit);
end.
end.
Problema 7
var i,v: byte; s: char;g: real;
begin
write(inaltime, varsta, sex:);
readln(i,v); readln(s);
write(greutatea ideala:);
g:=50+0.75*(i-150)+(v-20)/4
if s=m then writeln(g, kg);
if s=f then writeln(g-10, kg);
end.
Problema 8
var
a,b,o: integer;
begin
writeln(1. suma); writeln(2. produs);
write(introdu doua numere );readln(a,b);
write(alege operatia (1 sau 2) ); read(o);
if o=1 then writeln(a,+,b,=,a+b);
if o=2 then writeln(a,*,b,=,a*b);
end.
end.
Problema 3
var a,b:integer;
begin
write(introdu doua numere ); read(a,b);
write(numere care se impart la 7:);
if a mod 7 =0 then write(a, );
if b mod 7 =0 then write(b, );
writeln;
end.
Problema 4
var x: integer;
begin
write(cate petale are margareta?); read(x);
write(ma iubeste );
case x mod 5 of
1: writeln(un pic);
2: writeln(mult);
3: writeln(cu pasiune);
4: writeln(la nebunie);
0: writeln(deloc);
Problema 5
end;
var x: integer;
end.
begin
Problema 6
write(pe ce loc este Ionel?); read(x);
var n, casuta: integer;
write(Ionel primeste un tricou de culoare ); begin
case x mod 4 of
write(al catelea a sosit Ionel?); read(n);
1: writeln(alba);
write(Ionel este cazat in casuta nr. );
2: writeln(rosie);
if n mod 4=0 then casuta:=n div 4
3: writeln(albastra);
else casuta:=n div 4 +1;
0: writeln(neagra);
writeln(casuta);
end;
end.
end.
Problema 7
var x, clasa: integer;
begin
write(al catelea este Radu?); read(x);
write(Radu este inscris in clasa a V-a );
if x mod 25=0 then clasa:=x div 25
else clasa:=n div 25 +1;
case clasa of
1: writeln(A);
2: writeln(B);
3: writeln(C);
4: writeln(D);
5: writeln(E);
end;
end.
Problema 8
var m,o: integer;
begin
write(m=); read(m);
o:=m mod 4 +1;
writeln(Gygely va muri la ora ,o);
end.
Operatori logici
1) Se dau trei numere diferite. S se afieze cel mai mare i cel mai mic. Exemplu : Date de intrare 45 34 78 Date de
ieire max=78 min=34.
2) Se dau trei numere diferite. Afisai-le n ordine cresctoare. Exemplu : Date de intrare 4 2 6 Date de ieire 2 4 6.
3) Se dau trei numere diferite. Afiai numrul a crei valoare este cuprins ntre valorile celorlalte dou. Exemplu : Date de
intrare 12 14 10 Date de ieire 12.
4) Se introduc trei date de forma numr curent elev, punctaj. Afiai numrul elevului cu cel mai mare punctaj. Exemplu :
Date de intrare nr crt 7 punctaj 120 nr crt 3 punctaj 100 nr crt 4 punctaj 119 Date de ieire punctaj maxim are elevul
cu nr crt 7.
5) Se introduc trei numere. S se verifice dac formeaz o secven de numere consecutive. Exemple: Date de intrare 3
4 5 Date de ieire Da Date de intrare 4 5 7 Date de ieire Nu.
6) La ora de matematic Gigel este scos la tabl. Profesoara i dicteaz trei numere i i cere s verifice dac cele trei
numere pot fi laturile unui triunghi. Ajutai-l pe Gigel s afle rezultatul. Scriei un program care primete numerele lui
Gigel, care sunt mai mici ca 32000, i returneaz DA sau NU. Observaie: Trei numere pot fi laturile unui triunghi numai
dac fiecare este mai mic ca suma celorlalte dou. Exemple: Date de intrare 3 5 7 Date de ieire Da Date de intrare
2 5 9 Date de ieire Nu.
7) S se verifice dac o liter introdus este vocal sau consoan. Exemplu : Date de intrare a Date de ieire vocala.
8) Se introduc vrstele a 3 persoane. Afiai vrstele cuprinse ntre 18 i 60 de ani. Exemplu : Date de intrare 56 34 12
Date de ieire 56 34.
9) Date dou numere, afiai acele numere care se mpart exact la 7 i la 11. Exemplu : Date de intrare 154 213 Date de
ieire 154.
10) Se dau dou numere. S se verifice dac numrul mai mare se mparte exact la cel mai mic. Exemplu : Date de intrare
10 250 Date de iere 250 se imparte exact la 10.
11) Cunoscnd data curent exprimat prin trei numere ntregi reprezentnd anul, luna, ziua precum i data naterii unei
persoane, exprimat la fel, s se fac un program care s calculeze vrsta persoanei respective n numr de ani
mplinii. Exemplu : Date de intrare data curenta 2005 10 25 data nasterii 1960 11 2 Date de iere 44 ani.
Problema 1
var a,b,c: integer;
begin
write(introdu trei numere ); read(a,b,c);
if (a<b) and (a<c) then writeln(min=,a);
if (b<a) and (b<c) then writeln(min=,b);
if (c<b) and (c<a) then writeln(min=,c);
if (a>b) and (a>c) then writeln(max=,a);
if (b>a) and (b>c) then writeln(max=,b);
if (c>b) and (c>a) then writeln(max=,c);
end.
Problema 2
var a,b,c: integer;
begin
write(introdu trei numere ); read(a,b,c);
if (a<b) and (b<c) then writeln(a, ,b, ,c);
if (a<c) and (c<b) then writeln(a, ,c, ,b);
if (b<a) and (a<c) then writeln(b, ,a, ,c);
if (b<c) and (c<a) then writeln(b, ,c, ,a);
if (c<b) and (b<a) then writeln(c, ,b, ,a);
if (c<a) and (a<b) then writeln(c, ,a, ,b);
end.
Problema 3
Problema 4
var a,b,c: integer;
var a,b,c,x,y,z: integer;
begin
begin
write(introdu trei numere ); read(a,b,c);
write(numar, punctaj:); readln(x,a);
if ((a>b)and(a<c))or((a>c)and(a<b)) then
write(numar, punctaj:); readln(y,b);
writeln(a);
write(numar, punctaj:); readln(z,c);
if ((b>a)and(b<c))or((b>c)and(b<a)) then
if (a>=b) and (a>=c) then writeln(max=,x);
writeln(b);
if (b>=a) and (b>=c) then writeln(max=,y);
if ((c>b)and(c<a))or((c>a)and(c<b)) then
if (c>=a) and (c>=b) then writeln(max=,z);
writeln(c);
end.
end.
Problema 5
var a,b,c: integer;
begin
write(introdu trei numere ); read(a,b,c);
if (a+1=b)and(b+1=c) then
writeln(consecutive)
else writeln(neconsecutive);
end.
Problema 6
var a,b,c: integer;
begin
write(laturile triunghiului:); read(a,b,c);
if (a<b+c) and (b<a+c) and (c<a+b) then writeln(Da)
else writeln(Nu);
end.
Problema 7
Problema 8
var a: char;
var a,b,c: integer;
begin
begin
write(introdu o litera mica );
write( trei varste: ); read(a,b,c);
readln(a);
if (a>=18) and (a<=60) then writeln(a);
case a of
if (b>=18) and (b<=60) then writeln(b);
a,e,i,o,u: writeln(vocala)
if (c>=18) and (c<=60) then writeln(c);
else writeln(consoana);
end.
end;
end.
Problema 9
Problema 10
var a,b: integer;
var a,b: integer;
begin
begin
write(doua numere ); read(a,b);
write(doua numere ); read(a,b);
write(se impart exact la 7 si la 11:);
if (a>b) and (a mod b=0) then
if (a mod 7=0) and (a mod 11=0) then
writeln(a; se imparte exact la ;b)
writeln (a);
else if (b>a) and (b mod a=0) then
if (b mod 7=0) and (b mod 11=0) then
writeln(b; se imparte exact la ;a)
writeln (b);
else
end.
writeln(nu avem imp. exacta)
end.
Problema 11
var
ac,an,zc,zn,lc,ln,v: integer ;
begin
write(data curenta (an,luna,zi) );
readln(ac,lc,zc);
write(data nasterii (an,luna,zi) );
readln(an,ln,zn);
v:=ac-an;
if (lc<ln) or ((lc=ln) and (zc<zn)) then
v:=v-1;
writeln(varsta actuala=,v, ani);
end.
Probleme diverse
1) Andrei primete ntr-o zi trei note, nu toate bune. Se hotrte ca, dac ultima not este cel puin 8, s le spun
prinilor toate notele primite iar dac este mai mic dect 8, s le comunice doar cea mai mare not dintre primele
dou. Introducei notele luate i afiai notele pe care le va comunica prinilor. Exemple : Date de intrare 6 9 9 Date
de ieire 6 9 9 ; Date de intrare 8 5 7 Date de ieire 8.
2) Se consider trei numere ntregi. Dac toate sunt pozitive, s se afieze numrul mai mare dintre al doilea i al treilea
numr, n caz contrar s se calculeze suma primelor dou numere. Exemple: Date de intrare 45 23 100 date de
ieire 100 ; Date de intrare 34 -25 10 Date de ieire 9.
3) S se afieze cel mai mare numr par dintre doua numere introduse n calculator. Exemple : Date de intrare 23 45
Date de ieire nu exista numar par ; Date de intrare 28 14 Date de ieire 28 ; Date de intrare 77 4 Date de ieire 4.
4) Pe o mas de biliard sunt bile albe, roii i verzi. Din fiecare culoare sunt bile de dou dimensiuni: mari i mici. S se
afieze cte bile sunt n total pe masa de biliard. Un juctor vrea s-i spunei care bile sunt mai multe , cele mici sau
cele mari, afind numrul lor. De ce culoare sunt bilele cele mai numeroase? Precizai numrul lor. Exemplu: Date de
intrare Nr. bile albe mici: 2 Nr. bile albe mari: 3 Nr. bile rosii mici: 1 Nr. bile rosii mari: 4 Nr. bile verzi mici: 3 Nr. bile verzi
mari: 4 Date de ieire Totalul bilelor: 17 Mari: 11 bile Verzi: 7 bile
5) La ferma de gini Copanul este democraie. Fiecare gin primete exact acelai numr de boabe de porumb. Cele
care nu pot fi mprite vor fi primite de curcanul Clapon. S se spun cine a primit mai multe boabe i cu ct. n caz de
egalitate, se va afia numrul de boabe primite i cuvntul "egalitate". Datele se vor citi n urmtoarea ordine: numrul
de gini, iar dupa aceea numrul de boabe de porumb. Exemplu: Date de intrare 100 4050 Date de ieire: Curcanul
mai mult cu 10 boabe.
Problema 1
Problema 2
var x,y,z: byte;
var a,b,c,s: integer;
begin
begin
write(introdu cele trei note ); read(x,y,z)
write(introdu trei numere );read(a,b,c);
if z>=8 then writeln(spune toate notele)
write(Afisare:);
else if x>y then writeln (spune nota ,x)
if (a>=0) and (b>=0) and (c>=0)
else writeln (spune nota ,y);
then if b>c then writeln (b) else writeln(c)
end.
else writeln (a+b);
end.
Problema 3
Problema 4
var a,b: integer;
var amc,amr,rmc,rmr,vmc,vmr,smc,smr,a,r,v: integer;
begin
begin
write(doua numere ); read(a,b);
write(numar bile albe-mici,mari ); read(amc,amr);
if a>=b then
write(numar bile rosii-mici,mari ); read(rmc,rmr);
begin
write(numar bile verzi-mici,mari ); read(vmc,vmr);
if a mod 2=0 then writeln(a)
writeln(total bile ,amc+amr+rmc+rmr+vmc+vmr);
else if b mod 2=0 then writeln(b) smc:=amc+rmc+vmc;
end
smr:=amr+rmr+vmr;
else
if smc>smr then writeln(mici ,smc );
if b mod 2=0 then writeln(b)
if smc=smr then writeln(mici si mari ,smc);
else if a mod 2=0 then writeln(a); if smr>smc then writeln(mari ,smr);
end.
a:=amc+amr; r:=rmc+rmr; v:=vmc+vmr;
Problema 5
if (a>=r) and (a>=v) then writeln(albe ,a);
Var g,b,bg,bc: integer;
if (r>=a) and (r>=v) then writeln(rosii ,r);
begin
if (v>=a) and (v>=r) then writeln(verzi ,v);
write( nr. gaini ); readln(g);
end.
write(nr. boabe ); readln(b);
bg:=b div g;{boabe primite de fiecare gaina}
bc:=b mod g;{boabe primite de curcan}
if bg>bc then writeln(gainile ,bg-bc);
if bc>bg then writeln(curcanul ,bc-bg);
if bc=bg then writeln(egalitate);end.
10
III.
Problema 1
var a,n :integer ;
begin
writeln(numere care se divid cu 6:);
for a:=1 to 9 do
begin
n:=a*100+200+30+a;
if n mod 6=0 then writeln(n);
end;
end.
Problema 2
var a,b,e :integer ;
begin
write(etaj de plecare:);read(a);
write(etaj de sosire:);read(b);
writeln(liftul parcurge etajele);
for i:=a downto b do writeln (i);
end.
Problema 3
var f,n :integer ;
begin
write(n=); read(n);
for f:=1 to 10 do writeln(f,x,n,=,f*n);
end.
Problema 4
var a,b,n :integer ;
begin
for a :=17 to 983 do
begin
b :=1000-a ;
if (a mod 17=0) and (b mod 19=0) then
writeln(a, ,b) ;
end ;
end.
Problema 5
var t,v,i,n : integer ; {t=nr. termeni afisati, v= valoarea termenilor, i=numar de valori egale }
begin
{ se observa ca i=v+1)
write(n=) ; read(n) ;
t :=1 ; v :=1 ; i :=1 ;
while t<=n do begin
write(v, ) ;
t :=t+1 ;
i :=i+1 ;
11
12
until s>=n ;
if s=n then
begin
for i :=t to w-2 do write(i,+) ;
writeln(w-1,=,n)
end ;
end ;
end.
Problema 10
var n,d : integer ;
begin
write(numar=) ; read(n) ;
writeln(divizorii lui ,n, sunt :) ;
for d :=1 to n do if n mod d=0 then write(d, ) ;
end.
Problema 11
var n,i: integer ; prim: boolean ;
begin
write(numar=) ; read(n) ;
prim :=true ;
if (n=1) or (n=0) then prim :=false
else
for i :=2 to n div 2 do
if n mod i=0 then prim :=false ;
if prim then writeln(numar prim) else writeln(numarul nu este prim) ;
end.
sau, fara variabile booleene, folosind proprietatea numerelor prime de a avea doar doi divizori
var n,i,c : integer ;
begin
write(numar=) ; read(n) ;
c :=0 ;
for i :=1 to n do if n mod i=0 then c :=c+1 ;
if c=2 then writeln(numar prim) else writeln(numarul nu este prim)
end.
Problema 12
var n,i,j,nr : integer ; prim :boolean ;
begin
write(cate numere prime ?) ; read(nr) ;
n :=2 ;
j :=0 ;
{j memoreaza cate numere prime s-au gasit}
repeat
prim :=true ;
for i :=2 to n div 2 do if n mod i=0 then prim :=false ;
if prim then begin witeln(n, ) ; j :=j+1 end ;
n :=n+1 ;
until j=nr ;
end.
13
edab
----------ebce
Problema 1
var a,b,c: integer;
begin
for a:=2 to 97 do
for b:=a+1 to 98 do
for c:=b+1 to 99 do
if a+b+c mod 10=0 then
writeln(a, ,b, ,c);
end.
Problema 2
var a,b,n,nr: integer;
begin
for a:=1 to 9 do
for b:=1 to 9 do
begin
n=a*10+b
nr=b*10+a
f n+nr=55 then writeln(n);
end;
end.
14
Problema 3
var s,z,u: integer;
begin
writeln(Rezultate:);
for s:=1 to 5 do
for z:=s+1 to 8 do
for u:=z+1 to 9 do
if s+z+u=18 then writeln(s,z,u);
end.
Problema 4
var a,b,c,d,e: integer;
begin
a:=1;
for b:=0 to 9 do
for c:= 0 to 9 do
for d:=0 to 9 do
for e:=0 to 9 do
if a*10000+b*1000+c*100+b*10+e-(e*1000
+d*100+a*10+b)=e*1000+b*100+c*10+e
+d*100+a*10+b)=e*1000+b*100+c*10+e then
begin writeln(a,b,c,b,e); writeln( ,e,d,a,b);
writeln(------); writeln( ,e,b,c,e); end;
end.
Calcule de sume i produse
1) S se calculeze 7+14+21+28++98, 3*6*9*12**33
2) S se calculeze sumele s1=1+2+3++n
s2=1*2+2*3+3*4++(n-1)*n
s3=1+1*2+1*2*3++1*2*3**n
s4=12+22+32++n2
s5=1/2+2/3+3/4++n/(n+1)
s6=2-3+4-5+-99+100
s7=1+2+22+23+24++2n
3) Se introduc succesiv numere nenule pn la introducerea numrului 0. S se afieze suma tuturor numerelor introduse.
Exemplu: Date de intrare 3 5 4 2 0 Date de ieire 14.
4) Se citesc numere de la tastatur pn la introducerea unui numr impar divizibil cu 3. S se afieze suma tuturor
numerelor pare introduse. Exemplu: Date de intrare 7 4 6 2 1 9 Date de ieire 12.
Problema 1
var t: byte; s,p: longint;
begin
s:=0;
for t:=1 to 14 do s:=s+t*7;
p:=1;
for t:=1 to 11 do p:=p*(t*3);
writeln(suma=,s);
writeln(produs=,p);
end.
Problema 2
var t,n: integer;s2,s7: longint;
begin
s2:=0; s7:=0; write(n=); read(n);
for t:=1 to n-1 do s2:=s2+t*(t+1);
writeln (s2=,s2);
p:=1;
for t:= 0 to n do begin s7:=s7+p; p:=p*2; end;
writeln (s7=,s7);
end.
Problema 3
var n: integer; s:longint;
begin
s:=0;
repeat
write(numar=); read(n);
if n<>0 then s:=s+n;
until n=0;
writeln(suma numerelor introduse =,s)
end.
15
Problema 2
var n,k,c: integer;
begin
write(introdu numerele n si k:); read(n,k);
c:=0;
if n mod k=0 then begin while (n mod k=0) and (n<>0) do
begin n:=n div k; c:=c+1 end;
end;
writeln(k, apare la puterea ,c);
begin
Problema 4
var zi: integer; inalt: real;
begin
inalt:=1; zi:=0;
repeat
inalt:=inalt+0.75;
zi:=zi+1;
until inalt>=12;
writeln(Dupa ,zi, zile copacul ajunge la inalt. de ,inalt:5:2, m);
inalt :=1;
for zi:=1 to 30 do inalt:=inalt+0.75;
writeln(Dupa o luna copacul ajunge la inaltimea de ,inalt, m);
end.
16
Problema 5
Problema 6
var a,b,x,dist,zi: integer;
var n, zi, nrcap: integer;
begin
begin
write(valorile pt. x, a, b ); read(x,a,b);
write(numar zile=); read(n);
dist:=0; zi:=0;
nrcap:=6;
write(Fat Frumos ajunge la Ileana );
for zi:=1 to n do
repeat
begin
s:=s+a;
nrcap:=nrcap-1;
zi:=zi+1;
if zi<n then nrcap:=nrcap+6;
if s<x then s:=s-b;
end;
until s>=x;
writeln(dupa ,n, zile balaurul avea ,nrcap, capete);
writeln (dupa ,zi, zile);
end.
end.
Problema 7
var n,sar,dist,zi: integer;
begin
write(numar zile ); read(n);
sar:=7; dist:=7;
for zi:=2 to n do begin
sar:=sar*10+7; dist:=dist+s; end;
writeln(dupa ,n, zile cangurul sare ,dist, m);
end.
Algoritmi de nsumare, contorizare, determinare a min i max
1) Se citesc pe rnd 4 numere ntregi. S se numere cte dintre ele au restul 7 la mprirea cu 13. S se afieze aceste
numere i produsul celorlalte numere. Exemplu: Date de intrare 20 15 30 46 Date de ieire Numere: 20 46 Total: 2
Produs: 450.
2) Se citesc pe rnd temperaturile medii ale fiecrei luni a unui an, ca numere ntregi. S se afieze cu dou zecimale
media anual a temperaturilor pozitive i a celor negative. Exemplu: Date de intrare -5 -3 1 8 12 17 20 21 18 10 6
-2 Date de ieire medie_poz=13.66 medie_neg=-3.33.
3) Se citesc numere naturale strict pozitive pn la ntlnirea numrului 0. S se numere cte dintre ele sunt pare,
presupunnd c cel puin primul element este nenul. Exemplu: Date de intrare 4 3 6 5 7 7 0 Date de ieire 2 numere
pare.
4) Se introduc datele de natere a n copii, sub forma an, numr lun, zi. S se afieze ci copii sunt nscui pe 1 iunie i
ci copii sunt nscui n 1994, 1995 i 1996. Exemplu: Date de intrare n=3 an=1994 luna=12 zi=3 an=1990 luna=6
zi=1 an=1995 luna=6 zi=1 Date de ieire 2 copii nscui la 1 iunie 2 copii nscui n 1994 1995 1996.
5) Se citesc de la tastatur numere ntregi pozitive atta timp ct suma lor nu depete 1000. S se scrie un program
care s afieze cea mai mic i cea mai mare valoare a acestor numere. Exemplu: 550 345 100 45 Date de ieire
max=550 min=100.
6) Se citesc mediile a n elevi, ca numere reale. S se afieze cea mai mare i cea mai mic medie. S se verifice dac
sunt corigeni. Exemplu : Date de intrare n=4 9.50 4.25 9.66 6.33 Date de ieire max=9.66 min=4.25 1 corigent.
Problema 1
Problema 2
var a,c,p: integer;
var sp,sn,cp,cn,a,i: integer;
begin
begin
c:=0;p:=1;
sp:=0;sn:=0;cp:=0;cn:=0;
for i:=1 to 4 do begin
for i:=1 to 12 do begin
write(numar=);read(a);
write(temp. luna ,i,:); read(a);
if a mod 13=7 then c:=c+1 else p:=p*a;
if a>=0 then begin sp:=sp+a; cp:=cp+1 end
end;
else begin sn:=sn+a; cn:=cn+1 end;
writeln(c, nr. care dau rest 7 la imp. cu 13); end;
writeln(produsul celorlalte=,p);
writeln(media anuala a temp. pozitive=,sp/cp:6:2);
end.
if cn<>0 then writeln(media an. a temp. neg.=,sn/cn:6:2)
17
Problema 3
var c,a: integer;
begin
c:=0;
repeat
write(numar=); read(a);
if (a mod 2=0) and (a<>0) then c:=c+1;
until a=0;
writeln(ai introdus ,c, numere pare);
end.
Problema 5
var s,n,i,r:integer; m:real;
begin
writeln(introdu numere :);
s:=0; i:=0;
while s<=1000 do begin
read(n);
s:=s+n;
i:=i+1;
end;
m:=s/i;
writeln( media numerelor este=,m:7:3);
end.
end.
Algoritmul de mprire n cifre a unui numr
1) Se dau trei numere a,b,c, de cte dou cifre, nenule, fiecare. Folosind cifrele unitilor celor trei numere se va genera un
numr x de trei cifre, iar cu cifrele zecilor se va genera un numr y de trei cifre. S se afieze x i y. Exemplu : date de
intrare a=24 b=13 c=64 date de ieire x=434 y=216.
2) Se introduce un numr natural cu maxim 9 cifre. S se determine i s se afieze numrul de cifre, cea mai mare cifr i
suma tuturor cifrelor acestui numr. Exemplu: Date de intrare 24356103 Date de ieire 8 cifre max=6 min=0 suma=24.
3) Cte cifre pare sunt ntr-un numr dat? Exemplu : Date de intrare 34425346 Date de ieire 4 cifre.
4) S se verifice dac la scrierea unui numr, introdus de la tastatur, cifrele pare i impare alterneaz. Exemplu : date de
intrare 347092 date de ieire da.
5) n cte zerouri se termin un numr de maxim 9 cifre, introdus de la tastatur? Exemplu : Date de intrare 20034000
Date de ieire 3 zerouri.
6) Se introduce un numr. S se verifice dac este palindrom. Exemple : Date de intrare 12321 Date de ieire Da ; Date de
intrare 23034 Date de ieire Nu.
7) S se afieze toate numerele palindroame mai mari dect 10 i mai mici dect un numr dat, n. Exemplu : Date de
intrare n=110 date de ieire 11 22 33 44 55 66 77 88 99 101.
8) Se introduce un numr natural n cu maxim 8 cifre, nenule i distincte, mai mici ca 9. S se afieze cifrele numrului n
ordine descresctoare. Indicaie: fiecare cifr c se nmulete cu 10c, se adun aceste numere i se afieaz fr
zerouri. Exemplu: pentru n=354, s-ar face urmtoarele calcule: 4*104+5*105+3*103=54300 i se va afia 543 .
18
9) Dat un numr ntreg de maxim 9 cifre, s se afieze numrul de apariii al fiecrei cifre. Exemplu : Date de intrare
364901211 Date de ieire 0 apare de 1 ori 1 apare de 3 ori 2 apare de 1 ori 3 apare de 1 ori 4 apare de 1 ori 5
apare de 0 ori 6 apare de 1 ori 7 apare de 0 ori 8 apare de 0 ori 9 apare de 1 ori.
10) Afiai cte cifre distincte conine un numr nenul. Exemplu : date de intrare 234323 Date de ieire 3 cifre.
11) Se dau dou numere naturale a,b cu maxim 9 cifre. a) S se determine cifrele distincte comune numerelor a i b.
b) S se afieze numrul cel mai mare format din toate cifrele lui a i b
Exemplu : pentru a=2115 b=29025 se va afia a) 2 5 b) 955222110
(OJI, clasa a V-a, 2004)
12) Se introduc dou numere, a i b, a<b<5000000. S se afieze ultima cifr a sumei tuturor numerelor aflate ntre a i b.
Exemple: Date de intrare a=12 b=14 date de ieire 9 ; date de intrare
a=1000000 b=3000000 date de ieire 0.
13) Se dau dou numere avnd acelai numr de cifre. Cte cifre trebuie modificate pentru a transforma un numr n
cellalt ? Exemplu : pentru n1= 2135 i n2= 7139 este necesar modificarea a dou cifre.
Problema 1
Problema 2
var a,b,c,ua,za,ub,zb,uc,zc,x,y:byte;
var n,s,c,max,cifra : longint ;
begin
begin
write(a,b,c=); read(a,b,c);
write(introdu un numar ) ; read(n) ;
ua:=a mod 10; ub:=b mod 10; uc:=c mod 10; c :=0 ; max :=0 ; s :=0 ;
za:=a div 10; zb:=b div 10; zc:=c div 10;
repeat
x:=ua*100+ub*10+uc; y:=za*100+zb*10+zc; cifra :=n mod 10 ; s:=s+cifra ; c :=c+1 ;
writeln(x=,x, y=,y);
if max<cifra then max :=cifra ;
end.
n :=n div 10 ;
until n=0 ;
writeln(numarul are ,c, cifre) ;writeln(suma cifrelor=,s) ;
writeln( cea mai mare cifra este ,max) ;
end.
Problema 3
var n: longint ;cifra,c : byte ;
begin
write(introdu un numar ) ; read(n) ;
c :=0 ;
repeat
cifra :=n mod 10 ;
if cifra mod 2=0 then c :=c+1 ;
n :=n div 10 ;
until n=0 ;
writeln(numarul are ,c, cifre pare) ;
end.
Problema 4
var n, cifra1, cifra2: longint ; alt :boolean ;
begin
write(numar=) ; read(n) ;
alt :=true ; cifra1 :=n mod 10 ; n :=n div 10 ;
repeat
cifra2 :=n mod 10 ;{se memoreaza cate 2 cifre consecutive}
{se verifica daca suma lor este impara}
if (cifra1+cifra2) mod 2<>1 then alt :=false ;
cifra1 :=cifra2 ; n :=n div 10 ;
until n=0 ;
if alt then writeln(avem alternanta)
else writeln(nu avem alternanta) ;
end.
Problema 5
Problema 6
var n,cifra,c : longint ; gata: boolean ;
var n,ndat,nrast,cifra : longint ;
begin
begin {constr. nr. rasturnat pe masura ce scot cifrele}
write(introdu un numar nenul ) ; read(n) ; write(introdu numarul :) ; read(n) ;
c:=0 ; gata :=false ;
ndat :=n ; nrast :=0 ;
repeat
repeat
cifra :=n mod 10 ;
cifra :=ndat mod 10 ;
if cifra=0 then c :=c+1 else gata :=true ;
nrast :=nrast*10+cifra ;
n :=n div 10 ;
ndat :=ndat div 10 ;
until gata ;
until ndat=0 ;
writeln(numarul se termina cu ,c, zerouri) ; if n=nrast then writeln(ESTE PALINDROM)
end.
else writeln(NU ESTE PALINDROM) ;
19
Problema 7
var n,x,ndat,nrast,cifra : longint ;
begin
write(n=) ; read(n) ;
writeln(NUMERE PALINDROAME) ;
for x :=10 to n do begin
ndat :=x ; nrast :=0 ;
repeat
cifra :=ndat mod 10 ;
nrast :=nrast*10+cifra ;
ndat :=ndat div 10 ;
until ndat=0 ;
if x=nrast then writeln(x, ) ;
end ;
end.
end.
Problema 8
var n,cifra,i,p,s,srast : longint ;
begin
write(numar cu cifre intre 1 si 8, distincte=) ; read(n) ;
s :=0 ;
repeat
cifra :=n mod 10 ;
p :=1 ; for i :=1 to cifra do p :=p*10 ;
s :=s+cifra*p ;
n :=n div 10
until n=0 ;
srast :=0 ;
{formez rasturnatul lui s fara cifrele de 0}
repeat
cifra :=s mod 10 ;
Problema 9
if cifra<>0 then srast :=srast*10+cifra ;
var n,c,nc,m,cifra : longint ;
s :=s div 10 ;
begin
until s=0 ;
write(introdu un numar ) ; read(n) ;
repeat {afisez rasturnatul lui srast, fara a forma acest numar}
for c :=0 to 9 do
cifra :=srast mod 10 ;
begin
write(cifra, ) ;
nc :=0 ;
srast :=srast div 10 ;
m :=n ;
until srast=0 ;
repeat
end.
cifra :=m mod 10 ;
if cifra=c then nc :=nc+1 ;
m :=m div 10 ;
until m=0 ;
writeln(cifra ,c, apare de ,nc, ori) ;
end ;
end.
Problema 10
Problema 11
var n,c,nc,m,cifra,nrcifre: longint ;
var a,b,m,cifra,nr :longint ; nr1,nr2 :boolean ;
begin
begin
write(introdu un numar ) ; read(n) ;
write(a,b=) ; read(a,b) ;
nrcifre :=0 ;
write(a) ) ;
for c :=0 to 9 do
for c := 0 to 9 do
begin
begin
nc :=0 ;
nr1:=false ; m:=a ;
m :=n ;
repeat
repeat
cifra :=m mod 10 ; if cifra=c then nr1:=true;
cifra :=m mod 10 ;
m :=m div 10 ;
if cifra=c then nc :=nc+1 ;
until m=0 ;
m :=m div 10 ;
nr2:=false; m:=b ;
until m=0 ;
repeat
if nc<>0 then nrcifre:=nrcifre+1 ;
cifra :=m mod 10 ; if cifra=c then nr1:=true;
end ;
m :=m div 10 ;
writeln(numarul contine ,nrcifre, distincte) ;
until m=0 ;
end.
if nr1 and nr2 then write(c, );
20
Problema 12
var a,b,s,n: longint ;
write (a,b (a<b) :) ; read(a, b) ;
s:=0 ; for n:=a to b do s:= s + n mod 10 ;
writeln(ultima cifra=,s mod 10) ;
end.
end ; writeln ;
write( b) ) ; {iau toate cifrele de la 0 la 9 si vad de cate ori apare begin
fiecare atat in a cat si in b}
for c :=9 downto 0 do
begin
nr :=0 ; m :=a ;
repeat
cifra :=m mod 10 ; if cifra=c then nr:=nr+1;
m :=m div 10 ;
until m=0 ;
m :=b ;
repeat
cifra :=m mod 10 ;
if cifra=c then nr:=nr+1;
m :=m div 10 ;
for i :=1 to nr do write(c) ;
{cifra c se afiseaza de atatea ori de cate ori apare in a si b}
end ;
end.
21
{
int a, b, r, x, y;
cout << "Programul calculeaza c.m.m.d.c. si c.m.m.m.c a doua numere date" << endl;
cout << "Introduceti primul numar : ";
cin >> a; x=a;
cout << "Introduceti al doilea numar : ";
cin >> b; y=b;
while(b!=0) {
r=a%b; // calculeaza restul impartirii lui a la b
a=b;
b=r;
}
cout << "c.m.m.d.c al numerelor "<< x << " si " << y << " este : " << a << endl;
cout << "c.m.m.m.c al numerelor "<< x << " si " << y << " este : " << x*y/a << endl;
}
Problema 3
Problema 4
var a,b,c,r: integer ;
var n,m,r: integer ;
begin
begin
write(introdu trei numere ) ; read(a,b,c) ;
write(introdu un numar ) ; read(n) ;
repeat {aflu cmmmdc dintre a si b}
writeln(numere prime cu ,n) ;
r :=a mod b ; a :=b ; b :=r ;
for m :=2 to n-1 do begin
until r=0 ;
x :=n ;y :=m ;
repeat
repeat r :=x mod y ; x :=y ; y :=r until r=0 ;
{aflu cmmmdc dintre c si cmmmdc dintre a si b}
if x=1 then write(m, ) ;
r :=a mod c ; a :=c ; c :=r ; until r=0 ;
end ;
writeln(cmmmdc=,a) ;
end.
end.
Probleme diverse
1) S se afieze toate numerele pn la 100 care au patru divizori.
2) Dintre numerele mai mici ca 1000, care au cei mai muli divizori ?
3) Se dau n numere. n cte zerouri se va termina produsul lor? Exemplu : date de intrare n=4 5 4 10 25 date de ieire 3
zerouri.
4) Se d un numr natural n, n<=100 i o cifr k din mulimea {2,3,5,7}. Se cere s se afieze exponentul lui k n
descompunerea n factori primi a produsului 1*2*3**n. Exemplu: date de intrare n=8 k=2 date de ieire 7. (ONI 2003
clasa a V-a)
5) Se introduc temperaturile medii msurate n fiecare lun a unui an. S se afieze valoarea celei mai mari temperaturi
negative i a celei mai mici temperaturi pozitive a acelui an. Exemplu: date de intrare -4 -6 0 5 10 20 24 25
17 8 -1 -7 date de ieire max negative=-1 min pozitive=5.
6) Se citete un numr natural n cu cel mult 9 cifre i se cere s se afieze o piramid format din cifrele lui astfel: pe
prima linie cifra (sau cifrele) din mijloc, pe a doua cele 3 (sau 4 ) cifre din mijloc, etc. pe ultima s fie scris numrul dat.
Exemplu: n=237855 se va afia 7 8
378 5
2 3 7 8 5 5
7) Dat valoarea unui numr natural, se cere s se tipreasc n scriere roman.
8) Se citesc pe rnd caracter cu caracter elementele unei expresii matematice, caracterele citite pot fi doar cifre i +, -, * ,/
i =, pn la ntlnirea semnului =. Operaiile se fac n ordinea introducerii lor, fr a se ine seama de prioritate.
Calculatorul s afieze rezultatul expresiei.
9) O broscu se deplaseaz efectund cte o sritur de lungime p cm la fiecare secund. Dup fiecare n secunde
broscua devine mai obosit, iar lungimea sriturii pe care o face se njumtete. Scriei un program care s citeasc
de la tastatur lungimea iniial a sriturii, p, numrul de secunde dup care broscua i injumtete saltul, n, precum
22
10)
a)
b)
c)
11)
12)
13)
14)
15)
i durata total a deplasrii broscuei T (exprimat n secunde) i care s determine distana total pe care a parcurs-o
broscua. Distana total determinat va fi afiat pe ecran cu dou zecimale. Restricii: p, n, T sunt numere naturale; p,
n, T<30000;T/n<16 Exemplu Pentru n=10, p=20 i T=33, distana total pe care se deplaseaz broscua este 357.50
cm.
(ONI, Galaciuc 2001, clasa a V-a)
La un concurs de matematic particip elevi din mai multe coli din diferite orae. Pentru a se putea deosebi ntre ele
lucrrile lor, fiecare lucrare este codificat printr-un numr natural cu 3 cifre, s zicem abc, unde a este codul oraului, b
este codul colii din oraul a iar c este codul unui elev din coala b din oraul a. Ex.: lucrarea cu codul 328 este lucrarea
elevului cu codul 8 de la coala cu codul 2 din oraul cu codul 3. Se cunosc: un cod (al lucrrii unui elev H, prietenul
nostru), numrul n de lucrri i codurile acestora. Cerin: Se cere s se rezolve cerinele:
Verificai dac H este premiant sau nu.
Determinai numrul de premii luate de elevii din oraul lui H
Determinai numrul de premii luate de elevii din coala lui H
Exemplu: date de intrare codH 123 n=4 133 221 123 125 Date de ieire a) da b) 3 c) 2
(OJI, clasa a V-a, februarie 2004)
O carte are N pagini. Pe paginile care au numrul asociat divizibil cu K i nedivizibil cu H se afl poze. Cerin: pentru N,
K, H citite de la tastatur se cere s se afieze ultima cifr a sumei numerelor asociate paginilor care au poze, dac
problema nu are soluie se va afia mesajul: Imposibil!
Restricii 0<N<1000000001 0<K,HN. Exemplu Pentru N=20, K=3, H=2 se va afia 7
(CNI Satu-Mare 2003 clasa a V-a)
ntr-o parcare sunt n maini care au numere de nmatriculare provizorii (numere ntregi, din cel mult 5 cifre). Mainile
sunt aezate n ordinea de citire a numerelor de nmatriculare. S se afieze poziiile pe care se afl mainile pentru
care suma cifrelor numrului de nmatriculare este impar ( n<= 20).
Exemplu: pt. n=5 i numerele de nmatriculare: 634 90281 63721 30361 70915 se vor afia poziiile: 1 3 4
(CNI Satu-Mare 2002 clasa a V-a)
n vacan la mare dup ce se plictisete de plaj i ap, Ionic este mai tot timpul n Parcul de distracii. Dintre toate
locurile de distracie el a ales tirul. Astfel, ntr-o sear Ionic obine S puncte, dup un anumit numr de trageri (cel puin
dou trageri). tiind c la toate tragerile efectuate a obinut puncte i c dup fiecare tragere el progreseaz constant,
adic obine cu un punct mai mult dect la tragerea anterioar, se cere s se determine toate modalitile de obinere a
punctajelor (cu suma lor egal cu S). Date de intrare: de la tastatur se va citi valoarea lui S (numr natural nenul
998877). Date de ieire: Pentru fiecare soluie se va afia pe cte un rnd numrul de trageri i punctajul primei trageri
cu un spaiu ntre ele, iar la sfrit pe ultima linie se va afia mesajul Numar solutii, urmat de numrul de soluii.
Exemplu: Pentru S=15 pe ecran se va afia:
5 1 2 7 3 4
Numr soluii 3
(ONI
Glciuc 2002 clasa a V-a)
Pentru a descoperi numrul cheii ce trebuie s o foloseasc pentru a putea s o elibereze pe Ileana Cosnzeana, FtFrumos are de rezolvat urmtoarea problem: Pentru numrul citit pe u, trebuie s calculeze suma divizorilor i, dac
aceast sum este un numr prim, atunci codul este egal cu suma cifrelor numrului citit. n caz contrar, codul este egal
cu suma cifrelor impare ale numrului citit. Ajutai-l pe erou s descopere numrul cheii. Exemple: date de intrare 472
date de ieire cheia 7 ; Date de intrare 4 date de ieire cheia 4.
(CNI-etapa judeean, 2005)
Se dau dou numere avnd acelai numr de cifre. Cte cifre trebuie modificate pentru a transforma un numr n
cellalt? Exemplu: date de intrare n1=2135 n2=7139 date de ieire 2 cifre.
(CNI-etapa judeean, 2005)
Problema 1
Problema 2
var n,d,c:integer;
var max,n,nr,d,c: integer;
begin
begin
writeln(Numere care au patru divizori);
max:=0;
for n:=6 to 100 do begin
for n:=2 to 1000 do begin
c:=0;
c:=0;
for d:=1 to n do if n mod d=0 then c:=c+1;
for d:=1 to n do if n mod d=0 then c:=c+1;
if c=4 then write(n, );
if max<c then begin max:=c; nr:=n; end;
end;
end;
writeln;
writeln(primul numar cu cei mai multi divizor este ,nr);
23
end.
end.
Problema 3
Problema 4
var n,e2,e5,a,i: integer;
var n,k,c,a,i,exp: integer;
begin
begin
write(n=); read(n);
write(introdu numerele n si k:); read(n,k);
e2:=0; e5:=0; {vor memora suma
exp:=0; {exp. lui k va fi suma exponentilor lui k in desc. in factori
exp. lui 2 si 5 din descomp. fiecarui nr}
primi a nr. pana la n}
for i:=1 to n do begin
for i:=2 to n do begin
write(numar=); read(a);
c:=0;
if a mod 2=0 then while a mod 2=0 do
if i mod k=0 then begin
begin a:=a div 2; e2:=e2+1;
end;
a:=i; {nu se poate modifica val. lui i in bucla for}
if a mod 5=0 then while a mod 5=0 do
while (a mod k=0) and (a<>0) do begin
begin a:=a div 5; e5:=e5+1;
end;
exp:=exp+c; a:=a div k; c:=c+1 end;
end;
end;
{cum pentru fiecare pereche 2, 5 din produs
end;
se obtine un zero, nr. de zerouri este egal cu writeln(exponentul lui ,k, este ,exp);
min(e2,e5)}
end.
if e2<e5 then
Problema 6
writeln(prod. se termina in ,e2, zerouri) var e,i,j,c: byte {c=numar cifre, e=numar maxim de cifre
else
eliminate pe o latura }
writeln(prod. se termina in ,e5, zerouri); n,nr,f,r: longint; {r=nr ramas dupa elimin. cifrelor de pe extreme }
end.
begin
Problema 5
write(n=); read(n);
var min,max,t,i: integer;
c:=0; nr:=n;
begin
repeat {se deermina c, numarul de cifre al numarului n}
max:= -50; min:= 50;
c:=c+1; nr:=nr div 10; until nr=0;
for i:=1 to 12 do begin
e:=(c-1) div 2;
write(temperatura in luna ,i); read(t);
for i:=e downto 0 do begin
if (max<t) and (t<0) then max:=t;
f:=1;
if (min>t) and (t>0) then min:=t;
for j:=1 to i do f:=f*10;
end;
r:=n div f;
{se elimina f cifre de la sfarsit}
writeln(max negative=,max);
f:=1;
writeln(min pozitive=,min);
for j:=1 to c-2*i do f:=f*10;
end.
r:=r mod f;
{se elimina cifrele de la inceput}
writeln(r:c-i);
Problema 7
var x: longint;
begin
writeln(numar=); read(x);
writeln(scrierea romana a numarului dat:);
while x>=1000 do begin write(M); x:=x-1000 end;
if x>=900 then begin write(CM); x:=x-900 end
else if x>=500 then begin write(D); x:=x-500 end
else if x>=400 then begin write(CD); x:=x-400 end;
while x>=100 do begin write(C); x:=x-100 end;
if x>=90 then begin write(XC); x:=x-90 end
else if x>=50 then begin write(L); x:=x-50 end
else if x>=40 then begin write(XL); x:=x-40 end;
while x>=10 do begin write(X); x:=x-10 end;
if x>=9 then begin write(IX); x:=x-9 end
24
end;
end.
25
26
IV.
VARIABILE BOOLEENE
1) Ctlina are o maimu care a nvat s scrie la tastatur. Pentru aceast sptmn trebuie s nvee s scrie trei
cuvinte de maximum 10 caractere. Din pcate, maimua se grbete i apas greit pe taste. Ajutai-o pe Ctlina s
verifice cnd maimua a scris corect cele trei cuvinte. Date de intrare: cele trei cuvinte i cuvintele introduse de
maimu. Programul se va opri atunci cnd maimua a reuit s scrie corect toate cele trei cuvinte indiferent de ordinea
introducerii sau de numrul de cuvinte greite introduse. Separarea intre cuvinte se face apsnd tasta Enter. Exemplu:
Pentru cuvintele: Palat calculator jungla, maimuta poate tasta: palat Calutin jungla Pialat Cucalator calculator Palat se
va afia AI REUSIT!
(www.contaminare.ro)
2)
Cine se uit la televizor ?
Ana, Barbu, Clin, Dumitru i Elena petrec mpreun o zi de iarn.
Dac Ana privete la TV, la fel face i Barbu
Fie Dumitru, fie Elena, fie amndoi privesc la TV
Fie Barbu, fie Clin privete la TV, dar nu amndoi
Dumitru i Clin fie privesc, fie nu privesc la TV, dar asta numai mpreun
Dac Elena privete la TV atunci Ana i Dumitru se uit i ei
Indicaie : se vor folosi variabilele booleene a,b,c,d,e care vor avea valoarea true sau false dup cum propoziiile Ana
se uit la TV , Barbu se uit la TV , etc. sunt adevrate sau false.
3)
Cine minte ?
ntr-o mprejurare n care sunt implicai a, b i c se fac urmtoarele afirmaii : a susine c b minte, b susine c c minte,
c susine c a i b mint. Cine minte i cine spune adevrul ?
Problema 2
var a,b,c,d: boolean; q: byte;
begin
q:=0; {q numara conditiile}
for a :=false to true do
for b := false to true do
for c := false to true do
for d := false to true do
for e := false to true do
begin
if a<=b then q:=q+1 ;
if e<=(a and d) then q :=q+1 ;
if d or e then q :=q+1 ;
27
Problema 3
var a,b,c :boolean ;
begin
for a :=false to true do
begin
b :=not a ;
c :=not b ;
if (a or b) xor c then begin
if a then writeln(a spune adevarul) else writeln(a minte) ;
if b then writeln(b spune adevarul) else writeln(b minte) ;
if c then writeln(c spune adevarul) else writeln(c minte) ;
end ;
end ;
end.
28
V.
29
Problema 3
var n,max,b,i : word ;
begin
write(numarul bilelor extrase :) ; read(n) ;
max :=0 ; randomize ; writeln(s-au extras bile cu numerele :) ;
for i :=1 to n do begin
b :=1+random(20) ; write(b, ) ;if max<b then max :=b ;end ;
writeln ;writeln(valoarea maxima extrasa=,max) ;
end.
Problema 4
var n,ca,cn,b,i : word ;
begin
write(numarul bilelor extrase :) ; read(n) ;
ca:=0 ; cn :=0 ; randomize ; writeln(s-au extras bile de culoare :) ;
for i :=1 to n do
begin b :=random(2);
{codificam culorile : alb=0, negru=1}
if b=0 then begin ca :=ca+1 ;write(alba, ) end else begin cn :=cn+1 ;write(neagra, ) end ;
end ;
writeln ; writeln(ca, bile albe ,cn, bile negre) ;
end.
Problema 5
var n1,n2,raspuns,i,j,n : word ;
begin
randomize ; write(cate intrebari ?) ; read(n) ;
for j :=1 to n do begin
n1 :=randomize(11) ;n2 :=randomize(11) ;i :=0 ;
repeat writeln(cat face ,n1,x,n2, ?); readln(raspuns) ; i :=i+1 ;until (raspuns =n1*n2) or i=5 ;
end ;
end.
30
VI.
31
32
3) Se introduc un numr par de numere. S se adune cte dou numere consecutive i s se afieze sumele obinute.
Exemplu: Date de intrare: numar elemente: 6, numere 5 4 3 6 5 5 Date de ieire 9 9 10.
4) Se introduc pe rnd n caractere. S se afieze pe ce poziie apare prima dat caracterul spaiu. Exemplu: Date de
intrare n=10 caractere i n f o c l u b 7 Date de ieire 5.
5) Cpitanul Jack O'Neel se afl pe o nav spaial. Nava are lungimea de n camere i limea de o camer. El se afl n
camera numrul 1. n fiecare camer se afl un dispozitiv de teleportare. Acest dispozitiv te poate teleporta ntr-o alt
camer din cele n. S se spun dac O'Neel poate ajunge n camera h. Date de intrare: Pe prima linie numrul n i
numrul h. Pe a doua linie sunt n numere, fiecare numr indic n ce camer l transmite pe Jack O'Neel teleportorul din
acea camer. Date de ieire: Dac O'Neel poate ajunge n camera h se va printa "DA" i camerele prin care a trecut.
Dac nu poate ajunge n camera h s se printeze "NU". Obs: Dac O'Neel trece de dou ori prin aceeai camer,
acesta nu mai ncearc s ajung n camera h i se va printa "NU". Exemple: Date de intrare: n=5 h=4 teleportari: 2 3 4
1 3 Date de ieire:
DA 1 2 3 4 Date de intrare: n=4 h=4 teleportari:1 2 3 4 date de ieire: NU
Problema 1
var x: array[1..100] of integer; n,i: integer;
begin
write(cate numere? ); read(n);
writeln(introdu numerele ); for i:=1 to n do read(x[i]);
i:=1; while (x[i]<>0) and (i<=n) do begin write(x[i]:7); inc(i); end;
if i>n then write(nici un element nul);
end.
Problema 2
var x: array[1..100] of integer; n,i,k,b,c: integer;
begin
write(n=); read(n); writeln(introdu punctajele); for i:=1 to n do read(x[i]);
write(k=); read(k); write(b=); read(b);
i:=1; c:=0;
repeat
if x[i]>b then begin write(x[i]:7); inc(c) end;
inc(i);
until (c>=k) or (i>n);
if c<k then writeln(Candidati insuficienti);
end.
Problema 3
var x: array[1..100] of integer; n,i,s: integer;
begin
write(introdu un numar par ); read(n);
writeln(introdu numerele ); for i:=1 to n do read(x[i]);
writeln(sumele a cate doua numere consecutive:);
i:=1; repeat s:=x[i]+x[i+1]; write(s, );i:=i+2;until i>n;
end.
Problema 4
var x: array[1..100] of char; n,i: integer;
begin
write(cate caractere?); readln(n); writeln(introdu pe rand caracterele ); for i:=1 to n do readln(x[i]);
i:=1; while (x[i]<> ) and (i<=n) do inc(i);
if i>n then writeln(nu s-a gasit spatiu) else writeln(primul spatiu apare pe pozitia ,i);
end.
33
Problema 5
var t,p: array[1..100] of byte; n,i,h,cam,k: byte; sol:boolean;
begin
write(cate camere?); read(n); write(in ce camera vrea sa ajunga?); read(h);
writeln(introdu teleportarile ); for i:= 1 to n do read(t[i]);
sol:=true; cam:=1; i:=1; p[i]:=cam:
repeat
cam:=t[cam];
for k:=1 to i do if cam=p[k] then sol:=false;
inc(i); p[i]:=cam;
until (not sol) or (h=cam);
if sol then begin write(da ); for k:=1 to i do write(p[k]:3); writeln end
else writeln(nu);
end.
34
13) S se calculeze suma componentelor pozitive, produsul celor negative i numrul componentelor nule ale unui vector cu
n numere reale. Exemplu: Date de intare: n=7 numere 1 0 -4 -3 0 5 -1 Date de ieire: s=6 p=-12 c=2.
14) Un lot de pmnt este mprit n n parcele dreptunghiulare, numerotate de la 1 la n. Se citesc perechile de numere care
reprezint lungimea i limea fiecrei parcele. S se afieze suma ariilor parcelelor i valoarea celei mai mari
suprafee. Exemplu: Date de intrare: n=3, lungime=10 latime=5 lungime=15 latime=10 lungime=12 latime=5 Date de
ieire: suma=260 max=150.
15) S se nlocuiasc fiecare element dintr-un ir numeric cu media aritmetic a celorlalte n-1 elemente ale sale. Exemplu:
Date de intrare: n=3 numere 1 2 3 Date de ieire: 2.5 2 1.5
16) Mo Crciun sosete n mijlocul copiilor oferind fiecrui copil un cadou cu o anumit valoare (numrul copiilor se citete
de la tastatur, precum i valorile cadourilor, n lei). S se spun:
-ct a cheltuit Moul pentru cumprarea cadourilor (n moi, 1 leu=6 moi)
-dac Moul are sau nu un copil preferat, adic dac exist un copil al crui cadou s aib valoarea mai mare dect
suma valorilor cadourilor tuturor celorlali copii. Dac exist, afiai DA, urmat de indicele copilului, n caz contrar afiai
NU. Exemplu: dac n=5 valori cadouri: 10 50 6 5 20, se va afia: Mosul a cheltuit 546 mosi
DA 2
(InfoStar, Aiud 1995 clasa a VI-a)
17) Un pitic vrea s urce o scar care are n trepte de nlimi date, ordonate cresctor. nlimile treptelor sunt n cm i sunt
valori ntregi. Acolo unde diferena ntre dou trepte consecutive este de 1 cm piticul urc fr dificulti, unde diferena
este mai mare dect 1 cm piticul trebuie s ia o pastil care i d putere s sar pe treapta urmtoare. Cunoscnd
nlimile treptelor, prima fiind obligatoriu 0, piticul vrea s afle care este numrul minim de pastile de care are nevoie
pentru a urca scara i de asemenea care este cea mai mare diferen dintre dou trepte consecutive. Exemplu: pentru
n=9 i nlimile treptelor 0 3 4 6 7 10 19 20 21, se va afia: numar minim de pastile =4 diferenta maxima=9
(InfoStar, Aiud 1996 clasa a VI-a)
18) Copiii dintr-o clas merg la cules de portocale. Se citete de la tastatur numrul de copii din clas i cte portocale a
cules fiecare copil. tiind c cel care spune c a cules cele mai multe portocale i cel care spune c a cules cele mai
puine portocale mint, s se spun cte portocale au cules mpreun toi copiii din clas care spun adevrul. Exemplu:
date de intrare : 5 (nr. de copii din clas) 69 25 14 329 54 date de ieire: 148.
VII.
Se citesc de la tastatur n numere naturale. S se spun cte din ele sunt cu 3 cifre.
VIII.
ntr-o clas sunt x copii. Acetia merg ntr-o pia n care sunt n vnztori de mere. Se citete de la
tastatur numrul de mere ale fiecrui vnztor. Copiii vor cumpra mere doar de la vnztorii care au
cel puin 3 mere pentru fiecare copil. Ci vnztori ndeplinesc aceast condiie? Exemplu: Date de
intrare: x=25 (numrul de copii) n=5 (numrul de vnztori) 280 456 78 50 75 Date de ieire: 4
(vnztori) (P.N.C. Bucureti, Cupa Mrior 2005.)
IX.
Se consider n mulimi. Fiecare mulime conine numai numere consecutive. Pentru a da aceste
mulimi este suficient s dm primul i ultimul element. Scriei un program care s determine
elementele interseciei celor n mulimi. Date de intrare: De la tastatur se citete numrul n. Apoi
perechi de numere, cte una pe un rnd, separate prin cte un spaiu, care reprezint cel mai mic,
respectiv cel mai mare element din fiecare mulime. Date de ieire: Pe ecran se va afia pe prima linie
elementele interseciei cu cte un spaiu ntre ele. Restricii i precizri: 0 < n < 31 Elementele
mulimilor sunt numere naturale < 41.
Exemplu: date de intrare: n=3 perechi: 5 10 2 9 4 11 Date de ieire: 5 6 7 8 9.
Problema 1
var x: array[1..100] of integer; n,i,sp,sn: longint;
begin
write(n=); read(n); writeln(introdu numerele); for i:=1 to n do read(x[i]);
sn:=0; sp:=0; for i:=1 to n do if x[i]>0 then sp:=sp+x[i] else sn:=sn+x[i];
writeln(suma numerelor pozitive:,sp); writeln(suma numerelor negative:,sn);
end.
Problema 2
var t: array[1..365] of integer; n,i,sp,sn,cp,cn: integer;
begin
write(n=); read(n); writeln(introdu temperaturile); for i:=1 to n do read(t[i]);
35
36
37
38
end.
Problema 16
var c: array[1..100] of longint; n,i: integer; s: longint; fav: boolean;
begin
write(cati copii?); read(n); writeln(introdu valorile cadourilor); for i:=1 to n do read(c[i]);
s:=0; for i:=1 to n do s:=s+c[i]; writeln(Mosul a cheltuit ,s*6, mosi);
fav:=false; for i:=1 to n do if c[i]>s-c[i] then begin fav:=true; writeln(DA ,i) end;
if not fav then writeln(NU);
end.
Problema 17
var t: array[1..100] of integer; c,dif,max,n,i,: integer;
begin
write(cate trepte?); read(n); writeln(introdu inaltimile treptelor ); for i:=1 to n do read(t[i]);
c:=0; max:=-maxint;
for i:=1 to n-1 do begin
dif:=t[i+1]-t[i];
if dif>1 then inc(c); if max<dif then max:=dif; end;
writeln(piticul are nevoie de ,c, pastile); writeln(diferenta maxima=,max);
end.
Ordonarea elementelor unui vector
1) Se dau n numere reale. S se afieze n ordine cresctoare. Exemplu:Date de intrare: n=4 numere:7 -3 9.8 0 Date de
ieire 3 0 7 9.8
2) Se d un vector cu n componente ntregi. Se cere s se afieze primele k componente n ordine cresctoare iar celelalte
n ordine descresctoare. Exemplu: n=7 k=3 irul 23 12 18 4 0 23 5 se va afia 12 18 23 23 5 4 0
3) N numere naturale introduse de la tastatur s se afieze astfel: numerele pare n ordine cresctoare i cele impare n
ordine descresctoare. Exemplu: pentru n=7 i irul 2 5 3 1 8 5 4 se va afia 2 1 3 5 4 5 8.
4) Prin ordonarea elementelor unui vector format din n caractere, s se afieze de cte ori apare fiecare caracter.
Exemplu: Date de intrare: n=4 elemente: a 4 g a Date de ieire: a apare de 2 ori g apare de 1 ori 4 apare de 1 ori.
5) Cunoscnd numele i nlimea a n elevi, n<=100, s se afieze numele acestora n ordinea descresctoare a nlimii.
Exemplu: Date de intrare: n=3 nume: Ion inaltime: 120 nume:Ana inaltime:114 nume: Dan inaltime 130 Date de ieire:
Dan Ion Ana
6) La un concurs particip n sportivi. Se cunosc rezultatele fiecrui sportiv. S se afieze cele mai bune trei rezultate, n
ordine descresctoare a performanei. Exemplu: pentru n=5 i rezultatele 156 187 23 97 86 se va afia 187 156
97.
7) Se cunosc punctajele obinute de cei n elevi participani la un concurs de informatic. tiind c doi elevi primesc acelai
premiu numai dac au punctaje egale, s se determine ci elevi primesc Premiul I, ci Premiul II i ci Premiul III.
Cerin: Scriei un program care citete de la tastatur numrul concurenilor precum i punctajele acestora, luate din
borderoul de corectare, i determin i afieaz pe ecran pe cte o linie numrul de elevi pentru fiecare din cele trei
premii. Restricii: numrul n al elevilor nu depete 300 iar punctajul fiecruia este un numr natural cel mult egal cu
100. Exemplu: Pentru n=10 si punctajele: 58 79 34 12 58 40 79 58 30 58 se vor afia numerele: 2 4 1 ceea ce
nseamn c 2 elevi primesc Premiul I (cei care au obinut 79 puncte), 4 elevi obin Premiul II (cei cu 58 puncte) i un
elev (cel cu 40 puncte) primete Premiul III.
8) Se introduc n numere de cte una sau dou cifre. S se afieze aceste numere n ordinea cresctoare a primei lor cifre.
Exemplu: pentru n=5 i numerele 34 2 5 62 25 se va afia 2 25 34 5 62 sau 25 2 34 5 62.
Problema 1
Ordonarea prin inversiuni
var a: array[1..100] of integer;
i,x,n: integer; sortat: boolean;
begin
write(n=); read(n); writeln(introdu numerele);for i:=1 to n do read(a[i]);
repeat
39
sortat:=true;
for i:=1 to n-1 do if a[i]>a[i+1] then begin x:=a[i]; a[i]:=a[i+1]; a[i+1]:=x; sortat:=false end;
until sortat;
writeln(sirul ordonat crescator:); for i:=1 to n do write(a[i]:7);
end.
Ordonarea prin selecie (determinarea min)
var a: array[1..100] of integer;
i,j,n,min,x,pmin: integer;
begin
write(n=); read(n); writeln(introdu numerele);for i:=1 to n do read(a[i]);
for i:=1 to n-1 do begin
min:=a[i]; pmin:=i;
for j:=i+1 to n do if min>a[j] then begin min:=a[j]; pmin:=j end;
x:=a[pmin]; a[pmin]:=a[i]; a[i]:=x;
end;
writeln(sirul ordonat crescator:); for i:=1 to n do write(a[i]:7);
end.
Problema 2
var a: array[1..100] of integer; n,i,k,z: integer; s: boolean;
begin
write(n=); read(n); writeln(introdu numerele ); for i:=1 to n do read(a[i]); write(k=); read(k);
repeat
s:=true;
for i:=1 to k-1 do if a[i]>a[i+1] then begin z:=a[i];a[i]:=a[i+1];a[i+1]:=z;s:=false end;
until s;
repeat
s:=true;
for i:=k+1 to n-1 do if a[i]<a[i+1] then begin z:=a[i];a[i]:=a[i+1];a[i+1]:=z;s:=false end;
until s;
writeln(sirul in noua ordine); for i:=1 to n do write(a[i]:6);
end.
Problema 3
var a: array[1..100] of integer; n,i,j,min,z,max,pmin,pmax: integer;
begin
write(n=); read(n); writeln(introdu numerele ); for i:=1 to n do read(a[i]);
for i:=1 to n-1 do begin
{ordonare cu metoda determinarii min (max)}
if a[i] mod 2=0 then begin
min:=a[i]; pmin:=i;
for j:=i+1 to n do if (min>a[j]) and (a[j] mod 2=0) then
begin
min:=a[j];
pmin:=j
end;
z:=a[i]; a[i]:=a[pmin]; a[pmin]:=z;
end
else begin
max:=a[i]; pmax:=i;
for j:=i+1 to n do if (max<a[j]) and odd(a[j]) then
begin
max:=a[j];
40
pmax:=j
end;
z:=a[i]; a[i]:=a[pmax]; a[pmax]:=z;
end;
end;
writeln(sirul in noua aranjare ); for i:=1 to n do write(a[i]:6);
end.
Problema 4
var a: array[1..100] of char; n,I,c,j: integer; s: boolean; x: char;
begin
write(n=); readln(n); writeln(introdu caracterele ); for i:=1 to n do readln(a[i]);
repeat
{ordonez crescator sirul de caractere}
s:=true;
for i:=1 to n-1 do if a[i]>a[i+1] then begin x:=a[i]; a[i]:=a[i+1]; a[i+1]:=x; s:=false end;
until s;
i:=1;
repeat
{parcurg sirul prin doua cicluri}
c:=1;
j:=i+1;
while (a[j]=a[i]) and (j<=n) do begin inc(j); inc(c) end;
writeln(caracterul ,a[i], apare de ,c, ori);
i:=j;
until i>n;
end.
Problema 5
var h: array[1..100] of integer; e: array[1..100] of string;
z,n,i: integer; s: boolean;x: string;
begin
write(n= ); read(n); writeln(nume elev, inaltime:); for i:=1 to n do begin readln(e[i]); readln(h[i]); end;
repeat
s:=true;
for i:=1 to n-1 do if h[i]<h[i+1] then begin z:=h[i]; h[i]:=h[i+1]; h[i+1]:=z; s:=false
x:=e[i]; e[i]:=e[i+1]; e[i+1]:=x
end;
until s;
writeln(Nume elev:20, Inaltime:4); for i:=1 to n do writeln(e[i]:20, h[i]:4);
end.
Deplasarea elementelor unui vector
1) S se insereze cifra 0 pe prima poziie a unui vector dat, fr a utiliza un alt vector. Exemplu: Date de intrare: n=4
numere: 5 3 7 8 Date de ieire: 0 5 3 7 8.
2) Se introduc n numere n calculator. S se rearanjeze elementele din ir astfel nct primul element al irului dat s apar
pe ultima poziie. Exemplu: Date de intrare: n=3 numere: 1 2 3 Date de ieire: 2 3 1.
3) Se introduc n numere n ordine cresctoare i un numr k. S se insereze acest numr n irul dat astfel nct s
rmn sortat cresctor. Exemplu: Date de intrare: n=4 k=100 numere: 90 95 110 120 Date de ieire: 90 95 100 110
120.
4) Definim operaia de compactare a unui tablou ca fiind eliminarea zerourilor. Dac ntlnim un element nul toate
elementele situate la dreapta sa vor veni cu o poziie mai in fa, n locul su. Se d un tablou cu n elemente intregi.
Compactai-l. Exemplu: Date de intrare: n=4 numere: 9 0 0 5 Date de ieire: 9 5.
41
5) S se aeze toate elementele egale cu o valoare v dintr-un ir de n numere date, la sfritul irului. Exemplu: Date de
intrare: n=4 v=5 numere: 5 6 5 3 Date de ieire: 6 3 5 5.
6) Se introduc n calculator dou tablouri de dimensiunem, respectiv n, i un numr k, k<=m. S se intercaleze n primul
tablou, dup poziia k, tabloul al doilea.
Problema 1
var v: array[1..100] of integer; n,i: integer;
begin
write(numar elemente= ); read(n); writeln(introdu elementele ); for i:=1 to n do read(v[i]);
{se face o deplasare a tuturor elementelor spre dreapta cu o pozitie}
for i:=n downto 1 do v[i+1]:=v[i];
{i=pozitia care se deplaseaza}
v[1]:=0; writeln(noul sir:); for i:=1 to n+1 do write(v[i]:6)
end.
Problema 2
var v: array[1..100] of integer; x,n,i: integer;
begin
write(numar elemente= ); read(n); writeln(introdu elementele ); for i:=1 to n do read(v[i]);
x:=v[1];
{se face o deplasare spre stanga a elementelor, fara primul}
for i:=2 to n do v[i-1]:=v[i]; {i=pozitia care deplaseaza}
v[n]:=x;
{se aseaza primul element la sfarsit}
writeln(noul sir:); for i:=1 to n do write(v[i]:6);
end.
Problema 3
var v: array[1..100] of integer; k,n,i: integer;
begin
write(numar elemente= ); read(n); writeln(introdu elementele, in ordine crescatoare); for i:=1 to n do read(v[i]);
write(k=); read(k);
{se cauta primul element mai mare decat k, pe pozitia lui se va aseza k}
i:=1; while (v[i]<k) and (i<=n) do inc(i);
if i>n then v[n+1]:=k
{k este mai mare decat toate numerele, se aseaza la sfarsit}
else begin for j:=n downto i do v[j+1]:=v[j]; {deplasare spre dreapta } v[i]:=k; end;
writeln(noul sir:); for i:=1 to n+1 do write(v[i]:7);
end.
Problema 4
var v: array[1..100] of integer; c,n,i,j: integer;
begin
write(numar elemente ); read(n); writeln(introdu elementele ); for i:=1 to n do read(v[i]);
i:=1; c:=0;
{c=numarul elementelor nule}
repeat
if v[i]=0 then begin
{deplasare spre stanga a elementelor de dupa zero}
for j:=i+1 to n-c do v[j-1]:=v[j];
inc(c);
end;
if v[i]<>0 then inc(i); {se poate intampla sa avem mai multe 0 consecutive, se
until i>n-c;
mareste i numai daca pe pozitia respectiva este un element nenul}
writeln(elementele nenule:); for i:=1 to n-c do write(v[i]:7);
end.
Problema 5
var a: array[1..100] of integer; v,n,i,j: integer;
begin
write(numar elemente ); read(n); writeln(introdu elementele ); for i:=1 to n do read(a[i]);
write(v=); read(v);
for i:=1 to n do if a[i]=v then begin
{deplasare spre stanga}
for j:=i+1 to n do a[j-1]:=a[j];
42
a[n]:=v;
end;
write(noul sir:); for i:=1 to n do write(a[i]:7);
end.
Verificarea unor proprieti
1) Se introduc dou iruri de numere cu acelai numr de elemente. S se verifice dac valorile lor, n ordinea dat, sunt
proporionale. Exemplu: Date de intrare: n=3 sir1: 1 2 3 sir2: 3 6 9 Date de ieire: Da.
2) S se verifice dac un vector dat este monoton cresctor.
3) S se caute un numr x printre n numere ntregi generate de calculator avnd valori ntre 0 i 100. Dac se gsete
valoarea respectiv s se afieze ultima poziie n care apare, dac nu se gsete, s se afieze mesajul numar
inexistent
4) Un tren este format din n vagoane de clasa I-a i a II-a. eful de tren nu vrea s fie mai mult de k vagoane de aceeai
clas unul dup altul. Introducndu-se o aranjare a vagoanelor, s se testeze dac exist mai mult de k vagoane de
acelai fel consecutive. Se va afia un mesaj corespunztor. n caz afirmativ, s se afieze i poziia de nceput a
subirurilor cu mai mult de k elemente de acelai fel. Exemplu: Date de intrare: n=6 k=3 tip vagoane: 1 1 2 2 2 2 Date de
ieire: Da, pozitia de inceput 3.
5) Date dou iruri de numere, a cu n elemente i b cu m elemente, m< n, s se verifice dac b este subir al lui a.
Exemplu: Date de intrare: n=4 elemente a: 1 2 3 4 m=2 elemente b: 2 4 date de ieire: da.
6) Se d un ir de numere reale. S se verifice dac irul este o progresie aritmetic (diferena dintre oricare dou numere
alturate este aceeai, de exemplu: 1,4,7,10,13)
7) S se verifice dac n numere date formeaz o mulime (elementele sunt distincte), ordonnd elementele. Exemple: Date
de intrare: n=4 numere: 4 6 2 6 Date de ieire: Nu ; Date de intrare: n=3 numere: 3 5 2 Date de ieire: Da.
8) S se verifice dac doi vectori cu aceeai lungime au aceleai elemente, ordonnd ambii vectori n prealabil. Exemple:
Date de intrare: n=3 primul vector: 4 2 6 al doilea vector: 6 2 4 Date de ieire: Da; Date de intrare: n=2 primul vector: 4 2
al doilea vector: 3 4 Date de ieire: Nu.
Problema 1
var a,b: array[1..100] of integer; n,i: integer; v: real; prop: boolean;
begin
prop:=true;
write(numar elemente= ); read(n); writeln(introdu elementele primului sir );
for i:=1 to n do begin read(a[i]); if a[i]=0 then prop:=false; end;
writeln(introdu elementele celui de al doilea sir );
for i:=1 to n do begin read(b[i]); if b[i]=0 then prop:=false; end;
if not prop then begin writeln(nu sunt proportionale); halt end;
v:=a[1]/b[1];
for i:=2 to n do if a[i]/b[i]<>v then prop:=false;
if prop then writeln(Sunt proportionale) else writeln(Nu sunt proportionale);
end.
Problema 2
var a: array[1..100] of integer; n,i: integer; cresc: boolean;
begin
cresc:=true;
write(numar elemente= ); read(n); writeln (introdu elementele sirului); for i:=1 to n do read(a[i]);
for i:=1 to n-1 do if a[i]>a[i+1] then cresc:=false;
if cresc then writeln(sir crescator) else writeln(sirul nu e crescator);
end.
Problema 3
var a: array[1..100] of integer; n,i,x: integer; gasit: boolean;
begin
write(numar elemente= ); read(n);
43
44
for i:=1 to n-1 do if a[i]>a[i+1] then begin x:=a[i]; a[i]:=a[i+1]; a[i+1]:=x; s:=false end;
until s;
s:=true;
for i:=1 to n-1 do if a[i]=a[i+1] then s:=false;
if s then writeln(multime) else writeln(nu este multime);
end.
Problema 8
var a,b: array[1..100] of integer; n,i: integer; e: boolean;
begin
write(numar elemente ); read(n);
writeln(introdu elementele primului sir); for i:=1 to n do read(a[i]);
writeln(introdu elementele celui de al doilea sir); for i:=1 to n do read(b[i]);
repeat
{ordonez crescator primul sir}
s:=true;
for i:=1 to n-1 do if a[i]>a[i+1] then begin x:=a[i]; a[i]:=a[i+1]; a[i+1]:=x; s:=false end;
until s;
repeat
{ordonez crescator al doilea sir}
s:=true;
for i:=1 to n-1 do if a[i]>a[i+1] then begin x:=b[i]; a[i]:=b[i+1]; b[i+1]:=x; s:=false end;
until s;
e:=true;
for i:=1 to n do
{compar element cu element cele doua siruri}
if a[i]<>b[i] then e:=false;
if e then writeln(siruri egale) else writeln(siruri diferite);
end.
Construirea unor vectori
1) Ciurul lui Eratostene: S se formeze un vector care s conin elementele prime mai mici dect un numr dat n, n<1000,
utiliznd procedeul de excludere prezentat n manualul de matematic (excluderea se va face prin inlocuirea
elementului cu 0 i nu se vor afia elementele nule).
2) ntr-o nchisoare cu n celule se afl, la un moment dat, n deinui. Se ia hotrrea s fie eliberai anumii deinui,
alegerea lor fcndu-se ntr-un mod special. n nchisoarea aceea erau tot n gardieni. Procedeul de determinare a
deinuilor ce vor fi eliberai este urmtorul: gardianul k pleac de la celula k i mergnd din k n k celule, schimb starea
uilor pe la care trece,1<=k<=n. n final anumite celule vor rmne deschise, deinuii respectivi fiind eliberai. Putei afla
care? Iniial toate uile sunt nchise. Exemplu: n=50 vor fi eliberati cei din celulele 1 4 9 16 25 36 49.
3) S se formeze vectorul primelor n elemente ale irului lui Fibonacci: 0, 1, 1, 2, 3, 5, 8, 13,21,.... (f[1]=0, f[2]=1, f[i]=f[i1]+f[i-2]).
4) Se introduc n numere ntregi. Elementele diferite s se memoreze ntr-un alt vector. S se afieze acest nou vector.
Exemplu: Date de intrare: n=4 numere: 1 2 2 1 Date de ieire: 1 2.
5) S se formeze i s se afieze vectorul care s conin elementele nenule dintr-un vector dat.
6) S se extrag dintr-un vector elementele care au ultima cifr egal cu k i s se formeze cu ele un alt vector. S se
afieze cei doi vectori. Exemplu: Date de intrare: n=3 k=7 numere: 17 23 47 Date de ieire: 17 47.
7) Se dau n numere ntregi. Folosind un alt vector, s se aeze numerele pare la nceput. Exemplu: Date de intrare: n=4
numere: 3 4 6 5 Date de ieire: 4 6 3 5.
8) Prin contorizare i utilizarea unui vector ajuttor, ntr-un ir de numere date s se grupeze la nceput numerele
deficiente, apoi cele perfecte i la sfrit cele abundente. (Numim numr deficient cel care este mai mare dect suma
divizorilor mai mici ca el, numr perfect cel care este egal cu acest sum i abundent numrul mai mic dect aceast
sum). Exemplu: Date de intrare: n=5 numere: 6 12 3 4 10 Date de ieire: 3 4 10 6 12.
9) Dat un numr n, s se memoreze ntr-un vector toate numerele mai mici ca n prime cu n. S se afieze n ordine
descresctoare. Exemplu: Date de intrare: n=10 Date de ieire: 9 7 3.
45
10) Se citete un numr natural cu cifre nenule. S se determine cel mai mic i cel mai mare numr format din cifrele
acestui numr. Exemplu: Date de intrare: n=26341 Date de ieire: min=12346 max=64321.
11) S se insereze ntre oricare dou elemente alturate ale unui ir numeric dat media lor aritmetic. Exemplu: date de
intrare: n=3 numere: 2 4 5 Date de ieire: 2 3 4 4.5 5.
12) Se d irul 1,2,2,3,3,3,4,4,4,4,5,... . Dat un numr k, s se afieze elementul de pe poziia k.
Problema 1
var c:array[2..1000] of byte; n,i,j: byte;
begin
write(n=); read(n); for i:=2 to n do c[i]:=i;
{c contine toate numerele de la 2 la n}
i:=2;
{i=pasul cu care se parcurge sirul pentru eliminare}
repeat
if c[i]<>0 then begin
j:=i;
{j=pozitia de plecare }
repeat j:=j+i; c[j]:=0 until j>=n;
end;
inc(i);
until i> n div 2;
writeln(numerele prime pana la ,n); for i:=2 to n do if c[i]<>0 then write(c[i], );
end.
Problema 2
var u:= array[1..100] of byte; n,k,pas,i: integer;
begin
write(n=); read(n);for i:=1 to n do u[i]:=1; {u memoreaza starea usii: 0=deschisa, 1=inchisa}
for k:=1 to n do begin
pas:=k;
repeat
case u[pas] of
0: u[pas]:=1;
1: u[pas]:=0;
end;
pas:=pas+k;
until pas>n;
end;
writeln(vor iesi detinutii de la celulele cu numarul:); for i:=1 to n do if u[i]=0 then write(i:3);
end.
Problema 3
var f: array[1..100] of integer; n,i: integer;
begin
write(numar termeni=); read(n);
f[1]:=0; f[2]:=1; for i:=3 to n do f[i]:=f[i-1]+f[i-2];
for i:=1 to n do write(f[i]:4);
end.
Problema 4
var v,d: array[1..100] of integer; n,j,k,i: integer; apare: boolean;
begin
write(numar termeni=); read(n);write(elementele sirului:); for i:=1 to n do read(v[i]);
k:=1;
{k=indicele in vectorul nou, d}
for i:=1 to n-1 do
begin
{testez daca valoarea v[i] mai apare spre dreapta in v}
apare:=false;
for j:=i+1 to n do if v[i]=v[j] then apare:=true;
46
if not apare then begin d[k]:=v[i]; inc(k) end; {trec in d valorile care nu vor mai apare}
end;
d[k]:=v[n];
writeln(elementele diferite: ); for i:=1 to k do write(d[i]:4);
end.
Problema 5
var v,w: array[1..100] of integer; n,k,i: integer;
begin
write(numar termeni=); read(n);
write(elementele sirului:); for i:=1 to n do read(v[i]);
k:=1;
{k=indicele in vectorul format}
for i:=1 to n do if v[i]<>0 then begin w[k]:=v[i]; inc(k) end;
writeln(elementele nenule: ); for i:=1 to k-1 do write(w[i]:4);
end.
Problema 6
Ca la Problema 5, se testeaza daca v[i] mod 10=k.
Problema 7
var v,w: array[1..100] of integer; n,ni,k,i: integer;
begin
write(numar termeni=); read(n); write(elementele sirului:); for i:=1 to n do read(v[i]);
k:=1;ni:=0;
{k=indicele in noul vector, ni=cate numere impare sunt in v}
for i:=1 to n do if v[i] mod 2=0 then begin w[k]:=v[i]; inc(k) end
else begin inc(ni);w[n+1-ni]:=v[i] end;
writeln(elemente pare urmate de elemente impare: ); for i:=1 to n do write(w[i]:5);
end.
Problema 8
var v,w: array[1..100] of integer; n,na,nd,np,d,s,k,i: integer;
begin
write(numar termeni=); read(n); write(elementele sirului:); for i:=1 to n do read(v[i]);
nd:=0;
{aflu cate numere deficiente sunt}
for i:=1 to n do begin
s:=0; for d:=1 to v[i]-1 do if v[i] mod d=0 then s:=s+d;
if v[i]>s then inc(nd);
end;
k:=nd;
{numerele perfecte se pun incepand cu pozitia k+1}
nd:=0; na:=0; np:=0;
{contorii pentru numere deficiente, abundente, perfecte}
for i:=1 to n do begin
s:=0; for d:=1 to v[i]-1 do if v[i] mod d=0 then s:=s+d;
if v[i]>s then begin inc(nd); w[nd]:=v[i]; end;
if v[i]=s then begin inc(np); w[k+np]:=v[i]; end;
if v[i]<s then begin inc(na); w[n+1-na]:=v[i]; end;
end;
writeln(numere deficiente, perfecte, abundente: ); for i:=1 to n do write(w[i]:4);
end.
Problema 9
var p: array [1..100] of integer; a,b,r,i,n,j: integer;
begin
write(n=); read(n);
j:=1;
{indicele in noul sir}
for i:=2 to n-1 do
begin
a:=n; b:=i;
{calculez cmmdc dintre n si i}
repeat r:=a mod b; a:=b; b:=r until r=0;
if a=1 then begin p[j]:=i; inc(j) end;
47
end;
writeln(numere prime cu ,n, mai mici ca el); for i:=j-1 downto 1 do write(v[i]:5);
end.
Problema 10
var c: array [1..100] of byte; i,j,x: integer; n: longint; sortat:boolean;
begin
write(numar=); read(n);
j:=1;
{indicele in vectorul avand ca elemente cifrele numarului dat}
repeat
c[j]:=n mod 10;
n:=n div 10;
inc(j)
until n=0;
repeat
{sortez crescator vectorul cifrelor, cu j-1 elemente }
sortat:=true;
for i:=1 to j-2 do if c[i]>c[i+1] then begin sortat:=false; x:=c[i];c[i]:=c[i+1];c[i+1]:=x end;
until sortat;
writeln(cel mai mic numar: ); for i:=1 to j-1 do write(c[i]);
writeln(cel mai mare numar: ); for i:=j-1 downto 1 do write(c[i]);
end.
Problema 11
var v,w: array[1..100] of real; i,j,n: integer;
begin
write(cate numere?); read(n); writeln(introdu numerele); for i:=1 to n do read(v[i]);
j:=1;
{indicele in noul sir}
for i:=1 to n-1 do begin w[j]:=v[i]; w[j+1]:=(v[i]+v[i+1])/2; j:=j+2 end;
w[j]:=v[n];
writeln(sirul nou: ); for i:=1 to j do write(w[i]:5);
end.
Problema 12
var x: array [1..200] of byte; j,k,p,t: integer;
begin
write(k=); read(k);
p:=1; t:=1;
{p=pozitia in sir, t=valoare termen}
while p<k do begin
j:=1;
repeat
x[p]:=t;
{se atribuie valoarea t de t ori incepand cu pozitia p}
inc(p); inc(j)
until (p>k) or (j>t);
inc(t);
end;
writeln(pe pozitia ,k, se afla numarul ,x[k]);
end.
VII.
48
1) Se d un tablou bidimensional cu m linii i n coloane, 1m,n50, cu componente ntregi i un numr ntreg k. Se cere
s se afieze tabloul cu componentele mrite cu k.
Exemplu: Date de intrare: m=2 n=3 k= 5 elemente:
1 2 3 Date de ieire: 6 7 8
4 5 6
9 10 11
2) Se introduc dou matrici cu m linii i n coloane. S se afieze matricea sum a celor dou matrici date.
3) Se introduce o matrice cu m linii i n coloane. S se afieze elementele astfel nct liniile s devin coloane. Exemplu:
m=2, n=3 matricea 1 2 3
se va afia
1 4
4 5 6
2 5
3 6
4) S se afieze suma i produsul tuturor elementelor unei matrici cu m linii i n coloane cu componente reale. Cte
elemente sunt ntregi?
Exemplu: Date de intrare: m=2 n=2 matrice: 4 5 3
Date de ieire: s=15 p=120 6 numere intregi
112
5) Dat un tablou bidimensional cu n linii i n coloane, afiai cea mai mare component i poziiile pe care le ocup.
Exemplu: Date de intrare: n=2 matrice: 4 7
Date de ieire: max=7 pozitii 1 2 2 2.
57
6) Se consider un tablou care imagineaz tabla de ah. Se citesc un numr de linie i un numr de coloan care vor
reprezenta poziia unui cal pe tabl. S se afieze coordonatele elementelor tablei pe care poate sri calul. Exemplu:
Date de intrare: 2 2 Date de ieire: 1 4 4 1 4 3 3 4.
Problema 1
var a: array[1..50,1..50] of integer; i,j,n,m: byte; k: integer;
begin
write(m,n=); read(m,n); writeln(introdu numerele );
for i:=1 to m do for j:=1 to n do read(a[i,j]);
write(k=); read(k);
for i:=1 to m do
begin
for j:=1 to n do write(a[i,j]+k:5)
writeln;
end;
end.
Problema 2
var a,b: array[1..50,1..50] of integer; i,j,n,m: byte;
begin
write(m,n=); read(m,n); writeln(introdu numerele din prima matrice);
for i:=1 to m do
for j:=1 to n do read(a[i,j]);
writeln(introdu numerele din a doua matrice);
for i:=1 to m do
for j:=1 to n do read(b[i,j]);
for i:=1 to m do
begin
for j:=1 to n do write(a[i,j]+b[i,j]:5);
writeln;
end;
end.
Problema 3
var a: array[1..50,1..50] of integer; i,j,n,m: byte;
begin
write(m,n=); read(m,n); writeln(introdu numerele ); for i:=1 to m do for j:=1 to n do read(a[i,j]);
for j:=1 to n do begin for i:=1 to m do write(a[i,j]:5); writeln; end;
end.
49
Problema 4
var a: array[1..50,1..50] of real; i,j,n,m,c: byte; s,p: real;
begin
write(m,n=); read(m,n); writeln(introdu numerele ); for i:=1 to m do for j:=1 to n do read(a[i,j]);
s:=0; p:=1; c:=0;
for i:=1 to m do
for j:=1 to n do begin s:=s+a[i,j]; p:=p*a[i,j]; if a[i,j]=int(a[i,j]) then inc(c); end;
writeln(suma=,s:10:3); writeln(produs=,p:10:3); writeln(c, numere intregi);
end.
Problema 5
var a: array[1..50,1..50] of integer; i,j,n: byte; max: integer;
begin
write(n=); read(n); writeln(introdu numerele );for i:=1 to n do for j:=1 to n do read(a[i,j]);
max:=-maxint;
for i:=1 to n do for j:=1 to n do if max<a[i,j] then max:=a[i,j];
writeln(cea mai mare componenta are valoarea ,max, si se afla pe pozitiile );
for i:=1 to n do for j:=1 to n do if max=a[i,j] then write( [,i,,,j,] );
end.
Parcurgere parial a unui tablou bidimensional
1) S se afieze suma elementelor de pe coloana k a unei matrici cu m linii i n coloane, kn. Exemplu: Date de intrare:
m=2 n=4 k=1 matrice
4 3 6 8 Date de ieire:
s=11.
7490
2) Se introduc punctajele realizate de m concureni la n probe sub forma unei matrici cu m linii i n coloane. Afiai
punctajul total realizat de fiecare concurent. Exemplu: Date de intrare: m=3 n=2 punctaj concurent 1: 7 9 punctaj
concurent 2: 10 8 punctaj concurent 3: 9 9 Date de intrare: concurent1 16 concurent2 18 concurent3 18.
3) Se d o matrice ptratic cu dimensiunea n,n. Afiai suma elementelor de pe diagonala principal i de pe diagonala
secundar.
4) Ducnd cele dou diagonale ntr-o matrice ptratic, se obin patru zone triunghiulare. Afiai suma componentelor din
interiorul fiecrei zone.
5) Se d un tablou cu m linii i n coloane. Se cere s se afieze suma componentelor de pe marginea tabloului. Exemplu:
Date de intrare: m=3 n=4 matrice 6 4 1 0 Date de ieire : s=32.
1533
0827
6) Se d o matrice cu n linii i n coloane. S se afieze suma componentelor ce se afl pe ptrate concentrice ale matricii
date. Ex: pentru n=4 i tabloul 1 1 1 1 se va afia
suma patrat 1=30
2222
suma patrat 2=10
3333
4444
7) Afiai valoarea maxim de pe fiecare coloan a unei matrici cu m linii i n coloane.
8) Se d un tablou cu m linii i n coloane avnd componente cifre zecimale. Fiecare linie a tabloului reprezint cifrele a m
numere naturale. Se cere s se afieze pe acelai rnd cifrele sumei celor m numere date.
Exemplu: pentru
numerele 914, 9211, 3547, 23 se introduce matricea cu m=4, n=4 0 9 1 4
9211
3547
0023
i se va afia suma 1 3 6 9 5.
9) O persoan are de cumprat p produse din m magazine. S se fac un program care s indice, pentru fiecare produs,
magazinul n care acesta are preul minim. Cunoscnd cantitile ce trebuie cumprate pentru fiecare produs, s se
determine suma ce urmeaz a fi cheltuit. Exemplu: p=2 m=3 i preurile aezate ntr-o matrice cu p linii i m coloane:
50000 48000 49500
50
51
produs 2 pret
begin
write(n=); read(n); writeln(elementele matricii:); for i:=1 to n do for j:=1 to n do read(a[i,j]);
for i:=1 to n div 2 do begin
s:=0;
for j:=i to n-i do s:=s+a[i,j];{se aduna elementele de pe linia i, fara primele i-1 si ultimele i}
for j:=i to n-i do s:=s+a[j,n+1-i];{se aduna elementele de pe colona a i-a de la dreapta, fara
primele i-1 si ultimele i}
for j:=n+1-i downto i+1 do s:=s+a[n+1-i,j];{se aduna elementele de pe linia a i-a de jos in sus,
fara primele i si ultimele i-1}
for j:=n+1-i downto i+1 do s:=s+a[j,i];{se aduna elementele de pe coloana i, fara primele i si
ultimele i-1}
writeln(suma patrat ,i,=,s);
end;
if n mod 2=1 then
writeln(suma patrat ,i+1,=,a[i+1,i+1]);{daca n este impar, ultimul patrat}
end.
{se reduce la un singur element}
Problema 7
var a: array[1..50,1..50] of integer; i,j,n,m: byte; max: integer;
begin
write(m,n=); read(m,n); writeln(introdu numerele ); for i:=1 to m do for j:=1 to n do read(a[i,j]);
for j:=1 to n do
begin
max:=-maxint;
for i:=1 to m do if max<a[i,j] then max:=a[i,j];
writeln(coloana ,j, max=,max);
end;
end.
Problema 8
var a: array[1..50,1..50] of byte; s: array[1..50] of byte; i,j,n,m,c: byte;
begin
write(m,n=); read(m,n);
for i:=1 to m do begin
writeln(introdu cifrele numarului ,i, (n cifre):); for j:=1 to n do read(a[i,j]);
end;
c:=0;
{c=cifra zecilor la suma pe o coloana}
for j:=n downto 1 do
begin
s[j]:=c; for i:=1 to m do s[j]:=s[j]+a[i,j];
if s[j]>9 then begin c:=s[j] div 10; s[j]:=s[j] mod 10; end else c:=0;
end;
if c<>0 then write(c:2); for j:=1 to n do write(s[j]:2);
end.
Problema 9
var a: array[1..50,1..50] of longint; c: array[1..50] of integer;
i,j,m,p,mag: byte; min,s: longint;
begin
write(p,m=); read(p,m); writeln(introdu preturile din fiecare magazin);
for i:=1 to p do begin write(produs ,i,: );for j:=1 to m do read(a[i,j]); end;
writeln(introdu cantitatile pentru fiecare produs );
for i:=1 to p do begin write(produs ,i,: ); read(c[i]); end;
s:=0;
{s=suma necesara}
for i:=1 to p do
begin
min:=maxlongint;
{calculez minimul pe fiecare linie}
52
53
54
55
VIII.
56
115242526. A ctigat Petric. Realizai programul Pascal ce stimuleaz jocul celor doi prieteni.
(CJI, Petroani, 2005)
Problema 1
var text: string; i: byte;
begin
write(text:); readln(text);
for i:= 1 to length(text) do write( upcase(text[i]));
end.
Problema 2
var text: string; c,i: byte;
begin
write(text:); readln(text);
c:=0; for i:= 1 to length(text) do if (text[i]=a) or (text[i]=e) or (text[i]=i) or (text[i]=o) or (text[i]=u) then inc(c);
writeln(textul contine ,c, vocale);
end.
Problema 3
var cuv: string; i: byte;
begin
write(cuvant:); readln(cuv);
for i:= 1 to length(cuv) do writeln(copy(cuv,1,i));
end.
Problema 4
La fel ca la Problema 3, se schimba doar parametrul pozitie din functia copy: avem writeln(copy(cuv, length(cuv)+1-i ,i));
Problema 5
var cuv: string; lc,i: byte; pal: boolean;
begin
write(cuvant:); readln(cuv);
lc:=length(cuv); pal:=true;
for i:= 1 to (lc div 2) do if cuv[i]<> cuv[lc+1-i] then pal:=false;
if pal then writeln(palindrom) else writeln(nu este palindrom);
end.
Problema 6
var text: string; i,c: byte; l: char;
begin
write(text:); readln(text);
for l:=a to z do begin
{se numara aparitiile fiecarei litere}
c:=0; for i:=1 to length(text) do if text[i]=l then inc(c);
if c<>0 then writeln(litera ,l, apare de ,c, ori);
end;
end.
Problema 7
var text,cuv: string; c,l,i: byte;
begin
writeln(text:); readln(text); writeln(grup de litere:); readln(cuv);
l:=length(cuv); c:=0;
for i:=1 to length(text)-l do if copy(text,i,l)=cuv then inc(c);
writeln(secventa ,cuv, apare de ,c, ori);
end.
Problema 8
var text: string; i: byte;
begin
writeln(text:); readln(text);
57
58
5) Se d un text cu cel mult 255 caractere, litere mici i mari ale alfabetului englez i spaii. Se cere s se afieze cuvintele
din text de lungime maxim. Exemplu: Ionica vrea sa mearga cu Mircea al mare, se va afia: Ionica mearga Mircea.
6) Se introduc de la tastatur dou texte prin dou variabile de tip string. Se cere s se afieze cuvintele comune celor
dou texte, tiind c dou cuvinte pot fi separate prin unul sau mai multe spaii. Exemplu: pentru textele: Ion merge la
peste i Dan merge la Ion, se va afia : Ion merge la.
7) Se d un text t format din mai multe cuvinte (maxim 100 de cuvinte sau 1000 de caractere) separate prin spaiu citit de
la tastatur. S se introduc ntr-un dicionar toate cuvintele distincte din acel text. Acest dictionar va fi ordonat alfabetic
n sens cresctor de la A la Z. Exemplu: "acesta este un text de proba cu doi de este", afiare: acesta cu
de doi
este proba text un. Observaii: textul se introduce de la tastatur fr ghilimele i se d Enter pentru a termina
introducerea lui in memorie; nu se introduc caractere speciale, sau chiar daca textul are semne de punctuaie, se va
considera ca separator intre cuvinte spaiul;
cuvintele n dicionar vor fi scrise cu liter mic
Problema 1
var t: string; i,c,k: byte;
begin
write(text:); readln(t);
c:=0; k:=0;
{contorizeaza alternanta spatiu caracter diferit de spatiu}
for i:=1 to length(t) do if t[i]= then k:=c else c:=k+1;
writeln(textul are ,c, cuvinte);
end.
Problema 2
var ch: char; c, lmin, lmax: integer;
begin
c:=0; lmin:=255; lmax:=1;
repeat
read(ch);
if (ch= ) and (c>0) then begin
if c<lmin then lmin:=c;
if c>lmax then lmax:=c;
c:=0;
end;
if ch<> then inc(c);
until eoln;
if c>0 then begin
if c<lmin then lmin:=c;
if c>lmax then lmax:=c;
end;
writeln(lungime maxima:,lmax); writeln(lungime minima:,lmin);
end.
Problema 3
var t, cuv: string; i: byte;
begin
writeln(text:); readln(t);
i:=1;
repeat
case t[i] of
,.,,,?,!: inc(i);
else begin
cuv:=;
while (i<=length(t)) and (t[i]<> ) and (t[i]<>.) and (t[i]<>,) and (t[i]<>?) and (t[i]<>!)
do begin cuv:=cuv+t[i]; inc(i) end;
writeln(cuv);
end;
59
end;
until i>length(t);
end.
Problema 4
Se scot cuvintele din text ca la Problema 4, iar in loc de writeln(cuv) se testeaza daca cuv are lungimea 2; daca da, se
memoreaza intr-un vector de string-uri, care apoi se ordoneaza crescator si se afiseaza.
Problema 5
var text: string; cuv: array[1..255] of string; {va contine cuvintele din text}
n,i,k,max: byte;
begin
write(text:); readln(text);
n:=length(text); i:=1; k:=0; {i=indicele in string, k=numar cuvinte, indice in vectorul cuv}
while i<n do begin if text[i]<> then begin
inc(k); cuv[k]:=;
while (text[i]<> ) and (i<n) do begin cuv[k]:=cuv[k]+text[i]; inc(i) end;
end;
max:=0; {calculez max dintre lungimile cuvintelor din cuv}
for i:=1 to k do if max<length(cuv[i]) then max:=length(cuv[i]);
for i:=1 to k do if max=length(cuv[i]) then writeln(cuv[i]);
end.
IX.
Tipul mulime
1) Se dau n (1<=n<=30) iruri de caractere (litere mici i mari ale alfabetului englez i cifrele sistemului zecimal). S se
determine caracterele folosite n toate irurile de caractere. Exemplu: Date de intrare n=3 siruri
Abcdammbc123ads
Sgssa89822221iuAsd
Hgds921kjdkAsda
Se va afia A d s 1 2.
2) Se dau dou mulimi a i b cu componente numere naturale mai mici sau egale cu 255. Se cere s se determine
mulimile: ab, ab, a-b. Exemplu: Date de intrare: multimea a 1 2 3 4 7 5 multimea b 4 5 8 Date de ieire: reuniune 1
2 3 4 5 7 8 intersectie 4 5 diferenta 1 2 3 7.
3) Se dau n, 1<=n<=30, mulimi cu elemente numere naturale mai mici sau egale cu 255. Se cere se afle elementele
interseciei mulimilor. Exemplu: Date de intrare: m=3 multime1 1 2 3 4 5 multime2 2 4 7 1 multime3 4 5 2 9 Date
de ieire: intersectie 2 4.
4) Se citesc, din linii diferite, n cuvinte cuprinznd litere mici ale alfabetului latin. Se cere s se afieze literele distincte din
fiecare cuvnt citit i literele distincte ntlnite n toate cele n cuvinte. Exemplu:Date de intrare: numar cuvinte=2
cuvant1: backspace cuvant2: program Date de ieire: litere cuvant1: a b c e k p s litere cuvant2: a g m o p r litere
total: a b c e g k m o p r s.
5) Se dau dou numere n baza 16 cu cel mult 255 cifre. Se cere s se afieze cifrele comune celor dou numere.
Exemplu: Date de intrare: 1A67Fb 56DB345AA Date de ieire: 6 A B.
6) Se introduc numele medicamentelor indicate i contraindicate n 10 boli. Se cere s se afieze numele medicamentelor
care se pot administra unui pacient care sufer de mai multe boli din cele 10.
7) Se consider maxim 10 mulimi de numere de tip byte. S se verifice dac sunt disjuncte.
Problema 1
var
a,b: set of char;
x:array[1..30] of string;
n,i,j:integer; c:char;
begin
write(n=); readln(n);
{n=numar cuvinte}
60
61
begin
cuv:=[]; writeln(cuvantul ,i, :); {se construieste cuvantul }
while not eoln do begin read(lit); cuv:=cuv+[lit]; end;
total:=total+cuv;
writeln(cuvantul introdus are urmatoarele litere distincte:);
for lit:=a to z do if lit in cuv then write(lit:3);
writeln;
end;
writeln(litere distincte din toate cuvintele:);
for lit:=a to z do if lit in total then write(lit:3);
end.
Problema 5
{pentru fiecare boala, va trebui sa reunim medicamentele indicate si sa scadem cele contraindicate ; pentru aceasta, la
fiecare boala vom forma multimea medicamentelor indicate si cea a celor contraindicate; medicamentele trebuie codificate
deoarece tipul de baza al unei multimi nu poate fi string}
Tipul nregistrare
1) Elevii dintr-o coal vor s fac un top al celor mai bune 10 melodii pentru fiecare sptmn. Ajutai-i s realizeze un
program prin care se introduc n date de forma titlu melodie, interpret, numr puncte acumulate, numr puncte primite i care
afieaz primele 10 titluri, n ordinea descresctoare a punctelor.
2) Dintr-un lot de n persoane care s-au nregistrat cu nume i data naterii, trebuie selectate acele persoane care au
mplinit 18 ani la 1 ianuarie 2006. Datele de intrare cuprind valoarea lui n i cele n perechi de date de forma nume yy
mm dd i sunt coninute de fiierul date.int, iar datele de ieire conin numele cerute afiate pe vertical pe ecran.
3) La o staie meteo se trec datele n fiierul temp.int sub forma data temperatura. S se prelucreze aceste date afinduse zilele n care temperatura a fost maxim.
4) ntr-o clas de maxim 25 de elevi, fiecare a primit cte unul din calificativele suficient, bine i foarte bine la fiecare din
cele 10 materii. Datele se introduc n calculator sub forma: nume elev numr de calificative suficient numr de
calificative bine numr de calificative foarte bine. S se afieze n ordine descresctoare statistica notrii (numrul de
suficient, de bine i foarte bine) i numele elevului cu cele mai multe calificative fb.
Problema 1
type melodie=record
titlu: string[20];
interpret: string[15];
pac: byte;
pobt: byte;
end;
var top: array[1..100] of melodie; x:melodie; sort:boolean; I,n:byte;
begin
write(n=); readln(n);
for i:=1 to n do begin readln(top[I].titlu);readln(top[I].interpret); readln(top[I].pac, top[I].pobt);end;
{actualizez punctajul acumulat} for i:=1 to n do top[I].pac:=top[I].pac+top[I].obt;
repeat
sort:=true;
for i:=1 to n-1 do if top[i].pac<top[i+1].pac then begin
x:=top[i];top[i]:=top[i+1]; top[I+1]:=x; sort:=false
end;
62
until sort;
for i:=1 to 10 do writeln(top[i].titlu:20, top[i].interpret:15);
end.
4) n condiiile problemei precedente, dorim s construim un tren special: vagoanele cu numr pa rvor merge la un moment
dat n alt direcie dect cele impare, din acest motiv toate vagoanele cu numr par trebuie s fie plasate la nceputul
trenului n ordinea cresctoare a numerelor lor, iar cele cu numr impar la sfritul trenului, n ordinea descresctoare a
numerelor lor. Cum procedai?
5) Se citete de pe o linie de la tastatur o succesiune de paranteze rotunde deschise i nchise pn la ntlnirea
caracterului punct. ntlnirea unei paranteze deschise determin introducerea acesteia ntr-o coad. ntlnirea uneia
nchise determin extragerea unui element din coad- Verificai dac parantezele din ir se nchid corect i determinai
dimensiunea maxim a cozii (numrul maxim de paranteze deschise n coad la un moment dat). Exemple: Date de
intrare: (()). Date de ieire: corect dim max=2; date de intrare (((). Date de ieire: incorect dim max=3; date de intrare:
()). Date de ieire: incorect dim max=1.
6) Se consider un caroiaj dreptunghiular cu n linii i m coloane, n care pe anumite poziii sunt plasate obstacole. n
poziia iniial (x0,y0) se afl plasat un mobil. S se determine, pentru toate poziiile n care ajunge mobilul, distana
minim de la poziia iniial a mobilului msurat n deplasri elementare (o deplasare elementar este o deplasare cu o
poziie la stnga, la dreapta, sus sau jos). Exemplu: Date de intrare: m=5 n=5 x0=3 y0=3 pozitie obstacole
12
Date de ieire:
-2 -1 -1 5 4
unde -1=obstacol, -2=inaccesibil
13
-1 2 1 -1 3
24
2 1 0 1 2
43
3 2 -1 -1 3
44
4 3 4 5 4
21
Problema 3
type vagon:1..100; {depoul funct. ca o stiva, vom introduce toate vag. in depou si le vom extrage pe toate}
var s:array[1..50] of vagon ; n,i,vf: vagon;
begin
write(numarul de vagoane );readln(n);
if n>50 then writeln(prea multe vagoane)
else
begin
vf:=0; {initializez stiva}
for i:=1 to n do begin inc(vf) ; s[vf]:=i; end;
{formez trenul extragand vagoanele din depou}
while vf<>0 do
{cat timp depoul nu este gol}
begin write(s[vf], ); dec(vf); end;
63
writeln;
end;
end.
Problema 5
var c:array[1..100] of char;
inceput, sfarsit, lgmax:0..100;
p: char; corect:boolean;
begin
writeln(introdu sirul de paranteze );
sfarsit:=0; inceput:=1;
{initializez coada]
corect:=true; lgmax:=0; {lgmax retine lungimea maxima a cozii}
repeat
read(p);
if p=( then begin {inserez o paranteza deschisa in coada}
inc(sfarsit); c[sfarsit]:=(;
if sfarsit/inceput+1>lgmax then lgmax:=sfarsit-inceput+1;
end
else if p=) then {verific daca pot extrage un element din stiva}
if inceput<=sfarsit then inc(inceput) {am extras un element}
else corect:=false;
until p=.;
if inceput<=sfarsit then corect:=false;
if corect then writeln(corect dim max=,lgmax) else writeln(incorect dim max=,lgmax);
end.
Problema 6
Const dx:array[1..4] of -1..1=(-1,0,1,0);
dy:array[1..4] of -1..1=(0,1,0,-1); {deplasarile pe linie si coloana}
type element=record
l,c:0..21; {pozitia in caroiaj}
d: word; {distanta minima pana la pozitia l,c}
end;
var a: array[0..21,0..21] of integer;
n,m,x0,y0,I,j:integer; k:1..4;
c:array[0..100] of element; {vectorul coada}
incc,sfc:0..100;
{inceputul, sfarsitul cozii}
x,y:element;
fin, fout: text;
{fisierele de intrare si iesire}
begin
assign(fin,careu.in);reset(fin); readln(f,n,m); readln(fin, x0,y0);
for i:=1 to n do
for j:=1 to m do a[I,j]:=-2; {initializarea careului cu -2=pozitie inaccesibila}
while not seekeof(fin) do
begin readln(fin,I,j); a[I,j]:=-1 end; {citesc si marchez in caroiaj obstacolele}
for i:=1 to n do begin a[I,0]:=-1; a[I,m+1]:=-1 end;
{bordez matricea a cu obstacole pentru a nu verifica
for i:=1 to m do begin a[0,i:=-1; a[n+1,i]:=-1 end;
marginile}
x.l:=x0; x.c:=y0; x.d:=0; a[x0,y0]:=0;
incc:=1; sfc:=1; c[incc]:=x;
while incc<=sfc do begin
{se parcurge caroiajul}
x:=c[incc); inc(incc);
for k:=1 to 4 do begin
{ma deplasez in cele patru directii posibile}
y.l:= x.l+dx[k]; y.c:=x.c+dy[k];
64
X.
Interclasarea
1) Se cere s se interclaseze dou iruri de numere reale, ordonate cresctor. Prin interclasare se nelege crearea unui
nou ir ordonat , format din elementele irurilor date. Exemplu: Date de intrare: nr. elemente din primul sir=3, primul
sir=3 6 9, nr. elemente din al doilea sir=4, al doilea sir=1 2 5 9. Date de iesire: 1 2 3 5 6 9.
2) Pe dou rafturi din bibliotec avei mai multe cri. Se cunoate inltimea n cm a fiecrei cri i faptul c, pe fiecare
raft, crile sunt aranjate de la stnga la dreapta n ordine descresctoare a nlimii. Mutai toate crile pe un al treilea
raft pe care s fie ordonate tot descresctor. Afiati nlimile crilor de pe acest al treilea raft. Exemplu: Date de intrare:
numar carti pe primul raft: 5 inaltimi: 18 18 17 15 15 numar carti pe al doilea raft: 3 inaltimi: 15 14 12 Date de ieire: 18
18 17 15 15 15 14 12.
Ffff
Problema 1
var a,b,c: array[1..100] of integer;
n,m,i,j,k: integer;
begin
write(numar elemente din primul sir ); read(m); write(numar elemente din al doilea sir ); read(n);
write(elementele sirului a ordonate crescator );for i:=1 to m do read(a[i]);
write(elementele sirului b ordonate crescator );for i:=1 to n do read(b[i]);
for i:=1 to m+n do c[i]:=0;
i:=1; j:=1; k:=1;
{indicii vectorilor a,b,c}
repeat
if a[i]<=b[j] then begin c[k]:=a[i]; inc(i) end
else begin c[k]:=b[j]; inc(j) end;
inc(k);
until (i>m) or (j>n);
while (i<=m) do
begin c[k]:=a[i]; inc(i); inc(k) end; {se copiaza elem. ramase in a}
while (j<=n) do
begin c[k]:=b[j]; inc(j); inc(k) end; {se copiaza elem. ramase in b}
65
66
Exemple
JOC.IN
10
1 1 1 1 1 10 0 1 1 0
8
36241353
JOC.IN
7
1 1 0 10 1 10 1
16
6424621356332145
JOC.IN
12
1 10 1 1 0 10 1 1 1 10 0 1
4
5633
JOC.OUT
2
6 10
13
JOC.OUT
1
13
10
JOC.OUT
2
9 11
10 11
(OJI, clasa a VII-a, 2004)
Problema1
var c: array[1..100] of integer; n,i,t,s,k: integer; gata: boolean;
begin
write(cate numere=); read(n); write(pasul=); read(k); write(pozitia de start=); read(s);
for i:=1 to n do c[i]:=0;
{c[i]=de cate ori s-a marcat pozitia i pe cercul numerelor}
c[s]:=1; gata:=false; t:=s; {t=valoarea numerelor care se marcheaza}
while not gata do begin
t:=t+k;
if t > n then t:=t mod n;
if c[t]=0 then c[t]:=1 else begin
m:=0; gata;=true;
for i:=1 to n do if c[i]=0 then m:=m+1;
writeln(au ramas ,m, numere);
end;
end;
end.
Operaii cu numere mari
7) S se afieze toate valorile 2n , pentru n cuprins ntre 31 i 50.
7) S se fac un program care s afieze pe ecran suma a dou numere ntregi, de maxim 100 de cifre, citite din fiierul
termeni.int.
7) Se citesc dou numere naturale ca iruri de caractere, avnd lungimea maxim de 25. S se afieze produsul
numerelor sau un mesaj de eroare dac datele de intrare sunt eronate. Datele de intrare pot fi citite de la tastatur sau
din fiierul de tip text INT.INP care conine dou linii, cte un numr pe linie. Datele de ieire pot fi afiate pe ecran sau
scrise n fiierul de tip text IES.OUT, precizndu-se produsul obinut.
Exemplu: dac numerele citite sunt: 13478654 54390123 se va afia produsul 733105648934442.
7) Se citete un numr natural foarte mare, de maxim 50 cifre. Verificai dac este palindrom afind un mesaj
corespunztor.
67
Problema 1
var a: array [1..40] of byte; i,k,p,j: integer;
begin
{se initializeaza a[i] cu 0, de la 1 la 39 si a[40] cu 1}
for i:=1 to 39 do a[i]:=0; a[40]:=1;
for i:=1 to 50 do begin
{i =exponentul puterii lui 2}
p:=0;
{p=cifra zecilor care va fi adunata la componenta urmatoare}
for j:=40 downto 1 do begin
a[j]:=a[j]*2+p; if a[j]>10 then begin a[j]:=a[j]-10; p:=1 end;
else p:=0;
end;
if i>30 then begin k:=1;
repeat
{nu afisez zerourile din fata numarului}
if a[k]=0 then inc(k);
until a[k]<>0;
write(2,^,i,=);
for j:=k to 40 do write(a[j]);
writeln;
end;
end;
end.
Modelarea unor relaii
1)
Numim celebritate o persoan care este cunoscut de toat lumea, dar nu cunoate pe nimeni. Se pune
problema de a identifica o celebritate, dac exist, ntr-un grup de n persoane pentru care se cunosc relaiile dintre
persoane.
2)
Pe o matrice de m linii i n coloane, fie o populaie de virui care evolueaz astfel: un virus moare izolat cnd
are mai puin de 2 vecini i sufocat cnd are mai mult de 3 vecini; un virus apare pe un loc liber dac are 2 sau 3 vecini;
un virus triete 3 generaii dac are condiii prielnice de mediu. Virusul de generaie i se codific prin i, cu 1<=i<=3.
Inexistena virusului se codific prin 0. S se afieze configuraia populaiei de virui dup g generaii. Observaie: un
virus poate avea cel mult 4 vecini: N, S, E, V. Datele de intrare se citesc din fiierul virus. inp cu urmtoarea structur:
m n g
a[1,1] a[1,2] a[1,n]
a[2,1] a[2,2] a[2,n]
Virus.out
0 3 0
0 1 0
2 0 0
68
69
Probleme de geometrie
1) Din fiierul dreptunghi.int se citesc coordonatele capetelor diagonalei unui dreptunghi cu laturile paralele cu axele de
coordonate.. Scriei n fiierul puncte.out cte puncte de coordonate ntregi sunt n interiorul sau pe laturile
dreptunghiului. Exemplu:
fiierul dreptunghi.int:
-2.5 3
fiierul puncte.out
4 -1.75
35
2) Cte puncte cu coordonate ntregi sunt continute ntr-o sfer de raz R cu centrul n originea sistemului de cooronate?
Se consider c R este un numr natural, R<=30. Amintim c distana dintre un punct cu coordonatele (x,y,z) i originea
sistemului de coordonate se determin dup formula d=sqrt(x*x+y*y+z*z). Exemplu: pentru R=4, programul va afia
257. (ORI, Moldova, clasele VI-IX, 2001)
3) Se citesc de la tastatur trei numere reale pozitive, care reprezint lungimile laturilor unui triunghi. Scriei un program
care s determine aria i lungimile nlimilor triunghiului. Specificai i natura acestui triunghi: echilateral, isoscel,
dreptunghic, dreptunghic isoscel sau oarecare.
4) Se dau n puncte n plan p1, p2, , pn prin coordonatele lor carteziene i un dreptunghi cu laturile paralele cu axele prin
coordonatele colului din stnga sus i colului din dreapta jos. Cerin: determinai numrul de puncte dintre p1, p2, ,
pn care sunt n interiorul dreptunghiului, respectiv numrul de puncte de pe cele dou diagonale. Date de intrare: n
fiierul puncte.in pe prima linie se afl n, pe urmtoarele n linii coordonatele punctelor p1, p2, pn separate printr-un
spaiu, iar pe urmtoarele dou linii se afl coordonatele colurilor dreptunghiului. Date de ieire: n fiierul text
puncte.out se vor scrie numerele cerute cu un spaiu ntre ele. Restricii: 0<n<100, coordonatele sunt numere naturale <
3000. Exemplu:
Puncte.in
puncte.out
8
5 4
34
24
56
51
42
06
22
32
15
51
(CNI, Satu-Mare, clasa a VIII-a, 2003)
5) n curtea din spatele casei unui gospodar triau nestingherite mai multe familii de furnicue, organizate n mai multe
muuroaie. Una dintre furnicue l aude ntr-o zi pe gospodar spunndu-i soiei sale c vrea s amplaseze un obiect
chiar n zona n care se aflau muuroaiele. Furnicua le anun i pe celelalte, ns netiind s aprecieze exact unde va
fi amplasat acel obiect, furnicuele au nevoie de ajutorul vostru. Dac afl care din muuroaie se afl n pericol, ele se
pot adposti fr grij n cele care sunt n siguran. Cunoscndu-se numrul de puncte (muuroaie) M, coordonatele x
i y ale celor M puncte prin numrul vrfurilor poligonului (obiectului) i coordonatele vrfurilor, determinai muuroaiele
care sunt n pericol s fie distruse de obiectul care va fi amplasat de gospodar. Date de intrare: Fiierul de intrare
furnici.in conine pe prima linie un numr ntreg pozitiv M, care reprezint numrul de muuroaie. Pe urmtoarele M linii
se gsesc cte dou numere ntregi pozitive, separate printr-un singur spaiu, care reprezint coordonatele punctelor
(muuroaielor). Urmtoarea linie conine un singur numr ntreg pozitiv N care reprezint numrul de vrfuri ale
poligonului. Cele N linii care urmeaz conin cte dou numere ntregi pozitive, separate prin cte un spaiu, care
reprezint coordonatele pentru vrfurile poligonului. Poligonul poate fi convex sau concav. Date de ieire: Fiierul de
ieire furnici.out va conine M linii. Pe fiecare dintre acestea se va scrie unul dintre mesajele "in siguranta!" sau "in
pericol" dac muuroaiele de furnici din fiierul de intrare se gsesc n exteriorul, respectiv n interiorul poligonului.
Punctele corespunztoare muuroaielor vor fi tratate n ordinea n care apar n fiierul de intrare. Restricii i precizri:
furnici.out
se consider c un muuroi este n pericol atunci cnd coordonatele
sale sunt coninute n interiorul poligonului sau
cnd muuroiul se gsete pe una dintre laturile acestuia;3 <N <50;
in 1siguranta!
<M <100.
Exemplu
in pericol!
furnici.in
in siguranta!
5
in siguranta!
70
in pericol
80 100
400 170
230 160
340 347
230 350
6
100 165
380 200
400 140
520 350
395 310
220 360
(ginfo ian. 2004)
6) Introducei n calculator coordonatele, abscisa i ordonata, a n puncte astfel nct s nu existe patru puncte coliniare.
Determinai numrul de paralelograme care se pot forma unind cte patru din aceste puncte. Datele de intrare se citesc
din fiierul puncte.int care va avea pe prima linie numrul n i pe urmtoarele n linii coordonatele punctelor separate
prin spaiu. Afiarea rezultatului se va face pe ecran. Exemplu:
puncte.int
7
22
33
54
16
82
71
65
pe ecran
6
7) Se dau n puncte n plan prin coordonatele lor (numere naturale mai mici sau egale cu 50). S se determine centrul i
raza unui cerc care s conin toate punctele date n interior sau pe circumferin, avnd centrul n unul din punctele
introduse.
8) S se calculeze aria unui poligon convex A1, A2,, An (3<=n<=100) dat prin coordonatele vrfurilor sale, numere
naturale mai mici dect 50. Indicaie: se va descompune poligonul in triunghiuri de forma A1AiAi+1.
9) Se dau n, n>=3, puncte n plan prin coordonatele lor numere ntregi din intervalul [0,500]. S se afieze numrul de
triunghiuri isoscele care se pot forma unind cte trei din cele n puncte.
10) Se dau n, n>=3, puncte ]n plan prin coordonatele lor, numere ntregi mai mici dect 50. S se afieze tripletele de
coordonate ale punctelor care determin triunghiuri de arie maxim.
11) Se dau n, n >=4, puncte n plan prin coordonatele i culoarea lor (numere naturale mai mici sau egale cu 50). S se
afieze coordonatele vrfurilor dreptunghiurilor cu laturile paralele cu axele ale cror vrfuri au aceeai culoare.
12) Se d un dreptunghi prin coordonatele vrfurilor sus-stnga i jos-dreapta, i n puncte n plan prin coordonatele lor
numere naturale mai mici dect 500. Se cere s se determine numrul de puncte care se afl n interiorul
dreptunghiului, pe dreptunghi i n exteriorul lui.
71
IX.
UTILIZAREA SUBPROGRAMELOR
Proceduri
1) Pentru citirea a n date de forma nume elev, nota1, nota2, nota3 i pentru calculul mediei fiecrui elev, s se scrie
procedura Citire. S se realizeze urmtorul cap de tabel ntr-o procedur Tabel:
***************************
* Nume elev
* Medie *
***************************
i s se afieze rezultate printr-o procedur
Scriere. S se modifice procedura Tabel astfel nct s permit realizarea capului de tabel utiliznd n locul * un alt
caracter, citit de la tastatur n programul principal.
2) S se ordoneze cresctor irul format din n nume de elevi folosind o procedur cu doi parametrii, de interschimbare a
valorilor.
3) S se listeze primele n numere prime, verificnd calitatea de prim a unui numr ntr-o procedur cu un parametru.
4) Se introduc numrtorul i numitorul a dou fracii. S se afieze cele dou fracii i suma lor sub forma ireductibil. Se
va folosi o procedur cu doi parametrii, de simplificare a unei fracii.
5) Se introduc n date de forma nume elev, punctaj. Uiliznd procedura Meniu s se afieze un meniu de forma
1. Afisare in ordine alfabetica
2. Afisare in ordinea descrescatoare a punctajelor
prin care utilizatorul poate alege modul de vizualizare al datelor introduse. Afiarea datelor i sortarea lor se va face prin
procedurile Afisare i Sortare.
6) Se introduc dou numere ntregi. S se afieze n cte zerouri se termin produsul lor, fr a calcula produsul. Se va
ine seama c un zero la sfrit se obine nmulind un 2 cu un 5 n descompunere celor dou numere n factori primi.
Se va crea o procedur cu doi parametrii, de determinare a exponentului la care apare un numr prim n
descompunerea n factori primi a unui numr.
7) Se introduc dou numere n i k. Utiliznd o procedur de calculul puterii unui numr, s se afieze n la puterea k.
Problema 1
type elev=record
nume:string[15];
n1,n2,n3:byte;
end;
var e:array[1..100] of elev; s:array[1..100] of real; n:byte;
procedure tabel;
var i:byte;
72
begin
for i:=1 to 30 do write(*); writeln;
writeln(*,Nume elev:15, *,Medie:7, *);
for i:=1 to 30 do write(*); writeln;
end;
procedure citire;
var i:byte;
begin
write(n=); readln(n);
for i:=1 to n do with e[i] do begin readln(nume); readln(n1,n2,n3); s[i]:=(n1+n2+n3)/3 end;
end;
procedure scriere;
var i:byte;
begin
for i:=1 to n do writeln(*,e[i].nume:15, *,s[i]:4:2, *);
end;
begin
citire; tabel; scriere;
end.
Problema 2
type data=record
nume:string;
puncte:byte
end;
var x:array[1..100] of data; I,n,a:byte;
procedure meniu;
begin
writeln(1.Afisare in ordine alfabetica);
writeln(2.Afisare in ordinea descrescatoare a punctajelor);
end;
procedure sortare;
var sort:boolean; v:data;
begin
repeat
sort:=true;
for i:=1 to n-1 do
if ((x[i].puncte<x[i+1].puncte) and (a=2)) or ((x[i].nume>x[i+1].nume) and (a=1)) then
begin
v:=x[i]; x[i]:=x[i+1];x[i+1]:=v;
sort:=false;
end;
until sort;
end;
procedure afisare;
begin
writeln(Nume elev:20, punctaj:15);
for i:=1 to n do writeln(x[i].nume:20, x[i].puncte:15);
end;
begin
write(n=); readln(n);
for i:=1 to n do begin readln(x[i].nume);readln(x[i].puncte) end;
meniu; writeln(Alege 1 sau 2 );
sortare; afisare;
73
end.
Funcii
1) S se verifice dac numele a k elevi se afl ntr-un ir de n nume, utiliznd o funcie Cautare.
2) Citii un ir de n numere ntregi i afiai cea mai mare cifr a numerelor de pe poziii pare i cea mai mic cifr a celor
de pe poziii impare. Se va realiza cte o funcie pentru determinarea cifrei maximale i a celei minimale.
X.
1) S se determine i s se afieze numrul de linii dintr-un fiier tip text i numrul de caractere de pe fiecare
linie.
2) S se verifice dac ntr-un fiier tip text sunt linii albe, care conin numai caracterele spaiu i TAB
3) S se afieze pe ecran un fiier text, linie cu linie.
4) S se transfere coninutul unui fiier tip text ntr-un alt fiier tip text, sub aceeai form.
7) S se fac un top al melodiilor (vezi problema 1 din Capitolul IX, Tipul nregistrare) utiliznd un fiier pentru citirea
titlului, a interpretului i a punctajului acumulat. Punctajul sptmnal obinut se va citi de la tastatur. Afiarea topului
se va face pe ecran. Se va actualiza cmpul puntaj acumulat din fiierul de intrare.
Hhhhh
Problema 1
Var x:char; c:integer; f:text;
Begin
Assign(f,date.int); reset(f);
C:=0;
Repeat
While not eoln(f) do begin read(f,x); write(x) end;
Inc(c); readln(f); writeln;
Until eof(f);
Writeln(c, linii);
Close(f);
end.
74
XI.
1)
n Orintia, exist o floare care face strict x semine . Fiecare smn este fertil i n decurs de un an, din ea se
dezvolt cte o floare care va face alte x semine fertile. Dup k ani, florile orintiene dispar, dar rmn urmaele lor.
Grdinarul Perolino, pe care l intereseaz cte flori vor fi n grdina lui dup z ani, tiind c n primul an au fost f flori de
tipul amintit, v roag s l ajutai la numrarea florilor. Date de intrare
f: numrul iniial de flori
x : numrul de semine
produse de fiecare floare
k : durata de
via a unei flori
z : anul
n care grdinarul face recensmntul
Date de ieire :
t : numrul de flori aflate n grdin la sfritul anului z. Restricii:1<=f<=10, 1<=x<=6, 1<=k<=5, 1<z<5. Exemplu: Intrri
f=1 x=2 k=3 z=3 Ieire 8 flori.
Explicaie:
anul 1 1 floare 2 semine
anul 2 3 flori 6 semine
anul 3 8 flori (3 + 6 1)
(CNI, clasa a V-a, SatuMare, 2004)
2) Nicu are N dischete cu aceeai capacitate 1400 Ko. Dischetele sunt numerotate cu 1, 2, , N i pe fiecare dischet are
o poriune din ea ocupat cu diverse fiiere. Dischetele 1, 2, , N au ocupate o1, o2, , oN Ko fiecare. Nicu afl c
prietenul su George are un joc frumos de dimensiune x Ko. Dup multe negocieri cu George, Nicu are acceptul de a
copia jocul.
Cerin: Din cele N dischete alegei ct mai puine pentru a copia jocul (dac este posibil). Cnd nu este posibil afiai
mesajul Nu se poate copia jocul!
(CNI Satu-Mare 2003 clasa a V-a)
3) Afiai primele dou numere prime alturate dintre cele n numere ntregi date.
Cnd acestea nu exist, afiai mesajul: fr soluie ( n<= 20). Exemplu:
Pentru n=7 i numerele 1 18 41 13 9 7 5
se va afia perechea 41 13
pentru n=6 i numerele 2 8 7 2 5 4
se va afia perechea 7 2
pentru n=5 i numerele 4 12 8 5 4
se va afia mesajul fr soluie
(CNI Satu-Mare 2002 clasa a V-a)
4) Pentru un n natural dat, sa se determine toate numerele prime mai mici sau egale cu n pentru care oglinditul
corespunztor este tot un numr prim (n<100). Exemplu: n=20, printre numerele gsite sunt i 13, cu oglinditul 31, i 17,
cu oglinditul 71.
(CNI Piatra-Neam 2001, clasa a V-a)
5) Un schior i dorete un traseu care s conin cel puin un pisc (vrf) i cel puin o vale. Dac traseul este caracterizat
(ca altitudini relative) de cifrele componente ale unui numr dat, ajutai-l s stabileasc dac l parcurge sau nu.
75
6)
7)
8)
9)
10)
11)
12)
13)
14)
15)
Exemplu: traseul 5745 poate fi parcurs, traseele 123 i 68556 nu pot fi parcurse.
(CNI Piatra-Neam 2001, clasa a V-a)
Se consider un ir cu n numere naturale mai mici dect 32000, n < 30. Se cere:
a) s se afieze un numr din ir
care are n scrierea sa ct mai multe cifre distincte. Dac exist mai multe numere cu aceast proprietate se va afia
primul element dintre ele. b) s se determine o succesiune cu numr maxim de componente din ir care are proprietatea
c fiecare component a succesiunii are acelai numr de cifre distincte n scrierea sa.
Exemplu: pentru n=9 i
irul 865, 15, 144, 231, 1591, 1998, 6235, 14, 4201se va afia a) 6235 b) 231 1591 1998
(CNI 1998 clasa a V-a)
Se citesc n, numr natural mai mic dect 100, i n numere naturale nenule mai mici dect 30000. Se cer: a) ultima cifr
a numrului x[1]+x[2]+...x[n] b) ultima cifr a numrului x[1] x[2]+x[3]+...x[n] Exemplu: pentru n=3 i numerele 11 4 3
se va afia a) 8 b) 1
(CNI 1998 clasa a V-a)
Se dau patru numere naturale a, b, c, d. S se afieze sub form de fracie ireductibil cea mai mic fracie subunitar i
cea mai mic fracie supraunitar folosind cele patru numere. Exemplu: pentru a=2 b=5 c=6 d=16 se vor afia fraciile
1/8 i 6/5
(CNI Sinaia 1997 clasa a V-a)
Se consider n stlpi de nlimi h[1], h[2], h[3]... h[n] metri. La baza fiecrui stlp se afl cte un melc codificat prin
numrul stlpului. Fiecare melc i urc ziua p[i] metri i coboar noaptea q[i] metri (p[i]>=q[i]). S se afieze melcii n
ordinea n care ating vrfurile stlpilor. Exemplu: pentru n=3 i h[1]=2 p[1]=1 q[1]=0, h[2]=4 p[2]=4 q[2]=4, h[3]=5 p[3]=1
q[3]=0 se va afia 2 1 3.
(CNI Sinaia 1997 clasa a V-a)
Fie A un ir de n numere naturale, 8<=n<=256, i p un numr natural dat. a) s se precizeze dac p este numr prim
b) s se afieze de cte ori apare p n A i pe ce poziii
c) dac numrul p nu apare n A, s se nsereze
numrul p pe o poziie k, 1<=k<=n, unde k este dat de la tastatur, deplasnd spre dreapta elementele aflate pe
poziiile k+j, 0<=j<=n-k+1.
(CNI Buteni 1994 clasa a V-a)
De la tastatur se citesc n elemente ale unui ir de numere. S se scrie un program care interschimb dou secvene
de lungimi l1 i l2 care ncep din poziiile p1, reapectiv p2. Elementele care nu sunt cuprinse n cele dou secvene pot fi
mutate astfel nct interschimbarea s se poat face. Exemplu: pentru n=9, irul 1,2,3,4,5,6,7,8,9, p1=2 l1=2 p2=6 l2=3,
rezultatul este 1 6 7 8 4 5 2 3 9.
(CNI Nvodari 1993 clasa a V-a)
Dndu-se dou numere n, k s se determine 2*k numere prime situate n centrul listei numerelor prime din intervalul
[1,n], n cazul n care n interval este un numr par de numere prime, i 2*k-1 numere din centrul listei de numere prime,
n cazul n care numrul de numere prime este impar. Dac numrul 2*k ( resp. 2*k-1) este mai mare dect numrul de
numere prime din intervalul considerat, atunci se vor afia toate numerele prime din interval. Restricii: 1<=n<=10000,
1<=k<=30, k<n. Exemplu: n=21 k=2 se va afisa
5 7 11 13
( ONI, clasa a V-a, Focani, 2003)
n fiecare zi nelucrtoare din sptmn Pinochio spune cte o minciun datorit creia nasul acestuia crete cu cte p
cm pe zi. Smbta i duminica, cnd vine bunicul Gepeto acas, pentru a nu-l supra prea tare, Pinochio reuete s
nu spun nici o minciun, ba chiar uitndu-se n oglind observ c n fiecare din aceste zile lungimea nasului su
scade cu cte 1 cm pe zi. Cnd ncepe o nou sptmn, rmnnd singur acas Pinochio continu irul minciunilor.
Care este dimensiunea nasului lui Pinochio dup k zile (zilele ncep cu luni ) tiind c iniial nasul su msura n cm?
Exemplu: pentru n=2 p=1 k=8 se va afia 6 cm.
(ONI 2003 clasa a V-a)
Gigel este un tip ciudat. Lui i place s i impresioneze colegii exprimnd duratele numai n secunde. De exemplu, dac
l vei ntreba ct e ceasul el i va rspunde cte secunde s-au scurs de la ora 0.00 din ziua respectiv. Dac ai s-l
ntrebi ce vrst are, el i va rspunde cte secunde au trecut de cnd s-a nscut.
Colegii lui Gigel au hotrt c nu e cazul s se lase impresionai; ca urmare au nevoie de un program care s
citeasc de la tastatur un numr natural N (N2000000000) care reprezint vrsta lui Gigel exprimat n secunde i
care va afia pe ecran ci ani, cte luni i cte zile are Gigel (orele i minutele rmase sunt considerate
nesemnificative). Scriei acest program pentru colegii lui Gigel!
Nu uitai c anii biseci sunt cei divizibili cu 4, dar nedivizibili cu 100 sau divizibili cu 400. De exemplu 1992 i 2000
au fost ani biseci. Dar anul 1900 nu a fost bisect. Anii biseci au 366 de zile, spre deosebire de ceilali care au doar 365.
Considerm c ne aflm n ultima zi de coal (15 iunie 2002).
Exemplu :Pentru N=69206400 programul va afia :Gigel are 2 ani, 2 luni si 10 zile.
(ONI Glciuc 2002 clasa a V-a)
Fie un numr p (1p4) dat de la tastatur. S se scrie pe ecran toate numerele n de p cifre cu proprietile urmtoare:
1) n-1 i n+1 sunt numere prime 2) suma cifrelor lui n este tot un numr prim. De exemplu, pentru p=2, numrul n=12
76
face parte din soluie deoarece n-1=11, n+1=13 sunt prime iar suma cifrelor lui n este 1+2=3, tot un numar prim. Dac
nu exist nici un numr n cu p cifre care s verifice aceste proprieti, se va da un mesaj.
(Marele Premiu PACO, 2001)
16) Copa bate la poarta Orintiei, dar poarta e programat s nu se deschid dect dup ce se introduc, ntr-o caset cu s
spaii (3<=s<=10), s cifre strigate de portar. Portarul a strigat 1, Copa a butonat 1, n primul spaiu de la stnga la
dreapta. Portarul a strigat 0, i n timp ce Copa butona 0 n spaiul al doilea, 1 a devenit 2 n spaiul anterior. Portarul a
strigat 7. Copa scria 7 n spaiul al treilea, iar n primul spaiu 2 devine 3, iar n al doilea spaiu 0 devine 1. i tot aa,
pn la al s-lea spaiu, cnd Copa reuete s scrie toate cifrele i apare tot codul. i poarta se deschide, dar
surpriz, mai era o poart, iar codul acesteia, N, era cel mai mic numr format din ct mai multe dintre cifrele codului
anterior, astfel nct nici o cifr s nu se repete. Obs.: Dup 9 urmeaz 0. Disperat de atta informatizare, Copa v cere
sprijinul s calculai cel de-al doilea cod N. Exemplu: Date de intrare
s=10 cifre strigate de portar: 1 0 7 9 7
3 6 9 4 6 Date de ieire 102456789
(ONI Focani
2003 clasa a V-a )
Clasa a VI-a
1) Doi copii vopsesc un gard din scnduri pe care le vom numerota de la 1 la n astfel: primul ia o cutie de vopsea roie cu
care vopsete scndurile cu numrul p, 2p, 3p, etc. Al doilea procedeaz la fel, ncepe de la acelai capt al gardului
dar ia o cutie de vopsea albastr i vopsete din q n q scnduri. Astfel, cnd vor termina de vopsit, gardul va avea
multe scnduri nevopsite, unele scnduri vopsite n rou, altele n albastru, iar altele n violet. Cunoscnd numerele n, p
i q afiai: a) cte scnduri rmn nevopsite b) cte scnduri sunt vopsite n rou c) cte scnduri sunt vopsite n
albastru d) cte scnduri sunt vopsite n violet
(ONI 2002 clasa a VI-a)
2) Se d un vector cu n (1n30) elemente numere naturale, cu maxim 8 cifre. Se cere: a) S se afieze cte elemente din
vector sunt valori-pant (numere care privite de la stnga sau de la dreapta au cifrele n ordine cresctoare, de exemplu
136, 931).
b) S se afieze cea mai mare i cea mai mic valoare-pant i poziiile pe care se afl acestea n vector. Exemplu:
Dac se citete n=6 i elementele 126 9621 1212 3678 9231 9621 , programul va afia: numar valori-panta= 4
cea mai mare valoare-panta=9621 pe pozitiile 2 6 cea mai mica valoare-panta=126 pe pozitiile 1.
(ONI 2003 clasa VI-a)
3) Fratele cel mic al lui Gigel primise de la Mo Crciun un joc de cuburi colorate. Gigel l-ar fi nsoit pe cel mic la joc, mai
ales cnd acesta nira cele n cuburi unul dup altul, iar lui i treceau prin cap tot felul de cerine pe care profesorul lui
de informatic le-ar fi putut scorni: a. s vedem cte culori sunt n total; b. care culoare este folosit pentru cele mai
multe cuburi; c. ce cub ar trebui scos din ir astfel nct s se formeze din cuburile rmase un ir ct mai lung de cuburi
alturate de aceeai culoare.
Se citesc de la tastatur n, numrul de cuburi, n<50, i o succesiune de n numere de culori, de la 1 la 10. Dac la
cerinele a, b, c sunt mai multe soluii, se vor preciza toate. Exemplu: n=15 culorile 5 2 5 2 2 3 3 2 3 5 3 3 3 2 2 se va
afia a. 3 b. 2 3 c. Pozitia 10.
(ONI Focani 2003 clasa a VI-a)
4) Profesorul de sport al clasei a VI-a B de la o coal din Focani vrea la nceputul orei s aeze elevii pe terenul de sport,
la raport, ntr-o anumit ordine. Pentru acest lucru, elevii sunt bine instruii, astfel nct, aeznd pe ultimul rnd n elevi,
celelalte rnduri de elevi se creeaz singure dup regula: - pe poziia i a unui rnd se va aeza un elev, dup cum
urmeaz: dac pe rndul din spate, pe poziiile i i i+1 stau fie numai biei, fie numai fete, atunci se va aeza o fat, iar
dac pe aceste poziii stau elevi de sex opus, se va aeza un biat.
Conform acestei reguli, pe rndul cu numrul de ordine i (i{1, 2, , n}) se vor aeza i elevi. Numrul de elevi din clas
este n(n+1)/2.
Cerin: Pentru n dat i un ir de n numere 0 i 1 (0 reprezint codificarea pentru o fat, iar 1 pentru un biat), care
reprezint irul de elevi de pe ultimul rnd, se cere s se determine numrul de biei din clas.
Date de intrare: De la tastatur se citesc datele de pe dou linii: pe prima linie n, pe linia a doua un ir de n numere
0 i 1, separate printr-un spaiu ce reprezint irul de elevi de pe ultimul rnd. Date de ieire: Pe ecran se va afia
numrul de biei din clas. Restricii: 1 n 20.
Exemplu: Pentru datele de intrare: 5 1 0 0 1 1 se va afia: 8
(ONI Focani 2003 clasa a VI-a)
5) Gigel a primit spre pstrare un set de n cutii de greuti nu neaprat distincte. El a cntrit cutiile i pentru fiecare
greutate distinct a notat pe o foaie, n ordine cresctoare a greutilor, numrul de cutii cu greutatea respectiv.
77
Deoarece fratele su mai mic avea prostul obicei s se joace cu numerele scrise de el pe foaie, Gigel s-a gndit s
calculeze un numr de control dup urmtorul algoritm: ncepnd de la primul numr a grupat numerele de apariii ale
greutilor cte trei (dac i rmn numere negrupate la sfrit, le ignor). Dac ntr-un grup sunt numai numere pare
sau numai impare noteaz grupul cu cifra 1, altfel l noteaz cu cifra 0. Din irul astfel obinut, se formeaz un numr
care are ca valoare cifra zecilor egal cu numrul de valori 1 i cifra unitilor egal cu numrul de valori 0, obinndu-se
astfel numrul de control.
Cerin: Citind greutile cutiilor, s se determine numrul de control i s se verifice dac este numr prim. Date de
intrare: Se citete de la tastatur numrul n urmat de greutile cutiilor. Date de ieire:Se va scrie pe ecran numrul de
control, urmat de valoarea 0 sau 1 pe linia urmtoare. Pe urmtoarea linie se va afia 1 dac numrul este prim,
respectiv 0 n caz contrar.
Restricii:1 n 100. Fiecare greutate este un numr natural, mai mic sau egal cu 200
Exemplu: Date de intrare n=21 1 3 2 6 2 6 2 8 9 8 8 9 10 8 11 18 11 12 14 15 17
Date de ieire 31 1. Explicaie: Dup ordonare se obine irul: 1 2 2 2 3 6 6 8 8 8 8 9 9 10 11 11 12 14 15 1 18. Se
obine apoi: 1 3 1 2 4 2 1 2 1 1 1 1 1 care grupate cate trei dau valorile 1 1 0 1, din care se obine numrul de control 31,
care este numr prim.
(OJI 2004 clasa a VI-a)
6) Vntorul ef al regelui Arthur a primit nsrcinare s vneze primele rae ce se ntorc din rile calde. Regele fiind un tip
cu idei fixe, i-a cerut vntorului s vneze raele albe cu sgei albe, iar raele negre cu sgei negre. Raele vin n
rnduri (stoluri) din ce n ce mai mari: mai nti una, apoi dou, trei, cinci, opt, treisprezece, .a.m.d. Se observ c
numrul de rae dintr-un rnd este egal cu numrul de rae de pe cele dou rnduri anterioare. Raele fiind nite creaturi
ordonate zboar n rnduri, n care nu vei putea gsi dou rae de aceeai culoare alturate, fiecare rnd ncepnd cu o
ra alb.
Vntorul tie c dac a nceput s doboare o ra, trebuie s le doboare pe toate de pe rndul acesteia, deoarece
supravieuitoarele vor alerta celelalte rae i ele nu se vor mai ntoarce niciodat, iar vntorul nostru i va pierde
slujba.Cerin: tiind c vntorul a primit ka sgei albe i kb sgei negre, trebuie s determinai cte rnduri de rae a
dobort i cte sgei de fiecare tip i-au rmas, tiind c el vrea s-i pstreze slujba. Date de intrare: Se citesc de la
tastatur numerele ka i kb (n aceast ordine). Date de ieire: Se va afia pe ecran:
- numrul de rnduri doborte
- numrul de sgei albe rmase
- numrul de sgei negre rmase.
Restricii: 0ka, kb2.000.000.000 Exemplu: Pentru ka=9 i kb=10 Se va afia: 4 2 6. Explicaie: Pentru exemplu
avem rndurile (A- ra alb, N- ra neagr) de rae:
A
AN
ANA
ANANA
(CJI 2004 clasa a VI-a)
7)S se genereze dou iruri A i B de numere naturale, elementele lui A s fie cuprinse ntre 0 i 99, iar ale lui B ntre 1 i
999. Cele dou iruri au acelai numr de elemente, specificat de la tastatur. S se genereze un ir C dup
urmtoarea regul: C[i]=A[i]-B[i], dac A[i] este par i B[i] impar, C[i]=A[i]+B[i], dac A[i] este impar i B[i] par,
C[i]=A[i]*B[i], dac A[i] i B[i] sunt ambele fie pare, fie impare. S se afieze cte patru elemente pe un rnd, elementele
irului A, ale irului B i apoi ale lui C.
(CNI 1987 clasa a VI-a)
8) O coal are maxim 7 serii de clase a VI-a, notate A, B, C, D, E, F. S se scrie un program care s genereze o
planificare a ntlnirilor sportive ntre aceste clase, astfel nct fiecare s se ntlneasc o singur dat cu alt clas.
ntlnirile au loc zilnic, cte una n fiecare zi, cu excepia duminicilor. Programarea ntlnirilor ncepe cu ziua de miercuri,
1 iunie 1988 i arat astfel:
miercuri
1 iunie
VI A VI B
joi
2 iunie
VI A VI C
...................................................
(CNI 1988 clasa a VI-a)
9)Se d un vector de numere naturale mai mici dect 101 i un numr natural a. S se nsereze ntre dou componente
vecine, a cror diferen n valoare absolut este mai mare sau egal cu a, media lor aritmetic, pentru ca n final s
rezulte un vector n care diferena absolut dintre dou elemente este mai mic dect a.
(CNI Nvodari 1989 clasa a VII-a)
10) Fie un ir de n fracii (1n5) de forma a[i]/b[i], 1in) cu 0a[i]255, 1b[i]8.
a) S se simplifice fracia de pe poziia k, k dat de la tastatur.
78
b
45
produs
19
19+
22
38
11
76
5
76
152
2
152
304
1
608
608
===
855
(CNI Piatra-Neam 2001 clasa a VI-a)
14) Nicu merge la Metro s-i cumpere rechizite colare. Pe fiecare obiect cumprat se afl un cod de produs alctuit din
cel mult 10 liniue verticale. Pentru fiecare cod Nicu asociaz un numr de cod astfel: pentru fiecare liniu asociaz o
cifr, lungimea liniuei. n acest mod fiecare obiect are asociat un numr natural. Cerin: Pentru cele n obiecte
cumprate i date prin numrul de cod se cere s se afieze cte numere palindroame exist cu proprietile: sunt mai
mici strict dect cel mai mare numr de cod, nu sunt printre numerele de cod date. Restricii: 0<n<26, cel mai mare
numr de cod este mai mic dect 3001. Exemplu: pentru n=7 i numerele de cod 8 20 22 44 108 55 88 se va afia
15 (deoarece avem urmtoarele numere palindroame: 0 1 2 3 4 5 6 7 9 11 33 66 77 99 101).
(CNI Satu-Mare
2003 clasa a VI-a)
15) La concursul Mititelu Gates, pentru buna desfurare a competiiei este necesar o suma dat S; n acest scop s-a
creat o list de n (n<1000) persoane care pot i vor s sponsorizere acest eveniment. Fiecare din cele n persoane a
confirmat participarea i suma oferit. Determinai valorile selectate pentru sponsorizarea concursului, tiind c numrul
persoanelor trebuie s fie minim i suma total s acopere cheltuielile.(unitatea de msur este milionul)
Exemplul 1 : N=8 S=30
2.5 3 2 5 15 7 4 1 Se va afia: 15 7 5 3
Exemplul 2 : N=7 S=37
5.5 4.5 2 17 2 5.5 10
Se va afia: 17 10 5.5 4.5
16) Un grup de elevi formeaz o coloan care are m rnduri, m15, cu n elevi pe rnd, n6. De pe fiecare rnd este ales
cel mai scund elev, iar dintre alei, cel mai nalt primete un steag. Al doilea steag este repartizat n mod similar, se
alege de pe fiecare rnd cel mai nalt elev, iar dintre alei, cel mai scund. n cazul n care exist mai muli elevi cu
aceeai nlime, se alege primul dintre ei. S se scrie un program care s afieze nlimile purttorilor de steag;
valorile m, n i nlimile elevilor se citesc de la tastatur. Exemplu: m=3 n=4 rndul 1: 120 130 140 150 rndul 2:
79
110 120 130 130 rndul 3: 140 140 150 150 ; primul steag este dat elevului din poziia (3,1), cu nlimea 140, iar al
doilea steag elevului din poziia (2,3), cu nlimea 130.
(CNI 1989 clasa a V-a)
17) ntr-un parc cu castani un copil gsete o zon cu 12 dale, aranjate sub forma unui dreptunghi cu 4 linii i 3 coloane.
Copilul i noteaz numrul de castane de pe fiecare dal, ncepnd cu dala de pe prima linie i prima coloan,
continund linie cu linie (notiele copilului se introduc de la tastatur). El pornete de pe prima dal (unde nu sunt
castane), se poate muta de pe o dal pe alta doar pe linie sau pe coloan. Copilul adun castanele de pe fiecare dal
pe care ajunge i face un numr de k mutri (k citit de la tastatur). Comanda unei mutri de pe o dal pe alta se va
face apsnd pe una dintre tastele A, B, C sau D, unde mutrile posibile sunt definite astfel:
A pe linia anterioar;
B pe coloana urmtoare;
C pe linia urmtoare;
D pe coloana anterioar.
a. Se cere s se afieze cte castane a adunat copilul dup fiecare mutare.
b. Copilul se joac cu cifrele numrului total de castane, obinut la punctul a., conform urmtoarelor exemple:
173 > 11 > 2, 8 > 8, 14 > 5, 97 > 16 > 7, 1989 > 27 > 9
Ce cifr obine copilul la punctul (b.) pentru numrul obinut la punctul (a.), dup mutarea k? Obs.: Copilul nu va primi
comenzi prin care s ias de pe dale.
Exemplu: Pentru urmtoarea repartiie de castane pe dale
0
5
7
3
1
2
10
8
4
6
1
1
i pentru k = 4:
a.
Comenzi de la tastatur:
Rezultat afiat pe ecran
B
5
C
6
B
8
C
12
b.
12 > 3
(CNI Satu-Mare 2002 clasa a VI-a)
18) Marius are o org de lumini de form dreptunghiular cu n linii i m coloane de beculee. Funcionarea orgii este
automat, automodificndu-se o dat la 1 secund simultan toate becurile, dup urmtoarea regul: dac un bec are un
numr par de becuri vecine aprinse (n stnga, dreapta, sus i jos) atunci i schimb starea (dac este aprins se stinge,
iar dac este stins se aprinde), ns dac are un numr impar de becuri vecine aprinse i pstreaz starea. tiind
configuraia iniial a orgii determinai cum va arta orga dup k secunde? Restricii:1<=n,m<=100, 1<=k<=500 Date de
intrare: n m dimensiunile orgii, k timpul de rulare a orgii, n linii, fiecare avnd m elemente separate printr-un spaiu,
reprezentnd strile becurilor. Starea unui bec este data prin 1, daca becul este aprins i 0, daca este stins. Date de
ieire: n linii cu m elemente de 0 i 1 reprezentnd configuraia orgii dup k secunde, elementele fiind separate printr-un
spaiu.
Exemplu: Date de intrare: 4 4 3
1001
1100
0111
0000
Rspuns: 0 1 0 0
1111
0011
1111
Explicaie:
1001
1100
1110
0100
1100 0011
1110
1111
80
0111 1001
1011
0011
0000
1000
1010
1111
Not: Dac un element are 0 becuri vecine aprinse, se consider c are un numr par de becuri vecine aprinse
(CNI Satu-Mare 2004 clasa a VI-a)
19) Se consider un text cu lungimea maxim de 255 caractere. Textul este format din cuvinte separate de cel puin un
spaiu. Se cere s se gseasc cuvintele de lungime maxim i toate literele care se regsesc simultan n toate aceste
cuvinte.
(CNI Nvodari 1992 clasa a V-a)
20) Se citesc dou mulimi M1 i M2 de cuvinte precum i un numr natural k. S se aeze cuvintele mulimii M1 unele sub
altele astfel nct literele lor de pe poziia k s formeze pe vertical un cuvnt din mulimea M2. S se afieze unele sub
altele cuvintele din mulimea M1 dup ce au fost ordonate corespunztor. Exemplu: M1=[carte, acesta, arid, rac],
M2=[ cutie, abac, acar, cort], k=2, rezultatul
carte
acesta
rac
arid .
(CNI Nvodari 1992 clasa a VII-a)
21) Se introduce un text format din cuvinte desprite prin oricte spaii i avnd maxim 255 de caractere, toate majuscule.
a) S se afieze toate cuvintele din text, unul dup altul
b) S se gseasc lungimea celui mai mic cuvnt c)
Se citete un cuvnt de la tastatur; s se afieze toate cuvintele din text care au aceeai lungime i sunt formate din
exact aceleai litere cu ale cuvntului dat.
(CNI Buteni 1994 clasa a VII-a)
22) Se consider un ir de cel mult 100 caractere, format din literele mici ale alfabetului englez. Se numete o blb o
secven de caractere care apare n ir de cel puin dou ori i una dup alta. Exempu: abbcabab are blbele b i ab.
a) S se determine cea mai lung blb din irul considerat (ca numr de caractere) b) S se codifice irul dat
nlocuind fiecare caracter cu ultima cifr a lui 2 la puterea x, unde x este codul ASCII asociat literei respective. Exemplu:
Date de intrare abbcabab date de ieire a) ab b) 24482424.
(CNI 1997 clasa a VI-a)
23) Se citete de la tastatur un numr natural n, n<=15). Pentru a codifica un text scris cu cel mult primele n litere mici din
alfabetul englez, se folosesc cele mai mici n numere naturale care au exact 3 divizori. Pentru litera a se folosete cel
mai mic numr cu aceast proprietate, pentru b cel mai mic numr diferit de cel folosit pentru a, etc. a) S se afieze
cele n numere folosite la codificare b) pentru un text dat de la tastatur cu maxim 20 de litere, se cere s se afieze
codificarea textului. Exemplu: pentru n=2 i textul aabbaa, se va afia a) 4 9
b) 449944.
(CNI Sinaia 1998 clasa a VI-a)
24) Se dau dou numere a,b cu maxim 8 cifre. Dup fixarea a dou cifre, cte una din fiecare numr, aceste cifre se
interschimb ntre ele, obinndu-se alte dou numere a, b. De exemplu, din numerele a=23, b=416, fixnd prima cifr
din a i a doua cifr din b, dup interschimbarea lor se obin numerele a=13, b=426. S se determine a i b, astfel
nct suma a+b s fie maxim. Exemplu: a=23, b=416, suma maxim se obine pentru 63 i 412.
(CNI Sinaia 1998 clasa a VI-a)
25) Membrii cercului de electronic de la Clubul Copiilor din Aiud au realizat un robot care tie s se deplaseze la comand.
Astfel comanda Nx deplaseaz robotul x metri spre nord, comanda Ey, Vz, St, deplaseaz robotul respectiv y metri spre
est, z metri spre vest, t metri spre sud (x,y,z,t numere naturale). Un grup de copii dau o serie de comenzi robotului
pentru a-l rtci. La comanda STAI robotul se oprete. Cunoscnd comenzile date, ajutai membrii clubului ca prin
maxim 2 comenzi s readuc robotul n punctul de plecare. Exemplu: N 3 V 5 S 3 E 4 E 5 N 2 STAI robotul
revine la comenzile V 4 S 2.
(InfoStar, Aiud 1997 clasa a VI-a)
26) Se citete de la tastatur un text de maxim 255 de caractere. Singurul separator ntre cuvinte este considerat caracterul
spaiu (SPACE).
a. Se va afia pentru fiecare cuvnt: poziia cuvntului n text, adic al ctelea cuvnt este; numrul de litere; suma
codurilor ASCII ale literelor
b. Se va afia frecvena de apariie a fiecrui cuvnt n text. (CNI Satu-Mare 2002 clasa a VI-a)
27) Sinbad Marinarul viseaz c se afl ntr-o peter cu comori. Peste tot se aflau cufere pline cu bijuterii i monezi de aur.
i n timp ce Sinbad se minuna, se auzi o voce care spuse: Exist o cale de a ajunge aici i dac reueti toate aceste
comori vor fi ale tale. Aceast peter se afl n vrful muntelui Ararat , dar duhurile rele vor ncerca s te opreasc. Tu
trebuie s le nvingi n lupt dreapt. Pentru a deschide petera trebuie s-i aminteti cte duhuri ai nvins i s rosteti
cu voce tare formula magic, care este cel mai mic numr care are att prima cifr ct i numrul de cifre egal cu
81
numrul duhurilor nvinse de tine. n plus, acest numr trebuie s aib proprietatea c orice secven de dou cifre
consecutive trebuie s fie numere prime diferite. n acest moment, Sinbad s-a trezit i vrea s plece n cutarea comorii.
Nu se teme de duhurile rele, dar tie cte calcule necesit cutarea formulei magice (i mai tie c la matematic nu se
descurc foarte bine). De aceea, v roag s-l ajutai.
Sinbad v va spune numrul n egal cu numrul duhurilor nvinse de el, iar voi trebuie s-i spunei formula magic.
n cazul n care nu exist un astfel de numr, transmitei-i c Nu exist. Exemplu: n=3 se va afia 311.
(ONI 2002 clasa a VI-a)
28) Gigel are de rezolvat urmtoarea problem: se consider numrul natural N format din maxim 9 cifre, distincte dou
cte dou i n care nu exist cifra 0. Gigel va trebui s fac bileele pentru fiecare cifr din numr, bileele pe care le va
pune ntr-o cciul, conform urmtorului algoritm: iniial pornete de la ultima cifr a numrului (cifra unitilor) i pune
n cciul bileelul pe care este scris aceast cifr. Dac aceasta este o valoare par, ncepe parcurgerea numrului
spre dreapta, n caz contrar spre stnga, parcurgerea fcndu-se cu un numr de pai egal cu cifra respectiv. n
parcurgerea unui numr spre dreapta se consider c dup ultima cifr urmeaz prima (cea mai semnificativ cifr a
numrului), dup aceasta urmeaz a doua, etc., iar n deplasarea spre stnga dup prima cifr (cea mai semnificativ
cifr a numrului) urmeaz ultima cifr (cifra unitilor), apoi penultima, etc., iar parcurgerea ncepe cu cifra din numr
imediat de lng cifra scris pe ultimul bileel introdus n cciul, respectnd sensul parcurgerii. De exemplu, dac
numrul nostru este 1346, Gigel pornete de la cifra 6, iar biletul pe care s-a scris aceast cifr l pune n cciul.
Parcurge numrul spre dreapta, fcnd 6 pai; trece prin cifrele: 1,3,4,6,1 i se oprete la cifra 3. Deci, n cciul va
pune bileelul pe care este scris cifra 3.
Algoritmul continu pn cnd se termin toate bileelele sau cnd ajunge la o cifr pentru care bileelul cu
valoarea respectiv a fost introdus deja n cciul.
Cerin: n cazul n care algoritmul se ncheie ntruct Gigel a pus toate bileelele n cciul, se va afia cifra de pe
ultimul bileel introdus n cciul, iar n cazul n care Gigel ajunge n timpul parcurgerii la o cifr pentru care bileelul
corespunztor a fost introdus deja n cciul, se va afia valoarea acestei cifre
Date de intrare: Se va citi de la tastatur numrul natural N format din cel mult 9 cifre distincte dou cte dou, n
care nu exist cifra 0.
Datele de ieire: Se va afia pe ecran cifra la care Gigel a ajuns n momentul opririi algoritmului.
Exemple :
1) N=412
Gigel ncepe cu cifra 2 (bileelul cu cifra 2 este pus de Gigel n cciul); fiind valoare par, parcurge spre dreapta
i se oprete la cifra 1, bileelul cu aceast cifr fiind pus n cciul. Cifra 1 fiind impar, continu parcurgerea spre
stnga i se oprete la cifra 4 i pune astfel i ultimul bileel n cciul. Din acest moment nu mai exist bileele nepuse
n cciul i se va afia deci cifra 4 .
2) N=1243
Gigel ncepe cu cifra 3 (bileelul cu cifra 3 este pus de Gigel n cciul); fiind valoare impar, parcurge spre
stnga i se oprete la cifra 1, bileelul cu aceast cifr fiind pus n cciul. Cifra 1 fiind impar, continu parcurgerea
spre stnga i se oprete tot la cifra 3, dar nu mai exist bileelul cu cifra 3 pentru a putea fi pus n cciul. Se va afia
deci, cifra 3.
(ONI Focani 2003 clasa a VI-a)
29) Simpatie mare ntre Ionel i Mrioara, doi elevi venii n tabr la Glciuc! Pentru a scpa de indiscreia colegilor, cei
doi hotrsc s-i trimit mesaje, unul altuia, folosind o metod simpl de criptare: textul de criptat se scrie pe o foaie,
aranjnd literele cuvintelor ntr-un tablou avnd cte 5 caractere pe fiecare linie. Spaiul dintre cuvinte este i el caracter.
Textul astfel aranjat pe un numr suficient de linii pentru a ncape, se citete pe coloane, de sus n jos i de la stnga la
dreapta. n locul spaiilor dintre cuvinte se pun puncte. Tot puncte se pun i la sfritul textului, attea cte spaii libere
sunt rmase la sfritul textului pus n tablou. Exemplu: Pentru textul: Te astept dupa cina la ora 8 se va aranja:
1
T
t
d
c
l
a
2
e
e
u
i
a
3
P
P
N
4
a
t
a
a
o
5
s
82
se va codifica: Ttdclaeeuia..ppn.8ataao.s...r.
Decodificarea mesajului se va face nvers codificrii.
Ajutai-i, realiznd un program care s codifice i s decodifice mesajele celor doi copii. Pentru diferenierea
mesajelor ce trebuie codificate, de cele care trebuie decodificate, primul caracter al mesajului va fi C sau c pentru
codificare, respectiv D sau d pentru decodificare. Aceste caractere, vor fi lipite de prima litera din textul mesajului.
Intrare: CAm un mar
Ieire: A.mm.aurn.
ntrare: dTaGia.aubllcaaa.r.c.
Ieire: Tabara la Galaciuc
(ONI Glciuc 2002 clasa a VI-a)
30) S se calculeze anul, ziua, luna i ora revenirii unei rachete pe Pmnt cunoscnd anul, ziua, luna i ora plecrii i
durata zborului n minute. Zborul dureaz cel mult un an. (CNI Nvodari 1989 clasa a VI-a)
31) Ministerul numerelor are de cteva zile un nou ef. Acesta a dorit s fac o serie de schimbri n ministerul pe care l
conduce i a nceput reorganizarea cu mulimea numerelor naturale n 2 etape: mai nti toate numerele naturale au
fost aezate fr spaiu (sau alt separator) ntre ele. Dup aceast prim etap, mulimea numerelor naturale arta
astfel: 123456789101112131415161718192021222324... A doua etap a reorganizrii a constat n formarea unor noi
grupe: o grup de o cifr, o grup de 2 cifre, o grup de 3 cifre i aa mai departe. Astfel, grupele reorganizate sunt:
1, 23, 456, 7891, 01112, 131415, 1617181, 92021222, 324252627 . Cerin: Pentru un numr natural N dat, s se
afieze prima i ultima cifr din cea de-a N-a grup de cifre obinut dup reorganizare, valori separate printr-un
spaiu. Restricii: 1<=N<=250. Exemplu: Pentru N=8 se va afia: 9 2 (deoarece 9 i 2 sunt prima, respectiv ultima cifr
din grupa a 8 a care este 92021222 )
(ONI Focani 2003 clasa a VI-a)
Clasa a VII-a
1) Se d o expresie aritmetic care conine operatorii +, - i operanzii a, b, c. Cunoscnd valorile operanzilor a, b, c se cere
s se determine valoarea expresiei. Date de intrare: n fiierul expresie.in se d pe prima linie valorile operanzilor a, b, c
(separai prin cte un spaiu), iar pe linia a doua expresia. Date de ieire: n fiierul expresie.out se va scrie valoarea
expresiei. Restricii: a,b,c<32000 i sunt numere naturale nenule
Expresia este corect din punct de vedere matematic i are cel mult 1000 de caractere
Exemplu: expresie.in 7 8 3 a+c-b+c expresie.out 5
(www.contaminare.ro)
2) Se d o secven de maxim 1000 de caractere (numai litere mari i mici ale alfabetului englez i cifre). Cerin:
se cere s se determine cel mai mare numr din secven. Date de intrare: n fiierul nrmax.in se d pe o singur linie,
secvena. Date de ieire: n fiierul nrmax.out se va scrie numrul cerut. Restricii: secvena de caractere din fiier are
maxim 1000 de caractere i cel puin un caracter. Exemplu: nrmax.in A78bx899f7g9
nrmax.out 899 . Observaie: dac nu exist soluie n fiierul nrmax.out se va scrie numrul -1.
3) Pe o insul, dup multiple experimente chimice se produce un fenomen extrem de periculos. Viespile se nmulesc
foarte repede producnd pagube mari. Guvernatorul ia hotrrea ca dup n zile s se evacueze insula. Se cere s se
determine numrul de viespi existente n ziua de plecare, tiind c n prima zi dup fenomen sunt p viespi, n a doua zi q
viespi, iar n zilele cu numrul de ordine k (3kn) numrul de viespi este egal cu de patru ori numrul de viespi din ziua
k-1, minus numrul de viespi din ziua a k-2. Date de intrare: |n fiierul text VIESPI.IN se afl pe prima linie n, iar pe a
doua linie p i q cu un spaiu ntre ele. Date de ieire: |n fiierul text VIESPI.OUT se va scrie pe prima linie numrul de
viespi dup cele n zile. Restricie
1n,p,q100. Exemplu: VIESPI.IN 4 2 3 VIESPI.OUT 37
(ONI. Clasele 7-8, 2001)
4) Gigel are o panglic alctuit din benzi de 1 cm lime, colorate n diverse culori. Panglica are N benzi colorate cu C
culori, culori pe care le vom numerota de la 1 la C. Gigel vrea ca la ambele capete ale panglicii s aib aceeai culoare,
dar cum nu poate schimba culorile benzilor, singura posibilitate rmne tierea unor buci de la capete. Cerin: Scriei
un program care s determine modul de tiere a panglicii astfel nct la cele dou capete s fie benzi de aceeai
culoare, iar lungimea panglicii obinute s fie maxim. Date de intrare: Fiierul de intrare PANGLICA.IN conine:
pe prima linie numerele naturale N i C separate printr-un spaiu;
pe urmtoarele N linii descrierea panglicii: pe fiecare linie un numr natural de la 1 la C, reprezentnd n ordine culorile
fiilor ce alctuiesc panglica.
Date de ieire: Fiierul de ieire PANGLICA.OUT va conine urmtoarele 4 numere:
pe prima linie numrul de fii rmase;
pe linia a doua numrul culorii care se afl la capete;
pe linia a treia cte fii trebuie tiate de la nceputul panglicii iniiale;
83
84
6
12 3 7 16 10 1
5 2 3 6 4 1
85
1) Se consider o list de litere mici ale alfabetului, fiecare avnd o anumit pondere. Se cere completarea unui careu
ptratic, astfel nct s se obin ponderea maxim pe coloane. Pentru aceasta se dau urmtoarele definiii:
1.
Se numete cuvnt un ir de litere mici, cu proprietatea c nu exist x consoane sau y vocale consecutive i nu pot
exista 2 caractere identice consecutive.
2.
Se numete cuvnt de gen masculin, un cuvnt care ncepe i se termin cu consoana.
3.
Se numete cuvnt de gen feminin, un cuvnt care ncepe i se termin cu vocal.
4.
Se numete cuvnt de gen neutru, un cuvnt care ncepe cu consoan i se termin cu vocal, sau ncepe cu
vocal i se termin cu consoan.
Datele se citesc dintr-un fiier cu urmtoarea structur:
pe linia a doua sunt date coordonatele punctelor negre (linie i coloan) separate prin spaiu
pe linia a treia se dau numrul de cuvinte masculine, feminine i neutre utilizate la completarea careului
86
SIR.IN
5
SIR.OUT
111221
10
ron.out
O
ron.out
O
Exemple
87
7)
Bibliografie:
Doru Popescu Anastasiu
Culegere de probleme de informatic, All Educaional, 2000
Marinel erban
Qbasic, Petrion
Mihai Mocanu
333 probleme de programare, Teora
Dan Negreanu
Probleme de matematic rezolvate cu calculatorul, Teora
www.contaminare.ro
88