Sunteți pe pagina 1din 22

Ministerul Educaiei al Republicii Moldova

Colegiul Industrial Pedagogic din Cahul

Catedra Informatic

RAPORT
practica de iniiere n specialitate

Efectuat

Munteanu Tudor
(Numele, prenumele studentului, grupa)

Verificat _________________________
(Numele, prenumele coordonatorului)

Nota ____________________________

Cahul, 2014

Cuprins
I.Introducere................................................................................................................ 3
II.Obiectivele practicii:................................................................................................. 4
III.Sarcina Individual.................................................................................................. 5
CONDITIA PR.I............................................................................................................. 5
LISTINGUL PROGRAMULUI........................................................................................... 5
REZULTATELE TESTRII................................................................................................ 5
CONDITIA PR.II............................................................................................................. 6
LISTINGUL PROGRAMULUI........................................................................................... 6
REZULTATELE TESTRII............................................................................................. 7
CONDITIA PR.III............................................................................................................ 7
LISTINGUL PROGRAMULUI........................................................................................... 8
REZULTATELE TESTRII............................................................................................. 9
CONDITIA PR.IV........................................................................................................... 9
LISTINGUL PROGRAMULUI........................................................................................... 9
REZULTATELE TESTRII........................................................................................... 12
CONDITIA PR.V.......................................................................................................... 12
LISTINGUL PROGRAMULUI......................................................................................... 12
REZULTATELE TESTRII........................................................................................... 13
CONDITIA PR.VI......................................................................................................... 14
LISTINGUL PROGRAMULUI......................................................................................... 14
REZULTATELE TESTRII........................................................................................... 16
CONDITIA PR.VII........................................................................................................ 16
LISTINGUL PROGRAMULUI......................................................................................... 16
REZULTATELE TESTRII........................................................................................... 18
MENIUL...................................................................................................................... 18
3-INSERAREA............................................................................................................. 18
2-EXCLUDEREA.......................................................................................................... 19
CONDITIA PR.VIII....................................................................................................... 19
LISTINGUL PROGRAMULUI......................................................................................... 20
REZULTATELE TESTRII........................................................................................... 21
List bibliografic...................................................................................................... 21

I.Introducere
Obiectivele practicii sunt realizarea programelor n stilul programarii orientate pe obiect.
Principalul obiectiv al acestui program este realizarea, s ne pun ntr-o situaie din care noi s
putem gsi o soluie. Odat cu realizarea programului, noi ca studeni ne vedem deja n postura
de angajat care are o anumit responsabilitate de a elabora programul conform cerinelor date de
conductorul practicii. Dup finisarea programelor, i a perioadei de practic, noi devenim mai
maturi n domeniul nostru. Toate dificultile ntlnite pe perioada practicii, sunt doar un plus
pentru noi.

Stilul de programare orientat pe obiecte (POO) este utilizat pentru rezolvarea problemelor
de informatic cu un grad sporit de dificultate. Conform acestui stil programul const dintr-o
colecie de obiecte, uniti individuale de cod care interacioneaz ntre ele. Elaborarea unui
program n stilul POO presupune a organiza codul acestuia n uniti de program care s opereze
cu obiecte. n acest sens elaborarea programului const n prelucrarea obiectelor existente sau
crearea lor n dependen de specificul problemei.

Problemele rezolvate au ca scop prezentarea principalelor concepte care stau la baza


POO. n baza acestora este prezentat metodologia de creare a unei clase; de definirea datelor i
prelucrarea metodelor; de iniializare a datelor obiectului prin intermediul constructorului; de
creare a relaiilor dintre clase (motenire) i a relaiilor dintre obiecte (agregare). Programele sunt
rezolvate n baza limbajului de programare C++.

C++ este un limbaj de programare general, compilat. Este un limbaj multi-paradigm, cu verificarea
static a tipului variabilelor ce suport programare procedural, abstractizare a datelor, programare
orientat pe obiecte. n anii 1990, C++ a devenit unul din cele mai populare limbaje de programare
comerciale, rmnnd astfel pn azi.

Bjarne Stroustrup de la Bell Labs a dezvoltat C++ (iniial denumit C cu clase) n anii 1980, ca o serie de
mbuntiri ale limbajului C. Acestea au nceput cu adugarea noiunii de clase, apoi de funcii
virtuale, suprascrierea operatorilor, motenire multipl, abloane (englez template) i excepii. Limbajul
de programare C++ a fost standardizat n 1998 ca i ISO 14882:1998, versiunea curent fiind din 2003,
ISO 14882:2003.

II.Obiectivele practicii:

Obiectivele generale ale practicii de iniiere n specialitate:


-

consolidarea cunostintelor teoretice, obtinute de studenti pe parcursul studierii limbajelor de


programare (Turbo Pascal, Borland C++);

insusirea tehnologiei de elaborare a programelor mari;

dezvoltarea abilitatilor muncii de sine statatoare;

formarea deprinderilor de cercetator.

Obiectivele de referint:
-

s aplice metodologia de creare a unei clase;

s aplice metodologia de definirea datelor i prelucrarea metodelor;

s aplice metodologia de iniializare a datelor obiectului prin intermediul constructorului;

s aplice metodologia de creare a relaiilor dintre clase (motenire);

s aplice metodologia de iniializare a relaiilor dintre obiecte (agregare).

s elaboreze subprograme pentru prelucrarea datelor conform prescriptiilor din problema


formata;

s creeze un meniu, destinat gestionarii executiei la solicitare a subprogramelor, associate


subsarcinilor respective;

s aplice tehnici de testare si depanare a programului elaborate.

III.Sarcina Individual
CONDITIA PR.I
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.
LISTINGUL PROGRAMULUI
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <iomanip.h>
class ecuatie1 {
float a,b;
public:
void citire(){cout<<"a=";cin>>a;cout<<"b=";cin>>b;};
void init(double p,double q){a=p;b=q;}
void afisare(){if(b>0) cout<<a<<"x+"<<b<<"=0"; if(b<0) cout<<a<<"x"<<b<<"=0"; };
float solutie(){return -b/a;};
};
main()
{ecuatie1 A,B;
A.citire();
B.init(4.5,9);
A.afisare();
cout<<endl;
cout<<"x="<<A.solutie()<<endl;
B.afisare();
cout<<endl;
cout<<"x="<<B.solutie();
getch();
};
REZULTATELE TESTRII

CONDITIA PR.II
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.
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.
LISTINGUL PROGRAMULUI
main(){

#include <iostream.h>
#include <conio.h>
#include <iomanip.h>
class
numar{
double n1,n2;
public:
numar(){n1=n2=0;}
numar(double a,double b){n1=a;n2=b;}
numar(numar&);
~numar(){};
void citire();
void afisare();
double valoare(int);
~numar(){cout<<"Obiectul a fost
distrus !!!"<<endl;}
};
numar::numar(numar &c){
n1=c.n1;n2=c.n2;
}
void numar::citire(){
cout<<"Suma depozitului:";cin>>n1;
cout<<"Procent:"; cin>>n2;
}
void numar::afisare(){
cout<<n1<< setw(10) <<n2 << '\n';
}
double numar::valoare(int a){
float b=n1;
for(int i=1;i<=a;i++)
b=b*15/100+b;
return b;}

numar a;//constructor fara parametri


a.citire();
cout<<"SUMA | "<<"PROCENT"<<endl;
cout<<"---------------|"<<endl;
a.afisare();
numar b(100,75);//constructor cu parametri
b.afisare();
numar c(a);//constructor de copiere
c.afisare();
cout<<endl;
a.afisare(); cout<<endl;
cout<<"ANUL | "<<"DOBINDA"<<endl;
cout<<"---------------|"<<endl;
for(int i=1;i<=4;i++)
cout<<i<<"
"<<a.valoare(i)<<endl;
cout<<endl;b.afisare();cout<<endl;
cout<<"ANUL | "<<"DOBINDA"<<endl;
cout<<"---------------|"<<endl;
for(int i=1;i<=4;i++)
cout<<i<<"
"<<b.valoare(i)<<endl;
cout<<endl;c.afisare();cout<<endl;
cout<<"ANUL | "<<"DOBINDA"<<endl;
cout<<"---------------|"<<endl;
for(int i=1;i<=4;i++)
cout<<i<<"
"<<c.valoare(i)<<endl;
numar *p; //utilizarea pointerilor
p=new numar;//apelarea constructorului fara
parametri
p->afisare();
delete p;//distrugerea obiectului
p=new numar(500,9);//apelarea
constructorului cu parametri

p->afisare();
delete p;
p=new numar(b);//apelarea constructorului
de copiere

p->afisare();
delete p;
getch();}

REZULTATELE TESTRII

CONDITIA PR.III
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.
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.

LISTINGUL PROGRAMULUI
#include <iostream.h>
float salariu(){return nro*plo;}
#include <string.h>
};
#include <stdlib.h>
main()
#include <conio.h>
{
#include <iomanip.h>
salariat V[100]; int n,index; float aux;
class persoana {
cout<<"n="; cin>>n;
public:
for(int i=1;i<=n;i++)
char nume[20],prenume[20];
V[i].citire();
int anul; char cnp[14];
cout<<" Nume | Prenume | Anul |
public:
CNP
| ore lucrate | pl/h | An
persoana(){}
angaj"<<endl;
~persoana(){};
for(int j=1;j<=n;j++)
citire(){
V[j].afisare();
cout<<"Nume:>"; cin>>nume;
aux=V[1].anul;
cout<<"Prenume:>"; cin>>prenume;
for(int i=1;i<=n;i++)
cout<<"Anul:>"; cin>>anul;
if(aux<V[i].anul) aux=V[i].anul;
cout<<"CNP:>"; cin>>cnp;
for(int i=1;i<=n;i++)
}
if(aux==V[i].anul) cout<<endl<<"Slariatul
afisare()
cel mai tinar:"<<V[i].nume<<"
{cout<<nume<<setw(10)<<prenume<<setw
"<<V[i].prenume<<" "<<V[i].anul<<"
(10)<<setw(10)<<anul<<setw(18)<<cnp;}
"<<V[i].salariu()<<endl;

};
class salariat:public persoana {
public:
int nro,plo,an;
public :
citire(){
persoana::citire(); cout<<"nr. ore
luc:>";cin>>nro; cout<<"plata/h:>";
cin>>plo; cout<<"Anul angajarii:";cin>>an;
clrscr(); }
afisare(){persoana::afisare();
cout<<setw(10)<<nro<<setw(10)<<plo<<set
w(10)<<an<<""<<endl;}

aux=V[1].salariu();
for(int i=1;i<=n;i++)
if(aux<V[i].salariu()) aux=V[i].salariu();
for(int i=1;i<=n;i++)
if(aux==V[i].salariu())
cout<<endl<<"Slariatul cu salariul
maxim:"<<V[i].nume<<"
"<<V[i].prenume<<" "<<V[i].anul<<"
"<<V[i].salariu()<<endl;
getch();
};

REZULTATELE TESTRII

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

LISTINGUL PROGRAMULUI
class dreptunghi:public doi {
public:
citire(){doi::citire();}
afisare(){doi::afisare(); cout<<"
Aria:"<<suprafata()<<"
"<<"Perimetru:"<<perimetru()<<endl;}
float suprafata(){return doi::suprafata();}
float perimetru(){return doi::perimetru()*2;}
};
class triunghi_dreptunghic:public doi {
public:

class doi {
public :
float x,y;
public :
citire(){cin>>x>>y;}
doi(){} ;
~doi(){} ;
afisare(){cout<<"Laturile:"<<x<<","<<y;}
float suprafata(){return x*y;};
float perimetru(){return (x+y);};
};

afisare(){doi::afisare(); cout<<"
Aria:"<<suprafata()<<"
"<<"Perimetru:"<<perimetru()<<endl;}
float suprafata(){return doi::suprafata()/2;}

float perimetru(){return
sqrt(pow(x,2)+pow(y,2))+doi::perimetru();}
};

int aranj(float a,float b)


{
if(a==b)return 1; else return 0;}
main()
{ for(;;){ int i;
dreptunghi a[100];
triunghi_dreptunghic b[100];
int n;
cout<<"n="; cin>>n;
for(int i=1;i<=n;i++)
{ cout<<"Intr. laturile:";
a[i].citire();
b[i].x=a[i].x;
b[i].y=a[i].y;
}
for(int i=1;i<=n;i++){
}
cout<<"Dreptunghi"<<endl;
for(int i=1;i<=n;i++)
a[i].afisare(); cout<<endl;
cout<<"Triunghi"<<endl;
for(int i=1;i<=n;i++)
b[i].afisare();
cout<<endl;
cout<<"Figura cu suprafata maxima"<<endl;
float max=a[1].suprafata();
int k=0,p=0;
for(int i=1;i<=n;i++)
if(a[i].suprafata()>max)
{max=a[i].suprafata(); k=i;;}
float max1=b[1].suprafata();
for(int i=1;i<=n;i++)
if(b[i].suprafata()>max1)
{max1=b[i].suprafata();p=i;}
if(max>max1) {cout<<"dreptunghi:"; if
(n==1) a[1].afisare(); else a[k].afisare();}
else

{if (n==1) b[1].afisare(); else


cout<<"Triunghi:"; b[p].afisare();}
////////////////////////////////////////////
cout<<"Figura cu perimetru maxim "<<endl;
max=a[1].perimetru();
k=0,p=0;
for(int i=1;i<=n;i++)
if(a[i].perimetru()>max)
{max=a[i].perimetru(); k=i;;}
max1=b[1].perimetru();
for(int i=1;i<=n;i++)
if(b[i].perimetru()>max1)
{max1=b[i].perimetru();p=i;}
if(max>max1) {cout<<"dreptunghi:";
if(n==1) a[1].afisare(); else a[k].afisare();}
else
{if(n==1) a[1].afisare(); else
cout<<"Triunghi:"; b[p].afisare();}
float suma=0;
for(int i=1;i<=n;i++)
suma+=a[i].suprafata()+b[i].suprafata();
cout<<endl;
cout<<"Suprafata total="<<suma;
cout<<endl;
suma=0;
for(int i=1;i<=n;i++)
suma+=a[i].perimetru()+b[i].perimetru();
cout<<"Perimetrul total="<<suma;
cout<<endl<<endl;
float v[100];
dreptunghi aux; int ok;
do{
ok=1;
for(i=1;i<=n-1;i++)
if(a[i].suprafata()<a[i+1].suprafata())
{ok=0;
aux=a[i];
a[i]=a[i+1];
a[i+1]=aux;
}
}
while(ok!=1);

triunghi_dreptunghic aux1;
do{
ok=1;
for(i=1;i<=n-1;i++)
if(b[i].suprafata()<b[i+1].suprafata())
{ok=0;
aux1=b[i];
b[i]=b[i+1];
b[i+1]=aux1;
}
}
while(ok!=1);
for(int i=1;i<=n;i++)
v[i]=a[i].suprafata();
for(int i=1;i<=n;i++)
v[n+i]=b[i].suprafata();

//////////////
float schimb;
do{
ok=1;
for(i=1;i<=2*n-1;i++)
if(v[i]<v[i+1])
{ok=0;
schimb=v[i];
v[i]=v[i+1];

v[i+1]=schimb;
}
}
while(ok!=1);
do{
ok=1;
for(i=1;i<=2*n-1;i++)
if(v[i]==v[i+1])
{ok=0;
v[i+1]=0;
}
}
while(ok!=1);
//////////////
k=1;
for(int i=1;i<=2*n;i++){
for(int i=1;i<=n;i++) {
if(aranj(a[i].suprafata(),v[k])) {cout<<"
Dreptunghi: ";a[i].afisare();}
if(aranj(b[i].suprafata(),v[k]))
{cout<<"Triunghi_Dre: ";b[i].afisare(); }}
k++; }
getch();
}}

REZULTATELE TESTRII

CONDITIA PR.V
Se consider ierarhia format din clasele:
Clas de baz: Punct cu cmpurile: coordonatele punctului i culoarea;
Clase derivate: triunghi echilateral (punctul se consider a fi n centrul triunghiului): lungimea
laturii; patrat: lungimea laturii, punctul se consider a fi n centrul ptratului; figur (triunghi
nscris n ptrat) derivata claselor cerc i ptrat.
Metodele de citire i desenare vor fi implementate pentru fiecare clas din ierarhie. De la
tastatur se citete un numr ntreg n (n<100), numrul figurilor din ierarhie. Elaborai un
program prin intermediul cruia vor fi afiate figurile la ecran.
LISTINGUL PROGRAMULUI
}
afisare()
{cout<<"("<<x<<","<<y<<") "<<c;
}
};

#include <iostream.h>
#include <conio.h>
#include <math.h>
class punct
{protected:
int x,y;
char c[15];
public:
punct(){};
~punct(){};
citire()
{cout<<"Coordonatele:";cin>>x>>y;
cout<<"Culoarea:";cin>>c;

class triunghi :public punct


{protected :int l;
public:
triunghi(){};
~triunghi(){};
citire()
{punct::citire();

cout<<"Latura triunghiului:";cin>>l;
}
afisare()
{punct::afisare();
cout<<" Latura Triunghiului "<< l<<" cm ,";
}
};
class patrat :public punct
{protected: int p;
public:
citire()
{cout<<"Latura patratului:";cin>>p;
}
afisare()
{cout<<" Latura Patratului "<<p<<"
cm"<<endl;
}
};
class figura: public triunghi,public patrat
{public:
citire()
{triunghi::citire() ; patrat::citire();
}

afisare()
{float h;
h=sqrt(3)*l/2.0;
if(l==p) {triunghi::afisare();
patrat::afisare(); }else
cout<<"Triunghiul cu latura de "<<l<<" cm
"<<"nu se poate inscrie in patratul cu latura
de "<<p<<" cm"<<endl;
}
};
main()
{figura a[100];
int n;
cout<<"Nr.de figuri:"; cin>>n;
for (int i=1;i<=n;i++)
{cout<<"Figura "<<i<<endl;
a[i].citire();}
for (int i=1;i<=n;i++)
a[i].afisare();
getch();
}

REZULTATELE TESTRII

CONDITIA PR.VI
Se consider clasa timp, cu urmtoarea structur:

class timp{
int ora,min, sec;//14:24:35
public:
timp();
timp(int,int,int);
//
};
Elaborai un program, prin intermediul cruia pentru clasa timp vor fi suprancrcai:
a) Operatorul + va efectua suma dintre dou obiecte de tipul timp;
b) Operatorul - va efectua diferena dintre dou obiecte de tipul timp;
c) Operatorul ++ incrementarea cu o secund;
d) Operatorul -- decrementarea cu o secund;
e) Operatorul =
f) Operatorii >>,<< vor citi/afia timpul n formatul ora:min:sec, de ex. 14:24:35;
g) Operatorii de comparaie ==,!=, >, >=, <,<=;
h) Se va realiza o metod, care va prelucra timpul n forma corect, de ex. dac
timpul va fi 2:59:63, va fi transformat n 3:00:03.
LISTINGUL PROGRAMULUI
#include <iostream>
#include <conio.h>
#include <math.h>
class timp {
int ora,min,sec;
public :
timp(){};
~timp(){} ;
timp(int t,int g,int m){ora=t;min=g;sec=m;};
/////operator>>>/////////////////
friend istream& operator >>(istream&
is,timp& f)
{
is>>f.ora;
is>>f.min;
is>>f.sec;
return is;
};
////operator<<////////////////////
friend ostream& operator << (ostream& os,
timp d)
{os<<d.ora<<":"<<d.min<<":"<<d.sec;
return os;}
////simplificare////////////

simpl(int r){int h=0,m=0;


ora=r/3600;
if(ora>24) {while(ora>24){ora-=1; h++;}}
min=(r-(ora+h)*3600)/60; if(min>60)
{while(min>60){min-=1; m++;}}
sec=r-(ora+h)*3600-(min+m)*60;
ora=ora+h;
}
////operator+///////////////
timp operator +(timp T)
{ timp R; double r;
R.ora=ora+T.ora;
R.min=min+T.min;
R.sec=sec+T.sec;
r=R.ora*3600+R.min*60+R.sec;
R.simpl(r);
return R;}
////operator-///////////////
timp operator -(timp T)
{ timp R; double r;
R.ora=ora-T.ora;
R.min=min-T.min;
R.sec=sec-T.sec;
r=R.ora*3600+R.min*60+R.sec;
R.simpl(r);
return R;}

//operator++////////////////
timp operator ++()
{ double r;
sec=sec+1;
r=ora*3600+min*60+sec;
simpl(r);
return *this;}

if(ora*3600+min*60+sec>=T.ora*3600+T.m
in*60+T.sec) return 1; else return 0; }

///operator--///////////////
timp operator --()
{ double r;
sec=sec-1;
r=ora*3600+min*60+sec;
simpl(r);
return *this;}
//operator=///////////
timp operator =(timp T)
{ ora=T.ora;
min=T.min;
sec=T.sec;
return *this;}
//////operator==///////////
int operator ==(timp T)
{ if(ora==T.ora && min==T.min &&
sec==T.sec) return 1; else return 0; }
///operator!=//////////////
int operator !=(timp T)
{ if(ora!=T.ora || min!=T.min || sec!=T.sec)
return 1; else return 0; }
///operator>//////////////
int operator >(timp T)
{
if(ora*3600+min*60+sec>T.ora*3600+T.mi
n*60+T.sec) return 1; else return 0; }
///operator<//////////////
int operator >=(timp T)
{

};
main()
{ timp P;
timp M(11,11,10);
cout<<"I Ora:"<<endl;
cin>>P;
cout<<"II Ora:"<<endl;
cout<<M<<endl;
cout<<P<<"+"<<M<<"="<<(P+M);
cout<<endl;
if((P>M)==1)
cout<<P<<"-"<<M<<"="<<(P-M); else
cout<<M<<"-"<<P<<"="<<(M-P);
cout<<endl;
cout<<(P--)<<"++"<<"="<<(P++);
cout<<endl;
cout<<(P++)<<"--"<<"="<<(P--);
cout<<endl;

int operator <=(timp T)


{
if(ora*3600+min*60+sec<=T.ora*3600+T.m
in*60+T.sec) return 1; else return 0; }

if((P==M)==1) cout<<P<<"=="<<M<<endl;
if((P!=M)==1) cout<<P<<"!="<<M<<endl;
if((P>=M)==1) cout<<P<<">="<<M<<endl;
if((P<=M)==1) cout<<P<<"<="<<M<<endl;
cout<<P; cout<<"="<<M<<"="<<(P=M);
cout<<endl;
getch();
};

REZULTATELE TESTRII

CONDITIA PR.VII
Elaborai un program prin intermediul cruia vor fi gestionate automobilele
dintr-un salon auto. Despre un automobil se cunosc urmtoarele date: marca, anul
ediiei, culoarea, preul, capacitatea motorului, consumul la 100 km.
LISTINGUL PROGRAMULUI
#include <iostream.h>
cout<<"Anul: ";is>>t->anul;
#include <iomanip.h>
cout<<"Pretul: ";is>>t->pret;
#include <fstream.h>
cout<<"Consum: ";is>>t->consum;
#include <conio.h>
cout<<"Capacitatea: ";is>>t->capacitate;
class SalonAuto{
return is;
char *marca,*culoare;
}
int nr,anul,consum,pret,capacitate;
ostream & operator<<(ostream &os,
SalonAuto *next;//adresa umatorului
SalonAuto *t){
element
os<<t->nr<<setw(21)<<tSalonAuto();
>marca<<setw(10)<<t->culoare;
friend istream & operator>>(istream &,
os<<setw(8)<<t->consum<<setw(6)<<tSalonAuto *&);
>anul<<setw(10)<<t->pret<<setw(12)<<tfriend ostream & operator<<(ostream &,
>capacitate<<endl;
SalonAuto*);
return os;
friend class lista;
}
friend int schimb(SalonAuto *,SalonAuto *);
int schimb(SalonAuto *a, SalonAuto *b){
};
SalonAuto *an,*bn,t;
SalonAuto::SalonAuto(){
if (!a || !b)return 0;
marca=new char[20];culoare=new char[10];
an=a->next;bn=b->next;t=*a;*a=*b;*b=t;aanul=0;consum=0;pret=0;capacitate=0;
>next=an;b->next=bn;
next=NULL;
return 1;
}
}
istream & operator>>(istream &is,
class lista{
SalonAuto *&t){
SalonAuto *prim;//adresa primului element
cout<<"Dati datele despre
din lista
automobil"<<endl;
int n;//numarul total de studenti din lista
cout<<"Numarul masinii: ";is>>t->nr;
public:
cout<<"Marca: ";is>>t->marca;
lista(){prim=NULL;n=0;}
cout<<"Culoarea ";is>>t->culoare;
void creare();

void afisare();
void inserare();
void exclude();
void cauta(char *);
int sort_anul();
int sort_nr();
~lista();
};
void lista::creare(){
SalonAuto *p; ifstream f("lista.in");f>>n;
for(int i=0;i<n;i++){
p=new SalonAuto;
f>>p->nr>>p->marca>>p->culoare>>p>consum>>p->anul>>p->pret>>p>capacitate;
p->next=prim;prim=p;
}f.close();
}
void lista::afisare(){
cout<<"Lista automobilelor"<<endl;
cout<<"NR"<<setw(20)<<"Marca"<<setw(1
0)<<"Culoare";
cout<<setw(8)<<"Consum"<<setw(6)<<"An
ul"<<setw(10)<<"Pret"<<setw(12)<<"Capac
itate"<<endl;
SalonAuto *p;p=prim;
while(p!=NULL){cout<<p;p=p->next;}
}
void lista::inserare(){
SalonAuto *q;q=new SalonAuto;
cin>>q; q->next=prim;prim=q; n++;
}
void lista::exclude(){
SalonAuto *p,*q;
int c;
cout<<"Introdu numarul masinii care va fi
exclus"<<endl;
cin>>c; p=prim;
ifstream f("lista.in");
if(p->nr==c){prim=p->next;delete p;n--;}
else{
while(p->next->nr!=c && p!=NULL)p=p>next;
if(p!=NULL){q=p->next;p->next=q>next;delete q;n--;}
}
lista::afisare();
f.close();

}
void lista::cauta(char *marca){
SalonAuto *p;p=prim;
while(p!=NULL){
if(stricmp(p->marca ,marca)==0)
cout<<p;p=p->next;
}
}
int lista::sort_anul(){
int i,j;SalonAuto *a,*b;
if(!prim)return 0;
a=prim;
for(i=0;i<n-1;i++){
b=a->next;
for(j=i+1;j<n;j++){
if((a->anul)>(b->anul))schimb(a,b);
b=b->next;
}a=a->next;
}
clrscr();
cout<<"Sortarea datelor s-a efectuat cu
succes";getch();
return 1;
}
int lista::sort_nr(){
int i,j;SalonAuto *a,*b;
if(!prim)return 0;
a=prim;
for(i=0;i<n-1;i++){
b=a->next;
for(j=i+1;j<n;j++){
if((a->nr)>(b->nr))schimb(a,b);
b=b->next;
}a=a->next;
}}
lista::~lista(){
SalonAuto *p,*q;
do{
p=prim;prim=prim->next;delete p;
}while(prim!=NULL);
}
main(){
char c;lista g;

g.creare();
do{
clrscr();
cout<<"Tastati"<<endl<<"1-Afisarea
automobilelor"<<endl<<"2-Excluderea unui
automobil";
cout<<endl<<"3-Inserarea unui nou
automobil"<<endl<<"4-Automobile de
marca Ford";
cout<<endl<<"5-Sortare automobilelor dupa
an"<<endl<<"0-Exit"<<endl;

c=getch(); clrscr();
switch(c){
case '1': g.sort_nr();g.afisare();getch();break;
case '2': g.exclude();break;
case '3': g.inserare();break;
case '4':
g.cauta("Ford_Transit");getch();break;
case '5': g.sort_anul();break;
}
}while(c!='0');
}

REZULTATELE TESTRII
MENIUL

3-INSERAREA

1-AFISAREA

2-EXCLUDEREA

5-SORTAREA(DESCRESCATOR)

4-AUTOMOBILE MARCA FORD

CONDITIA PR.VIII
S se construiasc clasa Fracie care reprezint o fracie dat prin numitor i numrtor. Clasa va
conine urmtoarele metode:
a) Constructor;
b) Destructor;
c) Afiarea unei fracii;
d) Simplificarea unei fracii;
e) Suprancrcarea operatorului +(adunare) dintre 2 fracii;
f) Suprancrcarea operatorului -(scdere) dintre o fracie i un numr ntreg;
g) Suprancrcarea operatorului *(produs) dintre un numr ntreg i o fracie;
h) Suprancrcarea operatorului ^(ridicare la putere) dintre un numr ntreg i o fracie;

#include <iostream.h>
#include <math.h>
#include <conio.h>
class fr
{int x,y;
public:
void simpl();
fr();
fr(int){};
~fr(){};
fr operator +(fr);
fr operator -(int n);
friend float operator ^(int,fr);
if (a==0) return b; else return a;}
/////////////////simpl///////////////////////////////
void fr::simpl()
{ int r;
if((x%y)==0) {x=x/y; y=1;} else {
r=cmmdc(x,y);
x/=r;y/=r;
if (x<0 && y<0){x=abs(x);y=abs(y);}}
}
////////////////////putere//////////////////////////////
float operator ^(int n,fr f)
{ float r(21);
r=pow(n,f.x);;
r=pow(r,(1./f.y));
return r;}
///////////////suma//////////////////////////////////////
fr fr :: operator +(fr f)
{fr r(22);
r.x=f.y*x+y*f.x;
r.y=y*f.y;
r.simpl();
return r;
}
////////////////diferenta////////////////////////////////
fr fr:: operator -(int n)
{fr r(23);
r.x=x-y*n;

fr operator *(int n);


afisare(){ if(y==1) cout<<x; else
cout<<x<<"/"<<y;}
};
////////////constructor/////////////////////////////
fr::fr(){
cout<<"Numarator:";cin>>x;
cout<<"Numitor:";cin>>y; cout<<endl;
};
////////////////cmdc////////////////////////////////
int cmmdc(int a,int b)
{ if (a<0) a=abs(a); if (b<0)b=abs(b);
while( a!=0 && b!=0)
{if(a>b) a%=b; else b%=a;}
r.y=y;
r.simpl();
return r;
}
////////////////inmultire////////////////////////////////
fr fr::operator *(int n)
{fr r(0);
r.x=x*n; r.y=y; r.simpl(); return r;}
main()
{
int c;
cout <<"Prima fractie "<<endl;
fr a;
cout <<"A doua fractie "<<endl;
fr b;
cout<<"Nr. intreg " << endl<< "c=";
cin>>c; cout<<endl;
cout<<endl<<"I fractie " ; a.afisare();
cout<<endl<<"II fractie " ; b.afisare();
cout<<endl;

a.afisare(); cout<<"+"; b.afisare();


cout<<"="; (a+b).afisare(); cout<<endl;
a.afisare(); cout<<"-"; cout<<c;
cout<<"="; (a-c).afisare(); cout<<endl;

cout<<c; cout<<"^"; a.afisare();


cout<<"="<<(c^a)<<endl;
cout<<c; cout<<"*"; a.afisare();
cout<<"="; (a*c).afisare(); cout<<endl;
getch();
}

REZULTATELE TESTRII

List bibliografic
1 Anatol Gremalschi, Iurie Mocanu, Ion Spinei, Informatica, Limbajul C++, manual
pentru clasele IX-XI, Editura tiina 1999.
2 Andrei Braicov, Turbo Pascal, Culegere de probleme, Editura Prut Internaional,
2005.
3 Daniela Saru, Algoritmi i Limbaje de Programare, Editura Didactica i
Pedagogica, R.A. Bucureti, 1998.
4 Cornelia Ivasc, Mona Pruna, Tehnici de Programare, Aplicaii, Editura Petrion
Bucureti 1999.
5 V. Cristea, P. Dumitru, C. Giumale s.a., Dicionar de informatic, Editura tiinific
i Enciclopedic, Bucureti, 1981.
6 T.Sorin, Tehnici de programare, Teora, Bucureti, 1996.
7 K. andor, Turbo PASCAL 6.0. Ghid de utilizare, Editura Microlnformatica, ClujNapoca, 1993.
8 O.Chirchin, Metodica predrii informaticii, Chiinu, Tipogr.UPS Ion Creang,
2004.
9 T.Sorin, Tehnici de programare, Bucureti, Editura Teora, 1996.