Sunteți pe pagina 1din 7

Universitatea Tehnic a Moldovei

FCIM
Catedra Calculatoare

RAPORT
la lucrarea de laborator nr. 3
la Programare n limbajul C++
Tema: Clase derivate, funcii virtuale, suprancrcarea funciilor i
operatorilor.
Varianta 4

A efectuat:

st. gr. C-

A verificat:

lector superior Plotnic Constantin

Chiinu 2015

Scopul lucrrii: Familiarizarea studenilor cu noiunile de clase derivate, funcii virtuale i


redefinite, operatori suprancrcai, obiecte.
Sarcina lucrrii:
Scriei un program care ar defini clasa de baz vector. n aceast clas determinai un
vector de numere ntregi i funcia showvector(). Creai clasa derivat array care motenete
vector. Funcia showvector() se va redefini n clasa derivat, astfel ca ea s afieze la display
valorile tabloului pe linii i pe coloane. S se calculeze suma elementelor tabloului, s se
efectueze operaiile algebrice asupra a dou tablouri (adunarea, scderea, nmulirea).
Listingul programului:

#include <iostream>
#include <stdlib.h>
#include <conio.h>
#define MAX 10
using namespace std;
class Vector
{
public:
int a[MAX],n;
virtual void Citeste()
{
cout<<"\nNr. de elemente ale vectorului: n=";
cin>>n;
for(int i=0; i<n; i++)
{
cout<<"\nElementul "<<i+1<<" =";
cin>>a[i];
}
}
void Arata(){
cout<<"\nElementele vectorului:\n";
for(int i=0; i<n; i++)
{
cout<<" "<<a[i];
}
}

};
class Tablou:public Vector
{
public:
int a[MAX][MAX],m;
void Citeste()
{
cout<<"\nNr. de linii ale tabloului n=";
cin>>n;
cout<<"\nNr. de coloane ale tabloului m=";
cin>>m;
for(int i=0; i<n; i++)
for(int j=0; j<m; j++)
{
cout<<"\nElementul ["<<i+1<<"]["<<j+1<<"]=";
cin>>a[i][j];
}
}
void Arata()
{
cout<<"\nParcurgerea tabloului pe linii:\n";
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
cout<<"\t"<<a[i][j];
}
cout<<endl;
}

cout<<"\nParcurgerea tabloului pe coloane:\n";


for(int j=0;j<m; j++)
{
for(int i=0;i<n;i++)
{
cout<<"\t"<<a[i][j];
}
cout<<endl;
}
}
void Suma(Tablou &t);
void Inmultire(Tablou &t1, Tablou &t2);
friend Tablou operator + (Tablou,Tablou);
friend Tablou operator - (Tablou,Tablou);
};
void Tablou::Suma(Tablou &t){
int S=0;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
S=S+a[i][j];
}
cout<<"\nSuma elementelor tabloului: S="<<S;
}
void Tablou::Inmultire(Tablou &t1, Tablou &t2){
Tablou r;
if(t1.n!=t2.m)
cout<<"\nInmultirea imposibila!...\n";
else{
cout<<"\nTabloul Produs:\n";
for(int i=0;i<t1.n;i++)
{
for(int j=0;j<t1.n;j++)
{
r.a[i][j]=0;
for(int k=0;k<t2.n;k++)
r.a[i][j]+=t1.a[i][k]*t2.a[k][j];
cout<<"\t"<<r.a[i][j];
}
cout<<endl;
}
}
}
Tablou operator + (Tablou t1, Tablou t2){
Tablou ts;
if((t1.m!=t2.m)||(t1.n!=t2.n))
cout<<"\nAdunarea imposibila! Tablourile nu au aceeasi dimensiune!\n";
else{
ts.m=t1.m;
ts.n=t1.n;
for(int i=0;i<ts.n;i++)
{
for(int j=0;j<ts.m;j++)
{
ts.a[i][j]=t1.a[i][j]+t2.a[i][j];
cout<<"\t"<<ts.a[i][j];
}
cout<<endl;
}
}
}
Tablou operator - (Tablou t1, Tablou t2){
Tablou ts;
if((t1.m!=t2.m)||(t1.n!=t2.n))
cout<<"\nScaderea imposibila! Tablourile nu au aceeasi dimensiune!\n";

else{
ts.m=t1.m;
ts.n=t1.n;
for(int i=0;i<ts.n;i++)
{
for(int j=0;j<ts.m;j++)
{
ts.a[i][j]=t1.a[i][j]-t2.a[i][j];
cout<<"\t"<<ts.a[i][j];
}
cout<<endl;
}
}
}
int main()
{
Tablou t,t1,t2,ts;
char com;
meniu:
system("cls");
cout<<"\n\tMENIU:\n";
cout<<"\n[1] - Citire tablou\n";
cout<<"\n[2] - Afisare tablou\n";
cout<<"\n[3] - Suma elementelor tabloului\n";
cout<<"\n[4] - Adunarea a 2 tablouri\n";
cout<<"\n[5] - Scaderea a 2 tablouri\n";
cout<<"\n[6] - Inmultirea a 2 tablouri\n";
cout<<"\n[0] - Iesire\n";
cout<<"\nComanda<<:";
cin>>com;
switch(com){
case '1':
{
system("cls");
t.Citeste();
cout<<endl;
system("pause");
goto meniu;
}
case '2':
{
system("cls");
t.Arata();
cout<<endl;
system("pause");
goto meniu;
}
case '3':
{
system("cls");
t.Suma(t);
cout<<endl;
system("pause");
goto meniu;
}
case '4':
{
system("cls");
t1.Citeste();
t2.Citeste();
cout<<"\nTabloul Suma:"<<endl;
ts=t1+t2;
cout<<endl;
system("pause");
goto meniu;
}
case '5':
{

system("cls");
t1.Citeste();
t2.Citeste();
cout<<"\nTabloul Diferenta:"<<endl;
ts=t1-t2;
cout<<endl;
system("pause");
goto meniu;
}
case '6':
{
system("cls");
t1.Citeste();
t2.Citeste();
ts.Inmultire(t1,t2);
system("pause");
goto meniu;
}
case '0':
exit(0);
default:
{
cout<<"Comanda eronata ["<<com<<"]!";
cout<<endl;
system("pause");
goto meniu;
}
}
}

Rezultatul execuiei:
Meniul programului

Optiunea [1] Citire tablou

Optiunea [2] Afisare tablou

Optiunea [3] Suma elementelor tabloului

Optiunea [4] Adunarea a 2 tablouri

Optiunea [5] Scaderea a 2 tablouri

Optiunea [6] Inmultirea a 2 tablouri

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