Sunteți pe pagina 1din 98

3

INSPECTORATUL COLAR JUDEEAN GALAI






ASOCIAIA PROFESORILOR DE INFORMATIC
TUDOR SORIN DIN GALAI
REVISTA DE INFORMATIC
(iM)PULS ++
4

(Re)Descoperim. (Re)Inventm.


La ONI 2009 s-a creat (IM)PULS++.
A prins PULS-ul olimpiadei: ateptri, impresii, rezultate, premii, proiecte de viitor.

Ucenicii jurnaliti au pornit cu emoie pe teren. S-au narmat cu tehnica necesar i au
ateptat ieirea de la proba scris a gimnazitilor i a liceenilor pasionai de informatic i foarte bine
pregtii n domeniu.
Cu primul interviu, greul a trecut. La primul articol, cuvintele nu se lasau nduplecate prea
uor s puncteze esenialul, s surprind emoia concurenilor, satisfacia reuitei, motivaia pentru
viitor.
Redacia a lucrat aproape nonstop la procesarea informaiilor, la aranjarea n pagin, la
echilibrul dintre imagine i cuvnt. S-a lucrat n plin atmosfer de concurs, simeam i noi tensiunea
de a face alegerea cea mai bun. De aici i farmecul activitii.
I-am observat pe tinerii reporteri cum devin din ce n ce mai pasionai de ceea ce fac, cum
i perfecioneaz stilul de lucru, cum caut scnteia care s in treaz atenia cititorilor revistei.
Cu toii ateptam lansarea fiecrui numr n format electronic. Serile s-au ncheiat foarte
trziu, abia dup ce am rsfoit noul numr la cald. Unii i-au descoperit pasiuni, aptitudini n
domeniu, alii au hotrt deja c jurnalismul este o opiune pentru carier; sigur s-au consolidat
prietenii i experiena a devenit o amintire plcut.

La un an de la aceast ucenicie, suntem gata de a continua.

Din (IM)PULS-ul de la ONI, vrem s devin (IM)PULS-ul pentru performan.

Ne dorim s fie o revist de opinie i de informaie interdisciplinar.
De la informatic s ajungem la ... infopoezie.
De la informaie la infodivertisment.
De la infoconcursuri la infointerviuri cu specialiti.

Pe scurt,
inforevista noastr,
a celor interesai de rolul
INFO
(informaticii / informaiei / infoeducaiei)
n devenirea tinerei (info)generaii.

Punem un + pentru latura informativ i un alt + pentru cea infocreativ.

Aadar, dorim (info)succes noii serii a revistei (IM)PULS++!!!
Ateptm colaboratori la fel de motivai ca ucenicii jurnaliti de la ONI!

Cu (IM)PULSUL INFO eti la curent cu ...
Informaia. Noutile. Formulele. Oportunitile.
prof. Ctlina Burlacu
prof. Daniela Nistor, CNVA

5





PROBLEME REZOLVATE, CLASA A X-A

1. ASD(sfat: numele problemei nu are legtura cu textul sau rezolvarea acesteia )
Se spune c demult, n regiunea geto-dacilor, exista un biat numit Deceneu. ntre timp, acesta
fiind foarte iste a fost numit de Burebista neleptul dacilor. Cu timpul, acesta a rezolvat diferitele
probleme de care s-a lovit Burebista. Astfel Burebista a gsit o metoda prin care s-l elimine dintr-o
singur suli aruncat pe conductorul inamicilor. Pentru asta, el trebuia s afle doar poziia acestuia.
Burebista a aflat de la Deceneu c fiecare inamic are asociat cte o cifr i un numr de ordine, iar
pentru a-l gsi pe lider trebuie parcurs irul inamicilor i eliminat unul cate unul mergnd de la stnga
la dreapta din p n p lupttori pn rmane unul. n cazul n care se ajunge n captul din dreapta al
irului de lupttori se continu numrtoarea mergnd n sens invers de la dreapta la stanga etc.
Cerin
S se determine cifra asociat liderului inamic i numrul su de ordine n irul iniial
Date de intrare
n fiierul asd.in se gsesc:
- pe prima linie se afl pasul p cu semnficaiile din problem;
- n cifre reprezentnd numrul inamicilor. ntre cifre nu exist spaii.
Date de iesire
Pe prima linie a fiierului asd.out se vor gsi cifra corespunztoare efului din tribul inamic i
numrul su de ordine.
Restricii i precizri
- 1 < p < 1000;
- Pentru 30% din teste numrul cifrelor este <10
- Pentru 40% din teste numrul cifrelor este >10 si <15000
- Pentru 30% din teste numrul cifrelor este >15 000 si <25000
Exemplul 1
asd.in asd.out
3
82345
8 1

Explicaie:
82345 pornind de la 8 spre dreapta se elimin a 3-a cifr. Se obine: 8245.
8245 se continu de la 4 spre dreapta se ajunge la ultima cifr (5) i se schimb sensul, a 3-a cifr
fiind 4 care se elimin. Se obine: 825
825 pornind de la 2 spre stnga se ajunge la prima cifra (8) i se schimb sensul, a 3-a cifr fiind 2.
Se obine: 85
85 se continu de la 5 i relund spre stnga (fiind ultima cifr se schimb sensul) se ajunge la prima
cifr(8) . Se schimb sensul, urmnd ca a 3 a cifr s fie 5 care se elimin. Va ramane cifra 8. Aceasta
are numrul de ordine 1 n irul iniial.
Exemplul 2
asd.in asd.out
4
17438
7 2
Observaie: prima cifr din stnga are numrul de ordine 1, a doua cifr din stnga are numrul de
ordine 2 etc.
Problem propus de Vlad Radu- clasa a XI-a B CNMK
Profesor coordonator: Neagu Violeta CNMK
REZOLVRI PROBLEME
6


Rezolvare
#include<fstream.h>
#include<conio.h>
#include<iostream.h>
int main()
{int n,j,p,i,k,i1,ok;
char s[100];
fstream f("asd.in",ios::in);
fstream g("asd.out",ios::out);
f>>p;
i=1;
while(f>>s[i]) i++;
n=i-1;
i=1;j=0;i1=1;ok=1;
while(i1!=n)
{ if(s[i]!=' ')
j++;
if(j==p)
{ j=0;s[i]=' ';
if(i==n)
{while(s[n]==' ') n--;
i=n;ok=0;}
if(i==i1)
{while(s[i1]==' ')i1++;

i=i1;ok=0;}
}
if(i==n) k=-1;
else
if(i==i1) k=1;
if(ok==1) i=i+k;
else ok=1;}
g<<s[i1]<<' '<<i1; return 0;}

2. CHEIA
Pentru a sparge sistemul de securitate al unui calculator, un hacker trebuie s-i construiasc un
program care va trebui s sparg un numr n de nivele de securitate. Printr-un nivel de securitate se
nelege o secven de numere indexate ce conine cheia ctre nivelul urmtor.
Numrul de valori dintr-un nivel de securitate este egal cu valoarea cheii gsit pe nivelul
anterior.
Ca programul hackerului s gseasc cheia pentru nivelul de securitate urmtor, el trebuie s
parcurg toat secvena de numere de pe nivelul curent ncepnd cu valoare de indice unu. n
continuare se avanseaz n cadrul aceluiai nivel de securitate la elementul al crui indice se obine
adunnd de fiecare data valoarea elementului curent la indicele pe care l deine aceast valoare.
Ultima valoare parcurs din nivelul curent de securitate este cheia pentru a accesa nivelul urmtor.
Cunoscnd aceste lucruri, hackerul tie c nu poate ajunge la cheia final, necesar pentru a
sparge sistemul de securitate, fr a cunoate cheia iniial i numrul de nivele de securitate, aa c el
a investigat n continuare i a reuit sa gseasc cele 2 valori.
Pentru fiecare test, se asigura o soluie valid.
Cerin:
S se scrie un program C++ ce parcurge cele n nivele de securitate si obine cheia final.

Date de intrare:
Pe prima linie din fiierul CHEIE.IN se vor gsi 2 numere naturale: n (reprezentant numrul de nivele
de securitate) 1<=n<=40 si k (reprezentnd cheia iniial a primului nivel de securitate) 2<=k<=40.
Pe a doua linie din fiier se vor gsi numerele naturale din cele n nivele de securitate (numerele vor fi
cuprinse in intervalul [-40,40] / {0}.

Date de iesire:
Pe prima linie a fiierului se va afia un singur numr k, ce va reprezenta cheia ultimului nivel de
securitate.
"Pentru a reui in via e foarte simplu. Lucrai tot timpul. S nu dai niciodat atenie orei. S nu avei pendul n
biroul sau laboratorul dvs. S nu prsii o lucrare pe care nu ai terminat-o. Nu munca omoar ci sngele ru."
( T.A. Edison )
7

Exemple:
CHEIE.IN CHEIE.OUT EXPLICATII OBSERVATII
3 5
2 2 2 4 -3 3 1 4 -2
1 2 10 -1
10 Numrul de nivele este 3. Cheia
iniial este 5, deci primul nivel de
securitate va fi: 2 2 2 4 -3,

Aadar, cheia nivelului 2 este 4.
Nivelul 2 de securitate: 3 1 4 -2.
Cheia este 4, deci nivelul 3 va fi 1 2
10 -1. Prin parcurgerea ultimului
nivel se va obine cheia final, i
anume: 10.
Datele de intrare se
consider valide
astfel nct prin
parcurgerea unui
nivel de securitate
nu se poate trece la
nivelul urmtor
fr determinarea
valorii cheii!

4 4
3 2 -1 -1 1 2 1 3
2 100 -1
100 Cheia iniial este 4, deci primul
nivel de securitate va fi: 3 2 -1 -1.
Cheia ctre nivelul 2 este 2, deci
nivelul 2 este: 1 2.
Cheia ctre nivelul 3 este 2, deci
nivelul 3 este: 13.
Cheia ctre nivelul 4 este 3, deci
nivelul 4 este: 2 100 -1, deci cheia
finala este 100.

Problema propusa de Jipa Radu- clasa a XI-a B, CNMK
Profesor coordonator: Neagu Violeta

Rezolvare
#include<iostream.h>
#include<fstream.h>
int v[450],n,k;
fstream f("cheia.in",ios::in);
fstream g("cheia.out",ios::out);
int main()
{int x,i,j;
f>>n>>k;
for (i=1;i<=n;i++)
{for (j=1;j<=k;j++) f>>v[j];
x=1;
for (j=1;j<=k-1;j++) x=x+v[x];
k=v[x];}
cout<<k;
f.close();
g.close();
getch();
return 0;}




"O calitate a omului, care nu mi se pare foarte
important este aceea de a persevera. Adesea,
n activitatea omeneasc esenial este
inteligena. Posibilitile nelimitate ale
inteligenei umane se pot ns dezvolta numai
printr-o continu perseveren. Niciodat s nu
uitai c a ncerca nu este totul. Nu trebuie s
lsai nicicnd la jumtatea drumului ceea ce
ai nceput ci trebuie s mergei ntotdeauna
nainte, pn la capt"
( H. Coand )

Pentru a putea ntrebuinta calculatorul la studiul problemelor
concrete, omul e obligat s invete sa gandeasca exact i abstract.
Grigore Moisil
8




PROBLEME PROPUSE

1. (*)Pentru orice numr natural nenul n, definim n! . Prin convenie, 0!=1.
Scriei un program eficient care citete de la tastatur un numr natural nenul n de cel mult 9 cifre i
afieaz pe ecran ultimele dou cifre nenule de la sfritul numrului n!.
2. (*)Scriei un program eficient din punct de vedere al timpului de execuie i al spaiului
de memorie, care citete de la tastatur un numr natural nenul n, cu cel mult 9 cifre i care afieaz pe
ecran cel de al n+lea termen din irul : 0, 0,1, 0,1,2,2, 0,1,2,3,3,3, 0,1,2,3,4,4,4, 0,1,2,3,4,5,5,5,5,5,...
3. (*)Se citesc de la tastatur numere naturale cu cel mult 9 cifre, pn la citirea numrului
0. S se afieye pe ecran cel mai mare numr citit, care are cifrele ordonate (cresctor sau
descresctor). Dac nu exist un astfel de numr, se va afia mesajul :Nu exista!.
4. (**)Scriei un program care citete din fiierul text Numr.in o fracie zecimal i o scrie n
fiierul Numr.out sub forma unei fracii ordinare.
Exemplu1: Exemplu2:
Numar.in Numr.out Numar.in Numr.out
2,(5) 23/9 5 5/1
5. (**)Spunem c un numr b poate nghii un numr a dac numrul a se regsete n
numrul b. Se citesc din fiierul text Numere.in , n aceast ordine b,n i apoi n numere naturale
nenule, cu cel mult 9 cifre. S se afieze pe ecran, cte numere naturale dintre cele n numere citite, pot
fi nghiite de numrul b. Numerele n i b sunt numere natural nenule, cu cel mult 9 cifre fiecare.
6. (**)Fiind dat un ir x1x2 . . . xm, o subsecven a este un ir z1z2 . . . zk pentru care
exist irul de indici i1 < . . . < ik astfel nct . Gsii cea mai lung subsecven
comun a irurilor x1x2 . . . xm i y1y2 . . . yn.
7. (***)Se dau dou iruri de lungimi m si n. S se determine costul minim al operaiilor
de editare necesare pentru a transforma un ir n cellalt, prin adugarea / tergerea / schimbarea unui
caracter.
(Obs: schimbarea are sens dac costul < adugare + tergere). Datele de intrare se citesc din
fiierul Cost.in iar rezultatul se va afia pe ecran.
De pe primele dou linii ale fiierului de intrare se citesc cele dou iruri: S
1
i S
2
(S
1
de
lungime m i S
2
de lungime n).
De pe a treia line a fiierului de intrare se citesc trei numere naturale nenule cu cel mult 3 cifre
fiecare, reprezentnd respectiv : costul operaiei de adugare a unui caracter, costul operaiei de
tergere a unui caracter i costul operaiei de schimbare a unui caracter.
8. (***)Se consider un triunghi de numere naturale format din n linii. Prima linie conine
un numr, a doua, dou numere,, ultima n numere. Cu ajutorul acestui triunghi se pot forma sume de
numere n felul urmtor:
- se pornete cu numrul din linia 1;
- Succesorul unui numr se afl pe linia urmatoare plasat sub el (aceeai coloan) sau pe
diagonal la dreapta (coloana crete cu 1).
Care este cea mai mare sum care se poate forma astfel i care sunt numerele care o alctuiesc?
Exemplu: n=4
2
3 5
6 3 4
5 6 1 4

Se pot forma mai multe sume:
s1=2+3+6+5=16
s2=2+5+4+1=12
s3=2+3+6+6=17 suma maxim


Cum a iesit Bill Gates din Romania ? Cu Ctrl + Alt + Del
9

9. (***)Avnd n vedere dezvoltarea masiv a agriculturii preconizat pentru anul 2010,
miliardarul iepura Petit Dodo Lapin a cumprat n Insula Mare a Brilei un imens teren agricol de
form ptrat, cu aria egal cu 100000000 pogoane, pe care va planta morcovi. Pentru demararea
lucrrilor agricole, Lapin a fcut un mprumut (rambursabil n 20 ani iepureti) la Bank Of Ceylon
(singura banc la care dobnda este mai mic de 50% pe an!) Datorit mprumutului primit n trane,
iepuraul va plantat morcovii pe rnd, pe parcele ptrate, avnd laturile paralele cu axele de
coordonate. Interioarele ptratelor plantate sunt disjuncte! Datorit disponibilizrilor masive, numrul
delicvenilor a crescut exponenial n ultimul an iar Petit Dodo Lapin se ateapt ca terenul cultivat de
el s fie n atenia prdtorilor! Prin urmare, iepuraul i-a propus s instaleze un sistem ultramodern
de supraveghere cu care s poat urmri zi i noapte, parcelele cultivate de el. n urma proiectului
efectuat de Institutul de Proiectri , s-a hotrt ca sistemul de supraveghere s fie instalat n originea
sistemului de coordonate (n punctul O(0,0)). Din punctul de control se poate vedea o parcel dac
exist cel puin dou puncte distincte de coordonate ntregi, situate pe o latur a ptratului
corespunztor parcelei, astfel nct triunghiul determinat de originea sistemului de coordonate i acele
dou puncte s aib interiorul disjunct cu toate celelalte parcele cultivate cu morcovi.
Se cunosc numrul n a parcelelor (ptrate) cultivate de Petit Dodo Lapin, precum i coordonatele
colului stnga sus i a colului dreapta jos ale fiecrui ptrat, Coordonatele sunt raportate la un sistem
ortogonal cu originea n punctul O(0,0).
Cerin
Scriei un program care s determine numrul parcelelor pe care miliardarul iepura le poate urmri
cu sistemul de suraveghere precum i aria suprafeei totale ocupate de parcelele vizibile din punctul de
amplasare al sistemului de supravehere ( originea sistemului de coodonate).
Date de intrare
Fiierul de intrare Lapin.in conine pe prima linie un numr natural n, reprezentnd numrul de
parcele ptrate plantate de bogatul iepura.
De pe fiecare din urmtoarele n lini ale fiierului de intrare se citesc cte 4 numere naturale,
reprezentnd coordonatele colului stnga sus i a colului dreapta jos a unui ptrat pe care vor fi
plantai morcovi.
Date de ieire
Fiierul de ieire Lapin.out va conine dou numere naturale reprezentnd numrul parcelelor
vizible din punctul de amplasare al sistemului de supraveghere i aria suprafeei ocupate de acestea,
scrise pe linii diferite.
Restricii i precizri: 0<=n<=1000; Coordonatele colurilor ptratelor sunt numere naturale nenule,
mai mici sau egale cu 10000.

















Un program pentru calculator face ceea ce ii spui tu sa faca, nu ceea ce vrei tu sa faca.
La originea oricarei erori care este atribuita computerului vei gasi cel putin doua greseli umane, incluzand-
o pe aceea de a da vina pe computer.
Daca constructorii ar face constructiile in felul in care programatorii concep programe, atunci prima
ciocanitoare care ar veni, ar distruge civilizatia.
Erorile nedetectabile sunt infinite in varietate, spre deosebire de erorile detectabile care sunt limitate prin
definitie.
Un afisaj digital furnizeaza informatii gresite cu o precizie mai mare decat a fost posibil anterior.
10

Exemplu
Lapin.in Lapin.out Explicaie
5
3 8 4 7
5 7 7 5
8 6 9 5
10 4 12 2
9 11 12 8
4
26
















Au fost plantate
cu morcovi
5 parcele :















O
Prima parcel are coordonatele colului stnga sus (3,8) i
coordonatele colului dreapta jos (4,7);
A doua parcel are coordonatele colului stnga sus (5,7) i
coordonatele colului dreapta jos (7,5);
A treia parcel are coordonatele colului stnga sus (8,6) i
coordonatele colului dreapta jos (9,5);
A patra parcel are coordonatele colului stnga sus (10,5) i
coordonatele colului dreapta jos (12,3);
A cincea parcel are coordonatele colului stnga sus (9,11) i
coordonatele colului dreapta jos (12,8);
Sunt vizibile primele 4 parcele.
Suma ariilor parcelelor vizibile este : 4+9+4+9=26
12
11
10
9
8
7
6
5
4
3
2
1
0 1 2 3 4 5 6 7 8 9 10 11 12
Probleme propuse de profesor Balacea Georgeta-Iulia,
Colegiul Naional Al.I.Cuza Galai
















"tiina puin i face pe oameni pretenioi, n timp ce tiina mult i face modeti, aa
dup cum spicele goale i nal spre cer capetele lor trufae, n timp ce spicele pline se apleac
spre pmnt sub greutatea lor"
( Leonardo da Vinci )

11




PROBLEME REZOLVATE, CLASELE XI-XII

1. Reele de calculatoare
O companie deine mai multe reele formate din n calculatoare. Intre calculatoarele reelei
exist un numr total de m legturi directe, astfel nct n cadrul aceleiai reele este posibil
comunicarea direct sau indirect ntre oricare dou calculatoare. Se preconizeaz atacul iminent al
unui hacker care va ntrerupe una dintre legaturile directe dintre dou calculatoare dintr-o reea astfel
existnd posibilitatea ca reeaua vizat s nu mai funcioneze la parametrii optimi. O reea este
vulnerabil dac exist cel puin o pereche critic de calculatoare care nu vor mai putea comunica
direct sau indirect. Numrul de perechi critice dintr-o reea se numete Cnumber. Rolul
administratorului reelelor este s determine cte astfel de reele vulnerabile deine compania i care
este valoarea maxim pe care o poate avea Cnumber.
Date de intrare
Prima linie a fiierului de intrare retele.in contine numrul n al calculatoarelor din reele
(fiecare calculator se identific printr-un numr natural din intervalul [1,n]) i numrul m al legturilor
directe dintre calculatoare. Fiecare dintre urmtoarele m linii va conine cte dou numere ntregi x i
y cu semnificaia: exist o legatur direct ntre calculatoarele identificate prin x i y.
Date de ieire
Fiierul de ieire retele.out va conine dou numere naturale reprezentnd numrul de reele
vulnerabile i valoarea maxim pentru CNumber
Restricii i precizri:
1 s n s 100
retele.in retele.out
16 14
1 2
1 4
2 4
4 5
5 6
5 7
6 7
6 15
8 9
8 10
9 10
11 12
12 13
3 14
3 2
Rezolvare
#include<fstream.h>
#include<conio.h>
int a[100][100],n,m,viz[100],gasit;
int wiz[100];
int nrc; //pastreaza numarul componentei
conexe
void df(int nod)
{ wiz[nod]=1;
for(int k=1;k<=n;k++)
if(a[nod][k]==1&&wiz[k]==0) df(k);}
void linie(int l, int &d) //determina daca nodul
l este extremitatea unei muchii care nu
apartine unui ciclu
{for(int i=1;i<=n;i++)
if(a[l][i]==1)
{for(int j=1;j<=n;j++) wiz[j]=0;
a[l][i]=a[i][l]=0;
df(l);
Nu exista limbaj in care sa fie cat de cat dificil sa se scrie un program prost.

12

if(wiz[i]==0) d++;
a[l][i]=a[i][l]=1;
}
}
void dfmr(int nod)
{ viz[nod]=nrc; //se incarca numarul
componentei
for(int k=1;k<=n;k++)
if(a[nod][k]==1&&viz[k]==0) dfmr(k);
}
void main()
{int x,y,j;
fstream f;
f.open("retele.in",ios::in); //memorare matrice
de adiacenta
f>>n>>m;
for(int i=1;i<=m;i++)
{f>>x>>y; a[x][y]=a[y][x]=1;}
for(int nod=1;nod<=n;nod++)
if(viz[nod]==0)
{nrc++; dfmr(nod);}
int cd, max=0, cate=0,g;
for(i=1;i<=nrc;i++)
{ cd=0;
for(j=1;j<=n;j++)
if(viz[j]==i) linie(j,cd);
if(cd) cate++;
if(max<cd/2) max=cd/2;
}
fstream h;
h.open("retele5.out",ios::out);
h<<cate<<" "<<max;
f.close();h.close();
}

2. STAII
Infamul Overmind al zergilor a fost distrus i locul de origine al protossilor din Shakuras st acum n
ruine i fumegnd. Ca Executor i comandant al forelor Protoss rmase tu trebuie acum s reuneti
populaia neputincios de protossi i s i salvezi de zergii care nc ocup cu nepsare pmnturile din
Shakuras. Obiectivul tu este de a prelua controlul unei baze principale a civilizaiei Tassadariana i va
trebui s te foloseti de staiile de emisie recepie pentru c doar acestea ii pot indica baza principal.
Exist perechi de staii de emisie-receptie care emit i receptioneaz n mod direct semnale. Intre doua
perechi de staii x i y care comunic direct timpul de emisie este t . Semnalele la doua staii pot
ajunge fie direct fie indirect prin intermediul altor staii. Evident, pot exista staii situate n baze
diferite care nu vor putea comunica semnale. Staiile care nu emit i nu primesc semnale sunt lipsite de
importan strategic. Vei putea determina o baz principal tiind c n Ziua Q toate staiile vor
ncepe s emit astfel nct fiecare staie va transmite un mesaj tuturor celorlalte staii din interiorul
bazei n care se afl (dou staii se gsesc n interiorul aceleiai baze dac sunt capabile sa-i transmit
informaii direct sau indirect). Semnalele ntre dou staii vor fi transmise pe traseele de comunicaie
care necesit cel mai puin timp i se vor transmite n ambele sensuri. Datorit bruiajului nu se vor
emite concomitent mai multe semnale n interiorul aceleiai baze ci n mod succesiv astfel nct pentru
a-i comunica informaii oricare doua staii dintr-o baza se va consuma o perioada de timp T. O baz
principal va fi indicat de o valoare minim a lui T. Va trebui sa gaseti aceast valoare.
Date de intrare
Fiierul statii.in conine un numr natural n reprezentnd numrul de staii de emisie-recepie. In
continuare, pe linii diferite se vor gsi triplete de numere naturale reprezentnd perechile de staii x i y
i timpul t de emisie de la x la y sau de la y la x
Date de ieire
In fiierul statii.out se va scrie numrul cerut reprezentnd valoarea minima a lui T. Daca nu exist un
astfel de numr se va scrie 0.
Restricii i precizri
1<=n<=100 numr natural
1<=t<=3000 numr natural
Numrul de baze poate fi cel puin 1 i cel mult n.




Este mai usor sa adaptezi specificatia la program decat viceversa.

13

statii.in statii.out
8
1 2 10
1 3 5
2 4 20
3 4 3
1 4 2
2 3 4
5 6 1
6 7 2
7 8 4
6 8 1
7 5 3
24
Timp de executie 1s/test
Rezolvare
#include<fstream.h>
long pinf=400000000;
long a[101][101];
int n,m,viz[101],nrc;
void citire_cost()
{fstream f;
int i,j,x,y;
long c;
f.open("statii.in",ios::in);
f>>n;
//initializare matrice
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(i==j) a[i][j]=0;
else a[i][j]=pinf;
while(f>>x>>y>>c) a[x][y]=a[y][x]=c;
}
void dfmr(int nod)
{ viz[nod]=nrc; //se incarca numarul
componentei
for(int k=1;k<=n;k++)

if((a[nod][k]!=pinf)&&(k!=nod)&&(viz[k]==0
)) dfmr(k);
}
void genarare_matrice_drumuri_optime()
{for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(a[i][j]>a[i][k]+a[k][j])
a[i][j]=a[i][k]+a[k][j];
}
void main()
{int x,y;
citire_cost();
genarare_matrice_drumuri_optime();
for(int nod=1;nod<=n;nod++)
if(viz[nod]==0) //se incearca parcurgerea
numai daca un nod nu a fost deja parcurs
{nrc++;
dfmr(nod);}
long s, min=pinf;;
int k,l, temp[101];
for(int i=1;i<=nrc;i++)
{s=0;k=0;
for(int j=1;j<=n;j++)
if(viz[j]==i) temp[++k]=j;
for(j=1;j<=k;j++)
for(l=1;l<=k;l++)
s=s+a[temp[j]][temp[l]];
if(s<min&&s!=0) min=s;
}
fstream g;
g.open("statii.out",ios::out);
g<<min;
g.close();
}

Probleme propuse de prof. Muunoiu-Novetschi Mona,
Colegiul Naional M.Koglniceanu Galai



"Un bun profesor cnd i nva pe alii, nva i el."
( P.L. Kapia )

14




PROBLEME PROPUSE CLASELE XI-XII

1. (*)De ziua ndrgostiilor elevii clasei a 11-a se hotarasc ca la bal s formeze la primul dans ct
mai multe perechi. Pentru aceasta nu vor ine cont de simpatiile existente, ci vor forma perechile n
modul urmtor: toi elevii se vor aeza pe o singur linie. Prima fat din stnga i primul biat din
dreapta formeaz prima pereche apoi urmatoarea pereche va fi format dintr-un baiat din stnga i o
fat din dreapta i aa mai departe pn nu se mai pot forma perechi. S se afieze perechile formate i
elevii rmai. Datele se citesc din fiierul text Valy.in : De pe prima linie a fiierului se citete numrul
n de elevi iar de pe urmtoarele n linii, numele i sexul. Datele de ieire se vor scrie n fiierul
Valy.out.
Exemplu :
Valy.in Valy.out
10
anca f
lili f
adi b
dana f
oana f
vali b
cristi b
gina f
mimi f
gigi b
anca gigi
adi mimi
lili cristi
vali gina
raman perechile:
dana f
oana

2. (*)Se citete de la tastatur un numr natural n i apoi n numere naturale.
a) S se formeze cu numerele citite o list liniar simplu nlnuit.
b) S se partiioneze irul de numere citite ntr-un numar minim de subiruri strict crescatoare.
Exemplu :
Pentru n=9 , i numerele 9 4 5 2 10 6 3 8 6
Se obtin trei subiruri:
9 10
4 5 6 8
2 3 6
3. (*)Se citesc din fiierul text Liste.in numere ntregi .
a. S se creeze o list liniar dublu nlnuit cu numerele citite.
b. S se insereze ntre oricare dou elemente ale listei create la punctul (a) media
artitmetic a acestora. S se afieze pe ecran elementele listei astfel modificate.
Exemplu:
Liste.in
2,9,12,6,1
se va afia : 2,5.5,9,10.5,12,9,6,3.5,1
4. (**) Fie n un numr natural nenul i k un numr natural, mai mic sau egal dect 20.. S se
calculeze lg(n) cu k zecimale exacte.
5. (**) Bisericue
In clasa a XI-a A sunt n elevi ( emineni), identificai prin numere de la 1 la n (n45). Fiecare
elev are printer ceilali elevi ai clasei, prieteni cu care comunic mai bine. Acestora le transmite o
brf imediat dup ce l afl. Dac elevul i transmite o brf elevului j, nu este obligatoriu ca elevul
j s comunice la fel cu elevul i! (Relaia Transmite brf nu este reflexiv i nici simetric. Ajutai
dirigintele clasei s determine numrul minim de bisericue de elevi care se pot forma cu elevii
"Timpul de care dispunem din abunden odat pierdut, nu mai este niciodat regsit."( B. Franklin )

15

clasei a XI-a A, astfel nct o brf transmis unui elev al bisericuei s poat fi transmis apoi
tuturor elevilor grupului.
Datele de intrare se citesc din fiierul Barfa.in . Acesta conine pe prima linie un numr natural n,
reprezentnd numrul de elevi ai clasei. De pe urmtoarele n linii se vor citi date referitoare la elevii
clasei:
Astfel, de pe fiecare linie i, 1in se vor citi:
Numrul r al relaiilor de forma : elevul i transmite brfa elevului j , urmat de r numere natural
cuprinse ntre 1 i n, reprezentnd numrul de ordine al elevilor din clas crora i le transmite o brf.
Numerele de pe o linie sunt separate printr-un spaiu.
Datele de ieire se scriu n fiierul Barfa.out. Acesta conine o singur linie pe care este scris
numrul grupurilor ce pot fi formate.
Exemplu:
Barfa.in Barfa.out
5 3
1 2
1 3
2 1 5
0
1 4
Explicaii : Sunt 5 elevi n clas;
elevul 1 transmite o brf elevului 2;
elevul 2 transmite o brf elevului 3;
elevul 3 transmite dou brfe: elevilor 1 i 5;
elevul 4 nu transmite brfe;
elevul 5 transmite o brf elevului 4;
Se pot forma 3 bisericue.

6. (**)Se citete din fiierul text Cuvinte.txt format din mai multe linii, un text alctuit
din cuvinte formate din literele mici ale alfabetului englez, separate prin unul sau mai multe caractere
albe. S se creeze un arbore binar de cutare care s cuprind numai cuvintele distincte din text. S se
scrie n fiierul de ieire .Distincte.txt cuvintele din arbore, parcurs n preordine.
Probleme propuse de prof. Georgeta Balacea,
Colegiul Naional Al.I.Cuza
7. (***)Bond-James Bond.
Agentul 007 se afla ntr-o misiune foarte dificil.
Trebuie s se strecoare n baza teroritilor, repectiv s
elibereze din nchisoare ct mai muli ostatici. Se tie ca
inchisoarea are forma unui triunghi echilateral care are
toate ncperile triunghiuri echilaterale de latur 1, ca n
figur. Pe fiecare latur a cldirii exist exact n ncperi.
Fiecare perete al ncperilor unei astfel de cldiri are o
u, iniial deschis. n fiecare ncpere exist un numar
de ostatici. Agentul 007 tie c poate ptrunde n temni
prin unul din colurile nchisorii, oricare ar fi acesta ns
se poate deplasa n nchisoare de la vrful de intrare
spre baza triunghiului, eventual lateral, indiferent din ce
vrf pleac. Dup prsirea unei ncperi din care au
fost luai banii, toate cele 3 ui ale acesteia se nchid automat i nu mai pot fi deschise.
Cerin:
S se determine numrul maxim de ostatici pe care i poate elibera Agentul 007 i numrul de celule
explorate.
s1
s2
s3
s5
s4
s7 s9
s6
s8
16

Intrare:
Fiier de intrare BOND.IN
N numr natural nenul, reprezentnd dimensiunea cldirii;
s
1
numr natural, reprezentnd numarul de detinuti din ncperea de pe primul rnd
al cldirii;
s
2
s
3
s
4
3 numere naturale, reprezentnd numarul de detinuti din ncperile de pe cel de-
al doilea rnd al cldirii;
s
5
s
6
s
7
s
8
s
9
5 numere naturale, reprezentnd numarul de detinuti din ncperile de pe cel de-
al treilea rnd al cldirii;
...
s
N(N-2)+2
... s
N*N
2*N-1 numere naturale, reprezentnd numarul de detinuti din ncperile de pe cel
de-al N-lea rnd al cldirii.
Ieire:
Fiier de ieire: BOND.OUT
numar_detinuti_eliberati suma maxim colectat.
nr numrul de ncperi vizitate.
Restricii
- 1 s n s 50
- s
i
sunt numere naturale, 0 s s
i
s 250 i=1,2,,N;
Exemplu
BOND.IN BOND.OUT
3 102
1 7
8 10 40
5 11 13 19 9 Explicaie
Problem propus de prof. Lucian Dimitrievici,
Colegiul Naional M.Koglniceanu
8. (***)Latime
S presupunem c dorim s desenam un arbore binar pe o foaie de matematic (n care am
numerotat liniile de sus n jos i coloanele de la stnga la dreapta).
Desenul trebuie s respecte urmatoarele reguli:
1. Nodurile situate pe acelai nivel trebuie s fie desenate pe aceeai linie. Nivelul rdacinii arborelui
este 1 i rdcina va fi desenat pe linia 1. Fii rdcinii constituie nivelul 2 i vor fi desenai pe linia 2.
Fiii fiilor rdcinii constituie nivelul 3 i vor fi desenai pe linia 3 etc.
2. Pe fiecare coloan poate fi desenat un singur nod.
3. Nodurile din subarborele stng al unui nod trebuie s fie desenate n coloanele din stnga coloanei n
care este desenat nodul respectiv, iar nodurile din subarborele drept trebuie s fie desenate n coloanele
din dreapta coloanei n care este desenat nodul respectiv.
4.Orice coloan cuprins ntre coloana cea mai din stnga n care este desenat un nod i coloana cea
mai din dreapta n care este desenat un nod trebuie s conin un nod.
S notam cu L cea mai din stnga coloan n care este desenat un nod i cu R cea mai din dreapta
coloana n care este desenat un nod. Limea arborelui binar este R-L+1.
Exemplu:


1

8
10

5

40

13

9
11 19

17

Observati c limea acestui arbore binar este 19.
Putem calcula limea pe fiecare nivel ca fiind diferena dintre numarul celei mai din dreapta
coloanei care conine un nod de pe nivelul respectiv i numrul celei mai din stnga coloanei care
conine un nod de pe nivelul respectiv +1.
Arborele din exemplu are 6 niveluri, limile nivelurilor fiind 1, 13, 18, 18, 13, 12.
Cnd desenam un arbore binar dup aceste reguli ne intereseaz i limea nivelului cu lime maxim
i care este acest nivel. Daca exista mai multe niveluri cu latimea maxima, ne
intereseaz cel cu numarul cel mai mic.
In exemplul de mai sus limea maxim a unui nivel este 18 i ea este atins pe nivelurile 3 si
4, deci nivelul care ne intereseaz este 3.
Cerin
Dat fiind un arbore binar, scriei un program care s determine limea maxim a unui nivel n arborele
desenat dup regulile de mai sus i nivelul cu numrul cel mai mic care are aceast lime.
Date de intrare
Fiierul de intrare latime.in conine pe prima linie un numr natural N reprezentnd numrul de noduri
din arbore. Nodurile sunt numerotate de la 1 la N. Fiecare dintre urmatoarele N linii conine cte 3
numere ntregi separate prin cte un spaiu x s d cu semnificatia "fiul stng al nodului x este s, iar fiul
drept al nodului x este d". Dac un nod nu are fiu stang sau fiu dreptatunci s, respectiv d, pentru nodul
respectiv va avea valoarea -1. Rdcina arborelui este nodul 1.
Date de ieire
Fiierul de ieire latime.out va conine o singur linie pe care se afl dou numere naturale separate
printr-un singur spaiu niv lat cu semnificaia "cel mai mic nivel de lime maxim este niv, iar limea
lui este lat".
Restricii
1<=N<=1000
Exemplu
latime.in latime.out
19
1 2 3 3 18
2 4 5
3 6 7
4 8 -1
5 9 10
6 11 12
7 13 -1
8 -1 -1
9 14 15
10 -1 -1
11 16 -1
12 -1 -1
13 17 -1
14 -1 -1
15 18 -1
16 -1 -1
17 -1 19
18 -1 -1
19 -1 -1
Problem propus de prof. Lucian Dimitrievici,
Colegiul Naional M.Koglniceanu


18

9. (***) NU TE SUPRA FRATE!
Andrei i Dorian sunt doi frai gemeni. Astzi este ziua lor de natere. Cnd s-au trezit, fraii au
intrat ntr-o mare dilem: cum i vor mpri ei cadourile astfel nct s fie mulumii. tiind c fiecare
cadou are o valoare (cuprins ntre 1 i 100 inclusiv) i c pot fi maxim 100 de cadouri, fiind i foarte
buni la informatic, s-au hotrt s scrie un program care s-i ajute s-i mpart cadourile frete
(sumele s fie cele mai apropiate posibil). Au reuit!
Date de intrare:
n fiierul cadou.in se gsesc informaiile referitoare la cadouri: pe prima linie numrul total de
cadouri, pe urmtoarea linie calorile lor.
Date de ieire:
n fiierul cadou.out trebuie scrise dou sume care sunt cele mai apropiate, corespunztoare unei
mpriri a cadourilor, pe a doua linie valorile corespunztoare cadourilor care nsumeaz prima sum
gasit, pe a treia linie, valorile corespunztoare cadourilor care nsumeaz a doua sum gsit.
Exemplu:
Cadou.in Cadou.out
7
28 7 11 8 9 7 27
48 49
28 11 9
7 8 7 27
Problem propus de profesor Popescu Mdlina,
Colegiul Naional Mihail Koglniceanu Galai, OLI-2008


PROBLEME REZOLVATE, CLASA A IX-A
1. NUMERE
Ioana este elev n clasa a IX-a. Ei ii plac proprietile mai neobinuite ale numerelor. De
exemplu, ea consider c 945 este un numr interesant deoarece este primul numar impar pentru care
suma divizorilor este mai mare decat numrul nsui.
Haidei s o ajutm pe Ioana s gseasc numere interesante, scriind un program care
determin numrul care are cei mai muli divizori dintr-un interval dat . Atenie! Dimensiunea
numerelor i marimea intervalului dat ne vor obliga s folosim un algoritm ct mai eficient!
Date de intrare
Din fiierul text Numere.in se citete un numr natural n (1n100).
De pe urmatoarele n linii ale fiierului se citesc extremitile celor n intervale pentru care se dorete
determinarea numrului cu cei mai muli divizori. Dac Li i Ls reprezint limita inferioar respectiv
limita superioar a unui interval atunci 1LiLs1.000.000.000 i 0Ls-Li10.000.
Date de ieire
Pentru fiecare pereche de numere de pe liniile 2n+1 din fiierul intrare se vor scrie n fiierul de
ieire Numere.out dou valori : NMAX NUMAR_DIVIZORI , reprezentnd numrul cu cei mai
muli divizori (NMAX) i numrul lui de divizori (NUMAR_DIVIZORI). Dac ntr-un interval exist
mai multe soluii, se va afia numrul cel mai mic( primul numr din interval, cu proprietatea dat)
Exemplu:
Numar.in Numr.out
5
1 10
1000 1000
2000 10000
100 590
999999900 1000000000

6 4
1000 16
75 60 64
360 24
999999900 192
Problem propus de prof. Ionela Fotache,
Liceul Teoretic Dunrea, OLI-2009
19

Rezolvare
/*se calculeaza numarul de divizori ai numarului natural n astfel: calculeaza toate puterile
numerelor prime din descompunerea lui n si inmulteste de fiecare data la variabila p puterea
respectiva plus 1 se parcurg toate numerele intre cele doua capete si vom retine de fiecare data
numarul cu numar maxim de divizori pana in acel moment programul devine foarte rapid daca
parcurgem numerele prime pana la sqrt(n) deoarece intre sqrt(n)=1 si n poate fi maxim un divizor
prim al lui n la puterea 1 -daca ar fi 2 atunci produsul acestora l-ar depasi pe n*/
#include<fstream.h>
#include<stdio.h>
#include<math.h>
#define integer long int
integer numardivizori(integer n)
{integer p=1, j,alfa=0;
while (n%2==0)
{n/=2;alfa++;}
p*=(alfa+1);
for(j=3;j<=sqrt(n)&& n!=1;j+=2)
{alfa=0;
while(n%j==0)
{ n/=j; alfa++;}
p*=(alfa+1);
if (n==1)break;}
if (n>1) p*=2;
return p;}
void main()
{integer m1,m2, i,j,n,nbun,ndivizori,aux,k=0;
FILE *fin, *fout;
fin=fopen("divizori16.cpp","r");
fout=fopen("divizori26.cpp","w");
fscanf(fin,"%ld\n",&n);
fin>>n;
for(i=0;i<n;i++)
{fscanf(fin,"%ld %ld\n",&m1,&m2);
nbun=m1;
ndivizori=numardivizori(nbun);
for(j=m1+1;j<=m2;j++)
{aux=numardivizori(j);
if(aux>ndivizori)
{nbun=j;ndivizori=aux;}
}
fprintf(fout,"%ld %ld\n",nbun,ndivizori);}
fclose(fin);
fclose(fout);}



2. COMOARA
Profesorul Plesneal, de la coala de Farmece i Vrjitorii de la Hogwards, a ascuns (
pentru zile negre, de recesiune economic) n Pdurea Interzis o comoar ce depea cu mult
averea oricrui alt vrjitor !
La sfritul anului colar ( vrjitoresc ) s-a gndit s ofere ca premiu o parte din monedele
din comoar, acelui elev din anul IV (ultimul an de studiu de la Hogwards) care va putea s o
ctige. Harry Potter s-a hotrt s participe i el la concurs!
Comoara lui Plesneal era format din n grmezi de monede ( fiecare grmad i era format
din m[i] monede). Elevul care dorea s ctige premiul, trebuia s respecte regulile impuse de
profesor :
1) Monedele trebuiau crate de exact n spiridui ;
2) Elevul care dorea s ctige premiul trebuia s aleag (una sau mai multe grmezi) din cele
n grmezi din comoar astfel nct:
a. Dac a ales o grmad, trebuie s ia toate monedele din acea grmad;
b. Numrul totasl de monede rezultat din toate grmezile alese trebuie s se
mpart exact la n;
3) Numrul total de monede din grmezile alese trebuie s se fie cel mai mare posibil.
Dac se dau numrul n de grmezi de monede, numrul m[i] de monede din fiecare
grmad (1 i n s s ), ajutai-l pe Harry Potter s determine mulimea grmezilor care trebuie alese
astfel nct s poat ctiga premiul oferit cu mrinimie de Plesneal !
Datele de intrare se citesc din fiierul Comoara.in
De pe prima linie a fiierului Comoara.inse citete numrul natural nenul n.
tiai c ... primul program scris de Bill Gates a fost X i 0?
20

De pe urmtoarele n linii ale fiierului de intrare se citesc numere naturale nenule ( de pe linia i+1
se citete numrul m[i], reprezentnd numrul de monede din grmada i).
Date de iesire se vor scrie n fiierul Comoara.out
In fiierul de ieire Comoara.out se vor scrie grmezile alese, n ordinea cresctoare a
numrului lor de ordine, cte una pe o linie.
Restricii
1sns60
Exemple
Comoara.in Comoara.out Explicaii
4
5
7
19
20
1
3
4

Sunt 4 grmezi de monede ( n=4)
Grmada 1 are 5 monede, grmada 2 are 7 monede, grmada
3 are 19 monede, grmada 4 are 20 monede.
Harry Potter va selecta grmezile : 1,3,4 ( va ctiga n total
44 monede)
Problem propus de prof. Balacea Georgeta,
Colegiul Naional Al.I.Cuza Galai OLI 2009
Rezolvare
#include <fstream.h>
int n,m[80],lj[80][80],a[80][80],st[80];
void main()
{ fstream f("comoara.in",ios::in);
fstream g("comoara.out",ios::out);
f>>n;
long int i,j,h,k,max,n1;
for (i=1;i<=n;i++) f>>m[i];
f.close();
for(j=1;j<=n;j++)
for(i=0;i<n;i++)
{a[i][j]=-1;
if (m[j]%n==i) a[i][j]=m[j];
h=i-(m[j]%n);
if(h<0) h+=n;
for(k=1;k<=j-1;k++)
if(a[h][k]>0 && a[i][j]<a[h][k]+m[j])
{ a[i][j]=a[h][k]+m[j]; lj[i][j]=k;}}
max=-1;h=0;
for(i=1;i<=n;i++)
if(a[0][i]>max)
{max=a[0][i];h=i;}
j=h;i=0;n1=0;
do
{n1++; st[n1]=j; h=i; i=i-m[j]%n;
if(i<0) i+=n;
j=lj[h][j];}
while (j!=0);
for(i=n1;i>=1;i--)
g<<st[i]<<endl;
g.close();}

21




PROBLEME PROPUSE

1. (*)Mdlina ndrgete mult matematica. De aceea, ea vine mai rar la ore. Cnd, ntr-o
zi, s-a intamplat s fie prezent, Zna Cea Buna a Matematicii i-a oferit n dar un numr natural
nenul. Zna are o baghet fermecat : cnd atinge o dat un numr, acesta se transforma n alt
numr natural, obinut prin nsumarea ptratelor cifrelor numrului iniial. Astfel, dac Madalina a
primit n dar numrul 314, acesta devine 9+1+16=26 dup o atingetre de bagheta. La o noua
atingere, numrul obinut se transform, noul numr fiind suma cuburilor numrului anterior. Deci,
la o noua atingere, 26 devine 4+36=40, apoi 16. Zna atinge numerele pn cand se obine un
ptrat perfect. Scriei un algoritm care s citeasc numrul pe care l primete Mdlina n dar i
care s afieze , pe rnd, numerele obinute la fiecare atingere a baghetei fermecate.
2. (*)Se citesc de la tastatur n-1 numere naturale distincte, cuprinse intre 1 si n,
n 10000000 s . S se determine care numr natural (mai mare sau egal cu 1 i mai mic sau egal
cu n) nu a fost citit.
3. (*)Se citesc de la tastatur n numere naturale , 1n10000000. S se scrie un program
care se determine ultima cifra a sumei factorialelor numerelor citite.
4. (**)Andrei dorete s gseasc parola pe care profa de info a instalat-o pe serverul
liceului. Aceasta era cel mai mare numr format din cifrele de control ale tuturor numerelor
naturale mai mici sau egale dect un numr natural n, stabilit la nceputul anului de Consiliul
Profesoral. Scriei un algoritm care s citeasc numrul n i care s afieze parola corect.
5. (**)Ionu, elev in clasa a 9-a A, realizeaza un program pentru urmatorul joc: se gndete
la un numr natural cuprins intre 1 si 2000000000. Calculatorul trebuie s ghiceasc numrul cu
un numr ct mai mic de ntrebari. Calculatorul continu pe baza rspunsurilor date de elevul
Ionu: mai mic, mai mare.
6. (**)S se scrie un program care s afieze toate numerele perfecte , mai mici sau egale
decat un numr natural n, unde n are cel mult 9 cifre. Un numr natural este perfect dac este egal
cu suma divizorilor si proprii plus 1. Exemplu: 6=1+2+3 este numr perfect.
Probleme propuse de prof. Balacea Georgeta,
Colegiul Naional Al.I.Cuza
7. (***)Joc circular
La ora de sport doamna nvtoare a mbrcat elevii clasei sale cu tricouri numerotate de la 1
la 2*n, i-a aezat n cerc i a nceput un joc n care i numr din p n p i i elimin pe rnd cte
unul . Elevii sunt eliminai pe rnd astfel : mai nti elevii cu tricouri cu numere pare n ordine
crescatoare, iar apoi elevii cu tricouri impare n ordine descresctoare. Precizai cum ordinea n
care doamna nvtoare a eliminat elevii clasei sale.
Restricii 2 s ns15; 1sps15;
Exemplu :
n=4, p=3
2 3 8 4 1 5 6 7
Problem propus de prof. Magdalena Grigore
Colegiul Naional Al.I.Cuza Galai
8. (***)Iepura
De PATE, elevii claselor a IX-a din judeul Galai, au hotrt s duc n dar btrnilor de la
Cminul de btrni dulciuri i portocale. Fiecare elev i dintre cei n elevi care au participat la
aceast aciune, a adus la centrul de colectare cte o saco, care conine un numr de p
i
portocale
i pentru a fi luat n eviden, primete numrul de ordine i. Portocalele trebuie ns s fie
redistribuite, astfel nct n fiecare dintre cele n pungi ce vor fi druite btrnilor s se gseasc
Daca computerele devin prea puternice, le putem organiza intr-un comitet asta o sa le termine.

22

exact acelai numr de portocale (pentru ca btrneii s nu se certe ntre ei)!. In concluzie, s-a
hotrt ca s se selecteze doar acele sacoe cu proprietatea c suma numrului de portocale pe care
le conin se poate mpri exact la cele n pungi cu daruri care se vor duce btrnilor. Sacoele
selectate vor trebui s fie aduse la centrul de colectare a darurilor de ctre elevi cu numere de
ordine consecutive. Determinai grupul de sacoe care vor fi selectate. Dac problema are mai
multe soluii, alegei o soluie pentru care numrul de portocale din fiecare pung cu daruri este
maxim. Portocalele care rmn nedistribuite, vor fi druite profesorilor de informatic (drept pag,
s se mai ndulceasc). Determinai cte portocale vor primi profesorii corupi! Numrul n precum
i numrul de portocale din fiecare saco adus de elevi se citesc din fiierul text Iepuras.txt
9. (***) Campanie electoral
In campania electoral pentru alegerile prezideniale din anul 30004 din MORANIA, o
mic rioar din insula SPERANA, Gyany Cabeli, candidat independent, se hotrte sa-i
focalizeze oferta pe populaia care are venituri relativ mici. Astfel, el promite celor care l vor vota
c le va mri salariul, ntr-un mod spectaculos. Dup statisticile realizate, s-a observat c N
persoane nclin s voteze cu candidatul CABELI. Astfel, dac persoana i (dintre cele N persoane
) are salariul Si(calculat n EURO), dup mrire, va avea salariul Si
N
( Si la puterea N). Totui,
dup consultarea experilor financiari, candidatul a realizat c nu va putea s-i in promisiunea,
avnd n vedere c MORANIA nu este o ar foarte bogat. Pentru a rezolva aceast problem,
fr a mini (n mod evident) electoratul, a adugat la oferta sa, faptul c va mri salariul doar
acelora care, dup mrirea salarial, vor putea sa-i mpart venitul , n mod exact, tuturor celor P
pensionari din ar. Avnd informaii exacte, din sondajele efectuate, relativ la numrul N de
susintori ai lui Gyany Cabeli , salariul acestora i numrul P de pensionari, determinai care va
fi numrul de votani ce vor beneficia de mrirea salarial.
Exemplu:
Pentru N=4( patru alegtori), P=25 (25 pensionari) i salariile :
15
12
5
10 se va obine rezultatul 3 .
Restricii i precizri:
- 2000000 1 s s N , N numr natural.
- 100000 10 s s Si ,Si numr natural , N i s s 1
- P este numr natural , P 1000000 s
Datele de intrare se citesc din fiierul text CAMPANIA.IN, n urmtorul format:
De pe prima linie a fiierului de intrare se citesc, n ordine, numerele N i P
De pe urmtoarele N linii se citesc salariile Si ale susintorilor lui Gyany Cabeli.
Datele de ieire se vor scrie n fiierul text SPERANTA.OUT.
Se va scrie n fiier numrul determinat( numrul de votani care vor beneficia de mrirea
salarial)
Problem propus de prof. Balacea Georgeta,
Colegiul Naional Al.I.Cuza- OLI 2007 Galai









"Fr o mare perseveren nu exist nici talente, nici genii"
( D. Mendeleev )

23

PROBLEME REZOLVATE, CLASA A V-A

1. Se citte de la tastatur un numr natural n, n1000. Se citesc apoi pe rnd n numere
naturale nenule, cu cel mult 9 cifre . S se afiezea perechile de numere prietene (citite
consecutive). Dac nu exist nicio pereche de numere prietene, se va afia mesajul Fara prieteni
!. Dou numere se numesc prietene dac suma divizorilor primului este egal cu celalalt i
viceversa.
Problem propus de elev Alexandru Mocanu,
clasa a V-a, Colegiul Naional Al.I.Cuza Galai
Profesor coordonator Balacea Georgeta
#include<iostream.h>
void main()
{long a[1000],j,i,pa[1000],s,n,ok=0;
cin>>n;
for(i=1;i<=n;i++) cin<<a[i];
for(i=1;i<=n;i++)
{s=0;
for(j=1;j<=a[i]/2;j++)
{if(a[i]%j==0) s=s+j;}
pa[i]=s; s=0;
for(j=1;j<=pa[i]/2;j++)
{if(pa[i]%j==0) s=s+j;}
if(s!=a[i]) pa[i]=0;}
for(i=1;i<=n;i++)
{if (pa[i]!=0)
{cout<<'('<<a[i]<<';'<<pa[i]<<')'<<endl;ok=1
}
if(!ok) cout<<Fara
prieteni!<<endl;}
1. Melc
Un melc parcurge o distan de l cm n fiecare secund. Dupa fiecare n secunde, melcul
devine mai obosit, iar distana parcurs pe secund se njumtete. Scriei un program care
citete numerele naturale l, n i t (t= durata total a deplasrii melcului exprimat n secunde) i
care afieaz distana total pe care a parcurs-o melcul.
Date de intrare
Se citesc de la tastatur numerele naturale l ( distana pe care o parcurge melcul ntr-o secund la
nceputul deplasrii sale) , n ( numrul de secunde dup care melcul obosete iar distana parcurs
ntr-o secund se njumtete) i t ( durata total a deplasrii).
Date de ieire
Se va afia pe ecranul monitorului distana total parcurs de melc, cu dou zecimale exacte.
Restricii
0< l, n, t <30000
Exemple
Date de
intrare
Date de
ieire
Explicaii
7 3 8 35.00 Se citesc de la tastatur valorile :
- l=7 ( la nceputul deplasrii melcul parcurge 4 cm pe secund)
- n=3 ( dup fiecare 3 secunde melcul obosete iar distana parcurs
de el ntr-o secund se njumtete)
- t=8 ( melcul se deplaseaz timp de 8 secunde)
- Distana total parcurs de melc n cele 8 secunde este de 35 cm.
Problem propus de prof. Joc Genia,
Colegiul Naional Al. I. Cuza - OLI 2009, clasa a V-a
Rezolvare
program melc;
var n, t:integer;
d,l:real;
begin
readln(l,n,t);
24

d:=0;
while n<=t do
begin
d:=d+n*l;
l:=l*0.5;
t:=t-n;
end;
d:=d+t*l;
writeln(d:10:2); end.


Probleme propuse
1. (*)Fiind dat un numr natural n cu cel mult 9 cifre, aflai cifra de pe pozitia k (
numaratoarea incepe de la dreapta spre stnga)
Exemplu:
pentru n=1256634 si k=3, se va afisa cifra 6
2. (*) Screi un program care determin numrul de zerouri cu care se termin se termina n!.
Numrul n! este egal cu produsul tuturor numerelor naturale nenule mai mici sau egale cu n.
4!=1*2*3*4=24.
Exemplu:
n=15, n! se termin n 3 zerouri
3. (*) Fiind dat un numr natural cu cel puin 3 cifre i cel mult 9 cifre, afiai numrul format
prin eliminarea primei i a ultimei sale cifre.
Exemplu:
Pentru n=786543 se va afia 8654
4. (**) Scriei un program care determin prima cifr nenul cu care se termin se termina n!.
Numrul n! este egal cu produsul tuturor numerelor naturale nenule mai mici sau egale cu n.
4!=1*2*3*4=24.
5. (**) S se descompun un numr natural nenul cu cel mult 9 cifre n factori primi. S se
afieze factorul prim care apare la puterea cea mai mic i factorul prim care apare la puterea cea
mai mare.
Exemplu : pentru n=4428 se va afia : 4428=2^2 * 3^3 * 41
41 3
6. (**) Se citesc de la tastatur numere naturale pna la citirea numrului 0. S se calculeze
suma dintre primul numr citit, al treilea numr citit,.. i produsul dintre al doilea numr citit, al
patrulea numr citit ... Nu se va ine cont de numrul 0 nici la sum nici la produs.
Probleme propuse de prof. Balacea Georgeta,
Colegiul Naional Al.I.Cuza
7. (***) Dolars
Ptrel are n contul su N dolari. El afl de urmtoarea posibilitate de a-i mri veniturile:
primete o cifr nenul c i trebuie s insereze cifra c oriunde n numrul N, astfel nct numrul
rezultat s fie maxim posibil (contul lui mrindu-se considerabil ). Ajutai-l s-i dea seama n ce
poziie trebuie s insereze cifra C, astfel nct s aib o sum ct mai mare n cont.
Date de intrare
De la tastatur se citesc N i c, cu semnificaia din enun.
Date de ieire
Pe ecran se va afia numrul maxim obinut prin inserarea cifrei c n numrul N.
Restricii, precizri
- N are cel mult 8 cifre
- Cifra c este nenul
25

Exemplu:
N = 472
c = 3
Se va afia: 4732
Explicaie: Numerele care se pot obine sunt 4723, 4732, 4372, 3472, maximul dintre acestea fiind
4732.
Problem propus de Filip Cristian Buruian,
student, la concursul INFO-CNVA, 2006
8. (***) Ctig
Doi frai, Gigel i Bogdnel, au reuit s-i pun de-o parte ceva bnui din alocaie i au
acum, Gigel o sum A iar Bogdnel o suma B (sumele sunt date n euro). Tatl lor, un bancher
vestit, le propune urmatoarea afacere : dac vor lua nota 10 la tez la matematic, el le va da la
fiecare o sum egal cu suma divizorilor comuni ai ptratelor valorilor A i B. Cei doi frai sunt
mai degrab pasionai de fotbal dect de matematic, dar ideea unui ctig le surde. Ins, nainte
de a se apuca de nvat pentru tez, ei vor s tie ce sum ar avea de primit, pentru a hotr daca se
merit sau nu efortul.
Cerin : Scriei un program care citete sumele A i B de la tastatur i afieaz suma pe care o va
primi fiecare dintre frai, n cazul n care ar lua un mult-visat 10 la teza la matematic.
Restricii i precizri
1sA,Bs200
Exemplu
Date de intrare Date de
iesire
Explicatie
A=5 B=10 31 Divizorii comuni ai lui 5
2
si 10
2
sunt : 1, 5, 25, iar suma lor
este egala cu 31
A=14 B=21 57 Divizorii comuni ai lui 14
2
si 21
2
sunt : 1, 7, 49, iar suma
lor este egala cu 57
A=5 B=8 1 Singurul divizor comun al lui 5
2
si 8
2
este 1
Problem propus de prof. Mirela Voinea
la concursul INFO-CNVA, 2005

9. (***) Elevul Gygabyte LowSoft , din clasa a V-a , de ziua ndrgostiilor de
informatic ( 17 februarie) , mparte daruri prietenilor si. LowSoft are foarte muli prieteni! S-a
gndit s cumpere bomboane de ciocolat i s le mpart n mod egal prietenilor si. S-a gndit ca
are numai 17 prieteni i cumpr 11 bomboane. Apoi, numrndu-i prietenii, i-a dat seama c
erau de fapt 1717 copii, drept urmare mai cumpr nc 1111 bomboane. Numrnd din nou, vede
c are 171717 prieteni deci cumpr 111111 bomboane, i tot aa, de n ori, pn cnd numr
17 ... 171717 copii i cumpr 11 ... 111111 bomboane.
2*n cifre 2*n cifre

Gygabyte Lowsoft se gndete s mpart bomboanele n felul urmtor : fiecare dintre cei
17 ... 171717 prieteni va primi un numr de bomboane egal cu suma urmtoarelor fracii:
2*n cifre
17 ... 1717
11 ... 1111
...
171717
111111
1717
1111
17
11
+ + + + .
2*n cifre
Dac suma are n termeni, n citit de la tastatur , ajutai-l pe sracul Lowsoft s rspund la
urmtoarele ntrebri:
1) Primete fiecare copil un numr ntreg de bomboane?
26

2) Cte bomboane primete fiecare copil? ( rspunsul va fi scris pe ecran, sub forma unei
fracii ireductibile)
Exemplu:
Pentru n=2 :
1) Nu
2)
17
22

Restricii i precizri: Date de intrare: n- numar natural nenul, cu cel mult opt cifre.
Problem propus de prof. Balacea Georgeta,
Colegiul Naional Al.I.Cuza- OLI 2006 Galai


Clasa a VI-a, Probleme rezolvate

1. Seif
Hacker-ul Bombonel a fost prins de serviciile de securitate i pentru a i se ierta faptele din
trecut a fost obligat s nceap s lucreze pentru ei. Prima lui misiune este de a sparge o parol a
unui seif ce deine informaii vitale cu privire la securitatea naional. Fiind un profesionist, acesta
a aflat cteva informaii despre parol i anume c sunt doi pai ce trebuie urmai pentru a o afla.
Primul este adunarea binar a n numere, iar al doilea este de a afla suma tuturor numerelor
naturale de la 1 la rezultatul obinut n primul pas. Parola va fi reprezentat de suma obinut.
Bombonel ns, a fost trimis ntre timp n alt misiune i te-a rugat pe tine, ca prieten al lui, s l
ajui.
Date de intrare:
n fiierul hack.in se afl pe prima linie numrul n i pe urmtoarea linie cele n numere
i
desprite
prin spaiu.
Date de ieire:
Pe prima linie a fiierului hack.out se va afla parola obinut dup parcurgerea celor 2 pai.
Restricii:
1sn<2
31
1s
i
<2
15
hack.in Hack.out
3
45 52 3
351
hack.in Hack.out
4
110 5898 4438 902
1066530
Problem propus de catedra de informatic,
CNVA- OLI 2007 Galai
Rezolvare
#include<fstream.h>
int x, n, i; long s, c;
void main()
{fstream f("hack12.in", ios::in), g("hack12.out", ios::out);
f>>n;
for(i=1; i<=n; i++)
{f>>x;s=s^x;}
c=s*(s+1)/2;
g<<c;f.close();g.close();}
27

2. Comoara Ascuns
Pufosu, iepuraul temerar, dorete s-i ascund comoara (cei 100 morcovi gustoi) n
seif. Pufosu ns nu poate s rein codul (format din caractere imprimabile) cu care deschide
seiful! De aceea, s-a hotrt sa-l scrie n fiierul text Pufosu.txt astfel: In fiier sunt scrise mai
multe numere ntregi, cuprinse ntre 20 i 200. Dintre acestea, selecteaz doar numerele
supraperfecte, care reprezint codurile ASCII ale caracterelor din care este compus parola de
deschidere a seifului.
Afiai pe ecran parola cu care Pufosu i poate deschide seiful!
Un numr N este SUPRAPERFECT dac suma S a divizorilor si (exceptand numarul
insui) este mai mare dect N. Exemple de numere supraperfecte:
12<1+2+3+4+6;
Date de intrare:
n fiierul Pufosu.txt se afl pe prima linie numerele naturale cuprinse ntre 20 i 200.
Date de ieire:
Se afieaz pe ecran parola compus din caracterele ale cror coduri ASCII sunt numerele
supraperfecte, dintre cele citite din fiierul de intrare, n ordinea n care au fost citite.
Problem propus de profesor Georgeta-Iulia Balacea,
Colegiul Naional Al.I.Cuza OLI 207 Galai
Rezolvare
#include <fstream.h>
int suma_div(int nr)
{int S=0;
for (int i=1;i<=nr/2;i++)
if(nr%i==0) S+=i;
return S;}
void main()
{int n;
fstream f("pufosu.txt",ios::in);
f>>n;
do { if(suma_div(n)>n)
cout<<(char)n; f>>n; } while(!f.eof());
f.close();}

Probleme propuse

1. (*)Fie numerele naturale nenule, mai mari sau egale dect 2, a i b. Numrul a este un
numr natural scris n baza 10, cu cel mult 9 cifre. Numrul b este un numr natural mai mic sau
egal dect 16 i reprezint o baz de numeraie. Scriei numrul a n baza b.
Exemplu: a= 123 ; b=2; 123
10
=1111011
2

2. (*) Daca p este un numr prim mai mare decat 5, orice numar cu p-1 cifre identice se
imparte exact la p.
Exemplu : numarul 333333 se imparte exact la 7 ; numrul 222222222 se mparte exact la
13 ; Verificai aceast proprietate pentru toate numerele naturale prime p, mai mici sau egale dect
n, unde n este un numr natural mai mare sau egal dect 5 i mai mic sau egal dect 100.
3. (*) Problema maimuei
Pe o insul pustie au naufragiat 3 marinari i o maimu. (Pe insul nu mai triete nici un
alt animal i niciun alt om!). Imediat dup naufragiu, marinarii au cules n nuci de cocos. Noaptea,
primul marinar se trezete, mparte nucile de cocos n trei grmezi egale ( cu acelai numr de nuci
de cocos) dar, ramne o nuc pe care o d maimuei. Dup o lung dezbatere cu sine-nsui, ia o
grmad pe care o ascunde bine i pune nucile din celelalte dou grmezi la loc. Apoi se culc
mulumit! Se scoal al doilea marinar i mparte nucile de cocos rmase n trei grmezi egale ( cu
acelai numr de nuci de cocos) dar, i ramne o nuc pe care o d maimuei. Dup o lung
dezbatere cu sine-nsui, ia o grmad pe care o ascunde bine i pune nucile din celelalte dou
grmezi la loc. Apoi se culc mulumit! Al treilea marinar procedeaz la fel. Dimineaa marinarii
se trezesc, mpart nucile de cocos n trei grmezi egale, le rmne o nuc pe care o dau maimuei i
apoi ia fiecare, frete, cte o grmad.
Dndu-se un numr natural n, cu cel mult nou cifre, determinai:
28

a) Cel mai mic numr natural cu maxim 9 cifre, mai mare sau egal dect n, care ar putea fi
numrul de nuci de cocos culese de cei trei marinari .
b) Pentru numrul determinat la punctul (a) afiai cte nuci de cocos are fiecare marinar
n total.
Exemplu: Pentru n=239 se va afia : 241 ( numrul de nuci de cocos culese este 241)
Primul marinar are 103 nuci de cocos
Al doilea marinar are 76 nuci de cocos
Al treilea marinar are 58 nuci de cocos.
Probleme propuse de profesor Georgeta-Iulia Balacea,
Colegiul Naional Al.I.Cuza
4. (**)Stoluri
De ndat ce frigul a trecut, psrile migratoare care au supravieuit gripei aviare se
pregtesc s se ntoarc acas. eful lor, un btlan btrn i nelept, ncearc s le organizeze.
mparte psrile n stoluri, astfel nct fiecare stol s aib exact x psri. Observ ns c din
ultimul stol lipsete o pasre. Nemulumit, mai face o ncercare: le mparte n stoluri de cte y.
Observ ns cu stupoare c din ultimul stol, tot lipsete o pasre. Nervos de-a dreptul, ncepe s le
mpart cte z n fiecare stol. Incredibil ns, din ultimul stol tot lipsete o pasre. Disperat, o roag
pe barz, care e mai priceput la matematic, s rezolve problema, s gseasc ea o soluie de
mprire n stoluri egale.
Dar grijile btrnului btlan nu s-au terminat, pentru ca el mai trebuie s raporteze la
Asociaia Psrilor Migratoare care e numrul de psri care s-au ntors n ar.
Fie-v mil de bietul btlan i ajutai-l s afle cte psri are n subordine, tiind c numrul
acestora e cel mai mic cu aceast proprietate. Determinai i cte psri va pune barza n fiecare
stol, tiind c ncearc s le mpart n ct mai puine stoluri.
Date de intrare
Se citesc de la tastatur cele 3 numere, x, y i z
Date de ieire
Se afieaz pe un rnd numrul de psri migratoare care se ntorc acas i pe cellalt rnd,
numrul de psri din fiecare stol (dac se poate face o mprire n mai multe stoluri), sau mesajul
IMPOSIBIL, n caz contrar.
Restricii, precizri
- x, y, z e (1,1000]
- x,y i z sunt diferite ntre ele, dou cte dou
Exemple
1) Date de intrare : Date de ieire
x=6 Sunt 119 psri
y=8
z=5
Problem propus de profesor Mirela Voinea,
Colegiul Naional V.Alecsandri
5. (**)Numr ciudat
Ionic, elev n clasa a VI-a, este pasionat de matematic ! Cel mai mult i plac numerele
prime ! In pauza mare, s-a gndit s genereze cel mai mic numr natural format din toate cifrele
numerelor prime mai mici sau egale dect n, unde n este un numr natural,
31
2 n s . Ajutai-l pe
Ionic s rezolve problema ntr-un timp foarte scurt : cel mult 1 scund .
Problem propus de profesor Adriana Brotiuc,
c. gimnazial nr. 29, Galai
6. (**)S.O.S.
La ora de educaie fizic domnul profesor dorete s aranjeze cei n elevi ai claselor a VI-a
pe un singur rnd. Are ns o problem foarte mare: doi biei aezai unul lng cellalt ar vorbi
29

toat ora despre box i ar deranja pe toi ceilali copii! Ajutai-l pe bietul profesor s afle n cte
moduri poate aranja cei n elevi ai claselor a VI-a astfel nct niciun biat s nu aib vecin un alt
biat. Se citesc de la tastatur numerele naturale n(numrul total de elevi) i b(numrul total de
biei din clasele a VI-a).
7. (***)Piramida lui Keops
Gigel, elev n clasa a VI-a, era pasionat de studiul istoriei antice. A gsit la biblioteca colii,
o carte de istorie, scris de HERODOT n anul 450 I.C., cnd a vizitat Egiptul. A descoperit acolo
o hart a piramidei. Camera mortuar a faraonului se afl chiar in mijloc, n inima piramidei i
este accesibila numai din Marea Galerie. Pn acum, nici comoara, nici mumia lui Keops, nu au
fost gsite. Gigel a studiat mai multe documente i a descoperit un coridor secret spre Camera
comorii. Era totui o problem: pentru a putea intra n camera comorii, trebuia descifrat un cifru.
Pe pereii coridorului erau nscrise n numere naturale. Cifrul era cel mai mic numr natural format
din 5 cifre, compus din cifrele zecilor celor n numere naturale. Ajutai-l pe Gigel s descopere
cifrul pentru a intra n camera comorii!
Dac problema nu are soluie, afiai mesajul Cifru eronat. In caz contrar, afiai cifrul gsit.
Exemplu: Pentru n=5 i numerele 10, 21, 35, 49, 86 se va afia cifrul 12348.
Restricii i precizri:
+ 5<=n<=100000 ( n este numrul de numere naturale nscrise pe pereii coridorului)
+ Cele n numere naturale sunt mai mici sau egale cu 2
31
-1
Date de intrare:
+ De la tastatur se citete n, numrul de numere naturale.
+ De la tastatur se citesc cele n numere naturale.
Date de ieire:
Cifrul determinat.
Probleme propuse de profesor Georgeta-Iulia Balacea,
Colegiul Naional Al.I.Cuza-OLI-2007
8. (***)Pinochio
Pinochio, elev n clasa a VI-a, nu are rezultate foarte bune la nvtur. La sfritul
semestrului I, el a rmas corigent la 6 obiecte. Bineneles, l-a minit pe GEPETTO, spunndu-i c
a obinut la toate disciplinele media m , 6sms9, numr natural . Zna cea bun, ocrotitoarea lui
Pinochio, a hotrt sa-l pedepseasc: Timp de z zile, z numr natural, 2sz s365, nasul lui
Pinochio va crete astfel: n prima zi, nasul se lungete cu m milimetri. n a doua zi, nasul lui
Pinochio se mrete cu o lungime de zece ori mai mare dect a crescut n prima zi i cu nc m
milimetri. n a treia zi, bietului Pinochio i crete nasul cu o lungime de zece ori mai mare dect cea
din a doua zi plus nc m milimetri. i tot aa mai departe. n ultima zi ( ziua z) nasul lui Pinochio
crete de 10 ori mai mult dect a crescut n ziua anterioar i cu nc m milimetri. Copil sensibil,
Pinochio sufer cumplit i plnge. Pentru a-i terge lacrimile, copilul folosete n fiecare zi o
batist de hrtie care are lungimea ( n milimetri) egal cu lungimea cu care i crete nasul n ziua
respectiv. Calculai ci metri de hrtie a folosit Pinochio pentru a-i terge lacrimile n cele z zile.
Exemplu: Pentru m=6 i z=3 se va afia 0,738 m .
Restricii i precizri:
+ 2<=m<=9 , m numr natural
+ 2sz s365 , z numr natural
Date de intrare:
+ De la tastatur se citesc m, i z .
Date de ieire:
Lungimea n metri a hrtiei folosite de Pinochio.
9. (***)Tema de vacan
La ncheierea primului semestru, profesorul de informatic propune elevilor clasei a IX-a , ca tem
de vacan, rezolvarea a N probleme. Se tie c un elev poate rezolva ntr-o or una sau dou
30

probleme i c fiecare elev lucreaz exact o or pe zi. Determinai n cte moduri poate un elev i
poate rezolva integral tema de vacan. Exemplu:
Dac N =4 ( patru probleme propuse pentru tema de vacan), un elev le poate rezolva n 5
moduri.
Restricii i precizri:
- 50 1 s s N , N este numr natural.
Date de intrare:
N se citete de la tastatur
Date de ieire:
Numrul de moduri n care un elev poate rezolva tema de vacan, afiat pe ecran.
Probleme propuse de profesor Georgeta-Iulia Balacea,
Colegiul Naional Al.I.Cuza-OLI-2007





PROBLEME REZOLVATE CLASELE VII-VIII

1.Echilibrarea balanei

Caracatia Cauchemar a sehestrat pe toi cei x petiori din familia lui Farnabulle :
Acesta, disperat, ar fi fcut orice ca s poat nmuia inima lui Cauchemar i s-i elibereze
familia.
Cauchemar i-a propus lui Farnabulle s rezolve urmtoarea problem : Se dau m
1
greuti de k
1

kg fiecare i m
2
greuti de k
2
kg fiecare. Caracatia dorete s afle toate modalitile n care poate
s echilibreze o balan care are pe platanul din stnga o greutate egal cu x Kg (cte un kilogram
pentru fiecare petior captiv). Greutile pot fi puse pe ambele platane. Dac balana nu poate fi
echilibrat, Cauchemar va gti o ciorb excelent din toi membrii familiei lui Farnabulle !
Rezultatele se vor scrie n fierul text Balanta.txt sub forma unui tabel cu dou coloane , cu
linii de forma :

Stnga = Dreapta
a*k
i
= b*k
j
unde am1,bm2, i,j=1,2, ij.
Dac balana nu poate fi echilibrat, se va scrie mesajul :Pofta buna, Cauchemar!
De exemplu:
Pentru m1 =5 i m2=5 , k1=2 i k2= 1, x=4.
Se va obine :
Balana.txt
Sanga= Dreapta
4=4*1
4=1*2+2*1
4=2*2
4+2*1=3*2
4+4*1=4*2
Timp maxim de execuie : 0,5 s/test

Problem propus de profesor Ionela Fotache,
Liceul Teoretic Dunrea Galai
Inteligenta artificiala nu se poate compara cu prostia naturala.

31

//echilibrarea balanei
#include<iostream.h>
#include<math.h>
void main()
{float k1,k2,m1,m2;//informatii despre greuti
int x;//greutatea de pe platanul din stanga
float n1,n2;//numar de greuti utilizate pentru echilibrare
unsigned int nrsol;//numar solutii
float c;
cout<<"echilibrare balanta cu 2 tipuri de greuti" <<endl;
cout<<" nr de greuti din fiecare tip: m1 m2 =";cin>>m1;cin>>m2;
cout<<"greutatea pentru fiecare tip :k1 k2 = ";
cin>>k1;cin>>k2;
do
{cout<<endl;
cout<<"Greutatea x (<0 pentru oprire) : ";cin>>x;
if (x>=0)
{nrsol=0;cout<<endl;
for (n1=-m1;n1<=m1;n1++)
{c=(x-n1*k1)/k2;
cout<<"rez="<<c;
if ((c-int(c))==0 && (int(abs(c)))<=m2)
{n2=int(c);nrsol++;
if(nrsol==1) cout<<endl<<"stanga-dreapta";
if (n1*n2<0)
if(n1<0)
cout<<endl<<x<< "+"<<-n1<<"*"<<k1<<"="<<n2<<"*"<<k2;
else
cout<<" "<<x<<-n2<<"*"<<k2<<"="<<n1<<"*"<<k1;
else
{cout<<x<<" ";
if (n1>0) cout<<n1<<"*"<<k1;
if (n1*n2>0) cout<<"+"; //ambele tipuri
if (n2>0) cout<<n2<<"*"<<k2;
}
cout<<endl;
}
}
if (nrsol==0) cout<<endl<<"Balanta nu poate fi echilibrata";
} }
while (x>=0);
}


2. MATRIX
Vasilic este pasionat de filme SF i programare. Filmul lui preferat este MATRIX. Are chiar
i programe de prelucrare a fiierelor video cu ajutorul calculatorului. A realizat capturi i a
inceput s studieze amanunit imaginile de pe ecran. Secvenele lui favorite sunt cele care descriu
matricea reprezentat ca secvene de bii din celebrul film. Vasilic a observat chiar anumite
similitudini ntre liniile care ncarc un ecran.
32

Doua linii se numesc similaredac sunt scrise cu aceleai cifre binare, eventual in alta ordine.
Incantat de descoperirea sa Vasilic a mprit matricea n grupuri de linii similare, ba mai mult,
i-a propus s determine grupul dominant. Un grup se numete dominant daca va conine un
numr maxim de linii similare. Inainte de a ncepe s elaboreze un program care s determine
cte linii similareare grupul dominant dintr-o matrice Vasilic a realizat c poate interveni i o
astfel de problem: matricea poate avea mai multe grupuri dominante. Ajutai-l pe Vasilic s
determine cte grupuri dominante are o matrice i cte linii are fiecare grup dominant.
Date de intrare
Pe prima linie a fiierului matrix.in se afl doua numere naturale M, N ( 2<=M<=3000 si
2<=N<=1000 ). Pe urmatoarele M linii se afla cte N numere naturale avnd valorile 0 sau 1,
reprezentnd matricea.
Observaie: cifrele binare nu sunt separate prin spaiu.
Date de ieire
Pe prima linie a fiierului matrix.out se vor afla doua numere naturale reprezentand numrul
de grupuri dominante i numrul de linii similare dintr-un astfel de grup.
Exemplul 1
matrix.in
7 5
11000
00110
11110
10011
11011
01111
00110
matrix.out
2 3
1 3
Problema propus de prof. Neagu Violeta,
Colegiul National Mihail Koglniceanu Galai-OLI 2008
Rezolvare
#include<fstream.h>
int v[4000];
void main()
{fstream f;f.open("matrix5.in", ios::in);
int m,n;
f>>m>>n;
char x; int max=0,fv;
for(int i=1;i<=m;i++)
{int k=0;
for(int j=1;j<=n;j++)
{f>>x; k+=x-'0'; }
v[k]++;
if(v[k]>max)
{max=v[k]; fv=1;}
else
if(max==v[k]) fv++;
}
f.close();
f.open("matrix5.out",ios::out);
f<<fv<<' '<<max;}


Explicaie: matricea contine un grup dominant care contine 3 linii
similare. Cele 3 linii similare contin aceleasi cifre binare: doua cifre
1 si trei cifre 0 fiecare.

33




Probleme propuse

1. (*)Se citete de la tastatur o fraz de maxim 70 de caractere. S se afieze, cu spaii intre ele,
toate perechile de vocale consecutive din fraz, precum i numrul lor.
2. (*)Dndu-se un tabel unidimensional, care conine maxim 100 numere ntregi, s se afieze
diferena maxim gsit ntre dou elemente consecutive.
3. (*)Se consider o matrice cu n linii i m coloane, cu componente numere ntregi. S se
afieze elementele de pe conturul matricei, ncepnd cu elementul de pe prima linie i prima
coloan, n ambele sensuri de parcurgere.
Probleme propuse de prof. Negu Veronica,
Liceul Teoretic Dunrea
4. (**)S se determine suma elementelor de sub diagonala principal a unei matrici patratice de
ntregi,inclusiv elementele de pe diagonala principal.
Problem propus de prof. Novetschi Monica,
Colegiul Naional M.Koglniceanu
5. (**)Se d un tablou unidimensional V cu n elemente de tip ntreg. S se determine vectorii v1
i v2 astfel nct v1[i] s fie numrul minim format din cifrele lui v[i] i v2[i], s fie numrul
maxim format din cifrele lui v[i].
Problem propus de prof. Stan Maria,
Grupul colar Radu Negru
6. (**)Se dau 2 numere naturale a i b, avnd acelai numr de cifre, n (9<n<=4000000000).
Cerine:
a)Calculai s=a+b
b)Calculai ultima cifr a sumei 1
s
+2
s
+3
s
++2008
s
+2009
s
.
c)Calculai n cte zerouri se termin numrul t!, unde t are primele 4 cifre semnificative date
de primele 4 cifre ale lui | | s i ultimele 5 cifre date de ultimele 5 cifre ale produsului a*b.
Date de intrare:
Cifrele lui a si b citesc din dou fiiere text cifrea.in, respectiv cifreb.in, cte una pe linie,
incepand cu cifra cea mai semnificativ pna la cifra unitilor pe ultima linie(a n-a).
Date de ieire
In fiierul s1.out se vor tipri cifrele sumei s, n fiierul t1.out se vor tipri cifrele lui t! ,iar pe
monitor rezultatul de la punctul b)
Restricii:
- 9<n<=4000000000
- Citirea lui a i b se va face n program sincron , succesiv citind din cele 2 fiiere cifrea.in,
cifreb.in cte o preche de cifre (ai,bi), i=1,n , de pe linia i din fiecare fiier.

7. (***)Se dau 3 balane notate A,B,C, aezate alturat, avnd n fa cte n greuti, de un
singur tip de greuti standard, n
a
, respectiv n
b
, n
c
. Pentru verificarea etalonarii corecte a
dispozitivelor se incearc cntarirea a 3 greuti, G
a ,
G
b ,
G
c
aezate pe talerul din dreapta a fiecrei
balane (G
a
pe balana A, G
b
pe balana B, G
c
pe balana C). Din pcate operatorul observ c
[
=
3
1 i
(G
i
mod n
i
)<>0, ns tot el observ c mutnd greuti de tipuri diferite (conservnd ins
numarul total de greutti de fiecare tip) intre balane i punnd greuti pe talerele din stanga i
eventual i pe cele din dreapta, el poate s echilibreze simultan cele 3 balane. Se cere sa se afiseze
Indiferent ce cauti pe internet, cel putin un site cu probleme se va potrivi cu criteriile tale de cautare.
34

printr-un program in cate moduri se pot echilibra simultan cele 3 balane si care este varianta in
care nr de greuti mutate in total de la o balan la alta este minim.
Date de intrare:
- n<150
- n
a
, n
b
, n
c
, G
a ,
G
b ,
G
c
<100000 miligrame
Probleme propuse de profesor oldan Florin,
Colegiul Naional V.Alecsandri

8. (***)Pofticiosul
La cofetria Pofticiosul, patronul a adus n tipuri de prjituri, cte m prjituri din fiecare
sortiment. O prjitur de tipul i (1si sn) cost C[i] RON. Patronul aeaz prjiturile n vitrin, pe
m rnduri, astfel nct pe o coloan sunt numai prajituri din acelai sortiment. In fiecare sear,
dup nchiderea magazinului, vnztorul Mickey, foarte pofticios din fire, fur toate prjiturile
care se afl n vitrin, ntr-o zon dreptunghiular, avnd colul din stnga sus pe linia XSTG i
pe coloana YSTG, iar colul opus pe linia XDR i pe coloana YDR. Ca patronul s nu observe
paguba, Petric acoper furtul: pe fiecare linie pe care exist spaii libere, deplaseaz spre
stnga toate prjiturile care se afl n dreapta locului liber rmas. Dar, lui Mickey nc i mai este
foame! Astfel nct el repet metoda, i fur iar din prjituri, n acelai mod! Pofticiosul continu
s fure i s acopere paguba de K ori. (Pn se satur!).
Numrul n de sortimente, numrul m de prajituri din fiecare tip, costul fiecrei prjituri n parte ,
numrul K de furturi precum i coordonatele zonelor din care Petric fur prjiturile, se citesc
din fiierul text Mickey.in.
1) Scriei n fiierul text Paguba.out costul prjiturilor furate de Mickey.
2) Scriei n fiierul text Paguba.out configuraia final a vitrinei.
De exemplu, pentru n=6 ( 6 tipuri de prjituri) i m=4 (cte 4 prjituri din fiecare sortiment),
costurile prjiturilor: 1 (o prjitur din sortimentul 1 cost 1 RON); 2(o prjitur din sortimentul 2
cost 2 RON); 3(o prjitur din sortimentul 3 cost 3 RON); 4 ; 5; 6(o prjitur din sortimentul 6
cost 6 RON) i K=2, iniial vitrina cofetriei arta astfel:
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
1 2 3 4 5 6
Dac Petric fur prima dat prjiturile din zona (2,2) (colul stnga sus) i (3,3) (colul dreapta
jos), iar a doua oara din zona (3,3) (colul stnga sus) i (4,4) (colul dreapta jos), dup
acoperirea pagubei, vitrina va arta astfel :
1 2 3 4 5 6
1 4 5 6 0 0
1 4 0 0 0 0
1 2 5 6 0 0

Iar costul prjiturilor furate este de 28 RON.


Restricii i precizri:
- 1sns300
- 1sms300
- 1sKs100
- Costul fiecrei prjituri este un numr natural nenul, mai mic dect 20.
35

Date de intrare:
Fiierul de intrare Mickey.in, conine pe prima linie 3 numere naturale: n, m i K,
reprezentnd numrul de sortimente de prjituri(n) , numrul de prjituri din fiecare sortiment(m)
i numrul de furturi(K).
Pe a doua linie a fiierului de intrare, se afl n numere naturale reprezentnd costurile
prjiturilor, separate prin cte un spaiu.
Pe urmtoarele K linii se afl cte 4 numere naturale nenule, reprezentnd linia i coloana
colului stnga sus (XSTG ; YSTG) , respectiv linia i coloana colului dreapta jos (XDR ; YDR)
al dreptunghiului de unde Petric fur prjiturile. Nu este obligatoriu ca dreptunghiul din care
Mickey va fura s conin prjituri n fiecare loc. Numerele sunt separate prin cte un spaiu.
Pentru exemplul dat, fiierul de intrare va arta astfel :
MICKEY.IN
6 4 2
1 2 3 4 5 6
2 2 3 3
3 3 4 4
Date de ieire:
Fiierul de ieire Paguba.Out va conine pe prima linie un numr natural, reprezentnd
costul prjiturilor furate.
Pe urmtoarele m linii, se fa afia configuraia final a vitrinei cu prjituri. Dac pe linia i,
coloana j, nu se mai gsete nici o prjitur, se va afia 0. Pe fiecare linie, numerele vor fi separate
prin cte un spaiu.
Pentru exemplul dat, fiierul de ieire va arta astfel:
28
1 2 3 4 5 6
1 4 5 6 0 0
1 4 0 0 0 0
1 2 5 6 0 0
Problem propus de profesor Georgeta-Iulia Balacea,
Colegiul Naional Al.I.Cuza-OLI-2007

9. (***)Scufia Roie
In vacana de var, Scufia Roie s-a hotrt s-i duc bunicuei bolnave, n fiecare
zi, gogoi. Fetia poate s-i duc bunicuei n prima zi o gogoa, n a doua zi tot o singur
gogoa, n a treia zi dou gogoi, n a patra zi trei gogoi, n a cincea zi cinci gogoi, n a
asea zi opt gogoi, i aa mai departe.
Drumul spre bunicua trecea ns prin pdure, iar LUPUL sttea la pnd! Era
extrem de periculos, deoarece i LUPULUI i plceau tare mult gogoile, iar fetia risca s-i
duc bunicuei couleul gol, dac se ntlnea cu Lupul.
a) tiind c vacana de var are 50 de zile, determinai cte gogoi ar trebui s duc
Scufia Roie bunicuei bolnave n ziua Z (1sZs50).
b) Dac se tie c Scufia Roie are de dus bunicuei un numr G de gogoi,
determinai care sunt zilele n care fetia ar trebui s mearg la bunicua, astfel nct s fac
un numr minim de drumuri.
Exemplu:
a) Dac Z=7, Scufia Roie ar trebui s duc bunicuei 13 gogoi.
b) Dac numrul de gogoi pe care Scufia Roie trebuie s-l duc bunicuei este 20 de
gogoi, fetia merge la bunicua n urmtoarele zile: 2 ; 5 ; 7.
Restricii i precizri:
Z i G sunt numere naturale, 1sGs2
31
-1 i 1sZs50
36

Date de intrare
Datele de intrare Z i G, se citesc din fiierul text Gogoasa.in .
De pe prima linie a fiierului de intrare se citete numrul natural Z, iar de pe a doua linie se
citete numrul natural G
Date de ieire
Datele de ieire se scriu n fiierul text Gogoasa.out, cu urmtorul format:
+ Pe prima linie a fierului se va scrie numrul de gogoi pe care trebuie sa-l duc
Scufia Roie bunicuei n ziua Z.
+ Pe urmtoarea linie se scriu, n ordine cresctoare, separate prin cte un spaiu, zilele
n care Scufia Roie va merge la bunica.
Pentru exemplul dat:
Fiierul de intrare Gogoasa.in este :
7
20
Fiierul de ieire Gogoasa.out este:
13
2 5 7
Problem propus de profesor Georgeta-Iulia Balacea,
Colegiul Naional Al.I.Cuza-OLI-2007








Legile lui Murphy despre informatica
Hardware: Acele parti ale sistemului pe care le poti lovi cu piciorul.
Software: Acele parti ale sistemului care nu functioneaza.
Hard disk: Acea componenta a sistemului care intepeneste in momentul cel mai nepotrivit cu
putinta.
Periferica: Acele componente care sunt incompatibile cu sistemul tau.
Imprimanta: Acea componenta a sistemului care se blocheaza cand nu te uiti la ea.
Cablu: Acea parte a sistemului care e prea scurta.
Backup: O operatie care niciodata nu este efectuata la timp.
Restaurare: O precedura care functioneaza perfect pana cand e nevoie de ea.
Memorie: Acea parte a sistemului computerizat care este insuficienta.
Mesaj de eroare: O solicitare de aprobare a distrugerii propriilor tale date.
Fisier: Acea parte a sistemului care nu poate fi gasita.
Procesor: Acea componenta a sistemului computerizat care este depasita tehnologic.

37


VI SUAL WEB DEVELOPER - I
ASP.NET este o tehnologie Microsoft
pentru crearea de aplicaii web i servicii
web. ASP.NET este succesorul lui ASP
(Active Server Pages) i beneficiaz de
puterea platformei de dezvoltare .NET, i de
setul de instrumente oferite de mediul de
dezvoltarea al aplicaiei Visual Studio
.NET. Model abstract pentru programarea
Web pe partea de server, bazat pe Web Forms
interactiuneWeb condusa de evenimente
(event driven programming) componenteWeb
executate la nivel de server (proprietati i
evenimente) suport pentru procesari stateful
cu stare (ViewState)
Se stie c .NET Framework este un
mediu de programare obiectual, la nivel
local/distan dar i mediu de execuie
minimiznd efortul de exploatare
(deployment). De semenea ofer suport
pentru dezvoltare la nivel de client (aplicaii
Windows desktop ori mobile) sau server
aplicaii/servicii Web ajungnd la versiunea
4.0. Locul aplicaiilor ASP sub platforma
.NET este reprezentat mai jos

Cteva dintre avantajele ASP .NET sunt:
1. ASP .NET are un set larg de
componente, bazate pe XML, oferind
astfel un model de programare
orientat obiect (OOP).
2. ASP .NET ruleaz cod compilat, ceea
ce crete performanele aplictiei web.
Codul surs poate fi separat n dou
fiiere, unul pentru codul executabil,
iar un altul pentru continutul paginii
(codul HTML i textul din pagin) .
3. .NET este compatibil cu peste 20 de
limbaje diferite, cele mai utilizate
fiind Visual Basic i C#.
Pe lng un sistem de operare Windows
XP sau Vista, pentru a putea creea un site
ASP .NET este nevoie de:
Visual Web Developer 2008 reprezint
unealta celor de la Microsoft cu ajutorul
cruia putem creea pagini web simplu i fr
s scriem prea mult cod. Printre facilitile
oferite de Web Developer amintim
urmtoarele:
1. Obiectele se pot aduga cu uurin. Tot ce
trebuie s facem pentru adugarea unui buton
pe pagin este s tragem obiectul buton din
toolbox (bara de unelte). Acesta are o colecie
de obiecte (imagini, tabele, butoane) ce se pot
trage din panoul cu obiecte direct pe pagina
ce urmeaz a fi publicat..
2. Server integrat. Web Developer are
integrat un server web pentru a putea rula
paginile create. Programarea n ASP .NET
este server side, ceea ce nseamn c codul
trebuie executat pe server iar apoi trebuie
retrimis browserului clientului sub form
HTML. De aceast procedur se ocup
serverul integrat.
3. Verificarea erorilor. Web Developer v
avertizeaz cnd ai scris o linie de cod
eronat i v ofer o posibil soluie pentru a
remedia eroarea. Aceasta ajut n corectarea
i scrierea eficient a codului.
4. Intellisense - se refer la afiarea tuturor
metodelor i evenimentelor unui obiect plus o
scurt descriere. n acest mod vom putea
vedea ce tie fiecare obiect.
5. Debugging. Web Developer v ofer
posibilitatea de a verifica valorile
38

variabilelor, de a urmri codul pas cu pas, sau
de a opri execuia ntr-un punct anume.
Pentru a folosi baze de date, se poate
descrca SQL Server 2005 Express impreun
cu programul de management al bazei de date
SQL Server Management Studio Express.
Acesta v ofer posibilitatea de a creea,
terge i modifica baze de date i tabele cu
uurin precum i rularea de interogri.
Pachetul conine i .NET
FRAMEWORK 3.5, ultima versiune a
coleciei de clase necesare pentru a putea
creea paginile web folosind funcii foarte
folositoare i gata implementate.
Pentru a crea un site nou n Web
Developer procedm astfel. Click pe File ->
New WebSite

n fereastra ce apare putem alege
directorul unde vor fi stocate fiierele ASP
.NET i limbajul de programare: C# sau
Visual Basic. n acest tutorial vom lucra cu
VB.
Dup alegerea directorului site-ului i
a limbajului de programare, va apare codul
surs pentru prima pagina a site-ului
default.aspx:

- n partea de sus-stnga putem vedea
default.aspx. Acesta e fiierul implicit al site-
ului( echivalent n HTML este index.html )
iar dac intrm pe site este primul ce se va
executa.
- tot n stnga sus este toolbox-ul.
Dac trecem cu mouse-ul deasupra se va
afia. Lng butonul X de nchidere al
toolbox-ului este autohide. La un click pe
autohide toolbox-ul va rmne fix.
- jos-stnga vom vedea 3 butoane:
Design, Split i Source. Dac intrm n partea
de Design vom vedea ceea ce se vede efectiv
pe site (butoane, tabele, etc), n partea de
Source vom vedea codul HTML iar Split va
mpri fereastra Web Developer-ului n dou
(pentru Design i Source).
- n partea de jos la Output vom avea
evetualele mesaje de eroare sau alte mesaje.
- n dreapta-sus se afl solution
explorer: lista cu fiierele site-ului. Fiierul
web.config se creaz automat, dar despre el
se va discuta separat. Putem observa un semn
+ n dreptul default.aspx. Fiecare fiier aspx
are separat un fiier cu extensia vb pentru
codul server side ce va fi scris n VB.
- partea din dreapta-jos i anume
properties va fi discutat in unul din numerele
viitoare.
n continuare selectm partea de
Design, i mergem cu mouse-ul deasupra
toolbox-ului.
Alegem obiectul Button (de exemplu)
i l tragem pe spaiul liber pe pagin.

Apsm F5 i serverul integrat va porni.
XXXX
Web Developer v va ntreba dac
dorii debug (click pe OK n fereastra ce
apare). Este bine s folosim debug pentru c
39

dac apare o eroare, Web Developer ne va
semnala eroarea din linia de cod printr-un
mesaj.
n partea de design, facem un click pe
butonul recent adugat i vom avea
posibilitatea de a modifica/adauga Proprieti
i evenimente (Properties, Events).
n seciunea Properties vom vedea i
vom putea modifica o multitudine de
proprieti ce aparin butonului nostru, cum ar
fi culoare, font, buton vizibil sau invizibil,
textul butonului, i altele. Aceste modificri
in de partea interfeei butonului.
Vrem ca butonul nostru s execute
ceva. Pentru aceasta, facem dublu click pe
buton i Web Developer va crea pentru noi
funcia ataat butonului. Functia se salveaya
implicit in fisierul default.aspx.vb. Codul
acestei funcii se va executa cnd vom face
click pe buton(cand aplicaia ruleaz)
Evenimentele reprezint aciunile ce
le execut un obiect. De exemplu, butonul
nostru poate executa un cod la click pe
acesta. Click pe buton reprezint un
eveniment. Evenimentele le putem vedea n
fereastra Properties printr-un click pe iconia
fulger (iconia de lng fulger reprezint
proprietile)

Bibliografie:
Burada Sorin, 2008 introducere in
asp.net, Polirom, Iai
Ttran Mihai, Dumitriu-Lupan Nua
Introducere in .NET Framework, 2008,
suport de curs pentru elevi
http://www.aspxcode.net/visual-web-
developer-2008-express-tutorial.aspx
http://asp.net
ing. Tabacaru Gigi, Col. Th. Paul Dimo


Abu Abdullah Muhammad bin Musa al-Khwarizmi (sau Muhammed ibn Musa
Horezmi ) (n farsi tatrucserp) ,(Al-Horezmi) a fost un savant, astronom/astrolog,
matematician i scriitor persan. S-a nscut probabil n 780, i a murit ctre anul 845 d.Hr. Este
adesea citat ca "printele algebrei", numele acestei discipline matematice avnd la origine titlul
crii sale Hisab o jabr o muqabele. Tot de la el se trage i cuvntul algoritm - procedeu sau sistem
de calcul.
Un algoritm nseamn n matematic i informatic o metod sau o procedur de calcul,
alctuit dintr-o succesiune de operaii elementare necesare pentru rezolvarea unei probleme sau
categorii de probleme. De obicei algoritmii se implementeaz n mod concret prin programarea
adecvat a unui calculator, sau a mai multora. Din diverse motive exist i algoritmi nc
neimplementai, teoretici.
Algoritmul este noiunea fundamental a informaticii. Totul este construit n jurul
algoritmilor (i al structurilor de date, cum ar fi tablourile, listelesau grafurile).
Cteva exemple de algoritmi:
- algoritmul de construcie a unui automobil (urmrind procedeele i schiele de fabricaie);
- algoritmul de folosire a unei maini-unelte (citind manualul de folosire);
- algoritmul de explorare a unui labirint n vederea gsirii unei ieiri (una din soluii: se ine o
mn pe perete i se merge fr a o dezlipi de acesta).
- algoritmul (ordinea operaiilor, sau "check list ") la decolarea unui turbojet. Acest algoritm
desigur nu ine n mod direct de domeniul matematicii sau informaticii.
- algoritm pentru Semnturi Digitale
40

Proprietile algoritmului
Cele mai importante proprieti ale unui algoritm sunt urmtoarele:
- Corectitudinea - este proprietatea algoritmului de a furniza o soluie corect a problemei
date. n acest sens este de dorit ca algoritmii s se bazeze pe fapte i relaii matematice
demonstrabile.
- Caracterul univoc sau deterministic - plecnd de la un set de date iniial anume, rezultatul
este unic, sau altfel spus, repetarea execuiei algoritmului duce ntotdeauna la aceleai
rezultate.
- Generalitatea - este proprietatea unui algoritm de a rezolva o clas sau categorie de
probleme, i nu doar o singur problem particular. Spre exemplu, un algoritm care
rezolv doar ecuaia 2x-6=0 este mai puin general dect unul care rezolv ecuaia ax + b =
0, oricare ar fi valorile lui a i b.
- Claritatea - proprietatea algoritmului de a descrie cu exactitate i fr ambiguiti paii care
trebuiesc parcuri n rezolvarea problemei.
- Verificabilitatea - acea proprietate a algoritmelor care permite ca fiecare pas s poat fi
verificat ntr-un timp rezonabil de ctre om, folosind mijloace de validare de ncredere.
- Optimalitatea - proprietatea unui algoritm de a se termina dup un numr minim de pai.
Spre exemplu, dac se cere s se calculeze suma primelor n numere naturale, putem aplica
formula de calcul, i astfel algoritmul se termin ntr-un singur pas, pe cnd dac am aduna
toate numerele de la 1 la n, el s-ar termina abia n n pai, i deci nu ar fi optim.
- Finitudinea - este proprietatea algoritmului de a se termina ntr-un numr finit de pai.
Exist i algoritmi care nu se termin ntr-un numr mrginit de pai, dar acetia se numesc
"metode algoritmice".
- Eficiena - este proprietatea unui algoritm de a se termina nu numai ntr-un numr finit, ci
i "rezonabil" de pai, chiar dac acesta nu este cel mai mic posibil (nu este optim).
Algorimul este ineficient i dac rezultatul se obine ntr-un timp mai lung dect cel dorit
sau permis.
- Existena unei intrri (datele de prelucrat). ntruct operatorii se aplic unui operand (sau
i mai multor operanzi deodat), este de neconceput un algoritm fr niciun operand.
Intrrile permise formeaz mpreun un set (mulime) specific de obiecte sau valori, care se
numete "domeniul" algoritmului.
- Existena unei ieiri (rezultatele). Este de neconceput un algoritm care nu are nicio ieire,
deoarece n acest caz intr n discuie nsi utilitatea sa!
Clasificarea algoritmilor
n funcie de modul de implementare, un algoritm poate fi:
- recursiv - face uz de sine nsui, n mod repetat
- iterativ (repetitiv)
- serial sau paralel
- deterministic sau aleatoriu (probabilistic)
- exact sau aproximativ
n funcie de metoda utilizat, un algoritm poate fi:
- algoritm backtracking
- algoritm divide et impera
- algoritm de programare dinamic
- algoritm de tip greedy
- algoritmi probabilistici, genetici, euristici .a.

41

Etapele rezolvrii unei probleme
Reprezentarea unei probleme constituie un proces complex, care comport mai multe etape.
1. Analiza problemei
n scopul stabilirii datelor de intrare, precum i a rezultatelor pe care trebuie s le obinem
prin rezolvarea problemei.
2. Elaborarea unui algoritm de rezolvare a problemei.
3. Implementarea algoritmului ntr-un limbaj de programare.
4. Verificarea corectitudinii algoritmului propus.
Un prim pas const n testarea programului pe diverse seturi de date de test. Seturile de date
de test trebuie elaborate cu atenie, astfel nct s se acopere, pe ct posibil, toate variantele de
execuie a algoritmului, inclusiv situaii de excepie, i s verifice dac fiecare subproblem a
problemei date este rezolvat corect (dac este posibil, se va testa separat fiecare modul de
program).
Testarea poate pune n eviden, eventual, omisiuni sau erori de concepie a algoritmilor,
dar nu garanteaz corectitudinea algoritmului. Pentru aceasta ar trebui s testm algoritmul pe toate
seturile posibile de date de intrare, ceea ce este practic imposibil. Din acest motiv, se impune
utilizarea unor metode formale de demonstrare a corectitudinii algoritmului, etap de obicei
deosebit de laborioas, necesit un aparat matematic complex.
Analiza complexitii algoritmului.
n general, exist mai muli algoritmi de rezolvare a unei probleme date. Pentru a alege cel
mai bun algoritm, trebuie s analizm aceti algoritmi n scopul determinrii efecienei lor i, pe ct
posibil, a optimalitii lor.
Eficiena unui algoritm se evalueaz din dou puncte de vedere :
- din punctul de vedere al spaiului de memorie necesar pentru memorarea valorilor
variabilelor care intervin n algoritm (complexitate spaiu);
- din punctul de vedere al timpului de execuie (complexitate timp).
Observaie: Elaborarea algoritmilor nu este un proces liniar, adeseori este necesar s
revenim la o anumit etap i s o repetm. De exemplu, dup ce am demostrat corectitudinea
algoritmului i am analizat eficiena sa, ne putem pune problema de a optimiza algoritmul sau
numai implementarea sa, caz n care trebuie s revenim la cea de a doua etap, de proiectare a
algoritmilor i de scriere a codului, etap urmat n mod necesar de teste de corectitudine,
eleminare a erorilor , demonstraii de corectitudine, teste de determinare a complexitii, analiza
teoretic a complexitii etc.
Date
Orice algoritm lucreaz cu date: date de intrare (datele pe care trebuie s le primeasc din
exterior), date de ieire (datele pe care trebuie s le furnizeze algoritmul n exterior), precum i
date de manevr (date temporare, necesare algoritmului pentru a obine datele de ieire pe baza
datelor de intrare)
Datele cu care lucreaz algoritmii pot fi clasificate din mai multe puncte de vedere. O prim
clasificare a datelor, n funcie de posbibilitatea de a-i modifica valoarea este :
- Constante date care nu i modific valoarea; de exemplu : 10, 3.14, ir de caractere,
A, fals.
42

- Variabile dare care i modific valoarea.

O variabil poate fi referit pritr-un nume(identificator)(o succesiune de litere, caracterul
_ i cifre, primul caracter fiind obligatoriu liter) i are asociat o valoare.Numele unei variablie
nu se schimb pe parcursul algoritmului, dar valoarea acesteia se poate modifica.
De exemplu, pentru rezolvarea ecuaiei de forma ax + b = 0, am utilizat dou variabile a i
b. Prin operaia Citete datele de intrare a i b, acestora li se asociaz cte o valoare real,
introdus de la tastatur. Utilizarea acestor dou variabile era strict necesar, pentru a respecta
generalitatea algoritmului. Dac am fi utilizat dou valori constante (de exemplu, 2 i 8), secvena
de operaii ar fi rezolvat numai ecuaia 2x + 8 = 0 , deci nu ar fi avut utilitate.
Observai c la nceputul algoritmului am specificat (am declarat) faptul c a i b sunt
numere reale. Aceast declaraie este necesar, pentru a cunoate natura valorilor care pot fi
asociate celor dou variabile i, ca urmare, operaiile permise cu acestea. Spunem c am declarat
tipul variabile respective . O variabil poate reine numai valori de tipul declarat.
n funcie de valoarea lor, datele pt fi clasificate astfel :
Date numerice au ca valori numere (naturale, ntregi sau reale);
Date alfanumerice au ca valori caractere sau iruri de caractere ;
Date logice au valoarea adevrat sau fals.
Expresii
O expresie este constituit dintr-o succesiune de operanzi, conectai prin operatori. Un
operand poate fi o constant, o variabil, sau o expresie ncadrat ntre paranteze rotunde.
Operatorii desemneaz operaiile care se execut asupra operanzilor. Operatorii care pot fi utilizai
ntr-o expresie depind de tipul operanzilor (numerici ntregi, numerici reali, caractere, iruri de
caractere sau logici).
O expresie este constituit dintr-o succesiune de operanzi, conectai prin operatori. Un
operand poate fi o constant, o variabil, sau o expresie ncadrat ntre paranteze rotunde.
Operatorii desemneaz operaiile care se execut asupra operanzilor. Operatorii care pot fi utilizai
ntr-o expresie depind de tipul operanzilor (numerici ntregi, numerici reali, caractere, iruri de
caractere sau logici).
Evaluarea unei expresii presupune calculul valorii expresiei, prin nlocuirea valorilor
variabilelor care intervin ca operanzi n expresie i efectuarea operaiilor specificate de operatori.
Principiile programrii structurate
Creterea complexitii aplicaiilor a impus la nceputul anilor `70 apariia unei noi
paradigme n programare : programarea structurat. Scopul era de a dezvolta noi tehnici de
programare, care s permit dezvoltarea unor programe fiabile, uor de elaborat n echip, uor de
depanat, de ntreinut i de reutilizat.
Un prim principiu al programrii strcturare este modulizarea. Pentru proiectarea unor
aplicaii complexe, este necesar descompunerea problemei care trebuie rezolvat n subprobleme
relativ independente, pentru fiecare dintre aceste subprobleme scriindu-se module de program mai
simple. Fiecare modul efectueaz un set de prelucrri specifice i este relativ independent de
celelalte module, cu care comunic prin intermediul unui set de parametri, care constituie interfaa.
Avantajele sunt multiple. Cum la orice firm se lucreaz n echip, modulele de program pot fi
implementate de mai muli programatori. Modificarea unui modul nu afecteaz celelalte module.
Fiecare modul poate fi implementat, testat, depanat, modificat, independent de celelalte.
43

Un alt principiu fundamental este structurarea datelor i a prelucrrilor.
Programatorul are posibilitatea de a-i grupa datele n coleci, organizarea dup anumite reguli,
denumite structuri de date.
Prelucrrile asupra datelor sunt structurare separat. Confotm teoremei de structur Bm-
Jacoppini, orice prelucrare poate fi descris prin compunerea a trei structuri fundamentale :
structura liniar (secvenial), structura alternativ i structura repetitiv.

Reprezentarea algoritmilor
Pentru ca o secven de operaii s constituie un algoritm, ea trebuie s fie clar, adic la
orice moment operaia care urmeaz a fi executat trebuie s fie unic determinat, definit i
realizabil (s poat fi efectuat la momentul repesctiv, cu mijloacele disponibile). De-a lungul
timpului s-au impus dou modaliti de reprezentare a algoritmilor : scheme logice, limbajele de tip
pseudocod i limbajele de programare.
Schemele logice constituie o metod de reprezentare grafic, foarte sugestiv, dar cu o serie
de dezavantaje : se d o egal importan componentelor principale ca i detaliului, prin urmare
schemele logice devin deosebit de stufoase i greu de urmrit; pentru aplicaiile mai complexe,
cnd este necesar modularizarea, este practic imposibil de pus n eviden legturile dintre module
n cadrul schemei logice.
Din acest motiv, treptat s-a impus o alt metod de reprezentere a algoritmilor:
pseudocodul.
Un limbaj de tip pseudocod este un ansamblu de convenii, respectate n mod sistematic,
care definesc operaiile permise (denumite i instruciuni) pentru reprezentarea algoritmilor.

Reprezentarea algoritmilor prin scheme logice

Blocul START Blocul STOP Blocul de CITIRE Blocul de SCRIERE


Blocul de atribuire


Blocul de ramificare








Pentru cazul n =2






c
1
v c
2
v v c
n
= 1 (v = sau logic)
c
i
. c
j
= 0, i = j; i,j = 1,n (. = i logic)
START
STOP
v e
c
1
c
2
c
n

c
c
Citete
date_de_intrare
Scrie
date_de_ieire
c
NU DA
44

S St tr ru uc ct tu ur ri il le e f fu un nd da am me en nt ta al le e d di in n p pr ro og gr ra am ma ar re ea a s st tr ru uc ct tu ur ra at t

- STRUCTURA SECVENIAL (LINIAR)

Schem logic Pseudocod


S1;
S2;
.
.
.
Sn.






1) Declararea datelor
| variabila tip;
La nceputul oricrui algoritm, vom preciza datele de intrare, datele de ieire, eventualele
date de manevr, precum i tipul acestora. nainte de a utiliza orice variabil, o vom declara,
preciznd numele i tipul ei. O variabil nu poate fi declarat de mai multe ori n acelai algoritm.
Exemple :
| x real;
| c caracter;
| i ntrg ;
2) Operaia de citire
| Citete variabila1, variabila 2,........, variabila n;
Efect : Prin operaia de citire (denumit i operaia de intrare) se preiau succesiv valori de la
tastatur i se asociaz, n ordine, variabilelor specificate.
3) Operaia de scriere
| Scrie expresie 1,expresie 2,.,expresie n;
Efect: Operaia de scriere (denumit i operaia de ieire) presupune evaluarea
n ordine a expresiilor specificate i afiarea pe ecran a valorilor lor pe aceeai linie.
4) Operaia de atribuire
| variabila expresie ;
Efect : se evalueaz expresia, apoi se atribuie valoarea expresiei variabilei din membrul stng
Instruciunea compus

Limbajul Pascal Limbajul C/C++

Begin
Instruciune
1
;
Instruciune
2
;
...
Instruciune
n
;
End
{
Declaraii;
Instruciune
1
;
Instruciune
2
;
...
Instruciune
n
;}

s1
s2
sn
45

- STRUCTURA ALTERNATIVA
Schem logic Pseudocod







Efect :
Se evalueaz condiia C
Dac valoarea expresiei este adevrat, atunci se execut instruciunea_1.
Dac valoarea expresiei este fals, se execut instruciunea_2.

Limbajul Pascal Limbajul C/C++

If expresie_logic then
Instriciune
1

[Else
Instruciune
2
]
if (expresie_logic)
Instriciune
1
;
[else
Instruciune
2
;

]
Case expresie_ordinal of
Valori
1
: S
1
;
Valori
2
: S
2
;

Valori
n
: S
n
;
[else S;]
End
switch (expresie)
{
case expreresie
1
: s
1
; [break;]
case expreresie
2
: s
2
; [break;]

case expreresie
n
: s
n
; [break;]
[default :S]
}
Structura repetitiv condiional anterior (structura ct timp )
Schem logic Pseudocod

Ct-timp condiie_C execut
Secven_de_instuciuni



ect:
Pas 1 : se evalueaz expresia ;
Pas 2 : dac valoarea expresiei este fals, se iese din instruciunea Ct-timp;
dac valoarea expresiei este adevrat, se execut instruciunea, apoi se revine la Pas 1.
c
NU DA
A I1
I2
Dac condiie_c
atunci
instruciune_1
altfel
instruciune_2



c
S
Da
Nu
46

Limbajul Pascal Limbajul C/C++

While expresie_logic do
Instriciune;


while (expresie_logic)
Instriciune;

- STRUCTURA REPETITIV CONDIIONAT POSTERIOR ( STRUCTURA REPET
PN CND )
Schem logic Pseudocod


Execut
Instruciune
Ct-timp expresie;



Efect:
Pas 1 : se execut instruciune;
Pas 2 : se evalueaz expresie ;
Pas 3 : dac valoarea expresiei este fals se iese din instruciunea repetitiv;
dac valoarea expresiei este adevrat, se revine la Pas 1;

Limbajul Pascal Limbajul C/C++
Repeat
Instriciune;
Until expresie_logic ;
do
{ Instriciune; }
while (expresie_logic

Structura repetitiv cu contor ( structura pentru, sau cu numr cunoscut de pai )
Schem logic
Pseudocod
pentru v de la e
1
la e
2
cu pasul p execut
instruciune















v:=e1
v<=e2
instr
v:=succ(v)
DA NU
c
s
Da
Nu
47





Este structura cu numr finit de pai (ciclri). Contorul este o variabil care pleac de la o
anumit valoare i parcurge un interval pn la o valoare final. Parcurgerea se face n sens
cresctor sau descresctor, cu pasul 1 sau nu. Uneori, parcurgerea se poate face n salturi, adic nu
neaparat din element n element (pasul 1), ci din dou n dou elemente, sau din trei n trei etc.
Evident, contorul, pasul i cele dou expresii vor fi neaparat valori din mulimi care pot fi
parcurse , de exemplu numere ntregi, litere, nu i cuvinte sau numere reale.

Limbajul Pascal Limbajul C/C++

for v:=e1 to e2 do
instruciune;
for (expresie
init
; expresie
test
; expresie
modif
; )
instruciune;
for v:=e1 downto e2 do
instruciune;

Principiul: v primete valoarea expresiei e1. Apoi, se verific dac s-a depit valoarea
e2. Dac da, ciclul se ncheie, iar dac nu, atunci se execut instruciunea instr, apoi v crete
la succesorul su (n cazul numerelor ntregi, de exemplu, crete cu o unitate), apoi se reia
verificarea condiiei de continuare a ciclului. n forma cu downto, avem un test invers de
continuare, iar n loc de succ, apare pred.
n primul caz, dac e2<e1, atunci nu se execut nimic, trecndu-se imediat dup
ansamblul instruciunii for, iar n al doilea caz, nu se execut nimic atunci cnd e2>e1.

n limbajul C++
for (expresie_initializare; expresie_test; expresie_incrementare) instructiune;
unde:
expresie_initializare = iniializarea variabilei de ciclare. Se poate i declara
(cu valoare iniial)
expresie_test = pentru a testa dac se execut instruciunea subordonat (dac
expresia produce o valoare diferit de 0 subordonata se execut)
expresie_modif = pentru incrementarea variabilei de ciclare
Principiul:
pas1: se evalueaz expresie_initializare;
pas2: se evalueaz expresie_test. Daca produce o valoare diferit de 0 se
execut instruciunea subordonat i se trece la pas3. Dac produce o valoare=0 nu se mai
execut instruciunea for;
pas3: se evalueaz expresie_incrementare i se revine la pas2.
Dac, din greeal, lipsete expresie_test programul va cicla la nesfrit. Se va opri
cu CTRL+PAUSE sau CTRL+ALT+DEL.

Prof. Georgeta Balacea
Prof. Luminia Cobzaru





Pentru a putea ntrebuinta calculatorul la studiul problemelor concrete, omul e obligat s invete sa gandeasca
exact i abstract. Grigore Moisil
48


COMPETENA DIGITLA O NECESITATE PERMANENT A SOCIETII
Profesor Maria Stan
Grupul colar Radu Negru Galai

Ritmul de ascensiune al tehnologiei
informaionale a schimbat radical modul de
viat, de comunicare, de recepionare a
informaiilor.
n secolul acesta i mai ales n cel
urmtor este de ateptat ca rolul calculatorului
n viaa noastr sa fie esenial ; oricine va
trebui s stpneasc acest domeniu pentru a
obine cu uurin ceea ce i dorete: o carier,
un loc de munc, succes.
Folosirea calculatorului poate fi i o
lecie de logic; cine nelege regulile dup
care funcioneaz computerul i lucrurile din
viaa sa se vor desfura sub semnul ordinii .
Pentru a-i croi drum n viitor, este necesar
dotarea colilor cu calculatoare pentru ca nc
din perioada de formare elevul, s beneficieze
de competene digitale, de arta comunicrii
cu ajutorul calculatorului.
Ce nelegem prin termenul
competen digital? S ne gndim n
primul rnd, ce nelegem atunci cnd spunem
c o persoan tie s utilizeze calculatorul?
Fiecare intervievat va rspunde n mod
diferit ntrebrilor de mai sus, vom obine n
mod sigur argumente total diferite, cu puncte de
vedere diferite. n primul rnd, sintagmaa
utiliza calculatorul evoc o imagine care
cuprinde cunotinele i deprinderile tehnice de
baz necesare oricrui utilizator al zilelor
noastre. n ierarhia competenelor pe care le
achiziionm pe parcursul vieii, acest tip de
cunotine i deprinderi tind s coboare spre
nivelul bazal, al deprinderilor de tipul scris-
cititului, deprinderi care ne ofer n primul rnd
posibilitatea accesului la informaie. Se poate
spune c ne aflm n plin proces de realizare a
unui nou tip de alfabetizare.
Chiar i numai la nivel implicit, fiecare
dintre noi acceptm ideea c acest tip de
competen funcional, se implic la nivel de
funcionare cognitiv: persoana care utilizeaz
tehnologia informatic n activitatea sa trebuie
s nvee s s scrie i s citeasc dar, n
acelai timp, s analizeze critic, s interpreteze
i s contextualizeze informaia la care are
acces n site-uri web, forumuri de discuie, chat
, blog-uri ialtele.
O abordare foarte larg a cunotinelor
de utilizarea a calculatorului (computer
literacy) a fost propus de Shapiro i Hughes
(1996), care descriu un curriculum pentru
nvarea utilizrii calculatorului bazat pe apte
dimensiuni, fiecare dimensiune fiind la rndul
su o alt competen:
Utilizarea instrumentelor informatice (tools
literacy) a nelege i utilize instrumente IT,
inclusiv elementele hardware, software i
multimedia.
Utilizarea resurselor (resource literacy) a
nelege formele i metodele de acces la sursele
de informaie, n special cele afate n reea.
Competena social-structural (social-
structural literacy) a nelege situaia social
i producerea de informaie.
Cutarea informaiei (research literacy)
utilizarea instrumentelor TIC pentru cercetare i
educaie.
Publicarea informaiei (publishing literacy)
abilitatea de a comunica i publica o informaie.
Dezvoltarea noilor tehnologii (emerging
technology literacy) capacitatea de a nelege
inovaiile n domeniul TIC i de a lua decizii
inteligente cu privire la implementarea noilor
tehnologii.
Atitudine critic (critical literacy) abilitatea
de a evalua n mod critic beneficiile i costurile
tehnologiilor informaiei (de notat c aceasta nu
este similar gndirii critice despre care vom
vorbi n continuare).
Dac elevii sunt orientai cu ncredere
spre schimbare, ei vor simi nevoia de a fi
instruii ct mai bine pentru a face faa noilor
tipuri de profesii. Eecul n dezvoltarea
capacitii de a reaciona la schimbare poate
atrage dupa sine pasivitatea i incapacitatea de
a se acomoda la lumea IT.
49

Tehnologiile digitale nu trebuie s
reprezinte o simpl adugare n planul de
nvmnt, ele trebuie sa fie integrate deplin
n serviciul educaiei la toate nivelurile
sistemului colar. Actorii educaionali trebuie
s fie formai pentru a face fa schimbrii,
incertitudinii i inovrii. Complexitatea
crescut a colilor i mediilor de nvaare de
astzi sugereaz nevoia realizrii ntr-o nou
manier a activitilor educaionale.
Astfel actul nvrii nu mai este
considerat a fi efectul demersurilor i muncii
profesorului, ci rodul interaciunii elevilor cu
calculatorul i al colaborrii cu profesorul.
Aceast schimbare n sistemul de
nvmnt, competenele digitale vizeaz
urmtoarele obiective :
1. Creterea eficienei activitilor de
nvare;
2. Dezvoltarea competenelor de
comunicare i studiu individual.
Atingerea acestor obiective depinde de
gradul de pregtire a profesorului n utilizarea
calculatorului, de stilul profesorului, de
numrul de elevi, de interesul, cunotinele i
abilitile acestora, de atmosfera din clasa i
tipul programelor folosite, de timpul ct se
integreaz softul n lecie, de sincronizarea
explicaiilor cu secvenele utilizate, de metodele
de evaluare, de fiele de lucru elaborate.
De asemenea calculatorul este extrem de
util deoarece stimuleaz procese i fenomene
complexe pe care nici un alt mijloc didactic nu
le poate pune att de bine n eviden. Astfel,
prin intermediul lui se ofer elevilor, modelri,
justificri i ilustrri ale conceptelor abstracte,
ilustrri ale proceselor i fenomenelor
neobservabile sau greu observabile din diferite
motive. Calculatorul este folosit pentru
dezvoltarea capacitilor de comunicare, pentru
colectarea, selectarea, sintetizarea si
prezentarea informaiilor, pentru
tehnoredactarea unor referate. Astfel elevii i
dezvolt capacitatea de a aprecia critic
acurateea i corectitudinea informaiilor
dobndite din diverse surse.
Tehnica modern i nvmntul
centrat pe nevoile, dorinele si posibilitile
elevului impune desfurarea de activiti
difereniate pe grupe de nivel.
Dei avantajele utilizrii TIC n educaie
sunt numeroase, elevul nu trebuie transformat
ntr-un robot care s tie doar s foloseasc
calculatorul. El trebuie s realizeze atunci cnd
este posibil experimentele reale, deoarece i
dezvolt spiritul de observaie, capacitatea de
concentrare, rbdarea, atenia, abilitile
practice.
Se poate spune ca integrarea resurselor
TIC n educaie este benefic i duce la o
cretere a performanelor colare, cu condiia ca
elevii s posede cunotine de utilizare a
calculatorului. Aceasta implic introducerea
orelor de informatica i TIC la toate profilurile
i la toate treptele de nvmnt. TIC nu
trebuie s fie doar un instrument pentru a
prezenta coninuturile existente ntr-o alt
manier, trebuie s duc la modificarea
modului de gndire i stilului de lucru la clas
al profesorilor, cristalizate n secole de
nvmnt tradiional, prea puin preocupat de
personalitatea i de posibilitile elevului.
n concluzie putem spune c se remarc
faptul c tendinele dominante ale ariei
Informrii & Comunicrii sunt orientate spre
dezvoltarea inteligenei economice, spre
dezvoltarea traseelor informaionale
caracteristice noii Societi Informaionale a
secolului 21, n care reprezentm starea de
fapt a prezentului i viitorului
Bibliografie:
1. http://marinvlada.googlepages.com
2. COMPETENA DIGITAL - ANA-
MARIA MARHAN - publicaii WEB - 2009
3. Vlada, Marin (2009) Utilizarea
Tehnologiilor eLearning: cele mai importante
10 initiative si proiecte din Romania. Ed:
Elearning.Roman, 2009.
4.. Dertouzos, M., Ce va fi. Cum vom tri n
noua lume a informaiei, Bucureti:
Ed.Tehnic, 2000.
5. Lynch, C, Information literacy and
information technology literacy: new
components in the curriculum for a digital
culture, 2004,
http://staff.cni.org/~clifford/papers/cni-info-it-
lit.html.
6. Brouwer, P.S., Critical thinking in the
information age, Journal of Educational
Technology Systems, 25(2), 2008 .
50


Elaborat de Maria si Corneliu Hahui
Matematicianul german Peter Gustav Dirichlet
(1805-1859) a elaborat un principiu extrem de
simplu cu aplicatii neasteptate in variate
domenii, principiu care-i poarta numele si pe
care-l enuntam mai jos, fiind o demonstratie de
tipul urmator : ,,daca repartizam n+1 obiecte in
n cutii atunci cel putin doua obiecte vor fi in
aceeasi cutie.Justificare :consideram cazul cel
mai nefavorabil asezand in fiecare cutie cate un
obiect. Deci am folosit ,, n cutii si ,, n
obiecte. Obiectul cu numarul n+1 trebuie pus si
el intr-o cutie oarecare dar in acea cutie exista
deja un obiect. Asadar avem o cutie cu doua
obiecte. Nu este important care cutie contine cel
putin doua obiecte, nici cate obiecte sunt in
acea cutie si nici cate astfel de cutii exista.
Important este ca exista cel putin o cutie cu cel
putin doua obiecte.
In literatura matematica principiul lui Dirichlet
este intalnit si sub denumirea de ,,principiul
cutiei, cu precizarea ca denumirea de ,,cutie
desemneaza ,,grupe de obiecte, stabilite dupa
anumite, iar ,,obiectele desemneaza lucruri,
numere, figure geometrice, etc. La rezolvarea
unor probleme este util de aplicat principiul
Dirichlet generalizat.
Daca plasam pn + 1 obiecte in n cutii, atunci
cel putin o cutie va contine cel putin
"p+1"obiecte. Unele probleme (in special ce
tin de geometrie) se rezolva, utilizand principiul
Dirichlet in urmatoarele enunturi:
a) Daca pe un segment de lungime l sunt situate
cateva segmente cu suma lungimilor mai mare
ca l, atunci cel putin doua segmente au un punct
comun;
b) Daca in interiorul unei figuri de arie S sunt
plasate figuri cu suma ariilor mai mare decat
S, atunci exista cel putin doua dintre aceste
figuri cu un punct comun;
c) Daca figurile F1; F2; . . .; Fn cu ariile S1; S2;
. . . ; Sn respectiv sunt incluse in figura F cu
arie S si S1 + S2 + . . . + Sn > kS, atunci k + 1
din figurile F1; F2; ... ; Fn au un punct comun.
Ceea ce caracterizeaza problemele in care se
foloseste acest principiu, este dificultatea de a
le aborda pe cai cunoscute. In general principiul
cutiei este un principiu de numarare care in
ultimul timp a capatat o mare popularitate fiind
pus la baza unui numar mare de probleme,
unele chiar dificile.
Voi prezenta in continuare cateva probleme ale
caror solutii se bazeaza pe principiul de mai
sus.
6.APLICATII LA PRINCIPIUL LUI
DIRICHLET
1) Se considera 7 numere naturale. Demonstrati
ca printre numerele date, cel putin doua dau
acelasi rest la impartirea cu 6.
Solutie. La impartirea cu 6 a unui numar natural
se poate obtine unul din resturile:0, 1, 2, 3,
4,sau 5. Consideram cutia ,,i formata din
numerele care dau restul ,,i la impartirea cu
6.Rezulta astfel 6 cutii in care trebuie plasate 7
numere. Va exista cel putin o cutie care contine
doua sau mai multe numere care dau acelasi
rest la impartirea cu 6.
Generalizare. Fie n+1 numere. Sa se arate ca
exista cel putin doua numere care dau acelasi
rest prin impartirea la n.
2) Sa se demonstreze ca printre orice sase
numere intregi exista doua numere a caror
diferenta este divizibila prin 5.
Solutie. Conform exercitiului anterior, exista
cel putin doua numere care dau acelasi rest prin
impartire cu 5, deci diferenta lor este divizibila
cu 5.
3) Sa se arate ca oricum am alege 7 numere
patrate perfecte (distincte), exista cel putin doua
a caror diferenta se divide cu 10.
Solutie.Daca a N, a impartit la 10 va da unul
din resturile: 0, 1, 4, 5, 6, 9. Deoarece avem 7
patrate perfecte si numai 6 resturi, atunci exista
cel putin doua patrate perfecte care dau acelasi
rest la impartirea cu 10, deci diferenta lor se
divide cu 10.
4) Sa se arate ca oricum am alege cinci numere
intregi, exista doua dintre acestea, care au suma
sau diferenta divizibile cu 7.
Solutie. La impartirea cu 7 a unui numar rezulta
resturile 0,1,2,3,4,5,6. Patratul sau va da la
impartirea cu 7 unul din resturile 01,2,4. Avem
cinci numere si patru resturi, rezulta conform
principiului cutiei ca cel putin doua din cele
cinci patrate dau acelasi rest la impartirea cu 7 ;
51

x -y se divide cu 7, deci 7 |(x-y)(x+y). cum 7
este numar prim ,avem ca 7|x-y sau 7|x+y.
5) La un turneu de sah au participat n>2
sahisti. Sa se demonstreze ca in orice moment
al turneului dinaintea ultimei runde, cel putin
doi sahisti au acelasi numar de victorii.
Solutie. In orice moment al turneului dinaintea
ultimei runde, fiecare sahist a jucat maximum
n-2 partide si a putut obtine 0, 1, 2, ..n-2
victorii, deci in total n-1 posibilitati(cutii).
Deoarece la turneu au participat n sahisti,
rezulta ca cel putin doi sahisti au acelasi numar
de victorii inaintea ultimei runde.
6) Consideram multimea A= {a
1
,a
2,
a
n
}cu
elemente numere intregi. Sa se demonstreze ca
A are cel putin o parte nevida cu proprietatea ca
suma elementelor sale se divide cu n.
Solutie.Daca a este numar intreg si n numar
natural, exista q si r unice astfel incat a=nq+r cu
qZ si r {0,1,n-1}.Consideram urmatoarele
n submultimi ale luiA: A
1
={a
1
}, A
2
={ a
1
,a
2

},..A
n
= {a
1
,a
2
,.a
n
}. Notam cu S
i

=a
1
+a
2
+.+.a
i
,cu i=1,n ( suma elementelor
fiecarei multimi). Daca unul din numerele S
i
cu
i=1,n se divide cu n, problema este rezolvata.
Daca nu, cele n resturi obtinute prin impartirea
cu n a numerelor S
i ,
apartin

multimii

{1, 2,
.n-1 }cu n-1 elemente diferite. Deci exista cu
siguranta doua numere S
i
si S
j
care dau acelasi
rest la impartirea cu n. Fie S
i
= a
1
+a
2
+.a
i
si
S
j
=a
1
+a
2
+.a
j
cele doua numere. Fie i<j ;cum
n| S
i
S
j
, rezulta ca submultimea este B={a
i+1
,
a
i+2
,..a
j
}.
7) Consideram noua puncte intr-un patrat cu
latura de lungime 1. Sa se demonstreze ca
exista un triunghi cu varfurile in trei din cele
noua puncte a carui arie sa fie cel mult 1/8.
Solutie. Unind doua cate doua mijloacele
laturilor opuse in patratul dat, obtinem o
impartire a acestuia in patrate de arie
1/4.Oricum am plasa cele noua puncte,
intotdeauna trei se vor afla in interiorul sau pe
laturile aceluiasi patrat. Fie A, B, C cele trei
puncte situate in patratul EFGH. Sa aratam ca
aria (ABC ) <1/8.


Ducem prin A paralela la EH. Fie AQ || EH, Q
BC, BN AQ si CPAQ,
(N, P AQ). Atunci avem :
S
ABC
=S
ABQ
+S
ACQ
= (AQ BN)/2 + ( AQ
CP)/2= AQ( BN+CP )/2 < EH HG/2 =S
EHGF
/2
=1/8 .Egalitatea se obtine cand o latura a
triunghiului coincide cu o latura a patratului si
celalalt varf al triunghiului se gaseste se afla pe
latura opusa.
8) Sa se arate ca oricum am aseza 37 puncte in
interiorul unui triunghi echilateral cu latura de
lungime 1, exista cel putin doua puncte a.i.
distanta dintre ele sa nu depaseasca 0,1(6).
Solutie. Impartim fiecare latura a triunghiului in
6 segmente cu lungimea 1/6. Prin punctele de
diviziune ducem paralele la laturile triunghiului
si obtinem 1+3+5+7+9+11=36=6 triunghiuri
echilaterale cu latura de 1/6. Consideram 37 de
puncte in triunghiul initial, cel putin doua dintre
acestea se vor afla in interiorul sau pe laturile
unui triunghi(conform principiul cutiei) cu
latura de 1/6=0,1(6), deci distanta dintre acestea
va fi cel mult 1/6.

Generalizare. Sa se arate ca oricum am aseza
n
2
+1 puncte in interiorul unui triunghi
echilateral cu latura de lungime 1, exista cel
putin doua puncte a.i. distanta dintre ele sa nu
depaseasca 1/n.
52

9) Punctele planului sunt colorate in doua
culori. Sa se arate ca exista doua puncte de
aceeasi culoare situate la distanta 1m.
Solutie. Consideram un triunghi echilateral cu
lungimea laturii de 1m. Varfurile triunghiului
vor desemna "obiectele" si culorile vor fi
"cutiile". Cum "obiecte" sunt mai multe decat
"cutii" rezulta, ca exista doua varfuri de aceeasi
culoare. Cum triunghiul este echilateral,distanta
dintre varfuri este 1m.
Tinem sa mentionam ca aceasta problema poate
fi rezolvata si prin alta metoda. Fie A un punct
in plan si presupunem, ca toate punctele din
plan situate la distantade 1m de A sunt de
culoare diferita de culoarea punctului A. Atunci
avem o circumferinta de raza 1 din puncte de
aceeasi culoare. Evident exista o coarda a
acestei circumferinte de lungime1m. Prin
urmare, extremitatile coardei sunt puncte de
aceeasi culoare situate la distanta de 1m.
10) Se considera in plan n puncte distincte.
Cate doua puncte determina un segment. Sa se
demonstreze ca exista doua puncte din care
pleaca acelasi numar de segmente.
Solutie. Dintr-un punct pleaca maximum n-1
segmente si minim 1. Cum avem n puncte, vor
exista doua din care pleaca acelasi numar de
segmente.

11) In interiorul patratului de latura 1 sunt
asezate cateva cercuri, avand suma lungimilor
egala cu 10. Sa se arate ca exista o dreapta, care
sa intersecteze cel putin patru din aceste
cercuri.
Solutie. Se proiecteaza cercurile pe una din
laturile patratului. Proiectia fiecarui cerc este un
segment cu lungimea egala cu lungimea
diametrului cercului respectiv. Suma tuturor
acestor segmente este 3,1. Conform
principiului Dirichlet, exista cel putin patru
segmente ce au in comun un punct.
Perpendiculara ridicata in acest punct, pe latura
patratului, va intersecta cel putin patru cercuri.
12) In plan sunt date 25 puncte, astfel incat
dintre orice trei puncte doua puncte sunt situate
la distanta mai mica ca 1. Sa se demonstreze ca
exista un cerc de raza 1 ce contine nu mai putin
de 13 din aceste puncte.
Solutie. Fie A unul din punctele date. Daca
celelalte puncte sunt in interiorul cercului S1de
raza 1 si centrul in A, atunci problema este
solutionata. Fie B unul dintre punctele situate in
exteriorul cercului S1. Examinam cercul S2 de
raza 1 si centrul B. Printre punctele A; B;
C,unde C un punct arbitrar dintre cele date,
exista doua cu distanta intre ele mai mica decat
1.Mai mult aceste puncte nu pot fi A si B.
Astfel cercurile S1 si S2 contin toate punctele
initiale.Deci, unul dintre aceste cercuri contine
cel putin 13 puncte.
Observatie. In general, cand intr-o problema se
cere sa se arate ca exista cel putin n elemente cu
o anumita proprietate, este bine sa consideram
ca exista cel mult n-1 elemente cu acea
proprietate si din analiza cazului ,, exact n-1 ,
se ajunge la solutia problemei.
Exemple. 1)Intr-o scoala sunt 731 elevi. Aratati
ca exista cel putin 3 elevi care isi serbeaza ziua
de nastere in aceeasi zi a anului.
Solutie. Presupunem ca nu exista 3 astfel de
elevi. Deci in fiecare zi a anului isi serbeaza
ziua de nastere cel mult 2 elevi.Daca in fiecare
zi a anului isi vor serba ziua de nastere doi
elevi atunci, intr-un an, vor avea aniversarea
365 2 = 730 elevi. In scoala sunt 731 elevi,
deci al 731-lea isi va serba ziua impreuna alti
doi.
2) Suma a 63 numere naturale nenule este
2000. Sa se arate ca cel putin doua dintre
acestea sunt egale.Care este cel mai mare
numar de numere egale cu proprietatea ceruta?
Solutie.Daca toate numerele sunt distincte si
cele mai mici posibile obtinem:
1+2+3+63=2016>2000 ,deci cel putin
doua numere sunt egale. De exemplu
2+3+4++62+48=2000.
Daca toate numerele sunt egale, atunci:
x+x+..+x=2000; 63x=2000 de unde x nu este
natural.Pot fi cel mult 62 numere egale, cu
proprietatea ceruta ,de exemplu
1+1++1+1938=2000.
Bibliografie.
1. Mircea Ganga, Teme si probleme de
matematica, Ed. Tehnica, Bucuresti, 1991.
V.A.Ufnarovski, Acvariu Matematic, "Stiinta",
Chisinau, 1988.
3. V.V.Prasolov, Zadaci po planimetrii, c.2,
Moskva, Nauka, 1991
53




Examenul de ATESTAT la informatic, certific noiunile teoretice i practice abordate la clas pe
parcursul celor 4 ani de studiu.
Pe acestea le putem grupa n trei mai categorii :
- Noiuni legate de Tehnologia informaiei i comunicaiei
- Noiuni de programare
- Notiuni de baze de date
REZOLVRI-PROGRAMARE
Subiectul 1
S se descompun un numr natural n (n1.000.000) n factori primi . S se determine numrul
divizorilor numrului n.
Exemplu:
Date de intrare Date de ieire Explicaie
n=3060 2^2 3^2 5^1 17^1
36
Descompunerea este 2
2
*3
2
*5*17
Numrul 3060 are (2+1)(2+1)(1+1)(1+1)=36 divizori
n=19 19 ^1
2
19 este numr prim. Are doar 2 divizori.
C++
#include<iostream.h>
#include<conio.h>
void main()
{int n,fp,p,nrdiv=1,aux;
cout<<n=;cin>>n;aux=n ;
fp=3;
while(n%2==0)
{ p++;n=n/fp;}
if(p) cout<<2^<<p<< ;
nrdiv=nrdiv*(p+1);
while(n!=1)
{ p=0;
while(n%fp==0)
{ p++;n=n/fp;}
if(p){cout<<fp <<^<<p<<. ;
nrdiv=nrdiv*(p+1) ; }
fp+=2;
}
cout<< Numarul <<aux<< are "<<nrdiv<<
divizori "<< <<endl;
}
Pascal
Program unu;
var n,x,i,d:longint;
nr,cont:byte;
begin
write('n='); readln(n);
d:=2; x:=n;
while x>1 do
begin
nr:=0;
while x mod d=0 do
begin
x:=x div d; inc(nr);
end;
if nr>0 then write(d,'^',nr,' ');
inc(d);
end;
cont:=2;
for i:=2 to n div 2 do
if n mod i =0 then inc (cont);
writeln(cont, ' divizori ');
end.
Subiectul 2
Se citete de la tastatur un numr n100 ir de n numere naturale mai mici dect 1000,
x=(x
1
, x
2
, x
3
,.., x
n
). Scriei un program care afieaz mesajul da, daca suma numerelor din ir
este un numr prim i nu n caz contrar.
54

Exemplu:
Date de intrare Date de ieire Explicaie
n=5
x=(4,3,19,1,2)
da 29 este numr prim
n=5
x=(3,3,19,1,2)
nu 28 nu este numr prim

C++
#include<iostream.h>
#include<math.h>
int main()
{int x[100],n,i,S=0,g;
cin>>n;
for(i=1; i<=n; i++) {cin>>x[i]; S+=x[i];}
if(S<=1) g=0;
else
if(S==2) g=1;
else
if(S%2==0) g=0;
else
{g=1;
for(i=3; i<=sqrt(S); i=i+2)
if (S%i==0) g=0; }
if (g) cout<<"da"; else cout<<"nu";
}
Pascal
program doi;
var n,sw:byte;x:word;s,i:longint;
begin
write('n=');readln(n);
for i:=1 to n do
begin
write('x='); readln(x); inc(s,x);
end;
i:=2; sw:=0;
while (i<=trunc(sqrt(s))) and (sw=0) do
if s mod i=0 then sw:=1
else inc(i);
if sw=0 then write('da')
else write('nu');
end.


Subiectul 3
Se citete de la tastatur un numr natural n (n500). Se cere s se afieze toate numerele naturale
mai mici sau egale cu n, care au exact 3 divizori.
Exemplu:
Date de intrare Date de ieire Explicaie
n=80 4 9 25 49 Sunt ptratele perfecte ale
numerelor prime

C++
#include<iostream.h>
void main()
{int n;
cout<<"n=";cin>>n;
for (int x=4;x<=n;x++)
{int nr=2;//orice nr admite ca divizori pe 1
si el insusi
for(int d=2;d<=x/2;d++)
if (x%d==0) nr++;
if (nr==3) cout<<x<<' ';
}}

Pascal
program trei;
var n,i,j,sw:word;
begin
write('n=');readln(n);write('4 ');
i:=3;
while i*i<=n do
begin
sw:=0;
for j:=2 to trunc(sqrt(i)) do
if i mod j=0 then sw:=1;
if sw=0 then write(i*i,' ');
inc(i,2);
end; end.
55


Subiectul 4
Scriei un program care afieaz toate numerele naturale prime de trei cifre, ale cror oglindite sunt
tot numere prime (ex: 183 este numr prim i 381 este tot numr prim).
C++
#include<iostream.h>
#include<math.h>
void main()
{int i,j,k,x,X,prim,d;
for(i=1;i<=9;i=i+2)
for(j=0;j<=9;j++)
for(k=i;k<=9;k=k+2)
{x=i*100+j*10+k; X=k*100+j*10+i;
prim=1;d=3;
while (prim && d<=sqrt(x))
if (x%d==0) prim=0;
else d+=2;
if (prim)
{d=3;
while(prim && d<=sqrt(X))
if(X%d==0) prim=0;
else d+=2;}
if(prim)
cout<<x<<' '<<X<<endl;}}
Pascal
program patru;
var n:word;
function prim(x:word):boolean;
var i:word;
begin
prim:=true; i:=2;
while(x mod i<>0) and(i<=sqrt(x)) do
inc(i);
if i<=sqrt(x) then prim:=false;
end;
begin
n:=101;
while n<999 do
begin
if (prim(n)) and (prim(n mod 10*100+
(n div 10 mod 10) + (n div 100))) then
writeln(n);
inc(n,2);
end;
end.
Subiectul 5
S se afieze numrul format prin eliminarea cifrelor pare ale unui numr n dat (n<1.000.000.000).
Exemplu:
Date de intrare Date de ieire Explicaie
n=1234567 1357 Am eliminat cifrele pare 2, 4, 6
n=3746801 371 Am eliminat cifrele 4, 6, 8, 0
C++
#include<iostream.h>
#include<math.h>
long n,p,k=1;
void main()
{cin>>n;
//vom forma numarul obtinut din cifrele impare
while(n>0)
{if(n%10%2==1) //daca ultima cifra e
impara
{p=n%10*k+p; k=k*10;}
n=n/10;} //elimin cifra oricum
cout<<p;
}

Pascal
program cinci;
var p,n,x:longint; h:byte;
begin
write('n='); readln(N);
x:=0;p:=1;
repeat
h:=n mod 10;n:=n div 10;
if h mod 2=1 then
begin x:=h*p+x; p:=p*10; end;
until n=0;
writeln(x);
end
56

Subiectul 6
Se citete de la tastatur un numr ns100 i apoi n numere naturale s10.000. S se afieze acele
numere dintre cele n care au suma divizorilor un numr prim. Dac niciunul dintre cele n numere
nu are proprietatea dat , se va afia mesajul Niciun numr
Exemplu:
Date de intrare Date
de
ieire
Explicaie
n=7
123 289 100 54 729 10
999
289
729
Divizorii lui 123 sunt 1, 3, 41, 123. Suma
1+3+41+123=168 nu e prim
Divizorii lui 289 sunt 1, 17, 289.
Suma 1+17+289=307 este numr prim
Divizorii lui 729: 1+3+9+27+81+243+729=1093 prim
C++
#include<iostream.h>
#include<math.h>
int a[101],n,ok;
int suma_diviz(int a)//returneaza suma divizorilor lui
a
{int s=a; //nr insusi e divizor al sau
for(int i=1;i<=a/2;i++)
if(a%i==0)
s=s+i;
return s;}
int prim(int a)
{if(a==0 || a==1) return 0;
for(long i=2;i<=sqrt(a);i++)
if(a%i==0) return 0; //am gasit un divizor, nr nu e
prim
return 1;}//daca n-am gasit niciun divizor, nr e prim
void main()
{cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
for(i=1;i<=n;i++)
if(prim(suma_diviz(a[i]))==1)
{cout<<a[i]<<' ';ok=1;}
if(!ok) cout<<Niciun numar<<endl;}

Pascal
program sase;
var t,i,sw,n,s,x,y:word;
function prim(x:word):boolean;
var i:word;
begin
prim:=true; i:=2;
while(x mod i<>0) and(i<=sqrt(x)) do
inc(i);
if i<=sqrt(x) then prim:=false;
end;
function Sdiv(x:word):word;
var i:word;
begin
S:=1+x;
for i:=2 to x div 2 do
if x mod i=0 then S:=S+i;
Sdiv:=S;
end;
begin
write('n=');readln(n);sw:=0;
for i:=1 to n do
begin
readln(y); t:=Sdiv(y);
if prim(t) then
begin
writeln(y,'are proprietatea ceruta');
sw:=1;
end;
end;
if sw=0 then write('nu am nr cu propr');
end.



57

Subiectul 7
Se d un vector v cu n elemente de tip intreg, n 20. S se determine vectorii v1 i v2 ai cror
componente ndeplinesc urmtoarele condiii :
- v1[i] este format din suma cifrelor lui v[i]
- v2[i] este format din produsul cifrelor lui v[i].
Exemplu:
Date de intrare Date de ieire Explicaie
n=5
v=(2,4,21,34,56)
v1 = (2,4,3,7,11)
v2 = (2,4,2,12,30)

v[i]=43
v1[i]=4+3=7
v2[i]=4*3=12

C**
#include<stdio.h>
#include<math.h>
void main (void)
{int n,i,v[20],v1[20],v2[20],s,p;
printf("n=");scanf("%d",&n);
for(i=1;i<=n;i++)
{printf("v[%d]=",i); scanf("%d",&v[i]); }
for(i=1;i<=n;i++)
{ if(v[i]<0) v[i]=abs(v[i]);
p=1;s=0;
while(v[i]!=0)
{ s=s+v[i]%10; p=p*(v[i]%10);
v[i]=v[i]/10; }
v1[i]=s; v2[i]=p;
}
printf("vectorii sunt \n");
for(i=1;i<=n;i++)
printf("\n v1[%d]=%d",i,v1[i]);
for(i=1;i<=n;i++)
printf("\n v2[%d]=%d",i,v2[i]);
}

Pascal
program sub7;
var n,i,h:byte;
v,v1,v2 :array[1..20] of word;
begin
write('n='); readln(n);
for i:=1 to n do
begin
write('v[',i,']='); readln(v[i]);
end;
for i:=1 to n do
begin
v1[i]:=0; v2[i]:=1;
repeat
h:=v[i] mod 10; v1[i]:=v1[i] +h;
v2[i]:=v2[i]*h; v[i]:=v[i] div 10;
until v[i]=0;
end;
for i:=1 to n do
write(v1[i],' ');
writeln;
for i:=1 to n do
write(v2[i],' ');
end.

Subiectul 8
Se consider un vector cu n (n100) componente ntregi x=(x
1
, x
2
, x
3
,.., x
n
). S se afieze cte
elemente din vector au valoarea mai mare dect media aritmetic a componentelor vectorului.
Exemplu:
Date de intrare Date de ieire Explicaie
n=5
x=(4,9,12,5,10)
3

Media aritmetic este 8. Elementele mai
mari ca 8 sunt 9, 12, 10
C++
#include<iostream.h>
void main()
Pascal
program sub8;
var n,i,cont :byte;
58

{
int n,x[100],i,S=0,nr=0;
float media;
cin>>n;
for(i=1; i<=n; i++)
{cin>>x[i];S+=x[i];}
media=(float)S/n;
for(i=1; i<=n; i++)
if(x[i]>=media)
nr++;
cout<<"Numarul elementelor cu
valoare mai mare sau egala cu media
artimetica este"<<nr;
}

s:integer;
ma:real;
v:array[1..100]of integer;
begin
write('n='); readln(n);
for i := 1 to n do
begin
write ('v[',i,']='); readln(v[i]);
end;
s:=0;
for i:=1 to n do s:=s+v[i];
ma:=s/n; cont:=0;
for i := 1 to n do
if v[i] > ma then inc (cont);
writeln(cont);
end.

Subiectul 9
Fie v un vector cu format din n numere ntregi, n100. S se afieze suma maxim ce se poate
obine cu elemente din vectorul v. Numrul de elemente din sum trebuie s fie de cel puin 1.

Exemplu:
Date de intrare Date de ieire Explicaie
n=5
v=(-4,9,-12,5,10)
24 Suma maxima este
s=9+5+10=24
n=5
v=(-4, -9,-12, -5, -10)
-4 Suma maxim este
S=-4

C++
#include<iostream.h>
void main()
{int n,v[100],i,S=0,max,poz=0;
cin>>n>>v[1]; max=v[1];
if(v[1]>=0) {S=v[1];poz=1;}
for(i=2; i<=n; i++)
{cin>>v[i];
if (v[i]>=0)
{S+=v[i];poz=1;}
else if(v[i]>max) max=v[i];
if(poz==1) cout<<"suma maxima este"<<S;
else cout<<"suma maxima este "<<max;}

Pascal
program sub9;
var i:byte;
v:array[1..100] of integer;
s,max,n: integer;
begin
write('n='); readln(n);
for i:=1 to n do
begin write('v[',i,']='); readln (v[i]);
end;
s:=0; max:=-maxint;
for i:=1 to n do
begin
if v[i]>0 then s:=s+ v[i]
else
if max<v[i] then max:=v[i];
end;
if s=0 then write (max)
else write (s);end.

59

Subiectul 10
Se citete un vector A cu n componente numere ntregi i un vector B cu m componente numere
ntregi (1 n,m 100). S se afieze cte din componentele vectorului A sunt strict mai mici dect
orice component a lui B.
Exemplu:
Date de intrare Date de ieire Explicaie
n =10
m= 8
A= ( 4, 8, 1, 9, 5, 11, 3, 43, 6,
20)
B= ( 9, 9 , 6, 9, 9, 8, 6, 9)
4 Valorile 4, 1, 5 i 3 din A sunt mai
mici dect orice element al lui B.
C++
#include<iostream.h>
void main()
{ int a[100],b[100],n,m;
cout<<"n="; cin>>n;
for (int i=0;i<n;i++)
{cout<<"a["<<i+1<<"]=";cin>>a[i];}
cout<<"m=";
cin>>m;cout<<"b[0]=";cin>>b[0];
int min=b[0];
for (i=1;i<m;i++)
{cout<<"b["<<i+1<<"]=";cin>>b[i];
if (min>b[i]) min=b[i]; }
int nr=0;
for (i=0;i<n;i++)
if (a[i]<min) nr++;
cout<<"nr="<<nr<<endl;
}

Pascal
program sub10;
var
a,b:array[1..100] of integer;
m,n,cont,i:byte; min:integer;
begin
write ('n='); readln (n); write ('m=');
readln(m);
for i:=1 to n do
begin write ('a[',i,']='); readln (a[i]);
end;
for i:=1 to m do
begin
write ('b[',i,']='); readln (b[i]);end;
min:=maxint;
for i :=1 to m do
if b[i] < min then min:=b[i];
for i:=1 to n do
if a[i] < min then inc(cont);write
(cont);end

Subiectul 11
Se d un vector v cu n elemente numere naturale (1 n 100). Se cere s se afieze numrul cel
mai mare format cu prima cifr a fiecrei componente din v.
Exemplu:
Date de intrare Date de ieire Explicaie
n =4
v= ( 2341, 789, 1998, 2000)
7221 Primele cifre sunt 2, 7, 1, 2. Cel mai
mare numr ce se poate obine cu
aceste cifre este 7221
C++
#include<iostream.h>
unsigned v[100],n;
unsigned primacifra(unsigned x)
{while (x>10) x=x/10;
return x;
}
void ordonez()
{ int sort=1;
Pascal
program sub11;
var
v,v1: array [1..100] of integer;
n,i,h,sw,aux:byte;
l: integer;
begin
write('n='); readln(n);
for i:=1 to n do
60

while (sort)
{sort=0;
for (int i=0;i<n-1;i++)
if (v[i]<v[i+1])
{unsigned aux=v[i];
v[i]=v[i+1]; v[i+1]=aux;sort=1;
}
}
}
void main()
{long nr=0;
cout<<"n=";cin>>n;
for (int i=0;i<n;i++)
{cout<<"v["<<i+1<<"]=";cin>>v[i];}
for (i=0;i<n;i++) v[i]=primacifra(v[i]);
ordonez();
for (i=0;i<n;i++) cout<<v[i];
}

begin
write ('v[',i,']='); readln (v[i]);
end;
h:=0;
for i:=1 to n do
begin
while v[i]>0 do
begin
h:=v[i] mod 10; v[i]:= v[i] div 10;
end;
v1[i]:=h;
end;
repeat
sw:=0;
for i:=1 to n-1 do
if v1[i]<v1[i+1] then
begin
aux:= v1[i];v1[i] := v1[i+1]; v1[i+1]:=
aux; sw:=1;
end;
until sw=0;
l:=0;
for i:= 1 to n do l:=l*10+ v1[i];
write(l);
end.

Subiectul 12
S se inverseze cele dou jumti ale unui numr natural n. Dac numrul are un numr impar de
cifre, cifra din mijloc rmne pe loc. (n1.000.000.000)

Exemplu:

Date de intrare Date de ieire Explicaie
123456 456123 n=123456 => n=456123
1234567 5674123 n=1234567 => n=5674123
C++
#include<iostream.h>
#include<math.h>
long n;int a,b,c,k;
int nr_cifre(long n)
{int k=0;
while(n)
{k++; n=n/10;}
return k;
}
void main()
{cin>>n; k=nr_cifre(n);
b=n%(int)pow10(k/2); /*a doua jumatate
are k/2 cifre; pow10 returneaza un rezultat
de tip float*/
n=n/pow10(k/2); //elimin k/2 cifre

Pascal
program sub12;
var
x:longint;
t:byte;
c,s:string;
q:char;
begin
write ('x=');readln(x);
str (x,s);
t:=length(s);c:=copy (s,1,t div 2);
if t mod 2 =0 then delete (s,1,length(s)-(t div
2))
else
begin
61

if(k%2==1) //daca nr de cifre e impar
{c=n%10; //retin cifra din mijloc
n=n/10;} //si o elimin
a=n; //a este ce a mai ramas din n
if(k%2==0) n=b*pow10(k/2)+a;
else
n=b*pow10(k/2+1)+c*pow10(k/2)+a;
cout<<n;}
q:=s[(t div 2)+1];delete (s,1,length(s)-(t
div 2));
end;
if t mod 2 =0 then c:=s+c
else
c:=s+q+c;
writeln(c);
readln;
end.

Subiectul 13
Se citete de la tastatur un numr natural n i un tablou unidimensional cu n numere ntregi
(n100). S se ordoneze cresctor elementele de pe poziiile pare ale tabloului i descresctor
elementele de pe poziiile impare.
Exemplu :
Date de intrare Date de ieire Explicaie
n=11
a={1, 5, 7, 3, 9, 1, 8, 7, 3, 1,
9}
9 1 9 1 8 3 7 5 3 7 1 a={1, 5, 7, 3, 9, 1, 8, 7, 3, 1, 9}
irul a devine:
a={9, 1, 9, 1, 8, 3, 7, 5, 3, 7, 1}
C++
#include<iostream.h>
int a[101],n;
void main()
{int i,j,ok,aux;
cin>>n;
for(i=1;i<=n;i++)
cin>>a[i];
//sortam prin metoda selectiei elementele de
pe pozitii impare
for(i=1;i<=n-2;i=i+2)
for(j=i+2;j<=n;j=j+2)
if(a[i]<a[j])
{aux=a[i];
a[i]=a[j];
a[j]=aux;
}
//sortam prin metoda bulelor elementele de
pe pozitii pare
do {ok=1;
for(i=2;i<=n-2;i=i+2)
if(a[i]>a[i+2])
{aux=a[i];
a[i]=a[i+2];
a[i+2]=aux;
ok=0;}
}while (ok==0);
for(i=1;i<=n;i++)
cout<<a[i]<<' ';
}
Pascal
program sub13;
var a:array[1..100] of word;
n,aux:word;
i,j,sw:byte;
begin
write('n=');
readln(n);
for i:=1 to n do
begin
write('a[',i,']='); readln(a[i]);
end;
repeat
i:=2; sw:=0;
while i<=n-1 do
begin
if (a[i]>a[i+2]) and (i+2<=n) then
begin
aux:=a[i]; a[i]:=a[i+2]; a[i+2]:=aux;
sw:=1; end;
if (a[i-1]<a[i+1]) and (i+1<=n) then
begin
aux:=a[i-1]; a[i-1]:=a[i+1];
a[i+1]:=aux; sw:=1;
end;
inc(i,2);
end;
until sw=0;
for i:=1 to n do
write ('a[',i,']=',a[i],' ');end.
62


Subiectul 14
Se citete de la tastatur un numr n<50. S se formeze fiierul piramida.txt care s conin
numerele naturale de la 1 la n, n ordine cresctoare, dispuse astfel: pe primul rnd un numr, pe al
doilea rnd 2 numere, pe al treilea rnd 3 numere etc. Ultimul rnd poate s rmn incomplet.
Numerele vor fi separate printr-un singur spaiu.
Exemplu :Date de intrare piramida.txt Explicaie
n=19


1
2 3
4 5 6
7 8 9 10
11 12 13 14 15
16 17 18 19
Ultimul rnd e incomplet, doar de 4
numere, pn s-a ajuns la 19
C++
#include<fstream.h>
int n,k=1,p,i;
void main(){
cin>>n;
ofstream f("piramida.txt");
p=1;
while(p*(p+1)/2<=n) //linii intregi
{for(i=1;i<=p;i++)
{f<<k<<' ';
k++;}
f<<endl;
p++;}
for(i=1;k<=n;i++) //linia incompleta
{f<<k<<' ';
k++;}
f.close();}

Pascal
program sub14;
var i,j,n,nr:byte;
f:text;
begin
assign(f,'d:\bp\bin\piramida.txt');
write('n=');readln(n);
rewrite(f);
j:=1;
while j<=n do
begin
nr:=0;
while (j<=n) and (i>nr) do
begin
write (f,j,' '); inc(nr); inc(j);
end;
writeln(f);
inc(i);
end;
close(f);
end.


Subiectul 15
S se determine suma elementelor de sub diagonal principal a unei matrici ptratice de ntregi,
inclusiv elementele de pe diagonala principal. Matricea are n linii i coloane, n20.
Exemplu :
Date de intrare Date de ieire Explicaie
n=4
3 7 8 10
1 5 2 20
7 2 9 13
8 9 1 11
56 3 7 8 10
1 5 2 20
7 2 9 13
8 9 1 11
3+1+5+7+2+9+8+9+1+11=56

63

C++
#include<iostream.h>
int i,n,j,a[20][20],s;
void suma(int x)
{for(i=1;i<=x;i++)
for(j=1;j<=i;j++)
s=s+a[i][j];
cout<<s;}
void main()
{cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{cout<<"a["<<i<<"]["<<j<<"]=";
cin>>a[i][j];}
suma(n);}

Pascal
program sub15;
var
a: array [1..30, 1..30] of integer;
m,n,i,j: integer;
s: longint;
begin
write ('n='); readln (n);
for i:= 1 to n do
for j:=1 to n do
begin
write ('a[', i, ',', j, ']='); readln (a[i,j]);
end;
S:=0;
for i:= 1 to n do
for j:=1 to i do
s:=s+ a[i,j];
writeln ('s=', s);
end.

Subiectul 16
S se verifice dac elementele unui vector pot forma o mulime. Se va afia DA sau NU. Vectorul are
n elemente numere naturale, n100.
Exemplu :
Date de intrare Date de ieire Explicaie
n=7
a=(1, 5, 7, 3, 9, 10, 8)
DA Elementele sunt distincte
n=7
a=(1, 5, 7, 3, 9, 1, 9)
NU Sunt elemente care se repet.

C++
#include<stdio.h>
void main()
{int v[20],n,i,j,test;
printf("n=");scanf("%d",&n);
for(i=1;i<=n;i++)
{ printf("v[%d]= ",i); scanf("%d",&v[i]); }
test=0;
for(i=1;i<=n-1;i++)
for(j=i+1;j<=n;j++)
if(v[i]==v[j])
{test=1;
break;}
if(n==0) test=0;
if(test==0)
printf("elementele pot forma o multime");
else
printf(" elementele nu pot forma o multime
Pascal
program sub16;
var v:array[1..100]of integer;
n,i,j:byte;
sw:boolean;
begin
write('n=');readln(n);
for i:=1 to n do
begin
write('v[',i,']=');readln(v[i]);
end;
sw:=true;x:=1;
for i := 1 to n-1 do
for j:=i+1 to n do
if v[i]=v[j] then
sw:=false ;
if sw=true then writeln('Elementele
vectorului SUNT distincte')
64

");
}

else
writeln('Elementele vectorului NU SUNT
distincte');
readln;
END

Subiectul 17
Scriei un program C/C++ care citete de la tastatur dou valori naturale nenule m i n (m10, n10)
i apoi m*n numere naturale nenule cu cel mult 4 cifre fiecare, reprezentnd elementele unei matrice
cu m linii i n coloane. Programul determin apoi valorile minime de pe fiecare linie a matricei i le
afieaz pe o linie a ecranului separate prin cte un spaiu, iar la sfrit valoarea maxim din irul
valorilor minime determinate anterior.
Exemplu :
Date de intrare Date de ieire Explicaie
m=3
n=5
5 13 7 7 3
9 6 12 9 10
3 2 5 4 7

3 6 2
6

Cea mai mic valoare de pe
prima linie a matricei este 3,
cea mai mic valoare de pe linia
a doua este 6, cea mai mic
valoare de pe linia a treia este 2
iar cea mai mare valoare dintre
ele este 6


C++
#include<iostream.h>
int minim_linie(int a[11][11],int L,int n)
{int min=a[L][1];
for(int j=2;j<=n;j++)
if(a[L][j]<min) min=a[L][j];
return min;
}
void main()
{int a[11][11],n,m,i,j,min,max;
cin>>m>>n;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
min=minim_linie(a,1,n);
max=min;
cout<<endl<<min<<" ";
for(i=2;i<=m;i++)
{min=minim_linie(a,i,n);
cout<<min<<" ";
if(min>max) max=min;
}
cout<<endl<<max;

Pascal
program sub17;
var v:array [1..10,1..10] of byte;
n,m:byte;
i,j:integer;
max,min:integer;
begin
write('m='); readln(m); write('n=');
readln(n);
for i:=1 to m do
for j:=1 to n do
begin
write('v[',i,j,']='); readln(v[i,j]);
end;
max:=0;
for i:=1 to m do
begin
min:=maxint;
for j:=1 to n do
if min>v[i,j] then min:=v[i,j];
if max<min then max:=min;
write(min,' ');
end;
write(max);
end.
65

Subiectul 18
Scriei un program C/C++ care citete de la tastatur un numr natural cu n cifre (cel mult 9 cifre) i
construiete n memorie o matrice cu n linii i n coloane, numerotate de la 1 la n, format astfel:
- elementele de pe linia 1, au toate valoarea egal cu cifra unitilor numrului citit;
- elementele de pe linia 2, au toate valoarea egal cu cifra zecilor numrului citit;
- elementele de pe linia 3, au toate valoarea egal cu cifra sutelor;
etc.
Programul afieaz pe ecran matricea astfel construit, cte o linie a matricei pe cte o linie a
ecranului, elementele de pe aceeai linie fiind separate prin cte un spaiu.


Exemplu :
Date de intrare Date de ieire Explicaie
28731 1 1 1 1 1
3 3 3 3 3
7 7 7 7 7
8 8 8 8 8
2 2 2 2 2
Cifra unitilor e 1, cifra zecilor e 3 etc.

C++
#include<iostream.h>
void main()
{int a[10][10],n=0,i,j;
long x,y;
cin>>x;
y=x;
while(x>0)
{n++;
x=x/10;}
x=y;i=0;
while(x>0)
{i++;
for(j=1;j<=n;j++)
a[i][j]=x%10;
x=x/10;}
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}}

Pascal
program sub18;
var n:longint;
i,j:byte
h,t,x:longint;
a: array[1..10,1..10] of longint;
begin
write ('x='); readln (x); t:=x;
while t<>0 do
begin
t:=t div 10; inc (n);
end;
for i:=1 to n do
begin
h:=x mod 10; x:=x div 10;
for j:=1 to n do a[i,j]:=h;
end;
for i:=1 to n do
begin
for j:=1 to n do write (a[i,j],' ');writeln;
end;end.


Subiectul 19
Se consider o matrice ptratic cu n linii i n coloane (1<n30), ce memoreaz numere ntregi nenule
de cel mult dou cifre fiecare.
Scriei un program C/C++ care citete de la tastatur valoarea n i elementele matricei i care afieaz
pe ecran produsul acelor elemente de pe diagonala secundar care au proprietatea c sunt valori
minime pe coloanele lor. Dac nu exist astfel de elemente n matrice, se va afia mesajul NU
EXISTA.

66

Exemplu :
Date de intrare Date de ieire Explicaie
n=4
3 7 8 10
1 5 2 20
7 2 9 13
8 9 1 11
20

3 7 8 10
1 5 2 20
7 2 9 13
8 9 1 11
10*2=20
n=4
3 7 8 20
1 5 2 20
7 8 9 13
8 9 1 11
NU EXISTA


C++
#include<iostream.h>
int minim_coloana(int a[31][31],int C,int n)
{int min=a[1][C];
for(int i=2;i<=n;i++)
if(a[i][C]<min) min=a[i][C];
return min;
}
void main()
{int a[31][31],n,i,j,min;
long p=1;
cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
int g=0;
for(i=1;i<=n;i++)
if(a[i][n-i+1]==minim_coloana(a,n-
i+1,n))
{p=p*a[i][n-i+1];
g=1;
}
if(g==0)
cout<<"NU EXISTA";
else
cout<<p;
}

Pascal
program sub19;
var a: array[1..30,1..30] of shortint;
n,i,j,sw:byte;
p: integer;
function minim (c:byte):shortint;
var t:byte;
min:shortint;
begin
min:=a [1,c];
for t:=2 to n do
if a[t,c] < min then min:=a[t,c];
minim:=min;
end;
begin
write ('n=');readln (n);
for i:=1 to n do
for j:=1 to n do
begin write ('a[',i,',',j,']='); readln
(a[i,j]);end;
p:=1; sw:=0;
for i:=1 to n do
if a [i,n-i+1] = minim(n-i+1) then
begin sw:=1; p:=p*a[i,n-i+1]; end;
if sw=0 then writeln ('NU')
else writeln (p);
end.


Subiectul 20
Scriei un program C/C++ care citete de la tastatur dou numere naturale n i m (m10, n10), apoi
elementele unui tablou bidimensional cu m linii i n coloane, numere ntregi distincte, de maximum 4
cifre fiecare, i care determin cel mai mic i cel mai mare numr din tablou i le interschimb.
Matricea modificat va fi afiat pe ecran, cte o linie a matricei pe o linie a ecranului, elementele
fiecrei linii fiind separate prin cte un spaiu.
Exemplu :
67

Date de intrare Date de ieire Explicaie
m=5
n=4
2 24 -5 8
3 25 17 9
4 -2 13 10
5 14 12 70
6 57 36 43
2 24 70 8
3 25 17 9
4 -2 13 10
5 14 12 -5
6 57 36 43
Cel mai mic element este -5 iar
cel mai mare, 70

C++
#include<iostream.h>
void main()
{int a[21][21],n,m,i,j,min,max;
cin>>m>>n;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
cin>>a[i][j];
min=max=a[1][1];
int x1,y1,x2,y2,aux;
x1=y1=x2=y2=1;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
if(a[i][j]<min)
{min=a[i][j];
x1=i;y1=j;}
else
if(a[i][j]>max)
{max=a[i][j];
x2=i;y2=j;
}
aux=a[x1][y1];
a[x1][y1]=a[x2][y2]; a[x2][y2]=aux;
cout<< "dupa interschimbare"<<endl;
for(i=1;i<=m;i++)
{for(j=1;j<=n;j++)
cout<<a[i][j]<<" ";
cout<<endl;}
}

Pascal
program sub20;
var a: array [1..10,1..10] of integer;
m,n,i,j, maxx, maxy, minx, miny, min ,
max,x: integer;
begin
write ('m='); readln (m);write ('n='); readln
(n);
for i:=1 to m do
for j:=1 to n do
begin
write ('a[',i,',',j,']='); readln (a[i,j]);
end;
minx:=0;miny:=0;maxx:=0;maxy:=0;
min:=maxint;max:= - maxint;
for i:=1 to m do
for j:=1 to n do
begin
if min> a[i,j] then
begin
minx:=i; miny:=j; min:=a[i,j];
end;
if max<a[i,j] then
begin
maxx:=i; maxy:=j; max:=a[i,j];
end;
end;
x:=a[minx,miny];a[minx, miny]:= a[maxx,
maxy];
a [maxx, maxy]:=x;
for i:=1 to m do
begin
for j:=1 to n do
write (a[i,j],' ');
writeln; end; end.

Subiectul 21
S se scrie un program care s sorteze cresctor liniile unei matrice cu m linii i n coloane (m20, n20)
folosind metoda BUBBLESORT. Valorile lui m i n i elementele ei vor fi citite de la tastatur. Dup
sortare matricea se va afia n fiierul f.out.
Exemplu :

68

Date de intrare Date de ieire
m=4 n=5

4 3 4 2 1
3 7 12 7 4
12 3 9 4 1
81 31 6 10 7


1 2 3 4 4
3 4 7 7 12
1 3 4 9 12
6 7 10 31 81

C++
#include<iostream.h>
#include<fstream.h>
ofstream g("f.out");
void main()
{int a[21][21],n,m,i,j,y,aux;
cin>>n;
cin>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
cin>>a[i][j];
for(i=0;i<n;i++)
do
{y=1;
for(j=0;j<m;j++)
if (a[i][j]>a[i][j+1])
{ aux=a[i][j];
a[i][j]=a[i][j+1];
a[i][j+1]=aux;y=0;}
}
while(!y);
for(i=1;i<=n;i++)
{for(j=1;j<=m;j++)
g<<a[i][j]<<" ";
g<<endl;
}
}

Pascal
program sub21;
var a:array [1..20,1..20] of integer;
m,n,i,j,sw,aux:byte;
begin
write('m='); readln(m); write ('n=');
readln(n);
for i:=1 to m do
for j:=1 to n do
begin
write('a[i,j]='); readln(a[i,j]);
end;
for i:=1 to m do
begin
repeat
sw:=0;
for j :=1 to n-1 do
if a[i,j]>a[i,j+1] then
begin
aux:=a[i,j]; a[i,j]:=a[i,j+1]; a[i,j+1]:=
aux; sw:=1 ;
end;
until sw=0;
end;
if sw=0 then
for i:=1 to m do
begin
for j:=1 to n do write(a[i,j],' ');
writeln;
end;
end.




Subiectul 22

Din fiierul f.in se citete de pe prima linie un numr natural n (n<=20) reprezentnd numrul de linii
respectiv de coloane ale unei matrice ptratice, iar de pe urmtoarele n linii se citesc elementele
matricei. S se afieze matricea, s se precizeze cte numere prime se afl sub diagonala principal i
cate numere ptrate perfecte sunt deasupra diagonalei principale.

69

Exemplu :
Date de intrare Date de ieire Explicaie
5
3 15 12 3 9
6 21 18 4 7
12 9 17 5 10
42 23 3 15 8
22 8 31 7 12

3 15 12 3 9
6 21 18 4 7
12 9 17 5 10
42 23 3 15 8
22 8 31 7 12
4
2
Sub diagonala principala sunt patru
numere prime: 23, 3,31,7

Deasupra diagonalei principale sunt
dou ptrate perfecte:9, 4


C++
#include<fstream.h>
#include<math.h>
ifstream f("f.in"); int n;
int prim(int n)
{int k,i,j;
k=2;
for(j=2;j<=n/2;j++)
if(n%j==0) k++;
if(k==2) return 1;
else return 0;
}
void main()
{int s[21][21],b,p=0,i,j,m=0,v[50];
f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
f>>s[i][j];
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
cout<<s[i][j]<<" "; cout<<endl;
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{if((i>j)&&(prim(s[i][j])==1)) p++;

if((i<j)&&(powl(floor(sqrt(s[i][j])),2)==s[i][j]))
m++;
}
cout<<p<<" "<<m;}

Pascal
program sub22;
var f:text;
a:array[1..10,1..10] of word;
n,i,j:byte;
function prim (x:integer):boolean;
var sw:boolean;
i:integer;
begin
sw:=true;
for i:=2 to x div 2 do
if x mod i=0 then sw:=false;
prim:=sw;
end;
begin
assign (f,'d:\BP\BIN\f.in');reset(f);
readln (f,n);
for i:=1 to n do
begin
for j:=1 to n do read (f, a[i,j]);
readln (f);
end;
close (f);
for i:=1 to n do
begin for j:=1 to n do write (a[i,j], ' ');
writeln;
end;
writeln('numere prime sub diagonala
principala');
for i:= 2 to n do
for j:=1 to i-1 do
if prim (a[i,j]) then write (a[i,j], ' ');
writeln('numere patrate perfecte deasupra
diagonalei principale');
for i:= 1 to n-1 do
for j:=i+1 to n do
if sqrt (a[i,j])= trunc(sqrt(a[i,j])) then write
(a[i,j], ' ');
end.

70


Subiectul 23
Scriei un program care construiete n memorie o matrice ptratic cu n linii i n coloane (n<=20)
format numai din valori 0,1 i 2 astfel nct elementele de pe diagonala secundar i cea principal s fie
egale cu 0, elementele din Nord si Sud egale cu 1, iar restul elementelor din matrice s fie egale cu 2.
Matricea va fi afiat n fiierul f.out.
Exemplu:
Date de intrare Date de ieire
n=5 0 1 1 1 0
2 0 1 0 2
2 2 0 2 2
2 0 1 0 2
0 1 1 1 0
C++
#include<iostream.h>
#include<fstream.h>
ofstream g("f.out");
void main()
{int n,a[21][21],i,j;
cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++) a[i][j]=0;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if((i>j)&&(i+j<n+1)) a[i][j]=2;
if((i>j)&&(i+j>n+1)) a[i][j]=1;
if((i<j)&&(i+j<n+1)) a[i][j]=1;
if((i<j)&&(i+j>n+1)) a[i][j]=2;
}
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
g<<a[i][j]<<" ";
g<<endl;
}}

Pascal
program sub23;
var a:array [1..30, 1..30] of byte;
f:text;
n,i,j:byte;
t,l1,l2,c1,c2,l:byte;
begin
write('n=');readln(n);
for i:=1 to n do
begin a[i,i]:=0; a[i,n-i+1]:=0; end;
l1:=1; l2:=n; c1:=1; c2:=n;
for t:=1 to n div 2 do
begin
for j:=c1+1 to c2-1 do
begin a[l1,j]:=1; a[l2,j]:=1; end;
for i:=l1+1 to l2-1 do
begin a[i,c1]:=2; a[i,c2]:=2; end;
inc(l1); inc(c1); dec(l2); dec(c2);
end;
assign(f,'d:\BP\BIN\f.art'); rewrite(f);
for i:=1 to n do
begin for j:=1 to n do write(f,a[i,j],' ');
writeln(f); end;
close(f);
end.

Subiectul 24
Se consider fiierul f.in ce conine pe prima linie un numr natural n (n<=20) ce semnific numrul
de linii ale unei matrice ptratice de numere ntregi iar pe urmtoarea linie elementele matricei n
ordinea parcurgerii acesteia pe linii. Afiai pe ecran suma elementelor de pe cele dou diagonale ale
matricei.
Exemplu :
Date de intrare Date de ieire
4
1 2 3 4 5 9 7 3 2 1 0 9 6 0 4 4


14 18


71

C++
#include<fstream.h>
ifstream f("f.in");
void main()
{int a[21][21],n,s=0,i,j,p=0;
f>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++) f>>a[i][j];
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{if(i==j) p=p+a[i][j];
if(i+j==n+1) s=s+a[i][j];
}
cout<<p<<" "<<s;
}

Pascal
program sub24;
var f: text;
n,sp,ss,x,i:byte;
begin
assign (f,'d:\bp\bin\f.in'); reset (f); readln
(f,n);
sp:=0; ss:=0;
for i:=1 to n*n do
begin
read (f,x);
if (i-1) mod (n+1)=0 then inc (sp,x) else
if (i-1) mod (n-1)=0 then inc(ss,x);
end;
write (ss,' ',sp); close (f);
end.



Subiectul 25
Fie o matrice A cu n linii i m (n<=20, m<=20) coloane cu elemente numere ntregi (n, m i
elementele matricei se citesc de la tastatur). Se cere s se determine cel mai mare numr de pe
marginea tabloului, precum i de cte ori apare.
Exemplu :
Date de intrare Date de ieire Explicaie
n= 5, m= 4
1 2 3 4
1 5 1 1
3 7 8 5
5 3 8 3
3 2 2 5
5 3 Elementele de pe contur sunt:
1 2 3 4 1 5 3 5 2 2 3 5 3 1
Cel mai mare numr este 5 i apare de 3
ori


C++
#include<iostream.h>
#include<values.h>
void main()
{int a[21][21],i,j,n,m;
cout<<"n=";cin>>n;
cout<<"m=";cin>>m;
for (i=0;i<n;i++)
for (j=0;j<m;j++)
{cout<<"a["<<i+1<<"]["<<j+1<<"]=";
cin>>a[i][j];
}
int max=-MAXINT,nr=1;
for(j=0;j<m-1;j++)
if (max==a[0][j]) nr++;
else
if (max<a[0][j]) {max=a[0][j]; nr=1;}
for (i=0;i<n-1;i++)
if (max==a[i][m-1]) nr++;
else
Pascal
program sub25;
var a : array [1..30, 1..30] of integer;
n, m, i, j, y, max, maxint, cont : byte;
begin
write ('n=');readln (n);write ('m=');readln
(m);
for i:=1 to n do
for j:=1 to m do
begin write ('a[',i,',',j,']=');readln (a[i,j]); end;
max:= -maxint;cont:=0;
for j:=1 to m do
if a[1,j]>max then
begin cont:= 1; max:=a[1,j]; end
else
if a[1,j]=max then inc (cont);
for i:=2 to n do
if a[i,m]> max then
begin cont:= 1; max := a [i,m]; end
else
72

if (max<a[i][m-1]) {max=a[i][m-1];nr=1;}
for (j=m-1;j>=1;j--)
if (max==a[n-1][j]) nr++;
else
if (max<a[n-1][j]) {max=a[n-1][j];nr=1;}
for (i=n-1;i>=1;i--)
if (max==a[i][0]) nr++;
else
if (max<a[i][0])
{max=a[i][0]; nr=1; }
cout<<max<<' '<<nr;
}

if a [ i, m] = max then inc (cont);
for i := 2 to n -1 do
if a [ i, 1 ] > max then
begin cont:= 1 ; max := a[i,1]; end
else
if a [ i, 1 ] = max then inc (cont);
for j:=m-1 downto 1 do
if a [ n, j] > max then
begin cont:= 1 ; max := a[n,j]; end
else
if a [ n, j] = max then inc (cont);
write ( max,',','de',cont,'ori');
end.



Subiectul 26
Se citete de la tastatur un numr natural n (n50). Se cere s se formeze i s se afieze matricea
ptratica nxn astfel: prima linie conine numerele de la 1 la n, de la dreapta la stanga; a doua linie
conine urmtoarele n numere naturale, de la stnga la dreapta; a treia linie conine urmtoarele n
numere naturale, de la dreapta la stanga etc.
Exemplu :
Date de intrare Date de ieire Explicaie
n=5

5 4 3 2 1
6 7 8 9 10
15 14 13 12 11
16 17 18 19 20
25 24 23 22 21
5 4 3 2 1
6 7 8 9 10
15 14 13 12 11
16 17 18 19 20
25 24 23 22 21

n=4

4 3 2 1
5 6 7 8
12 11 10 9
13 14 15 16
4 3 2 1
5 6 7 8
12 11 10 9
13 14 15 16

C++
#include<iostream.h>
int a[51][51],n;
void main()
{int i,j,k=0;
cin>>n;
for(i=1;i<=n;i++)
if(i%2==1) //parcurgem de la dreapta la
stanga
for(j=n;j>=1;j--)
a[i][j]=++k;
else //parcurgem de la stanga la dreapta
for(j=1;j<=n;j++)
a[i][j]=++k;
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
Pascal
program sub26;
var
a:array [1..50, 1..50] of word;
n,i,j:byte;
nr:word;
begin
write('n='); readln(n); nr:=0;
for i:=1 to n do
if i mod 2 =1 then
for j:=n downto 1 do
begin inc(nr); a[i,j]:=nr;end
else
for j:=1 to n do begin inc(nr); a[i,j]:=nr;
end;
for i:=1 to n do
73

cout<<a[i][j]<<'
';cout<<endl;}}

begin
for j:=1 to n do write (a[i,j], ' ');
writeln;
end;
end.


Subiectul 27
Sa se ordoneze alfabetic numele a n copii, (n <=100). Datele de intrare se vor citi de la tastatura.
Exemplu :
Date de intrare Date de ieire
n= 4
IoAn
VasiLE
Gigel
Alecu
Alecu
Gigel
IoAn
VasiLE


C++
#include<iostream.h>
#include<string.h>
typedef struct copil
{char nume[30];
char prenume[30];
};
struct copil a[101];
int i,j,n; char man[30];
void main()
{cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{cout<<"numele este"; cin>>a[i].nume;
cout<<"prenumele
este";cin>>a[i].prenume;}
for(i=1;i<=n-1;i++)
for(j=1+i;j<=n;j++)
if(strcmp(a[i].nume,a[j].nume)>0)
{strcpy(man,a[i].nume);
strcpy(a[i].nume,a[j].nume);
strcpy(a[j].nume,man);
strcpy(man,a[i].prenume);
strcpy(a[i].prenume,a[j].prenume);
strcpy(a[j].prenume,man);
}
cout<<"copiii ordonati dupa nume sunt";
for(i=1;i<=n;i++)
cout<<"\n"<<a[i].nume<<"
"<<a[i].prenume;}
Pascal
program sub27;
type st=string[20];
var v:array[1..100] of string;
x:string;
i,sw:byte;
n:word;
begin
write('n=');readln(n);
for i:=1 to n do readln(v[i]);
repeat
sw:=0;
for i:=1 to n-1 do
if v[i]>v[i+1] then
begin
x:=v[i]; v[i]:=v[i+1];v[i+1]:=x;sw:=1;
end;
until sw=0;
for i:=1 to n do writeln(v[i]);
end.



Subiectul 28
Sa se verifice dac doua cuvinte citite de la tastatur sunt anagrame. Se va afia Da sau NU Cuvintele
pot conine maximum 20 de caractere reprezentnd litere mari sau mici ale alfabetului englez.
74

Exemplu :
Date de intrare Date de ieire Explicaie
ATLASE
TESALA
DA Dou cuvinte sunt anagrame dac
au aceleai litere dar sunt scrise
n alt ordine ATLASE
TESELA
NU

C++
#include<stdio.h>
#include<string.h>
void main()
{int n,m,i,j;
char s1[20],s2[20],man;
printf("Primul cuvant este :");gets(s1);
printf("Al doilea cuvant este:");gets(s2);
n=strlen(s1);m=strlen(s2);
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(s1[i]>s1[j])
{man=s1[i];
s1[i]=s1[j];
s1[j]=man;
}
for(i=0;i<m-1;i++)
for(j=i+1;j<m;j++)
if(s2[i]>s2[j])
{man=s2[i]; s2[i]=s2[j]; s2[j]=man;
}
if(n!=m)
printf("cuvintele nu sunt doua anagrame");
else
{int test=1;
for(i=0;i<n;i++)
if(s1[i]!=s2[i])
{test=0;
break;}
if(test==1)
printf("\n cuvintele reprezinta doua
anagrame");
else
printf("\n cuvintele nu sunt anagrame ");
}
}
Pascal
program sub28;
var x,y:string[20];
h,i:integer;
begin
readln(x);readln(y);
for i:=1 to length(x) do

begin
h:=pos(x[i],y);
if h<>0 then delete(y,h,1);
end;
if y='' then writeln('da') else writeln('nu');
end.



Subiectul 29
Fiierul text numere.txt conine pe prima linie un numr natural n (0<n<100000), iar pe a doua linie n
cifre, separate prin cte un spaiu.Scriei un program C/C++ care determin cea mai mare cifr dintre
cele situate pe a doua linie a fiierului numere.txt i numrul de apariii ale acesteia. Valorile
determinate se vor afia pe ecran, separate printr-un spaiu.

75

Exemplu :
Date de intrare Date de ieire
12
2 5 3 1 9 5 8 9 2 7 3 4
9 2

C++
#include<fstream.h>
void main()
{ int i,n,v[10];
int x;
for(i=0;i<=9;i++)
v[i]=0;
fstream f;
f.open("numere.txt",ios::in);
f>>n;
for(i=1;i<=n;i++)
{f>>x; v[x]++;
}
int cif=0, fv;
for(i=0;i<=9;i++)
if(v[i]!=0)
{cif=i;fv=v[i];}
cout<<cif<<" "<<fv;

}

Pascal
program sub29;
var v:array[1..500] of byte;
f:text;
n,i,cont,max:byte;
begin
assign(f,'d:\BP\BIN\numere.txt'); reset(f);
readln(f,n);
for i := 1 to n do
read(f,v[i]);
cont:=0; max:=0;
for i:=1 to n do
begin
if v[i]>max then
begin max:=v[i]; cont:=1; end
else
if v[i]=max then inc(cont);
end;
writeln(max,' ',cont); close(f);
end.


Subiectul 30
Fiierul numere.txt conine pe prima linie un numr natural n (n100), iar pe a doua linie, separate
prin cte un spaiu, n numere naturale nenule, cu cel mult 4 cifre fiecare. Scriei programul care citete
de la tastatur un numr natural k (k25), construiete n memorie i afieaz pe ecran un tablou
unidimensional ce conine, n ordinea n care au fost citite, numerele de pe a doua linie a fiierului
numere.txt care au cel puin k divizori.Dac niciunul dintre cele n numere citite nu are cel puin k
divizori, n fiier se va scrie 0.
Exemplu :
Date de intrare Date de ieire
n=6
100 9 400 56 7 10
k=5
100 400 56
n=3
3 5 11
0
C++
#include<fstream.h>
int nr_div(int x)
{int nd=1;
for(int i=1;i<=x/2;i++)
if(x%i==0)
nd++;
return nd;
}
Pascal
program sub30;
var f:text;
i,n,k,m:byte;
x:word;
v:array [1..100] of word;
function nrdiv(y:word): byte;
var i:word;
nr:byte;
76

void main()
{int n=0,i,v[101],k,x;
fstream f;
f.open("numere.txt",ios::in);
f>>k;
while(f>>x)
if(nr_div(x)>k)
v[++n]=x;
if(n)
for(i=1;i<=n;i++)
cout<<v[i]<<" ";
else
cout<<0;}

begin
nr:=2;
for i:=2 to y div 2 do
if y mod i=0 then inc (nr);
nrdiv:=nr;
end;
begin
assign (f,'d:\BP\BIN\numere.txt'); reset (f);
readln (f,n);
write ('k='); readln (k); m:=0;
for i:=1 to n do
begin
read (f,x);
if nrdiv (x)>= k then
begin inc (m); v[m]:= x; end;
end;
close (f);
if m=0 then rite (m)
else for i:=1 to m do write( v[i], ' ');
end.


Subiectul 31
Scriei un program care citete de la tastatur un cuvnt format din cel mult 20 de caractere, doar litere
ale alfabetului englez (cel puin o majuscul i cel puin o liter mic). Programul determin
transformarea cuvntului citit prin eliminarea fiecrei litere mici a cuvntului, restul literelor
nemodificndu-se, ca n exemplu. Programul afieaz pe ecran cuvntul obinut.
Exemplu :
Date de intrare Date de ieire
baCALaUreaT CALUT

C++
#include<fstream.h>
#include<string.h>
void main()
{int n,i; char s[21];
i=0;
while(i<strlen(s))
if(s[i]>='a'&&s[i]<='z')
strcpy(s+i,s+i+1);
else i++;
cout<<s;
}

Pascal
program sub31;
var i:byte;
x:string[20];
begin
write('x=');
readln(x);
i:=1;
while i<=length(x) do
if x[i] >'Z' then delete (x,i,1)
else inc(i);
write(x);
end.


Subiectul 32
Scriei un program C/C++ care citete de la tastatur un ir de cel mult 500 de caractere (litere mici i
mari ale alfabetului englez, cifre, puncte, virgule i spaii) i afieaz pe ecran cifra care apare de cele
mai multe ori n irul citit. Dac irul conine mai multe cifre cu numr maxim de apariii, atunci se va
afia cea mai mic dintre acestea. Dac irul nu conine cifre, se va afia pe ecran mesajul NU.
77

Exemplu :
Date de intrare Date de ieire Explicaie
Va lua 9,5 la matematica 10 la
informatica si 10 la romana
0 0 i 1 apar de cele mai multe ori n
ir i 0 este cea mai mic dintre ele

C++
#include<iostream.h>
#include<string.h>
void main()
{int n,i,v[10];//vector de frecvente
char s[501];
for(i=0;i<=9;i++) v[i]=0;
int max=0,g=0;
cin.get(s,501); n=strlen(s);
for(i=0;i<n;i++)
if(s[i]>='0' && s[i]<='9')
{v[s[i]-'0']++;
if(v[s[i]-'0']>max)
max=v[s[i]-'0'];
g=1;
}
if(g==0)
cout<<"Nu";
else
{int k=0;
for(i=0;i<=9&&k==0;i++)
if(v[i]==max) {cout<<i;
k=1;}}}
Pascal
program sub32;
var s:string ;
v:array [1..10] of byte;
max, x, i:byte;
err:integer;
begin
write('s=');
readln(s);
for i:=0 to 9 do
v[i]:=0;
for i:=1 to length(s) do
if (s[i]>='0') and (s[i]<='9') then
begin
val(s[i],x,err); inc(v[x]);
end;
max:=0;
for i:=0 to 9 do
if v[i]>max then
max := v[i]; i:=0;
while v[i]<>max do inc(i);
write(i);readln;end.

Subiectul 33
S se afieze toate prefixele unui cuvnt citit de la tastatur format din cel mult 20 de caractere, doar
litere ale alfabetului englez.
Exemplu :
Date de intrare Date de ieire
Informatica Informatic
Informati
Informat
Informa
Inform
Infor
Info
Inf
In
I

C++
#include<iostream.h>
#include<string.h>
void main()
{char s[30];
cin>>s;int n=strlen(s);
Pascal
program sub33;
var x,y:string [20];
i:byte;
begin
write ('x=');readln (x);
78

for(int i=0; i<n; i++)
{for(int j=0; j<=i; j++) cout<<s[j];
cout<<endl;
}}

for i:=1 to length(x)-1 do
begin
y:=copy(x,1,length (x)-i); writeln (y);
end;
end.

Subiectul 34
Se citesc de la tastatura n cuvinte (n10), fiecare cuvnt avnd lungimea de cel mult 25 caractere. Sa
se afieze cuvintele care ndeplinesc condiia de palindrom (un cuvnt se numete palindrom dac prin
parcurgere de la stnga la dreapta i prin parcurgere de la dreapta la stnga genereaz aceeai valoare).
Exemplu :
Date de intrare Date de ieire
n=4
sas cana bob daca
sas bob

C++
#include<iostream.h>
#include<string.h>
void main()
{int n,i;
char a[10][26],c[26];
cout<<"n=";cin>>n;
for (i=0;i<n;i++)
{cout<<"cuvantul "<<i+1<<":"; cin>>a[i]; }
cout<<"cuvintele palindrom sunt:";
for (i=0;i<n;i++)
{strcpy(c,a[i]); strrev(c);
if (strcmp(a[i],c)= =0)
cout<<a[i]<<" ";}}
Pascal
program sub34;
type sir=string[25];
var n:integer;
i:byte;y:sir;
function pal(x:sir):boolean;
var j:byte;
begin
pal:=true;
for j:=1 to length(x) div 2 do
if x[j]<>x[length(x)-j+1]then pal:=false;
end;
begin
write('n=');readln(n);
for i:=1 to n do
begin
write('y='); readln(y);
if pal(y) then writeln(y,' este
palindrom');
end;
end.

Subiectul 35
Se consider fiierul text UNU.txt care conine informaii scrise pe mai multe linii. Copiai n fiierul
DOI.txt coninutul liniilor cu numr de ordine impar.
Exemplu :
Date de intrare Date de ieire Explicaie
Aceasta este prima linie
23 67 informatica
#1234 ABCD
1 2 3 4 5 6 7
linia cinci
ultima linie
Aceasta este prima linie
#1234 ABCD
linia cinci

S-au copiat prima linie, a
III-a i a V-a linie

79

C++
#include <fstream.h>
#include<iomanip.h>
void main()
{int nrlinie=0; char linie[200];
fstream f("UNU.txt",ios::in);
fstream g("DOI.txt",ios::out);
while(!f.eof())
while(f.get(linie,200))
{nrlinie++;
if(nrlinie%2)
g<<linie<<endl;
f.get();
}
f.close(); g.close();}
Pascal
program sub35;
var
x:char;
f,j:text;
begin
assign (f,'d:\bp\bin\unu.txt'); assign
j,'d:\bp\bin\doi.txt');
reset (f); rewrite (j);
while not (eof(f))do
begin
while not (eoln (f)) do
begin read (f,x); write (j,x); end;
readln (f); readln(f); writeln (j);
end;
close (f); close(j);
end.


Subiectul 36
Elaborai un program care scrie n fiierul text LITERE.txt toate irurile formate din trei caractere
distincte, litere mici ale alfabetului englez. irurile vor fi separate prin caracterul spaiu.
C++
#include<fstream.h>
void main()
{int i,j,k;
fstream f("LITERE.txt",ios::out);
for(i=(int)'a';i<=(int)'x';i++)
for(j=i+1;j<=(int)'y';j++)
for(k=j+1;k<=(int)'z';k++)
{f<<(char)i<<(char)j<<(char)k<<endl;
f<<(char)i<<(char)k<<(char)j<< ;
Pascal
program sub36;
var
i,k,j:char;
f:text;
begin
assign(f,'litere.txt');
rewrite(f);
for i :='a' to 'z' do
for j:='a' to 'z' do
for k:='a' to 'z' do
if (i<>j) and (j<>k) and (k<>i) then
writeln (f,i,j,k,' ');
close(f);
end.

80



f<<(char)j<<(char)i<<(char)k<< ;
f<<(char)j<<(char)k<<(char)i<< ;
f<<(char)k<<(char)i<<(char)j<< ;
f<<(char)k<<(char)j<<(char)i<< ;
}f.close();

Subiectul 37
Fiierul ATESTAT.txt conine n numere naturale(2n 2
30
)(cel puin dou numere pare) cu cel mult 9
cifre fiecare. Scriei un program care afieaz pe ecran penultimul numr par citit din fiier, precum i
numrul de ordine al acestuia. Utilizai un algoritm eficient din punct de vedere al memoriei utilizate
precum i al timpului de execuie. De pe prima linie a fiierului ATESTAT.txt se citete numrul natural
n. De pe urmtoarele n linii se vor citi cele n numere naturale.
Exemplu:
Date de intrare
Explicaii
Date de ieire
ATESTAT.txt
5
10
11
12
13
14
15






Primul numr citit este 10, al doilea 11,..., al
cincilea numr este 15.

Ultimul numr par citit este 14, iar penultimul
este 12.
Se va afia numrul 12. Acesta este al treilea
numr citit din fiierul de intrare.





12 3


n=5 ( se citesc 5 numere naturale de
pe de pe urmtoarele 5 linii ale fiie-
rului de intrare)
81


C++
#include<fstream.h>
void main()
{long n1,n2,nrordine1,nrordine2,n,i,nr;
fstream f("ATESTAT.txt",ios::in);
n1=-2;f>>n;
for(i=1;i<=n;i++)
{f>>nr;
if(nr%2==0)
if(n1==-2)
{n1=nr;nrordine1=i;n2=-1;}
else
if(n2==-1) {n2=nr;nrordine2=i;}
else
{n1=n2;nrordine1=nrordine2;
nrordine2=i;
} }
cout<<n1<<' '<<nrordine1;
f.close();
Pascal
program sub37;
var x,n : longint;
poz1,poz2,i,x1,x2:byte;
f:text;
begin
assign(f,'atestat.txt');reset(f);readln(f,n);
poz1:=0;poz2:=0;
for i:=1 to n do
begin
readln(f,x);
if x mod 2 =0 then
begin
x1:=x2; x2:=x;
poz1:= poz2; poz2:=i;
end;
end;
write (x1,' ',poz1);
close(f);
end.












Subiectul 38
Se citete de la tastatur o fraz cu maxim 250 de caractere. Se cere s se afieze cte semne de
punctuaie sunt. Semne de punctuaie se consider . , : ; - ? !
Exemplu:
Date de intrare Date de ieire Explicaie
Nu-i rau, mai Stefane, sa stie si baiatul tau
oleaca de carte. Cartea iti aduce si
oarecare mangaiere. Eu, sa nu fi stiut a
citi, de mult as fi nnebunit, cate am avut
pe capul meu. Ei, mai Stefane si
Smaranduca, mai ramaneti cu sanatate, ca
eu m-am dusu-m-am. Hai, nepoate, gata
esti?
19 Cele 19 semne de punctuaie sunt:
- , , . . , , , . , , , - - - . , , ?
82



C++
#include<iostream.h>
#include<string.h>
char f[101],punct[]=",.:;?!-",*p;
//punct este un sir constant format din
toate semnele de punctuatie
int k;
void main()
{cin.get(f,101);
p=strtok(f,punct);//separa fraza in entitati
delimitate de semne de punctuatie
while(p)
{k++; //numara semnele de punctuatie
p=strtok(NULL,punct);}
cout<<k;}


Pascal
program sub38;
var t: set of char;
cont, k, i: byte;
x: string;
v: array [1..250] of char;
begin
read (x);t:= ['!', '.', ',', '?', ';', '-',
':'];k:=0;cont:=0;
for i:=1 to length (x) do
if ( x[i] IN t) then
begin
inc (cont); inc (k); v[k]:=x[i];
end;
writeln (cont);
for i:=1 to k do write ( v[i]);
end.



Subiectul 39
n fiierul poezie.in este scris o poezie. Se cere s se afieze pe ecran cel mai lung vers. Dac sunt
mai multe versuri de lungime maxim, se va afia doar primul dintre ele. Se numr toate caracterele,
inclusiv spaiile i semnele de punctuaie (un vers nu poate depi 200 de caractere).



Exemplu:
poezie.in Date de ieire Explicaie
Vine melcul suparat
O furnica l-a piscat
Si cum vine, pas-pas-pas
Se-ntalni cu-n carabus
Striga melcu-n gura mare:
- Nu te mai praji la soare,
Date-ncolo, nu-mi sta-n drum
Ca te iau in coarne-acum.
Date-ncolo, nu-mi sta-n drum Cel mai lung vers are 28 de
caractere

C++
#include<fstream.h>
#include<string.h>
char a[256],amax[256];int lmax,l;
void main(){
ifstream f("poezie.in");
while(f.getline(a,256)) //cat timp mai putem citi
versuri
{l=strlen(a);
if (l>lmax)//am gasit un vers mai lung
Pascal
program sub39;
var f: text;
x,s:string; max:byte;
begin
assign (f,'Poezie.in'); reset (f);
max:=0;
while not eof(f) do
begin
readln (f,s);
83

{lmax=l;
strcpy(amax,a);}//retin in amax
versul mai lung
}
cout<<amax;
}

if length (s) >max then
begin
max:= length (s); x:=s;
end;
end;
close (f);
writeln (x);
end.

Subiectul 40
Se citete de la tastatur un text cu maxim 250 de caractere. S se afieze pe ecran textul obinut prin
nlocuirea tuturor vocalelor cu litera a sau A, dup cum vocala respectiv este liter mic sau liter
mare.
Exemplu:
Date de intrare Date de ieire Explicaie
Stiam sa recunosc si sa
deosebesc, de la prima
vedere, China de Arizona. O
astfel de abilitate e folositoare
daca te ratacesti noaptea.
Staam sa racanasc sa sa
daasabasc, da la prama vadara,
Chana da Arazana. A astfal da
abalatata a falasataare daca ta
ratacasta naaptaa.
Vocala O a fost nlocuit cu A,
restul vocalelor cu a.

C++
#include<fstream.h>
#include<ctype.h>
#include<string.h>
char a[251],voc[]="aeiouAEIOU";//un sir
initializat cu vocale
void main()
{cin.get(a,251);
for(int i=0;i<strlen(a);i++)
if(strchr(voc,a[i])) //daca e vocala
if(islower(a[i])) //daca e litera
mica
a[i]='a';
else a[i]='A';
cout<<a;
}

Pascal
program sub40;
var
i:byte;
st:string;
begin
writeln('Introduce-ti text:');readln(st);
for i:= 1 to length(st) do
begin
if (st[i]='i') or (st[i]='o') or (st[i]='e') or
(st[i]='u') then
st[i]:='a';
if (st[i]='I') or (st[i]='O') or (st[i]='E') or
(st[i]='U') then
st[i]:='A';
end;
write(st);
end.



Soluiile problemelor au fost propuse de:
Prof. Neagu Violeta, Colegiul Naional Mihail Koglniceanu
Prof. Voinea Mirela, Colegiul Naional Vasile Alecsandri
Prof. Georgeta Balacea, Colegiul Naional Alexandru Ioan Cuza
Prof. Ilie Daniela, Colegiul Naional Alexandru Ioan Cuza
Prof. Grigore Magdalena, Colegiul Naional Alexandru Ioan Cuza


84


REZOLVRI-BAZE DE DATE

Limbajul SQL (Structured Query Language) este limbajul utilizat de majoritatea sistemelor de
baze de date relaionale (SGBDR) pentru definirea i manipularea datelor.
Din punct de vedere istoric ar trebui menionat faptul c limbajul SQL a fost dezvoltat ntr-un
prototip de sistem de gestiune a bazelor de date relaionale la IBM, n 1970. n 1979 corporaia Oracle
a introdus prima implementare a limbajului SQL n varianta comercial.
Termenii utilizai de limbajul SQL sunt
- tabel (Table) utilizat pentru a desemna o relaie;
- linie (row) utilizat pentru a desemna un tuplu;
- coloan (column) utilizat pentru a desemna un atribut.
Componentele pe care le cuprinde limbajul SQL sunt urmtoarele:
1. componenta de descriere a datelor relaionale (limbajul de descriere a datelor - LDD),
2. componenta de manipulare a datelor relaionale (limbajul de manipulare a datelor - LMD),
ambele fiind absolut necesare n gestiunea BD.
Pe lng aceste componente principale, standardul SQL2 mai prevede i alte componente ale
limbajului:
3. controlul tranzaciilor;
4. controlul securitii i refacerea datelor.
Controlul tranzaciilor conine comenzi pentru specificarea tranzaciilor. Unele implementri
adaug comenzilor prevzute n standard i alte comenzi suplimentare de control al concurenei i
refacerea datelor.
Controlul securitii i refacerea datelor conine comenzi de administrare a bazei de date
pentru definirea utilizatorilor i a drepturilor acestora de acces la tabele. Aceast component este
dependent de SGBD, iar pentru sisteme performante, administratorul BD este obiectul activitii unei
categorii speciale de utilizatori ai BD administratori ai BD.

Structura lexical a limbajului SQL
Elementele unei instruciuni (statement) sunt:
- cuvintele cheie (key words), dintre care fac parte comenzile (SELECT, UPDATE, INSERT
etc), operatorii (AND, OR, NOT, LIKE), clauzele (WHERE, SET, VALUES etc);
- identificatorii (identifier) sunt elementele care denumesc tabela, coloana sau alt obiect BD;
SQL face diferena ntre literele mari i mici, deci este case-sensitive; identificatorul care
conine ghilimele se numete identificator delimitat;
- constantele (literal) reprezint iruri de caractere ( ), numere ntregi, numere reale (ex. 3.5; 4.
; .001; 5e2), constanta NULL care simbolizeaz lipsa de informare, constante de tip logic (1
pentru TRUE i 0 pentru FALSE);
- caracterele speciale, cum ar fi ; care semnific terminarea comenzilor, . care semnific virgula
zecimal, sau * care simbolizeaz operatorul de nmulire.

Operatori SQL
operatori aritmetici binari:
+
-
*
% modulo
^ ridicarea la putere
& AND orientat pe bii
| OR orientat pe bii
# XOR orientat pe bii
85

<< deplasare la stnga
>> deplasare la dreapta
operatori binari de comparaie
<
>
<=
>=
=
<> sau != diferit
operatori aritmetici mari
@ valoarea absolut
! factorial
!! factorial, operator postfix
~ NOT orientat pe bii
operatori de comparaie
A BETWEEN min AND max (compar A cu dou valori: min i max)
A IN (v
1
,...,v
n
) compar A cu o list de valori
A IS NULL
A IS NOT NULL
A LIKE model_ir
operatori logici
Operatorii logici sunt legai prin cuvintele cheie AND, OR, NOT i returneaz o valoare
logic TRUE, FALSE sau NULL.
operatori relaionali
UNION (reuniune)
INTERSECT (intersecie)
MINUS (diferena).

Funcii definite n SQL

Funcii agregat

Funciile agregat calculeaz un rezultat din mai multe linii ale unui tabel (funcii de
totalizare):
COUNT (furnizeaz numrul de linii ale unui rezultat);
SUM (execut suma tuturor valorilor dintr-o coloan);
MAX (returneaz valoarea cea mai mare dintr-o coloan);
MIN (returneaz valoarea cea mai mic dintr-o coloan);
AVG (calculeaz media valorilor dintr-o coloan).
Aceste funcii vor fi folosite n instruciunea SELECT.

Funcii scalare

Funciile scalare primesc unul sau mai multe argumente i returneaz valoarea calculat sau
NULL n caz de eroare. Argumentele funciilor pot fi constante sau valori ale atributelor specificate
prin numele coloanelor corespunztoare. Dintre funciile scalare amintim:
- funcii numerice
- de calcul trigonometric: sin, cos, tg, ctg etc.
- de calcul al logaritmului: ln, log, lg
- de calcul al puterilor: pow
- de rotunjire: floor, ceil etc.
86

- funcii pentru manipularea irurilor de caractere
- funcii pentru data calendaristic
- funcii de conversie

Tipuri de date

n limbajul SQL sunt definite mai multe tipuri de date: numeric, ir de caractere, ir de bii,
data (calendaristic), timp.
Denumirile tipurilor de date precum i limitele acestora difer de la un SGBD la altul, dar n
general, sunt destul de asemntoare.

Tipul numeric include

- numere ntregi: INTEGER sau INT reprezentat pe 4 octei;
SMALLINT reprezentat pe 2 octei;
- numere reale reprezentate n virgul flotant, cu diferite precizii:
FLOAT reprezentat pe 4 octei;
REAL reprezentat pe 8 octei;
DOUBLE [PRECISION] reprezentat pe 8 octei;
- numere zecimale reprezentate cu precizia dorit:
tipul NUMERIC sau DECIMAL, cu forma numeric[(p,s)], unde p este
numrul total de cifre afiate, iar s este numrul de cifre dup punctul zecimal.

Tipul ir de caractere

CHARACTER (n) sau CHAR (n) definesc iruri de caractere cu lungimea fix.
CHARACTER VARYING sau VARCHAR (n) definete irul de caractere cu lungimea variabil.
Asemnarea dintre cele dou tipuri prezentate mai sus este aceea c ambele reprezint iruri de
maxim n caractere, iar deosebirea este aceea c pentru iruri cu numr de caractere mai mic ca n,
CHAR (n) completeaz irul cu spaii albe pn la n caractere, iar VARCHAR (n) memoreaz numai
attea caractere cte are irul dat.

Tipul iruri de bii

BIT (n) definete secvene de cifre binare (care pot lua valoarea 0 sau 1) de lungime finit n;
BIT VARYING (n) definete secvene de lungime variabil, cu limita maxim n.

Tipuri pentru data calendaristic i timp

DATE permite memorarea datelor calendaristice n formatul yyyy-mm-dd;
TIME permite memorarea timpului, folosind trei cmpuri hh:mm:ss;
TIMESTAMP(p) permite memorarea combinat a datei calendaristice i a timpului, cu precizia p
pentru cmpul SECOND (al secundelor); valoarea implicit a lui p este 6;
INTERVAL este utilizat pentru memorarea intervalelor de timp.
Tipurile de date sunt case-insensitive, deci nu in cont de caracterele mari sau mici.
Bazele de date sunt colecii de date grupate n mai multe tabele cu legturi ntre ele.
Operaiile ce se efectueaz asupra bazelor de date sunt :
- Crearea tabelelor bazei de date
- Popularea cu nregistrri
- Interogarea tabelelor
87

- Realizarea unor formulare i rapoarte
Crearea tabelelor
create table produse(codp INT,denumire VARCHAR2(20),codm INT, pret FLOAT);
Popularea tabelelor cu nregistrri
insert into produse values(1,'suruburi1',1,5.3)
Interogarea bazei de date reprezint principala funcie a unui limbaj relaional de manipulare a
datelor. Comanda fundamental a standardului SQL este SELECT, aceasta permind interogarea unei
baze de date. Interogarea reprezint o ntrebare care i extrage rspunsul din baza de date.
Componentele interogrii se numesc clause.
Sintaxa general a comenzii SELECT este urmtoarea:
SELECT [ALL/DISTINCT/UNIQUE] list de selecie
FROM list de relaii (tabele)
WHERE condiie de cutare asupra liniilor
GROUP BY list de atribute care permit partiionarea
HAVING condiie asupra partiiilor
ORDER BY list de atribute;

Clauzele SELECT i FROM sunt obligatorii. SELECT specific datele care se selecteaz, iar
clauza FROM specific relaiile din care se selecteaz. Restul clauzelor sunt opionale.
Exemplu
select denumire from produse order by denumire
select nume, nr_tel from abonati where restanta =(select max(restanta) from abonati)
select count(distinct cod_pers) from automobile,proprietari where
automobile.cod_auto=proprietari.cod_auto
tergerea datelor
delete from produse where pret>(select avg(pret) from produse)
Modificarea datelor
Update produse set denumire=lapte1 where denumire=lapte




SUBIECTUL REZOLVARE
Subiectul 1

La o societate de productie, evidenta
produselor finite se tine ntr-o tabela produse
cu structura:
codp, denumire - numele produsului, codm -
codul materialului din componena produsului
pret - pretul unitar al produsului
Se cere:
a) Sa se afiseze toate produsele n ordine
alfabetica.
b) Sa se stearga toate produsele cu pret unitar
mai mare dect valoarea mediei aritmetice a
preturilor tuturor produselor din tabela.
create table produse(codp INT,denumire
VARCHAR2(20),codm INT, pret FLOAT);


a)
select denumire from produse order by denumire

b)
delete from produse where pret>(select
avg(pret) from produse)

88

SUBIECTUL REZOLVARE
Subiectul 2

Pentru situatia pe luna curenta a impulsurilor
posturilor telefonice dintr-un oras se folosete
baza de date abonati , cu structura:
nr_tel, nume, adresa , restanta, impulsuri
Se cere :
a) Sa se afiseze pentru fiecare abonat telefonic
numele, adresa si restantele.
b) Sa se afiseze numele si numarul de telefon
pentru abonatul sau abonatii a caror restanta
are valoare maxima.
create table abonati(nr_tel
VARCHAR2(20),nume VARCHAR2(30),adresa
VARCHAR2(50),restanta FLOAT, impulsuri
INT)

a)
select nume,adresa,restanta from abonati

b)
select nume,nr_tel from abonati where restanta
=(select max(restanta) from abonati)

Subiectul 3

Creati fisierul contracte care retine date despre
contractele ncheiate de un oficiu bancar
si care are urmatoarea structura:
nr_contract , nume_client , tip_operatie,
termen_achitare
Se cere:
a) Sa se afiseze numarul contractului, tipul
operatiei si termenul de achitare pentru clientul
Popescu Ion.
b) Sa se afiseze numarul clientilor care au
termen de achitare astazi.
create table contracte(nr_contract
INT,nume_client VARCHAR2(50),tip_operatie
VARCHAR2(30),termen_achitare DATE)

a)
select nr_contract,tip_operatie,termen_achitare
from contracte where nume_client='Popescu Ion'

b)
select count(nume_client) as "Clienti astazi"
from contracte where
termen_achitare=SYSDATE

Subiectul 4

Pe un platou de filmare se tine evidenta
actorilor si a filmelor n care sunt distribuiti
acestia
folosind doua tabele:
actori
id_actor ,nume , prenume , varsta , cod_film
filme
cod_film , titlu, gen_film
Se cere:
a) Sa se afiseze toti actorii (distincti) care au
vrsta <50 ani
b) Sa se afiseze titlul si genul filmului n care
joaca fiecare actor.
create table actori(id_actor INT,nume
VARCHAR2(50),prenume
VARCHAR2(50),varsta INT, cod_film INT)

create table filme(cod_film INT,titlu
VARCHAR2(50),gen_film VARCHAR2(50))

a)
select distinct nume, prenume from actori where
varsta<50

b)
select titlu,gen_film,nume,prenume from
actori,filme where
actori.cod_film=filme.cod_film
Subiectul 5

O firma are ca obiect de activitate
comercializarea obiectelor de papetarie. Pentru
gestionarea activitatii firmei se utilizeaza un
tabel cu structura :materiale, cod_material ,
denumire , cantitate, pret_unitar, valoare
Se cere:
a) Sa se afiseze nregistrarile din tabela
ordonate descrescator dupa cantitate.
create table materiale(cod_material INT,
denumire VARCHAR2(50),cantitate
INT,pret_unitar FLOAT,valoare FLOAT)

a)
select * from materiale order by cantitate desc

b)
select denumire from materiale where
valoare=(select max(valoare) from materiale)
89

SUBIECTUL REZOLVARE
b) Sa se afiseze denumirea materialului cu
valoarea maxima .


Subiectul 6

Un service auto tine evidenta activitatii n doua
tabele:
automobile
cod_auto, marca , data_in, data_out, cost,
nr_inmatr
proprietari
cod_pers , cod_auto, nume
Se cere:
a)Pentru marca DACIA afisati numarul de
autoturisme ai caror proprietari au solicitat
serviciile firmei de reparatii
b)Afisati datele persoanelor proprietare de
autoturisme care au parasit service-ul astazi.
create table automobile (cod_auto INT,marca
VARCHAR2(50),data_in DATE, data_out
DATE, cost FLOAT,nr_inmatr
VARCHAR2(30))
create table proprietari (cod_pers INT,cod_auto
INT,nume VARCHAR2(50))

a)
select count(cod_auto) as "nr_cerut" from
automobile where marca='DACIA'

b)
select nume,marca,data_out from proprietari p,
automobile a where data_out<=sysdate and
a.cod_auto=p.cod_auto
Subiectul 7

n baza de date a unei firme care nchiriaza
autoturisme se gasesc doua tabele:
automobile
cod_auto , marca, data_i, cost, nr_inmatr
persoane
id_pers , nume, cod_auto, adresa
Se cere:
a)Afisati persoanele cu domiciliul n Galati
care au nchiriat masini .
b)Sa se afiseze pentru fiecare marca numarul
de automobile care au la nchiriere costuri
cuprinse ntre 100 si 500 lei.

create table persoane (id_pers INT,nume
VARCHAR2(50),cod_auto INT,adresa
VARCHAR2(50))
create table automobile(cod_auto INT,marca
VARCHAR2(50),data_i DATE,cost
FLOAT,nr_inmatr VARCHAR2(30))

a)select nume,adresa,marca,nr_inmatr,data_i,cost
from automobile,persoane where adresa like
'%Galati%' and
persoane.cod_auto=automobile.cod_auto

b)select marca,count(marca)as "nr_cerut" from
automobile1 where cost>=100 and cost<=500
group by marca
Subiectul 8

O firma de asigurari are o baza de date care
contine tabelele:
asigurare
cod_asigurare, tip_asigurare, data, cost
persoane
id_pers , cod_asigurare , nume, adresa
Cerinte:
a)Sa se afiseze persoanele asigurate, ordonate
alfabetic
b)Sa se afiseze date despre persoanele care au
asigurari de viata si locuiesc n orasul Tecuci.
create table asigurare(cod_asigurare
INT,tip_asigurare VARCHAR2(30),data
DATE,cost FLOAT)

a)
select * from persoane order by nume

b)
select nume,adresa,tip_asigurare,data,cost from
persoane3 p,asigurare a where p.adresa like
'%Tecuci%' and
p.cod_asigurare=a.cod_asigurare

Subiectul 9

Fie tabelul PRODUSE cu urmatoarele campuri:
codp - codul produsului, denp - denumirea
produsului, um unitatea de masura, pret
create table produse(codp VARCHAR2(2),denp
VARCHAR2(50),um VARCHAR2(2),pret
FLOAT,stoc INT,termen DATE)

a)select avg(pret) as "pret mediu" from produse4
90

SUBIECTUL REZOLVARE
pretul produsului, stoc - stoc produs , termen
data expirarii, pentru a putea pastra datele
referitoare la produsele dintr-un magazin
alimentar.
Se cere:
a. Determinati pretul mediu pentru fiecare
produs n afara de produsul lapte
b. Afisati produsele care au pretul mai mare
dect produsul ce are codul P4.
where denp<>'lapte'

b)
select denp,pret from produse where pret>(select
pret from produse4 where codp=P4)


Subiectul 10

Fie tabelul PRODUSE cu urmatoarele campuri:
codp - codul produsului, denp - denumirea
produsului, um unitatea de masura, pret
pretul produsului, stoc - stoc produs , termen
data expirarii, pentru a putea pastra datele
referitoare la produsele dintr-un magazin
alimentar.
Se cere:
a. Afisati pretul minim pe produs.
b. Sa se afiseze ultima zi a lunii (char) n care
expira produsul cu codul P4
create table produse(codp VARCHAR2(2),denp
VARCHAR2(50),um VARCHAR2(2),pret
FLOAT,stoc INT,termen DATE)

a)
select min(pret) as "pret minim" from produse

b)
select last_day(termen) as "ultima zi" from
produse where codp='p4'




Subiectul 11
O firma ce se ocupa cu vanzarea materialelor
de constructii dispune de mai multe depozite
D1,
D2, D3,. Gestiunea firmei se pastreaza in
tabelul STOCURI cu urmatoarea structura:
Denumire, Cantitate, Pret_unitar, Depozit.
Se cere:
a. Care sunt materialele existente in depozitul
D1?
b. Sa se afiseze materialele in ordinea
descrescatoare a valorii lor totale
(valoare totala=cantitate*pret unitar).
a) select * from stocuri wherw
depozit=D1;
b) select denumire,cantitate*pret_unitar as
valoare_totala from stocuri order by
valoare_totala desc;

Subiectul 12
O firma ce se ocupa cu vanzarea materialelor
de constructii dispune de mai multe depozite
D1,
D2, D3,. Gestiunea firmei se pastreaza
intabelul STOCURI cu urmatoarea structura:
Denumire, Cantitate, Pret_unitar, Depozit.
Se cere:
a. Care este valoarea totala a materialelor?
b. Sa se ieftineasca cimentul cu 10%.
a) select sum(cantitate*pret_unitar) as
valoare totala from stocuri ;
b) select
denumire,cantitate,pret_unitar,(pret_unitar
-0.1*pret_unitar) as pret_ieftinit from
stocuri;

Subiectul 13
Fie tabelul SALARIATI cu campurile
Id_angajat, Nume, Prenume, E_mail, Telefon,
Data_angajarii, Id_functie, Salariu, Comision,
a) select nume, prenume, id_departament
from salariat where id_angajat='176';
91

SUBIECTUL REZOLVARE
Id_manager, Id_departament.
Se cere:
a. Pentru salariatul cu id-ul 176 sa se afiseze
numele, prenumele si departamentul la care
lucreaza.
b. Sa se afiseze numele salariatilor(numai
prima litera), lungimea numelui, pentru
salariatii
ale caror nume ncep cu J, M, A, ordonat dupa
nume.
b) select nume, length (nume) from salariat
where upper(nume) like'J%' or
upper(nume) like 'M%' or upper(nume)
like 'A%' order by nume;

Subiectul 14
Fie tabelul SALARIATI cu campurile
Id_angajat, Nume, Prenume, E_mail, Telefon,
Data_angajarii, Id_fuctie, Salariu, Comision,
Id_manager, Id_departament.
Se cere:
a. Afiseaza salariatii cu salariul ntre 5000 si
12000 din departamentele 20 si 50.
b. Sa se afiseze toti salariatii (codul, nume,
salariul) care au salariul mai mare ca media
salariilor, n ordinea crescatoare a salariilor.

a) select * from salariat where
salariu>='5000' and salariu<='12000' and
id_departament='20' or
id_departament='50';
b) select * from salariat where
salariu>(select avg (salariu) from
salariat);

Subiectul 15
O firma are urmatoarea baza de date compusa
din tabelele:
Angajati ce contine urmatoarele cmpuri:
id_angajat id-ul angajatului, nume numele
angajatului, prenume prenumele angajatului,
salariu salariul angajatului, id_departament
id-ul departamentului, data_ang data angajarii
Departament cu urmatoarele cmpuri:
id_departament id-ul departamentului,
denumire
denumire departament
Se cere:
a) Sa se afiseze toti angajatii grupati pe
departamente.
b) Sa se afiseze persoanele angajate n anul
2008.
a)select
id_angajat,nume,prenume,salariu,data_ang from
angajati group by id_departament;
b) select * from angajati where
to_char(data_angaj,'yyyy')='2008'

Subiectul 16
La un magazin de calculatoare se tine evidenta
produselor vndute prin tabelele:
Produse ce are urmatoarele cmpuri: nrp
numar produs, denp denumire produs, pret
pret produs, stoc stocul produsului
Facturi cu urmatoarele cmpuri: nrf numarul
facurii, cantv cantitate vnduta, dataf data
facturii, nrp numar produs
Se cere:
a) Sa se afiseze codul produsului, pretul initial
a) select p.pret,(p.cod_p,p.pret*0.1p.pret) as
pret_majorat from produse p,facturi f
where p.cod_p=f.cod_p and
upper(denp)=monitor and
upper(denp)=mouse;
b) select nrf,denp,cant from produse3
p,facturi3 f where dataf=to_date('27-10-
2010','dd-mm-yyyy') and f.nrp=p.nrp
92

SUBIECTUL REZOLVARE
si pretului marit cu 10% pentru toate
produsele de tip Monitor si Mouse
b) Sa se afiseze numarul facturilor, denumire
produsului si cantitatea vnduta la data de
27.10.2008

Subiectul 17
O baza de date contine 2 tabele:
Persoane cu urmatoarele cmpuri: codp codul
persoanei, nume numele persoanei,
prenume prenumele persoanei, localitate
numele localitatii
Automobile cu cmpurile: numar numarul
masinii, marca marca masinii, codp codul
persoanei
Se cere:
a) Sa se afiseze numele, prenumele, numarul si
marca tuturor masinilor
b) Sa se afiseze prenumele persoanelor care au
automobile de tip SKODA nmatriculate
n Bucuresti
a)select
p.nume,p.prenume,a.numar,a.marca from
personae p,automobile a where
p.codp=a.codp;
b)select p.prenume from personae
p,automobile a where p.codp=a.codp and
upper(marca)=SKODA and
p.localitate=BUCURESTI;

Subiectul 18
O scoala are o baza de date cu urmatoarele
tabele:
Elevi cu cmpurile: mat numar matricol,
clasa clasa elevului, nume numele elevului,
prenume prenumele elevului, medie_gen
media generala a elevului
Informatii cu urmatoarele cmpuri: mat
numar matricol, lac localitate, data_n data
nasterii
Se cere:
a) Sa se afiseze pentru fiecare elev numele,
prenumele, localitatea si data nasterii n
ordine alfabetica
b) Sa se afiseze elevii promovati n ordine
alfabetica
a) select
e.nume,e.prenume,i.loc,i.data_n from
elevi e,informatii i where e.mat=i.mat
order by e.nume
b) select nume,prenume,medie_gen
from elevi where medie_gen >=5;

Subiectul 19
Un magazin are baza de date formata din
tabelele:
Produse (codp codul produsului , nume
denumire produs, culoare , cant_stoc -
cantitatea aflata n stoc, pret pretul
produsului)
Clienti (codcli - cod client , nume nume
client, loc - localitate client)
Se cere:
a) Sa se afiseze lista produselor cu pretul ntre
20 si 25 lei.
b) Sa se afiseze numarul produselor de culoare
alba, cumparate de clientul Vasilescu.
a)select * from produse where prt between 20
and 25;
b)select count(p.cod_p) from produse p,client c
where p.cod_p=c.cod_p andculoare=alba and
upper(nume)=VASILESCU;



93

SUBIECTUL REZOLVARE
Subiectul 20
Un magazin are baza de date formata din
tabelele:
Produse (codp codul produsului , nume
denumire produs, culoare , cant_stoc -
cantitatea aflata n stoc, pret pretul
produsului)
Vanzare (codp, cant cantitatea vanduta, datav
- data vanzarii)
Se cere:
a) Sa se ordoneze dupa cod produsele vndute
ieri.
b) Sa se calculeze cantitatea totala cumparata ,
la produsele de culoare verde.


a) select max(cant) from vanzare where
to_char(datav,DD)=to_char(sysdate,D
D)-1
b) select sum(cant_stoc) from vanzare
v,produse p where v.codp=p.codp group
by p.culoare having p.culoare=verde;

Subiectul 21
O biblioteca tine evidenta activitatii zilnice n
baza de date BIBLIOTECA. Baza de date
contine urmatoarele tabele:
CARTI(cod_carte,titlu,autor,editura )
NR_CARTI(cod_carte ,nr exemplare )
CITITORI(CNP,nume,localitate,nr_telefon)
MPRUMUT(cod_carte,CNP,data_mprumut).
Se cere:
a) Sa se afiseze titlul cu cele mai multe
exemplare?
b) Sa se afiseze numele cartii cel mai putin
solicitata?


a) select c.titlu,max(nr_carti.nr_exemplare)
from cart c,nr_carti nr where
c.cod_carte=nr-carti.cod_carte;
select titlu from carti where cod_carte=(select
cod_carte from imprumuturi group by cod_carte
having count(*)=(select max(count(*)) from
imprumuturi group by cod_carte))
Subiectul 22
O societate care detine mai multe firme n
diverse orase ale tarii , tine evidenta angajatilor
utiliznd o baza de date numita EVIDENTA.
Baza de date contine urmatoarele tabele:
ANGAJATI(cod, nume, prenume,
data_nasterii, data_angajarii, localitate,
id_firma, id_functie,
salariu)
FIRME(id_firma, nume_firma, localitate)
FUNCTII(id_functie, nume_functie)
Se cere:
a) Sa se afiseze datele angajatilor care ocupa
functia de administrator.
b) Sa se afiseze numele , prenumele ,
localitatea cu majuscule, pentru angajatii care
locuiesc n
Iasi,Sibiu sau Galati
a)select a.nume,a.prenume,f.id_functie from
angajati a,functii fu where
upper(nume_functie)=ADMINISTRATOR;
b)select a.nume,a.prenume,upper(localitate) from
angajati a.firme fi where localitate=IASI or
localitate=SIBIU or localitate=GALATi;

Subiectul 23
Un magazin are baza de date formata din
tabelele:

a) select * from produse order by nume;
94

SUBIECTUL REZOLVARE
Produse (codp codul produsului , nume
denumire produs, culoare , cant_stoc -
cantitatea aflata n stoc, pret pretul
produsului)
Clienti (codcli - cod client , nume nume
client, loc - localitate client)
Se cere:
a) Sa se afiseze produsele din magazin
ordonate alfabetic dupa nume.
b) Sa se afiseze produsele cumparate de clientii
din Braila

b) select p.nume,p.culoare,p.pret from
produse p,client c where
upper(c.loc)=BRAILA;

Subiectul 24
O companie opereaza cu urmatoarea baza de
date :
Persoane (id, id_firma, nume, localitate ,
data_n data nasterii)
Firme (id_firma, denumire, localitate)
Se cere :
a) Sa se afiseze numele firmelor din localitatea
Galati;
b) Sa se afiseze numele tuturor persoanelor
care lucreaza la aceeasi firma la care lucreaza
Popescu.


a)select denumire from firme where
upper(localitate)=GALATI;
b) select nume from personae where
id_firma=(select id_firma from persoane where
nume=Popescu)

Subiectul 25
O companie opereaza cu urmatoarea baza de
date :
Persoane (id, id_firma, nume, localitate ,
data_n data nasterii)
Firme (id_firma, denumire, localitate)
Se cere :
a) Numarul firmelor din Galati;
b) Numele firmei care are un numar maxim de
angajati.

a) select count(id_firma) from firme where
lower(localitate)=galati;
b) select nume from firme where id=(select
id_firma from persoane group by id_firma
having count(*)=(select max(count(*)) from
persoane group by id_firma))

Subiect 26
Se da baza de date :
Produse (codp codul produsului, den
denumire produs, culoare, stoc- cantitatea
aflata in
stoc, pret pretul produsului)
Client (codcli cod client, nume, loc-
localitatea clientului)
Vanzare (codp, codcli, cant cantitatea
vanduta, datav - data vanzarii)
Se cere:
a) Lista tuturor produselor .
b) Clientii din Galati si zilele cnd acestia au
facut cumparaturi.
a)select den from produse;
b)select c.nume,v.datav from client c,vanzare v
where c.codcli=v.codcli and
lower(c.loc)=galati;


95

SUBIECTUL REZOLVARE

Subiect 27
Se da baza de date :
Produse (codp codul produsului, den
denumire produs, culoare, stoc- cantitatea
aflata in
stoc, pret pretul produsului)
Client (codcli cod client, nume, loc-
localitatea clientului)
Vanzare (codp, codcli, cant cantitatea
vanduta, datav - data vanzarii)
Se cere:
a) Denumirea produselor care se vnd cu
preturi ntre 100 si 200 lei
b) Culorile de pnza cumparate astazi de Marin
din Galati?

a) select denumire from produse where prt
between 100 and 200;
b) select culoare from produse p, client c,
vanzare v where
v.datav=to_date(sysdate,dd-mm-yyyy)
and v.codcli=c.codcli and v.codp=p.codp
and c.nume=Marin

Subiect 28
Se da baza de date :
Produse (codp codul produsului, den
denumire produs, culoare, stoc- cantitatea
aflata in
stoc, pret pretul produsului)
Client (codcli cod client, nume, loc-
localitatea clientului)
Vanzare (codp, codcli, cant cantitatea
vanduta, datav - data vanzarii)
Se cere:
a) Sa se ordoneze produsele de tip vopsea
descrescator dupa pret.
b) Sa se afiseze produsele vndute n ziua cnd
Marin a cumparat vopseaua ?

a) select den,pret from produse order by
pret desc;
b) select den from produse p, vanzare v
where v.datav=(select to_date(datav,dd-
mm-yyyy) from vanzare v,client
c,produse p where c.nume=Marin and
c.codcli=v.codcli and v.codp=p.codp and
p.den=vopsea) and v.codp=p.codp

Subiect 29
Se da baza de date :
Produse (codp codul produsului, den
denumire produs, culoare, stoc- cantitatea
aflata in
stoc, pret pretul produsului)
Client (codcli cod client, nume, loc-
localitatea clientului)
Vanzare (codp, codcli, cant cantitatea
vanduta, datav - data vanzarii)
Se cere:
a) Care este lista tuturor produselor cu stoc 0 ?
b) Care este cantitatea maxima de vopsea
cumparata de fiecare client ?

a) select * from produse where stoc=0;
b) select max(v.cant),p.den from produse
p,vanzare v where p.codp=v.codp having
p.den=vopsea;

Subiect 30
Se da baza de date :
Elevi (nume, prenume, clasa, absn numarul

a)select nume,prenume,clasa from elevi where
absm>60;
96

SUBIECTUL REZOLVARE
absentelor nemotivate, absm numarul
absentelor motivate)
Sali (clasa, sala)
Se cere:
a) Sa se afiseze elevii (nume, prenume, clasa)
cu peste 60 de absente nemotivate.
b) Sa se afiseze sala unde nvata Ionescu.

b)select s.sala from elevi e,Sali s where
e.clasa=s.clasa and upper(nume)=IONESCU;

Subiect 31
O societate comerciala are n baza de date
urmatoarele tabele :
ANGAJATI (cod_angajat, nume ,data_nasterii
,adresa ,telefon )
SALARII(cod_angajat,salariu,
numar_ore_suplimentare,
cost_ora_suplimentare,
venit_din_ore_suplimentare, retineri,
rest_plata)
Se cere:
a)Afisati pentru toti angajatii nascuti n
perioada [d1,d2]:
(nume,adresa,salariu,rest_plata)
b)Care este venitul total numai din ore
suplimentare pentru angajatii firmei ?
a)select * from angajati where data_nasterii
between to_date(15-02-2010,dd-mm-yyyy)
and to_date(20-04-2010,dd-mm-yyyy)
b) select
a.nume,a.cod_angajat,sum(s.venit_din_ore_supli
mentare) as venit_suplimentar from angajati
a,salarii s where a.cod_angajat=s.cod_angajat;

Subiect 32
Fie baza de date IT_STORE cu urmatoarele
tabele :
Magazine(nr_mag, adresa, telefon)
Componente(nr_comp, nume, descriere, pret,
nr_mag, vandut)
Clienti(id_cli, nume, adresa, telefon)
Comenzi(nr_com, nr_comp, data, id_cli)
a) Sa se afiseze numerele de telefon ale
magazinelor din Galati.
b) Care sunt clientii care au efectuat comenzi
astazi ?

a)select telefon from magazine where
upper(adresa)=GALATI;
b) select c.nume from client c,comenzi co where
c,id_cli=co.id_cli and data=sysdate;

Subiect 33
Informatiile despre personalul unei societati
comerciale sunt trecute in urmatoarele tabele
persoane(id_persoana, nume, prenume, adresa,
data_nasterii)
copii(id_persoana, prenume_copil,
data_nasterii)
Se cere:
a) Sa se afiseze numele si prenumele
persoanelor in ordinea descrescatoare a varstei
b) Sa se afiseze numele complet al fiecarui
copil si data nasterii
a) select nume,prenume from personae
order by data_nasterii desc;
b) select
p.nume,c.prenume_copil,c.data_nasterii from
personae p,copii c where
p.id_persoana=c.id_persoana;

Subiect 34 a) select nume,prenume,adresa from persoane
97

SUBIECTUL REZOLVARE
Informatiile despre personalul unei societati
comerciale sunt trecute in urmatoarele tabele:
persoane(id_persoana, nume, prenume, adresa,
data_nasterii)
copii(id_persoana, prenume_copil,
data_nasterii)
Se cere:
a) Sa se afiseze numele, prenumele si adresa
pentru cele mai tinere trei persoane din
societate
b) Sa se afiseze prenumele copiilor angajatului
Ionescu Marian
where data_nasterii=(select min(data_nasterii)
from persoane)
b)select c.prenume_copil from copii c,personae
p where p.id_persoana=c.id_persoana and
upper(p.nume)=IONESCU and
upper(p.prenume)=MARIAN;

Subiect 35
Se considera o tabela care contine informatii
referitoare la sportivii participanti la un
campionat
de gimastica si o tabela ce contine antrenorii
echipelor tarilor participante(se considera ca
din
partea fiecarei tari participa exact un antrenor)
sportivi(tara, nume_sportiv, nota1, nota2,
nota3)
antrenori(tara, nume_antrenor)
Se cere:
a) Sa se adauge campul medie in tabela sportivi
care sa contina media notelor la cele trei
probe
b) Sa se determine numarul antrenorilor
a) alter table sportivi add (med float);

b)select count(nume_antrenor) as
numar_antrenori from antrenori;



Subiect 36
Se considera o tabela care contine informatii
referitoare la sportivii participanti la un
campionat
de gimastica si o tabela ce contine antrenorii
echipelor tarilor participante(se considera ca
din
partea fiecarei tari participa exact un antrenor)
sportivi(tara, nume_sportiv, nota1, nota2,
nota3)
antrenori(tara, nume_antrenor)
Se cere:
a) Sa se afiseze numarul de sportivi participanti
din fiecare tara
b) Sa se afiseze pentru fiecare tara participanta
numele antrenorului si numele sportivului
SUBIECTUL 36
a)select count(nume_sportiv) from sportive
group by tara;
b) select s.nume_sportiv,a.nume_antrenor from
sportive s,antrenori a where s.tara=a.tara group
by tara;

Subiect 37
Se considera o tabela care contine informatii
referitoare la sportivii participanti la un
campionat
de gimastica.
sportivi(tara, nume_sportiv, nota1, nota2,
a)select tara from sportivi order by tara;
b)delete from sportivi where
((nota1+nota2+nota3)/3)<5;

98

SUBIECTUL REZOLVARE
nota3)
Se cere:
c) Sa se afiseze tarile participante in ordine
alfabetica
d) Sa se stearga toti sportivii care au media
notelor la cele trei probe mai mica decat 5
Subiect 38
Fie urmatoarea tabela:
elevi (nr_matricol, nume, clasa, adresa, media,
absente, absente_motivate)
Se cere :
c) Sa se afiseze pentru fiecare elev numele,
clasa si media
d) Sa se afiseze numele sefului de promotie
a)select nume,clasa,media from elevi;
b)select max(medie),nume from elevi;

Subiect 39
O baza de date contine 2 tabele:
PERSOANE(cod_persoana, nume,prenume
,localitate ).
AUTOMOBILE (numar ,marca
,cod_persoana).
Observatie:numarul masinii poate fi de forma
BR-10-XXY.
Se cere:
a)Afisati numele,prenumele,numarul si marca
masinii tuturor persoanelor.
b)Afisati persoanele care au automobile
SKODA nmatriculate in Bucuresti.
a) select
p.nume,p.prenume,a.numar,a.marca from
automobile a,persoane p where
p.cod_persoana=a.cod_persoana;
b) select p.nume,p.prenume from
automobile a,persoane p where
p.cod_persoana=a.cod_persoana and
upper(a.marca)=SKODA and to_char(a.numar)
like %B%;

Subiect 40
n baza de date a unei scoli se gasesc
urmatoarele tabele:
PROFESORI(clasa,p_mate,p_info, p_romana,
p_chimie)
ELEVI(clasa,nume_elev,med_mate,med_roma
na,med_info, med_chimie).
Se cere:
a)Care este media rezultatelor obtinute de
profesorii de info la toate clasele?
b)Care este clasa cu cei mai multi promovati la
chimie?
a) select avg(e.med_info) as
media_rez_p_info,e.clasa from elevi e,profesori
p where e.clasa=p.clasa group by e.clasa;
b) select clasa from elevi having
count(med_chimie)=(select
max(count(med_chimie)) from elevi where
med_chimie.=5 group by clasa) group by clasa;


Soluiile au fost propuse de profesorii: Bibicu Dorin, Prof. Zeld Jenica, Burlacu Ctlina
Liceul Teoretic Dunarea




99



Profir Tudor, CNVA Galai, Prof. Iordachi Lizeta

Reporter: Cum a inceput pasiunea ta pentru
informatic?
Tudor Profir: Tatl meu mi-a explicat ct de
ct prin clasa a 4-a n ce const
informatica.Mi s-a prut foarte interesant i
de aceea m-am hotrt s m nscriu la
profilul de mate-info.
Reporter: Spuneai c tatl tu i-a insuflat
oarecum pasiunea pentru informatic.n ce a
constat pregtirea ta n timp, i n special
acum,n anul acesta colar,nainte de
olimpiad?
Tudor Profir: Mai nti am lucrat la clas
dintr-o culegere de probleme.Am prins
"gustul" i am cutat cte ceva pe internet
(cteva probleme) i am gsit siteul
infoarena.ro - un site cu o arhiv foarte vast
de probleme, la care pot vedea pe loc
rezultatul programului. Pe parcurs, am
nvat de acolo cteva tehnici noi, civa
algoritmi. Reporter: Profesorul de la clas a
avut un cuvnt important de spus n
pregtirea ta? M refer la pregtirea din anul
acesta n special.
Tudor Profir: La clas am nvat toate
lucrurile fundamentale ale programrii,dar
am lucrat mult i singur.
Reporter: Deci s neleg c,ntr-un
fel,cheia succesului a constituit-o pentru
tine munca independent, dorina ta de a
nva mai mult i de a aprofunda ntr-un
domeniu care i place?
Tudor Profir: Da,dar nu numai asta. n tot
acest timp am fost ndrumat i de un alt
profesor, de la care am avut foarte multe de
nvat.
Reporter: Ce ateptri ai de la aceast
participare?
Tudor Profir: Fiind primul an de
participare, m voi acomoda i sper totui
s obin cel puin una dintre meniuni. n
orice caz, voi ctiga ceva experien.
Reporter: n cazul unui insucces,ce
atitudine vei adopta? Te vei lsa descurajat
sau vei ncerca i anul viitor?
Tudor Profir: Voi ncerca cu siguran i
anul urmtor.
Reporter: Consideri c este un avantaj
faptul c ONI se ine n Galai?
Tudor Profir: Da, pentru c astfel nu va
mai trebui s plec cu cteva zile nainte, s
merg cu trenul. Nu a fi fost prea odihnit n
ziua concursului i ar fi contat (am
experien de la alte olimpiade).
Reporter: n final, ce ai sftui un tnr de
vrsta ta, care i dorete s ajung unde eti
i tu acum? Ce ar trebui s fac? Cu ce
atitudine ar trebui s nceap drumul?
Tudor Profir: n primul rnd, s
munceasc dac i place ceea ce face.i
apoi s nu se descurajeze orice s-ar
ntmpla. n domeniul acesta sunt anse
mult mai mari dect n altele s ai un eec.
Mi s-a ntmplat i mie i multora care au
ajuns departe. La urma urmei, oricui i se
poate ntmpla.

Era odat un tnar care cand era mic vroia s se fac un "mare" scriitor. Cnd i s-a cerut s defineasc
"mare" a spus "Vreau s scriu chestii pe care s le citeasc toat lumea, chestii la care lumea s reactioneze
emoional, lucruri care s-i fac s strige, s plng, s urle, s se zbat de durere, disperare i mnie!" Acum
lucreaz pentru Microsoft i scrie mesaje de eroare....

100










































Colectivul de redacie:
- Redactor ef: CTLINA BURLACU Liceul Teoretic Dunrea
- Redactor ef adjunct GEORGETA-IULIA BALACEA, Colegiul Naional
Al.I.Cuza
- Redactori principali:
o Insp. Prof. Negoi Camelia-ISJ Galai
o Stan Maria, Grupul colar Radu Negru
- Redactori, profesorii:
1. Mirela Voinea, Colegiul Naional Vasile Alecsandri
2. Daniela Nistor, Colegiul Naional Vasile Alecsandri
3. oldan Florin, Colegiul Naional Vasile Alecsandri
4. Neagu Violeta, Colegiul Naional Mihail Koglniceanu
5. Lucian Dimitrievici, Colegiul Naional Mihail Koglniceanu
6. Novetschi Monica, Colegiul Naional Mihail Koglniceanu
7. Popescu Mdlina, Colegiul Naional Mihail Koglniceanu
8. Bibicu Dorin, Liceul Teoretic Dunarea
9. Zeld Jenica, Liceul Teoretic Dunarea
10. Joc Genia, Colegiul Naional Al. I. Cuza
11. Magdalena Grigore, Colegiul Naional Al.I.Cuza
12. Ilie Daniela, Colegiul Naional Al.I.Cuza
13. Gheorghiu Bogdan Tecuci
14. Gheorghiu Carmen Tecuci
15. Filip Cristian Buruian, student
- Responsabili numr : CTLINA BURLACU, GEORGETA-IULIA BALACEA







COPI LRI E
Stimai colegi i elevi, v invitm s colaborai la revista noastr.
Taloanele de participare la concurs vor fi colectate de profesorul coordonator i apoi
trimise colectivului de redacie, iar problemele rezolvate vor fi trimise pe mailul
redaciei.
Responsabilitatea in legatura cu originalitatea si continutul stiintific al articolelor,
problemelor apartine in exclusivitate autorilor.
Ateptm opiniile i propunerile voastre pe adresa revistei noastre:
revistainformaticagalati@yahoo.com
REDACTIA

Talon participare concurs

Nume i prenume...
Clasa
Unitatea de nvmnt.
Profesor coordonator
Numr probleme rezolvate..
Numr probleme propuse ..

NR.1/2010

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