Sunteți pe pagina 1din 112

UNIVERSITATEA DE STAT TIRASPOL

COLEGIUL FINANCIAR - BANCAR

Silviu GNCU

Metodologia rezolvrii
problemelor de informatic n
stilul orientat pe obiecte

Copie autorizata pentru studenii CFBC

Aprobat de Senatul Universitii de Stat Tiraspol

Recenzeni: Andrei Braicov, doctor, confereniar universitar, UST


Alexandru Lazari, doctor, lector superior, USM

DESCRIEREA CIP A CAMEREI NAIONALE A CRII


Gncu, Silviu.
Metodologia rezolvrii problemelor de informatic n stilul orientat pe
obiecte / Silviu Gncu; Univ. de Stat Tiraspol, Catedra Informatic i Tehnologii
Informaionale. Ch. : Univ. de Stat Tiraspol, 2012. 112 p. (Informatica).
60 ex.
ISBN 978-9975-76-085-0.
37.016.046:004
G 57

ISBN 978-9975-76-085-0.

Silviu Gncu, 2012

Prefa

Pentru a rezolva probleme


trebuie s rezolvi probleme

Stilul de programare orientat pe obiecte (POO) este utilizat pentru rezolvarea


problemelor de informatic cu un grad sporit de dificultate. Conform acestui stil
programul const dintr-o colecie de obiecte, uniti individuale de cod care
interacioneaz ntre ele.
Elaborarea unui program n stilul POO presupune a organiza codul acestuia n
uniti de program care s opereze cu obiecte. n acest sens elaborarea programului
const n prelucrarea obiectelor existente sau crearea lor n dependen de specificul
problemei.
Prezenta lucrare tiinifico-didactic cuprinde o gam variat de programe
rezolvate i o serie de probleme pentru rezolvare independent. Este o continuare a
ghidului de iniiere Borland C++ Builder (lucrarea 2 din referinele bibliografice).
Este adresat studenilor specialitii informatic, profesorilor de informatic
ct i tuturor celor care sunt interesai de tehnologia POO.
Problemele rezolvate au ca scop prezentarea principalelor concepte care stau la
baza POO. n baza acestora este prezentat metodologia de creare a unei clase; de
definirea datelor i prelucrarea metodelor; de iniializare a datelor obiectului prin
intermediul constructorului; de creare a relaiilor dintre clase (motenire) i a
relaiilor dintre obiecte (agregare). Programele sunt rezolvate n baza limbajului de
programare C++, limbaj ce se afl la temelia mai multor medii de programare vizual
(C++ Builder, Visual C++, etc.).
Un salt important n dezvoltarea tehnologiilor informaionale s-a produs odat
cu apariia mediilor de programare vizual orientate pe obiecte. Pentru formarea
deprinderilor de realizare a aplicaiilor Windows orientate pe obiecte sunt prezentate
o serie de aplicaii care ilustreaz modalitatea de gestionare a componentelor, de
utilizare a elementelor de grafic, de creare a noi tipuri de date i de utilizare a lor
ntr-un mediu de programare vizual. Drept mediu de programare este utilizat
platforma Borland C++ Builder.
Pentru dezvoltarea abilitilor de programare, recomand cititorilor rezolvarea a
ct mai multe probleme.

Autorul
3

Sugestii metodologice
1. Modelul orientat pe obiecte
Conform Grady Booch tehnologia orientat pe obiecte a fost conceput n
baza principiilor de abstractizare, incapsulare, modularitate, ierarhizare, tipizare,
paralelilism i persisten. Ceea ce este important const n faptul c aceste principii
se regsesc n modelul orientat pe obiecte.[4, p.25].
1. Abstractizare - procesul care capteaz caracteristicile eseniale ale unui
obiect, caracteristici ce difereniaz acest obiect de toate celelalte tipuri de obiecte.
Prin abstractizare se rezolv problemele cu un grad sporit de complexitate.
Abstractizarea se manifest prin determinarea similaritii dintre anumite obiecte,
situaii sau procese din lumea real i n luarea deciziilor, ignornd pentru moment
deosebirile dintre obiecte;
2. Incapsulare - procesul mental executat pe o abstractizare n care elementele
structurale ale abstractizrii sunt izolate de cele ce constituie comportamentul su.
Servete la separarea interfeei vizibile a unei abstractizri de implementarea sa;
3. Modularitate - procesul de divizare a unui sistem complex n pri (module)
manevrabile. Modularitatea este caracteristica de divizare a programului n mai multe
uniti care sunt compilate separat, dar simultan i comunic ntre ele;
4. Ierarhizare - procesul de clasificare pe nivele de abstractizare;
5. Tipizare reprezint un mod de protejare a obiectelor. Prin intermediul
tipizrii se face distincie dintre obiectele diferitor clase, astfel obiectele nu pot fi
schimbate sau, n unele cazuri, aceast schimbare este limitat;
6. Concurena (paralelism) este o proprietate, prin intermediul creia se
permite ca mai multe obiecte diferite s fie n execuie n acelai timp. Sistemele care
implic concurena sunt sisteme cu procesoare multiple, n care mai multe procese
sau thread-uri (fire de execuie) pot fi executate concurent pe procesoare diferite.
7. Persistena este proprietatea obiectelor care implic existena acestora i
dup ncetarea procesului care le-a creat. Starea obiectului i codul corespunztor
metodelor sunt memorate n baza de date. Tipurile obiectelor pot fi declarate
persistente prin folosirea cuvntului cheie persistent la momentul declarrii, variabila
fiind i ea constrns la un tip persistent.
Eseniale pentru limbajele de programare orientate pe obiect sunt primele patru
caracteristici. Un limbaj de programare este orientat pe obiecte dac susine primele
patru caracteristici.
2. Caracteristici ale programrii orientate pe obiecte
Din perspectiva programrii, rezolvarea unei probleme se poate face pe 3
direcii:
4

a) Rezolvarea orientat pe algoritm;


b) Rezolvarea orientat pe date;
c) Rezolvarea orientat pe obiect, combin tendinele primelor dou abordri.
Programarea orientat pe obiecte POO presupune unirea datelor cu
subprogramele care prelucreaz aceste date ntr-un tot ntreg, numit obiect. Acest stil
de scriere a codului, numit tehnologie, ofer posibiliti de modelare a obiectelor, a
proprietilor i a relaiilor dintre ele, dar i posibilitatea de a descompune o problem
n componentele sale (soft mai mentenabil, adaptabil, reciclabil).
Acest mod de rezolvare se bazeaz pe crearea de obiecte i pe interaciunea
dintre ele. Cele mai importante caracteristici ale tehnologiei orientate pe obiecte sunt:
Obiectul asociaz datele mpreun cu operaiile necesare prelucrrii. Datele sunt
informaii de structur descrise de o mulime de atribute ale obiectului, iar operaiile
(metodele) acioneaz asupra atributelor obiectului i eventual, asupra altor obiecte;
Clasa reunete o colecie de obiecte care partajeaz aceeai list de atribute
informaionale i comportamentale;
Incapsularea principiul care se bazeaz pe combinarea datelor cu operaiile de
gestionare a obiectului i proprietatea obiectelor de a ascunde datele i operaiile
proprii fa de alte obiecte;
Instanierea operaia prin care se creeaz un obiect i apoi se iniializeaz cu date
specifice;
Motenirea principiul prin care putem reutiliza i extinde clasele existente.
Acest mecanism permite unei noi clase s beneficieze de atributele i metodele
definite ntr-o clas deja existent;
Agregarea operaiile cu ajutorul crora clasele sunt descompuse n uniti mai
mici, care la fel sunt clase. O clas agregat este o clas ale crei obiecte conin alte
obiecte.
Polimorfismul posibilitatea de a putea aplica n moduri diferite o aceeai
operaie mai multor clase. Prin operaie nelegem orice metod sau operator.
Polimorfismul reprezint abilitatea unor obiecte similare de a rspunde la acelai
mesaj n moduri diferite.
3. Limbaje de programare orientate pe obiecte
Un limbaj de programare reprezint un set de specificaii necesare reprezentrii
algoritmilor. Dezvoltarea limbajelor de programare a cunoscut n timp mai multe
generaii.
Prima generaie a limbajelor de programare o constituie perioada 1954-1958.
Limbajele din aceast generaie au fost concepute pentru a simplifica complexitatea
formulelor matematice. Sunt caracteristice limbajele: FORTRAN I, ALGOL-58,
Flowmatic i IPL V.
5

A doua generaie dateaz anilor 1959-1961 i se caracterizeaz prin


concentrarea ateniei asupra abstraciunilor algoritmice. n acea perioad
calculatoarele au devenit mai puternice, ele fiind utilizate n soluionarea problemelor
de ordin economic, de eviden a personalului, etc. Sunt utilizate limbajele:
FORTRAN II, ALGOL-60, COBOL, Lisp.
Odat cu apariia tranzistoarelor, costul unui calculator a sczut considerabil,
astfel producerea lor a crescut esenial. Creterea productivitii acestora a dus la
apariia unei noi generaii a limbajelor de programare n perioada 1962-1970. Au
aprut limbaje precum: PL/I, ALGOL-68, Pascal, Simula. Aceste limbaje se
caracterizeaz prin faptul c ofer un alt nivel de abstractizare a datelor, oferind
programatorului posibilitatea de a crea noi tipuri de date.
Perioada 1970-1980 se caracterizeaz prin apariia mai multor limbaje de
programare, care nu au fcut fa cerinelor pieii. Problema abstractizrii obiectelor a
fost caracteristic perioadei 1970-1980, astfel au aprut limbajul Simula, iar n baza
acestuia i altele precum Smalltalk, Object Pascal, C++, CLOS, Ada i Eiffel. Aceste
limbaje au fost numite orientate pe obiecte.
Lansarea sistemului de operare Windows a impus firmele specializate s
dezvolte produse noi, destinate implementrii pe calculator a unor programe
concepute n baza unui limbaj de programare. Astfel au aprut mai multe medii de
programare vizual, destinate dezvoltrii rapide a aplicaiilor Windows orientate pe
obiecte. Mediile de programare conin o gam larg de biblioteci, care sunt compuse
din clase. Spre exemplu, mediul de programare C++ Builder conine biblioteca VCL
(Visual Componente Library) format din clase, funcii i variabile necesare pentru
elaborarea de aplicaii. O clas, n mediul de programare vizual, este completat
cu dou elemente noi:
Proprieti reprezint starea unui obiect, din punct de vedere sintactic datele
unui obiect sunt transformate n proprieti, care au ataat n fa cuvntul cheie
__property.
Evenimente reprezint o legtur dintre o aciune n sistem (apsarea unei
taste, deplasarea maus-ului, etc.) i o secven de cod care rspunde la aciunea
efectuat.
Instanele unor astfel de clase sunt numite componente. O component este
definit ca fiind o clas ce deriv direct sau indirect din clasa TComponent. [5, p.
17]
Unitatea de baz a unei aplicaii Windows o constituie componentele. Acestea
pot fi grupate n:
Componente container pot conine pe suprafaa lor alte componente. De
exemplu: Form, GroupBox, etc.;
Componente de aciune destinate prelucrrii unei aciuni (efectuarea unui
6

click, etc.). De exemplu: Button i alte derivate ale acesteia;


Componente valoare prin intermediul crora este prezentat o informaie. De
exemplu: Label, Edit, etc.;
Componente de selecie (CheckBox, RadioButton, etc);
Componente de listare (ListBox, MonthCalendar, etc.);
Componente pentru prelucrarea grafic (Obiectul Canvas), etc.
Prin intermediul componentelor un mediu de programare ofer posibilitatea
utilizatorului de a dezvolta aplicaii Windows orientate pe obiecte.
4. Tendine
n prezent tehnologiile informaionale se afl n continu cretere. Astfel, au
aprut noi platforme de dezvoltare. Concomitent cu acestea s-au dezvoltat i mediile
de programare vizual orientate pe obiecte. Ele ofer posibilitatea de a elabora
diverse produse software. Prin intermediul lor se pot realizeaz:
a) aplicaii Windows orientate pe obiecte;
b) aplicaii Windows pentru gestiunea bazelor de date;
c) aplicaii Windows pentru lucru n reea;
d) aplicaii pentru gestiunea paginilor web, etc.
Elaborare unei aplicaii Windows orientat pe obiecte presupune:
1. A gestiona componentele oferite de ctre mediul de programare utilizat. Un
mediu de programare vizual orientat pe obiecte conine o gam larg de componente
destinate procesrii datelor. Pentru gestiunea lor, sunt necesare cunotine n ceea ce
privete structura obiectelor. Aceasta presupune a studia proprietile, metodele i
evenimentele caracteristice unei componente i modalitate de modificare a lor n
dependen de specificul problemei.
2. A elabora componente noi. n cazul n care mediul de programare nu ofer
suficiente componente, apare tendina de elaborare a lor.
Observm necesitatea studierii programrii orientate pe obiecte n ambele
cazuri.
5. Dificulti n nsuirea programrii orientate pe obiecte
n prezent conform literaturii de specialitatea din domeniu [3],[4],[10], etc., i a
planurilor de nvmt ale universitilor din Republica Moldova i nu numai,
tehnologia programrii orientat pe obiecte este format n baza:
a) unui limbaj de programare de uz general, cele mai frecvent utilizate fiind
Object Pascal, C++, C#;
b) unui mediu de programare cu elemente de programare vizual, cele mai
frecvent utilizate fiind: Borland Delphi/Builder, Java, Visual C++, Visual
Basic, etc.
7

n timp s-a observat c studenii ntmpin mai multe dificulti n nsuirea


deprinderilor de utilizare a tehnologiei orientate pe obiecte. De cele mai multe ori
acestea se datoreaz:
1. Lipsei unui model, care s se expun asupra coninuturilor i asupra
metodelor de predare/nvare.
2. Insuficienei de probleme rezolvate, prin intermediul crora s se prezinte
modalitatea de elaborare a unui program n stilul de programare orientat pe obiecte.
3. Gradului sporit de dificultate al problemelor propuse spre rezolvare n cadrul
orelor de laborator, etc.
6. Reflecii privind coninutul i organizarea procesului de instruire
Pentru nlturarea dificultilor ntlnite n procesul de studiu al POO se
recomand:
1. A utiliza modelul moderat de formare a competenelor, elaborat de ctre un
grup de cercettori din Belgia (X. Rogiers, J.-M. De Ketele, F.-M. Grard). Conform
modelului formarea competenei se realizeaz n trei etape:
a) Structurare a resurselor. Aceast etap presupune studierea materialului
teoretic, concepte, noiuni, definiii, etc.;
b) Integrare a resurselor. Resursele teoretice sunt integrate prin prisma
exemplelor. Fiecare dintre exemple avnd drept scop final prezentarea unei sau
a mai multor caracteristici ale POO.
c) Transfer sau adaptarea la noi situaii. n cadrul acestei etape sunt propuse
probleme care difer, dar nu considerabil de problemele din cadrul etapei a
doua. Astfel dac problema este rezolvat atunci transferul este realizat.
2. De a realiza un studiu de caz asupra unui proiect. Astfel vor fi prezentate
avantajele oferite de ctre POO comparativ cu alte stiluri de programare.
3. A propune spre rezolvare la orele de laborator un set de probleme astfel
nct:
a) Gradul de dificultate al problemelor s nu fie foarte ridicat;
b) Problemele propuse spre rezolvare s cuprind majoritatea conceptelor POO
studiate;
c) Problemele propuse s ofere continuitate n procesul de studiu;
d) S realizeze un proiect care s cuprind n structura sa mai multe module.

Capitolul I Limbajul C++


C++ (pronunat n romn C plus plus i n englez si plas plas) este un
limbaj de programare orientat pe obiecte. A fost creat de ctre Bjarne Stroustrup,
lansarea comercial datnd anului 1985. n 1990 devine unul dintre cele mai populare
limbaje de programare comerciale.
1. Crearea de obiecte
Problem exemplu. Creai obiectul dreptunghi
date: lungimile laturilor;
metode: citire, afiare, iniializare, determinare a perimetrului i ariei.
Se vor introduce datele despre dou dreptunghiuri i se vor afia datele despre
dreptunghiul cu suprafaa maxim i dreptunghiul cu perimetrul minim.
Rezolvare :
#include<iostream.h>
class dreptunghi{
double lung,lat;
public:
void citire();//pentru citirea datelor
void afisare();//pentru afisare
double arie();
double perimetru();
void init(double a, double b){lung=a;lat=b;}
};
void dreptunghi::citire(){
cout<<"Dati datele despre dreptunghi"<<endl;
cout<<"Lungimea="<<endl;cin>>lung;
cout<<"Latimea"<<endl;cin>>lat;
}
double dreptunghi::arie(){return lung*lat;}
double dreptunghi::perimetru(){return 2*(lung+lat);}
void dreptunghi::afisare(){
cout<<"Lungimea="<<lung<<endl;
cout<<"Latimea="<<lat<<endl;
cout<<"Aria="<<arie()<<endl;
cout<<"Perimetru="<<perimetru()<<endl;
}
main(){
dreptunghi a,b;
a.citire();b.init(4.5,8);
a.afisare();b.afisare();
cout<<"Dreptunghiul cu suprafata maxima"<<endl;
if(a.arie()>b.arie())a.afisare();
else b.afisare();
cout<<"Dreptunghiul cu perimetru minim"<<endl;
9

if(a.perimetru()<b.perimetru())a.afisare();
else b.afisare();
}

1. Creai obiectul cerc


date: lungimea razei;
metode: citire, afiare, iniializare, determinarea lungimii discului, a suprafeei
i a diametrului.
Se vor introduce datele despre dou cercuri i se vor afia datele despre cercul
cu suprafaa maxim i cercul cu lungimea discului minimal.
2. Creai obiectul trapez_isoscel
date: baza mare, baza mic, nlimea;
metode: citire, afiare, iniializare, determinare a perimetrului i ariei.
Se vor introduce datele despre dou trapeze i se va afia trapezul cu suprafaa
maxim i trapezul cu perimetrul minim.
3. Creai obiectul paralelogram
date: lungimile laturilor i nlimea;
metode: citire, afiare, iniializare, determinare a perimetrului i ariei.
Se vor introduce datele despre dou paralelograme i se vor afia datele despre
paralelogramul cu suprafaa maxim i paralelogramul cu perimetrul minim.
4. Creai obiectul triunghi,
date: lungimile laturilor;
metode: citire, afiare, iniializare, determinare a perimetrului, a suprafeei i
afiare a tipului triunghiului (ascuit, dreptunghic sau obtuzunghi).
Se vor introduce datele despre dou triunghiuri i se vor afia datele despre
triunghiul cu suprafaa maxim i triunghiul cu perimetrul minim. Se va implementa
o metod pentru verificarea corectitudinii introducerii datelor de intrare. n caz c
lungimile introduse nu pot forma un triunghi, atunci lungimile laturilor vor fi egale cu
0, iar metoda tip va afia mesajul: Nu exista aa triunghi.
5. Creai obiectul paralelipiped_dreptunghic
date: lungimile bazelor i nlimea;
metode: citire, afiare, iniializare, determinare a suprafeei laterale,
suprafeei totale, i a volumului.
Se vor introduce datele despre dou paralelipipede dreptunghice i se vor afia
datele despre paralelipipedul cu volumul maxim i paralelipipedul cu suprafaa total
minim.
10

6. Creai obiectul ecuaie1 - va reprezenta o ecuaie de gradul 1 ax+b=0.


date: a, b;
metode: citire, afiare, iniializare, soluie.
Se vor introduce datele despre dou ecuaii i se vor afia ecuaiile introduse ct
i soluiile acestora.
7. Creai obiectul ecuaie2 - va reprezenta o ecuaie ptratic de ordinul doi
ax +bx+c=0.
date: a, b, c;
metode: citire, afiare, discriminant, soluie.
Se vor introduce datele despre dou ecuaii i se vor afia ecuaiile introduse,
discriminantul fiecrei ecuaii ct i soluiile acestora.
2

8. Creai obiectul persoana,


date: nume, anul naterii, genul, nlimea;
metode: citire, afiare, virsta, greutate (se va determina conform formulelor:
Gmasculin=50+0.75*(nlime-150) + (vrsta-20)/4 pentru genul masculin;
Gfeminin=Gmasculin10 pentru genul feminin.
De la tastatur se citesc datele despre n persoane. S se afieze:
e) Lista turor persoanelor;
f) Lista persoanelor cu o vrst mai mare dect 25 ani;
g) Lista persoanelor cu o greutate cuprins ntre 55 i 80 kg.
9. Creai obiectul student
date: nume, anul naterii, notele la trei discipline;
metode: citire, afiare, virsta, media, restana (va returna 1 doar dac studentul
are cel puin o not mai mic dect 5), bursa (va fi egal cu 500 lei dac studentul nu
are restan i media este mai mare dect 7.5).
De la tastatur se citesc datele despre n studeni. S se afieze:
a) Lista tuturor studenilor;
b) Lista studenilor restanieri;
c) Lista studenilor care au burs;
d) Lista studenilor cu o vrst mai mic dect 18 ani.
10. Creai obiectul angajat
date: nume, funcia, anul angajrii, ore lucrate, plata pentru o or;
metode: citire, afiare, stagiu (diferena dintre anul curent i anul angajrii),
salariu calculat (se va determina conform formulei: ore lucrate* plata pentru o or),
spor (va constitui 15% din salariul calculat, dac stagiul este mai mare dect 5 ani i
11

mai mic sau egal dect 8 ani i 25%, dac stagiu este mai mare dect 8 ani), Salariu
primit (se va determina conform formulei: salariu calculat+spor).
De la tastatur se citesc datele despre n angajai. S se afieze:
a) Lista tuturor angajailor;
b) Lista angajailor cu un stagiu mai mare dect 10 ani;
c) Lista angajailor cu un salariu mai mare dect 1000;
2. Constructori
Clas-pereche este numit o clas cu dou date, care de obicei sunt dou
numere n1 i n2. Este necesar de a elabora un program, prin intermediul cruia se va
crea tipul de date clas-pereche. n toate sarcinile trebuie s fie prezente:
a) Trei tipuri de constructori: fr parametri, cu parametri, de copiere;
b) Destructorul;
c) Metoda de citire;
d) Metoda de afisare;
Toate aceste condiii necesit a fi respectate pentru urmtoarele cazuri.
Problem exemplu Cmpul n1 - numr real, Cmpul n2 numr real. Creai
metoda suma() va returna suma numerelor.
Rezolvare :
#include<iostream.h>
class numar{
double n1,n2;
public:
numar(){n1=n2=0;}
numar(double a,double b){n1=a;n2=b;}
numar(numar&);
void citire();
void afisare();
double suma();
~numar(){cout<<"Obiectul a fost distrus !!!"<<endl;}
};
numar::numar(numar &c){// constructor de copiere
n1=c.n1;n2=c.n2;
}
void numar::citire(){
cout<<"Dati doua numere"<<endl;
cin>>n1>>n2;
}
void numar::afisare(){
cout<<"Valorile "<<n1<<" "<<n2<<" Suma="<<suma()<<endl;
}
double numar::suma(){return n1+n2;}
main(){
12

numar a;//constructor fara parametri


a.citire();a.afisare();
numar b(3.2,8.5);//constructor cu parametri
b.afisare();
numar c(a);//constructor de copiere
c.afisare();
numar *p; //utilizarea pointerilor
p=new numar;//apelarea constructorului fara parametri
p->afisare();
delete p;//distrugerea obiectului
p=new numar(5,6);//apelarea constructorului cu parametri
p->afisare();delete p;
p=new numar(b);//apelarea constructorului de copiere
p->afisare();delete p;
}

1. Cmpul n1 - un numr ntreg, Cmpul n2 numr real nenul. Creai metoda


power() va returna numrul n2 la puterea n1.
2. Cmpul n1 - un numr ntreg, Cmpul n2 numr real. Creai metoda
intreg() - care va returna partea ntreag a fraciei n1/n2. Metoda trebuie s verifice
inegalitatea numitorului cu zero.
3. Cmpul n1 - un numr real pozitiv (preul bunurilor), Cmpul n2 numr
ntreg pozitiv (numrul de bunuri). Creai metoda cost() va returna numrul ce
reprezint valoarea total a bunurilor.
4. Cmpul n1 - un numr ntreg pozitiv (calorii la 100g), Cmpul n2 numr
real (greutatea produsului n kilograme). Creai metoda calorii() va returna numrul
de calorii ale produsului.
5. Cmpul n1 - un numr real (suma depozitul n lei), Cmpul n2 numr real
(procentul anual). Creai metoda valoare(int) va returna suma de bani mpreun cu
calcularea dobnzii timp de 1, 2, 3, 4 ani.
6. Cmpul n1 - un numr ntreg pozitiv (numrul de ore), Cmpul n2 un
numr ntreg pozitiv (numrul de minute). Creai metoda secunde() va returna
numrul total al secundelor scrise n cele dou cmpuri.
7. Cmpul n1 - un numr real (coordonata x), Cmpul n2 numr real
(coordonata y). Creai metoda distanta() va returna distana de la punctul (0,0) la
punctul cu coordonatele (n1, n2).
8. Cmpul n1 - un numr real (cateta a a unui triunghi dreptunghic), Cmpul n2
numr real (cateta b). Creai metodele:
13

ipotenuza() va returna lungimea ipotenuzei triunghiului dreptunghic;


arie() - va returna aria triunghiului;
perimetru() - va returna perimetrul triunghiului.
9. Cmpul n1 - un numr real (salariul pentru o zi), Cmpul n2 numr ntreg
(numrul de zile lucrate timp de o lun). Creai metoda suma() va returna salariul
pentru un an al muncitorului.
10. Cmpul n1 - un numr ntreg pozitiv (durata unui apel telefonic n secunde),
Cmpul n2 numr real (costul n lei al unui minut). Creai metoda cost() va returna
costul total al apelului.
3. Motenire simpl
Problem exemplu n calitate de clas de baz se consider clasa binar. n
calitate de date vor fi dou valori reale. Metodele vor fi:
a) constructorul cu i fr parametri;
b) metodele de citire i afisare.
Creai clasa dreptunghi, derivata clasei binar. Pentru clasa dreptunghi vor fi
implementate metodele de determinare a suprafeei i a perimetrului.
De la tastatur se citesc datele despre n dreptunghiuri. Elaborai un program
prin intermediul cruia la ecran se vor afia datele despre toate dreptunghiurile,
dreptunghiul cu suprafaa maxim i dreptunghiul cu perimetrul maxim.
Rezolvare :
#include<iostream.h>
class binar{
protected:
double a,b;
public:
binar(){a=b=0;}
binar(int i, int j){a=i;b=j;}
void citire();
void afisare();
};
class dreptunghi : public binar{
public:
dreptunghi(){};
dreptunghi(int i,int j):binar(i,j){};
double arie();
double perimetru();
};
void binar::citire(){cout<<"Dati 2 valori reale "; cin>>a>>b;}
void binar::afisare(){cout<<"a="<<a<<" B="<<b<<endl;}
double dreptunghi::arie(){return a*b;}
14

double dreptunghi::perimetru(){return 2*(a+b);}


main(){
dreptunghi t[100];
int am,pm,i,n;double ma=0,mp=0;
cout<<"Dati numarul dreptunghiurilor ";cin>>n;
for(i=0;i<n;i++){
t[i].citire();
if(ma<t[i].arie()){ma=t[i].arie();am=i;}
if(mp<t[i].perimetru()){mp=t[i].perimetru();pm=i;}
}
cout<<"Lista dreptunghiurilor"<<endl;
for(i=0;i<n;i++)t[i].afisare();
cout<<"Perimetru maxim "<<endl;
t[pm].afisare(); cout<<t[pm].perimetru()<<endl;
cout<<"Aria maxima "<<endl;
t[am].afisare(); cout<<t[am].arie()<<endl;
dreptunghi a(8,10);a.afisare();
cout<<"Aria "<<a.arie()<<endl;
cout<<"Perimetru "<<a.perimetru()<<endl;
}

A. n calitate de clas de baz se va crea clasa triad.


date: trei numere reale;
metode: constructorul cu/fr parametri, citire i afisare.
1. Creai clasa triunghi, derivata clasei triad. Pentru clasa triunghi vor fi
implementate metode pentru determinare a suprafeei, a perimetrului i o metod prin
intermediul creia se va verifica dac datele introduse pot fi lungimile laturilor unui
triunghi.
De la tastatur se citesc datele despre n triunghiuri. Elaborai un program prin
intermediul cruia, la ecran se vor afia datele despre toate triunghiurile, triunghiul cu
suprafa maxim i triunghiul cu perimetru maxim.
2. Creai clasa paralelogram, derivata clasei triad. Pentru clasa paralelogram
vor fi implementate metodele de determinare a suprafeei i a perimetrului.
De la tastatur se citesc datele despre n paralelograme. Elaborai un program
prin intermediul cruia la ecran se vor afia datele despre toate figurile,
paralelogramul cu suprafa maxim, paralelogramul cu perimetru maxim.
3. Creai clasa trapez_isoscel, derivata clasei triad. Pentru clasa trapez isoscel
vor fi implementate metodele de determinare a suprafeei i a perimetrului.
De la tastatur se citesc datele despre n trapeze isoscele. Elaborai un program
prin intermediul cruia la ecran se vor afia datele despre toate figurile, trapezul cu
suprafa maxim, trapezul cu perimetru maxim.
15

4. Creai clasa prism (baza este dreptunghi), derivata clasei triad. Pentru clasa
prism vor fi implementate metodele de determinare a suprafeei totale, laterale i de
determinare a volumului.
De la tastatur se citesc datele despre n prisme. Elaborai un program prin
intermediul cruia, la ecran se vor afia datele despre toate prismele, prisma cu
suprafa maxim, prisma cu volumul maxim.
5. Creai clasa piramid (baza este dreptunghi), derivata clasei triad. Pentru
clasa piramid vor fi implementate metodele de determinare a suprafeei totale,
laterale i de determinare a volumului.
De la tastatur se citesc datele despre n piramide. Elaborai un program prin
intermediul cruia, la ecran se vor afia datele despre toate piramidele, piramida cu
suprafa maxim, piramida cu volumul maxim.
B. n calitate de clas de baz se va crea clasa persoana.
date: nume, prenume, anul, cnp (codul personal de 13 cifre);
metode : citire, afiare, virsta.
6. Creai clasa Salariat, derivata clasei persoana. Pentru clasa salariat vor fi
adugate:
date: numrul de ore lucrate, plata pentru o or, anul angajrii;
metode: vor fi redefinite metodele de citire i afiare, salariu. Salariul va fi
determinat conform formulei : nr_ore*plata.
De la tastatur se citesc datele despre n salariai. Elaborai un program prin
intermediul cruia la ecran se vor afia datele despre toi salariaii, salariatul cel mai
tnr i salariatul cu salariu maxim.
7. Creai clasa Student, derivata clasei persoana. Pentru clasa student vor fi
adugate:
date: media notelor curente, grupa;
metode: vor fi redefinite metodele de citire i afiare, bursa. Bursa va fi
determinat conform fomulei: media*75 lei, dac media este mai mare dect 7.5, n
caz contrar va fi 0.
De la tastatur se citesc datele despre n studeni. Elaborai un program prin
intermediul cruia la ecran se vor afia datele despre toi studenii, studentul cel mai
tnr, studentul cu bursa maxim.
8. Creai clasa Sofer, derivata clasei persoana. Pentru clasa ofer vor fi
adugate:
16

date: distana parcurs (n km), plata pentru 1 km;


metode: vor fi redefinite metodele de citire i afiare, plata. Prin intermediul
metodei Plata, se va determina costul unei curse efectuate de ctre ofer dup
formula: distanta*plata pentru 1 km.
De la tastatur se citesc datele despre n oferi. Elaborai un program prin
intermediul cruia la ecran se vor afia datele despre toi oferii, oferul cel mai tnr,
oferul cu plata maxim.
9. Creai clasa Angajat_calificat, derivata clasei Salariat (prob. 6). Pentru clasa
Angajat_calificat vor fi adugate:
date: gradul calificrii (1 superior, 2 mediu, 3 inferior);
metode: vor fi redefinite metodele de citire i afiare, salariu. Salariu va fi
determinat conform formulei : nr_ore*plata*(100%+calificare),
50%, pentru gradul 1

calificare 40%, pentru gradul 2


30%, pentru gradul 3

De la tastatur se citesc datele despre n angajai calificai. Elaborai un program


prin intermediul cruia la ecran se vor afia datele despre toi angajaii, angajatul cel
mai tnr i angajatul cu salariu maxim.
10. Creai clasa Piramida, derivata clasei triunghi (prob. 1).
date: nlimea piramidei,
metode: citire i afiare, suprafaa_total i volum.
De la tastatur se citesc datele despre n piramide i m triunghiuri. Elaborai un
program prin intermediul cruia, la ecran se vor afia datele despre toate piramidele
(triunghiurile), piramida (triunghiul) cu suprafa maxim, piramida cu volumul
maxim, triunghiul cu perimetrul minim.
4. Funcii virtuale i polimorfism
Problem exemplu. [2, p. 180].
1. Se consider drept baz clasa numar (va avea n calitate de date un numr
real). n baza acestei clase se deriv clasele patrat i triunghi_echilateral. S se
implementeze polimorfismul pentru metodele: citire, afiare, suprafaa i perimetru.
De la tastatur se citete numrul de figuri. Elaborai un program care va permite :
a) citirea figurilor de la tastatur;
b) afiarea acestora;
17

c)
d)
e)
f)
g)
h)
i)

afiarea figurilor sub form de ptrat;


afiarea figurilor sub form de triunghi;
afiarea figurii cu suprafa maxim;
afiarea figurii cu perimetru maxim;
afiarea perimetrului total al figurilor;
afiarea suprafeei totale a figurilor;
sortarea figurilor n ordine descresctoare suprafeei.

2. Se consider drept baz clasa doi (va avea n calitate de date dou numere
reale). n baza acestei clase se deriv clasele dreptunghi i triunghi_dreptunghic. S
se implementeze polimorfismul pentru metodele: citire, afiare, suprafaa i
perimetru. De la tastatur se citete numrul de figuri. Elaborai un program care va
permite :
a) citirea figurilor de la tastatur;
b) afiarea acestora;
c) afiarea figurilor sub form de dreptunghi;
d) afiarea figurilor sub form de triunghi;
e) afiarea figurii cu suprafa maxim;
f) afiarea figurii cu perimetru maxim;
g) afiarea perimetrului total al figurilor;
h) afiarea suprafeei totale a figurilor;
i) sortarea figurilor n ordine descresctoare suprafeei.
3. Se consider drept baz clasa tread (va avea n calitate de date dou numere
reale i un numr ntreg). n baza acestei clase se deriv clasele paralelogram i
triunghi. S se implementeze polimorfismul pentru metodele: citire, afiare,
suprafaa i perimetru. De la tastatur se citete numrul de figuri. Elaborai un
program care va permite :
a) citirea figurilor de la tastatur;
b) afiarea acestora;
c) afiarea figurilor sub form de paralelogram;
d) afiarea figurilor sub form de triunghi;
e) afiarea figurii cu suprafa maxim;
f) afiarea figurii cu perimetru maxim;
g) afiarea perimetrului total al figurilor;
h) afiarea suprafeei totale a figurilor;
i) sortarea figurilor n ordine descresctoare suprafeei.

18

4. Se consider drept baz clasa patrulater. n baza acestei clase se deriv


clasele paralelogram i trapez. S se implementeze polimorfismul pentru metodele:
citire, afiare, suprafaa i perimetru. De la tastatur se citete numrul de figuri.
Elaborai un program care va permite :
a) citirea figurilor de la tastatur;
b) afiarea acestora;
c) afiarea figurilor sub form de paralelogram;
d) afiarea figurilor sub form de trapez;
e) afiarea figurii cu suprafa maxim;
f) afiarea figurii cu perimetru maxim;
g) afiarea perimetrului total al figurilor;
h) afiarea suprafeei totale a figurilor;
i) sortarea figurilor n ordine descresctoare suprafeei.
5. Se consider drept baz clasa dreptunghi. n baza acestei clase se deriv
clasele piramid i prism. S se implementeze polimorfismul pentru metodele:
citire, afiare, suprafaa i volum. De la tastatur se citete numrul de figuri.
Elaborai un program care va permite :
a) citirea figurilor de la tastatur;
b) afiarea acestora;
c) afiarea figurilor sub form de piramid;
d) afiarea figurilor sub form de prism;
e) afiarea figurii cu suprafa maxim;
f) afiarea figurii cu volum maxim;
g) afiarea volumului total al figurilor;
h) afiarea suprafeei totale a figurilor;
i) sortarea figurilor n ordine descresctoare suprafeei.
6. Se consider drept baz clasa paralelogram. n baza acestei clase se deriv
clasele piramid i prism. S se implementeze polimorfismul pentru metodele:
citire, afiare, suprafaa i volum. De la tastatur se citete numrul de figuri.
Elaborai un program care va permite :
a) citirea figurilor de la tastatur;
b) afiarea acestora;
c) afiarea figurilor sub form de piramid;
d) afiarea figurilor sub form de prism;
e) afiarea figurii cu suprafa maxim;
f) afiarea figurii cu volum maxim;
g) afiarea volumului total al figurilor;
19

h) afiarea suprafeei totale a figurilor;


i) sortarea figurilor n ordine descresctoare suprafeei.
7. Se consider drept baz clasa cerc. n baza acestei clase se deriv clasele con
i cilindru. S se implementeze polimorfismul pentru metodele: citire, afiare,
suprafaa i volum. De la tastatur se citete numrul de figuri. Elaborai un program
care va permite :
a) citirea figurilor de la tastatur;
b) afiarea acestora;
c) afiarea figurilor sub form de con;
d) afiarea figurilor sub form de cilindru;
e) afiarea figurii cu suprafa maxim;
f) afiarea figurii cu volum maxim;
g) afiarea volumului total al figurilor;
h) afiarea suprafeei totale a figurilor;
i) sortarea figurilor n ordine descresctoare suprafeei.
8. Se consider ierarhia: Persoana, Angajat i Student. Clasele Angajat i
Student sunt derivatele clasei Persoana. n clasa persoan vor fi definite urmtoarele:
date: numele, prenumele, anul naterii;
metode:
Citire citirea de la tastatur a datelor despre persoan,
Afisare afiarea la consol a datelor despre persoan;
Virsta va returna vrsta persoanei.
n clasa Angajat suplimentar vor mai fi declarate:
date: Ore numrul de ore lucrate, Pl_ora plata pentru o or, funcia;
metode: Bani va determina salariul angajatului conform formulei:
ore*pl_ora.
n clasa Student suplimentar vor mai fi declarate
date: media, grupa;
metode Bani va determina bursa studentului conform formulei: media*75 lei,
dac media studentului este mai mare dect apte, n caz contrar returneaz 0.
Pentru aceast ierarhie se va implementa polimorfismul pentru metodele citire,
afiare, bani. De la tastatur se citete numrul total de persoane n (n<100). Tipurile
acestora se citesc n momentul execuiei. La ecran va fi afiat un meniu cu
urmtoarele opiuni:
a) Afiarea tuturor persoanelor;
b) Afiarea persoanelor angajate;
c) Afiarea persoanelor care sunt studeni;
20

d)
e)
f)
g)
h)
i)

Suma total de bani, pe care o primesc toate persoanele citite;


Persoana sau persoanele ce primesc cei mai muli bani;
Persoana sau persoanele ce primesc cei mai puini bani;
Persoana sau persoanele cele mai tinere;
Afiarea persoanelor n ordine descresctoare veniturilor acumulate;
Afiarea persoanelor n ordine cresctoare vrstei.
5. Motenire multipl

A. Problem exemplu n calitate de clase de baz se consider clasele patrat i


triunghi echilateral. Aceste clase deriv clasa figura, format dintr-un ptrat i un
triunghi echilateral, grafic figura se reprezint:

Creai clasa figura, derivata claselor patrat i triunghi echilateral, dac


lungimea laturii triunghiului echilateral este egal cu a+0.3*a, unde a este lungimea
laturii ptratului. Pentru clasa figura vor fi implementate metodele de determinare a
suprafeei i a perimetrului.
Rezolvare :
#include<iostream.h>
#include<math.h>
class patrat{
public:
double lp;
patrat(){lp=0;}
patrat(double a){lp=a;}
void cit_patrat();
void afis_patrat();
double per_patrat(){return 4*lp;}
double arie_patrat(){return lp*lp;}
};
void patrat::cit_patrat(){
cout<<"Dati latura patratului"<<endl;cin>>lp;
}
void patrat::afis_patrat(){
cout<<"Patrat: lat="<<lp<<" Aria="<<arie_patrat();
cout<<" Perimetru="<<per_patrat()<<endl;
}
class tr_echil{
public:
double lt;
tr_echil(){lt=0;}
tr_echil(double a){lt=a;}
void cit_triunghi();
void afis_triunghi();
21

double per_triunghi(){return 3*lt;}


double arie_triunghi(){return sqrt(3)*0.25*lt*lt;}
};
void tr_echil::cit_triunghi(){
cout<<"Dati latura triunghilui echilateral"<<endl;cin>>lt;
}
void tr_echil::afis_triunghi(){
cout<<"Triunghi echilateral: lat="<<lt;
cout<<" Aria="<<arie_triunghi();
cout<<" Perimetru="<<per_triunghi()<<endl;
}
class figura : public patrat, public tr_echil{
public:
figura(){lt=0;lp=0;}
figura(double a):patrat(a),tr_echil(a+a*0.3){};
void cit_figura();
void afis_figura();
double arie_figura(){return arie_triunghi()+arie_patrat();}
double per_figura(){return per_triunghi()+per_patrat()-2*lt;}
};
void figura::cit_figura(){cit_patrat();lt=lp+lp*0.3;}
void figura::afis_figura(){
cout<<"Figura este formata din:"<<endl;
afis_patrat();afis_triunghi();
cout<<"Aria figurii="<<arie_figura();
cout<<" Perimetru figurii="<<per_figura()<<endl;
}
main(){
figura a,b(10);
a.afis_figura();b.afis_figura();
a.cit_figura();a.afis_figura();
}

1. n calitate de clase de baz se consider clasele dreptunghi i triunghi


dreptunghic. Aceste clase deriv clasa figura, format dintru-un dreptunghi i un
triunghi dreptunghic, grafic figura se reprezint:
Creai clasa figura, derivata claselor dreptunghi i triunghi dreptunghic, dac
lungimea catetelor triunghiului dreptunghic corespund lungimilor laturilor
dreptunghiului. Pentru clasa figura vor fi implementate metodele de determinare a
suprafeei i a perimetrului.
2. n calitate de clase de baz se consider clasele cerc i triunghi isoscel.
Aceste clase deriv clasa figura, format dintru-un cerc i un triunghi isoscel, grafic
figura se reprezint:
Creai clasa figura, derivata claselor cerc i triunghi isoscel, dac se cunoate
lungimea razei cercului (lungimea laturii triunghiului isoscel coincide cu diametrul
22

cercului) i nlimea triunghiului isoscel. Pentru clasa figura vor fi implementate


metodele de determinare a suprafeei i a perimetrului.
3. n calitate de clase de baz se consider clasele trapez isoscel i triunghi
isoscel. Aceste clase deriv clasa figura, format dintru-un trapez isoscel i un
triunghi isoscel, grafic figura se reprezint:
Creai clasa figura, derivata claselor trapez isoscel i triunghi isoscel, dac se
cunosc lungimile bazelor trapezului (lungimea laturii triunghiului isoscel este egal
cu lungimea bazei mari a trapezului), iar nlimile trapezului i a triunghiului sunt de
aceiai mrime. Pentru clasa figura vor fi implementate metodele de determinare a
suprafeei i a perimetrului.
4. n calitate de clase de baz se consider clasele cerc i figura (exemplul
rezolvat). Aceste clase deriv clasa figura_noua (format dintr-un cerc i figura
prezentat n exemplul rezolvat), grafic figura_noua se reprezint:
Creai clasa figura_noua, derivata claselor cerc i figura, dac se cunoate
lungimea laturii ptratului, lungimea diametrului cercului este egal cu lungimea
laturii ptratului, iar lungimea laturii triunghiului echilateral este egal cu a+0.3*a,
unde a este lungimea laturii ptratului. Pentru clasa figura_noua vor fi implementate
metodele de determinare a suprafeei i a perimetrului.
5. n calitate de clase de baz se consider clasele patrat i figura (problema 3).
Aceste clase deriv clasa figura_noua (format dintr-un ptrat i figura din problema
3), grafic figura_nou se reprezint:
Creai clasa figura_noua, derivata claselor figura i patrat, dac se cunoate
datele despre figur (problema 3), iar lungimea laturii ptratului este egal cu
lungimea bazei mici a trapezului isoscel. Pentru clasa figura_noua vor fi
implementate metodele de determinare a suprafeei i a perimetrului.
B. Problem exemplu [2, p. 185-186].
6. Se consider ierarhia format din clasele:
Clas de baz: Punct cu cmpurile: coordonatele punctului i culoarea;
Clase derivate:
triunghi echilateral (punctul se consider a fi n centrul triunghiului): lungimea
laturii;
23

cerc: lungimea razei;


figur (triunghi nscris n cerc) derivata claselor cerc i triunghi.
Metodele de citire i desenare vor fi implementate pentru fiecare clas din
ierarhie. De la tastatur se citete un numr ntreg n (n<100), numrul figurilor din
ierarhie. Elaborai un program prin intermediul cruia vor fi afiate figurile la ecran.
7. Se consider ierarhia format din clasele:
Clas de baz: Punct cu cmpurile: coordonatele punctului i culoarea;
Clase derivate:
triunghi echilateral (punctul se consider a fi n centrul triunghiului): lungimea
laturii;
patrat: lungimea laturii, punctul se consider a fi n centrul ptratului;
figur (triunghi nscris n ptrat) derivata claselor cerc i ptrat.
Metodele de citire i desenare vor fi implementate pentru fiecare clas din
ierarhie. De la tastatur se citete un numr ntreg n (n<100), numrul figurilor din
ierarhie. Elaborai un program prin intermediul cruia vor fi afiate figurile la ecran.
8. Se consider ierarhia format din clasele:
Clas de baz: Punct cu cmpurile: coordonatele punctului i culoarea;
Clase derivate:
triunghi echilateral: lungimea laturii;
patrat: lungimea laturii, punctul se consider a fi n centrul ptratului;
figur (o cas format din ptrat i triunghi) derivata claselor patrat i triunghi.
Metodele de citire i desenare vor fi implementate pentru fiecare clas din
ierarhie. De la tastatur se citete un numr ntreg n (n<100), numrul figurilor din
ierarhie. Elaborai un program prin intermediul cruia vor fi afiate figurile la ecran.
9. Se consider o ierarhie de clase care s descrie habitatul animalelor dintr-o
rezervaie natural. n rezervaie pot fi ntlnite urmtoarele animale: iepuri, uri,
cprioare, vulpi i lei. Unele dintre animale sunt ierbivore, altele carnivore sau chiar
ierbivore i carnivore. Ierarhia de clase va avea clas de baz CAnimal, clas
abstract, din care se vor deriva dou clase: CAnimalIerbivor i CAnimalCarnivor.
Pentru fiecare tip de animal se va proiecta o clas corespunztoare care va extinde
una din clase de mai sus, sau ambele clase, corespunztor modului de hranire a
animalului. Despre un animal se cunosc urmtoarele informaii comune: nume, data
aducerii n rezervaie, greutate, hrana preferat, cantitate hran pe zi. n plus
despre iepure se cunoate suprafaa minim pe care poate tri;
despre vulpe - temperatura maxim la care poate rezista, tipul (polar,
indigen);
24

despre leu temperatura minim suportat, ara de provenien;


despre urs - perioada de hibernare;
despre cprioar - numrul de pui.
Pentru fiecare clasa se vor implementa att o funcie de citire a datelor, ct i o
funcie de afiare a acestora, funcii ce vor fi declarate ca funcii pur virtuale n cadrul
clasei de baz CAnimal. Creai clasa CRezervatie care s conin o mulime de
animale i s se populeze rezervaia.
10. Se consider ierarhia: Persoana, Angajat, Student i Student_angajat.
Clasele Angajat i Student sunt derivatele clasei Persoana, iar clasa Student_angajat
este derivata claselor Student i Angajat. n clasa persoan vor fi definite
urmtoarele:
date: numele, prenumele, anul naterii;
metode:
Citire citirea de la tastatur a datelor despre persoan,
Afisare afiarea la consol a datelor despre persoan;
Virsta va returna vrsta persoanei.
n clasa Angajat suplimentar vor mai fi declarate:
date: Ore numrul de ore lucrate, Pl_ora plata pentru o or, funcia;
metode: Bani va determina salariul angajatului conform formulei:
ore*pl_ora.
n clasa Student suplimentar vor mai fi declarate
date: media, grupa;
metode Bani va determina bursa studentului conform formulei: media*75 lei,
dac media studentului este mai mare dect apte, n caz contrar returneaz 0.
Clasa Student_angajat va conine metode pentru citire, afiare, Bani (salariu
+bursa).
Pentru aceast ierarhie se va implementa polimorfismul pentru metodele citire,
afiare, bani. De la tastatur se citete numrul total de persoane n (n<100). Tipul
acesteia se citete n momentul execuiei. La ecran va fi afiat un meniu cu
urmtoarele opiuni:
a) Afiarea tuturor persoanelor;
b) Afiarea persoanelor grupate pe categorii;
c) Suma total de bani, pe care o primesc toate persoanele citite;
d) Persoana sau persoanele ce primesc cei mai muli bani;
e) Persoana sau persoanele ce primesc cei mai puini bani;
f) Afiarea persoanelor n ordine descresctoare veniturilor acumulate;
g) Afiarea persoanelor n ordine cresctoare vrstei.

25

6. Suprancrcarea operatorilor
Problem exemplu. [2, p. 164-168].
1. Se consider clasa timp, cu urmtoarea structur:
class timp{
int ora,min, sec;//14:24:35
public:
timp();
timp(int,int,int);
//
};

Elaborai un program, prin intermediul cruia pentru clasa timp vor fi


suprancrcai:
a) Operatorul + va efectua suma dintre dou obiecte de tipul timp;
b) Operatorul - va efectua diferena dintre dou obiecte de tipul timp;
c) Operatorul ++ incrementarea cu o secund;
d) Operatorul -- decrementarea cu o secund;
e) Operatorul =
f) Operatorii >>,<< vor citi/afia timpul n formatul ora:min:sec, de ex. 14:24:35;
g) Operatorii de comparaie ==,!=, >, >=, <,<=;
h) Se va realiza o metod, care va prelucra timpul n forma corect, de ex. dac
timpul va fi 2:59:63, va fi transformat n 3:00:03.
2. Se consider clasa data, cu urmtoarea structur:
class data{/*se consider c o luna are exact 30 de zile*/
int an,luna, zi;//2010:11:18
public:
data();
data(int,int,int);
//
};

Elaborai un program, prin intermediul cruia pentru clasa data, vor fi


suprancrcai:
a) Operatorul + va efectua suma dintre dou obiecte de tipul data;
b) Operatorul - va efectua diferena dintre dou obiecte de tipul data;
c) Operatorul ++ incrementarea cu o zi;
d) Operatorul -- decrementarea cu o zi;
e) Operatorul =
f) Operatorii >>,<< vor citi/afia data n formatul an:luna:zi, de ex. 2010:11:18;
g) Operatorii de comparaie ==,!=, >, >=, <,<=;
h) Se va realiza o metod, care va prelucra data n forma corect, de ex. dac data
va fi 2010:12:32, va fi transformat n 2011:01:02.
26

3. Se consider clasa fractie, cu urmtoarea structur:


class fractie{
public:
int numitor,numarator;// 14/35
fractie ();
fractie (int,int);
//
};

Elaborai un program prin intermediul cruia pentru clasa fractie, vor fi


suprancrcai:
a) Operatorii aritmetici +, -, *, / ;
b) Operatorii incrementare i decrementare ++, --;
c) Operatorul =;
d) Operatorii >>,<< vor citi/afia fracia n formatul numrtor/numitor, de ex.
14/35;
e) Operatorii de comparaie ==,!=, >, >=, <,<=;
f) Se va realiza o metod care va transforma fracia n fracie ireductibil.
4. Se consider clasa multime, cu urmtoarea structur:
class multime{
char *m;/* tabloul in care vor fi pastrate elementele
multimii*/
int k;// cardinalul multimii
public:
multime ();//va aloca dinamic 255 de elemente
multime (int);//se transmite cardinalul multimii
//
};

Elaborai un program, prin intermediul cruia pentru clasa multime, vor fi


suprancrcai:
a) Operatorul + va efectua operaia de reuniune a mulimilor;
b) Operatorul - va efectua diferena mulimilor;
c) Operatorul * va efectua operaia de intersecie a mulimilor;
d) Operatorul =;
e) Operatorii <= i >= vor verifica incluziunea mulimilor;
f) Operatorii >>,<< vor citi/afia elementele mulimii;
g) Se va implementa metoda int cauta(const char);
care, va returna 1 dac elementul transmis ca parametru este inclus n mulime
i 0 n caz contrar.
5. Se consider clasa String cu urmtoarea structur:
class string{
char *s
27

int k;// lungimea sirului


public:
string ();//va aloca dinamic 255 de elemente
string (int);//se transmite lungimea sirului
int ToInt(string);
string ToString(int);
int cauta(char);
//
};

Elaborai un program, prin intermediul cruia pentru clasa string, vor fi


suprancrcai:
a) Operatorul + va concatena dou iruri;
b) Operatorul =;
c) Operatorii de comparaie ==,!=, >, >=, <,<=;
d) Operatorii >>,<< vor citi/afia elementele irului;
e) Metoda cauta, va returna 1 dac elementul transmis ca parametru este inclus n
ir i 0 n caz contrar.
f) Metoda ToInt, va transforma irul nt-un numr ntreg i va returna acest
numr, n cazul n care nu este posibil de efectuat transformarea se va returna
valoarea 0.
g) Metoda ToString, va transforma un numr ntreg n ir.
6. Se consider clasa Natural, cu urmtoarea structur:
class Natural{
public:
int t[100];//tablou ce conine cifrele numarului
Natural ();//va zerografia tabloul t
//
};

Elaborai un program, prin intermediul cruia pentru clasa Natural, vor fi


suprancrcai:
a) Operatorii aritmetici +, -, *, /, % , vor efectua calcule cu numere mari, de pn
la 100 cifre;
b) Operatorii incrementare i decrementare ++, --;
c) Operatorul =;
d) Operatorii >>,<< vor citi/afia numrul la ecran;
e) Operatorii de comparaie ==,!=, >, >=, <,<=.
7. Se consider clasa Trinom, cu urmtoarea structur:
class Trinom{
double a,b,c;// ax2+bx+c
public:
Trinom ();//va initializa coefienii a,b,c cu 0
28

Trinom (double, double, double);


void Radacini();
//
};

Elaborai un program, prin intermediul cruia pentru clasa trinom, vor fi


suprancrcai:
a) Operatorul + va efectua operaia de adunare dintre dou trinoame;
b) Operatorul - va efectua operaia de scdere dintre dou trinoame;
c) Operatorul =;
d) Operatorii de comparaie ==,!=, >, >=, <,<=;
e) Operatorii >>,<< vor citi/afia polinomul la ecran;
f) Metoda Radacini, va afia rdcinile reale ale trinomului.
8. Se consider clasa Binar, cu urmtoarea structur:
class Binar{
public:
int t[1000];
Binar();//va zerografia tabloul t
int ToInt();
Binar ToBinar(int);
//
};

Elaborai un program, prin intermediul cruia pentru clasa Binar vor fi


suprancrcai:
a) Operatorii aritmetici +, -, vor determina suma/diferena dintre dou numere
binare;
b) Operatorii incrementare i decrementare ++, --;
c) Operatorul =;
d) Operatorii >>,<< vor citi/afia numrul la ecran numrul binar;
e) Operatorii de comparaie ==,!=, >, >=, <,<=;
f) Metoda ToInt, va transforma numrul binar n baza 10.
g) Metoda ToBinar, va transforma un numr ntreg, din baza 10 n baza doi.
7. Agregare
Este necesar de a elabora un program prin intermediul cruia se va gestiona o
list. n acest caz lista reprezint studenii unei grupe. n toate sarcinile trebuie s fie
prezente:
a) constructor crearea listei vide;
b) destructor va elibera memoria Heap de obiecte;
c) metoda de creare va ncrca datele n Heap din fiierul de intrare;
d) metoda de inserare va insera un obiect n Heap;
29

e) metoda de excludere va exclude un obiect din Heap;


f) metoda de cutare va fi suprancrcat, astfel nct cutarea se va efectua dup
un parametru i mai muli parametri;
g) metode pentru filtrarea datelor;
h) dou metode de sortare, una dup un cmp cu valori numerice, alta dup un
cmp text;
i) un meniu, prin intermediul cruia utilizatorul va avea posibilitatea de a alege
operaia dorit.
Realizare:
Crem fiierul lista.in i l salvm n directoriul curent. n fiier datele vor fi
scrise n mod corespunztor figurii:

#include <conio.h>
#include <iostream.h>
#include <iomanip.h>
#include <fstream.h>
class TStudent{
char *nume,*grupa;
int anul,id;
double media;
TStudent *next;//adresa umatorului element
TStudent();
friend istream & operator>>(istream &, TStudent *&);
friend ostream & operator<<(ostream &, TStudent*);
friend class lista;
friend int schimb(TStudent *,TStudent *);
};
TStudent::TStudent(){
nume=new char[20];grupa=new char[10];
anul=0;id=0;media=0; next=NULL;
}
istream & operator>>(istream &is, TStudent *&t){
cout<<"Dati datele despre student"<<endl;
cout<<"Id: ";is>>t->id;
cout<<"Nume: ";is>>t->nume;
cout<<"Grupa ";is>>t->grupa;
cout<<"Anul: ";is>>t->anul;
cout<<"Media: ";is>>t->media;
return is;
}
30

ostream & operator<<(ostream &os, TStudent *t){


os<<setw(6)<<t->id<<setw(20)<<t->nume<<setw(10);
os<<t->grupa<<setw(6)<<t->anul<<setw(7)<<t->media<<endl;
return os;
}
int schimb(TStudent *a, TStudent *b){
TStudent *an,*bn,t;
if (!a || !b)return 0;
an=a->next;bn=b->next;t=*a;*a=*b;*b=t;a->next=an;b->next=bn;
return 1;
}
class lista{
TStudent *prim;//adresa primului element din lista
int n;//numarul total de studenti din lista
public:
lista(){prim=NULL;n=0;}
void creare();
void afisare();
void inserare();
void exclude();
void cauta(char *);
void cauta(double,int);
int sort_medie();
~lista();
};
void lista::creare(){
TStudent *p; ifstream f("lista.in");f>>n;
for(int i=0;i<n;i++){
p=new TStudent;
f>>p->id>>p->nume>>p->grupa>>p->anul>>p->media;
p->next=prim;prim=p;
}f.close();
}
void lista::afisare(){
cout<<"Lista studentilor"<<endl;
cout<<setw(6)<<"id"<<setw(20)<<"nume"<<setw(10)<<"grupa";
cout<<setw(6)<<"anul"<<setw(7)<<"media"<<endl;
TStudent *p;p=prim;
while(p!=NULL){cout<<p;p=p->next;}
}
void lista::inserare(){
TStudent *q;q=new TStudent;
cin>>q; q->next=prim;prim=q; n++;
}
void lista::exclude(){
TStudent *p,*q;int c;
cout<<"Introdu id-ul studentului care va fi exclus";
cin>>c; p=prim;
if(p->id==c){prim=p->next;delete p;n--;}
else{
while(p->next->id!=c && p!=NULL)p=p->next;
if(p!=NULL){q=p->next;p->next=q->next;delete q;n--;}
}
}
31

void lista::cauta(char *nume){


TStudent *p;p=prim;
while(p!=NULL){
if(stricmp(p->nume,nume)==0) cout<<p;p=p->next;
}
}
void lista::cauta(double media, int anul){
TStudent *p;p=prim;
while(p!=NULL){
if(p->media>=media&&p->anul==anul) cout<<p;p=p->next;
}
}
int lista::sort_medie(){
int i,j;TStudent *a,*b;
if(!prim)return 0;
a=prim;
for(i=0;i<n-1;i++){
b=a->next;
for(j=i+1;j<n;j++){
if((a->media)>(b->media))schimb(a,b);
b=b->next;
}a=a->next;
}
clrscr();
cout<<"Sortarea datelor s-a efectuat cu succes";getch();
return 1;
}
lista::~lista(){
TStudent *p,*q;
do{
p=prim;prim=prim->next;delete p;
}while(prim!=NULL);
}
main(){
char c;lista g;
g.creare();
do{
clrscr();
cout<<"Tastati"<<endl<<"1-afisare"<<endl<<"2-excludere";
cout<<endl<<"3-inserare"<<endl<<"4-Studentii cu numele Ion";
cout<<endl<<"5-Studentii cu media>8, nascuti in anul 1990";
cout<<endl<<"6-Sortare dupa medie"<<endl<<"0-iesire"<<endl;
c=getch(); clrscr();
switch(c){
case '1': g.afisare();getch();break;
case '2': g.exclude();break;
case '3': g.inserare();break;
case '4': g.cauta("Ion");getch();break;
case '5': g.cauta(8,1990);getch();break;
case '6': g.sort_medie();break;
}
}while(c!='0');
}
32

1. Elaborai un program prin intermediul cruia vor fi gestionate filmele de la


un cinematograf. Despre un film se cunosc urmtoarele date: numele filmului, anul
ediiei, actorul principal, regizorul, bugetul filmului, ora de difuzare a filmului n
cinematograf.
2. Elaborai un program prin intermediul cruia vor fi gestionate mai multe
state prezente la un concurs. Despre fiecare stat se cunosc urmtoarele date: numele
rii, preedintele, suprafaa, numrul de locuitori, continentul.
3. Elaborai un program prin intermediul cruia vor fi gestionate crile unei
biblioteci. Despre fiecare carte se cunosc urmtoarele date: denumirea crii, autorul,
editura, numrul de pagini, anul ediiei, preul.
4. Elaborai un program prin intermediul cruia vor fi gestionate calculatoarele
unei universiti. Despre un calculator se cunosc urmtoarele date: tipul monitorului,
capacitatea procesorului, cantitatea memoriei operative, placa video, hard disk-ul.
5. Elaborai un program prin intermediul cruia vor fi gestionate telefoanele
mobile ale unui magazin. Despre un telefon se cunosc urmtoarele date: marca, anul
ediiei, culoarea, preul, termenul de garanie, tipul camerei video.
6. Elaborai un program prin intermediul cruia vor fi administrate hotelurile
dintr-o ar. Despre un hotel se cunosc urmtoarele date: nume hotel, adresa, numrul
de stele, numrul de odi (camere), costurile minim i maxim pentru o camer.
7. Elaborai un program prin intermediul cruia vor fi gestionate automobilele
dintr-un salon auto. Despre un automobil se cunosc urmtoarele date: marca, anul
ediiei, culoarea, preul, capacitatea motorului, consumul la 100 km.
8. Creai un tip de date matr_complex, care va fi o matrice de numere
complexe. Asupra acestui tip de date vor fi suprancrcai toi operatorii specifici unei
matrice.
9. Elaborai un program prin intermediul cruia se va crea tipul de date tablou
bidimensional cu linii de lungime variabil, notat TBV. Pentru obiectul de tip TBV
se vor implementa metodele:
a) citire() citirea elementelor obiectului;
b) afisare() afiarea elementelor obiectului;
c) minime() afiarea elementelor minime de pe fiecare linie;
33

d) maxime() afiarea elementelor maxime de pe fiecare linie;


e) sum_max() determinarea sumei elementelor maxime de pe fiecare linie;
f) sum_min() determinarea sumei elementelor minime de pe fiecare linie;
g) cauta(int e) va returna valoare 1 dac elementul e exist i 0 n caz contrar;
h) sort() sortarea n ordine cresctoare pe linii a obiectului de tip TBV;
i) *sort([char mod],[int linie]) sortarea cu transmitere de parametri c (ordine
cresctoare) sau d (ordine descresctoare) n calitate de mod i cu indicarea liniei.
10. Elaborai un program prin intermediul cruia se va efectua evidena
personalului dintr-o instituie. n instituia dat sunt urmtoarele tipuri de personal :
Angajat despre care se cunosc datele: numele, prenumele, codul fiscal, numrul de
ore lucrate, plata pentru o or.
n calitate de metode vor fi: citirea datelor de la tastatur, afiarea datelor la
ecran, determinarea salariului conform formulei: salariu=ore_lucrate*plata_ora.
Angajat de baz despre care se cunosc datele: numele, prenumele, codul fiscal,
numrul de ore lucrate, plata pentru o or, gradul (0,1,2,3), anul angajrii.
n calitate de metode vor fi: citirea datelor de la tastatur, afiarea datelor la
ecran, determinarea salariului conform formulei: salariu=ore_lucrate*plata_ora.
Angajatul va beneficia i de un adaos la salariu. Salariaii cu gradul 0 vor avea un
adaos de 50%, gradul 1 40%, gradul 2 30%. n dependen de stagiu adaosul va fi
de 35% pentru cei cu un stagiu 10 ani, 25% pentru cei cu un stagiu 3 ani i <10
ani i 10% pentru toi ceilali.
Student despre care se cunosc datele: numele, prenumele, codul fiscal, grupa,
media.
n calitate de metode vor fi: citirea datelor de la tastatur, afiarea datelor la
ecran, determinarea bursei. Bursa studentului o vom determina astfel:

0 lei, dac media 7.5

300 lei, dac 7.5 media 8.5


Bursa
400 lei, dac 8.5 media 9.5
500 lei, dac media 9.5

Student Angajat despre care se cunosc datele: numele, prenumele, codul fiscal,
grupa, media, numrul de ore lucrate, plata pentru o or.
n calitate de metode vor fi: citirea datelor de la tastatur, afiarea datelor la
ecran, determinarea bursei i a salariului. Metodele bursa i salariu vor efectua
calculele conform formulelor din clasele precedente.
Asupra personalului vor fi efectuate operaii de adugare a unei persoane,
excludere, afiare a tuturor persoanelor din instituie, ct i determinarea bugetului
lunar de salarizare a personalului instituiei.
34

Mediul de programare vizual


Capitolul II
C++ Builder
C++Builder este un mediu de dezvoltare rapid a aplicaiilor produs de filiala
CodeGear a Embarcadero Technologies pentru scrierea programelor n limbajul de
programare C++. Prima versiune dateaz anului 1997. Se presupune c o versiune
viitoare a CodeGear C++Builder va avea suport pentru x86/64 i va crea cod nativ
x86/64.
Programele au fost elaborate n versiunea C++ Builder 6.
Probleme rezolvate
Problema1 Reduceri
Elaborai o aplicaie care va determina reducerea unui produs cumprat.
Cumprtorul beneficiaz de reducere n urmtoarele cazuri :
a) n cazul n care suma este mai mare ca 1000 lei reducerea este de 3%;
b) n zilele de odihn reducerea este de 2%.
n rezultatul efecturii unui click pe butonul Reducere, n componenta Label va
fi afiat informaia complet despre reducere cu indicarea sumei finale. n cazul n
care reduceri nu sunt, va fi afiat mesajul corespunztor. Informaia despre zilele de
odihn va fi determinat n baza analizei datei curente. Forma aplicaiei va arta
astfel :

Realizare:
Pe suprafaa formei plasm componentele:
Label1 modificm proprietatea Caption n Suma (lei);
Label2 eliminm textul de la proprietatea Caption i setm dimensiunile
corespunztor;
Edit1 - eliminm textul de la proprietatea Text;
35

Button1 modificm proprietatea Caption n Reducere;


Pentru componenta Form1 setm proprietile:
Caption=Reduceri
Position= poScreenCenter
Width=300
Height=200
Prelucrm evenimentul Button1Click:
double suma, reducere, ziua;
TDateTime data=Now();//stabilim timpul curent
suma=Edit1->Text.ToDouble();
if(suma>1000) reducere=suma*0.03;ziua=DayOfWeek(data);
if(ziua==7||ziua==1) reducere+=suma*0.02;
Label2->Caption="Reducerea este in marime de "
+AnsiString(reducere)+'\n'+
"Suma Achitata:="+AnsiString(suma-reducere);

Problema2 Termopan
Elaborai o aplicaie, prin intermediul creia va fi posibil de determinat costul
unui geam termopan. Preurile sunt: 1m2 cost 179 lei, pervazul ferestrei cost 39
lei/m. Aplicaia va arta astfel :

Realizare:
Pe suprafaa formei plasm componentele:
Label1 modificm proprietatea Caption n Lungimea (cm);
Label2 modificm proprietatea Caption n Latimea (cm);
Label3 eliminm textul de la proprietatea Caption i setm dimensiunile
corespunztor;
Edit1 - eliminm textul de la proprietatea Text;
Edit2 - eliminm textul de la proprietatea Text;
Button1 modificm proprietatea Caption n Determinare cost;
CheckBox1 - modificm proprietatea Caption n Pervaz;
RadioGroup1 - modificm proprietatea Caption n Geam, iar prin intermediul
proprietii Items introducem simplu i dublu;
36

Pentru componenta Form1 setm proprietile:


Caption=Geam termopan
Position= poScreenCenter
Width=400
Height=210
Prelucrm evenimentul Button1Click:
double lung, lat, cost;
bool pervaz=CheckBox1->Checked;
lung=Edit1->Text.ToDouble()*0.01;
lat=Edit2->Text.ToDouble()*0.01;
cost=lung*lat*179;
if(RadioGroup1->ItemIndex==1) cost=cost*2;
if(pervaz)cost+=lung*39;Label3->Caption="Costul ferestrei este de
"+ AnsiString(cost)+" lei";

Problema3 Navigator
Elaborai o aplicaie prin intermediul creia va fi efectuat navigarea n
sistemul de fiiere al calculatorului. Efectund operaia double-click pe numele
fiierului, acesta va fi deschis. Prin intermediul unui buton cu titlul Cauta se va
efectua cutarea fiierelor dup nume, iar datele despre acestea vor fi adugate ntr-o
component de tip TMemo. Componentei de tip TMemo i va fi ataat un meniu
contextual cu titlul Salveaza, efectuarea unui click pe suprafaa acestuia va salva
cutarea n fiierul date.txt aflat n directoriul curent.
Realizare:
Pe suprafaa formei plasm corespunztor componentele:
FileListBox1 pentru afiarea fiierelor;
FilterComboBox1 modificm proprietatea FileList n FileListBox1, prin
intermediul proprietii filter crem urmtorul filtru:

DirectoryListoBox1 modificm proprietatea DirList n FilelistBox1;


DriveComboBox1 modificm proprietatea FileList n DirectoryListoBox1;
Label1 modificm proprietatea Caption n Indica numele fisierului;
Edit1 - eliminm textul de la proprietatea Text;
37

Button1 modificm proprietatea Caption n Cauta;


PopupMenu1 double-click pe subcomponent i scriem textul Salveaza;
Memo1 modificm proprietatea PopupMenu n PopupMenu1,
ScollBars=ssBoth;
Forma aplicaiei va arta astfel :

iar

Pentru cutare vom scrie n antetul fiierului Unit1.cpp funcia:


void ListFiles(AnsiString path, TStrings* List){
TSearchRec sr;
AnsiString nume=Form1->Edit1->Text;
if(FindFirst(path+"*.*", faAnyFile, sr) == 0){
do{if (sr.Attr & faDirectory){
if(sr.Name!=".") if (sr.Name!=".."){
ListFiles(path+sr.Name+"\\",List);
}
}else{AnsiString adresa=sr.Name;
if( AnsiPos(nume,adresa)>0) List->Add(path+sr.Name);
}}while (FindNext(sr) == 0); FindClose(sr);}}

Prelucrm evenimentul FileListBox1DblClick


AnsiString str=FileListBox1->Directory+"\\";
str=str+FileListBox1->Items->Strings[FileListBox1->ItemIndex];
ShellExecute( Sender,"open",str.c_str(),NULL,NULL,1);

Prelucrm evenimentul Button1Click


AnsiString disc=AnsiString(DriveComboBox1->Drive);
ListFiles(disc+":\\",Memo1->Lines);

Prelucrm evenimentul Salveaza1Click


Memo1->Lines->SaveToFile("date.txt");

Problema4 Depozit bancar


Elaborai o aplicaie care va permite determinarea profitului n urma depunerii
unei sume de bani. Banca ofer urmtoarele tipuri de depozite :
38

DEPOZITE N MDL
Tipul
Termenul Rata dobnzii Retrageri
depozitului de plasare
anuala
din cont
3 luni
8%
6 luni
9%
Flexibil
12 luni
10%
DA
24 luni
11%
36 luni
12%
3 luni
9%
6 luni
10%
Rentier
12 luni
11%
NU
24 luni
12%
36 luni
13%
DEPOZITE N USD I EUR
3 luni
2%
6 luni
2,5%
Exclusiv
12 luni
3%
DA
24 luni
3,5%
36 luni
4%
3 luni
3%
6 luni
3,5%
Major
12 luni
4%
NU
24 luni
4,5%
36 luni
5%
Forma aplicaiei va arta astfel :

Realizare:
Pe suprafaa formei plasm componentele corespunztor:
ComboBox1 pentru selectarea valutei, prin intermediul proprietii Items
introducem valutele existente: MDL, USD, EUR;
ComboBox2 pentru selectarea termenului de depozit, prin intermediul proprietii
39

Items introducem valorile: 3, 6, 12, 24, 36;


ComboBox3 pentru selectarea numelui depozitului;
Edit1 pentru indicarea sumei depuse;
Button1 pentru determinarea dobnzii;
6 componente de tip TLabel corespunztor formei aplicaiei.
Declaraii:
AnsiString denumire;
int termen;
struct depozit{
AnsiString tip;
double rata[5];
}dep[4];

Elaborm funcia ce returneaz indocile de ordine al termenului de depozit:


int k(int w){
int c;
switch(w){
case 3: c=0;break;
case 6: c=1;break;
case 12: c=2;break;
case 24: c=3;break;
case 36: c=4;break;
}
return c;
}

Prelucrm evenimentul FormCreate


dep[0].tip="Flexibil";
for(int i=0;i<5;i++)dep[0].rata[i]=8+i;
dep[1].tip="Rentier";
for(int i=0;i<5;i++)dep[1].rata[i]=9+i;
dep[2].tip="Exclusiv";
for(int i=0;i<5;i++)dep[2].rata[i]=2+i*0.5;
dep[3].tip="Major";
for(int i=0;i<5;i++)dep[3].rata[i]=3+i*0.5;

Prelucrm evenimentul ComboBox1Change


ComboBox3->Clear();
int n=ComboBox1->ItemIndex;
if(n!=-1)
if(n==0){ComboBox3->Items->Add("Flexibil");
ComboBox3->Items->Add("Rentier");}
else {ComboBox3->Items->Add("Exclusiv");
ComboBox3->Items->Add("Major");}

Prelucrm evenimentul Button1Click


double suma, dobinda;
suma=Edit1->Text.ToDouble();
for(int i=0;i<4;i++)
if(denumire==dep[i].tip)
dobinda=suma*dep[i].rata[k(termen)]*(termen/12.0)*0.01;
Label6->Caption="Dobinda este in marime de: "+
FormatFloat("#.###",dobinda)+
'\n'+"Suma finala:="+FormatFloat("#.###",suma+dobinda);
40

Prelucrm evenimentul ComboBox3Change


int n=ComboBox3->ItemIndex;
if(n!=-1)denumire=ComboBox3->Items->Strings[n];

Prelucrm evenimentul ComboBox2Change


int n=ComboBox2->ItemIndex;
if(n!=-1)termen=ComboBox2->Items->Strings[n].ToInt();

Problema5 Ceas Mecanic [14, p.104-109]


Elaborai o aplicaie prin intermediul creia va fi simulat un ceas mecanic.
Forma aplicaiei va arta astfel:

Realizare:
Pe suprafaa formei plasm componenta Timer1:
Declaraii:
#include <vcl.h>
#pragma hdrstop
#define R 100
#define rad 0.0174533//unghiul de rotire in radiani
#include "Unit1.h"
#include "DateUtils.hpp"
#include "math.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int x0,y0,ahr,amin,asec;

Prelucrm evenimentul FormCreate


TDateTime t=Now();
ClientHeight=(R+30)*2;
ClientWidth=(R+30)*2;
Form1->Caption="Ceas mecanic";
x0=R+30;y0=R+30;
ahr=90-HourOf(t)*30-(MinuteOf(Today())/12)*6;
amin=90-MinuteOf(t)*6;
asec=90-SecondOf(Today())*6;
Timer1->Interval=1000;
Timer1->Enabled=true;

Elaborm funcia:
41

void vector(int x0,int y0, int a, int l){


int x,y;
Form1->Canvas->MoveTo(x0,y0);
x=x0+l*cos(a*rad);
y=y0-l*sin(a*rad);
Form1->Canvas->LineTo(x,y);
}

Elaborm funcia:
void desen(){
TDateTime t;
Form1->Canvas->Pen->Color=clBtnFace;
Form1->Canvas->Pen->Width=3;
vector(x0,y0,ahr,R-20);
vector(x0,y0,amin,R-15);
vector(x0,y0,asec,R-7);
t=Now();
ahr=90-HourOf(t)*30-(MinuteOf(t)%12)*6;
amin=90-MinuteOf(t)*6;
asec=90-SecondOf(t)*6;
Form1->Canvas->Pen->Width=3;
Form1->Canvas->Pen->Color=clGreen;
vector(x0,y0,ahr,R-20);
Form1->Canvas->Pen->Width=2;
Form1->Canvas->Pen->Color=clBlack;
vector(x0,y0,amin,R-15);
Form1->Canvas->Pen->Width=1;
Form1->Canvas->Pen->Color=clRed;
vector(x0,y0,asec,R-7);
}

Prelucrm evenimentul FormPaint


int x,y,a=0,h=3,pw;
TBrushStyle bs;
TColor pc;
bs=Canvas->Brush->Style;
pc=Canvas->Pen->Color;
pw=Canvas->Pen->Width;
Canvas->Brush->Style=bsClear;
Canvas->Pen->Width=1;
Canvas->Pen->Color=clBlack;
while(a<360){
x=x0+R*cos(a*rad);
y=x0-R*sin(a*rad);
Canvas->MoveTo(x,y);
if((a%30)==0){
Canvas->Ellipse(x-2,y-2,x+3,y+3);
x=x0+(R+15)*cos(a*rad);
y=x0-(R+15)*sin(a*rad);
Canvas->TextOutA(x-5,y-7,IntToStr(h));
h--;
if(h==0)h=12;
}
else Canvas->Ellipse(x-1,y-1,x+1,y+1);
a=a+6;
42

}
Canvas->Brush->Style=bs;
Canvas->Pen->Color=pc;
Canvas->Pen->Width=pw;
desen();

Prelucrm evenimentul Timer1Timer


desen();

Problema6 Calculator pentru numere complexe


Elaborai o aplicaie prin intermediul creia se va efectua operaii cu numere
complexe. Forma aplicaiei va arta astfel:

Realizare:
Pe suprafaa formei plasm corespunztor componentele:
Edit1, Edit2 pentru scrierea numerelor complexe, vom seta proprietatea Text cu ir
vid;
Button1, Button2, Button3, Button4 butoane pentru efectuarea calculelor cu numere
complexe, setm proprietatea Caption a fiecrui buton, n mod corespunztor: Suma,
Diferenta, Produsul, Citul;
Label1, Label2 conform figurii;
Label3 pentru afiarea rezultatului, vom seta proprietatea Caption cu ir vid;
Crem tipul de date complex:
class complex{
public:
double x,y;//complex=x+yi
complex(){x=y=0.0;}
complex(double a,double b){x=a;y=b;}
complex(AnsiString s);
friend complex operator+(complex,complex);
friend complex operator-(complex,complex);
friend complex operator*(complex,complex);
friend complex operator/(complex,complex);
complex operator=(complex b){x=b.x;y=b.y;return *this;}
AnsiString ToStr();
friend complex ToComplex(AnsiString);
};
43

complex::complex(AnsiString s){
AnsiString sx,sy,sc;
int a=s.Pos("+");
if(a==0)a=s.Pos("-");
if(a==1){
sc=s.SubString(2,s.Length()-1);
a=sc.Pos("-")+1;
}
sx=s.SubString(1,a-1);
sy=s.SubString(a,s.Length()-a);
x=sx.ToDouble();
y=sy.ToDouble();
}
AnsiString complex::ToStr(){
AnsiString s="";
s=s+AnsiString(x);
if(y>=0)s=s+"+";
s=s+AnsiString(y)+"i";
return s;
}
complex ToComplex(AnsiString s){
complex z(s);
return z;
}
complex operator+(complex a,complex b){
complex c;
c.x=a.x+b.x;
c.y=a.y+b.y;
return c;
}
complex operator-(complex a,complex b){
complex c;
c.x=a.x-b.x;
c.y=a.y-b.y;
return c;
}
complex operator*(complex a,complex b){
complex c;
c.x=a.x*b.x-a.y*b.y;
c.y=a.x*b.y+a.y*b.x;
return c;
}
complex operator/(complex a,complex b){
complex c;
c.x=(a.x*b.x+a.y*b.y)/(b.x*b.x+b.y*b.y);
c.y=(-a.x*b.y+a.y*b.x)/(b.x*b.x+b.y*b.y);
return c;
}

Prelucrm evenimentul Button1Click


complex a(Edit1->Text);
complex b(Edit2->Text);
complex c=a+b;
AnsiString rez;
44

rez="("+a.ToStr()+")"+"+"+"("+b.ToStr()+")"+"="+c.ToStr();
Label3->Caption=rez;

Prelucrm evenimentul Button2Click


complex a(Edit1->Text);
complex b(Edit2->Text);
complex c=a-b;
AnsiString rez;
rez="("+a.ToStr()+")"+"-"+"("+b.ToStr()+")"+"="+c.ToStr();
Label3->Caption=rez;

Prelucrm evenimentul Button3Click


complex a(Edit1->Text);
complex b(Edit2->Text);
complex c=a*b;
AnsiString rez;
rez="("+a.ToStr()+")"+"*"+"("+b.ToStr()+")"+"="+c.ToStr();
Label3->Caption=rez;

Prelucrm evenimentul Button4Click


complex a(Edit1->Text);
complex b(Edit2->Text);
complex c=a/b;
AnsiString rez;
rez="("+a.ToStr()+")"+"/"+"("+b.ToStr()+")"+"="+c.ToStr();
Label3->Caption=rez;

Problema7 Evidena personalului unei instituii


Elaborai un program prin intermediul cruia se va efectua evidena
personalului dintr-o instituie. n instituia dat sunt urmtoarele tipuri de personal :
Angajat despre care se cunosc datele: nume, prenume, codul fiscal, numrul de ore
lucrate, plata pentru o or.
n calitate de metode vor fi: citirea datelor de la tastatur, afiarea datelor la
ecran, determinarea salariului, conform formulei:
salariu=ore_lucrate*plata_ora.
Student despre care se cunosc datele: nume, prenume, codul fiscal, grupa, media.
n calitate de metode vor fi: citirea datelor de la tastatur, afiarea datelor la
ecran, determinarea bursei. Bursa studentului o vom determina astfel:

0 lei, dac media 7.5

300 lei, dac 7.5 media 8.5


Bursa
400 lei, dac 8.5 media 9.5
500 lei, dac media 9.5

Student Angajat despre care se cunosc datele: nume, prenume, codul fiscal, grupa,
media, numrul de ore lucrate, plata pentru o or.
n calitate de metode vor fi: citirea datelor de la tastatur, afiarea datelor,
determinarea bursei i a salariului. Metodele bursa i salariu vor efectua calculele
45

conform formulelor din clasele precedente.


Asupra personalului vor fi efectuate operaii de adugare a unei persoane,
excludere, afiare a tuturor persoanelor din instituie, ct i determinarea bugetului
lunar al personalului instituiei.
Realizare:
Forma aplicaiei va arta astfel:

Pe suprafaa formei plasm corespunztor componentele:


GroupBox1, modificm proprietatea Caption n Indicati datele despre personal.
Plasm n interiorul acesteia componentele:
RadioGroup1 i efectum setrile:
Caption=Indicai tipul
Items adugm: Student, Angajat, Student Angajat
Columns=3
8 componente de tip TEdit, modificnd proprietatea Name n mod corespunztor:
nume, prenume, idnp, grupa, media, functia, ore, plata. Pentru fiecare component se
va modifica proprietatea Text n ir vid.
8 componente de tip TLabel;
Button1 pentru adugarea informaiei, setm proprietatea Caption=Adauga;
Pe suprafaa mai plasm componentele:
Button2 pentru afiarea personalului, setm proprietatea Caption=Afisare personal;
Button3 pentru afiarea sumei ce necesit a fi achitat, setm proprietatea
46

Caption=Suma ce necesita a fi achitata;


Button4 pentru a exclude din personal, setm proprietatea Caption=Excludeti;
Memo1 pentru afiarea informaiei.
Codul surs:
class Persoana{
protected:
AnsiString nume,prenume,idnp,tip;
public:
Persoana(){tip="Persoana";}
virtual AnsiString afisare();
AnsiString cod(){return idnp;}
virtual void citire();
virtual double salariu(){return 0;}
virtual double bursa(){return 0;}
};
class Angajat:virtual public Persoana{
protected:
AnsiString functia;
int ore;
double pl_ora;
public:
Angajat(){tip="Angajat";}
void citire();
AnsiString afisare();
double salariu();
};
class Student:virtual public Persoana{
protected:
AnsiString grupa;
double media;
public:
Student(){tip="Student";}
void citire();
AnsiString afisare();
double bursa();
};
class Stud_Ang:public Student,public Angajat{
public:
Stud_Ang(){tip="Student angajat";}
void citire();
AnsiString afisare();
};
void Persoana::citire(){
nume=Form1->nume->Text;prenume=Form1->prenume->Text;
idnp=Form1->idnp->Text;}
AnsiString Persoana::afisare(){
AnsiString s=tip+" "+nume+" "+prenume+" "+idnp+" ";
return s;}
void Angajat::citire(){
Persoana::citire();
functia=Form1->functia->Text;
ore=Form1->ore->Text.ToInt();
47

pl_ora=Form1->plata->Text.ToDouble();}
AnsiString Angajat::afisare(){
AnsiString s=Persoana::afisare();
s=s+functia+" "+FormatFloat("0.00",salariu());
return s;}
double Angajat::salariu(){return ore*pl_ora;}
void Student::citire(){
Persoana::citire();
grupa=Form1->grupa->Text;
media=Form1->media->Text.ToDouble();}
AnsiString Student::afisare(){
AnsiString s=Persoana::afisare();
s=s+grupa+" "+FormatFloat("0.00",bursa());
return s;}
double Student::bursa(){
if(media<7.5) return 0;
else if(media<8.5) return 300;
else if(media<9.5) return 400;
else return 500;}
void Stud_Ang::citire(){
Persoana::citire();
grupa=Form1->grupa->Text;
media=Form1->media->Text.ToDouble();
functia=Form1->functia->Text;
ore=Form1->ore->Text.ToInt();
pl_ora=Form1->plata->Text.ToDouble();}
AnsiString Stud_Ang::afisare(){
AnsiString s=Persoana::afisare();
s=s+grupa+" "+functia+" "+FormatFloat("0.00",bursa()+salariu());
return s;}
class celula{
public:
Persoana *p;
celula *next;
celula(){next=NULL;}
void cit(int);
AnsiString afis(){return p->afisare();}
double consum();
};
double celula::consum(){return p->bursa()+p->salariu();}
void celula::cit(int i){
switch(i){
case 0 : p=new Student;break;
case 1 : p=new Angajat;break;
case 2 : p=new Stud_Ang;break;
}p->citire();}
class lista{
celula *prim;
public:
lista(){prim=NULL;}
void afisare();
void inserare(int);
void exclude(AnsiString);
double bani();
48

~lista();
};
void lista::afisare(){
Form1->Memo1->Clear();
if(prim==NULL) Form1->Memo1->Lines->Add("Lista este vida");
else{
Form1->Memo1->Lines->Add("Lista Personalului");
celula *p;p=prim;
while(p!=NULL){
Form1->Memo1->Lines->Add(p->afis());p=p->next;
}}}
void lista::inserare(int i){
celula *q;q=new celula;
q->cit(i);q->next=prim;prim=q;}
void lista::exclude(AnsiString c){
celula *w,*q;w=prim;
if(w->p->cod()==c){prim=w->next;delete w;}
else{while(w->next->p->cod()!=c && w!=NULL)w=w->next;
if(w!=NULL){q=w->next;w->next=q->next;delete q;}}}
lista::~lista(){
celula *p,*q;
if(prim!=NULL)
do{p=prim;prim=prim->next;delete p;}while(prim!=NULL);}
double lista::bani(){double d=0;celula *p;p=prim;
while(p!=NULL){d=d+p->consum();p=p->next;}
return d;}

Declaraii:
lista p;

Prelucrm evenimentul Button1Click


p.inserare(RadioGroup1->ItemIndex);
Button2Click(Sender);
RadioGroup1->ItemIndex=-1;
nume->Clear();prenume->Clear();
idnp->Clear();grupa->Clear();
media->Clear();functia->Clear();
ore->Clear();plata->Clear();

Prelucrm evenimentul RadioGroup1Click


switch(RadioGroup1->ItemIndex){
case 0: Button1->Caption="Adauga student";break;
case 1: Button1->Caption="Adauga angajat";break;
case 2: Button1->Caption="Adauga student angajat";break;
}

Prelucrm evenimentul Button2Click


p.afisare();

Prelucrm evenimentul Button3Click


ShowMessage("Suma ce necesita a fi achitata este "+
FormatFloat("0.00",p.bani()));

Prelucrm evenimentul Button4Click


AnsiString s=InputBox("Excludere","Indicati codul fiscal al
persoanei ce urmeaza a fi exclusa","");
p.exclude(s);Button2Click(Sender);
49

Probleme pentru rezolvare independent


1. Forme (ferestre).
1. Elaborai o aplicaie prin intermediul creia va fi afiat o fereastr cu
urmtoarele setri: dimensiunile 400400, culoarea albastr, poziia centru sus,
titlu numele i prenumele studentului, utilizatorului i se va interzice
redimensionarea formei.
2. Elaborai o aplicaie care la efectuarea unui click pe suprafaa formei va
modifica, n mod aleator, culoarea formei (minim 5 culori).
Indicaie : pentru generarea culorilor va fi utilizat funcia random.
3. Elaborai o aplicaie care la efectuarea unui click va exclude bara de titlu a
formei, iar la efectuarea double-click va afia bara de titlu a formei cu titlul respectiv
SALUT.
4. Elaborai o aplicaie care va modifica titlul formei n dependen de
evenimentul care a avut loc. De exemplu, la efectuarea double-click pe suprafaa
formei titlul va fi A fost efectuat double-click.
5. Elaborai o aplicaie care la efectuarea unui double-click va modifica
consecutiv valoarea proprietii BorderStyle.
6. Elaborai o aplicaie care:
a) la apsarea tastei x va nchide aplicaia;
b) la apsarea tastei L va mri lungimea ferestrei cu 10%;
c) la apsarea tastei l va micora lungimea ferestrei cu 10%;
d) la apsarea tastei H va mri nlimea ferestrei cu 10%;
e) la apsarea tastei h va micora nlimea ferestrei cu 10%;
f) la apsarea tastei c va poziiona fereastra la centru;
g) la apsarea tastei + va mri dimensiunea ferestrei cu 10%;
h) la apsarea tastei - va micora dimensiunea ferestrei cu 10%.
7. Elaborai o aplicaie care :
a) la apsarea tastei va deplasa fereastra n sus;
b) la apsarea tastei va deplasa fereastra n jos;
c) la apsarea tastei va deplasa fereastra n dreapta;
d) la apsarea tastei va deplasa fereastra n stnga.
50

8. Elaborai o aplicaie care va afia iniial forma la centrul suprafeei de lucru.


La apsare tastelor , forma se va deplasa pe diagonala principal a suprafeei de
lucru. Apsarea caracterului s va poziiona forma n centru, iar la apsarea tastelor
, forma se va deplasa pe diagonala secundar. Apsarea caracterului p va
poziiona forma n centru, iar forma se va deplasa pe diagonala principal la apsarea
tastelor ,.
9. Elaborai o aplicaie care va afia forma pe centru suprafeei de lucru cu
dimensiunile 300300. Se va interzice modificare dimensiunilor formei. La
efectuarea unui click pe suprafaa formei aceasta se va deplasa consecutiv: stnga sus,
dreapta sus, dreapta jos, stnga jos, centrul.
10. Elaborai o aplicaie care va permite redimensionarea formei de la tastatur.
Pentru a redimensiona nlimea utilizatorul va tasta caracterul h, apoi o cifr c din
intervalul [1,8], iar n dependen de cifra tastat nlimea formei va fi 100*c. Pentru
modificarea limii se va proceda n mod similar prin tastarea caracterului w.
2. Componenta Button.
1. Creai aplicaia SHOW/HIDE. Pe suprafaa formei cu titlul SHOW/HIDE
sunt plasate 3 butoane, cu titlurile respective: show, hide, show/hide. La efectuarea
unui click pe unul din primele 2 butoane butonul show/hide va fi ascuns sau afiat, n
dependen de butonul apsat.
2. Creai aplicaia MOUSE. Pe suprafaa formei cu titlul MOUSE sunt
plasate 3 butoane, cu titlurile respective: crCros, crHelp, crNoDrop. La efectuarea
unui click pe unul dintre butoane, pe suprafaa formei mausul va lua forma cu
proprietatea corespunztoare titlului butonului.
3. Creai aplicaia DEPLASARE. Pe suprafaa formei cu titlul DEPLASARE
vor fi plasate 4 butoane, cu titlurile respective: sus, jos, dreapta, stnga. Efectuarea
unui click pe unul din butoane va deplasa forma cu 20% fa de poziia precedent a
formei.
4. Creai aplicaia MARESTE. Pe suprafaa formei cu titlul MARESTE va fi
plasat un singur buton cu titlul +, butonul va fi poziionat n mijlocul formei.
Efectuarea unui click pe suprafaa butonului va mri dimensiunea acestuia cu 15%,
dac dimensiunea butonului depete dimensiunea formei, atunci forma se nchide.

51

5. Creai aplicaia OPERATII. Pe suprafaa formei cu titlul OPERATII vor fi


plasate 2 butoane. Primul buton va fi implicit (proprietatea Default setat la true)
efectuarea unui click pe suprafaa acestuia sau apsarea tastei Enter va modifica titlul
acestuia n AM TASTAT ENTER, butonul doi cu titlul ESC, buton de anulare a
formei (proprietatea Cancel setat la true), efectuarea unui click pe suprafaa acestuia
sau tastarea tastei ESC va nchide forma.
6. Creai aplicaia INCREMENTARE/DECREMENTARE. Pe suprafaa formei
cu titlul 0 se plaseaz dou butoane cu titlurile respectiv
incrementare/decrementare. Efectuarea unui click pe unul dintre butoane va
modifica titlul formei incrementnd o unitate, respectiv decrementnd o unitate.
7. Creai aplicaia DEPLASARE. Pe suprafaa formei cu titlul DEPLASARE
se plaseaz un buton fr titlu. La tastarea tastelor , , , se va deplasa butonul,
n dependen de tasta apsat, cu 15% fa de poziia precedent. Dac butonul
iese de pe suprafaa formei, atunci el revine n partea opus.
8. Creai aplicaia CULOARE. Pe suprafaa formei cu titlul CULOARE vor
fi plasate 5 butoane cu titlurile respectiv: rosu, verde, galben, negru, alb. Efectuarea
unui click pe unul din butoane va modifica coloare formei corespunztor butonului
apsat.
9. Creai aplicaia POZITIE. Pe suprafaa formei cu titlul POZITIE vor fi
plasate 6 butoane cu titlurile respectiv: stnga sus, dreapta sus, dreapta jos, stnga jos,
centru, deplasare. La efectuarea unui click pe unul din primele 5 butoane, butonul cu
titlul deplasare, se va deplasa n concordan cu titlul butonului apsat.
10. Creai aplicaia SCARA. Pe suprafaa formei cu titlul SCARA se
plaseaz 5 butoane. La efectuarea unui click pe suprafaa formei butoanele vor avea
dimensiunile 30*80, titlurile corespunztor 1, 2, 3, 4, 5 i vor fi aranjate n form de
scar (de la 1 la 5).
3. Componenta Edit
1. Creai aplicaia TITLUL FORMEI. Pe suprafaa formei sunt plasate
componentele Buton (cu titlul Scrie) i Edit. La efectuarea unui click pe suprafaa
butonului titlul ferestrei va corespunde cu textul din cutia Edit.

52

2. Creai aplicaia COPY_PASTE. Pe suprafaa formei sunt plasate dou


butoane i dou cutii de editare. La efectuarea unui click pe primul buton se va copia
textul din prima cutie n cutia a doua, iar la efectuarea unui click pe butonul doi se va
copia textul din a doua cutie n prima. Modificai titlul butoanelor n conformitate cu
operaiile care se efectueaz. La elaborarea acestei aplicaii se vor utiliza metodele
caracteristice pentru prelucrarea textului din cutie (CopyToClipboard,
PasteFromClipboard).
3. Creai aplicaia SCRIE. Pe suprafaa formei sunt plasate dou butoane cu
titlurile Scrie i Interzice. Dup efectuare unui click pe butonul Scrie utilizatorul
va avea posibilitatea de a edita text n cutie. Efectuarea unui click pe butonul
Interzice nu va permite utilizatorului editarea textului n cutie.
4. Creai aplicaia CARACTER. Pe suprafaa formei sunt plasate trei cutii de
editare. n fiecare dintre cutii la ntlnirea caracterului a, acesta va fi exclus, dublat,
respectiv triplat.
5. Creai aplicaia EDITARE. Pe suprafaa formei sunt dou cutii de editare. n
prima cutie se va permite numai editarea cifrelor, n cutia a doua numai caractere ale
alfabetului latin.
6. Creai aplicaia TRANSFORMA. Pe suprafaa formei cu titlul
TRANSFORMA se plaseaz 3 butoane cu titlurile respectiv: minuscule, majuscule,
normal i o component Edit. n cutia de editare utilizatorul va culege un text. La
efectuarea unui click pe butonul majuscule, textul din cutie va transformat n
majuscule, similar minuscule, iar la efectuarea unui click pe butonul normal, textul va
reveni la forma iniial.
7. Creai aplicaia LOGARE. Pe suprafaa formei cu titlul LOGARE se
plaseaz 3 componente Edit i un buton implicit cu titlul Validare. n prima
component se va scrie numele utilizatorului, n a doua component parola (textul
pentru parol va fi nlocuit cu caracterul *). La efectuarea unui click pe butonul
Validare, a treia cutie de editare va conine un mesaj care va specifica succesul sau
insuccesul logrii. n cazul n care logarea a fost cu succes, numele utilizatorului va fi
scris n titlul ferestrei.
8. Creai aplicaia VOCALE. Pe suprafaa formei este plasat componenta
Edit1. La introducerea textului n cutie, titlul formei va indica numrul de apariii ale
vocalelor n cutie.
53

9. Creai aplicaia COLOANE. Pe suprafaa formei cu titlul COLOANE se


plaseaz 4 componente Edit i 4 componente Buton. La efectuarea unui click pe
suprafaa formei componentele Buton vor fi aranjate ntr-o coloan, iar componentele
Edit ntr-o alt coloan.
10. Creai aplicaia OnKeyPress. Pe suprafaa formei este plasat o component
Edit. De prelucrat evenimentul OnKeyPress al componentei astfel nct:
a) la tastarea caracterului q tot textul din cutie se va dubla;
b) la tastarea caracterului w tot textul din cutie se va tripla;
c) la tastarea caracterului e textul din cutie va fi exclus;
d) la tastarea caracterului r titlul formei va fi identic cu textul din cutie.
4. iruri de caractere i componenta Label
1. Creai aplicaia Sir_1. Pe suprafaa formei cu titlul Sir_1 se plaseaz 2
componente Edit, un buton cu titlul Caut i o component Label. n prima
component Edit se va scrie o fraz, n a doua un cuvnt (silab, caracter). La
efectuarea unui click pe butonul Caut, n componenta Label se va afia poziia
iniial n ir a cuvntului cutat. n cazul n care cuvntul nu se include n fraz, va fi
afiat un mesaj corespunztor.
2. Creai aplicaia Sir_2. Pe suprafaa formei cu titlul Sir_2 se plaseaz 2
componente Edit, un buton cu titlul Exclude i o component Label. n prima
component Edit se va scrie o fraz, n a doua un cuvnt (silab, caracter). La
efectuarea unui click pe butonul Exclude, cuvntul din fraza editat va fi exclus din
fraz, rezultatul va fi afiat prin intermediul componentei Label.
3. Creai aplicaia Sir_3. Pe suprafaa formei cu titlul Sir_3 se plaseaz 2
componente Edit, un buton cu titlul Numara i o component Label. n prima
component Edit se va scrie o fraz, n a doua un cuvnt (silab, caracter). La
efectuarea unui click pe butonul Numara, n componenta Label se va scrie numrul
de apariii a cuvntului n fraz.
4. Creai aplicaia Replace. Pe suprafaa formei cu titlul Replace se plaseaz
3 componente Edit, un buton cu titlul Replace i o component Label. n prima
component Edit se va scrie o fraz, n a doua un cuvnt (silab, caracter) care
urmeaz a fi nlocuit, n a treia componenta se va scrie textul cu care urmeaz a fi
nlocuit. La efectuarea unui click pe butonul Replace, va avea loc nlocuirea textului.
Rezultatul va fi scris n componenta Label.
54

5. Creai aplicaia Palindrom. ntr-o cutie de editare se intoduce un cuvnt. La


efectuarea unui click pe butonul Verifica se va afia prin intermediul unei
componente Label, dac cuvntul introdus este palindrom.
6. Creai aplicaia Cifre. Pe suprafaa formei cu titlul Cifre se va plasa o
component Edit, care va permite numai editarea cifrelor. La efectuarea unui click pe
butonul Numara, n componenta label va fi afiat cifra care apare de cele mai multe
ori, de cele mai puine ori, ct i numrul de repetri ale fiecrei cifre.
7. Creai aplicaia Inversul. Pe forma cu titlul Inversul sunt plasate
componentele Edit, Buton cu titlul Modifica i o component Label. n cutia de
editare se vor scrie mai multe cuvinte. La efectuarea unui click pe butonul Modifica,
fiecare cuvint va fi nlocuit cu inversul su (de la sfrit la nceput). irul modificat va
fi afiat n componenta Label.
8. Creai aplicaia Cuvnt maxim. Pe suprafaa formei cu titlul Cuvnt maxim
sunt plasate componentele Edit, Buton cu titlul Determina i o component Label. n
cutia de editare se vor scrie mai multe cuvinte. La efectuarea unui click pe butonul
Determina, n componenta Label va fi scris cel mai mare cuvnt.
9. Creai aplicaia Litere. Pe suprafaa formei cu titlul Litere se va plasa o
component Edit, n care se va scrie un ir de caractere. La efectuarea unui click pe
butonul Exclude, n componenta label va fi afiat irul fr de cifre.
10. Creai aplicaia ASCII. Pe forma cu titlul ASCII sunt plasate
componentele Edit, Buton cu titlul Arata i o component Label. n cutia de editare
se vor scrie caractere. La efectuarea unui click pe butonul Arata n componenta Label
vor fi scrise codurile ASCII ale caracterelor scrise n componenta Edit.
11. Creai aplicaia Calculator. Prin intermediul a trei cutii de editare
utilizatorul introduce dou valori ntregi i un operator (+, -, *, /, %). La efectuarea
unui click pe butonul Calcul se va afia prin intermediul unei componente Label
rezultatul operaiei dintre cele dou valori i operatorul indicat.
12. Elaborai o aplicaie care va verifica dac greutatea i nlimea unui copil
corespund vrstei. Vrsta copilului se va introduce prin intermediul unei componente
Edit. Formule de calcul :
greutate=2*v+8 (n kg),
nlime=5*v+80 (n cm).
55

La efectuarea unui click pe butonul Determina se va indica n 2 componente Label


greutatea i nlimea determinate dup formulele de mai sus.
13. Elaborai o aplicaie care s modeleze jocul Ghici numarul. Jocul const n
faptul c este generat un numr aleator pe intervalul 0..9 de ctre calculator.
Utilizatorul ntroduce o valoare de la 0 la 9 ntr-o cutie de editare, dup efectuarea
unui click pe butonul GHICI, este afiat prin intermediul unei componente Label
valoarea dat de calculator. n cazul n care utilizatorul a ghicit, va fi afiat un mesaj
care va indica acest fapt.
14. Creai aplicaia Ecuaii, care va permite determinarea soluiilor
urmtoarelor ecuaii :
a) ax+b=0;
b) ax 2 bx c 0 .
Rezultatele vor fi afiate prin intermediul componentelor Label.
15. Creai aplicaia Sistem de ecuaii, care s determine soluiile unui sistem de
ecuaii cu dou necunoscute. Rezultatele vor fi afiate prin intermediul
componentelor Label.
16. Creai aplicaia Triunghi. Prin intermediul a 3 cutii de editare se introduc 3
valori numerice, care reprezint lungimile laturilor unui triunghi. La efectuarea unui
click pe butonul Calcul se va determina:
a) tipul triunghiului (ascuit, obtuz, dreptunghic), utiliznd teorema lui
Pitagora;
b) aria triunghiului (Formula lui Heron);
c) perimetrul triunghiului.
n cazul n care valorile introduse nu pot forma un triunghi, va fi afiat un
mesaj, care va indica aceasta i nu se va efectua nici un calcul. Rezultatele vor fi
afiate prin intermediul componentelor Label.
17. Creai aplicaia Divizor i Multiplu comun. Prin intermediul a dou
componente Edit se citesc dou numere ntregi. La efectuarea unui click pe butonul
Determina n componenta Label se va fia cel mai mare divizor comun, ct i cel mai
mic multiplu comun.
18. Creai aplicaia Numere prime. Prin intermediul unei componente Edit se
citete un numr ntreg. La efectuarea unui click pe butonul Determina ntr-o
component Label vor fi afiate toate numerele prime mai mici sau egale cu numrul
56

citit.
19. Creai aplicaia Combinri. Prin intermediul a dou componente Edit se
vor citi 2 numere ntregi n i r. ntr-o component Label se va afia valoarea:

Cnr ,

calculat conform formulei:

Cnr

n!
r!*(n r )!

20. Creai aplicaia Numere prietene. Prin intermediul a dou componente


Edit se citesc 2 numere ntregi. Dou numere se numesc prietene dac posed
proprietatea: fiecare din ele este egal cu suma divizorilor inferiori celuilalt, de
exemplu 220 i 284. Prin intermediul unei componente Label se va afia dac
numerele sunt sau nu prietene.
21. Creai aplicaia Numar perfect. Prin intermediul unei componente Edit se
citete un numr ntreg. Prin intermediul unei componente Label se va afia dac
numrul este perfect, supraperfect sau imperfect. Numrul este perfect dac suma
divizorilor inferiori acestuia este egala cu el nsui, dac suma este mai mic ca
numrul atunci el este imperfect, dac suma este mai mare ca numrul dat atunci el se
numete supraperfect.
5. Aplicaii multiforme.
1. Elaborai o aplicaie multiform. Aplicaia va fi format din 3 forme. Pe
suprafaa formei principale (forma 1) este plasat un buton cu titlul Forma Noua. La
efectuarea unui click pe suprafaa acestuia, este ascuns forma principal i afiat o
alt form similar formei principale, titlul acestei forme fiind Forma 1. Efectuarea
unui click pe butonul Forma Noua ascunde forma i afieaz o alt forma cu titlul
Forma 2, .d. nchiderea unei dintre forme va genera nchiderea aplicaiei.
2. Elaborai o aplicaie care la efectuarea unui click pe butonul cu titlul Intro,
va afia o fereastr de dialog prin care i se va cere utilizatorului s-i scrie prenumele
(de exemplu Ion). Dup efectuarea unui click pe butonul Ok, fereastra va fi nchis i
va fi afiat o alta fereastr, cu un mesaj de salut (de exemplu Salut Ion).
3. Elaborai o aplicaie prin intermediul creia la efectuarea unui click pe
butonul Afisare de pe suprafaa formei, vor fi afiate 8 ferestre de dialog aranjate pe
diagonala principal a monitorului.
57

4. Creai aplicaia Tabla Inmultirii. Pe suprafaa formei cu titlul Tabla


Inmultirii, este plasat butonul Verifica. Efectuarea unui click pe suprafaa acestuia,
afieaz o fereastr de dialog. Aceast fereastr conine o ntrebare de genul x*y= ?,
unde 1<x,y<11. Dup scrierea rspunsului corect de ctre utilizator este apsat
butonul Ok. Dac rspunsul este corect fereastra este nchis, n caz contrar, fereastra
nu este nchis pn cnd nu este introdus rspunsul corect. La realizarea aplicaiei vor
fi utilizate forme modale.
5. Creai aplicaia Virus. Pe suprafaa formei principale se plaseaz un buton cu
titlul Lanseaz virus. La efectuarea unui click pe acest buton forma principal este
ascuns i afiat o alt form cu titlul Virus. nchiderea formei cu titlul Virus, va
afia o nou form cu acelai titlu. Aplicaia se va nchide la apsarea tastei x.
6. Elaborai o aplicaie multiform. Prin intermediul formei principale se vor
seta unele proprieti ale formei a doua: titlul, dimensiunile, distana de sus, distana
din stnga. Numai dup introducerea acestor date, la efectuarea unui click pe butonul
Arata, va fi afiat a doua form, iar forma principal va fi ascuns. La nchiderea
formei secundare, forma principal va fi afiat.
7. Creai aplicaia Bursa. Prin intermediul formei principale utilizatorul va
introduce datele despre un student: numele, grupa, anul naterii i media notelor
curente. La efectuarea unui click pe butonul determin media, va fi afiat o fereastr
cu titlul: numele i grupa studentului, n interiorul acesteia va fi afiat vrsta i media
studentului. Pentru determinarea bursei va fi utilizat formula: media notelor
curente*75, dac media notelor curente este mai mare ca 7.6, n caz contrar 0.
8. Creai aplicaia Dialog. Pe suprafaa formei principale vor fi plasate 2
butoane de comand, cu titlurile respectiv, Inchide aplicaia, Modifica culoarea
formei. La efectuarea unui click pe unul dintre butoane, va fi afiat o fereastr de
dialog cu urmtorul coninut:
Inchide aplicaia fereastra de dialog va conine butoanele Yes i No. La
efectuarea unui click pe butonul Yes, aplicaia se va nchide;
Modifica culoarea formei fereastra conine un cmp pentru introducerea
culorii i butoanele Ok, Cancel. Efectuarea unui click pe butonul Ok, modific
culoarea formei corespunztor valorii introduse.
9. Creai aplicaia Test. Pe suprafaa ferestrei principale se plaseaz un buton de
comand cu titlul Test. La efectuarea unui click pe suprafaa acestuia este afiat o
form modal. Pe suprafaa acestei forme este plasat o component Label (n
58

interiorul acesteia este afiat un cod aleator format din 4 cifre), o component Edit (n
cadrul acestei componente utilizatorul va scrie codul afiat n Label), un buton de
comand. La efectuarea unui click pe butonul de comand se va verifica
corectitudinea codului, dac codul este scris corect, atunci fereastra modal este
nchis. La elaborarea aplicaiei vor fi excluse alte posibiliti de nchidere a ferestrei
modale.
10. Elaborai o aplicaie care la lansare va afia o form, prin intermediul creia
se va cere utilizatorului s introduc numele i parola. Validarea acestora se va
efectua prin efectuare unui click pe butonul Validare sau apsnd tasta Enter. Dac
numele i parola sunt corecte se va deschide o nou form, iar precedenta va fi
ascuns. Scrierea greit a numelui sau a parolei de trei ori consecutiv va nchide
forma proiectului.
6. Aplicaii cu butoane
1. Creai aplicaia CONTOR. Pe suprafaa ferestrei principale sunt plasate
componentele: Edit, un buton UpDown asociat componentei Edit, un grup de 4
butoane radio, cu titlurile respectiv uniti, zeci, sute, mii. La efectuarea unui click pe
unul dintre butoanele radio valoarea din cutia de editare va fi incrementat sau
decrementat corespunztor butonului radio.
2. Creai aplicaia GRUPURI. Pe suprafaa ferestrei principale sunt plasate
dou grupuri de butoane radio, o cutie de editare i un buton de comand. Primul
grup conine 3 opiuni (forma, cutia, ambele). Al doilea grup conine 6 opiuni
(diferite culori). La efectuarea unui click pe butonul de comand pentru form i
pentru cutia de editare vor fi efectuate modificrile setate corespunztor seleciei
efectuate. De ex. dac n primul grup este bifat opiunea ambele, iar al n al doilea
opiunea galben, atunci att forma ct i cutia vor avea culoarea galben.
3. Elaborai o aplicaie care s modeleze jocul Rspuns corect. Utilizatorului i
se adreseaz un set de 5 ntrebri cu 4 variante de rspuns. Utilizatorul va bifa
rspunsul, pe care l consider corect, dup care va efectua un click pe butonul cu
titlul Raspuns. Efectuarea operaiei click va afia un mesaj prin care se va indica
numrul de rspunsuri corecte.
4. Creai aplicaia POZIIE. Pe suprafaa ferestrei principale sunt plasate 3
grupuri de butoane radio:

59

a) Grupul Pozitie va conine urmtoarele opiuni: Centru, Stinga sus, Stinga jos,
Dreapta sus, Dreapta jos.
b) Grupul Culoare va conine o list cu 5 opiuni cu diferite culori.
c) Grupul Dimensiune va conine urmtoarele opiuni: 200200, 200300,
300200, 400500, 500400.
Efectuarea unui click pe fiecare grup va afia forma cu setrile selectate.
5. Creai aplicaia CONVERTOR. Aceast aplicaie va permite efectuarea
urmtoarelor transformri:
a) milimetri, centimetri, decimetri, kilometri, dac valoarea iniial se consider
dat n metri;
b) miligrame, kilograme, tone, centigrame, dac valoarea iniial se consider
dat n grame;
c) sptmni, zile, minute, secunde, dac valoarea iniial se consider dat n ore.
La elaborarea aplicaiei vor fi utilizate componente RadioGroup (cte un grup
pentru fiecare caz). Pentru fiecare caz va fi afiat rezultatul n componente Label.
6. Creai aplicaia Arie & Perimetru. Forma aplicaiei va arta astfel:

La efectuarea unui click pe butonul Determina va fi afiat aria i perimetrul


figurii corespunztoare. Modificarea lungimilor laturilor va modifica n mod
corespunztor aria i perimetru figurilor.
7. Creai aplicaia Triunghi n baza aplicaiei Arie & Perimetru.
8. Creai aplicaia Test. Utilizatorului i se adreseaz o ntrebare i 8 variante de
rspuns. Rspunsurile vor fi afiate prin intermediul unui grup de butoane radio. Prin
intermediul unei componente Edit i al unui buton de tip TUpDown, utilizatorul va
avea posibilitatea de a micora/mri numrul variantelor de rspuns pe segmentul
[3;8]. La bifarea rspunsului va fi afiat un mesaj n care se va indica corectitudinea
rspunsului.
60

9. Creai aplicaia Baza. Pe suprafaa formei sunt plasate 8 componente


CheckBox, 8 componente Label, o cutie de editare. Prin intermediul cutiei de editare
se va introduce un numr ntreg. Butoanele de tip TCheckBox vor avea titlurile: baza
doi, baza trei,..., baza nou. La bifarea butoanelor numrul introdus va fi transformat
corespunztor bazei selectate i afiat (doar dac este bifat) prin intermediul
componentelor de tip TLabel.
10. Creai aplicaia Butoane Radio. Pe suprafaa formei cu titlul Butoane
Radio este plasat o component RadioGroup i un buton de comand. La
efectuarea unui click pe suprafaa butonului de comand n componenta RadioGroup
vor fi adugate 10 butoane cu titlurile respectiv 0,1,...,9. Butoanele vor fi divizate n
trei coloane. La selectarea butonului cu valoare maxim, n cutie va fi adugat nc
un buton (urmtorul dup numrul maxim). Se va permite adugarea de noi butoane,
doar dac valoarea butonului maxim nu depete 50. La selectarea butonului cu titlul
0, va fi exclus butonul cu valoarea maximal, excluderea se va efectua doar dac
numrul de butoane depete valoare 3. La efectuarea unui click pe oricare alt buton
din cutie, va fi afiat un mesaj care va conine titlul butonului selectat.
7. Aplicaii cu meniuri
1. Creai aplicaia Meniu. Se va crea un meniu principal cu urmtoarele opiuni:
a) poziie cu opiunile: sus, jos, stnga, dreapta centru;
b) dimensiuni cu opiunile: 200200, 200300, 300200, 400500,
500400;
c) culoare cu opiunile ase tipuri de culori.
La efectuarea unui click pe una dintre opiunile meniului, structura formei va fi
modificat n mod corespunztor.
2. Pentru o form vor fi creat un meniu contextual cu urmtoarele opiuni:
a) poziie cu opiunile: sus, jos, stnga, dreapta centru;
b) dimensiuni cu opiunile: 200200, 200300, 300200, 400500,
500400;
c) culoare cu opiunile ase tipuri de culori.
La efectuarea unui click pe una dintre opiunile meniului, structura formei va fi
modificat n mod corespunztor.
3. Creai aplicaia Sir. Pe suprafaa formei cu titlul Sir se plaseaz o
component Memo i se creeaz un meniu principal cu opiunile:
a) Cauta va cuta un text;
61

b) Exclude va exclude un text;


c) Inlocuieste va nlocui un text cu alt text.
4. Creai aplicaia Caractere. Pe suprafaa formei cu titlul Caractere se
plaseaz o component Memo i se creeaz un meniu contextual, ataat componentei
Memo, cu opiunile:
a) Vocale va determina numrul de vocale;
b) Linia maxima va determina linia de lungime maxim;
c) Linia minima va determina linia de lungime minim;
d) Majuscule va transforma textul n majuscule;
e) Minuscule va transforma textul n minuscule;
f) Normal va afia textul cu formatarea sa iniial;
g) Save va salva textul n fiierul date.txt.
5. Creai aplicaia Numr. Prin intermediul unei componente de tip TEdit se
citete un numr format din mai multe cifre (va fi permis numai editarea cifrelor).
La efectuarea unui click pe butonul cu titlul Proprietati n componenta Memo se vor
afia:
a) numrul de cifre;
b) prima cifr;
c) ultima cifr;
d) suma cifrelor;
e) scrie numai cifrele pare;
f) scrie numai cifrele impare;
Pe suprafaa formei va mai fi plasat un buton cu titlul Save, acionarea cruia
va permite salvarea informaiei n fiier.
6. Creai aplicaia Numere. Prin intermediul a trei componente de tip TEdit se
citesc 3 numere ntregi. La efectuarea unui click pe butonul cu titlul Numere n
componenta Memo se va afia:
a) divizorii primului numr i care nu sunt divizori pentru al doilea numr;
b) cel mai mare divizor comun;
c) cel mai mic multiplu comun.
Pe suprafaa formei va mai fi plasat un buton cu titlul Save, acionarea cruia
va permite salvarea informaiei n fiier.
7. Creai aplicaia Coduri ASCII. La elaborarea aplicaiei va fi utilizat
componenta Memo i va fi creat un meniu contextual cu opiunile:

62

ASCII
Caractere
Deschide
Deschide
Transforma Transforma
Salvare
Salvare
Efectuarea unui click pe opiunea Deschide va scrie caracterele din fiier
(ascii.txt/caractere.txt) n componenta Memo;
Efectuarea unui click pe opiunea Transforma va transforma textul n cod
ASCII (va transforma codul n text) , apoi acesta va fi scris n componenta Memo;
Efectuarea unui click pe opiunea Salvare va scrie caracterele din Memo n
unul din fiierele (ascii.txt, dac textul a fost transformat n cod i respectiv
caractere.txt);
8. Creai aplicaia Cifre. La elaborarea aplicaiei va fi utilizat componenta
Memo i va fi creat un meniu contextual cu opiunile:
Cifra
Caractere
Deschide
Deschide
Transforma Transforma
Salvare
Salvare
Efectuarea unui click pe opiunea Deschide va scrie textul din fiier
(cifra.txt/caractere.txt) n componenta Memo;
Efectuarea unui click pe opiunea Transforma va scrie cifrele cu caractere (va
transforma textul n cifre) n componenta Memo;
Efectuarea unui click pe opiunea Salvare va scrie caracterele din Memo n
unul din fiierele (caractere.txt, dac cifrele sunt scrise cu caractere i respectiv
cifra.txt);
9. Creai aplicaia Fiiere. Prin intermediul aplicaiei Fiiere se va crea fiierul
Unit.txt (salvat n directorul curent), care va conine informaia din fiierele Unit.h i
Unit1.cpp. Coninutul acestui fiier va fi afiat prin intermediul unei componente
Memo.
10. Creai aplicaia Triunghiul lui Pascal. Prin intermediul unei componente
de tip TEdit se va citi nlimea triunghiului. Triunghiul va fi afiat prin intermediul
unei componentei Memo. De exemplu triunghiul cu nlimea 4 va arta astfel:
Triunghiul lui Pascal :

63

Cnr

n!
r!*(n r)!

Pe suprafaa formei va mai fi plasat un buton cu titlul Save, acionarea cruia


va permite salvarea informaiei n fiier.
8. Aplicaii cu elemente de grafic
1. Creai aplicaia Triunghi. La elaborarea aplicaiei va fi creat un meniu
principal cu opiunile:
Isoscel
Oarecare
Echilateral
Ascutit
Ascutit
Dreptunghic Dreptunghic
Obtuz
Obtuz
Efectuarea unui click pe una dintre opiunile meniului va desena triunghiul
selectat pe suprafaa unei componente de tip TImage.
2. Creai aplicaia Patrulater. La elaborarea aplicaiei va fi creat un meniu
principal cu opiunile:
Paralelogram Trapez
Oarecare
Oarecare
Dreptunghi
Isoscel
Patrat
Dreptunghic
Romb
Efectuarea unui click pe una dintre opiunile meniului va desena patrulaterul
selectat pe suprafaa unei componente de tip TImage.
3. Creai aplicaia Dreptunghiuri. Prin intermediul unei cutii de editare se
citete numrul de dreptunghiuri n (1<n<11). La efectuarea unui click pe butonul
Deseneaza, pe suprafaa unei componente de tip TImage se deseneaz n
dreptunghiuri. Fiecare dreptunghi va avea o culoare diferit de precedentul, lungimile
laturilor vor fi cu 10% mai mari ca laturile precedentului dreptunghi i toate
dreptunghiurile vor avea acelai centru.

64

4. Creai aplicaia Cercuri. Prin intermediul unei cutii de editare se citete


numrul de cercuri n (1<n<11). La efectuarea unui click pe butonul Deseneaza, pe
suprafaa unei componente de tip TImage se deseneaz n cercuri. Fiecare cerc va
avea o culoare diferit de precedentul, lungimea razei va fi cu 10% mai mare ca
lungimea razei cercului precedent toate cercurile vor avea acelai centru.
5. Creai aplicaia Tabla de ah. Pe suprafaa formei se plaseaz un buton de
comand cu titlul Deseneaza i o component de tip TImage. La efectuarea unui click
pe butonul cu titlul Deseneaza, va fi desenat o tabl de ah pe suprafaa componentei
de tip TImage.
6. Creai aplicaia Stea. Pe suprafaa formei se plaseaz un buton de comand
cu titlul Deseneaza i o component de tip TImage. La efectuarea unui click pe
butonul cu titlul Deseneaza, va fi desenat o stea pe suprafaa componentei de tip
TImage.
7. Creai aplicaia Drapel. La elaborarea aplicaiei va fi creat un meniu
contextual cu numele a cinci ri. Efectuarea unui click pe una dintre opiunile
meniului va desena drapelul rii selectate, iar la mijlocul desenului va fi scris numele
rii respective. Pentru elaborarea desenului se va utiliza o component de tip
TImage.
8. Creai aplicaia Figuri. La elaborarea aplicaiei va fi creat un meniu
contextual cu opiunile: cerc, patrat, dreptunghi. Prin intermediul acestui meniu se va
selecta figura ce urmeaz a fi desenat. La efectuarea unui click pe suprafaa formei
se citesc coordonatele centrului figurii i se deseneaz figura selectat din meniu.
Efectuarea operaiei click de mai multe ori, va desena mai multe figuri pe suprafaa
formei.
9. Creai aplicaia Casa Mea. Prin intermediul acestei aplicaii se va desena o
cas pe o component de tip TImage. Prin intermediul unui buton cu titlul salveaz,
imaginea va fi salvat n fiierul casa.jpg;
10. Creai aplicaia Figuri geometrice. La elaborarea aplicaiei va fi creat un
meniu contextual cu opiunile: triunghi, patrulater. Dup efectuarea unui click pe una
dintre opiunile meniului, utilizatorul va efectua operaia click de 3 ori, respectiv 4 ori
(se vor citi colurile figurilor), pe suprafaa formei. La efectuarea unui click dreapta
pe suprafaa formei va fi afiat un meniu cu opiunea desen. La efectuarea unui click
pe acesta va fi desenat un triunghi sau patrulater.
65

11. Creai aplicaia Parabola. Prin intermediul a trei cutii de editare se vor
introduce coeficienii pentru o ecuaie de gradul doi (parabol). La efectuarea unui
click pe butonul cu titlul Desen va fi desenat pe o component de tip TImage graficul
ecuaiei introduse.
12. Creai aplicaia Hiperbola. Prin intermediul a patru cutii de editare se vor
introduce coeficienii pentru o ecuaie de gradul trei (hiperbol). La efectuarea unui
click pe butonul cu titlul Desen va fi desenat graficul ecuaiei introduse pe o
component de tip TImage.
13. Creai aplicaia Parabole. Pe suprafaa formei se plaseaz 4 butoane de
comand cu titlurile respectiv sus, jos, dreapta, stinga. La efectuarea unui click pe
unul dintre butoane va fi desenat o parabol cu ramurile orientate respectiv n sus, n
jos, la dreapta, la stnga.
14. Elaborai o aplicaie prin intermediul creia va fi desenat sistemul cartezian
de coordonate Oxy cu marcajele i numerotrile corespunztoare. n acest sistem
reprezentai punctul A i proieciile acestuia pe axele de coordonate. Coordonatele
punctului vor fi citite prin intermediul a dou cutii de editare.
15. Creai aplicaia Grafic. Prin intermediul acestei aplicaii se vor desena
graficele urmtoarelor funcii:

f ( x) x 3 x 2
1 1
f ( x) 2
x x
x
f ( x) 2
x 1

f ( x) x2 ln x

1
f ( x) sin x sin 2x
2
8
f ( x) x 2
x
2
f ( x) e x

e x e x
f ( x)
2
e x e x
f ( x) x x
e e
tgx
f ( x)
x

16. Creai aplicaia Rotete triunghi. Pe suprafaa formei se plaseaz dou


butoane cu titlurile respectiv Deseneaza triunghi i Roteste triunghi. La efectuarea
unui click pe primul buton se va desena un triunghi, iar la efectuarea unui click pe
butonul al doilea va fi rotit triunghiul, citindu-se n prealabil msura unghiului de
rotire i coordonatele punctului fa de care se va efectua rotirea.
17. Creai aplicaia Roteste patrulater. Pe suprafaa formei se plaseaz dou
butoane cu titlurile respectiv Deseneaza patrulater i Roteste patrulater. La efectuarea
unui click pe primul buton se va desena un triunghi, iar la efectuarea unui click pe
66

butonul al doilea va fi rotit patrulaterul, citindu-se n prealabil msura unghiului de


rotire i coordonatele punctului fa de care se va efectua rotirea.
18. Creai aplicaia Creion. Aplicaia va simula componenta Pencil din
aplicaia PAINT. Prin intermediul unui meniu contextual va fi posibil de selectat
culoarea creionului i curirea suprafeei de desenare.
19. Creai aplicaia Deplasare. Pe suprafaa formei este desenat o figur. La
efectuarea unui click pe butonul cu titlul Start se va mica figura pe traiectoria unui
ptrat. Pentru aceasta se vor indica coordonatele ptratului (colul stnga sus al
ptratului i lungimea laturii). Efectuarea unui click pe butonul Stop va stopa
procesul de rotire a figurii. Prin intermediul butoanelor cu titlurile respectiv Mareste
i Micsoreaza se va mri, respectiv micora viteza de deplasare a figurii.
20. Creai aplicaia Plutire. Pe suprafaa formei este desenat o figur (cerc,
patrat, dreptunghi). La efectuarea unui click pe butonul cu titlul Start figura va pluti
pe suprafaa formei (se va deplasa pe traiectoria unei sinusoide). Efectuarea unui
click pe butonul Stop va stopa procesul de plutire a figurii.
9. Componenta Timer
1. Elaborai o aplicaie care va permite modificarea culoarea formei peste un
interval de timp. Intervalul de timp se va introduce de ctre utilizator. Culoarea
formei se va modific n mod aleator dintr-o gam de 8 culori.
2. Elaborai o aplicaie care va modifica poziia formei peste un interval de
timp. Intervalul de timp se va introduce de ctre utilizator. Poziionarea formei va fi
efectuat n mod aleator astfel: sus, jos, dreapta, stnga, centru.
3. Creai aplicaia Logare. Pe suprafaa formei va fi plasat un buton cu titlul
Logare, la efectuarea unui click pe suprafaa acestuia se va afia o nou fereastr,
unde utilizatorul va introduce numele i parola. Pentru introducerea acestora se vor
acorda 20 secunde. Dac utilizatorul nu reuete s introduc datele de logare corect,
aplicaia este nchis. Numele de utilizator i parola corect vor fi fixate n codul
programului.
4. Creai aplicaia Tabla Inmulirii. Pe suprafaa formei cu titlul Tabla
Inmultirii este plasat butonul cu titlul Verifica. Efectuarea unui click pe suprafaa
acestuia va afia o ntrebare de genul x*y= ?, unde 1<x,y<11. Pentru scrierea
67

rspunsului corect utilizatorul va avea la dispoziie 8 secunde. La urmtoarea


ntrebare, timpul de rspuns este micorat cu 400 milisecunde. Dup expirarea
timpului va fi afiat un mesaj prin care se va indica numrul de rspunsuri corecte.
5. Elaborai o aplicaie care va simula un semafor. Prin intermediul cutiilor de
editare se va introduce timpul pentru modificarea culorilor semaforului. Schimbarea
uneia dintre culori va genera apariia unui mesaj cu titlul corespunztor.
10. Aplicaii cu liste de opiuni i casete combinate
1. Creai aplicaia ar/Capital. ntr-o list cu opiuni se ncarc informaii cu
numele a 5 ri. ntr-o caset combinat se ncarc informaia despre capitalele
acestor ri. Utilizatorul va alege mai nti ara, dup care capitala. La alegerea
capitalei va fi afiat o fereastr n care se va indica, corectitudinea rspunsului.
2. Elaborai o aplicaie care va permite unei persoane s se nregistreze. Forma
va arta n modul urmtor :

Dup selectarea genului, indicarea numelui i alegerea rii se va efectua un


click pe butonul cu titlul Inregistrare. La efectuarea unui click pe suprafaa acestuia
se va afia pe suprafaa formei selecia efectuat.
3. S se elaboreze o aplicaie care determin greutatea ideal a unei persoane
cunoscnd nlimea, vrsta i sexul persoanei. Vrsta i nlimea va fi indicat prin
intermediul componentelor ComboBox, iar sexul va fi indicat prin intermediul
componentei ListBox. Dup indicarea datelor utilizatorul va efectua un click pe
butonul Determina, care va afia un mesaj cu greutatea ideal. Formulele de calcul
sunt:
Gmasculin = 50 + 0.75 * (nlime - 150) + (vrsta - 20) / 4,
Gfeminin = Gmasculin 10.

68

4. Elaborai o aplicaie care va pemite determinarea numerelor prime pe


segmentul [a,b]. Setarea valorilor a i b se va efectua prin intermediul a dou cutii
text. Dup scrierea acestora se va efectua un click pe butonul Setare, valorile din
cadrul acestui segment vor fi scrise ntr-o componet ComboBox. La efectuarea unui
click pe una dintre valori va fi afiat un mesaj n care se va indica dac valoarea
selectat este sau nu numr prim.
5. Creai aplicaia Schimb valutar. Fiierul valuta.in conine cursul valutar
pentru ziua curent n urmtorul format: tip pre_cumparare pre_vnzare. Aplicaia
va arta astfel :

Dup indicarea sumei iniiale i a tipului acesteia se va indica tipul tranzaciei.


Dup efectuarea unui click pe butonul Calcul va fi scris suma final, n dependen
de cursul zilei (din fiierul valuta.in).
6. Creai aplicaia Magazin. Fereastra aplicaiei va arta n modul urmtor:

Utilizatorul va alege produsul, apoi va scrie cantitatea n grame. Prin


intermediul butonului cu titlul Adauga in Cos numele produsului i cantitatea acestuia
vor fi adugate n componenta ListBox. La efectuarea unui click pe butonul cu titlul
Achita se va afia suma ce necesit a fi achitat pentru produsele selectate.
7. Elaborai o aplicaie prin intermediul creia se va modifica forma cursorului,
culoarea formei i stilul marginii ferestrei. Pentru elaborarea aplicaiei pe suprafaa
formei vor fi plasate 3 componente ComboBox. n prima component ComboBox vor
69

fi introduse 5 valori pentru forma cursorului, n a doua component ComboBox vor fi


scrise 5 valori pentru culoarea formei, iar n a treia component 5 valori ale
proprietii BorderStyle. La efectuarea unui click pe una din opiuni se va seta
proprietatea respectiv. Pentru fiecare din componentele ComboBox va fi creat un
meniu de tip TPopupMeniu cu opiunile: adugare i excludere. Prin intermediul
acestui meniu utilizatorul va avea posibilitatea de a aduga valori, respectiv de a
exclude.
8. Creai aplicaia Orarul Leciilor. ntr-o component ComboBox sunt scrise
zilele sptmnii. La efectuarea unui click pe una din zilele sptmnii va fi afiat
orarul leciilor pentru ziua respectiv. n cazul n care nu sunt ore n acea zi, va fi
afiat mesajul Zi libera.
9. Creai aplicaia Divizori. Prin intermediul a dou cutii de editare se citesc
numerele ntregi a i b. n componenta ComboBox se scriu toate numerele de pe
segmentul [a;b]. La efectuarea unui click pe unul dintre numerele din list vor fi
afiai toi divizorii numrului selectat.
10. Elaborai o aplicaie care va permite nregistrarea participanilor la
concursul de Informatic. La concurs particip concureni din Republica Moldova,
Romnia, i Ucraina. Din Republica Moldova vin participani din oraele: Chiinu,
Bli, Orhei, Soroca, Cahul, Edine. Din Romnia vin participani din oraele: Iai,
Vaslui, Suceava, Botoani, Galai. Din Ucraina vin participani din oraele: Odesa,
Donek, Herson, Hotin. Forma aplicaiei va arta n modul urmtor:

La efectuarea unui click pe butonul cu titlul Inregistrare datele despre


concurent vor fi adugate ntr-o component de tip TMemo. Pentru aceasta va fi creat
un meniu de tip TPopupMenu, prin intermediul cruia va fi posibil salvarea datelor
ntr-un fiier, ct i excluderea tuturor datelor despre concureni.

70

11. Componenta StringGrid


1. Creai aplicaia Vector. Prin intermediul unei componente de tip TEdit i
TStringGrid se citesc elementele vectorului. Despre vector se vor afia:
a) Numrul de elemente pare;
b) Numrul de elemente impare;
c) Elementul maxim;
d) Elementul minim;
e) Suma elementelor;
f) Media aritmetic.
2. Elaborai o aplicaie prin intermediul creia elementele unui vector vor fi
sortate cresctor i descresctor.
3. Elaborai o aplicaie care va prelucra elementele unei matrice cu n linii i m
coloane. Valorile n i m vor fi citite prin intermediul a dou componente de tip TEdit.
Elementele matricei se citesc de la tastatur sau se genereaz de ctre calculator.
Dimensiunea matricei se va citi prin intermediul cutiilor de editare. Pe suprafaa
formei vor fi prezentate urmtoarele informaii despre matrice :
a) suma elementelor matricei;
b) elementul maxim;
c) elementul minim;
d) maximele pe linii;
e) maximele pe coloane;
f) minimele pe linii;
g) minimele pe coloane;
h) sumele pe linii;
i) sumele pe coloane;
j) perimtrul matricei.
4. Elaborai o aplicaie care va genera o matrice cu n linii i m coloane.
Elementele matricei vor fi scrise ntr-o component de tip TStringGrid. Valorile n i
m vor fi citite prin intermediul a dou componente de tip TEdit. Pe suprafaa formei
vor fi plasate butoane radio prin intermediul crora vor fi efectuate urmtoarele
operaii :
a) sortarea tuturor elementelor matricei (cresctor sau descresctor);
b) sortarea elementelor matricei pe linii (cresctor sau descresctor);
c) sortarea elementelor matricei pe coloane (cresctor sau descresctor);

71

5. De la tastatur se introduc coeficienii unui sistem de ecuaii liniare de


ordinul 3. Elaborai o aplicaie care va permite determinarea soluiilor acestui sistem.
6. De la tastatur se introduc dimensiunea i elementele a dou matrice
ptratice B i C. Elaborai o aplicaie care va determina elementele matricei A, dac
A=B*C 2*(B+C).
7. Creai aplicaia Tabla nmulirii. De la tastatur se citete numrul
elementelor din tabel. La efectuarea unui click pe butonul cu titlul Calcul va fi afiat
tabelul corespunztor. De exemplu pentru 4 elemente tabelul va arta n modul
urmtor:

8. Creai aplicaia Evidena studenilor. ntr-o component de tip TStringGrid


se introduc datele despre studeni i anume: numele, prenumele, grupa, notele la 5
discipline. Aplicaia va permite ncrcarea acestor date din fiier. Dup indicarea
acestora va fi calculat media pentru fiecare student. Elaborai o aplicaie care va
realiza un meniu cu urmtoarele opiuni:
a) Studentul cu media maxim;
b) Studentul cu media minim;
c) Media general;
d) Procentul notelor de 9 i 10;
e) Procentul notelor mai mici ca 5.
9. Elaborai o aplicaie care va permite nregistrarea participanilor la concursul
de Informatic. La concurs particip concureni din Republica Moldova, Romnia, i
Ucraina. Din Republica Moldova vin participani din oraele: Chiinu, Bli, Orhei,
Soroca, Cahul, Edine. Din Romnia vin participani din oraele: Iai, Vaslui,
Suceava, Botoani, Galai. Din Ucraina vin participani din oraele: Odesa, Donek,
Herson, Hotin. Forma aplicaiei va arta n modul urmtor:

72

La efectuarea unui click pe butonul cu titlul Inregistrare datele despre


concurent vor fi adugate ntr-o component de tip TStringGrid. De asemenea va fi
creat un meniu cu opiunile:
a) Total va afia numrul total de participani;
b) Tari va afia numrul de participani pentru fiecare ar;
c) Oras va afia oraul cu cei mai muli participani, n caz c sunt mai multe
orae, se vor afia denumirile acestora, urmat de numrul de participani.
10. Creai aplicaia Registru electronic. Prin intermediul unei componente
StringGrid se vor introduce datele despre studenii unei grupe. Registrul electronic va
oferi urmtoarele posibiliti:
a) Determinarea mediei pentru fiecare student;
b) Determinarea mediei grupei;
c) Afiarea studenilor neatestai (studenii care au mai mult de 50% de absene),
absena se va nota prin intermediul caracterului a;
d) Afiarea studenilor restanieri;
e) Afiarea studenilor emineni.
12. Aplicaii cu Data Calendaristic
1. Elaborai o aplicaie care va permite afiarea informaiei despre data i
timpul curent. Informaia va fi prezentat conform exemplului:
Vineri 30 octombrie anul 2009 ora 10 si 31 de minute si 14 secunde.
2. Creai aplicaia Alarm. Pe suprafaa formei va fi creat un ceas digital. Prin
intermediul butonul Seteaza, se va introduce timpul pentru alarm. n cazul n care
timpul curent va coincide cu timpul indicat n cazul alarmei, culoarea formei va
73

deveni roie, iar pe suprafaa ei va aprea textul Alarma de culoare neagr cu


mrimea 72pt.
3. Elaborai o aplicaie care va permite nchiderea aplicaiei peste un interval de
timp t. Intervalul de timp se va introduce de la tastatur. Pentru introducerea timpului
vor fi utilizate 3 butoane radio care vor avea posibilitatea de a introduce timpul n
minute, n secunde i n ore.
4. Creai aplicaia Tastare. Pe suprafaa formei vor fi plasate dou butoane cu
titlurile Lanseaza test i Verific test. La efectuarea unui click pe primul buton se for
afia n caractere (vor fi afiate n mod aleator caractere ale alfabetului latin), unde n
se citete de la tastatur. Prin intermediul unei cutii de editare utilizatorul va tasta
caracterele afiate Dup introducerea corect a tuturor caracterelor se va afia timpul
necesar pentru tastarea lor.
5. Creai aplicaia Test. Pe suprafaa formei vor fi plasate dou butoane de
comand cu titlurile respectiv: Lanseaza test i Verific test. La efectuarea unui click
pe primul buton se vor afia 5 ntrebri, fiecare din ele oferind 5 variante de rspuns.
Dup indicarea rspunsurilor se va efectua un click pe butonul cu titlul Verific test.
Efectuarea unui click pe suprafaa acestuia va afia numrul de rspunsuri corecte i
timpul necesar pentru indicarea rspunsurilor.
6. Creai aplicaia Calculator. Prin intermediul acestei aplicaii vor fi efectuate
operaii cu data calendaristic: adunare, scdere, comparaie, transformare (din dat
n zile, saptmni, luni i reciproc).
7. Creai aplicaia Orarul studentului. n dosarul proiectului vor fi create apte
fiiere cu titlurile respectiv: luni.txt, ..., duminica.txt, n fiecare din ele fiind scris
orarul leciilor pentru ziua respectiv. Prin intermediul unei componente de tip
TMonthCalendar utilizatorul va alege o dat. Dup alegerea datei ntr-o component
de tip TMemo se va afia orarul pentru data aleas. Se va ine cont de faptul c n
perioadele 31 decembrie - 15 ianuarie i 24 iunie - 31 august studentul se afl n
vacan, iar n perioada 15 - decembrie 30 decembrie i 1 iunie - 13 iunie studentul se
afl n sesiune.
8. Creai aplicaia Agenda. Utilizatorul va indica data i ora cnd urmeaz a
avea loc un eveniment. Se va permite adugarea a mai multor evenimente. Pe
suprafaa formei se va afia un mesaj corespunztor dac au rmas mai puin de 24
ore pn la evenimentul respectiv.
74

9. Elaborai o aplicaie care va permite utilizatorului s determine zodia n care


s-a nscut i numrul de zile rmase pn la data naterii. Setarea zilei de natere se
va efectua prin intermediul unei componente corespunztoare (TMonthCalendar).
Dup selectarea acesteia utilizatorului i se va afia informaia respectiv.
10. Creai aplicaia Ceas digital. La mijlocul ferestrei va fi afiat un ceas digital
ce indic timpul n formatul ore:min:sec, cu mrimea de 72 pt. Culoarea formei va fi
modificat dintr-o gam de 5 culori la fiecare minut. Prin intermediul unui meniu
utilizatorul va putea seta ora, minutele, respectiv secundele.
13. Aplicaii cu directoare i fiiere
1. Elaborai o aplicaie care va permite crearea a n directoare ntr-un directoriu
indicat. Directoriul va fi indicat prin intermediul unei componente specifice, n caz
particular DirectoryListBox. Valoarea n va fi citit de la tastatur.
2. Elaborai o aplicaie care va permite crearea a n fiiere textuale ntr-un
directoriu indicat. Directoriul va fi indicat prin intermediul unei componente
specifice, n caz particular DirectoryListBox. Valoarea n va fi citit de la tastatur.
Indicaie: se va utiliza funcia FileCreate(nume fiier).
3. Elaborai o aplicaie care va permite afiarea fiierelor dintr-un directoriu
indicat, care au fost create n sptmna curent. Directoriul va fi indicat prin
intermediul unei componente specifice, n caz particular DirectoryListBox.
4. Elaborai o aplicaie care va permite afiarea fiierelor, dintr-un directoriu
indicat, memoria crora nu depete n KB, unde n se citete de la tastatur.
Directoriul va fi indicat prin intermediul unei componente specifice, n caz particular
DirectoryListBox.
5. Elaborai o aplicaie care va informa utilizatorul despre fiierul ales. Prin
intermediul unei componente specifice utilizatorul selecteaz un fiier. Dup
selectarea acestuia utilizatorului i va fi prezentat informaia despre fiierul dat i
anume :
a) timpul crerii FileDateToDateTime(nume_fisier.Time) ;
b) mrimea fiierului;
c) tipul fiierului (ascuns, de sistem, arhivat, obinuit);
d) adresa fiierului.

75

6. Elaborai o aplicaie prin intermediul creia i se va oferi utilizatorului s


navigheze prin directoarele i fiierele stocate pe calculator. La efectuarea unui
double-click pe un fiier cu una dintre extensiile (.txt, .cpp, .h, .pas), coninutul acelui
fiier va fi afiat prin intermediul unei componente de tip TMemo.
7. Elaborai o aplicaie care va permite utilizatorului s selecteze unul sau mai
multe fiiere pentru redenumirea acestora.
8. Creai aplicaia Detalii despre fiiere. Prin intermediul unei componente
DirectoryListBox utilizatorul va selecta un dosar. Dup alegerea dosarului prin
intermediul unei componente de tip TStringGrid se va afia numele fiierelor i
mrimile acestora. De asemenea, se va afia numrul total de fiiere i mrimea total
a acestora.
9. Elaborai o aplicaie care va permite afiarea fiierelor dintr-un directoriu
selectat (se vor utiliza componentele DirectoryListBox, FileListBox). Prin intermediul
a dou cutii de editare se va permite nlocuirea caracterelor din numele fiierului. Nu
se va permite modificarea extensiei fiierului.
10. Elaborai o aplicaie care va permite vizualizarea fiierelor dintr-un
directoriu n perioada de timp a-b, unde a,b sunt de tipul TDateTime. Valorile a i b
se vor citi prin intermediul componentelor de tip TDateTimePicker. Directoriul va fi
indicat prin intermediul componentei de tip TDirectoryListBox. Numele fiierelor vor
fi scrise ntr-o component de tip TStringGrid. Se va afia i data crerii fiierului.
14. Aplicaii diverse
1. Elaborai o aplicaie, prin intermediul creia se va determina costul unei
deplasri cu automobilul. Aplicaia va arta astfel :

76

2. Elaborai o aplicaie prin intermediul creia va fi posibil de calculat preul


unei convorbiri telefonice, dac preul unei convorbiri n reea cost 75 bani/min, cu
alt operator naional cost 1,76 lei/min, iar o convorbire peste hotare cost 2,5
lei/min. Aplicaia va arta astfel :

3. Elaborai o aplicaie care va permite calculul costului total de cazare a unei


persoane la un hotel. Persoana se va nregistra la hotel n baza actului de identitate.
De asemenea se va pstra data nregistrrii. Persoana va achita urmtoarele servicii:
Cazare fiecare tip de camer va avea un anumit cost pentru o zi;
Hrana persoana va avea de ales unul din trei meniuri pentru o zi: econom,
clasic sau lux.
La sfritul perioadei de cazare persoanei i se va calcula suma care trebuie s
fie achitat. Persoana va beneficia de reduceri n urmtoarele cazuri :
a) Perioada de cazare de 4-7 zile ofer o reducere de 3% din suma total;
b) Perioada de cazare de 8-14 zile ofer o reducere de 7% din suma total;
c) Perioada de cazare de 15-30 zile ofer o reducere de 10% din suma total;
d) Perioada de cazare mai mare de 30 zile ofer o reducere de 15% din suma
total.
4. Elaborai o aplicaie prin intermediul creia utilizatorul va avea posibilitatea
de a-i determina plata serviciilor comunale pentru luna curent. Cu ajutorul
aplicaiei se vor determina costul la gaz, ap cald, ap rece i electricitate. Se
recomand a utiliza componenta TabbedNotebook.
5. Creai aplicaia Milionar. Aceast aplicaie va simula jocul Cine vrea s
devin MILIONAR ? Pentru fiecare ntrebare utilizatorul va avea la dispoziie un
minut pentru a da rspunsul corect.

77

6. Creai aplicaia Depozit. Fereastra aplicaiei va arta n modul urmtor:

Utilizatorul va alege produsul, apoi va scrie cantitatea n grame. Prin


intermediul butonului cu titlul Adauga in Cos numele produsului i cantitatea acestuia
vor fi adugate n componenta ListBox. La efectuarea unui click pe butonul cu titlul
Achita se va afia suma ce necesit a fi achitat pentru produsele selectate. Pentru
Componenta ComboBox va fi creat un meniu contextual cu 2 opiuni:
a) adaug pentru adugarea unui produs n depozit ntr-o anumit cantitate;
b) exclude pentru excluderea unui produs din depozit.
Pentru componenta ListBox va fi creat un meniu contextual cu opiunea
exclude, pentru a oferi utilizatorului posibilitatea de a exclude un produs.
7. Elaborai un proiect care va permite vizualizarea imaginilor dintr-un
directoriu indicat. Iniial va permite vizualizarea din directoriul curent, ca ulterior s
permit modificarea acestuia. Aplicaia dat va conine instrumente pentru
mrirea/micorarea imaginilor, ct i pentru a trece la urmtoare/precedenta imagine.
8. Elaborai un proiect care va simula un editor de texte similar aplicaiei
Notepad.
9. Elaborai un proiect care va simula un editor de imagini (similar aplicaiei
Paint). Editorul va conine instrumente specifice pentru desenarea figurilor. De
asemenea va permite ncrcarea i salvarea unei imagini.
10. Creai aplicaia Calculator. Prin intermediul aplicaiei se va oferi
utilizatorului posibilitatea de a efectua:
a) operaii cu numere reale;
b) operaii de conversie dintr-un sistem de numeraie n altul;
c) operaii trigonometrice;
d) operaii logaritmice.

78

11. Elaborai un proiect prin intermediul cruia se vor efectua operaii asupra
tipului de date arbori binari de cutare. n calitate de noduri ale arborelui binar de
cutare vor fi numere ntregi. Prin intermediul unui meniu se vor efectua operaiile:
a) crearea arborelui binar de cutare (ncrcarea datelor din fiier);
b) desenarea arborelui pe suprafaa formei;
c) parcurgerea arborelui prin metodele: inordine, preordine i postordine;
d) cutarea unui nod;
e) inserarea unui nod n arbore;
f) excluderea unui nod din arbore.
12. Elaborai un proiect pentru gestiunea medicamentelor unei farmacii.
Informaiile pentru medicamentele din farmacii sunt: numele medicamentului, pre,
cantitate, data primirii, data expirrii. Evidena medicamentelor se va efectua printr-o
structur de date de tip arbore de cutare. Aplicaia va conine un meniu prin
intermediul cruia se vor efectua urmtoarele operaii:
a) ncrcarea datelor despre medicamente din fiier i prin intermediul unui
formular destinat introducerii datelor;
b) cutarea unui medicament dup nume;
c) afiarea medicamentelor n ordine lexicografic a numelui (va fi utilizat o
component Memo);
d) eliminarea unui medicament prin indicarea numelui acestuia;
e) afiarea medicamentelor care au data de expirare mai mic dect o dat
specificat.
13. Elaborai o aplicaie prin intermediul creia va fi rezolvat jocul SUDOKU.
Prin intermediul componentei StringGrid utilizatorul va introduce numerele n cutie.
Efectuarea unui click pe suprafaa butonului cu titlul Rezolvare, va rezolva jocul.
14. Elaborai aplicaia Operaii cu mulimi. Cu ajutorul a dou componente
StringGrid se citesc elementele a dou mulimi A i B. Prin intermediul unui meniu
utilizatorului i se va oferi posibilitatea de a efectua operaii cu mulimi. Meniul va
conine opiunile:
a) reuniune va afia elementele mulimii A B;
b) intersecie va afia elementele mulimii A B;
c) diferena va afia elementele mulimii A\B;
d) incluziune element va verifica dac un element (va fi introdus prin
intermediul unei cutii de editare) se include n mulimea A;
e) incluziune mulimi va verifica dac mulimea A se include n mulimea B;

79

15. Creai aplicaia Calculator cu numere mari. Prin intermediul aplicaiei se


va oferi utilizatorului posibilitatea de a efectua operaii cu numere ntregi foarte mari
(un numr va conine pn la 255 de cifre). Se vor efectua urmtoarele operaii:
a) operaii aritmetice (suma, diferena, produsul, ctul i restul mpririi) ntre
dou numere foarte mari;
b) operaii de comparaie.
16. Creai aplicaia Matrice cu numere complexe. Prin intermediul aplicaiei se
va oferi utilizatorului posibilitatea de a efectua operaii cu o matrice ptratic
elementele crora sunt numere complexe. Elementele matricei se vor scrie ntr-o
component StringGrid. Utilizatorului i se va oferi posibilitatea de a determina:
a) suma elementelor matricei;
b) maximele pe linii;
c) maximele pe coloane;
d) minimele pe linii;
e) minimele pe coloane;
f) sumele pe linii;
g) sumele pe coloane;
h) perimetrul matricei.
17. Elaborai aplicaia figuri geometrice. Prin intermediul unui formular
utilizatorul va avea posibilitatea a citi date despre urmtoarele figuri geometrice:
cerc, triunghi echilateral, triunghi nscris n cerc. Despre fiecare figur se vor citi
datele despre coordonatele centrului figurii, lungimea razei (laturii) i culoarea. Se va
crea o list care va conine datele despre mai multe figuri. Prin intermediul unui
meniu utilizatorului i se va oferi posibilitile:
a) adugare de figuri noi (cerc, triunghi echilateral, triunghi nscris n cerc);
b) afiare a figurilor;
c) excludere a figurilor.

80

Capitolul III Baze de date


Mediul Borland C++ Builder ofer posibilitatea crerii bazelor de date. Crearea
lor se efectueaz cu ajutorul utilitarelor BDE Administrator (pentru crearea aliasului)
i Database Desktop (pentru crearea tabelelor). Pentru crearea tabelelor va fi utilizat
aliasul BCDEMOS n care vor fi create tabele i interogri.
Probleme rezolvate
Problema1 Magazin
Elaborai o aplicaie prin intermediul creia va fi simulat activitatea unui
magazin. Astfel, se vor efectua operaii de primire a mrfii i de vnzare a acesteia.
Forma aplicaiei va arta n modul urmtor:

Realizare:
Pentru pstrarea datelor despre produsele din magazin vom crea tabelul
produse.db, pe care l vom salva n dosarul curent. Tabelul va avea urmtoarea
structur:

81

Pe suprafaa formei plasm componentele:


Button1 pentru ncrcarea imaginii, n cadrul proprietii Caption scriem textul
Incarca imagine;
Button2 pentru adugarea unui produs n depozit, n cadrul proprietii Caption
scriem textul Adauga in depozit;
Button3 pentru vnzarea unui produs, n cadrul proprietii Caption scriem textul
Vinde produs selectat;
ComboBox1 pentru selectarea produsului;
Edit1 pentru indicarea cantitii;
RadioGroup1 pentru indicarea operaiei ce necesit a fi efectuat, setm
proprietile conform figurii;
OpenPictureDialog pentru ncrcarea imaginii n tabel, setm proprietatea Stretch
la true;
PopupMenu1 crem meniul Adauga produs nou, pentru a oferi posibilitatea de a
aduga produse noi;
Table1 setm proprietatea Active la true;
DataSource1: DataSet=Table1;
DBGrid1: DataSource= DataSource1;
DBNavigator1: DataSource= DataSource1;
DBEdit1: DataSource= DataSource1, DataField=Producator;
DBEdit2: DataSource= DataSource1, DataField=Pret;
DBText1: DataSource= DataSource1, DataField=Cantitate;
DBImage1: DataSource= DataSource1, DataField=Foto;
Declaraii:
int index, tip;
bool ad=true;double suma=0.0;

Prelucrm evenimentul: OnCreate


Button1->Hide();

Prelucrm evenimentul: RadioGroup1Click


tip=RadioGroup1->ItemIndex;
if(tip==1){Button1->Hide();ComboBox1->PopupMenu=NULL;}
else {Button1->Show();ComboBox1->PopupMenu=PopupMenu1;}

Prelucrm evenimentul: FormShow


AnsiString s;Table1->First();
ComboBox1->Clear();
82

while(!Table1->Eof){
s= AnsiString(Table1->FieldValues["Nume produs"]);
ComboBox1->Items->Add(s);
Table1->Next();}

Prelucrm evenimentul: ComboBox1Change


index=ComboBox1->ItemIndex;
Table1->MoveBy(index-1);

Prelucrm evenimentul: Button1Click


OpenPictureDialog1->Execute();
AnsiString nume=OpenPictureDialog1->FileName;
if(nume.Length()>3){
DBImage1->Picture->LoadFromFile(nume);
DBImage1->CopyToClipboard();
DBImage1->PasteFromClipboard();
}

Prelucrm evenimentul: Button2Click


double d;
if(ad){
Table1->MoveBy(index-1);
Table1->Edit();
d=Table1->FieldValues["Cantitate"];
Table1->FieldValues["Cantitate"]= d+Edit1->Text.ToDouble();
}
else{Table1->Edit();
Table1->FieldValues["Cantitate"]=Edit1->Text.ToDouble();
}
Table1->Post();
Edit1->Clear();

Prelucrm evenimentul: Adaugaprodusnou1Click


Table1->Insert();
AnsiString s=InputBox("Adaugare produs","Specificati numele
produsului","");
ComboBox1->Items->Add(s);
Table1->FieldValues["Nume produs"]=s;
ad=false;

Prelucrm evenimentul: Button3Click


double c;
Table1->MoveBy(index-1);
Table1->Edit();
if(Table1->FieldValues["Cantitate"]<Edit1->Text.ToDouble())
Edit1->Text=Table1->FieldValues["Cantitate"];
c=Table1->FieldValues["Cantitate"]-Edit1->Text.ToDouble();
Table1->FieldValues["Cantitate"]=c;
suma=suma+Table1->FieldValues["pret"]*Edit1->Text.ToDouble();
Label6->Caption="Spre achitare:="+AnsiString(suma);
Edit1->Clear(); Table1->First();
while(!Table1->Eof){
if(Table1->FieldValues["Cantitate"]==0) Table1->Delete();
Table1->Next();
}

83

Prelucrm evenimentul: Table1AfterDelete


AnsiString s;
Table1->First();
ComboBox1->Clear();
while(!Table1->Eof){
s=AnsiString(Table1->FieldValues["Nume produs"]);
ComboBox1->Items->Add(s);
Table1->Next();
}

Problema2 Evidena crilor


Elaborai un proiect BCB prin intermediul cruia se va duce evidena crilor
unei biblioteci, dac schema bazei de date are urmtoarea structur:

Realizare:
Creem prin intermediul utilitarului Database Desktop tabelele de mai sus. n cadrul
acestei aplicaii vom utiliza mai multe forme. Pe forma principal plasm
componentele:
ADOConnection1 facem conexiunea cu baza de date i setm proprietatea
Connected cu valoarea true;
ADOTable1 setm urmtoarele proprieti:
Connection= ADOConnection1;
TableName=Carti;
Active=true;
Name=Carti;
Procedm similar i n cazul componentelor ADOTable2, ADOTable3, ADOTable4
modificnd proprietile Name i TableName corespunztor n Autori, Edituri, Limbi;
DataSource1 setm urmtoarele proprieti:
DataSet=Carti, modificm valoarea proprietii Name cu Carte, procedm
similar i n cazul urmtoarelor componente DataSource2, DataSource3,
DataSource4 cu valorile proprietii Name corespunztor Autor, Editura, Limba;
Image1 setm urmtoarele proprieti:
Picture ncrcm o imagine;
84

Stretch=true;
Align=alClient;
ADOQuery1 setm urmtoarele proprieti:
Connection= ADOConnection1;
Name=Query;
Pentru forma principal setm urmtoarele proprieti:
Name=Main;
Align=alClient;
mai adugm n proiect nc 7 forme, modificnd proprietile Name corespunztor:
Ad_autor, Ad_carte, Ad_limba, Ad_editura, Admin, Raport;
Setm Position=poScreenCenter pentru toate formele;
Includem n antetul fiecrui fiier *.cpp fiierele header (unit1.h unit8.h),
dup necesitate;
n fiierul Unit1.h la seciunea public: declarm variabila
AnsiString sql;
Prelucrm evenimentul OnCreate al formei:
sql="SELECT Carti.titlu, Carti.pret, Carti.pagini,Carti.data, Editura.nume,
Autori.nume, Autori.prenume, Limba.limba FROM Autori,Carti,Editura,Limba
WHERE (Carti.id_autor = Autori.id_autor) AND (Editura.id_editura =
Carti.id_editura) AND (Limba.id_limba = Carti.id_limba)";
MainMenu1 meniul va conine urmtoarele opiuni:
Adauga
Cauta
Tipar
Administrare
Carte
Dupa titlu
Toate cartile
Autor
Dupa limba Liste cu autori
Editura
Dupa pret
Limba
Dupa data
Se va plasa componenta PopupMenu1 cu opiunea Adauga autor,
DBLookupComboBox1:
DataSource=Main->Carte; DataField=id_autor; ListSource=Main->Autor;
ListField=nume; KeyField=id_autor;PopupMenu=PopupMenu1;
Se va plasa componenta PopupMenu2 cu opiunea Adauga limba;
DBLookupComboBox2:
DataSource=Main->Carte; DataField=id_limba; ListSource=Main->limba;
ListField=limba; KeyField=id_limba;PopupMenu=PopupMenu2;
Se va plasa componenta PopupMenu3 cu opiunea Adauga editura;
DBLookupComboBox3: DataSource=Main->Carte; DataField=id_editura;
ListSource=Main->editura;ListField=nume;
KeyField=id_editura;PopupMenu=PopupMenu3;
85

DateTimePicker1: - pentru selectarea datei.


FORMULARUL cauta
Pe suprafaa acestei forme vom crea un meniu principal numit Tipar
(componenta MainMenu1), DBNavigator1, DBGrid1. Plasm componenta
TabbedNotebook1 i crem 4 pagini.
Prima pagina cutare dup titlu, vom utiliza componentele: Label1, Edit1,
Button1;

Pagina doi cutare dup limb, vom utiliza componentele: ComboBox1;

Pagina trei cutare dup pre, vom utiliza componentele: RadioGroup1,


Edit2, Button2;

86

Pagina patru cutare dup data publicrii, vom utiliza componentele:


RadioGroup2, DateTimePicker1, BitBtn1;

FORMULARUL Ad_carte

FORMULARUL Ad_autor

Pe suprafaa formei AD_autor plasm componentele:


DBEdit1: DataSource=Main->Autor; DataField=nume;
DBEdit2: DataSource=Main->Autor; DataField=prenume;
DBImage1: DataSource=Main->Autor; DataField=foto;
DBNavigator1:DataSource=Main->Autor;

87

FORMULARUL Ad_limba

Pe suprafaa formei AD_limba plasm componentele:


Label1: Caption=Specificati limba;
DBEdit1: DataSource=Main->Limba; DataField=limba;
DBNavigator1: DataSource=Main->Limba;
FORMULARUL Ad_editura

Pe suprafaa formei Ad_editura plasm componentele:


DBEdit1: DataSource=Main->Editura;DataField=nume;
DBMemo1: DataSource=Main->Editura; DataField=adresa;
DBMemo2: DataSource=Main->Editura; DataField=contact;
DBNavigator1:DataSource=Main->Editura;
Label1, Label2, Label3 corespunztor imaginii
FORMULARUL Administrare

88

Pe suprafaa formei Admin plasm componentele:


RadioGroup1: Columns=3; Caption=Indica numele tabelei;
Items adugm cmpurile corespunztor figurii;
DBNavigator1, DBGrid1
FORMULARUL Raport
Pe forma Raport plasm componenta QuickRep1, modificm proprietatea
Name n Lista_carti. Scriem textul interogrii n cadrul componentei Query de pe
forma principal (n cadrul proprietii SQL scriem interogarea, dup care setm
Active=true;

Quickrep1: Dataset=Main->Query;Bands->HasTitle=true;
Bands->HasColumnHeader=true;
Bands->HasDetail=true;
Pe banda Title plasm componenta QRLabel1 i atribuim proprietii Caption textul
Lista carti;
Procedm similar i n cazul benzii Column Header;Pe banda Detail plasm
componentele:
QRDBText1: Dataset=Main->Query;DataField=titlu;
QRDBText2: Dataset=Main->Query; DataField=limba;
QRDBText3: Dataset=Main->Query; DataField=pagini;
QRDBText4: Dataset=Main->Query; DataField=pret;
QRDBText5: Dataset=Main->Query; DataField=nume;
QRDBText6: Dataset=Main->Query; DataField=editura;
QRDBText7: Dataset=Main->Query; DataField=data.
n cadrul acestei forme urmeaz a fi create mai multe rapoarte, plasm
componenta Quickrep2 pe form, iar pe suprafaa acesteia:

89

Quickrep2: Dataset=Main->Autori, Name=Lista_autori,


Bands->HasTitle=true,
Bands->HasColumnHeader=true, Bands->HasDetail=true;
Pe banda Title plasm componenta QRLabel1 i atribuim proprietii Caption textul
Lista autori;
Procedm similar i n cazul benzii Column Header;
Pe banda Detail plasm componentele:
QRDBText1: Dataset=Main->Autori;DataField=nume;
QRDBText2: Dataset=Main->Autori; DataField=prenume;
QRDImage1: Dataset=Main->Autori; DataField=foto;
Codul surs:
Unit1.cpp fiierul formei principale (Main)
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
#include "Unit4.h"
#include "Unit5.h"
#include "Unit6.h"
#include "Unit7.h"
#include "Unit8.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TMain *Main;
__fastcall TMain::TMain(TComponent* Owner): TForm(Owner){
sql="SELECT Carti.titlu, Carti.pret,Carti.pagini, Carti.data,
Editura.nume, Autori.nume, Autori.prenume, Limba.limba FROM
Autori,Carti,Editura,Limba WHERE (Carti.id_autor =
Autori.id_autor) AND (Editura.id_editura = Carti.id_editura) AND
(Limba.id_limba = Carti.id_limba)";
}
void __fastcall TMain::Carte1Click(TObject *Sender){
Ad_carte->Show();}
90

void __fastcall TMain::Editura1Click(TObject *Sender){


Ad_editura->Show();}
void __fastcall TMain::Autor1Click(TObject *Sender){
Ad_autor->Show();}
void __fastcall TMain::Limba1Click(TObject *Sender){
Ad_limba->Show();}
void __fastcall TMain::Vizualizare1Click(TObject *Sender){
Admin->Show();}
void __fastcall TMain::Dupatitlu1Click(TObject *Sender){
Cauta->Show();
Cauta->TabbedNotebook1->PageIndex=0;
}
void __fastcall TMain::Dupalimba1Click(TObject *Sender){
Cauta->Show();
Cauta->TabbedNotebook1->PageIndex=1;
}
void __fastcall TMain::Dupapret1Click(TObject *Sender){
Cauta->Show();
Cauta->TabbedNotebook1->PageIndex=2;
}
void __fastcall TMain::Cautadupadata1Click(TObject *Sender){
Cauta->Show();
Cauta->TabbedNotebook1->PageIndex=3;
}
void __fastcall TMain::Toatecartile1Click(TObject *Sender){
Query1->Close(); Query1->SQL->Text=sql;
Query1->Open();Raport->Lista_carti->Preview();
}
void __fastcall TMain::Listadeautori1Click(TObject *Sender){
Raport->Lista_autori->Preview();}

Unit2.cpp fiierul formularului Adaug carte


#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
#include "Unit4.h"
#include "Unit5.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TAd_carte *Ad_carte;
__fastcall TAd_carte::TAd_carte(TComponent* Owner):TForm(Owner){}
void __fastcall TAd_carte::DateTimePicker1Change(TObject *Sender){
Main->Carti->FieldValues["data"]=DateTimePicker1->Date;
}
void __fastcall TAd_carte::Adaugaautor1Click(TObject *Sender){
Ad_autor->Show();
}
void __fastcall TAd_carte::
Adaugaeditura1Click(TObject *Sender){
Ad_editura->Show();
}
void __fastcall TAd_carte::Adaugalimba1Click(TObject *Sender){
Ad_limba->Show();
}
91

Unit3.cpp fiierul formularului Adaug autor


#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
#include "Unit4.h"
#include "Unit5.h"
TAd_autor *Ad_autor;
__fastcall TAd_autor::TAd_autor(TComponent* Owner): TForm(Owner){}
void __fastcall TAd_autor::Label3Click(TObject *Sender){
OpenPictureDialog1->Execute();
AnsiString s=OpenPictureDialog1->FileName;
if(s.Length()>1){
DBImage1->Picture->LoadFromFile(s);
DBImage1->CopyToClipboard();
DBImage1->PasteFromClipboard();
}
}
void __fastcall TAd_autor::DBImage1Click(TObject *Sender){
Label3Click(Sender);
}

Unit4.cpp fiierul formularului Adaug editur


#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit2.h"
#include "Unit3.h"
#include "Unit4.h"
#include "Unit5.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TAd_editura *Ad_editura;
__fastcall TAd_editura::TAd_editura(TComponent* Owner):
TForm(Owner){}

Unit5.cpp fiierul formularului Adaug limba


#include "Unit2.h"
#include "Unit3.h"
#include "Unit4.h"
#include "Unit5.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TAd_limba *Ad_limba;
__fastcall TAd_limba::TAd_limba(TComponent* Owner):TForm(Owner){}

Unit6.cpp fiierul formularului Caut


#include
#include
#include
#include
#include

"Unit1.h"
"Unit2.h"
"Unit3.h"
"Unit4.h"
"Unit5.h"
92

#include "Unit6.h"
#include "Unit8.h"
TCauta *Cauta;
TDateTime d;int nr;
void __fastcall TCauta::Button2Click(TObject *Sender){
AnsiString s[10];double q;
s[0]=Main->sql+"AND (Carti.pret <:a)";
s[1]=Main->sql+"AND (Carti.pret >:a)";
s[2]=Main->sql+"AND (Carti.pret = :a)";
Main->Query1->Close();
Main->Query1->SQL->Text=s[nr];
q=Edit2->Text.ToDouble();
Main->Query1->ParamByName("a")->AsFloat=q;
Main->Query1->Open();
}
void __fastcall TCauta::RadioGroup1Click(TObject *Sender){
nr=RadioGroup1->ItemIndex;
}
void __fastcall TCauta::FormShow(TObject *Sender){
AnsiString s;
ComboBox1->Clear();
Main->Limba->First();
while(!Main->Limba->Eof){
s= AnsiString(Main->Limba->FieldValues["Limba"]);
ComboBox1->Items->Add(s);
Main->Limba->Next();
}
}
void __fastcall TCauta::Button1Click(TObject *Sender){
Main->Query1->Close();
Main->Query1->SQL->Text=Main->sql+"AND (Carti.titlu like :a)";
Main->Query1->ParamByName("a")->AsString="%"+Edit1->Text+"%";
Main->Query1->Open();
}
void __fastcall TCauta::Edit1Change(TObject *Sender){
Button1Click(Sender);}
void __fastcall TCauta::ComboBox1Change(TObject *Sender){
Main->Query1->Close();
Main->Query1->SQL->Text=Main->sql+"AND (Limba.limba like :a)";
Main->Query1->ParamByName("a")->AsString="%"+
ComboBox1->Items->Strings[ComboBox1->ItemIndex]+"%";
Main->Query1->Open();
}
void __fastcall TCauta::BitBtn1Click(TObject *Sender){
AnsiString s[10];
s[0]=Main->sql+"AND (Carti.data <=:a)";
s[1]=Main->sql+"AND (Carti.pret >=:a)";
s[2]=Main->sql+"AND (Carti.pret = :a)";
Main->Query1->Close();
Main->Query1->SQL->Text=s[nr];
Main->Query1->ParamByName("a")->AsDateTime=d;
Main->Query1->Open();
}
void __fastcall TCauta::DateTimePicker1Change(TObject *Sender){
93

d=DateTimePicker1->DateTime;}
void __fastcall TCauta::RadioGroup2Click(TObject *Sender){
nr=RadioGroup2->ItemIndex;
}
void __fastcall TCauta::Tipar1Click(TObject *Sender){
Raport->Lista_carti->Preview();
}

Unit7.cpp fiierul formularului Administrare


#include "Unit7.h"
#include "Unit1.h"
TAdmin *Admin;
__fastcall TAdmin::TAdmin(TComponent* Owner):TForm(Owner){}
void __fastcall TAdmin::RadioGroup1Click(TObject *Sender){
int n=RadioGroup1->ItemIndex;
switch(n){
case 0: DBGrid1->DataSource=Main->Carte;
DBNavigator1->DataSource=Main->Carte;break;
case 1: DBGrid1->DataSource=Main->Autor;
DBNavigator1->DataSource=Main->Autor;break;
case 2: DBGrid1->DataSource=Main->Editure;
DBNavigator1->DataSource=Main->Editure;break;
case 3: DBGrid1->DataSource=Main->Limbi;
DBNavigator1->DataSource=Main->Limbi;break;
case 4: Main->Query1->Close();
Main->Query1->SQL->Text=Main->sql;
Main->Query1->Open();
DBGrid1->DataSource=Main->Interogare;
DBNavigator1->DataSource=Main->Interogare;
break;
}
}

Unit8.cpp fiierul pentru formularul destinat rapoartelor


#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include "Unit8.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TRaport *Raport;
__fastcall TRaport::TRaport(TComponent* Owner):TForm(Owner){}

94

Probleme pentru rezolvare independent

1. Utilitarul Database Desktop


1. Creai tabelul tari.db cu urmtoarele cmpuri :

a) Setai proprietile cmpurilor astfel nct s nu fie posibil introducerea


valorilor negative n cmpurile cu valori numerice, iar valoarea implicit a lor
s fie 0.
b) Introducei 10 nregistrri i salvai tabelul.
c) n baza tabelului tari.db creai tabelul orase.db cu urmtoarele proprieti

d) Introducei 10 nregistrri i salvai tabelul.


2. n baza tabelelor create s se creeze fiiere sql care vor conine urmtoarele
interogri:
a) interog1 va afia din tabelul tari toate cmpurile;
b) interog2 va afia din tabelul tari cmpurile Nume, Suprafata i Populatie, unde
Suprafata>2000;
c) interog3 va afia din tabelele tari i orase nregistrrile unde cmpul Suprafata
este cuprins ntre 1000 i 10000.
3. n baza tabelului tari.db, s se creeze fiiere sql care vor conine urmtoarele
interogri:
a) interog1 va afia numele rii i densitatea populaiei acesteia;
b) interog2 va afia numele rii cu densitatea populaiei maxim;
c) interog3 va afia numele rii cu densitatea populaiei minim;

95

4. Creai tabelul angajati.db cu urmtoarele cmpuri :

a) Setai proprietile cmpurilor astfel nct s nu fie posibil introducerea


valorilor negative n cmpurile cu valori numerice, iar valoarea implicit a lor
s fie 0.
b) Introducei 20 de nregistrri i salvai tabelul.
5. Creai dou fiiere sql n baza tabelului angajati.db, care va permite afiarea
urtoarele date:
a) Cmpurile Nume, Prenume, Salariu, unde Salariu >1500. Datele vor fi afiate
descresctor dup salariu;
b) Lista angajailor cu o vechime n munc mai mare dect 5 ani, din data curent.
Se vor afia cmpurile ID, Nume, Prenume, Data_angajarii, unde Salariu mai
mic dect1500. Datele vor fi afiate descresctor corespunztor stagiului de munc.
2. Aplicaii cu Tabele
1. Elaborai o aplicaie care va permite afiarea datelor din tabelele tari.db,
orae.db, angajati.db. Numele tabelelor vor fi scrise ntr-o lista cu opiuni
(ComboBox). La selectarea uneia dintre opiuni se va afia pe suprafaa formei
tabelul cu datele respective. La elaborarea aplicaiei se va utiliza cte o singur
componet de tipul : TTable, TDataSource, TDBGrid.
2. Elaborai o aplicaie care va afia ntr-o component de tip TDBGrid
urmtoarele coloane din tabelul angajai.db a aliasului BCDEMOS:
a) coloana Nume, fonul de culoare roie, culoarea textului de culoare alb, limea
80;
b) coloana Prenume, fonul de culoare galben, culoarea textului de culoare verde,
limea 50;
c) coloana Telefon, fonul de culoare verde, culoarea textului de culoare alb,
limea 60;
d) coloana Data_angajarii, fonul de culoare roie, culoarea textului de culoare
alb, limea 50;
e) coloana salariu, fonul de culoare roie, culoarea textului de culoare alb,
limea 50.
96

3. Elaborai o aplicaie care n baza datelor din tabelul angajati.db, va permite


afiarea banilor cheltuii pentru salarizare timp de un an. Anul se va indica prin
intermediul unei componente de tip TComboBox. Dup selectarea anului prin
intermediul unei componente de tip TLabel va fi afiat suma de bani.
4. Elaborai o aplicaie care n baza datelor din tabelul angajati.db va permite
afiarea:
a) celui mai tnr angajat (numele, prenumele, data naterii);
b) angajatul cu salariu maxim (numele, prenumele, salariul);
c) angajatul cu salariu minim (numele, prenumele, salariul);
d) numrul de salariai al cror salariu depete salariul mediu.
5. Creai o copie a tabelului angajati.db. Redenumii tabelul n salariati.db. n
baza acestui tabel, elaborai o aplicaie care va permite majorarea salariului cu 15%,
20%, 25% 50%. Procentul de majorare a salariului va fi indicat prin intermediul
componentelor de tip TRadioGroup. Se va permite doar o singur majorare.
6. Creai o copie a tabelului angajati.db. Redenumii tabelul n salariati.db. n
baza acestui tabel, elaborai o aplicaie care va permite excluderea a maximum 15
angajai. Se vor exclude angajaii cu cel mai mare salariu. Numrul de angajai care
urmeaz a fi exclus va fi indicat prin intermediul unei componente de tip
TComboBox. Se va permite excluderea repetat doar dac numrul total de angajai
ce au fost exclui sau urmeaz a fi exclui nu este mai mic ca 15.
7. Creai o copie a tabelului angajati.db. Redenumii tabelul n salariati.db. n
baza acestui tabel elaborai o aplicaie care va permite adugarea de noi angajai. Pe
suprafaa formei se va afia:
a) numrul total de angajai;
b) numele i salariul angajatului cu cel mai mare salariu;
c) numele i salariul angajatului cu cel mai mic salariu;
d) salariul mediu caracteristic tuturor angajailor.
8 Creai tabelul salariati.db, n baza tabelului angajati.db utiliznd utilitarul
Database Desktop. Elaborai o aplicaie prin intemediul creia din tabelul angajati.db
vor fi copiai n tabelul salariati.db 5 angajai cu cel mai mare salariu i 5 angajai cu
cel mai mic salariu.
9. Elaborai o aplicaie care n baza datelor din tabelul angajati.db va permite
cutarea unui salariat dup nume. Numele va fi introdus de ctre utilizator prin
97

intermediul unei componente de tip TEdit. Dac n tabel va exista o persoan cu


numele introdus se va afia un mesaj corespunztor. Utilizatorului i se va oferi
posibilitatea de a modifica propriul nume.
10. S se creeze tabelul studenti.db cu cmpurile nume, prenume, grupa, anul,
media, bursa. De completat toate cmpurile cu date cu excepia Cmpului bursa. Se
vor introduce cel puin 20 de nregistrri. Prin intermediul cutiilor de editare de tip
TEdit se vor introduce numrul maxim de studeni care pot avea burs de gradul 1
(500 lei), 2 (400 lei) i 3 (300 lei) ct i media minim a notelor pentru fiecare
categorie. Prin intermediul butonului bursa se va completa Cmpul bursa
corespunztor.
11. Utiliznd tabelul studenti.db creat n exemplul 10, Creai tabelul bursieri.db
i prin intermediul butonul completare, s se completeze tabelul bursieri cu datele
corespunztoare.
12. Utiliznd tabelul studenti.db creat n exemplul 10, Creai tabelul
grupa_mea.db n care se vor scrie studenii grupei din care suntei. Scrierea datelor se
va efectua prin intermediul butonului completare.
13. Utiliznd tabelul studenti.db creat n exemplul 10, Creai tabelul stud_18.db
n care se vor scrie toi studeni cu vrsta de 18 ani. Scrierea datelor se va efectua prin
intermediul butonului completare.
14. Elaborai o aplicaie prin intermediul creia se va crea un formular de
vizualizare a datelor tabelului tari.db. Se recomand ca formularul s fie de
urmtoarea form:

15. Creai o aplicaie prin intermediul creia se va oferi posibilitatea


utilizatorului de a vizualiza toate datele din tabelul tari.db, ct i efectuarea operaiilor
de adugare, eliminare i modificare a unei nregistrri (formularul nu va conine
componente de tip TDBGrid). Vor fi create dou diagrame (una dreptunghiular, iar
98

alta circular). Diagramele vor fi create n baza datelor din cmpurile Suprafata i
Populatie.
16. Elaborai o aplicaie ar-Capital. ntr-o component de tip TComboBox
se vor scrie numele rilor din tabelul tari.db. Pe suprafaa formei va fi plasat o
component de tip TRadioGroup. n cadrul acestei componente vor fi scrise 4 nume
de orae (dintre care unul este capitala rii selectate). La efectuarea unui click pe una
dintre opiuni va fi afiat un mesaj cu indicarea corectitudinii rspunsului. Verificarea
rspunsului se va efectua n baza datelor din tabelul tari.db.
17. Elaborai o aplicaie care va permite nregistrarea participanilor la
concursul de Informatic. La concurs particip concureni din Republica Moldova,
Romnia i Ucraina. Din Republica Moldova vin participani din oraele: Chiinu,
Bli, Orhei, Soroca, Cahul, Edine. Din Romnia vin participani din oraele: Iai,
Vaslui, Suceava, Botoani, Galai. Din Ucraina vin participani din oraele: Odesa,
Donek, Herson, Hotin. Datele despre participani se vor salva n tabelul
concurenti.db. Tabelul va conine urmtoarele cmpuri:
Nume cimp
nume
prenume
data nasterii
tara
orasul

tipul
String
String
Data
String
String

Despre fiecare cmp


Utilizatorul va scrie numele (DBEdit)
Utilizatorul va scrie prenumele (DBEdit)
Utilizatorul va alege data naterii (DateTimePicker)
Utilizatorul va alege ara (DBListBox)
Utilizatorul va alege ara (DBComboBox)

Datele despre participani vor fi afiate prin intermediul componentei de tipul


TDBGrid, iar prin intermediul unui meniu se va afia:
a) numrul total de participani;
b) numrul de participani pentru fiecare ar.
18. Elaborai un proiect prin intermediul cruia se va efectua o eviden a
studenilor n baza urmtoarei relaii:

99

Pentru acest proiect vor fi elaborate urmtoarele formulare:


a) Formular de adugare prin intermediul acestuia se vor introduce datele
despre studeni n baza relaiei de mai sus. Cmpul bursa se va completa
automat la introducerea valorilor n Cmpul media n modul urmtor:
Dac media 7.5 n Cmpul bursa se va scrie valoarea 0;
Dac 7.5 < media 8.5 n Cmpul bursa se va scrie valoarea 500;
Dac 8.5 < media 9.5 n Cmpul bursa se va scrie valoarea 800;
Dac 9.5 < media n Cmpul bursa se va scrie valoarea 1000.
b) Formular de vizualizare (acest formular nu va conine componente de tipul
TDBGrid) prin intermediul acestuia se vor afia:
Datele despre toi studenii;
Numrul de studeni bursieri i suma de bani ce necesit a fi achitat
pentru bursa acestora;
Cel mai bun student;
Numrul de studeni cu media mai mic ca 5;
Afiarea numrului de studeni pentru fiecare secie.
c) Formular de excludere prin intermediul acestuia se va permite:
Excluderea unui student;
Excluderea unei secii (excluderea unei secii, presupune excluderea
tuturor studenilor din secia respectiv).
d) Formular pentru efectuarea de operaii prin intermediul acestuia se va
permite:
Modificarea datelor personale despre student (nume, prenume, secia,
media. Modificarea mediei presupune i modificarea Cmpului bursa, n baza
punctului a);
Modificarea datelor tabelului sectie;
Transferarea unui student de la o secie la alta.
n cadrul proiectului vor fi introduse minim 15 nregistrri.
19. Elaborai un proiect prin intermediul cruia se va efectua o eviden a
crilor n baza urmtoarei relaii:

Pentru acest proiect vor fi elaborate urmtoarele formulare:


100

a) Formular de adugare prin intermediul acestuia se vor introduce datele


despre cri n baza relaiei de mai sus.
b) Formular de vizualizare (acest formular nu vor conine componente de tipul
TDBGrid) prin intermediul acestuia se vor afia:
Datele despre toate crile, despre toi autorii;
Autorul cu cele mai multe cri;
Cartea cea mai scump;
Numrul de cri cu o vechime mai mare de 10 ani.
c) Formular de excludere prin intermediul acestuia se va permite:
Excluderea unei cri;
Excluderea unui autor (excluderea unui autor presupune excluderea tuturor
crilor unde figureaz autorul dat);
Excluderea unei limbi (excluderea unei limbi presupune excluderea tuturor
crilor unde figureaz limba dat).
d) Formular pentru efectuarea de operaii prin intermediul acestuia se va
permite:
Modificarea datelor despre o carte;
Modificarea datelor unui autor;
Modificarea limbii de ediie a unei cri.
n cadrul proiectului vor fi introduse minim 15 nregistrri.
20. Elaborai un proiect prin intermediul cruia se va efectua o eviden a
automobilelor n baza urmtoarei relaii:

Pentru acest proiect vor fi elaborate urmtoarele formulare:


a) Formular de adugare prin intermediul acestuia se vor introduce datele
despre automobile n baza relaiei de mai sus.
b) Formular de vizualizare (aceste formulare nu vor conine componente de tipul
TDBGrid) prin intermediul acestuia se vor afia:
Datele despre toate automobilele;
Automobilul cel mai scump;
Numrul de automobile cu o vechime nu mai mare de 5 ani.
101

c) Formular de excludere prin intermediul acestuia se va permite:


Excluderea unui automobil;
Excluderea unei mrci (excluderea unei mrci presupune excluderea
tuturor automobilelor de marca respectiv);
Excluderea unui tip (excluderea unui tip presupune excluderea tuturor
automobilelor de tipul respectiv).
d) Formular pentru efectuarea de operaii prin intermediul acestuia se va
permite:
Modificarea datelor despre un automobil;
Modificarea mrcii unui automobil;
Modificarea tipului.
n cadrul proiectului vor fi introduse minim 15 nregistrri.
3. Aplicaii cu Interogri
1. Elaborai o aplicaie cu interogri n baza tabelului tari.db. Se vor afia:
a) Toate cmpurile;
b) Cmpurile Nume, Suprafata i Populatie, unde Suprafata>2000;
c) nregistrrile unde densitatea populaiei este mai mare dect 100.
2. Elaborai o aplicaie cu interogri n baza tabelului angajati.db, care va
permite afiarea urmtoarelor date:
a) Cmpurile Nume, Prenume, Salariu, unde Salariu >2500. Datele s fie aranjate
dup Cmpul Nume;
b) Cmpurile Nume, Prenume, Salariu, unde Salariu <2500. Datele s fie aranjate
dup Cmpul Salariu;
c) Cmpurile Nume, Prenume, Salariu, unde numele conine unul dintre
caracterele i sau a.
ntr-o component RadioGroup vor fi afiate aceste trei opiuni. La efectuarea
unui click pe una dintre opiuni, informaia se va afia ntr-o component DBGrid.
3. Elaborai o aplicaie prin intermediul creia vor fi afiate numai nregistrrile
tabelului tari.db, unde numele rii ncepe cu /conine un caracter selectat. Caracterul
va fi selectat prin intermediul unei componente de tip TComboBox, care va conine
toate caracterele alfabetului englez.
4. Elaborai o aplicaie prin intermediul creia se va permite alegerea
coloanelor tabelului tari.db. Pentru indicarea acestora se va utiliza cte un buton de
tip TCheckBox. Dac acesta va fi bifat, atunci datele Cmpului corespunztor se vor
102

afia, n caz contrar nu se vor afia. Datele vor fi afiate prin intermediul unei
componente de tip DBGrid i sortate dup ultimul cmp selectat.
5. Elaborai o aplicaie n baza tabelului angajati.db, prin intermediul creia se
vor afia:
a) nregistrrile unde Cmpul Salariu [a,b];
b) Salariul maxim pentru nregistrrile cu cmpul Salariu [a,b];
c) Salariul minim pentru nregistrrile cu cmpul Salariu [a,b];
d) Salariul mediu pentru nregistrrile cu cmpul Salariu [a,b];
e) Numrul de nregistrri cu cmpul Salariu [a,b].
Valorile a i b vor fi introduse de la tastatur prin intermediul a dou cutii de editare.
6. Elaborai o aplicaie n baza tabelului angajati.db, prin intermediul creia se
vor afia:
a) nregistrrile pentru care cmpul Salariu are valoare maxim;
b) nregistrrile pentru care cmpul Salariu are valoare minim;
c) nregistrrile pentru care cmpul Salariu [salariu mediu-a, salariu mediu+a];
d) Numrul de nregistrri, pentru care cmpul Salariu [salariu mediu-a, salariu
mediu+a], iar cmpul Nume conine un caracter selectat prin intermediul unei
componente de tip TComboBox (itemii creia sunt toate caracterele alfabetului
englez);
Parametrul a va fi citit de la tastatur prin intermediul unei cutii de editare.
7. Creai o copie a tabelului angajati.db. Redenumii tabelul n salariati.db. n
baza acestui tabel elaborai o aplicaie prin intermediul creia:
a) vor fi majorate valorile cmpului salariu cu 10%, 25%, 35%, procentul va fi
ales prin intermediul unei componente de tip TRadioGroup;
b) vor fi majorate valorile cmpului salariu cu 30% pentru nregistrrile unde
cmpul salariu are o valoare mai mic dect valoarea medie;
c) vor fi reduse valorile cmpului salariu cu 15% pentru nregistrrile unde
cmpul salariu are o valoare mai mare ca valoare medie;
d) se va dubla valoarea cmpului salariu de valoare minim;
e) se va reduce valoarea cmpului salariu de valoare maxim cu 50%;
f) se va exclude nregistrarea unde Cmpul salariu are valoare maxim;
g) se va exclude nregistrarea unde Cmpul salariu are valoare minim.
nainte i dup fiecare operaie vor fi afiate toate nregistrrile tabelului salariati.db.

103

8. Creai tabelul salariati.db cu urmtoarea structur:

Elaborai o aplicaie cu ajutorul creia se vor insera nregistrri n tabelul


angajati. Se va oferi utilizatorului posibilitatea de a selecta cmpurile n care se vor
insera date (prin intermediul a 4 componente de tip TCheckBox). Pe suprafaa formei
va fi plasat un buton de comand cu titlul Exclude, la acionarea acestuia vor fi
excluse toate nregistrrile din tabelul salariati.db.
9. Creai o copie a tabelului angajati.db. Redenumii tabelul n salariati.db. n
baza acestor tabele elaborai o aplicaie prin intermediul creia vor fi efectuate
urmtoarele operaii:
1. excluderea tuturor datelor din tabelul salariati.db;
2. inserarea nregistrrilor din tabelul angajati.db n tabelul salariati.db unde:
a). valoarea cmpului Salariu are valoare maxim;
b). valoarea cmpului Salariu are valoare minim;
c). valoarea cmpului Salariu [salariu mediu-a, salariu mediu+a],
parametrul a se citete de la tastatur prin intermediul unei cutii de editare;
d). valoarea cmpului Nume conine caracterele x, y (x i y sunt caractere ale
alfabetului latin), valorile acestora se citesc de la tastatur;
e). valoarea cmpului Data_angajarii este maxim;
f). valoarea cmpului Data_angajarii este minim.
10. Creai o copie a tabelului angajati.db. Redenumii tabelul n salariati.db. n
baza acestui tabel elaborai o aplicaie prin intermediul careia se vor determina:
K1 =

min max
* count ([ avg a, avg a ])
avg

K2 =

sum
* count ([max a, max]) , dac
avg * min

min - valoarea minim a cmpului Salariu;


max - valoarea maxim a cmpului Salariu;
a un parametru ce se citete de la tastatur;
avg - valoarea medie a salariilor;
count - numrul de nregistrri cu valoarea cmpului Salariu n intervalul dat;
sum - suma tuturor valorilor cmpului Salariu.
Dup determinarea coeficienilor K1 i K2 majorai datele cmpului Salariu dup
104

formula:

max
2
avg

min
Salariu=Salariu+

Calculai coeficienii K1 i K2 dup majorare i afiai rapoartele dintre vechile


i noile valori ale coeficienilor K1 i K2.
La realizarea aplicaiei nu vor fi utilizate componente de tip TTable, numrul
de parcurgeri ale tabelului salariati.db va fi minim.
4. Rapoarte
1. Elaborai o aplicaie prin intermediul creia va fi creat un raport pentru toate
cmpurile tabelului tari.db. Pagina raportului va avea urmtoarele dimensiunea A4 i
orientarea Landscape.
2. Elaborai o aplicaie prin intermediul creia va fi creat un raport pentru
cmpurile Nume, Prenume i Salariu ale tabelului anagajati.db. Pe pagina raportului
va fi creat o diagram pentru cmpurile respective.
3. Elaborai o aplicaie n baza tabelei angajati.db, prin intermediul creia se va
crea un raport care va afia:
a) nregistrrile unde Cmpul Salariu [a,b];
b) nregistrrile unde Cmpul Salariu [salariu mediu-a, salariu mediu+a];
c) nregistrrile unde angajaii au un stagiu de munc nu mai mic de 5 ani.
Valorile a i b vor fi introduse de la tastatur prin intermediul a dou cutii de editare.
4. Elaborai o aplicaie prin intermediul creia vor fi elaborate rapoarte pentru
fiecare dintre tabelele bazei de date cu urmtoarea structur:

Va fi elaborat un raport prin intermediul cruia vor fi afiate cmpurile din


toate tabelele cu excepia: automobil.foto, automobil.id_tip, automobil.id_marca,
marca.id_marca, tip.id_tip.
105

5. Elaborai o aplicaie prin intermediul creia va fi creat un raport care va


conine orarul leciilor pentru sptmna curent. n orar se va specifica: ziua, data,
lecia, profesorul, sala de studii.
5. Tehnologia ADO
Microsoft ADO (ActiveX Data Objects) asigur acces aplicaiilor client la date.
Pentru implementarea modelului ADO Borland C++ Builder ofer paleta de
componente ADO, cu ajutorul creia se poate realiza conectarea la sursele de date
suportate de ADO.
Considerm baza de date Biblioteca.mdb salvat n mapa My Documents, cu
urmtoarea structur:

1. Se va oferi posibilitatea de a afia informaia din fiecare tabel al bazei de


date. La elaborarea aplicaiei se va utiliza cte o singur component de tipul:
TADOTable, TDataSource, TDBGrid.
2. Elaborai o aplicaie care va permite afiarea urmtoarelor informaii din
baza de date:
a) va afia informaia din tabelul autori;
b) va afia informaia din tabelul cititori;
c) din tabelul atribute va afia datele urmtoarelor cmpuri: DenCarte, AnEd,
NumPag;
d) din tabelele atribute, tari va afia datele din cmpurile: DenCarte, DenTara,
pret, AnEd;
e) va determina numrul cititorilor cu studii : medii, super, medsp; din tabelele
106

atribute, limbi, tematici va afia datele din cmpurile : DenCarte, DenTem,


DenLimba, pret;
f) va determina numrul crilor cu preul mai mic ca 50, numrul crilor cu
preul ntre 50 i 100, numrul crilor cu preul mai mare ca 100;
g) ntr-o component ComboBox se vor introduce numele fiecrui autor. La
efectuarea unui click pe numele unui autor se vor afia crile n care figureaz
autorul dat i anume cmpurile: DenCarte i pret;
h) ntr-o component ComboBox se vor introduce toate datele din Cmpul
DenLimba din tabelul limbi. Alegerea uneia dintre opiuni va afia datele
despre crile cu caracteristica aleas i anume cmpurile: DenCarte i AnEd.
3. Elaborai o aplicaie care va mri preul unei cri n modul urmtor: dac
numrul de pagini este mai mic ca 100 atunci preul crii se va majora cu 25%, dac
numrul de pagini este mai mare sau egal cu 100, atunci preul acesteia se va majora
cu 15 %. Elaborai un raport n care se va prezenta informaia despre cmpurile
DenCarte, NumeAutor, PrenumeAutor, NumPag, pret. Restabilii preurile.
4. Elaborai o aplicaie prin intermediul creia vor fi afiate urmtoarele
rapoarte:
a) tabelul autori;
b) tabelul tari;
c) tabelul cititori;
d) cmpurile: DenCarte, DenTem, DenLimba, NumeAutor.
5. Elaborai o aplicaie care ar permite efectuarea operaiei de cutare, pentru
urmtoarele cazuri:
a) afiarea crilor dup numele i prenumele autorului;
b) afiarea crilor dup ara n care a fost editat;
c) afiarea crilor dup tematic;
d) afiarea crilor dup pre;
e) afiarea crilor dup starea acestora.
6. Elaborai o aplicaie care la selectarea numelui i prenumelui cititorului va
afia cartea mprumutat i data cnd aceasta va fi restituit.
6. Proiecte pentru gestiunea bazelor de date
Pentru urmtoarele cazuri elaborai un proiect care va permite prelucrarea bazei
de date:
107

1. Depozit de automobile

2. Magazin de calculatoare

3. Salon de telefoane mobile

108

4. Depozit de produse

5. Rezervri la hotel

109

6. Angajai

7. Servicii de telefonie mobil

Cerine fa de proiect:
a) Formularul ferestrei principale;
b) Formulare de adugare (pentru fiecare tabel cte un formular);
c) Formulare pentru cutarea datelor (6 cutri);
d) Vizualizarea tuturor nregistrrilor i vizualizarea datelor pentru fiecare tabel;
e) Crearea rapoartelor (minim 5 rapoarte);
f) Oferirea unei interfee simple i comode pentru utilizatorii BD;
g) Introducerea a minim 30 de nregistrri cu date corecte;
h) * Selectarea bazei de date n timpul execuiei.
110

Bibliografie
1. Braicov Andrei Borland Delphi Ghid de Iniiere. Tipografia central
2009
2. Braicov Andrei, Gncu Silviu C++ Builder Ghid de Iniiere. Tipografia
central 2009
3. Culea, George. Gbureanu, Ctlin. (2007) Programarea orientat pe
obiecte - Note de curs ndrumar de laborator, Bacu, Editura: Alma Mater
4. Grady
Booch.
Object-Oriented
Design
with
Applications.
Benjamin/Cummings, Redwood City, California, 2nd edition, 1994
5. Mihai Oltean, Crina Groan, Programare n C++ Builder. Editura
albastr, Cluj-Napoca 2008
6. Mulea Ionu Iniiere n C++ Programarea orientat pe obiecte. ClujNapoca 1993
7. Somnea, D., Turturea, D., Iniiere n C++ - Programarea orientat pe
obiecte, Editura Tehnic, Bucureti, 1993
8. Stroustrup Bjarne The C++ Programming Language 3rd. ed.,
Copyright 1997 by AT&T
9. Spircu, C., Loptan, I., POO-Analiza, proiectarea i programarea orientate
spre obiecte, Editura Teora, Bucureti, 1996
10. Vsevolod Arnaut, Vasile Putin, Ion Andrie Programarea orientat pe
obiecte n baza limbajului C++. CEP USM 2009
11. Zmaranda, Rodica Doina, Elemente de programare orientat pe obiecte n
limbajul C++, Oradea Editura Universitii din Oradea, 2001
12. . . C++ Builder 6.
2003
13. . . C++ Builder.
. . .: , 2007
14. . . C++ Builder . , 2005

111

Cuprins

Prefa............................................................................................................. 3
4
Sugestii metodologice.....................................................................................
Capitolul I. Limbajul C++
1. Crearea de obiecte...................................................................................... 9
2. Constructori.................................................................... 12
3. Motenire simpl........................................................................................ 14
4. Funcii virtuale i polimorfism................................................................... 17
5. Motenire multipl...................................................................................... 21
6. Suprancrcarea operatorilor....................................................................... 26
7. Agregare..................................................................................................... 29
Capitolul II. Mediul de programare vizual C++ Builder
Probleme rezolvate......................................................................................... 35
1. Forme (ferestre)................................................................... 50
2. Componenta Button.................................................................................... 51
3. Componenta Edit........................................................................................ 52
4. iruri de caractere i componenta Label.................................................... 54
5. Aplicaii multiforme................................................................................... 57
6. Aplicaii cu butoane................................................................................... 59
7. Aplicaii cu meniuri.................................................................................... 61
8. Aplicaii cu elemente de grafic................................................................. 64
9. Componenta Timer..................................................................................... 67
10. Aplicaii cu liste de opiuni i casete combinate...................................... 68
11. Componenta StringGrid........................................................................... 71
12. Aplicaii cu Data Calendaristic............................................................... 73
13. Aplicaii cu directoare i fiiere................................................................ 75
14. Aplicaii diverse........................................................................................ 76
Capitolul III. Baze de date
Probleme rezolvate......................................................................................... 81
1. Utilitarul Database Desktop....................................................................... 95
2. Aplicaii cu Tabele..................................................................................... 96
3. Aplicaii cu Interogri................................................................................. 102
4. Rapoarte.............................................................................................. 105
5. Tehnologia ADO........................................................................................ 106
6. Proiecte pentru gestiunea bazelor de date................................................... 107
Bibliografie..................................................................................................... 111
112

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