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


Prefa

Aprobat de Senatul Universitii de Stat Tiraspol


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
Recenzeni: Andrei
doctor, confereniar universitar, UST
interacioneaz
ntreBraicov,
ele.
Elaborarea unui program n stilul POO presupune a organiza codul acestuia n
Alexandru
Lazari, doctor,
lector
uniti de program
care s opereze
cu obiecte.
n superior,
acest sensUSM
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
DESCRIEREA
CIP A CAMEREI
A CRII
intermediul
constructorului;
de creareNAIONALE
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
Gncu, Silviu.
(C++ Builder,
Visualrezolvrii
C++, etc.).
Metodologia
problemelor de informatic n stilul orientat pe
Un
salt
important
n dezvoltarea
tehnologiilor
informaionale
s-a produs
odat
obiecte / Silviu Gncu;
Univ. de Stat
Tiraspol, Catedra
Informatic
i Tehnologii
cu Informaionale.
apariia mediilorde
programare
vizual
orientate
pe
obiecte.
Pentru
formarea
Ch. : Univ. de Stat Tiraspol, 2012. 112 p. (Informatica).
deprinderilor
60 ex. de realizare a aplicaiilor Windows orientate pe obiecte sunt prezentate
o serie ISBN
de aplicaii
care ilustreaz modalitatea de gestionare a componentelor, de
978-9975-76-085-0.
utilizare
a
elementelor
de grafic, de creare a noi tipuri de date i de utilizare a lor
37.016.046:004
ntr-un
G 57mediu 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.

ISBN 978-9975-76-085-0.

Silviu Gncu, 2012

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.

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

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.

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;

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


ax2+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.

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

c)
date:
afiarea
distana
figurilor
parcurs
sub
(nform
km), de
plata
ptrat;
pentru 1 km;
d)
metode:
afiarea
vorfigurilor
fi redefinite
sub form
metodele
de triunghi;
de citire i afiare, plata. Prin intermediul
metodei
e) afiarea
Plata, se
figurii
va determina
cu suprafa
costul
maxim;
unei curse efectuate de ctre ofer dup
formula:
f) afiarea
distanta*plata
figurii cupentru
perimetru
1 km.maxim;
g)
De afiarea
la tastatur
perimetrului
se citesc datele
total aldespre
figurilor;
n oferi. Elaborai un program prin
intermediul
h) afiarea
cruia
suprafeei
la ecrantotale
se vora figurilor;
afia datele despre toi oferii, oferul cel mai tnr,
oferul
i) sortarea
cu plata figurilor
maxim.n ordine descresctoare suprafeei.

9.
2.Creai
Se consider
clasa Angajat_calificat,
drept baz clasa doi
derivata
(va avea
clasei
n Salariat
calitate de
(prob.
date6).
dou
Pentru
numere
clasa
reale). n baza acestei
Angajat_calificat
vor ficlase
adugate:
se deriv clasele dreptunghi i triunghi_dreptunghic. S
se implementeze
date: gradul calificrii
polimorfismul
(1 superior,
pentru2metodele:
mediu, 3 inferior);
citire, afiare, suprafaa i
perimetru.
metode:De
vorlafitastatur
redefinite
se metodele
citete numrul
de citire
de ifiguri.
afiare,
Elaborai
salariu.un
Salariu
program
va ficare va
determinat
permite
: conform formulei : nr_ore*plata*(100%+calificare),
a) citirea figurilor de la tastatur;
b) afiarea acestora;
50%, pentru gradul 1
c) afiarea figurilor sub form de dreptunghi;

d) afiarea figurilor sub form de triunghi;


calificare 40%, pentru gradul 2
e) afiarea figurii cu suprafa maxim;
30%, pentru gradul 3
f) afiarea figurii cu perimetru maxim;

g) afiarea perimetrului total al figurilor;


De la tastatur se citesc datele despre n angajai calificai. Elaborai un program
h) afiarea suprafeei totale a figurilor;
prin intermediul cruia la ecran se vor afia datele despre toi angajaii, angajatul cel
i) sortarea figurilor n ordine descresctoare suprafeei.
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.
3. Se consider drept baz clasa tread (va avea n calitate de date dou numere
De la tastatur se citesc datele despre n piramide i m triunghiuri. Elaborai un
reale i un numr ntreg). n baza acestei clase se deriv clasele paralelogram i
program prin intermediul cruia, la ecran se vor afia datele despre toate piramidele
triunghi. S se implementeze polimorfismul pentru metodele: citire, afiare,
(triunghiurile), piramida (triunghiul) cu suprafa maxim, piramida cu volumul
suprafaa i perimetru. De la tastatur se citete numrul de figuri. Elaborai un
maxim, triunghiul cu perimetrul minim.
program care va permite :
a) citirea figurilor de la tastatur;
b) afiarea acestora;
c) afiarea figurilor sub form de paralelogram;
4. Funcii
virtuale i polimorfism
d) afiarea figurilor sub form
de triunghi;
e) afiarea figurii cu suprafa maxim;
f) afiarea
figurii
cu perimetru
maxim;
Problem
exemplu.
[2, p. 180].
g) afiarea perimetrului total al figurilor;
h) afiarea suprafeei totale a figurilor;
Se consider
drept
baz clasa
numar (vasuprafeei.
avea n calitate de date un numr
i) 1.
sortarea
figurilor
n ordine
descresctoare
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
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)
cerc: lungimea
i nlimea
razei;
triunghiului isoscel. Pentru clasa figura vor fi implementate
metodele
figur (triunghi
de determinare
nscrisansuprafeei
cerc) derivata
i a perimetrului.
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
3. n Elaborai
calitate deun
clase
de baz
seintermediul
consider clasele
isoscel figurile
i triunghi
ierarhie.
program
prin
cruia trapez
vor fi afiate
la ecran.
isoscel. Aceste clase deriv clasa figura, format dintru-un trapez isoscel i un
triunghi isoscel, grafic figura se reprezint:
7. Se consider ierarhia format din clasele:
Clas
baz:
Punctderivata
cu cmpurile:
punctului
i culoarea;
Creai de
clasa
figura,
claselorcoordonatele
trapez isoscel
i triunghi
isoscel, dac se
Clase
derivate:
cunosc lungimile bazelor trapezului (lungimea laturii triunghiului isoscel este egal
triunghi echilateral
se consider
a fi n trapezului
centrul triunghiului):
lungimea
cu lungimea
bazei mari(punctul
a trapezului),
iar nlimile
i a triunghiului
sunt de
laturii;
aceiai mrime. Pentru clasa figura vor fi implementate metodele de determinare a
patrat: i
lungimea
laturii, punctul se consider a fi n centrul ptratului;
suprafeei
a perimetrului.
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
4. n Elaborai
calitate deun
clase
de baz
seintermediul
consider clasele
figura (exemplul
ierarhie.
program
prin
cruia cerc
vor fii afiate
figurile la ecran.
rezolvat). Aceste clase deriv clasa figura_noua (format dintr-un cerc i figura
prezentat n exemplul rezolvat), grafic figura_noua se reprezint:
8.Creai
Se consider
clasa figura_noua,
ierarhia format
derivata
dinclaselor
clasele: cerc i figura, dac se cunoate
lungimea
Clas de
laturii
baz:ptratului,
Punct cu lungimea
cmpurile:diametrului
coordonatele
cercului
punctului
esteiegal
culoarea;
cu lungimea
laturii
Clase
ptratului,
derivate:iar lungimea laturii triunghiului echilateral este egal cu a+0.3*a,
unde
triunghi
a este echilateral:
lungimea laturii
lungimea
ptratului.
laturii;Pentru clasa figura_noua vor fi implementate
metodele
patrat: de
lungimea
determinare
laturii,
a suprafeei
punctul se iconsider
a perimetrului.
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
5. nElaborai
calitate deunclase
de baz
consider clasele
patrat
i figura
(problema
3).
ierarhie.
program
prinseintermediul
cruia vor
fi afiate
figurile
la ecran.
Aceste clase deriv clasa figura_noua (format dintr-un ptrat i figura din problema
3), grafic figura_nou se reprezint:
9.
Se consider
o ierarhie de
clase care
s descrie
dintr-o
Creai
clasa figura_noua,
derivata
claselor
figura habitatul
i patrat, animalelor
dac se cunoate
rezervaie
natural.
rezervaie3),pot
ntlnite urmtoarele
animale:
iepuri,cuuri,
datele despre
figur n
(problema
iarfilungimea
laturii ptratului
este egal
cprioare,
vulpi
i
lei.
Unele
dintre
animale
sunt
ierbivore,
altele
carnivore
lungimea bazei mici a trapezului isoscel. Pentru clasa figura_noua vor fi sau chiar
ierbivore
i carnivore.
de clase avasuprafeei
avea claside
baz CAnimal, clas
implementate
metodeleIerarhia
de determinare
a perimetrului.
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
B. Problem
[2,sep.cunosc
185-186].
animalului.
Despreexemplu
un animal
urmtoarele informaii comune: nume, data
aducerii n rezervaie, greutate, hrana preferat, cantitate hran pe zi. n plus
despre
iepure seierarhia
cunoate
suprafaa
6. Se consider
format
din minim
clasele: pe care poate tri;
despre
vulpe
maximcoordonatele
la care poate punctului
rezista, tipul
(polar,
Clas de
baz:- temperatura
Punct cu cmpurile:
i culoarea;
indigen);
Clase derivate:
triunghi echilateral (punctul se consider a fi n centrul triunghiului): lungimea
laturii;
23
24

despre leu temperatura6.minim


suportat, operatorilor
ara de provenien;
Suprancrcarea
despre urs - perioada de hibernare;
despre cprioar - numrul de pui.
Problem exemplu. [2, p. 164-168].
Pentru fiecare clasa se vor implementa att o funcie de citire a datelor, ct i o
1. Se consider clasa timp, cu urmtoarea structur:
funcie de afiare a acestora, funcii ce vor fi declarate ca funcii pur virtuale n cadrul
claseitimp{
de baz CAnimal. Creai clasa CRezervatie care s conin o mulime de
class
int ora,min,
animale
i ssec;//14:24:35
se populeze rezervaia.
public:
timp();
timp(int,int,int);
//
}; 10. Se consider ierarhia: Persoana, Angajat, Student i Student_angajat.

Clasele Angajat i Student sunt derivatele clasei Persoana, iar clasa Student_angajat
esteElaborai
derivata claselor
Student
Angajat. ncruia
clasa persoan
vor timp
fi definite
un program,
priniintermediul
pentru clasa
vor fi
urmtoarele:
suprancrcai:
numele,
prenumele,
anul dintre
naterii;
a) date:
Operatorul
+ va
efectua suma
dou obiecte de tipul timp;
b) metode:
Operatorul - va efectua diferena dintre dou obiecte de tipul timp;
citirea
de la tastatur acudatelor
despre persoan,
c) Citire
Operatorul
++ incrementarea
o secund;
d) Afisare
Operatorul
afiarea
-- decrementarea
la consol acudatelor
o secund;
despre persoan;
va returna
vrsta persoanei.
e) Virsta
Operatorul
=
nf)clasa
Operatorii
Angajat>>,<<
suplimentar
vor citi/afia
vor mai
timpul
fi declarate:
n formatul ora:min:sec, de ex. 14:24:35;
Ore de
numrul
de ore==,!=,
lucrate,
Pl_ora
plata pentru o or, funcia;
g) date:
Operatorii
comparaie
>, >=,
<,<=;
h) metode:
Se va realiza
Bani o metod,
va determina
care va
salariul
prelucra
angajatului
timpul nconform
forma corect,
formulei:
de ex. dac
ore*pl_ora.
timpul
va fi 2:59:63, va fi transformat n 3:00:03.
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
conine
metode pentru
citire, afiare, Bani (salariu
2. Se
consider clasavadata,
cu urmtoarea
structur:
+bursa).
class data{/*se consider c o luna are exact 30 de zile*/
Pentru aceast ierarhie se va implementa polimorfismul pentru metodele citire,
int an,luna, zi;//2010:11:18
afiare,
public: bani. De la tastatur se citete numrul total de persoane n (n<100). Tipul
acesteia
data(); se citete n momentul execuiei. La ecran va fi afiat un meniu cu
urmtoarele
opiuni:
data(int,int,int);
a) Afiarea tuturor persoanelor;
//
}; b) Afiarea persoanelor grupate pe categorii;
c) Suma total de bani, pe care o primesc toate persoanele citite;
princeintermediul
pentru
clasa data, vor fi
d)Elaborai
Persoanaun
sauprogram,
persoanele
primesc ceicruia
mai muli
bani;
suprancrcai:
e) Persoana sau persoanele ce primesc cei mai puini bani;
a)
Operatorul
+ va efectua
suma dintre
dou obiecte
de tipulacumulate;
data;
f) Afiarea
persoanelor
n ordine
descresctoare
veniturilor
b)
Operatorul
va
efectua
diferena
dintre
dou
obiecte
de
tipul
data;
g) Afiarea persoanelor n ordine cresctoare vrstei.
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.

25
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

void1.
lista::cauta(char
Elaborai un *nume){
program prin intermediul cruia vor fi gestionate filmele de la
TStudent
*p;p=prim;
un
cinematograf.
Despre un film se cunosc urmtoarele date: numele filmului, anul
while(p!=NULL){
ediiei,
actorul principal, regizorul, bugetul filmului, ora de difuzare a filmului n
if(stricmp(p->nume,nume)==0) cout<<p;p=p->next;
cinematograf.
}
}
void lista::cauta(double media, int anul){
TStudent *p;p=prim;
2. Elaborai un program prin intermediul cruia vor fi gestionate mai multe
while(p!=NULL){
state
prezente la un concurs. Despre fiecare
stat se cunosc urmtoarele date: numele
if(p->media>=media&&p->anul==anul)
cout<<p;p=p->next;
rii,
preedintele, suprafaa, numrul de locuitori, continentul.
}
}
int lista::sort_medie(){
int i,j;TStudent
*a,*b;
3. Elaborai
un program prin intermediul cruia vor fi gestionate crile unei
if(!prim)return 0;
biblioteci.
Despre
fiecare carte se cunosc urmtoarele date: denumirea crii, autorul,
a=prim;
editura,
numrul de pagini, anul ediiei, preul.
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);
4. Elaborai un program prin intermediul cruia vor fi gestionate calculatoarele
b=b->next;
unei
universiti. Despre un calculator se cunosc urmtoarele date: tipul monitorului,
}a=a->next;
capacitatea
procesorului, cantitatea memoriei operative, placa video, hard disk-ul.
}
clrscr();
cout<<"Sortarea datelor s-a efectuat cu succes";getch();
return
1;
5. Elaborai
un program prin intermediul cruia vor fi gestionate telefoanele
}mobile ale unui magazin. Despre un telefon se cunosc urmtoarele date: marca, anul
lista::~lista(){
ediiei,
culoarea, preul, termenul de garanie, tipul camerei video.
TStudent *p,*q;
do{
p=prim;prim=prim->next;delete p;
}while(prim!=NULL);
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
main(){
de stele, numrul de odi (camere), costurile minim i maxim pentru o camer.
char c;lista g;
g.creare();
do{
7. Elaborai un program prin intermediul cruia vor fi gestionate automobilele
clrscr();
cout<<"Tastati"<<endl<<"1-afisare"<<endl<<"2-excludere";
dintr-un
salon auto. Despre un automobil se cunosc urmtoarele date: marca, anul
cout<<endl<<"3-inserare"<<endl<<"4-Studentii
cu numele
Ion";la 100 km.
ediiei, culoarea, preul, capacitatea motorului,
consumul
cout<<endl<<"5-Studentii cu media>8, nascuti in anul 1990";
cout<<endl<<"6-Sortare dupa medie"<<endl<<"0-iesire"<<endl;
c=getch(); clrscr();
8. Creai un tip de date matr_complex, care va fi o matrice de numere
switch(c){
case '1': g.afisare();getch();break;
complexe.
Asupra acestui tip de date vor fi suprancrcai toi operatorii specifici unei
case '2': g.exclude();break;
matrice.
case '3': g.inserare();break;
case '4': g.cauta("Ion");getch();break;
case '5': g.cauta(8,1990);getch();break;
9. '6':
Elaborai
un program prin intermediul cruia se va crea tipul de date tablou
case
g.sort_medie();break;
bidimensional
cu linii de lungime variabil, notat TBV. Pentru obiectul de tip TBV
}
}while(c!='0');
se
vor implementa metodele:
} a) citire() citirea elementelor obiectului;

b) afisare() afiarea elementelor obiectului;


c) minime() afiarea elementelor minime de pe fiecare linie;

32
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 :

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

iar

DEPOZITE N MDL
TipulTermenul Rata dobnzii Retrageri
depozitului de plasareanualadin cont
3 luni8%
6 luni9%
Flexibil12 luni10%DA
24 luni11%
36 luni12%
3 luni9%
6 luni10%
Rentier12 luni11%NU
24 luni12%
36 luni13%
DEPOZITE N USD I EUR
3 luni2%
6 luni2,5%
Exclusiv12 luni3%DA
24 luni3,5%
36 luni4%
3 luni3%
6 luni3,5%
Major12 luni4%NU
24 luni4,5%
36 luni5%

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();
Probleme pentru rezolvare independent
};
void lista::afisare(){
Form1->Memo1->Clear();
1. Forme (ferestre).
if(prim==NULL) Form1->Memo1->Lines->Add("Lista este vida");
else{
Form1->Memo1->Lines->Add("Lista
Personalului");
1. Elaborai o aplicaie prin intermediul
creia va fi afiat o fereastr cu
celula *p;p=prim;
urmtoarele
setri: dimensiunile 400400, culoarea albastr, poziia centru sus,
while(p!=NULL){
titlu
numele i prenumele studentului, utilizatorului i se va interzice
Form1->Memo1->Lines->Add(p->afis());p=p->next;
redimensionarea
formei.
}}}
void lista::inserare(int i){
celula *q;q=new celula;
q->cit(i);q->next=prim;prim=q;}
2. Elaborai o aplicaie care la efectuarea unui click pe suprafaa formei va
void lista::exclude(AnsiString c){
modifica,
n mod aleator, culoarea formei (minim 5 culori).
celula *w,*q;w=prim;
Indicaie : pentru generarea culorilor
if(w->p->cod()==c){prim=w->next;delete
w;}va fi utilizat funcia random.
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(){
3. Elaborai o aplicaie care la efectuarea unui click va exclude bara de titlu a
celula *p,*q;
formei,
iar la efectuarea double-click va afia bara de titlu a formei cu titlul respectiv
if(prim!=NULL)
SALUT.
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;}
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.
Declaraii:
lista p;

Prelucrm
evenimentul
5. Elaborai
o aplicaie
careButton1Click
la efectuarea unui double-click va modifica
p.inserare(RadioGroup1->ItemIndex);
consecutiv valoarea proprietii BorderStyle.
Button2Click(Sender);
RadioGroup1->ItemIndex=-1;
nume->Clear();prenume->Clear();
6. Elaborai o aplicaie care:
idnp->Clear();grupa->Clear();
a)
la
apsarea tastei x va nchide aplicaia;
media->Clear();functia->Clear();
b)
la
apsarea tastei L va mri lungimea ferestrei cu 10%;
ore->Clear();plata->Clear();

c) la apsarea tastei l va micora lungimea ferestrei cu 10%;


Prelucrm
evenimentul
RadioGroup1Click
d) la apsarea
tastei
H va mri nlimea
ferestrei cu 10%;
switch(RadioGroup1->ItemIndex){
e) la apsarea tastei h va micora nlimea ferestrei cu 10%;
0: Button1->Caption="Adauga
f)case
la apsarea
tastei c va poziionastudent";break;
fereastra la centru;
case
1:
Button1->Caption="Adauga
angajat";break;
g) la apsarea tastei + va mri dimensiunea
ferestrei cu 10%;
case 2: Button1->Caption="Adauga student angajat";break;
h)
la
apsarea
tastei
va
micora
dimensiunea
ferestrei cu 10%.
}
Prelucrm evenimentul Button2Click
p.afisare();

Prelucrm evenimentul Button3Click


7.
Elaborai
o aplicaie
care
ShowMessage("Suma
ce necesita
a fi:achitata este "+
a)
la
apsarea
tastei

va
deplasa
fereastra n sus;
FormatFloat("0.00",p.bani()));
b) la apsarea
tastei
va deplasa
fereastra n jos;
Prelucrm
evenimentul
Button4Click
c) la apsarea tastei va deplasa fereastra n dreapta;
AnsiString s=InputBox("Excludere","Indicati codul fiscal al
d)
la apsarea
tasteia
va deplasa fereastra n stnga.
persoanei
ce urmeaza
fi exclusa","");
p.exclude(s);Button2Click(Sender);
49
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. 4. Creai aplicaia Tabla Inmultirii. Pe suprafaa formei cu titlul Tabla


Inmultirii,
plasat
butonul
Verifica. Prin
Efectuarea
unui click
pecomponente
suprafaa acestuia,
19. este
Creai
aplicaia
Combinri.
intermediul
a dou
Edit se
afieaz o fereastr de dialog. Aceast fereastr conine o ntrebare de genul x*y= ?,
unde
1<x,y<11.
scrierea
corect de
ctreseutilizator
este apsat
vor citi
2 numereDup
ntregi
n i r. rspunsului
ntr-o component
Label
va afia valoarea:
butonul Ok. Dac rspunsul este corect fereastra este nchis, n caz contrar, fereastra
calculat
conform
nu este nchis
pnformulei:
cnd nu este introdus rspunsul corect. La realizarea aplicaiei vor
fi utilizate forme modale.
n!

Cn

r!*(n r )!

5.
Creai
Virus.
Pe suprafaa
principaleasedou
plaseaz
un buton cu
20.
Creaiaplicaia
aplicaia
Numere
prietene. formei
Prin intermediul
componente
titlul
Lanseaz
virus.
La
efectuarea
unui
click
pe
acest
buton
forma
principal
Edit se citesc 2 numere ntregi. Dou numere se numesc prietene dac posed este
ascuns
i afiat
o alt
cuegal
titlulcuVirus.
cuceluilalt,
titlul Virus,
proprietatea:
fiecare
din form
ele este
sumanchiderea
divizorilorformei
inferiori
de va
afia
o
nou
form
cu
acelai
titlu.
Aplicaia
se
va
nchide
la
apsarea
tastei
x.
exemplu 220 i 284. Prin intermediul unei componente Label se va afia dac
numerele sunt sau nu prietene.
6. Elaborai o aplicaie multiform. Prin intermediul formei principale se vor
seta unele proprieti ale formei a doua: titlul, dimensiunile, distana de sus, distana
21. Creai
aplicaia
Numar perfect.
Prin date,
intermediul
unei componente
Edit
se
din stnga.
Numai
dup introducerea
acestor
la efectuarea
unui click pe
butonul
citete
un
numr
ntreg.
Prin
intermediul
unei
componente
Label
se
va
afia
dac
Arata, va fi afiat a doua form, iar forma principal va fi ascuns. La nchiderea
numrul
este perfect,
supraperfect
formei secundare,
forma
principalsau
va imperfect.
fi afiat. 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.
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
5. Aplicaii
multiforme.
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.
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
8. Creai aplicaia Dialog. Pe suprafaa formei principale vor fi plasate 2
unui click pe butonul Forma Noua ascunde forma i afieaz o alt forma cu titlul
butoane de comand, cu titlurile respectiv, Inchide aplicaia, Modifica culoarea
Forma 2, .d. nchiderea unei dintre forme va genera nchiderea aplicaiei.
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;
2. Elaborai o aplicaie care la efectuarea unui click pe butonul cu titlul Intro,
Modifica culoarea formei fereastra conine un cmp pentru introducerea
va afia o fereastr de dialog prin care i se va cere utilizatorului s-i scrie prenumele
culorii i butoanele Ok, Cancel. Efectuarea unui click pe butonul Ok, modific
(de exemplu Ion). Dup efectuarea unui click pe butonul Ok, fereastra va fi nchis i
culoarea formei corespunztor valorii introduse.
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


9. Creai
aplicaia
Pe suprafaa
principale
se plaseaz
unaranjate
buton de
butonul
Afisare
de peTest.
suprafaa
formei, ferestrei
vor fi afiate
8 ferestre
de dialog
pe
comand
titlul Test.
La efectuarea unui click pe suprafaa acestuia este afiat o
diagonalacu
principal
a monitorului.
form modal. Pe suprafaa acestei forme este plasat o component Label (n
57
58

Cn ,

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)9.Grupul
Creai aplicaia
Pozitie vaBaza.
conine
Pe suprafaa
urmtoarele
formei
opiuni:
suntCentru,
plasate Stinga
8 componente
sus, Stinga jos,
CheckBox,
8 componente
Dreapta
sus, Dreapta Label,
jos. o cutie de editare. Prin intermediul cutiei de editare
se va
b)introduce
Grupul Culoare
un numr
va conine
ntreg. Butoanele
o list cu 5deopiuni
tip TCheckBox
cu diferitevor
culori.
avea titlurile: baza
doi,c)baza
trei,...,
baza nou.vaLaconine
bifareaurmtoarele
butoanelor opiuni:
numrul200200,
introdus va
fi transformat
Grupul
Dimensiune
200300,
corespunztor
300200,bazei
400500,
selectate
500400.
i afiat (doar dac este bifat) prin intermediul
componentelor
tip TLabel.
Efectuareadeunui
click pe fiecare grup va afia forma cu setrile selectate.

5.
10.Creai
Creaiaplicaia
aplicaiaCONVERTOR.
Butoane Radio.Aceast
Pe suprafaa
aplicaie
formei
va permite
cu titlulefectuarea
Butoane
Radio este plasat
urmtoarelor
transformri:
o component RadioGroup i un buton de comand. La
efectuarea
a) milimetri,
unuicentimetri,
click pe suprafaa
decimetri,
butonului
kilometri,
de comand
dac valoarea
n componenta
iniial se consider
RadioGroup
vor dat
fi adugate
n metri;
10 butoane cu titlurile respectiv 0,1,...,9. Butoanele vor fi divizate n
trei
b)coloane.
miligrame,
La kilograme,
selectarea butonului
tone, centigrame,
cu valoare
dac
maxim,
valoarea
n iniial
cutie vasefi consider
adugat nc
un buton
dat n(urmtorul
grame; dup numrul maxim). Se va permite adugarea de noi butoane,
doar
c) sptmni,
dac valoarea
zile,butonului
minute, secunde,
maxim nu
dac
depete
valoarea50.
iniial
La selectarea
se consider
butonului
dat ncuore.
titlul
0, vaLafielaborarea
exclus butonul
aplicaiei
cu valoarea
vor fi utilizate
maximal,
componente
excluderea
RadioGroup
se va efectua
(cte
doar
un dac
grup
pentru fiecare
numrul
de butoane
caz). Pentru
depete
fiecare
valoare
caz va
3. La
fi afiat
efectuarea
rezultatul
unuinclick
componente
pe oricareLabel.
alt buton
din cutie, va fi afiat un mesaj care va conine titlul butonului selectat.

6. Creai aplicaia Arie & Perimetru. Forma aplicaiei va arta astfel:


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.

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


2. Pentru
o form vorModificarea
fi creat un meniu
contextual
cu va
urmtoarele
opiuni:
figurii
corespunztoare.
lungimilor
laturilor
modifica n
mod
a) poziie cu
opiunile:
sus, jos,
stnga, dreapta centru;
corespunztor
aria
i perimetru
figurilor.
b) dimensiuni cu opiunile: 200200, 200300, 300200, 400500,
500400;
c) culoare
cuaplicaia
opiunileTriunghi
ase tipuri
de culori.
7. Creai
n baza
aplicaiei Arie & Perimetru.
La efectuarea unui click pe una dintre opiunile meniului, structura formei va fi
modificat n mod corespunztor.
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. Creai aplicaia Sir. Pe suprafaa formei cu titlul Sir se plaseaz o
[3;8]. La bifarea rspunsului va fi afiat un mesaj n care se va indica corectitudinea
component Memo i se creeaz un meniu principal cu opiunile:
rspunsului.
a) Cauta va cuta un text;
61
60

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

ASCIICaractere
DeschideDeschide
Transforma Transforma
SalvareSalvare
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:
CifraCaractere
DeschideDeschide
Transforma Transforma
SalvareSalvare
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

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
r diferit de precedentul, lungimea razei va fi cu 10% mai mare ca
lungimea razei
n cercului precedent toate cercurile vor avea acelai centru.

n!
C
r!*(n r)!

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 suprafaa
formei
va mai fi
un buton
cu titlul
Save,
acionareacomponentei
cruia
pe butonul
cu titlul
Deseneaza,
vaplasat
fi desenat
o tabl
de ah
pe suprafaa
va tip
permite
salvarea informaiei n fiier.
de
TImage.
8. Aplicaii cu elemente de grafic
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
1. Creai
aplicaia
Triunghi.
elaborarea
aplicaiei
va fi creat
un meniude tip
butonul
cu titlul
Deseneaza,
va fiLa
desenat
o stea
pe suprafaa
componentei
principal
cu
opiunile:
TImage.
IsoscelOarecareEchilateral
AscutitAscutit
Dreptunghic Dreptunghic
7. Creai aplicaia Drapel. La elaborarea aplicaiei va fi creat un meniu
ObtuzObtuz
contextual cu numele a cinci ri. Efectuarea unui click pe una dintre opiunile
Efectuarea unui click pe una dintre opiunile meniului va desena triunghiul
meniului va desena drapelul rii selectate, iar la mijlocul desenului va fi scris numele
selectat pe suprafaa unei componente de tip TImage.
rii respective. Pentru elaborarea desenului se va utiliza o component de tip
TImage.

2. Creai aplicaia Patrulater. La elaborarea aplicaiei va fi creat un meniu


8. Creai aplicaia Figuri. La elaborarea aplicaiei va fi creat un meniu
principal cu opiunile:
contextual cu opiunile: cerc, patrat, dreptunghi. Prin intermediul acestui meniu se va
Paralelogram Trapez
selecta figura ce urmeaz a fi desenat. La efectuarea unui click pe suprafaa formei
OarecareOarecare
se citesc coordonatele centrului figurii i se deseneaz figura selectat din meniu.
DreptunghiIsoscel
Efectuarea operaiei click de mai multe ori, va desena mai multe figuri pe suprafaa
PatratDreptunghic
formei.
Romb
Efectuarea unui click pe una dintre opiunile meniului va desena patrulaterul
selectat pe suprafaa unei componente de tip TImage.
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;
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
10. Creai
geometrice. de
Latip
elaborarea
aplicaiei
va fin creat un
Deseneaza,
pe aplicaia
suprafaaFiguri
unei componente
TImage se
deseneaz
meniu
contextual
cu
opiunile:
triunghi,
patrulater.
Dup
efectuarea
unui click
pe una
dreptunghiuri. Fiecare dreptunghi va avea o culoare diferit de precedentul,
lungimile
dintre
opiunile
meniului,
utilizatorul
va
efectua
operaia
click
de
3
ori,
respectiv
4 ori
laturilor vor fi cu 10% mai mari ca laturile precedentului dreptunghi i toate
(se
vor citi colurile
figurilor),
pecentru.
suprafaa formei. La efectuarea unui click dreapta
dreptunghiurile
vor avea
acelai
pe suprafaa formei va fi afiat un meniu cu opiunea desen. La efectuarea unui click
pe acesta va fi desenat un triunghi sau patrulater.

64
65

butonul
11. Creai
al doilea
aplicaia
va fi rotit
Parabola.
patrulaterul,
Prin intermediul
citindu-se n
a trei
prealabil
cutii de
msura
editareunghiului
se vor de
introduce
rotire
i coordonatele
coeficienii punctului
pentru o ecuaie
fa dede
care
gradul
se vadoi
efectua
(parabol).
rotirea.La efectuarea unui
click pe butonul cu titlul Desen va fi desenat pe o component de tip TImage graficul
ecuaiei introduse.
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.
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
19. Creai aplicaia Deplasare. Pe suprafaa formei este desenat o figur. La
component de tip TImage.
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
13. Creai
aplicaia
Parabole.
Pe suprafaa
formei se
4 butoaneMareste
de
procesul
de rotire
a figurii.
Prin intermediul
butoanelor
cuplaseaz
titlurile respectiv
comand
cu titlurile
respectiv
sus, jos,
dreapta,
stinga.
La efectuarea
unui click pe
i
Micsoreaza
se va mri,
respectiv
micora
viteza
de deplasare
a figurii.
unul dintre butoane va fi desenat o parabol cu ramurile orientate respectiv n sus, n
jos, la dreapta, la stnga.
20. Creai aplicaia Plutire. Pe suprafaa formei este desenat o figur (cerc,
14.
Elaborai o aplicaie
prin intermediul
creia
va ficu
desenat
sistemul
cartezian
patrat, dreptunghi).
La efectuarea
unui click pe
butonul
titlul Start
figura
va pluti
de suprafaa
coordonate
Oxy cu
numerotrile
corespunztoare.
n acest sistem
pe
formei
(semarcajele
va deplasai pe
traiectoria unei
sinusoide). Efectuarea
unui
reprezentai
punctul
i stopa
proieciile
acestuia
pe axeleade
coordonate. Coordonatele
click
pe butonul
StopAva
procesul
de plutire
figurii.
punctului vor fi citite prin intermediul a dou cutii de editare.
9. Componenta Timer
15. Creai aplicaia Grafic. Prin intermediul acestei aplicaii se vor desena
graficele urmtoarelor funcii:
1. Elaborai o aplicaie care va permite modificarea culoarea formei peste un
interval
de
timp.
f ( x)
x Intervalul
3 x 2 de timp se va
f (introduce
x) x2de
lnctre
x utilizator. Culoarea e x e x
formei se
1 va
1 modific n mod aleator dintr-o gam de 8 culori.
f ( x)

1
f ( x) 2
2
f ( x) sin x sin 2x
x
x
e
x e x
2. Elaborai o aplicaie care va modifica poziia2formei peste un interval de
x de timp se va introduce de ctre utilizator. Poziionarea formei
f ( x)va
fix x
timp. Intervalul
28
f ( x)n
2 aleator astfel: sus, jos, dreapta, stnga, centru.
e e
efectuat
mod
f ( x) x
x 1
tgx
x
f ( x)
x2f ( x) e
3. Creai aplicaia Logare. Pe suprafaa formei
va fi plasat un buton cu titlul x
Logare, la efectuarea unui click pe suprafaa acestuia se va afia o nou fereastr,
unde16.
utilizatorul
va introduce
numele
i parola.
Pentruformei
introducerea
acestora
Creai aplicaia
Rotete
triunghi.
Pe suprafaa
se plaseaz
douse vor
acorda
Dac utilizatorul
nu reuete
introduc
datele de
corect,
butoane20cusecunde.
titlurile respectiv
Deseneaza
triunghi s
i Roteste
triunghi.
Lalogare
efectuarea
aplicaia
este
nchis.
Numele
de
utilizator
i
parola
corect
vor
fi
fixate
n
codul
unui click pe primul buton se va desena un triunghi, iar la efectuarea unui click pe
programului.
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.

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


17. Creai
Roteste
Pe suprafaa
formei
plaseaz
dou
Inmultirii
este aplicaia
plasat butonul
cupatrulater.
titlul Verifica.
Efectuarea
unuiseclick
pe suprafaa
butoane cu
respectivde
Deseneaza
patrulater
Roteste patrulater.
La efectuarea
acestuia
va titlurile
afia o ntrebare
genul x*y=
?, unde i1<x,y<11.
Pentru scrierea
unui click pe primul buton se va desena un triunghi, iar la efectuarea unui click pe
66
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


n aStringGrid
doua component ComboBox vor fi
11.cursorului,
Componenta
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
1. Creai aplicaia Vector. Prin intermediul unei componente de tip TEdit i
proprietatea respectiv. Pentru fiecare din componentele ComboBox va fi creat un
TStringGrid se citesc elementele vectorului. Despre vector se vor afia:
meniu de tip TPopupMeniu cu opiunile: adugare i excludere. Prin intermediul
a) Numrul de elemente pare;
acestui meniu utilizatorul va avea posibilitatea de a aduga valori, respectiv de a
b) Numrul de elemente impare;
exclude.
c) Elementul maxim;
d) Elementul minim;
e) Suma elementelor;
f) Media aritmetic.
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.
2. Elaborai o aplicaie prin intermediul creia elementele unui vector vor fi
sortate cresctor i descresctor.
9. Creai aplicaia Divizori. Prin intermediul a dou cutii de editare se citesc
numerele
ntregioaaplicaie
i b. n componenta
ComboBox
se scriu
numerele
de i
pem
3. Elaborai
care va prelucra
elementele
unei toate
matrice
cu n linii
segmentul
[a;b]. La
unui prin
clickintermediul
pe unul dintre
numerele
din listdevor
coloane. Valorile
n iefectuarea
m vor fi citite
a dou
componente
tip fiTEdit.
afiai
toi
divizorii
numrului
selectat.
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)10.
suma
elementelor
matricei;
Elaborai
o aplicaie
care va permite nregistrarea participanilor la
b)
elementul
maxim;
concursul de Informatic. La concurs particip concureni din Republica Moldova,
c) elementul
minim;Din Republica Moldova vin participani din oraele: Chiinu,
Romnia,
i Ucraina.
d) maximele
pe linii;
Bli,
Orhei, Soroca,
Cahul, Edine. Din Romnia vin participani din oraele: Iai,
e)
maximele
pe
coloane;
Vaslui, Suceava, Botoani, Galai. Din Ucraina vin participani din oraele: Odesa,
f) minimele
pe Hotin.
linii; Forma aplicaiei va arta n modul urmtor:
Donek,
Herson,
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) La
sortarea
tuturorunui
elementelor
matriceicu(cresctor
sau descresctor);
efectuarea
click pe butonul
titlul Inregistrare
datele despre
b)
sortarea
elementelor
matricei
pe
linii
(cresctor
sau
descresctor);
concurent vor fi adugate ntr-o component de tip TMemo. Pentru aceasta va fi creat
sortarea
matricei
coloane (cresctor
descresctor);
unc)meniu
de elementelor
tip TPopupMenu,
prinpeintermediul
cruia vasau
fi posibil
salvarea datelor
ntr-un fiier, ct i excluderea tuturor datelor despre concureni.

71
70

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

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.
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:
Creai
aplicaia
Test. Petotal
suprafaa
formei vor fi plasate dou butoane de
a)5.Total
va
afia numrul
de participani;
comand
cu
titlurile
respectiv:
Lanseaza
testpentru
i Verific
test.
La efectuarea unui click
b) Tari va afia numrul de participani
fiecare
ar;
pec)primul
buton
se
vor
afia
5
ntrebri,
fiecare
din
ele
oferind
5 variante
rspuns.
Oras va afia oraul cu cei mai muli participani, n caz c
sunt maidemulte
Duporae,
indicarea
se vaacestora,
efectua un
clickdepenumrul
butonulde
cuparticipani.
titlul Verific test.
se vorrspunsurilor
afia denumirile
urmat
Efectuarea unui click pe suprafaa acestuia va afia numrul de rspunsuri corecte i
timpul necesar pentru indicarea rspunsurilor.
10. Creai aplicaia Registru electronic. Prin intermediul unei componente
StringGrid se vor introduce datele despre studenii unei grupe. Registrul electronic va
6. Creai aplicaia Calculator. Prin intermediul acestei aplicaii vor fi efectuate
oferi urmtoarele posibiliti:
operaii cu data calendaristic: adunare, scdere, comparaie, transformare (din dat
a) Determinarea mediei pentru fiecare student;
n zile, saptmni, luni i reciproc).
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;
7.
Creai aplicaia
Orarul
studentului. n dosarul proiectului vor fi create apte
d) Afiarea
studenilor
restanieri;
fiiere
cu
titlurile
respectiv:
luni.txt,
e) Afiarea studenilor emineni. ..., 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 12.
- decembrie
i 1 iunie - 13 iunie studentul se
Aplicaii 30
cu decembrie
Data Calendaristic
afl n sesiune.
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.
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 vaAlarm.
afia unPe
mesaj
corespunztor
au rmas
mai
puin Prin
de 24
2. Creai
aplicaia
suprafaa
formei vadac
fi creat
un ceas
digital.
ore
pn
la
evenimentul
respectiv.
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
74
73

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

11.6.Elaborai
Creai aplicaia
un proiect
Depozit.
prin intermediul
Fereastra aplicaiei
cruia seva
vorarta
efectua
n modul
operaii
urmtor:
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.

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


intermediul
butonului
cu titlul
Adauga
in Cos medicamentelor
numele produsului
i farmacii.
cantitatea acestuia
12. Elaborai
un proiect
pentru
gestiunea
unei
vor
fi adugate
n componenta
ListBox.
La efectuarea
unui click
pe butonul cu pre,
titlul
Informaiile
pentru
medicamentele
din farmacii
sunt: numele
medicamentului,
Achita
se
va
afia
suma
ce
necesit
a
fi
achitat
pentru
produsele
selectate.
Pentru
cantitate, data primirii, data expirrii. Evidena medicamentelor se va efectua printr-o
Componenta
ComboBox
va fi de
creat
un meniu
contextual
cu 2 opiuni:
structur de date
de tip arbore
cutare.
Aplicaia
va conine
un meniu prin
a)
adaug

pentru
adugarea
unui
produs
n
depozit
ntr-o
anumit
cantitate;
intermediul cruia se vor efectua urmtoarele operaii:
b)
exclude

pentru
excluderea
unui
produs
din
depozit.
a) ncrcarea datelor despre medicamente din fiier i prin intermediul unui
Pentru componenta
ListBox vadatelor;
fi creat un meniu contextual cu opiunea
formular
destinat introducerii
exclude,
pentru
a oferi
utilizatorului
de a exclude un produs.
b) cutarea
unui
medicament
dupposibilitatea
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
7. Elaborai un proiect care va permite vizualizarea imaginilor dintr-un
specificat.
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.

Elaborai
aplicaie
prin
creiadevatexte
fi rezolvat
SUDOKU.
8.13.
Elaborai
unoproiect
care
va intermediul
simula un editor
similarjocul
aplicaiei
Prin intermediul componentei StringGrid utilizatorul va introduce numerele n cutie.
Notepad.
Efectuarea unui click pe suprafaa butonului cu titlul Rezolvare, va rezolva jocul.
9. Elaborai un proiect care va simula un editor de imagini (similar aplicaiei
Paint).
conine Operaii
instrumente
specificeCu
pentru
desenarea
De
14.Editorul
Elaboraivaaplicaia
cu mulimi.
ajutorul
a doufigurilor.
componente
asemenea
va
permite
ncrcarea
i
salvarea
unei
imagini.
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:
Creai aplicaia
intermediul
a)10.
reuniune
va afiaCalculator.
elementelePrin
mulimii
A B;aplicaiei se va oferi
utilizatorului
posibilitatea
de a efectua:mulimii A B;
b) intersecie
va afia elementele
a)
operaii
cu
numere
reale;
c) diferena va afia elementele mulimii A\B;
b)
operaii de element
conversie
dintr-un
sistem
n altul;
d) incluziune
va
verifica
dacde
unnumeraie
element (va
fi introdus prin
c)intermediul
operaii trigonometrice;
unei cutii de editare) se include n mulimea A;
d) incluziune
operaii logaritmice.
e)
mulimi va verifica dac mulimea A se include n mulimea B;

79
78

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


Stretch=true;
Align=alClient;
AnsiString s;
ADOQuery1 setm urmtoarele proprieti:
Table1->First();
ComboBox1->Clear();
Connection= ADOConnection1;
while(!Table1->Eof){
Name=Query;
s=AnsiString(Table1->FieldValues["Nume
produs"]);
Pentru forma principal setm urmtoarele
proprieti:
ComboBox1->Items->Add(s);
Name=Main;
Table1->Next();
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
Problema2
Evidena crilor pentru toate formele;
Includem
n
antetul BCB
fiecrui
*.cpp fiierele
(unit1.h
unit8.h),
Elaborai un proiect
prinfiier
intermediul
cruia header
se va duce
evidena
crilor
dup
necesitate;dac schema bazei de date are urmtoarea structur:
unei biblioteci,
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:
AdaugaCautaTiparAdministrare
CarteDupa titluToate cartile
AutorDupa limba Liste cu autori
EdituraDupa pret
LimbaDupa data
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;
Se va plasa componenta PopupMenu1 cu opiunea Adauga autor,
Active=true;
DBLookupComboBox1:
Name=Carti;
DataSource=Main->Carte;
ListSource=Main->Autor;
Procedm similar i n cazulDataField=id_autor;
componentelor ADOTable2,
ADOTable3, ADOTable4
ListField=nume;
KeyField=id_autor;PopupMenu=PopupMenu1;
modificnd proprietile Name i TableName corespunztor n Autori, Edituri, Limbi;
Se va plasa
componenta
PopupMenu2
cu opiunea Adauga limba;
DataSource1
setm
urmtoarele
proprieti:
DBLookupComboBox2:
DataSet=Carti, modificm valoarea proprietii Name cu Carte, procedm
DataSource=Main->Carte;
DataField=id_limba;
ListSource=Main->limba;
similar i n cazul urmtoarelor
componente DataSource2,
DataSource3,
ListField=limba;
KeyField=id_limba;PopupMenu=PopupMenu2;
DataSource4 cu valorile
proprietii Name corespunztor Autor, Editura, Limba;
Se va plasa
Image1
setmcomponenta
urmtoarelePopupMenu3
proprieti: cu opiunea Adauga editura;
DBLookupComboBox3:
DataSource=Main->Carte;
DataField=id_editura;
Picture ncrcm o imagine;
ListSource=Main->editura;ListField=nume;
KeyField=id_editura;PopupMenu=PopupMenu3;

85
84

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

3. Elaborai
4. Creai otabelul
aplicaie
angajati.db
care n baza
cu urmtoarele
datelor din tabelul
cmpuriangajati.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:
Setai
cmpurilor
nct sdata
nu naterii);
fie posibil introducerea
a)a)celui
maiproprietile
tnr angajat
(numele, astfel
prenumele,
valorilor
negative
n
cmpurile
cu
valori
numerice,
iar valoarea implicit a lor
b) angajatul cu salariu maxim (numele, prenumele, salariul);
s
fie
0.
c) angajatul cu salariu minim (numele, prenumele, salariul);
Introducei
20 de nregistrri
i salvai
tabelul.
d)b)numrul
de salariai
al cror salariu
depete
salariul mediu.
5. Creai dou fiiere sql n baza tabelului angajati.db, care va permite afiarea
5. Creai
o copie a tabelului angajati.db. Redenumii tabelul n salariati.db. n
urtoarele
date:
baza
acestui
tabel,
elaborai
o aplicaie
va Salariu
permite>1500.
majorarea
salariului
cu 15%,
a) Cmpurile Nume,
Prenume,
Salariu,care
unde
Datele
vor fi afiate
20%,
25%
50%.
Procentul
de
majorare
a
salariului
va
fi
indicat
prin
intermediul
descresctor dup salariu;
componentelor
de tip cu
TRadioGroup.
va permite
doardect
o singur
b) Lista angajailor
o vechime nSe
munc
mai mare
5 ani,majorare.
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.
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
Aplicaii cuunei
Tabele
urmeaz a fi exclus va fi indicat prin2.intermediul
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.
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
se vatabelul
utilizancte
o singur n
7. Creai
o copie
a tabelului
angajati.db.aplicaiei
Redenumii
salariati.db.
componet de tipul : TTable, TDataSource, TDBGrid.
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)2.numele
i salariul
angajatului
celntr-o
mai mare
salariu; de tip TDBGrid
Elaborai
o aplicaie
care va cu
afia
component
c)
numele
i
salariul
angajatului
cu
cel
mai
mic
salariu;
urmtoarele coloane din tabelul angajai.db a aliasului BCDEMOS:
d)
salariul mediu
tuturor
angajailor.
a) coloana
Nume,caracteristic
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;
Creai Telefon,
tabelul salariati.db,
n baza
tabelului
angajati.db
utilitarul
c) 8coloana
fonul de culoare
verde,
culoarea
textuluiutiliznd
de culoare
alb,
Database
Desktop.
Elaborai o aplicaie prin intemediul creia din tabelul angajati.db
limea
60;
vor
copiai Data_angajarii,
n tabelul salariati.db
5 angajai
cel culoarea
mai maretextului
salariu de
i 5culoare
angajai cu
d)ficoloana
fonul de
culoare cu
roie,
cel mai
salariu.
alb,mic
limea
50;
e) coloana salariu, fonul de culoare roie, culoarea textului de culoare alb,
limea 50.
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
96

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

c)
a) Formular de excludere
adugare prin
prinintermediul
intermediulacestuia
acestuiase
sevor
va permite:
introduce datele
Excluderea
unuirelaiei
automobil;
despre
cri n baza
de mai sus.
b) Formular
Excluderea
de vizualizare
unei mrci
(acest
(excluderea
formularunei
nu vor
mrci
conine
presupune
componente
excluderea
de tipul
tuturor
automobilelor
de marca respectiv);
TDBGrid)
prin intermediul
acestuia se vor afia:

Datele
Excluderea
despreunui
toate
tipcrile,
(excluderea
despreunui
toi tip
autorii;
presupune excluderea tuturor
automobilelor
Autoruldecutipul
celerespectiv).
mai multe cri;
d)
Formular
Cartea pentru
cea maiefectuarea
scump; de operaii prin intermediul acestuia se va
permite:
Numrul de cri cu o vechime mai mare de 10 ani.
c) Formular
Modificarea
de excludere
datelor despre
prin intermediul
un automobil;
acestuia se va permite:
Excluderea
Modificarea
mrcii

unei
cri;unui automobil;

Excluderea
Modificarea
unui
tipului.
autor (excluderea unui autor presupune excluderea tuturor
n cadrul
proiectului
vor fi introduse
crilor
unde figureaz
autorulminim
dat); 15 nregistrri.
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 3.
autor;
Aplicaii cu Interogri
Modificarea limbii de ediie a unei cri.
n cadrul proiectului vor fi introduse minim 15 nregistrri.
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:
20. Elaborai un proiect prin intermediul cruia se va efectua o eviden a
a) Cmpurile Nume, Prenume, Salariu, unde Salariu >2500. Datele s fie aranjate
automobilelor n baza urmtoarei relaii:
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.

Pentru
acest proiect
vor fi elaborate
urmtoarele
formulare:
3. Elaborai
o aplicaie
prin intermediul
creia
vor fi afiate numai nregistrrile
a)
Formular
de
adugare

prin
intermediul
acestuia
se vor
introduce
datele
tabelului tari.db, unde numele rii ncepe cu /conine un
caracter
selectat.
Caracterul
despre
automobile
n
baza
relaiei
de
mai
sus.
va fi selectat prin intermediul unei componente de tip TComboBox, care va conine
b) Formular
dealfabetului
vizualizareenglez.
(aceste formulare nu vor conine componente de tipul
toate
caracterele
TDBGrid) prin intermediul acestuia se vor afia:
Datele despre toate automobilele;
Automobilul cel mai scump;
4.Elaborai
aplicaie
prin intermediul
creia
se va
permite
alegerea
Numrulode
automobile
cu o vechime
nu mai
mare
de 5 ani.
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
101

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:

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

* count ([max a, max]) , dacK2 =


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:

Salariu=Salariu+

max
min 2
avg

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.atribute,
Elaborailimbi,
o aplicaie
tematici
prin
vaintermediul
afia datelecreia
din cmpurile
va fi creat
: DenCarte,
un raport DenTem,
care va
DenLimba,
pret; pentru sptmna curent. n orar se va specifica: ziua, data,
conine
orarul leciilor
lecia,
f) va
profesorul,
determinasala
numrul
de studii.
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 numele5.unui
autor seADO
vor afia crile n care figureaz
Tehnologia
autorul dat i anume cmpurile: DenCarte i pret;
h) ntr-o component ComboBox se vor introduce toate datele din Cmpul
Microsoft
ADO
DataAlegerea
Objects) uneia
asigur
accesopiuni
aplicaiilor
client
la date.
DenLimba
din (ActiveX
tabelul limbi.
dintre
va afia
datele
Pentrudespre
implementarea
modelului ADO
Borland
C++ cmpurile:
Builder ofer
paleta de
crile cu caracteristica
aleas
i anume
DenCarte
i AnEd.
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:
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)1.afiarea
crilor
dup ara de
n care
a fost
editat; din fiecare tabel al bazei de
Se va oferi
posibilitatea
a afia
informaia
c)
afiarea
crilor
dup
tematic;
date. La elaborarea aplicaiei se va utiliza cte o singur component de tipul:
d) afiarea crilor
dup pre;
TADOTable,
TDataSource,
TDBGrid.
e) afiarea crilor dup starea acestora.
2. Elaborai o aplicaie care va permite afiarea urmtoarelor informaii din
baza de date:
o aplicaie
la selectarea
a)6.vaElaborai
afia informaia
dincare
tabelul
autori; numelui i prenumelui cititorului va
afia
cartea
i data
cnd
aceasta va fi restituit.
b) va
afiamprumutat
informaia din
tabelul
cititori;
c) din tabelul atribute va afia datele urmtoarelor cmpuri: DenCarte, AnEd,
NumPag;
6. Proiecte
pentru
gestiunea
bazelor de
date
d) din tabelele atribute,
tari va afia
datele
din cmpurile:
DenCarte,
DenTara,
pret, AnEd;
e)Pentru
va determina
numrul
cititorilor
cu un
studii
: medii,
medsp;
din tabelele
urmtoarele
cazuri
elaborai
proiect
care super,
va permite
prelucrarea
bazei
de date:
107
106

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

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. GradyBooch.Object-OrientedDesignwithApplications.
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
Servicii de
telefonie
mobil
10.7.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

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.

111
110

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