SlideShare a Scribd company logo
1 of 16
1.
/*Testa?i exemplele din laborator introducand clasele in fisiere header
distincte, care vor fi incluse in programul principal.
Problema 1
*/
//Modalitatea de definire si utilizare a metodelor virtuale
//fisierul antet automobil.h
class Automobil : public Vehicul
{
int incarcatura_pasageri;
public:
void mesaj(void)
{
cout << "Mesaj din clasa Automobiln";
}
};
//fisierul antet barca.h
class Barca : public Vehicul
{
int incarcatura_pasageri;
public:
int pasegeri(void)
{
return incarcatura_pasageri;
}
void mesaj(void)
{
cout << "Mesaj din clasa Barcan";
}
};
//fisierul antet camion.h
class Camion : public Vehicul
{
int incarcatura_pasageri;
float incarcatura_utila;
public:
int pasageri(void)
{
return incarcatura_pasageri;
}
};
//fisierul antet vehicul.h
class Vehicul
{
int roti;
float greutate;
public:
virtual void mesaj(void)
{
cout << "Mesaj din clasa Vehiculn";
}
};
#include<conio.h>
#include<iostream>
using namespace std;
#include "automobil.h"
#include "barca.h"
#include "camion.h"
#include "vehicul.h"
void main(void)
{
// apel direct, prin intermediul unor obiecte specifice
Vehicul monocicleta;
Automobil ford;
Camion semi;
Barca barca_de_pescuit;
monocicleta.mesaj();
ford.mesaj();
semi.mesaj();
barca_de_pescuit.mesaj();
// apel prin intermediul unui pointer specific
Vehicul *pmonocicleta;
Automobil *pford;
Camion *psemi;
Barca *pbarca_de_pescuit;
cout << "n";
pmonocicleta = &monocicleta;
pmonocicleta->mesaj();
pford = &ford;
pford->mesaj();
psemi = &semi;
psemi->mesaj();
pbarca_de_pescuit = &barca_de_pescuit;
pbarca_de_pescuit->mesaj();
// apel prin intermediul unui pointer catre un obiect al clasei de baza
cout << "n";
pmonocicleta = &monocicleta;
pmonocicleta->mesaj();
pmonocicleta = &ford;
pmonocicleta->mesaj();
pmonocicleta = &semi;
pmonocicleta->mesaj();
pmonocicleta = &barca_de_pescuit;
pmonocicleta->mesaj();
getch();
}
Problema 2
/*Exemplu cu clase abstracte si functii virtuale pure*/
//fisier Shape.h
class Shape {
protected:
int xorig;
int yorig;
Color co;
public:
Shape(int x, int y, Color c) : xorig(x), yorig(y), co(c) {}
virtual ~Shape() {} // destructor virtual
virtual void draw() = 0; // functie virtuala pura
};
//fisier Line.h
class Line : public Shape {
int xdest;
int ydest;
public:
Line(int x, int y, Color c, int xd, int yd) :xdest(xd), ydest(yd),
Shape(x, y, c) {}
~Line() {cout << "~Linien";} // destructor virtual
void draw() // functie virtuala
{
cout << "Linie" << "(";
cout << xorig << ", " << yorig << ", " << int(co);
cout << ", " << xdest << ", " << ydest;
cout << ")n";
}
};
//fisier Circle.h
class Circle : public Shape {
int raza;
public:
Circle(int x, int y, Color c, int r) : raza(r), Shape(x, y, c) {}
~Circle() {cout << "~Cercn";} // destructor virtual
void draw() // functie virtuala
{
cout << "Cerc" << "(";
cout << xorig << ", " << yorig << ", " << int(co);
cout << ", " << raza;
cout << ")n";
}
};
//fisier Text.h
class Text : public Shape {
char* str;
public:
Text(int x, int y, Color c, const char* s) : Shape(x, y, c)
{
str = new char[strlen(s) + 1];
strcpy(str, s);
}
~Text() {delete [] str; cout << "~Textn";} // destructor virtual
void draw() // functie virtuala
{
cout << "Text" << "(";
cout << xorig << ", " << yorig << ", " << int(co);
cout << ", " << str;
cout << ")n";
}
};
#include<iostream>
using namespace std;
#include<string.h>
#include "Shape.h"
#include "Line.h"
#include "Circle.h"
#include "Text.h"
enum Color {Co_red, Co_green, Co_blue};
void main(void)
{
const int N = 5;
int i;
Shape* sptrs[N];
sptrs[0] = new Line(1, 1, Co_blue, 4, 5);
sptrs[1] = new Line(3, 2, Co_red, 9, 75);
sptrs[2] = new Circle(5, 5, Co_green, 3);
sptrs[3] = new Text(7, 4, Co_blue, "Salut echipa de lucru ...&...!");
sptrs[4] = new Circle(3, 3, Co_red, 10);
for (i = 0; i < N; i++)
sptrs[i]->draw();
for (i = 0; i < N; i++)
delete sptrs[i];
cin.get();
}
Problema 3
/*Clasa de baza Baza este mostenita virtual atat de Derivata1 cat si de Derivata
2*/
//fisier Baza.h
class Baza {
public:
Baza(){
cout<<"Apel la constructorul clasei de bazan";
}
}; // clasa de baza
//fisier Derivata1.h
class Derivata1 : virtual public Baza {
public:
Derivata1(){
cout<<"Apel la constructorul clasei Derivata1n";
}
};
//fisier Derivata2.h
class Derivata2 : virtual public Baza {
public:
Derivata2(){
cout<<"Apel la constructorul clasei Derivata2n";
}
};
//fisier Derivata1si2.h
class Derivata1si2 : public Derivata1, public Derivata2 {
public:
Derivata1si2(){
cout<<"Apel la constructorul clasei Derivata1si2n";
}
};
#include<iostream>
using namespace std;
#include "Derivata1.h"
#include "Derivata2.h"
#include "Derivata1si2.h"
void main(void){
Derivata1si2 ob;
cin.get();
}
2.
/*La primul exemplu extindeþi clasa de bazã cu alte funcþii virtuale, redefinite
în clasele derivate, cum ar fi
metode get ºi set pentru greutatea vehicolului (variabila greutate).
*/
//fisierul antet vehicul.h
class Vehicul {
int roti;
float greutate;
public:
virtual void mesaj(void)
{
cout << "Mesaj din clasa Vehiculn";
}
virtual void set_greutate(float g)
{
greutate=g;
}
virtual float get_greutate()
{
return greutate;
}
};
//fisierul antet camion.h
class Camion : public Vehicul {
int incarcatura_pasageri;
float incarcatura_utila;
public:
int pasageri(void)
{
return incarcatura_pasageri;
}
void mesaj()
{
cout<<"Mesaj din clasa camion";
}
virtual float get_greutate()
{
cout<<"Greutatea camionului:";
return vehicul::get_greutate();
}
virtual void set_greutate(float g)
{
vehicul::set_greutate(g);
cout<<"S-a setat greutatea camionului la valoarea:
"<<vehicul::set_greutate()<<endl;
}
};
//fisierul antet barca.h
class Barca : public Vehicul {
int incarcatura_pasageri;
public:
int pasegeri(void)
{
return incarcatura_pasageri;
}
void mesaj(void)
{
cout << "Mesaj din clasa Barcan";
}
virtual float get_greutate()
{
cout<<"Greutatea barcii este:";
return vehicul::get_greutate();
}
virtual void set_greutate(float g)
{
vehicul::set_greutate(g);
cout<<"S-a setat greutatea barcii la valoarea:
"<<vehicul::get_greutate()<<endl;
}
};
//fisierul antet automobil.h
class Automobil : public Vehicul {
int incarcatura_pasageri;
public:
void mesaj(void)
{
cout << "Mesaj din clasa Automobiln";
}
virtual float get_greutate()
{
cout<<"Greutatea automobilului este:";
return vehicul::get_greutate();
}
virtual void set_greutate(float g)
{
vehicul::set_greutate(g);
cout<<"S-a setat greutatea automobilului la valoarea:
"<<vehicul::get_greutate()<<endl;
}
};
#include<iostream>
using namespace std;
#include "vehicul.h"
#include "camion.h"
#include "barca.h"
#include "automobil.h"
void main(void)
{
// apel direct, prin intermediul unor obiecte specifice
Vehicul monocicleta;
Automobil ford;
Camion semi;
Barca barca_de_pescuit;
cout<<"Apel prin obiecte specifice:n";
monocicleta.mesaj();
ford.mesaj();
semi.mesaj();
barca_de_pescuit.mesaj();
// apel prin intermediul unui pointer specific
Vehicul *pmonocicleta;
Automobil *pford;
Camion *psemi;
Barca *pbarca_de_pescuit;
cout << "Apel prin ptr specifici:n";
pmonocicleta = &monocicleta;
pmonocicleta->mesaj();
pford = &ford;
pford->mesaj();
psemi = &semi;
psemi->mesaj();
pbarca_de_pescuit = &barca_de_pescuit;
pbarca_de_pescuit->mesaj();
// apel prin intermediul unui pointer catre un obiect al clasei de baza
cout << "Apel prin ptr la clasa de baza:n";
pmonocicleta = &monocicleta;
pmonocicleta->mesaj();
pmonocicleta->set_greutate(400);
cout<<pmonocicleta->get_greutate()<<endl;
cout<<endl;
pmonocicleta = &ford;
pmonocicleta->mesaj();
pmonocicleta->set_greutate(270);
cout<<pmonocicleta->get_greutate()<<endl;
cout<<endl;
pmonocicleta = &semi;
pmonocicleta->mesaj();
pmonocicleta->set_greutate(350);
cout<<pmonocicleta->get_greutate()<<endl;
cout<<endl;
pmonocicleta = &barca_de_pescuit;
pmonocicleta->mesaj();
pmonocicleta->set_greutate(300);
cout<<pmonocicleta->get_greutate()<<endl;
cout<<endl;
cin.get();
}
3.
/*Sã se scrie un program C++ în care se defineºte o clasã Militar cu o metodã
publicã virtualã sunt_militar() care indicã
apartenenþa la armatã. Derivaþi clasa Militar pentru a crea clasa Soldat ºi
clasa Ofiter. Derivaþi mai departe clasa Ofiter
pentru a obtine clasele Locotenent, Colonel, Capitan, General. Redefiniti
metoda sunt_militar() pentru a indica gradul militar
pentru fiecare clasa specifica. Instantiati fiecare clasa Soldat,
Locotenent,...,General, si apelati metoda sunt_militar().
*/
//fisier Militar.h
class Militar
{
char nume[20];
int varsta;
public:
virtual void mesaj ()
{
cout<<"nMesaj din clasa Militar";
}
void set_values(char *n, int v)
{
strcpy(nume,n);
varsta=v;
}
virtual void sunt_militar()
{
cout<<nume<<" lucteaza in cadrul armatei";
}
};
//fisier Soldat.h-clasa derivata din militar
class Soldat:public Militar
{
public:
void mesaj ()
{
cout<<"Mesaj din clasa Soldat;"
}
virtual void sunt_militar()
{
cout<<"Gradul:Soldatn";
}
};
//fisier Ofiter.h - derivata din clasa Militar
class Ofiter:public Militar
{
public:
void mesaj ()
{
cout<<"Mesaj din clasa Ofiter;"
}
virtual void sunt_militar()
{
cout<<"Gradul:Ofitern";
}
};
//fisier Colonel.h -derivata din clasa Ofiter
class Colonel:public Ofiter
{
public:
void mesaj ()
{
cout<<"Mesaj din clasa Colonel";
}
virtual void sunt_militar()
{
cout<<"Gradul:Coloneln";
}
};
//fisier Capitan.h -derivata din clasa Ofiter
class Capitan:public Ofiter
{
public:
void mesaj ()
{
cout<<"Mesaj din clasa Capitan";
}
virtual void sunt_militar()
{
cout<<"Gradul:Capitann";
}
};
//fisier General.h -derivata din clasa Ofiter
class General:public Ofiter
{
public:
void mesaj ()
{
cout<<"Mesaj din clasa General";
}
virtual void sunt_militar()
{
cout<<"Gradul:Generaln";
}
};
//fisier Capitan.h -derivata din clasa Ofiter
class Locotenent:public Ofiter
{
public:
void mesaj ()
{
cout<<"Mesaj din clasa Locotenent";
}
virtual char* sunt_militar()
{
return ("Locotenentn");
}
};
#include<iostream>
using namespace std;
#include "Militar.h"
#include "Soldat.h"
#include "Ofiter.h"
#include "Locotenent.h"
#include "Capitan.h"
#include "General.h"
#include<string.h>
void main ()
{
char n[20];
int v;
cout<<"Dati numele:"; cin>>n;
cout<<"Dati varsta:"; cin>>v;
Militar mili;
mili.set_values(n,v);
Soldat sol;
Ofiter of;
Locotenent loc;
Colonel col;
Capitan cap;
General gen;
cout<<"nApel metoda prin obiecte specifice n";
mili.sunt_militar();
sol.sunt_militar();
of.sunt_militar();
loc.sunt_militar();
col.sunt_militar();
cap.sunt_militar();
gen.sunt_militar();
cout<<"nApel metoda prin ptr la clasa Militar respectiv Ofiter";
//declaram un ptr catre Militar care va pointa pe obiecte din Soldat si
ofiter
Militar*pmili=&sol;
pmili->sunt_militar();
pmili=&of;
pmili->sunt_militar();
//declaram un ptr catreOfiter care va pointa pe ob din clasele Loc, Col,
Cap, gen
Ofiter *pof=&loc;
pof->sunt_militar();
pof=&col;
pof->sunt_militar();
pof=&cap;
pof->sunt_militar();
pof=&gen;
pof->sunt_militar();
}
4.
/*Declarati o clasa Animal, care va contine o metoda pur virtuala, respira() si
doua metode virtuale manaca() si
doarme(). Derivati in mod public o clasa Caine si alta Peste, care vor defini
metoda pur virtuala, iar clasa Caine
va redefini metoda mananca(), iar Peste metoda doarme(). Instantiati obiecte din
cele doua clase si apelati metodele specifice.
Definiti apoi un tablou de tip Animal, care va contine obiecte din clasele
derivate, daca e posibil.
Daca nu, gasiti o solutie adecvata.
*/
class Animal
{
public:
virtual void mesaj()
{
cout<<"Mesaj din clasa Animal";
}
virtual void respira()=0;
virtual void mananca()
{
cout<<"Ce mananca de obicei?";
}
virtual void doarme ()
{
cout<<"Cat doarme?";
}
};
class Caine: public Animal
{
public:
void mesaj()
{
cout<<"Mesaj din clasa Caine";
}
void respira()
{
cout<<"Respira";
}
void mananca()
{
cout<<"Mananca orice ii dau";
}
};
class Peste:Public Animal
{
public:
void mesaj()
{
cout<<"Mesaj din clasa Peste";
}
void respira ()
{
cout<<"Respira prin branhii";
}
void doarme()
{
cout<<"Nu doarme deloc";
}
};
#include<iostream>
using namespace std;
#include"Animal.h"
#include"Caine.h"
#include"Peste.h"
void main ()
{
const int N=2;
Caine azor;
azor.mesaj();
azor.respira();
azor.mananca();
cout<<endl;
Peste pestisor;
pestisor.mesaj();
pestisor.respira();
pestirsor.doarme();
cout<<endl;
Animal *tab[n];
tab[0]=new Caine;
tab[1]=new Peste;
for (int i=0;i<N;i++)
{
cout<<endl;
tab[i]->mesaj();
tab[i]->doarme();
tab[i]->mananca();
tab[i]->respira();
}
for (int i=0;i<N;i++)
{
delete tab[i];
}
}
5.
/*Definiti o clasa abstracta care contine 3 declaratii de metode pentru
concatenarea, intreteserea a doua siruri de caractere
si inversarea unui sir de caractere primit ca parametru. O subclasa
implementeaza corpurile metodelor declarate in clasa de baza.
Instantiati clasa derivata si afisati rezultatele aplicarii operatiilor
implementate in clasa asupra unor siruri de caractere citite
de la tastatura. Examinati eroarea data de incercarea de a instantia clasa de
baza.
*/
#include<string.h>
#include<iostream>
using namespace std;
class Sir
{
public:
virtual char* concatenare(char *s1, char*s2)=0;
virtual char* intresetare(char*s1, char*s2)=0;
virtual char* inversare(char* s)=0;
};
class Sir_derivata
{
public:
char* concatenare(char *s1, char* s2)
{
return strcat(s1,s2);
}
char *intresetare(char*s1, char*s2)
{
int l1=strlen(s1), l2=strlen(s2);
int min=(l1<l2?l1:l2);
int k=0;
char *r=new char[l1+l2];
for(int i=0;i<min;i++)
{
r[k++]=s1[i];
r[k++]=s2[i];
}
if(l1<l2)
for(int i=min;i<l2;i++)
r[k++]=s2[i];
else
for(int i=min;i<l1;i++)
r[k++]=s1[i];
r[k]='0';
return r;
}
char*inversare(char*s)
{
/*int l=strlen(s);
char *s1=NULL;
s1=new char[l];
for(int i=0;i<l;i++)
{
s1[i]=s[l-i-1];
}
s1[l]='0';
return s1;*/
char *s1=NULL;
s1=strrev(s);
return s1;
}
};
void main ()
{
char s1[50], s2[50], s3[50];
Sir_derivata ob;
cout<<"Dati s1:"; cin>>s1;
cout<<"Dati s2:"; cin>>s2;
cout<<"Dati s3:"; cin>>s3;
cout<<"nSirul obtinut prin intresetarea primelor
doua:"<<ob.intresetare(s1,s2);
cout<<"nSirul obtinut prin concatenarea primelor
doua:"<<ob.concatenare(s1,s2);
cout<<"nSirul 3 inversat:"<<ob.inversare(s3);
}
6.
/*Definiti o clasa numita Record care stocheaza informatiile aferente unei
melodii (artist, titlu, durata). O clasa abstracta (Playlist)
contine ca variabila privata un pointer spre un sir de obiecte de tip
inregistrare. In constructor se aloca memorie pentru un numar de
inregistrari definit de utilizator. Clasa contine metode accesor si mutator
pentru datele componente ale unei inregistrari si o metoda
abstracta cu un parametru, care poate ordona sirul de inregistrari dupa un
anumit criteriu codat in valoarea intreaga primita ca parametru
(1=ordonare dupa titlu, 2=ordonare dupa artist, 3=ordonare dupa durata). Intr-o
alta clasa (PlaylistImplementation) derivata din Playlist
se implementeaza corpul metodei abstracte de sortare.
In functia main, sa se instantieze un obiect din clasa PlaylistImplementation si
apoi sa se foloseasca datele si metodele aferente.
*/
#include<iostream>
using namespace std;
#include<string.h>
class Record
{
char artist[20], titlu[20];
int min, sec;
public:
char *get_artist()
{
return artist;
}
char * get_titlu()
{
return titlu;
}
int get_min()
{
return min;
}
int get_sec()
{
return sec;
}
void set_artist(char *a)
{
strcpy(artist,a);
}
void set_titlu(char *t)
{
strcpy(titlu,t);
}
void set_min(int m)
{
min=m;
}
void set_sec(int s)
{
sec=s;
}
};
class Playlist
{
protected: Record *p;
int n;
public:
Playlist(int n)
{
this->n=n;
p=new Record[n];
}
void init ()
{
char t[20], a[20];
int m,s;
for(int i=0;i<n;i++)
{
cout<<"Piesa "<<i+1<<":n";
cout<<"Titlu: "; cin>>t;
p[i].set_titlu(t);
cout<<"Artist:"; cin>>a;
p[i].set_artist(a);
cout<<"Durata:";
cout<<"Minute:"; cin>>m;
p[i].set_min(m);
cout<<"Secunde:"; cin>>s;
p[i].set_sec(s);
}
}
Record getRecord(int n)
{
return p[n];
}
void setRecord(Record r, int n)
{
p[n]=r;
}
virtual void ordonare(int c, int n)=0;
};
class PlaylistImplementation: public Playlist
{
public:
PlaylistImplementation(int n):Playlist(n)
{
}
void afis(int n)
{
for(int i=0;i<n;i++)
{
cout<<"nTitlu: "<<p[i].get_titlu();
cout<<"nArtist: "<<p[i].get_artist();
cout<<"nDurata:n"<<"Minute: "<<p[i].get_min()<<"nSecunde:
"<<p[i].get_sec();
}
}
void ordonare(int c, int n)
{
switch (c)
{
case 1:
{
char s1[20], s2[20];
cout<<"Ordonare alfabetica dupa titlu:n";
for (int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
{
strcpy(s1,p[i].get_titlu());
strcpy(s2,p[j].get_titlu());
if(strcmp(s1,s2)>0)
{
Record aux;
aux=p[i];
p[i]=p[j];
p[j]=aux;
}
}
break;
}
case 2:
{
cout<<"Ordonare alfabetica dupa artist:n";
char s1[20], s2[20];
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
{
strcpy(s1, p[i].get_artist());
strcpy(s2, p[j].get_artist());
if(strcmp(s1,s2)>0)
{
Record aux;
aux=p[i];
p[i]=p[j];
p[j]=aux;
}
}
break;
}
case 3:
{
int m1,m2, s1,s2;
cout<<"Ordonare crescatoare dupa durata:n";
for(int i=0;i<n-1;i++)
for(int j=i+1;j<n;j++)
{
m1=p[i].get_min();
s1=p[i].get_sec();
m2=p[j].get_min();
s2=p[j].get_sec();
if(m1>m2)
{
Record aux;
aux=p[i];
p[i]=p[j];
p[j]=aux;
}
else
if(m1==m2)
{
if(s1>s2)
{
Record aux;
aux=p[i];
p[i]=p[j];
p[j]=aux;
}
}
}
break;
}
default:
{
cout<<"Introduceti 1, 2, 3";
break;
}
}
}
};
void main ()
{
int n;
cout<<"nDati numarul de inregistrari:"; cin>>n;
PlaylistImplementation ob(n);
ob.init();
int c;
cout<<"Dati numarul parametrului de ordonare:"; cin>>c;
ob.ordonare(c,n);
cout<<"nLista ordonata de inregistrari:n";
ob.afis(n);
}

More Related Content

What's hot

RxSwift 예제로 감잡기
RxSwift 예제로 감잡기RxSwift 예제로 감잡기
RxSwift 예제로 감잡기Yongha Yoo
 
HTML5を使ったウェブアプリケーションの高速化
HTML5を使ったウェブアプリケーションの高速化HTML5を使ったウェブアプリケーションの高速化
HTML5を使ったウェブアプリケーションの高速化hagino 3000
 
ピグライフ と node.js
ピグライフ と node.jsピグライフ と node.js
ピグライフ と node.jsSuguru Namura
 
Javascript per applicazioni complesse - Lo Stretto digitale
Javascript per applicazioni complesse - Lo Stretto digitaleJavascript per applicazioni complesse - Lo Stretto digitale
Javascript per applicazioni complesse - Lo Stretto digitaleGiuseppe Pizzimenti
 
Clase 7 el modelo
Clase 7  el modeloClase 7  el modelo
Clase 7 el modelohydras_cs
 
Java Script - Object-Oriented Programming
Java Script - Object-Oriented ProgrammingJava Script - Object-Oriented Programming
Java Script - Object-Oriented Programmingintive
 

What's hot (8)

Sis quiz
Sis quizSis quiz
Sis quiz
 
RxSwift 예제로 감잡기
RxSwift 예제로 감잡기RxSwift 예제로 감잡기
RxSwift 예제로 감잡기
 
HTML5を使ったウェブアプリケーションの高速化
HTML5を使ったウェブアプリケーションの高速化HTML5を使ったウェブアプリケーションの高速化
HTML5を使ったウェブアプリケーションの高速化
 
Testování prakticky
Testování praktickyTestování prakticky
Testování prakticky
 
ピグライフ と node.js
ピグライフ と node.jsピグライフ と node.js
ピグライフ と node.js
 
Javascript per applicazioni complesse - Lo Stretto digitale
Javascript per applicazioni complesse - Lo Stretto digitaleJavascript per applicazioni complesse - Lo Stretto digitale
Javascript per applicazioni complesse - Lo Stretto digitale
 
Clase 7 el modelo
Clase 7  el modeloClase 7  el modelo
Clase 7 el modelo
 
Java Script - Object-Oriented Programming
Java Script - Object-Oriented ProgrammingJava Script - Object-Oriented Programming
Java Script - Object-Oriented Programming
 

Viewers also liked

100 soal-matematika-sma-kls-x-smt-2
100 soal-matematika-sma-kls-x-smt-2100 soal-matematika-sma-kls-x-smt-2
100 soal-matematika-sma-kls-x-smt-2Resyad Moeljadi
 
1326502 634641209352859208
1326502 6346412093528592081326502 634641209352859208
1326502 634641209352859208Razvan Rus
 
Synthetic Emotions Bicycle (SEB)
Synthetic Emotions Bicycle (SEB)Synthetic Emotions Bicycle (SEB)
Synthetic Emotions Bicycle (SEB)Tamara Pinos
 
Kisi kisi uas semester genap kelas 10
Kisi kisi uas semester genap kelas 10Kisi kisi uas semester genap kelas 10
Kisi kisi uas semester genap kelas 10Resyad Moeljadi
 
Prototyping Workshop
Prototyping WorkshopPrototyping Workshop
Prototyping WorkshopTamara Pinos
 
Μιχαήλ Άγγελος
Μιχαήλ ΆγγελοςΜιχαήλ Άγγελος
Μιχαήλ Άγγελοςgeorgiatzimou1
 
η ηττημενη γενια του μεσοπολεμου, Webquest
η ηττημενη γενια του μεσοπολεμου, Webquestη ηττημενη γενια του μεσοπολεμου, Webquest
η ηττημενη γενια του μεσοπολεμου, Webquestgeorgiatzimou1
 
Energiile viitorului
Energiile viitoruluiEnergiile viitorului
Energiile viitoruluiRazvan Rus
 

Viewers also liked (12)

100 soal-matematika-sma-kls-x-smt-2
100 soal-matematika-sma-kls-x-smt-2100 soal-matematika-sma-kls-x-smt-2
100 soal-matematika-sma-kls-x-smt-2
 
1326502 634641209352859208
1326502 6346412093528592081326502 634641209352859208
1326502 634641209352859208
 
Kisi kimia word
Kisi kimia wordKisi kimia word
Kisi kimia word
 
Synthetic Emotions Bicycle (SEB)
Synthetic Emotions Bicycle (SEB)Synthetic Emotions Bicycle (SEB)
Synthetic Emotions Bicycle (SEB)
 
Kisi kisi uas semester genap kelas 10
Kisi kisi uas semester genap kelas 10Kisi kisi uas semester genap kelas 10
Kisi kisi uas semester genap kelas 10
 
Kisi kimia word
Kisi kimia wordKisi kimia word
Kisi kimia word
 
Marching Cubes
Marching CubesMarching Cubes
Marching Cubes
 
Prototyping Workshop
Prototyping WorkshopPrototyping Workshop
Prototyping Workshop
 
Hola!!
Hola!!Hola!!
Hola!!
 
Μιχαήλ Άγγελος
Μιχαήλ ΆγγελοςΜιχαήλ Άγγελος
Μιχαήλ Άγγελος
 
η ηττημενη γενια του μεσοπολεμου, Webquest
η ηττημενη γενια του μεσοπολεμου, Webquestη ηττημενη γενια του μεσοπολεμου, Webquest
η ηττημενη γενια του μεσοπολεμου, Webquest
 
Energiile viitorului
Energiile viitoruluiEnergiile viitorului
Energiile viitorului
 

Lab 10 rus razvan

  • 1. 1. /*Testa?i exemplele din laborator introducand clasele in fisiere header distincte, care vor fi incluse in programul principal. Problema 1 */ //Modalitatea de definire si utilizare a metodelor virtuale //fisierul antet automobil.h class Automobil : public Vehicul { int incarcatura_pasageri; public: void mesaj(void) { cout << "Mesaj din clasa Automobiln"; } }; //fisierul antet barca.h class Barca : public Vehicul { int incarcatura_pasageri; public: int pasegeri(void) { return incarcatura_pasageri; } void mesaj(void) { cout << "Mesaj din clasa Barcan"; } }; //fisierul antet camion.h class Camion : public Vehicul { int incarcatura_pasageri; float incarcatura_utila; public: int pasageri(void) { return incarcatura_pasageri; } }; //fisierul antet vehicul.h class Vehicul { int roti; float greutate; public: virtual void mesaj(void) { cout << "Mesaj din clasa Vehiculn"; }
  • 2. }; #include<conio.h> #include<iostream> using namespace std; #include "automobil.h" #include "barca.h" #include "camion.h" #include "vehicul.h" void main(void) { // apel direct, prin intermediul unor obiecte specifice Vehicul monocicleta; Automobil ford; Camion semi; Barca barca_de_pescuit; monocicleta.mesaj(); ford.mesaj(); semi.mesaj(); barca_de_pescuit.mesaj(); // apel prin intermediul unui pointer specific Vehicul *pmonocicleta; Automobil *pford; Camion *psemi; Barca *pbarca_de_pescuit; cout << "n"; pmonocicleta = &monocicleta; pmonocicleta->mesaj(); pford = &ford; pford->mesaj(); psemi = &semi; psemi->mesaj(); pbarca_de_pescuit = &barca_de_pescuit; pbarca_de_pescuit->mesaj(); // apel prin intermediul unui pointer catre un obiect al clasei de baza cout << "n"; pmonocicleta = &monocicleta; pmonocicleta->mesaj(); pmonocicleta = &ford; pmonocicleta->mesaj(); pmonocicleta = &semi; pmonocicleta->mesaj(); pmonocicleta = &barca_de_pescuit; pmonocicleta->mesaj(); getch(); } Problema 2 /*Exemplu cu clase abstracte si functii virtuale pure*/ //fisier Shape.h class Shape { protected:
  • 3. int xorig; int yorig; Color co; public: Shape(int x, int y, Color c) : xorig(x), yorig(y), co(c) {} virtual ~Shape() {} // destructor virtual virtual void draw() = 0; // functie virtuala pura }; //fisier Line.h class Line : public Shape { int xdest; int ydest; public: Line(int x, int y, Color c, int xd, int yd) :xdest(xd), ydest(yd), Shape(x, y, c) {} ~Line() {cout << "~Linien";} // destructor virtual void draw() // functie virtuala { cout << "Linie" << "("; cout << xorig << ", " << yorig << ", " << int(co); cout << ", " << xdest << ", " << ydest; cout << ")n"; } }; //fisier Circle.h class Circle : public Shape { int raza; public: Circle(int x, int y, Color c, int r) : raza(r), Shape(x, y, c) {} ~Circle() {cout << "~Cercn";} // destructor virtual void draw() // functie virtuala { cout << "Cerc" << "("; cout << xorig << ", " << yorig << ", " << int(co); cout << ", " << raza; cout << ")n"; } }; //fisier Text.h class Text : public Shape { char* str; public: Text(int x, int y, Color c, const char* s) : Shape(x, y, c) { str = new char[strlen(s) + 1]; strcpy(str, s); } ~Text() {delete [] str; cout << "~Textn";} // destructor virtual void draw() // functie virtuala { cout << "Text" << "("; cout << xorig << ", " << yorig << ", " << int(co); cout << ", " << str; cout << ")n"; } }; #include<iostream> using namespace std; #include<string.h>
  • 4. #include "Shape.h" #include "Line.h" #include "Circle.h" #include "Text.h" enum Color {Co_red, Co_green, Co_blue}; void main(void) { const int N = 5; int i; Shape* sptrs[N]; sptrs[0] = new Line(1, 1, Co_blue, 4, 5); sptrs[1] = new Line(3, 2, Co_red, 9, 75); sptrs[2] = new Circle(5, 5, Co_green, 3); sptrs[3] = new Text(7, 4, Co_blue, "Salut echipa de lucru ...&...!"); sptrs[4] = new Circle(3, 3, Co_red, 10); for (i = 0; i < N; i++) sptrs[i]->draw(); for (i = 0; i < N; i++) delete sptrs[i]; cin.get(); } Problema 3 /*Clasa de baza Baza este mostenita virtual atat de Derivata1 cat si de Derivata 2*/ //fisier Baza.h class Baza { public: Baza(){ cout<<"Apel la constructorul clasei de bazan"; } }; // clasa de baza //fisier Derivata1.h class Derivata1 : virtual public Baza { public: Derivata1(){ cout<<"Apel la constructorul clasei Derivata1n"; } }; //fisier Derivata2.h class Derivata2 : virtual public Baza { public: Derivata2(){ cout<<"Apel la constructorul clasei Derivata2n"; } }; //fisier Derivata1si2.h class Derivata1si2 : public Derivata1, public Derivata2 { public: Derivata1si2(){ cout<<"Apel la constructorul clasei Derivata1si2n"; } }; #include<iostream> using namespace std; #include "Derivata1.h"
  • 5. #include "Derivata2.h" #include "Derivata1si2.h" void main(void){ Derivata1si2 ob; cin.get(); } 2. /*La primul exemplu extindeþi clasa de bazã cu alte funcþii virtuale, redefinite în clasele derivate, cum ar fi metode get ºi set pentru greutatea vehicolului (variabila greutate). */ //fisierul antet vehicul.h class Vehicul { int roti; float greutate; public: virtual void mesaj(void) { cout << "Mesaj din clasa Vehiculn"; } virtual void set_greutate(float g) { greutate=g; } virtual float get_greutate() { return greutate; } }; //fisierul antet camion.h class Camion : public Vehicul { int incarcatura_pasageri; float incarcatura_utila; public: int pasageri(void) { return incarcatura_pasageri; } void mesaj() { cout<<"Mesaj din clasa camion"; } virtual float get_greutate() { cout<<"Greutatea camionului:"; return vehicul::get_greutate(); } virtual void set_greutate(float g) { vehicul::set_greutate(g); cout<<"S-a setat greutatea camionului la valoarea: "<<vehicul::set_greutate()<<endl; }
  • 6. }; //fisierul antet barca.h class Barca : public Vehicul { int incarcatura_pasageri; public: int pasegeri(void) { return incarcatura_pasageri; } void mesaj(void) { cout << "Mesaj din clasa Barcan"; } virtual float get_greutate() { cout<<"Greutatea barcii este:"; return vehicul::get_greutate(); } virtual void set_greutate(float g) { vehicul::set_greutate(g); cout<<"S-a setat greutatea barcii la valoarea: "<<vehicul::get_greutate()<<endl; } }; //fisierul antet automobil.h class Automobil : public Vehicul { int incarcatura_pasageri; public: void mesaj(void) { cout << "Mesaj din clasa Automobiln"; } virtual float get_greutate() { cout<<"Greutatea automobilului este:"; return vehicul::get_greutate(); } virtual void set_greutate(float g) { vehicul::set_greutate(g); cout<<"S-a setat greutatea automobilului la valoarea: "<<vehicul::get_greutate()<<endl; } }; #include<iostream> using namespace std; #include "vehicul.h" #include "camion.h" #include "barca.h" #include "automobil.h" void main(void) { // apel direct, prin intermediul unor obiecte specifice Vehicul monocicleta; Automobil ford; Camion semi; Barca barca_de_pescuit; cout<<"Apel prin obiecte specifice:n";
  • 7. monocicleta.mesaj(); ford.mesaj(); semi.mesaj(); barca_de_pescuit.mesaj(); // apel prin intermediul unui pointer specific Vehicul *pmonocicleta; Automobil *pford; Camion *psemi; Barca *pbarca_de_pescuit; cout << "Apel prin ptr specifici:n"; pmonocicleta = &monocicleta; pmonocicleta->mesaj(); pford = &ford; pford->mesaj(); psemi = &semi; psemi->mesaj(); pbarca_de_pescuit = &barca_de_pescuit; pbarca_de_pescuit->mesaj(); // apel prin intermediul unui pointer catre un obiect al clasei de baza cout << "Apel prin ptr la clasa de baza:n"; pmonocicleta = &monocicleta; pmonocicleta->mesaj(); pmonocicleta->set_greutate(400); cout<<pmonocicleta->get_greutate()<<endl; cout<<endl; pmonocicleta = &ford; pmonocicleta->mesaj(); pmonocicleta->set_greutate(270); cout<<pmonocicleta->get_greutate()<<endl; cout<<endl; pmonocicleta = &semi; pmonocicleta->mesaj(); pmonocicleta->set_greutate(350); cout<<pmonocicleta->get_greutate()<<endl; cout<<endl; pmonocicleta = &barca_de_pescuit; pmonocicleta->mesaj(); pmonocicleta->set_greutate(300); cout<<pmonocicleta->get_greutate()<<endl; cout<<endl; cin.get(); } 3. /*Sã se scrie un program C++ în care se defineºte o clasã Militar cu o metodã publicã virtualã sunt_militar() care indicã apartenenþa la armatã. Derivaþi clasa Militar pentru a crea clasa Soldat ºi clasa Ofiter. Derivaþi mai departe clasa Ofiter pentru a obtine clasele Locotenent, Colonel, Capitan, General. Redefiniti metoda sunt_militar() pentru a indica gradul militar pentru fiecare clasa specifica. Instantiati fiecare clasa Soldat, Locotenent,...,General, si apelati metoda sunt_militar(). */ //fisier Militar.h class Militar { char nume[20]; int varsta;
  • 8. public: virtual void mesaj () { cout<<"nMesaj din clasa Militar"; } void set_values(char *n, int v) { strcpy(nume,n); varsta=v; } virtual void sunt_militar() { cout<<nume<<" lucteaza in cadrul armatei"; } }; //fisier Soldat.h-clasa derivata din militar class Soldat:public Militar { public: void mesaj () { cout<<"Mesaj din clasa Soldat;" } virtual void sunt_militar() { cout<<"Gradul:Soldatn"; } }; //fisier Ofiter.h - derivata din clasa Militar class Ofiter:public Militar { public: void mesaj () { cout<<"Mesaj din clasa Ofiter;" } virtual void sunt_militar() { cout<<"Gradul:Ofitern"; } }; //fisier Colonel.h -derivata din clasa Ofiter class Colonel:public Ofiter { public: void mesaj () { cout<<"Mesaj din clasa Colonel"; } virtual void sunt_militar() { cout<<"Gradul:Coloneln"; } }; //fisier Capitan.h -derivata din clasa Ofiter class Capitan:public Ofiter { public: void mesaj () {
  • 9. cout<<"Mesaj din clasa Capitan"; } virtual void sunt_militar() { cout<<"Gradul:Capitann"; } }; //fisier General.h -derivata din clasa Ofiter class General:public Ofiter { public: void mesaj () { cout<<"Mesaj din clasa General"; } virtual void sunt_militar() { cout<<"Gradul:Generaln"; } }; //fisier Capitan.h -derivata din clasa Ofiter class Locotenent:public Ofiter { public: void mesaj () { cout<<"Mesaj din clasa Locotenent"; } virtual char* sunt_militar() { return ("Locotenentn"); } }; #include<iostream> using namespace std; #include "Militar.h" #include "Soldat.h" #include "Ofiter.h" #include "Locotenent.h" #include "Capitan.h" #include "General.h" #include<string.h> void main () { char n[20]; int v; cout<<"Dati numele:"; cin>>n; cout<<"Dati varsta:"; cin>>v; Militar mili; mili.set_values(n,v); Soldat sol; Ofiter of; Locotenent loc; Colonel col; Capitan cap; General gen; cout<<"nApel metoda prin obiecte specifice n"; mili.sunt_militar(); sol.sunt_militar();
  • 10. of.sunt_militar(); loc.sunt_militar(); col.sunt_militar(); cap.sunt_militar(); gen.sunt_militar(); cout<<"nApel metoda prin ptr la clasa Militar respectiv Ofiter"; //declaram un ptr catre Militar care va pointa pe obiecte din Soldat si ofiter Militar*pmili=&sol; pmili->sunt_militar(); pmili=&of; pmili->sunt_militar(); //declaram un ptr catreOfiter care va pointa pe ob din clasele Loc, Col, Cap, gen Ofiter *pof=&loc; pof->sunt_militar(); pof=&col; pof->sunt_militar(); pof=&cap; pof->sunt_militar(); pof=&gen; pof->sunt_militar(); } 4. /*Declarati o clasa Animal, care va contine o metoda pur virtuala, respira() si doua metode virtuale manaca() si doarme(). Derivati in mod public o clasa Caine si alta Peste, care vor defini metoda pur virtuala, iar clasa Caine va redefini metoda mananca(), iar Peste metoda doarme(). Instantiati obiecte din cele doua clase si apelati metodele specifice. Definiti apoi un tablou de tip Animal, care va contine obiecte din clasele derivate, daca e posibil. Daca nu, gasiti o solutie adecvata. */ class Animal { public: virtual void mesaj() { cout<<"Mesaj din clasa Animal"; } virtual void respira()=0; virtual void mananca() { cout<<"Ce mananca de obicei?"; } virtual void doarme () { cout<<"Cat doarme?"; } }; class Caine: public Animal { public: void mesaj() {
  • 11. cout<<"Mesaj din clasa Caine"; } void respira() { cout<<"Respira"; } void mananca() { cout<<"Mananca orice ii dau"; } }; class Peste:Public Animal { public: void mesaj() { cout<<"Mesaj din clasa Peste"; } void respira () { cout<<"Respira prin branhii"; } void doarme() { cout<<"Nu doarme deloc"; } }; #include<iostream> using namespace std; #include"Animal.h" #include"Caine.h" #include"Peste.h" void main () { const int N=2; Caine azor; azor.mesaj(); azor.respira(); azor.mananca(); cout<<endl; Peste pestisor; pestisor.mesaj(); pestisor.respira(); pestirsor.doarme(); cout<<endl; Animal *tab[n]; tab[0]=new Caine; tab[1]=new Peste; for (int i=0;i<N;i++) { cout<<endl; tab[i]->mesaj(); tab[i]->doarme(); tab[i]->mananca(); tab[i]->respira(); } for (int i=0;i<N;i++) {
  • 12. delete tab[i]; } } 5. /*Definiti o clasa abstracta care contine 3 declaratii de metode pentru concatenarea, intreteserea a doua siruri de caractere si inversarea unui sir de caractere primit ca parametru. O subclasa implementeaza corpurile metodelor declarate in clasa de baza. Instantiati clasa derivata si afisati rezultatele aplicarii operatiilor implementate in clasa asupra unor siruri de caractere citite de la tastatura. Examinati eroarea data de incercarea de a instantia clasa de baza. */ #include<string.h> #include<iostream> using namespace std; class Sir { public: virtual char* concatenare(char *s1, char*s2)=0; virtual char* intresetare(char*s1, char*s2)=0; virtual char* inversare(char* s)=0; }; class Sir_derivata { public: char* concatenare(char *s1, char* s2) { return strcat(s1,s2); } char *intresetare(char*s1, char*s2) { int l1=strlen(s1), l2=strlen(s2); int min=(l1<l2?l1:l2); int k=0; char *r=new char[l1+l2]; for(int i=0;i<min;i++) { r[k++]=s1[i]; r[k++]=s2[i]; } if(l1<l2) for(int i=min;i<l2;i++) r[k++]=s2[i]; else for(int i=min;i<l1;i++) r[k++]=s1[i]; r[k]='0'; return r; } char*inversare(char*s) { /*int l=strlen(s); char *s1=NULL; s1=new char[l];
  • 13. for(int i=0;i<l;i++) { s1[i]=s[l-i-1]; } s1[l]='0'; return s1;*/ char *s1=NULL; s1=strrev(s); return s1; } }; void main () { char s1[50], s2[50], s3[50]; Sir_derivata ob; cout<<"Dati s1:"; cin>>s1; cout<<"Dati s2:"; cin>>s2; cout<<"Dati s3:"; cin>>s3; cout<<"nSirul obtinut prin intresetarea primelor doua:"<<ob.intresetare(s1,s2); cout<<"nSirul obtinut prin concatenarea primelor doua:"<<ob.concatenare(s1,s2); cout<<"nSirul 3 inversat:"<<ob.inversare(s3); } 6. /*Definiti o clasa numita Record care stocheaza informatiile aferente unei melodii (artist, titlu, durata). O clasa abstracta (Playlist) contine ca variabila privata un pointer spre un sir de obiecte de tip inregistrare. In constructor se aloca memorie pentru un numar de inregistrari definit de utilizator. Clasa contine metode accesor si mutator pentru datele componente ale unei inregistrari si o metoda abstracta cu un parametru, care poate ordona sirul de inregistrari dupa un anumit criteriu codat in valoarea intreaga primita ca parametru (1=ordonare dupa titlu, 2=ordonare dupa artist, 3=ordonare dupa durata). Intr-o alta clasa (PlaylistImplementation) derivata din Playlist se implementeaza corpul metodei abstracte de sortare. In functia main, sa se instantieze un obiect din clasa PlaylistImplementation si apoi sa se foloseasca datele si metodele aferente. */ #include<iostream> using namespace std; #include<string.h> class Record { char artist[20], titlu[20]; int min, sec; public: char *get_artist() { return artist; } char * get_titlu() { return titlu;
  • 14. } int get_min() { return min; } int get_sec() { return sec; } void set_artist(char *a) { strcpy(artist,a); } void set_titlu(char *t) { strcpy(titlu,t); } void set_min(int m) { min=m; } void set_sec(int s) { sec=s; } }; class Playlist { protected: Record *p; int n; public: Playlist(int n) { this->n=n; p=new Record[n]; } void init () { char t[20], a[20]; int m,s; for(int i=0;i<n;i++) { cout<<"Piesa "<<i+1<<":n"; cout<<"Titlu: "; cin>>t; p[i].set_titlu(t); cout<<"Artist:"; cin>>a; p[i].set_artist(a); cout<<"Durata:"; cout<<"Minute:"; cin>>m; p[i].set_min(m); cout<<"Secunde:"; cin>>s; p[i].set_sec(s); } } Record getRecord(int n) { return p[n]; } void setRecord(Record r, int n)
  • 15. { p[n]=r; } virtual void ordonare(int c, int n)=0; }; class PlaylistImplementation: public Playlist { public: PlaylistImplementation(int n):Playlist(n) { } void afis(int n) { for(int i=0;i<n;i++) { cout<<"nTitlu: "<<p[i].get_titlu(); cout<<"nArtist: "<<p[i].get_artist(); cout<<"nDurata:n"<<"Minute: "<<p[i].get_min()<<"nSecunde: "<<p[i].get_sec(); } } void ordonare(int c, int n) { switch (c) { case 1: { char s1[20], s2[20]; cout<<"Ordonare alfabetica dupa titlu:n"; for (int i=0;i<n-1;i++) for(int j=i+1;j<n;j++) { strcpy(s1,p[i].get_titlu()); strcpy(s2,p[j].get_titlu()); if(strcmp(s1,s2)>0) { Record aux; aux=p[i]; p[i]=p[j]; p[j]=aux; } } break; } case 2: { cout<<"Ordonare alfabetica dupa artist:n"; char s1[20], s2[20]; for(int i=0;i<n-1;i++) for(int j=i+1;j<n;j++) { strcpy(s1, p[i].get_artist()); strcpy(s2, p[j].get_artist()); if(strcmp(s1,s2)>0) { Record aux; aux=p[i]; p[i]=p[j]; p[j]=aux; }
  • 16. } break; } case 3: { int m1,m2, s1,s2; cout<<"Ordonare crescatoare dupa durata:n"; for(int i=0;i<n-1;i++) for(int j=i+1;j<n;j++) { m1=p[i].get_min(); s1=p[i].get_sec(); m2=p[j].get_min(); s2=p[j].get_sec(); if(m1>m2) { Record aux; aux=p[i]; p[i]=p[j]; p[j]=aux; } else if(m1==m2) { if(s1>s2) { Record aux; aux=p[i]; p[i]=p[j]; p[j]=aux; } } } break; } default: { cout<<"Introduceti 1, 2, 3"; break; } } } }; void main () { int n; cout<<"nDati numarul de inregistrari:"; cin>>n; PlaylistImplementation ob(n); ob.init(); int c; cout<<"Dati numarul parametrului de ordonare:"; cin>>c; ob.ordonare(c,n); cout<<"nLista ordonata de inregistrari:n"; ob.afis(n); }