Sa se implementeze clasele Cerc si
Dreptunghi derivate din
FiguraGeometrica. Clasa
FiguraGeometrica va fi definita ca si clasa abstractă având
declarată metoda getPerimetru() ca funcție virtuală pură.
#include <math.h>
#include <conio.h>
#include <iostream>
#define M_PI 3.14159265
using namespace std;
class Punct {
float x,y;
public:
Punct(float x = 0, float y = 0);
void setX(float x);
float getX();
void setY(float y);
float getY();
friend ostream & operator << (ostream &out, Punct &p);
};
Punct:: Punct(float x, float y){
this->x = x; this->y = y;
}
void Punct::setX(float x){
this->x = x;
}
float Punct::getX(){
return x;
}
void Punct::setY(float y){
this->y = y;
}
float Punct::getY(){
return y;
}
ostream & operator << (ostream &out, Punct &p){
out<<"("<<p.x<<","<<p.y<<")";
return out;
}
class FiguraGeometrica {
public:
virtual float getPerimetrul() = 0;
virtual void print();
};
void FiguraGeometrica::print(){
cout<<"Figura Geometrica Oarecare"<<endl;
}
class Cerc: public FiguraGeometrica {
Punct centru;
float raza;
public:
Cerc (Punct c, float r);
float getPerimetrul();
void print();
};
Cerc::Cerc(Punct c, float r):centru(c), raza(r){
}
float Cerc::getPerimetrul() {
return 2*M_PI*raza;
}
void Cerc::print(){
cout<<"Cerc ("<<centru<<","<<raza<<")"<<endl;
}
class Dreptunghi: public FiguraGeometrica {
Punct colt_s_s; //colt stanga sus
Punct colt_d_j; //colt dreapta jos
public:
Dreptunghi (Punct c_s_s, Punct c_d_j);
float getPerimetrul();
void print();
};
Dreptunghi::Dreptunghi(Punct c_s_s, Punct c_d_j): colt_s_s(c_s_s), colt_d_j(c_d_j){
}
float Dreptunghi::getPerimetrul() {
return 2*(colt_d_j.getX()-colt_s_s.getX())+2*(colt_s_s.getY()-colt_d_j.getY());
}
void Dreptunghi::print(){
cout<<"Dreptunghi ["<<colt_s_s<<","<<colt_d_j<<"]"<<endl;;
}
int main(){
FiguraGeometrica *f[]={new Cerc(Punct(0,0),1), new Dreptunghi(Punct(0,1),Punct(2,0))};
for(int i=0;i<2;i++){
f[i]->print();
cout<<"Perimetrul = "<<f[i]->getPerimetrul()<<endl;
}
getch();
}
Realizati o clasa abstracta pentru rezolvarea problemelor ce utilizeaza metoda backtracking. Sa se utilizeze aceasta clasa pentru rezolvarea problemei damelor.
#include <math.h>
#include <conio.h>
#include <iostream>
using namespace std;
class Dame;
class Backtracking{
protected:
int x[100];
int k;
public:
void solve();
virtual void initLevel() = 0;
virtual int succesor() = 0;
virtual int validate() const=0;
virtual int testSolution() const=0;
virtual void printSolution() const=0;
};
void Backtracking::solve() {
int is,iv=0;
k=1;
initLevel();
while (k>0){
do{
is=succesor();
if (is)
iv=validate();
} while (!((!is)||((is)&&(iv))));
if(is)
if(testSolution()) printSolution();
else{
k++;
initLevel();
}
else k--;
}
}
class Dame: public Backtracking{
int table;
public:
Dame(int n);
void initLevel();
int succesor();
int validate() const;
int testSolution() const;
void printSolution() const;
};
Dame::Dame(int n){
table=n;
for (int i=1;i<=table;i++)
x[i]=0;
}
void Dame::initLevel() {
x[k]=0;
}
int Dame::succesor() {
if (x[k]<table){
x[k]+=1;
return 1;
} else {
return 0;
}
}
int Dame::validate() const{
for (int i=1;i<k;i++)
if ((x[k]==x[i])||(abs(x[k]-x[i])==abs(k-i)))
return 0;
return 1;
}
int Dame::testSolution() const{
if (k==table) return 1;
return 0;
}
void Dame::printSolution() const{
for (int i=1;i<=table;i++)
cout<<x[i]<<" ";
cout<<"\n";
}
int main (){
Dame *d=new Dame(4);
d->solve();
getch();
return 0;
}
Eliminati cuvantul cheie virtual din declaratia functiei print() a clasei
FiguraGeometrica. Rulati programul si explicati output-ul.
Adaugati la clasa abstracta FiguraGeometrica definita
anterior metoda getAria(). Actualizati corespunzator clasele
Cerc si Dreptunghi.
Sa se realizeze o clasa abstracta ce implementeaza notiunea de Lista.Sa se realizeze doua implementari ale acestei clase ListaStatica si ListaInlantuita.