Raport Practica Informatica

27
Ministerul Educaţiei al Republicii Moldova Colegiul Industrial Pedagogic din Cahul Catedra Informatică RAPORT practica de iniţiere în specialitate Efectuat Munteanu Tudor (Numele, prenumele studentului, grupa) Verificat _________________________ (Numele, prenumele coordonatorului) Nota ____________________________

description

Practica Instructiva

Transcript of Raport Practica Informatica

Page 1: Raport Practica Informatica

Ministerul Educaţiei al Republicii MoldovaColegiul Industrial Pedagogic din Cahul

Catedra Informatică

RAPORTpractica de iniţiere în specialitate

Cahul, 2014

Efectuat Munteanu Tudor (Numele, prenumele studentului, grupa)

Verificat _________________________(Numele, prenumele coordonatorului)

Nota ____________________________

Page 2: Raport Practica Informatica

CuprinsI.Introducere................................................................................................................................................3

II.Obiectivele practicii:..................................................................................................................................4

III.Sarcina Individuală...................................................................................................................................5

CONDITIA PR.I..............................................................................................................................................5

LISTINGUL PROGRAMULUI...........................................................................................................................5

REZULTATELE TESTĂRII.................................................................................................................................5

CONDITIA PR.II.............................................................................................................................................6

LISTINGUL PROGRAMULUI...........................................................................................................................6

REZULTATELE TESTĂRII...................................................................................................................7

CONDITIA PR.III............................................................................................................................................7

LISTINGUL PROGRAMULUI...........................................................................................................................8

REZULTATELE TESTĂRII...................................................................................................................9

CONDITIA PR.IV............................................................................................................................................9

LISTINGUL PROGRAMULUI...........................................................................................................................9

REZULTATELE TESTĂRII.................................................................................................................12

CONDITIA PR.V...........................................................................................................................................12

LISTINGUL PROGRAMULUI.........................................................................................................................12

REZULTATELE TESTĂRII.................................................................................................................13

CONDITIA PR.VI..........................................................................................................................................14

LISTINGUL PROGRAMULUI.........................................................................................................................14

REZULTATELE TESTĂRII.................................................................................................................16

CONDITIA PR.VII.........................................................................................................................................16

LISTINGUL PROGRAMULUI.........................................................................................................................16

REZULTATELE TESTĂRII.................................................................................................................18

MENIUL......................................................................................................................................................18

3-INSERAREA..............................................................................................................................................18

2-EXCLUDEREA...........................................................................................................................................19

CONDITIA PR.VIII........................................................................................................................................19

LISTINGUL PROGRAMULUI.........................................................................................................................20

REZULTATELE TESTĂRII.................................................................................................................21

Listă bibliografică.......................................................................................................................................21

Page 3: Raport Practica Informatica

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 situaţie din care noi să putem găsi o soluţie. Odată cu realizarea programului, noi ca studenţi ne vedem deja în postura de angajat care are o anumită responsabilitate de a elabora programul conform cerinţelor date de conducătorul practicii. După finisarea programelor, şi a perioadei de practică, noi devenim mai maturi în domeniul nostru. Toate dificultăţile întîlnite 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 colecţie de obiecte, unităţi individuale de cod care interacţionează între ele. Elaborarea unui program în stilul POO presupune a organiza codul acestuia în unităţi 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 iniţializare a datelor obiectului prin intermediul constructorului; de creare a relaţiilor dintre clase (moştenire) şi a relaţiilor 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, rămânând astfel până azi.

Bjarne Stroustrup de la Bell Labs a dezvoltat C++ (inițial denumit C cu clase) în anii 1980, ca o serie de

îmbunătățiri ale limbajului C. Acestea au început cu adăugarea noțiunii de clase, apoi de funcții

virtuale, suprascrierea operatorilor, moștenire multiplă, șabloane (engleză template) și excepții. Limbajul

de programare C++ a fost standardizat în 1998 ca și ISO 14882:1998, versiunea curentă fiind din 2003,

ISO 14882:2003.

Page 4: Raport Practica Informatica

II.Obiectivele practicii:

Obiectivele generale ale practicii de iniţiere î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 iniţializare a datelor obiectului prin intermediul constructorului;

- să aplice metodologia de creare a relaţiilor dintre clase (moştenire);

- să aplice metodologia de iniţializare a relaţiilor 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.

Page 5: Raport Practica Informatica

III.Sarcina Individuală

CONDITIA PR.I

Creaţi obiectul ecuaţie1 - va reprezenta o ecuaţie de gradul 1 ax+b=0. date: a, b; metode: citire, afişare, iniţializare, soluţie. Se vor introduce datele despre două ecuaţii şi se vor afişa ecuaţiile introduse cît şi soluţiile 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 TESTĂRII

Page 6: Raport Practica Informatica

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 căruia se va crea tipul de date clasă-pereche. Cîmpul n1 - un număr real (suma depozitul în lei), Cîmpul n2 – număr real (procentul anual). Creaţi metoda valoare(int) – va returna suma de bani împreună cu calcularea dobînzii timp de 1, 2, 3, 4 ani.

LISTINGUL PROGRAMULUI

#include <iostream.h>#include <conio.h>#include <iomanip.h>classnumar{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;}

main(){

numar a;//constructor fara parametria.citire();cout<<"SUMA | "<<"PROCENT"<<endl;cout<<"---------------|"<<endl;a.afisare();numar b(100,75);//constructor cu parametrib.afisare();numar c(a);//constructor de copierec.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 pointerilorp=new numar;//apelarea constructorului fara parametrip->afisare();delete p;//distrugerea obiectuluip=new numar(500,9);//apelarea constructorului cu parametri

Page 7: Raport Practica Informatica

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

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

REZULTATELE TESTĂRII

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, afişare, virsta. Creaţi clasa Salariat, derivata clasei persoana. Pentru clasa salariat vor fi adăugate: date: numărul de ore lucrate, plata pentru o oră, anul angajării; metode: vor fi redefinite metodele de citire şi afişare, salariu. Salariul va fi determinat conform formulei : nr_ore*plata. De la tastatură se citesc datele despre n salariaţi. Elaboraţi un program prin intermediul căruia la ecran se vor afişa datele despre toţi salariaţii, salariatul cel mai tînăr şi salariatul cu salariu maxim.

Page 8: Raport Practica Informatica

LISTINGUL PROGRAMULUI

#include <iostream.h>#include <string.h>#include <stdlib.h>#include <conio.h>#include <iomanip.h>class persoana { public:char nume[20],prenume[20];int anul; char cnp[14];public:persoana(){}~persoana(){};citire(){cout<<"Nume:>"; cin>>nume;cout<<"Prenume:>"; cin>>prenume;cout<<"Anul:>"; cin>>anul;cout<<"CNP:>"; cin>>cnp;

}afisare(){cout<<nume<<setw(10)<<prenume<<setw(10)<<setw(10)<<anul<<setw(18)<<cnp;}

};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<<setw(10)<<an<<""<<endl;}

float salariu(){return nro*plo;}};main(){salariat V[100]; int n,index; float aux;cout<<"n="; cin>>n;for(int i=1;i<=n;i++)V[i].citire();cout<<" Nume | Prenume | Anul | CNP | ore lucrate | pl/h | An angaj"<<endl;for(int j=1;j<=n;j++)V[j].afisare();aux=V[1].anul;for(int i=1;i<=n;i++)if(aux<V[i].anul) aux=V[i].anul;

for(int i=1;i<=n;i++)if(aux==V[i].anul) cout<<endl<<"Slariatul cel mai tinar:"<<V[i].nume<<" "<<V[i].prenume<<" "<<V[i].anul<<" "<<V[i].salariu()<<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();};

Page 9: Raport Practica Informatica

REZULTATELE TESTĂRII

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, afişare, suprafaţa şi perimetru. De la tastatură se citeşte numărul de figuri. Elaboraţi un program care va permite a) citirea figurilor de la tastatură; b) afişarea acestora; c) afişarea figurilor sub formă de dreptunghi; d) afişarea figurilor sub formă de triunghi; e) afişarea figurii cu suprafaţă maximă; f) afişarea figurii cu perimetru maxim; g) afişarea perimetrului total al figurilor; h) afişarea suprafeţei totale a figurilor; i) sortarea figurilor în ordine descrescătoare suprafeţei.

LISTINGUL PROGRAMULUI

#include <iostream.h>#include <conio.h>#include <math.h>

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);};};

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:

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

Page 10: Raport Practica Informatica

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);

Page 11: Raport Practica Informatica

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();} }

Page 12: Raport Practica Informatica

REZULTATELE TESTĂRII

CONDITIA PR.V

Se consideră ierarhia formată din clasele:Clasă de bază: Punct cu cîmpurile: 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 pătratului; figură (triunghi înscris în pătrat) derivata claselor cerc şi pătrat. Metodele de citire şi desenare vor fi implementate pentru fiecare clasă din ierarhie. De la tastatură se citeşte un număr întreg n (n<100), numărul figurilor din ierarhie. Elaboraţi un program prin intermediul căruia vor fi afişate figurile la ecran.

LISTINGUL PROGRAMULUI#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;

}afisare(){cout<<"("<<x<<","<<y<<") "<<c;}};

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

Page 13: Raport Practica Informatica

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 TESTĂRII

CONDITIA PR.VISe consideră clasa timp, cu următoarea structură:

Page 14: Raport Practica Informatica

class timp{int ora,min, sec;//14:24:35public:timp();timp(int,int,int);//…};Elaboraţi un program, prin intermediul căruia pentru clasa timp vor fi supraîncărcaţi:a) Operatorul + va efectua suma dintre două obiecte de tipul timp;b) Operatorul - va efectua diferenţa dintre două obiecte de tipul timp;c) Operatorul ++ incrementarea cu o secundă;d) Operatorul -- decrementarea cu o secundă;e) Operatorul =f) Operatorii >>,<< vor citi/afişa timpul în formatul ora:min:sec, de ex. 14:24:35;g) Operatorii de comparaţie ==,!=, >, >=, <,<=;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;}

Page 15: Raport Practica Informatica

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

///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.min*60+T.sec) return 1; else return 0; }///operator<////////////// int operator >=(timp T){

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

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

};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;

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();};

Page 16: Raport Practica Informatica

REZULTATELE TESTĂRII

CONDITIA PR.VIIElaboraţi un program prin intermediul căruia vor fi gestionate automobileledintr-un salon auto. Despre un automobil se cunosc următoarele date: marca, anulediţiei, culoarea, preţul, capacitatea motorului, consumul la 100 km.

LISTINGUL PROGRAMULUI#include <iostream.h>#include <iomanip.h>#include <fstream.h>#include <conio.h>class SalonAuto{char *marca,*culoare;int nr,anul,consum,pret,capacitate;SalonAuto *next;//adresa umatorului elementSalonAuto();friend istream & operator>>(istream &, SalonAuto *&);friend ostream & operator<<(ostream &, SalonAuto*);friend class lista;friend int schimb(SalonAuto *,SalonAuto *);};SalonAuto::SalonAuto(){marca=new char[20];culoare=new char[10];anul=0;consum=0;pret=0;capacitate=0; next=NULL;}istream & operator>>(istream &is, SalonAuto *&t){cout<<"Dati datele despre automobil"<<endl;cout<<"Numarul masinii: ";is>>t->nr;cout<<"Marca: ";is>>t->marca;cout<<"Culoarea ";is>>t->culoare;

cout<<"Anul: ";is>>t->anul;cout<<"Pretul: ";is>>t->pret;cout<<"Consum: ";is>>t->consum;cout<<"Capacitatea: ";is>>t->capacitate;return is;}ostream & operator<<(ostream &os, SalonAuto *t){os<<t->nr<<setw(21)<<t->marca<<setw(10)<<t->culoare;os<<setw(8)<<t->consum<<setw(6)<<t->anul<<setw(10)<<t->pret<<setw(12)<<t->capacitate<<endl;return os;}int schimb(SalonAuto *a, SalonAuto *b){SalonAuto *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{SalonAuto *prim;//adresa primului element din listaint n;//numarul total de studenti din listapublic:lista(){prim=NULL;n=0;}void creare();

Page 17: Raport Practica Informatica

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(10)<<"Culoare";cout<<setw(8)<<"Consum"<<setw(6)<<"Anul"<<setw(10)<<"Pret"<<setw(12)<<"Capacitate"<<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;

Page 18: Raport Practica Informatica

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 TESTĂRII

MENIUL

3-INSERAREA

1-AFISAREA

Page 19: Raport Practica Informatica

2-EXCLUDEREA

5-SORTAREA(DESCRESCATOR)

4-AUTOMOBILE MARCA FORD

CONDITIA PR.VIII

Să se construiască clasa Fracție care reprezintă o fracție dată prin numitor și numărător. Clasa vaconține următoarele metode:a) Constructor;b) Destructor;c) Afișarea unei fracții;d) Simplificarea unei fracții;e) Supraîncărcarea operatorului +(adunare) dintre 2 fracții;f) Supraîncărcarea operatorului -(scădere) dintre o fracție și un număr întreg;g) Supraîncărcarea operatorului *(produs) dintre un număr întreg și o fracție;h) Supraîncărcarea operatorului ^(ridicare la putere) dintre un număr întreg și o fracție;

Page 20: Raport Practica Informatica

#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);

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;}

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;

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;

Page 21: Raport Practica Informatica

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

REZULTATELE TESTĂRII

Listă bibliografică1. Anatol Gremalschi, Iurie Mocanu, Ion Spinei, „Informatica, Limbajul C++”, manual

pentru clasele IX-XI, Editura Ştiinţa 1999.2. Andrei Braicov, „Turbo Pascal, Culegere de probleme”, Editura Prut Internaţional,

2005.3. Daniela Saru, „Algoritmi şi Limbaje de Programare”, Editura „Didactica şi

Pedagogica”, R.A. Bucureşti, 1998.4. Cornelia Ivasc, Mona Pruna, „Tehnici de Programare, Aplicaţii”, Editura „Petrion”

Bucureşti 1999.5. V. Cristea, P. Dumitru, C. Giumale s.a., Dicţionar de informatică, Editura Ştiinţifică

şi Enciclopedică, Bucureşti, 1981.6. T.Sorin, Tehnici de programare, Teora, Bucureşti, 1996.7. K. Şandor, Turbo PASCAL 6.0. Ghid de utilizare, Editura Microlnformatica, Cluj-

Napoca, 1993.8. O.Chirchin, Metodica predării informaticii, Chişinău, Tipogr.UPS „Ion Creangă”,

2004.9. T.Sorin, Tehnici de programare, Bucureşti, Editura Teora, 1996.