Laborator Nr.3 C++

Descărcați ca docx, pdf sau txt
Descărcați ca docx, pdf sau txt
Sunteți pe pagina 1din 17

Ministerul Educaiei al Republicii Moldova

Universitatea Tehnic a Moldovei

Catedra: Automatica i Tehnologii Informaionale

RAPORT
Lucrare de laborator Nr.3
la Programarea in Limbajul C++

A efectuat:
A verificat:

LUCRARE DE LABORATOR NR.

Tema: Suprancrcarea operatorilor


Scopul lucrrii:
Studierea necesitii suprancrcrii operatorilor;
Studierea sintaxei de definire a operatorilor;
Studierea tipurilor de operatori;
Studierea formelor de suprancrcare;
Noiuni de baz
Avantajul utilizrii operatorilor (reducerea codului) n acelai timp complic nelegerea
codului, deoarece nu este posibil ntotdeauna sau este complicat s se urmreasc dac se
utilizeaz un operator predefinit sau suprancrcat. ns suprancrcarea operatorilor este
necesar. Sunt probleme care se soluioneaz numai prin suprancrcarea operatorilor,cum ar fi
operatorul de atribuire. Desigur

Varianta 4
) S se creeze clasa Date data, care conine cmpurile: ziua, luna, anul. S se defineasc
operatorii "+" i "-" ca metode ale clasei, iar operatorii "++" i "--" n ambele variante(prefix i
postfix) ca funcii prietene. Operatorul "+" trebuie s permit realizarea operaiilor numai cu
variabilele de tip predefinit int (x=y+5). De prevzut prelucrarea corect a anilor biseci.
Textul Programului:
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <iomanip>
using namespace std;
class Date
{
int day,year,month;
public:
Date();
Date(int,int,int);
Date(const Date&);
~Date();
Date& operator + (int);
Date& operator - (int);
friend Date& operator ++ (Date&); //Prefix ++

friend Date operator ++ (Date&, int); //Postfix ++


friend Date& operator -- (Date&);
friend Date operator -- (Date&, int);
friend istream& operator >> (istream&, Date&);
friend ostream& operator << (ostream&, Date&);
};
Date::Date():day(0),month(0),year(0){};
Date::Date(int day, int month, int year)
{
this->day=day;
this->month=month;
this->year=year;
}
Date::Date(const Date &obj)
{
day=obj.day;
month=obj.month;
year=obj.year;
}
Date::~Date()
{
day=0;
month=0;
year=0;
}
Date& Date::operator + (int add)
{
this->day=day+add;
this->year=year+add;
this->month=month;
if(this->month == 1)
{
this->month=month+add;
if(this->day > 31) { this->day=day-add; }
if(this->month > 12) { this->month=month-add; }

}
this->month=month;
if(this->month == 2)
{
this->month=month+add;
if(this->day == 29) { this->day=day-add; this->day=day+add; }
else if(this->day > 28) { this->day=day-add; }
if(this->month > 12) { this->month=month-add; }
}
this->month=month;
if(this->month == 3)
{
this->month=month+add;
if(this->day > 31) { this->day=day-add; }
if(this->month > 12) { this->month=month-add; }
}
this->month=month;
if(this->month == 4)
{
this->month=month+add;
if(this->day > 30) { this->day=day-add; }
if(this->month > 12) { this->month=month-add; }
}
this->month=month;
if(this->month == 5)
{
this->month=month+add;
if(this->day > 31) { this->day=day-add; }
if(this->month > 12) { this->month=month-add; }
}
this->month=month;
if(this->month == 6)
{
this->month=month+add;
if(this->day > 30) { this->day=day-add; }
if(this->month > 12) { this->month=month-add; }

}
this->month=month;
if(this->month == 7)
{
this->month=month+add;
if(this->day > 31) { this->day=day-add; }
if(this->month > 12) { this->month=month-add; }
}
this->month=month;
if(this->month == 8)
{
this->month=month+add;
if(this->day > 31) { this->day=day-add; }
if(this->month > 12) { this->month=month-add; }
}
this->month=month;
if(this->month == 9)
{
this->month=month+add;
if(this->day > 30) { this->day=day-add; }
if(this->month > 12) { this->month=month-add; }
}
this->month=month;
if(this->month == 10)
{
this->month=month+add;
if(this->day > 31) { this->day=day-add; }
if(this->month > 12) { this->month=month-add; }
}
this->month=month;
if(this->month == 11)
{
this->month=month+add;
if(this->day > 30) { this->day=day-add; }
if(this->month > 12) { this->month=month-add; }

}
this->month=month;
if(this->month == 31)
{
this->month=month+add;
if(this->day > 31) { this->day=day-add; }
if(this->month > 12) { this->month=month-add; }
}
return *this;
}
Date& Date::operator - (int add)
{
this->day=day-add;
this->year=year-add;
this->month=month-add;
if(this->day < 0) { this->day=day+add; }
if(this->month < 0) { this->month=month+add; }
if(this->year < 0) { this->year=year+year; }
return *this;
}
//Prefix++
Date& operator ++ (Date& obj)
{
++obj.day;
++obj.month;
++obj.year;
return obj;
}
//Postfix ++
Date operator ++ (Date& obj, int in)
{ Date copy_(obj);
obj.day++;
obj.month++;
obj.year++;
return copy_;
}

//Prefix -Date& operator -- (Date& obj)


{
--obj.day;
--obj.month;
--obj.year;
return obj;
}
//Postfix -Date operator -- (Date& obj,int var)
{ Date copy_(obj);
obj.day--;
obj.month--;
obj.year--;
return copy_;
}
istream& operator >> (istream& in,Date& obj)
{
cout<<"Data: "; in >> obj.day;
if(!(obj.day > 0 && obj.day < 31)) { cout<<"Eroare!"; return in; }
cout<<"Luna:"; in >> obj.month;
if(!(obj.month > 0 && obj.month < 12)) { cout<<"Eroare!"; return in; }
cout<<"An:"; in >> obj.year;
if(!(obj.year > 0)) { cout<<"Eroare!"; return in; }
return in;
}
ostream& operator << (ostream& out, Date& obj)
{
out<<obj.day<<"."<<obj.month<<"."<<obj.year;
}
int main()
{
int k=1;
Date one, two, res1, res2;
while(k)
{
system("cls");
cout<<"[1]Introduceti data ";

cout<<"\n[2]Afisarea datei ";


cout<<"\n[3]Modificati data prin adunare";
cout<<"\n[4]Modificati data prin scadere";
cout<<"\n[5]Data++";
cout<<"\n[6]Data--";
cout<<"\n[0]Iesire";
cout<<"\n\nOptiunea:";
int op;
cin>>op;
switch(op)
{
default: k=1;
case 0: system("cls");
exit(0);
case 1: system("cls");
cout<<"Introduceti:\n";
cin>>one;
cout<<"\nData:"<<one;
getch();
break;
case 2: system("cls");
cout<<"Data:"<<one;
getch();
break;
case 3: system("cls");
cout<<"Data:"<<one;
res1=one+5;
cout<<"\nDupa adunare:"<<res1;
getch();
break;
case 4: system("cls");
cout<<"Data:"<<one;
res1=one-5;
cout<<"\nDupa scadere:"<<res1;
getch();
break;
case 5: system("cls");
cout<<one;

/*cout<<"\n\nPrefix increment >> "<<one++;*/


cout<<"\nIncrement:"<<++one;
getch();
break;
case 6: system("cls");
cout<<one;
cout<<"\nDecrement:"<<--one;
/*cout<<"\n\nPostfix decrement >> "<<one--;*/
getch();
break;
}
}
return 0;
}

b) S se creeze clasa List coad. S se defineasc operatorii "+" de adunare a listelor, "=" de
atribuire ca metode ale clasei. S se defineasc operatorii de comparare "==", "!=", "<", ">" ca
funcii prietene. S se suprancarce operatorii "<<" i ">>" pentru ieiri/intrri de obiecte,
precum i pentru inserarea/eliminarea elementelor n/din coad. Clasa trebuie s fie absolut
funcional, adic s conin toi constructorii necesari i destructorul. Pentru simplificarea
lucrului s se utilizeze clasa sau structura ListItem pentru reprezentarea elementelor listei spre
care refer List.
Textul Programului:
#include <iostream>
#include <stdlib.h>
#include <conio.h>
using namespace std;
class Queue
{
private:
struct element
{
int var;
element *next;
};
element *head;
element *tail;
int nr;
public:
Queue()
{
head=tail=NULL;
nr=0;
};
~Queue();
void add_el(int);
void del_el();
int if_head() { if(if_empty()) cout<<"Eroare"; return head->var; }
int if_tail() { if(if_empty()) cout<<"Eroare"; return tail->var; }
int nr_el() const {return nr;};
bool if_empty() { return head==NULL;}
Queue& operator + (int);
Queue& operator = (Queue&);

friend int operator==(const Queue&,const Queue&);


friend int operator!=(const Queue&,const Queue&);
friend int operator<(const Queue&,const Queue&);
friend int operator>(const Queue&,const Queue&);
friend ostream& operator<<(ostream&, Queue&);
friend istream& operator>>(istream&, Queue&);

};
Queue::~Queue()
{
while(head != NULL)
{
element *el=head;
head=head->next;
delete el;
}
}
void Queue::add_el(int obj)
{
if(if_empty())
{
head=new element;
head->var=obj;
head->next=NULL;
tail=head;
nr=1;
}
else
{
element *el= new element;
el->var=obj;
el->next=NULL;
tail->next=el;
tail=el;
++nr;
}
}
void Queue::del_el()
{
if(if_empty()) { cout<<"No queue!!!";}

element *el= head;


head = head->next;
delete el;
--nr;
}
Queue& Queue::operator + (int n)
{
Queue temp;
while(!this->if_empty())
{
temp.add_el(this->if_head()+n);
this->del_el();
}
while(!temp.if_empty())
{
this->add_el(temp.if_head());
temp.del_el();
}
return *this;
}
Queue& Queue::operator=(Queue& obj){
Queue temp,temp2;
while(!obj.if_empty())
{
temp.add_el(obj.if_head());
temp2.add_el(obj.if_head());
obj.del_el();
}
while(!this->if_empty())
{
this->del_el();
}
while(!temp.if_empty())
{
this->add_el(temp.if_head());
temp.del_el();
}
while(!temp2.if_empty())
{
obj.add_el(temp2.if_head());
temp2.del_el();
}
return *this;

}
int operator==(Queue& obj1,Queue& obj2){
if(obj1.nr_el()==obj2.nr_el()) { cout<<"Sunt egale! "; return 1;}
else { cout<<"Nu sunt egale "; return 0;}
}
int operator!=(Queue&obj1,Queue&obj2){
if(obj1.nr_el()!=obj2.nr_el()){ cout<<"Nu sunt egale "; return 1;}
else { cout<<"Sunt egale "; return 0;}
}
int operator<(Queue&obj1,Queue&obj2){
if(obj1.nr_el()<obj2.nr_el()){ cout<<"Prima lista este mai mica "; return 1;}
else { cout<<"A 2-a lista este mai mare"; return 0;}
}
int operator>(Queue&obj1,Queue&obj2){
if(obj1.nr_el()>obj2.nr_el()){ cout<<"Prima lista este mai mare "; return 1;}
else { cout<<"A 2-a lista este mai mica"; return 0;}
}
ostream& operator<<(ostream& out, Queue& obj)
{
Queue temp;
while (!obj.if_empty())
{
out << obj.if_head() << ' ';
temp.add_el(obj.if_head());
obj.del_el();
}
while (!temp.if_empty()){
obj.add_el(temp.if_head());
temp.del_el();
}
return out;
}
istream& operator>>(istream& in, Queue& obj)
{
int ob,n;
cout<<"Introduceti nr.de elemente a listei:";
in>>n;
cout<<"Introduceti lista:\n";
for(int i = 1; i <= n; i++){
cout<<"["<<i<<"]=";

in>>ob;
obj.add_el(ob);
}
return in;
}
int main()
{
Queue el1,el2,el3;
int k, op;
while(k=1)
{
system("cls");
cout<<"[1]Introducerea datelor primei liste";
cout<<"\n[2]Introducerea datelor a 2-a liste";
cout<<"\n[3]Afisarea listei";
cout<<"\n[4]Adunarea listei";
cout<<"\n[5]Comparare < ";
cout<<"\n[6]Comparare > ";
cout<<"\n[7]Operatia ==";
cout<<"\n[8]Atribuirea";
cout<<"\n\nComanda: ";
cin>>op;
switch(op)
{
case 0: system("cls");
getch(); exit(0);
case 1: system("cls");
cin>>el1;
getch();
break;
case 2: system("cls");
cin>>el2;
getch();
break;
case 3: system("cls");
cout<<"Prima lista:";
cout<<el1;

cout<<"\nA 2-a lista:";


cout<<el2;
getch();
break;
case 4: system("cls");
cout<<"Prima lista +10:";
cout<<el1+10;
cout<<"\n\nA 2-a lista +15:";
cout<<el2+15;
getch();
break;
case 5: system("cls");
cout<<(el1<el2);
getch();
break;
case 6: system("cls");
cout<<(el1>el2);
getch();
break;
case 7: system("cls");
cout<<(el1==el2);
getch();
break;
case 8: system("cls");
cout<<(el1=el2);
getch();
break;
default: k=1;
}
}

return 0;
}

Concluzie
In lucrarea data am obtinut deprinderi practice de utilizare functiilor de supraincarcarea
operatorilor. Am aflat ce operatori trebuie de supraincarcat si ce operatori nu se
recomanda de supraincarcat .Au fost obtinute cunostinte noi in limbajul de programare
C++ si anume supraincarcarea operatorilor si necesitatea lor.

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

  • Laborator NR.5 - Caldari - Pavel - TI-181FR
    Laborator NR.5 - Caldari - Pavel - TI-181FR
    Document5 pagini
    Laborator NR.5 - Caldari - Pavel - TI-181FR
    Caldari Pavel
    Încă nu există evaluări
  • Lab.4 POO UD
    Lab.4 POO UD
    Document9 pagini
    Lab.4 POO UD
    Miroslava
    Încă nu există evaluări
  • Lab 6 Poo
    Lab 6 Poo
    Document5 pagini
    Lab 6 Poo
    Alex Tronciu
    Încă nu există evaluări
  • Programarea Avansata
    Programarea Avansata
    Document8 pagini
    Programarea Avansata
    iry_piry
    Încă nu există evaluări
  • Lab 3 MMC
    Lab 3 MMC
    Document4 pagini
    Lab 3 MMC
    Adrian Bodorin
    Încă nu există evaluări
  • Laborator 3
    Laborator 3
    Document17 pagini
    Laborator 3
    DorelDjj
    Încă nu există evaluări
  • Raport 3
    Raport 3
    Document11 pagini
    Raport 3
    Damean Alexandra
    100% (1)
  • Lab 4 Cazacu POO
    Lab 4 Cazacu POO
    Document8 pagini
    Lab 4 Cazacu POO
    Iura Cazacu
    Încă nu există evaluări
  • Raport Lab 3 Poo Supraincarcarea Operatorilor
    Raport Lab 3 Poo Supraincarcarea Operatorilor
    Document7 pagini
    Raport Lab 3 Poo Supraincarcarea Operatorilor
    Uyukee
    Încă nu există evaluări
  • Laborar 4 Programare
    Laborar 4 Programare
    Document13 pagini
    Laborar 4 Programare
    cristian
    Încă nu există evaluări
  • Lab 7
    Lab 7
    Document8 pagini
    Lab 7
    Ion Popescu
    Încă nu există evaluări
  • Lucrarea de Laborator NR 4 POO
    Lucrarea de Laborator NR 4 POO
    Document10 pagini
    Lucrarea de Laborator NR 4 POO
    Alexandru Burdeniuc
    Încă nu există evaluări
  • Lab 7 Cazacu POO
    Lab 7 Cazacu POO
    Document8 pagini
    Lab 7 Cazacu POO
    Iura Cazacu
    Încă nu există evaluări
  • Lab 6 Cazacu POO
    Lab 6 Cazacu POO
    Document5 pagini
    Lab 6 Cazacu POO
    Iura Cazacu
    Încă nu există evaluări
  • TAP Lab4
    TAP Lab4
    Document10 pagini
    TAP Lab4
    Cristian Batir
    Încă nu există evaluări
  • POO Lab7
    POO Lab7
    Document6 pagini
    POO Lab7
    Dani Ela
    Încă nu există evaluări
  • Lab.4 FC
    Lab.4 FC
    Document6 pagini
    Lab.4 FC
    Cristina Florea
    Încă nu există evaluări
  • Lab MMC2
    Lab MMC2
    Document5 pagini
    Lab MMC2
    Maxim
    Încă nu există evaluări
  • Lab 4 MN
    Lab 4 MN
    Document3 pagini
    Lab 4 MN
    nn nnn
    Încă nu există evaluări
  • Laborator-2mmc Balan Ion
    Laborator-2mmc Balan Ion
    Document12 pagini
    Laborator-2mmc Balan Ion
    Ion Bn
    Încă nu există evaluări
  • Grafica Laborator Nr.3
    Grafica Laborator Nr.3
    Document5 pagini
    Grafica Laborator Nr.3
    Cebotari Ion
    100% (2)
  • MMC Lab3 Rap
    MMC Lab3 Rap
    Document4 pagini
    MMC Lab3 Rap
    I LOVE ME
    Încă nu există evaluări
  • LFA Lab - 1
    LFA Lab - 1
    Document10 pagini
    LFA Lab - 1
    RoscaFlorin
    100% (1)
  • MMC Lab2
    MMC Lab2
    Document6 pagini
    MMC Lab2
    Mihail Boran
    Încă nu există evaluări
  • Raport: La Disciplina Metode Și Modele de Calcul 1
    Raport: La Disciplina Metode Și Modele de Calcul 1
    Document9 pagini
    Raport: La Disciplina Metode Și Modele de Calcul 1
    Anya Mr
    Încă nu există evaluări
  • Lab 1
    Lab 1
    Document10 pagini
    Lab 1
    rosca9doinita
    Încă nu există evaluări
  • Laborator 1 MMC
    Laborator 1 MMC
    Document9 pagini
    Laborator 1 MMC
    Cristian Popa
    Încă nu există evaluări
  • Laborator 1 C
    Laborator 1 C
    Document17 pagini
    Laborator 1 C
    Dorin Graur
    Încă nu există evaluări
  • Laborator-3 MMC
    Laborator-3 MMC
    Document4 pagini
    Laborator-3 MMC
    Dan
    Încă nu există evaluări
  • Rezolvarea Numerica A Sistemelor de Ecuatii Liniare
    Rezolvarea Numerica A Sistemelor de Ecuatii Liniare
    Document8 pagini
    Rezolvarea Numerica A Sistemelor de Ecuatii Liniare
    Valentin I. Marius
    Încă nu există evaluări
  • MMC2 Modulul2
    MMC2 Modulul2
    Document16 pagini
    MMC2 Modulul2
    ViorelRotari
    Încă nu există evaluări
  • Lucrare de Laborator nr.2.
    Lucrare de Laborator nr.2.
    Document8 pagini
    Lucrare de Laborator nr.2.
    ionperu
    100% (2)
  • TW Lab5
    TW Lab5
    Document3 pagini
    TW Lab5
    Dan
    Încă nu există evaluări
  • Lab 1
    Lab 1
    Document20 pagini
    Lab 1
    Fil Gorea
    Încă nu există evaluări
  • Metode Și Modele de Calcul 2
    Metode Și Modele de Calcul 2
    Document6 pagini
    Metode Și Modele de Calcul 2
    I LOVE ME
    Încă nu există evaluări
  • Lab 2 POO AI-191
    Lab 2 POO AI-191
    Document8 pagini
    Lab 2 POO AI-191
    Carolin
    Încă nu există evaluări
  • Lab2 MN CR-212 V14
    Lab2 MN CR-212 V14
    Document8 pagini
    Lab2 MN CR-212 V14
    Tabureanu Marian
    Încă nu există evaluări
  • TW Lab4
    TW Lab4
    Document8 pagini
    TW Lab4
    Dan
    Încă nu există evaluări
  • Raport GC Lab 1
    Raport GC Lab 1
    Document6 pagini
    Raport GC Lab 1
    Nickolae Enachi
    Încă nu există evaluări
  • Lucrarea de Laborator NR 5 POO
    Lucrarea de Laborator NR 5 POO
    Document4 pagini
    Lucrarea de Laborator NR 5 POO
    Alexandru Burdeniuc
    Încă nu există evaluări
  • Sofroni Maxim Ai-211 MN Lab3
    Sofroni Maxim Ai-211 MN Lab3
    Document7 pagini
    Sofroni Maxim Ai-211 MN Lab3
    Максим Софрони
    Încă nu există evaluări
  • Laborator-I MMC
    Laborator-I MMC
    Document7 pagini
    Laborator-I MMC
    Ion Bn
    Încă nu există evaluări
  • Lab 4
    Lab 4
    Document4 pagini
    Lab 4
    Viktor Dobrovolschi
    Încă nu există evaluări
  • Lab3 Poo
    Lab3 Poo
    Document7 pagini
    Lab3 Poo
    Adrian Bodorin
    Încă nu există evaluări
  • Laborator 2 APA
    Laborator 2 APA
    Document17 pagini
    Laborator 2 APA
    RoscaFlorin
    Încă nu există evaluări
  • Lab 4 Apa
    Lab 4 Apa
    Document21 pagini
    Lab 4 Apa
    crismaruion
    Încă nu există evaluări
  • Lab4 POO
    Lab4 POO
    Document7 pagini
    Lab4 POO
    megadanyx
    Încă nu există evaluări
  • ASDN2
    ASDN2
    Document6 pagini
    ASDN2
    Viktor Dobrovolschi
    Încă nu există evaluări
  • Lab 3 Rom
    Lab 3 Rom
    Document6 pagini
    Lab 3 Rom
    Jorca Ţuţuianu
    Încă nu există evaluări
  • Lab2 TMPS
    Lab2 TMPS
    Document4 pagini
    Lab2 TMPS
    Ion Cornea
    Încă nu există evaluări
  • AMOO - Proiect de An
    AMOO - Proiect de An
    Document4 pagini
    AMOO - Proiect de An
    Dan
    Încă nu există evaluări
  • Laboratorul Nr.1
    Laboratorul Nr.1
    Document9 pagini
    Laboratorul Nr.1
    Георгий 98
    Încă nu există evaluări
  • Lab1 2mmc
    Lab1 2mmc
    Document10 pagini
    Lab1 2mmc
    Artur Kingsman
    Încă nu există evaluări
  • Iepuras Daniel LAB 3 TS
    Iepuras Daniel LAB 3 TS
    Document8 pagini
    Iepuras Daniel LAB 3 TS
    DanuIepuras
    Încă nu există evaluări
  • AI-191 Medinschi Ion SO4
    AI-191 Medinschi Ion SO4
    Document5 pagini
    AI-191 Medinschi Ion SO4
    Carolin
    Încă nu există evaluări
  • Lab 2 Apa
    Lab 2 Apa
    Document12 pagini
    Lab 2 Apa
    Artur Kingsman
    Încă nu există evaluări
  • Laborator 4 Croitoru Tudor
    Laborator 4 Croitoru Tudor
    Document3 pagini
    Laborator 4 Croitoru Tudor
    DorelDjj
    Încă nu există evaluări
  • LFA Lab 1
    LFA Lab 1
    Document8 pagini
    LFA Lab 1
    Valeria Cebanu
    Încă nu există evaluări
  • Laborator Programare Avansata
    Laborator Programare Avansata
    Document7 pagini
    Laborator Programare Avansata
    romamd555s
    Încă nu există evaluări
  • Laborator 3: Programare Orientată Pe Obiecte Laborator 3
    Laborator 3: Programare Orientată Pe Obiecte Laborator 3
    Document12 pagini
    Laborator 3: Programare Orientată Pe Obiecte Laborator 3
    georgeeeee20100000
    Încă nu există evaluări