RAPORT
A efectuat:
A verificat:
Chişinău -2019
Tema: Moştenirea şi compoziţia
Scopul lucrării:
Varianta 12
a) Să se creeze o ierarhie a claselor Figură de şah - clasa abstractă, care conţine câmpul –
culoare. Creaţi pentru toate figurile clase derivate , care conţin denumirea figurii şi coordonatele
poziţiei pe tablă. Pentru setarea cîmpurilor textuale, utilizaţi operatorul new. Determinaţi fluxul
de ieşire şi fluxul de intrare, constructorul de copiere, operatorul de atribuire prin funcţiile
corespunzătoare ale clasei de bază.
b) Să se creeze clasa figuri de şah, care este compusă din setul de figuri din sarcina a, şi tabla de
şah – tablou bidimensional 8 pe 8. Să se creeze posibilitatea de a elimina figurile de pe tablă.
Definiţi constructorul care creează dinamic figuri şi le dă poziţii utilizînd notarea pentru şah
(E2). Definiţi constructorul de copiere şi operatorul de atribuire.
A)
#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;
class Figura_De_Sah
{
int culoare;
public:
Figura_De_Sah(int culoare=-1)
{
this->culoare=culoare;
}
~Figura_De_Sah()
{
}
virtual void Print()=0;
void SetColor(int color)
{
culoare=color;
}
int GetCollor()
{
return culoare;
}
};
void Figura::SetFigureChar()
{
char name[40];
int cordX, cordY, color;
cout << "Introdu numele figurei de sah" << endl;
cout << "Figuri disponibile : Rege, Regina, Turn, Nebun, Cal, Pion" <<
endl;
cin >> name;
do
{
cout << "Introdu culoarea acestuia" << endl;
cout << "1) Alb" << endl;
cout << "2) Negru" << endl;
cin >> color;
if(color<1 || color>2)
{
cout << "Alegere inexistenta" << endl;
}
}while (color<1 || color>2);
cout << "Seteaza coordonata pe axa OY (de la 1 pana la 8)" << endl;
do
{
cin >> cordY;
if(cordY<1 || cordY>8)
{
cout << "Alegere inexistenta" << endl;
}
}while (cordY<1 || cordY>8);
cout << "Seteaza coordonata pe axa OX (de la 1 pana la 8)" << endl;
cout << "Aceasta fa vi automat convertita conform coordonatei pentru
tabla de sah." << endl;
do
{
cin >> cordX;
if(cordX<1 || cordX>8)
{
cout << "Alegere inexistenta" << endl;
}
}while (cordX<1 || cordX>8);
this->name=new char[strlen(name)+1];
strcpy(this->name, name);
this->cordX=cordX;
this->cordY=cordY;
SetColor(color);
}
void Figura::Move()
{
cout << "Actual va aflati pe pozitia : ";
switch(cordX)
{
case 1 : cout << "Se afla pe coordonata : a" << cordY << endl; break;
case 2 : cout << "Se afla pe coordonata : b" << cordY << endl; break;
case 3 : cout << "Se afla pe coordonata : c" << cordY << endl; break;
case 4 : cout << "Se afla pe coordonata : d" << cordY << endl; break;
case 5 : cout << "Se afla pe coordonata : e" << cordY << endl; break;
case 6 : cout << "Se afla pe coordonata : f" << cordY << endl; break;
case 7 : cout << "Se afla pe coordonata : g" << cordY << endl; break;
case 8 : cout << "Se afla pe coordonata : h" << cordY << endl; break;
}
cout << "\nAlegeti o alta coordonata pentru a modifica pozitia " << endl;
cout << "Seteaza coordonata pe axa OY (de la 1 pana la 8)" << endl;
do
{
cin >> cordY;
if(cordY<1 || cordY>8)
{
cout << "Alegere inexistenta" << endl;
}
}while (cordY<1 || cordY>8);
cout << "Seteaza coordonata pe axa OX (de la 1 pana la 8)" << endl;
cout << "Aceasta fa vi automat convertita conform coordonatei pentru
tabla de sah." << endl;
do
{
cin >> cordX;
if(cordX<1 || cordX>8)
{
cout << "Alegere inexistenta" << endl;
}
}while (cordX<1 || cordX>8);
this->cordX=cordX;
this->cordY=cordY;
}
void Figura::Print()
{
int culoare=GetCollor();
cout << "Figura : " << name << endl;
switch (culoare)
{
case 1 : cout << "Culoarea : Alba" << endl; break;
case 2 : cout << "Culoarea : Neagra" << endl; break;
}
switch(cordX)
{
case 1 : cout << "Se afla pe coordonata : a" << cordY << endl; break;
case 2 : cout << "Se afla pe coordonata : b" << cordY << endl; break;
case 3 : cout << "Se afla pe coordonata : c" << cordY << endl; break;
case 4 : cout << "Se afla pe coordonata : d" << cordY << endl; break;
case 5 : cout << "Se afla pe coordonata : e" << cordY << endl; break;
case 6 : cout << "Se afla pe coordonata : f" << cordY << endl; break;
case 7 : cout << "Se afla pe coordonata : g" << cordY << endl; break;
case 8 : cout << "Se afla pe coordonata : h" << cordY << endl; break;
}
}
int main()
{
int n;
int menu;
int alb=0, negru=0;
int choise, chx;
cout << "Introdu numarul de figuri care doriti sa le introduceti pe tabla
de sah" << endl;
cin >> n;
Figura ** Fig = new Figura*[n];
cout << "Setati figurile de sah" << endl;
for(int i=0; i<n; i++)
{
system("cls");
cout << "Figura nr :" << i+1 << endl;
Fig[i] = new Figura();
Fig[i]->SetFigureChar();
}
do
{
system("cls");
cout << "Menu" << endl;
cout << "1) Afiseaza Figurile de sah" << endl;
cout << "2) Adauga o figura noua pe tabla de sah" << endl;
cout << "3) Miscarea figurii pe tabla de sah" << endl;
cout << "4) Calculul figurilor dupa Culoare" << endl;
cout << "0) Exit" << endl;
cin >> menu;
switch (menu)
{
case 0 :
{
system("cls");
for(int i=0; i<n; i++)
{
delete []Fig[i];
Fig[i]=NULL;
}
delete []Fig;
return 0;
}
break;
case 1:
{
system("cls");
cout << "Figurile de sah sunt : " << endl;
for(int i=0; i<n; i++)
{
Fig[i]->Print();
cout << endl;
}
}
break;
case 2:
{
system("cls");
n+=1;
Fig=(Figura**)realloc(Fig, n*sizeof(Figura*));
Fig[n-1] = new Figura();
cout << "Doriti sa copiati datele unei figuri actuale, sau sa
generati date noi ?" << endl;
cout << "1) Copii datele" << endl;
cout << "2) Generez date noi" << endl;
do
{
cin >> choise;
if(choise<1 || choise>2)
{
cout << "Obtiune inexistenta" << endl;
}
}while (choise<1 || choise>2);
if (choise==1)
{
system("cls");
cout << "Alegeti o figura de sah din lista propusa : " <<
endl;
for(int i=0; i<n-1; i++)
{
Fig[i]->Print();
cout << endl;
}
do
{
cin >> chx;
if(chx<1 || chx>n)
{
cout << "Figura inexistenta" << endl;
}
}while (chx<1 || chx>n);
Fig[n-1]=Fig[chx-1];
}
if (choise==2)
{
Fig[n-1]->SetFigureChar();
}
}
break;
case 3:
{
system("cls");
cout << "Alegeti o figura de sah din lista propusa : " <<
endl;
for(int i=0; i<n; i++)
{
Fig[i]->Print();
cout << endl;
}
do
{
cin >> choise;
if(choise<1 || choise>n)
{
cout << "Figura inexistenta" << endl;
}
}while (choise<1 || choise>n);
Fig[choise-1]->Move();
}
break;
case 4:
{
system("cls");
alb=0;
negru=0;
for(int i=0; i<n; i++)
{
if(Fig[i]->GetCollor()==1)
{
alb+=1;
} else if (Fig[i]->GetCollor()==2)
{
negru+=1;
}
}
cout << "Total figure pe tabal de sah sunt : " << alb+negru
<< endl;
cout << "Figure albe sunt : " << alb << endl;
cout << "Figure negre sunt : " << negru << endl;
}
break;
}
system("pause");
}while(menu!=0);
}
Rezultatele rularii
B)
#include <iostream>
#include <stdlib.h>
#include <string.h>
using namespace std;
class Figura_De_Sah
{
int culoare;
public:
Figura_De_Sah(int culoare=-1)
{
this->culoare=culoare;
}
~Figura_De_Sah()
{
}
virtual void Print()=0;
void SetColor(int color)
{
culoare=color;
}
int GetCollor()
{
return culoare;
}
};
void Figura::PrintTBL()
{
int culoare=GetCollor();
if (culoare!=-1)
{
if (strcmp(name,"Rege")==0)
{
if(culoare==1)
{
cout << "ARG";
}
else
{
cout << "NRG";
}
}
else if (strcmp(name,"Regina")==0)
{
if(culoare==1)
{
cout << "ARg";
}
else
{
cout << "NRg";
}
}
if (strcmp(name,"Turn")==0)
{
if(culoare==1)
{
cout << "AT";
}
else
{
cout << "NT";
}
}
else if (strcmp(name,"Nebun")==0)
{
if(culoare==1)
{
cout << "AN";
}
else
{
cout << "NN";
}
}
if (strcmp(name,"Cal")==0)
{
if(culoare==1)
{
cout << "AC";
}
else
{
cout << "NC";
}
}
else if (strcmp(name,"Pion")==0)
{
if(culoare==1)
{
cout << "AP";
}
else
{
cout << "NP";
}
}
}
}
void Figura::SetFigureChar()
{
char name[40];
int cordX, cordY, color;
cout << "Introdu numele figurei de sah" << endl;
cout << "Figuri disponibile : Rege, Regina, Turn, Nebun, Cal, Pion" <<
endl;
cin >> name;
do
{
cout << "Introdu culoarea acestuia" << endl;
cout << "1) Alb" << endl;
cout << "2) Negru" << endl;
cin >> color;
if(color<1 || color>2)
{
cout << "Alegere inexistenta" << endl;
}
}while (color<1 || color>2);
cout << "Seteaza coordonata pe axa OY (de la 1 pana la 8)" << endl;
do
{
cin >> cordY;
if(cordY<1 || cordY>8)
{
cout << "Alegere inexistenta" << endl;
}
}while (cordY<1 || cordY>8);
cout << "Seteaza coordonata pe axa OX (de la 1 pana la 8)" << endl;
cout << "Aceasta fa vi automat convertita conform coordonatei pentru
tabla de sah." << endl;
do
{
cin >> cordX;
if(cordX<1 || cordX>8)
{
cout << "Alegere inexistenta" << endl;
}
}while (cordX<1 || cordX>8);
this->name=new char[strlen(name)+1];
strcpy(this->name, name);
this->cordX=cordX;
this->cordY=cordY;
SetColor(color);
}
void Figura::Move()
{
cout << "Actual va aflati pe pozitia : ";
switch(cordX)
{
case 1 : cout << "Se afla pe coordonata : A" << cordY << endl; break;
case 2 : cout << "Se afla pe coordonata : B" << cordY << endl; break;
case 3 : cout << "Se afla pe coordonata : C" << cordY << endl; break;
case 4 : cout << "Se afla pe coordonata : D" << cordY << endl; break;
case 5 : cout << "Se afla pe coordonata : E" << cordY << endl; break;
case 6 : cout << "Se afla pe coordonata : F" << cordY << endl; break;
case 7 : cout << "Se afla pe coordonata : G" << cordY << endl; break;
case 8 : cout << "Se afla pe coordonata : H" << cordY << endl; break;
}
cout << "\nAlegeti o alta coordonata pentru a modifica pozitia " << endl;
cout << "Seteaza coordonata pe axa OY (de la 1 pana la 8)" << endl;
do
{
cin >> cordY;
if(cordY<1 || cordY>8)
{
cout << "Alegere inexistenta" << endl;
}
}while (cordY<1 || cordY>8);
cout << "Seteaza coordonata pe axa OX (de la 1 pana la 8)" << endl;
cout << "Aceasta fa vi automat convertita conform coordonatei pentru
tabla de sah." << endl;
do
{
cin >> cordX;
if(cordX<1 || cordX>8)
{
cout << "Alegere inexistenta" << endl;
}
}while (cordX<1 || cordX>8);
this->cordX=cordX;
this->cordY=cordY;
}
void Figura::Print()
{
int culoare=GetCollor();
cout << "Figura : " << name << endl;
switch (culoare)
{
case 1 : cout << "Culoarea : Alba" << endl; break;
case 2 : cout << "Culoarea : Neagra" << endl; break;
}
switch(cordX)
{
case 1 : cout << "Se afla pe coordonata : A" << cordY << endl; break;
case 2 : cout << "Se afla pe coordonata : B" << cordY << endl; break;
case 3 : cout << "Se afla pe coordonata : C" << cordY << endl; break;
case 4 : cout << "Se afla pe coordonata : D" << cordY << endl; break;
case 5 : cout << "Se afla pe coordonata : E" << cordY << endl; break;
case 6 : cout << "Se afla pe coordonata : F" << cordY << endl; break;
case 7 : cout << "Se afla pe coordonata : G" << cordY << endl; break;
case 8 : cout << "Se afla pe coordonata : H" << cordY << endl; break;
}
}
int main()
{
int n;
int menu;
int alb=0, negru=0;
int x, y;
int choise, chx;
cout << "Introdu numarul de figuri care doriti sa le introduceti pe tabla
de sah" << endl;
cin >> n;
Figura ** Fig = new Figura*[n];
Figura *** TablouSah = new Figura**[8];
for(int i=0; i<8; i++)
{
TablouSah[i]=new Figura*[8];
}
cout << "Setati figurile de sah" << endl;
for(int i=0; i<n; i++)
{
system("cls");
cout << "Figura nr :" << i+1 << endl;
Fig[i] = new Figura();
Fig[i]->SetFigureChar();
}
do
{
system("cls");
cout << "Menu" << endl;
cout << "1) Afiseaza Figurile de sah" << endl;
cout << "2) Adauga o figura noua pe tabla de sah" << endl;
cout << "3) Miscarea figurii pe tabla de sah" << endl;
cout << "4) Calculul figurilor dupa Culoare" << endl;
cout << "5) Afisez Tabloul de sah" << endl;
cout << "6) Sterge o figura" << endl;
cout << "0) Exit" << endl;
cin >> menu;
switch (menu)
{
case 0 :
{
system("cls");
for(int i=0; i<n; i++)
{
delete []Fig[i];
Fig[i]=NULL;
}
delete []Fig;
for(int i=0; i<8; i++)
{
delete []TablouSah[i];
}
delete []TablouSah;
return 0;
}
break;
case 1:
{
system("cls");
cout << "Figurile de sah sunt : " << endl;
for(int i=0; i<n; i++)
{
if(Fig[i]!=NULL)
{
cout << "Figura ID = " << i+1 << endl;
Fig[i]->Print();
cout << endl;
}
}
}
break;
case 2:
{
system("cls");
n+=1;
Fig=(Figura**)realloc(Fig, n*sizeof(Figura*));
Fig[n-1] = new Figura();
cout << "Doriti sa copiati datele unei figuri actuale, sau sa
generati date noi ?" << endl;
cout << "1) Copii datele" << endl;
cout << "2) Generez date noi" << endl;
do
{
cin >> choise;
if(choise<1 || choise>2)
{
cout << "Obtiune inexistenta" << endl;
}
}while (choise<1 || choise>2);
if (choise==1)
{
system("cls");
cout << "Alegeti o figura de sah din lista propusa : " <<
endl;
for(int i=0; i<n-1; i++)
{
if(Fig[i]!=NULL)
{
cout << "Figura ID = " << i+1 << endl;
Fig[i]->Print();
cout << endl;
}
}
cout << "0) Exit" << endl;
do
{
cin >> chx;
if(chx==0)
{
n=n-1;
break;
}
if(chx<0 || chx>n)
{
cout << "Figura inexistenta" << endl;
}
}while (chx<0 || chx>n);
if(chx!=0)
{
Fig[n-1]=Fig[chx-1];
}
}
if (choise==2)
{
Fig[n-1]->SetFigureChar();
}
}
break;
case 3:
{
system("cls");
cout << "Alegeti o figura de sah din lista propusa : " <<
endl;
for(int i=0; i<n; i++)
{
if(Fig[i]!=NULL)
{
cout << "Figura ID = " << i+1 << endl;
Fig[i]->Print();
cout << endl;
}
}
cout << "0) Exit" << endl;
do
{
cin >> choise;
if(choise<0 || choise>n)
{
cout << "Figura inexistenta" << endl;
}
}while (choise<0 || choise>n);
if(choise!=0)
{
Fig[choise-1]->Move();
}
}
break;
case 4:
{
system("cls");
alb=0;
negru=0;
for(int i=0; i<n; i++)
{
if(Fig[i]!=NULL)
{
if(Fig[i]->GetCollor()==1)
{
alb+=1;
} else if (Fig[i]->GetCollor()==2)
{
negru+=1;
}
}
}
cout << "Total figure pe tabal de sah sunt : " << alb+negru
<< endl;
cout << "Figure albe sunt : " << alb << endl;
cout << "Figure negre sunt : " << negru << endl;
}
break;
case 5:
{
system("cls");
cout << "Denumirea figurilor de sah sunt : " << endl;
cout << "Figuri disponibile : Rege = RG , Regina = Rg, Turn =
T, Nebun = N, Cal = C, Pion = P" << endl;
cout << "Culoarea este evidentiata inaintea numenul figurii
conform notatiei : A = Alb, N = Negru" << endl;
cout << "Exemplu ARG = Rege de culoaea alba ; NRg = Regina de
culoarea neagra" << endl;
system("pause");
for(int j=0; j<8; j++)
{
for(int k=0; k<8;k++)
{
{
TablouSah[j][k]=NULL;
}
}
}
for(int i=0; i<n; i++)
{
if(Fig[i]!=NULL)
{
Fig[i]->RetunrCoord(x, y);
TablouSah[y-1][x-1]=Fig[i];
}
}
for(int i=0; i<9; i++)
{
if(i>0)
{
cout << i << "\t";
}
for(int j=0; j<9; j++)
{
if(i==0 && j==0)
{
cout << "\t";
}
if(i>0 && j>0)
{
if(TablouSah[i-1][j-1]==NULL)
{
cout <<"\t";
} else
{
TablouSah[i-1][j-1]->PrintTBL();
cout <<"\t";
}
}
if(i>0 && j==8)
{
cout << "\n";
}
if(i==0 && j>0)
{
switch (j)
{
case 1 : cout << "A\t"; break;
case 2 : cout << "B\t"; break;
case 3 : cout << "C\t"; break;
case 4 : cout << "D\t"; break;
case 5 : cout << "E\t"; break;
case 6 : cout << "F\t"; break;
case 7 : cout << "G\t"; break;
case 8 : cout << "H\n"; break;
}
}
}
}
}
break;
case 6:
{
system("cls");
cout << "Alegeti o figura de sah din lista propusa : " <<
endl;
for(int i=0; i<n; i++)
{
if(Fig[i]!=NULL) {
cout << "Figura ID = " << i + 1 << endl;
Fig[i]->Print();
cout << endl;
}
}
cout << "0) Exit" << endl;
do
{
cin >> choise;
if(choise<0 || choise>n)
{
cout << "Figura inexistenta" << endl;
}
}while (choise<0 || choise>n);
if(choise!=0)
{
delete Fig[choise-1];
Fig[choise-1]=NULL;
}
}
}
system("pause");
}while(menu!=0);
}
Rezultatele rularii
Concluzie