Sunteți pe pagina 1din 7

//Alexe Tudor Stefan

1.S se scrie o aplicaie C++ care implementeaz o clas numit PilotF1. Clasa definete
variabilele private nume (ir de caractere), echipa (ir de caractere), varsta (int)
, record (int),
nr_pole_position (int). Ca membri publici, clasa conine metode accesor i mutator d
istincte
pentru fiecare din atributele clasei.
In funcia main, s se creeze 3 instane distincte ale clasei PilotF1 i s se foloseasc me
todele
mutator pentru a iniializa datele din fiecare obiect cu informaia corespunztoare ci
tit de la
tastatur. Folosind metodele accesor, s se afieze toate datele pilotului cu cel mai
bun record.
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
class PilotF1
{
char *nume;
char *echipa;
int varsta;
int record;
int nr_pole_position;
public:
PilotF1() {}
PilotF1(PilotF1& pilot);
void write_nume(char n[]);
void write_echipa(char e[]);
void write_varsta(int v);
void write_record(int r);
void write_nr_pole_position(int p);
const char *get_nume();
const char *get_echipa();
int get_varsta();
int get_record();
int get_nr_pole_position();
};
void Afisare(PilotF1 *pilot);
int main(void)
{
int nr_piloti,best[2]={0,0};//best[0] reprezinta valoarea recordului mar
e, best[1] reprezinta i-ul pilotului;
char bufc[256];
int bufi;
printf("Introduceti cati piloti doriti sa introduceti:");scanf("%d",&nr_
piloti);
PilotF1 *p=new PilotF1[nr_piloti];
for(int i=0;i<nr_piloti;i++)//scriere date
{
printf("Introduceti datele pentru pilotul nr.%d:\n",i+1);
printf("Nume:");scanf("%s",bufc);
p[i].write_nume(bufc);
printf("Echipa:");scanf("%s",bufc);
p[i].write_echipa(bufc);
printf("Varsta:");scanf("%d",&bufi);
p[i].write_varsta(bufi);
printf("Record:");scanf("%d",&bufi);
p[i].write_record(bufi);
printf("Nr Pole Position:");scanf("%d",&bufi);
p[i].write_nr_pole_position(bufi);
}
for(int i=0;i<nr_piloti;i++)//comparare record
{
if(best[0]<p[i].get_record())
{
best[0]=p[i].get_record();
best[1]=i;
}
}
Afisare(&p[best[1]]);//afisare best
return 0;
}
PilotF1::PilotF1(PilotF1& pilot)
{
nume=new char[(strlen(pilot.nume))];
echipa=new char[(strlen(pilot.echipa))];
strcpy(nume,pilot.nume);
strcpy(echipa,pilot.echipa);
varsta=pilot.varsta;
record=pilot.record;
nr_pole_position=pilot.nr_pole_position;
}
void PilotF1::write_nume(char n[])
{
if(nume!=NULL) delete nume;
nume=new char[strlen(n)+1];
strcpy(nume,n);
}
void PilotF1::write_echipa(char e[])
{
if(echipa!=NULL) delete echipa;
echipa=new char[strlen(e)+1];
strcpy(echipa,e);
}
void PilotF1::write_varsta(int v)
{
varsta=v;
}
void PilotF1::write_record(int r)
{
record=r;
}
void PilotF1::write_nr_pole_position(int p)
{
nr_pole_position=p;
}
const char *PilotF1::get_nume()
{
return nume;
}
const char *PilotF1::get_echipa()
{
return echipa;
}
int PilotF1::get_varsta()
{
return varsta;
}
int PilotF1::get_record()
{
return record;
}
int PilotF1::get_nr_pole_position()
{
return nr_pole_position;
}
void Afisare(PilotF1 *pilot)
{
printf("Pilotul %s apartinand echipei %s avand varsta %d de ani cu un nu
mar de %d pole positionuri a obtinut un record de %d",pilot->get_nume(),pilot->g
et_echipa(),pilot->get_varsta(),pilot->get_nr_pole_position(),pilot->get_record(
));
}
2.S se modifice exemplul 2 astfel nct codul s poat fi lansat n execuie.
#include <iostream>
using namespace std;
class Test2
{
int x;
public:
Test2()
{
cout<<"\nApel constructor explicit vid.";
}
void write_x(int y) { x=y; }
};
int main(void)
{
Test2 ob1;
int a;
cout<<"\nIntroduceti valoarea variabilei de tip \"int\" din clasa: ";
cin>>a;
ob1.write_x(a);
return 0;
}
3.Pornind de la exemplul care trateaz lucrul cu matrice, completai codul scris cu
metodele
specifice pentru:
- afiarea elementelor de pe diagonala secundara a matricei, dac matricea este ptrat
ic; n
caz contrar se afieaz un mesaj corespunztor;
- afiarea elementelor de sub diagonala principala;
- afiarea unei matrice de dimensiunea celei iniiale ale crei elemente pot avea valo
ri de 0
(dac elementul corespunztor este mai mare dect o valoare citita) sau 1 (n caz contra
r);
#include <iostream>
using namespace std;
class Matrix
{
//atribute
int matrix[10][10], dim1, dim2;
public:
//constructor explicit vid
Matrix()
{
//variabile locale
int i, j;
cout<<"\nIntroduceti dimensiunile matricii: ";
cin>>dim1;
cin>>dim2;
cout<<"\nIntroduceti elementele matricii: ";
for(i=0; i<dim1; i++)
{
for(j=0; j<dim2; j++)
{
cout<<"\nmatrix["<<i<<"]["<<j<<"] = ";
cin>>matrix[i][j];
}
}
}
//metoda de afisare a matricii din clasa; implementare in cadrul clasei
void displayMatrix()
{
//variabile locale
int i, j;
cout<<"\nElementele matricii: ";
for(i=0; i<dim1; i++)
{
cout<<"\n";
for(j=0; j<dim2; j++)
{
//apelul metodei private care returneaza valoare
a unui element din matrice
cout<<returnElement(i, j)<<" ";
}
}
cout<<"\n";
}
void displayDiagonal()
{
if(dim1==dim2)
{
cout<<"Diagonala principala contine urmatoarele elemente
: ";
for(int i=0;i<dim1;i++)
{
cout<<returnElement(i,dim1-1-i);
if(i!=dim1-1) cout<<", ";
else cout<<"."<<endl;
}
}
else
{
cout<<"Matricea nu este patratica=>diagonala principala
nu poate fi afisata";
}
cout<<endl;
}
void displayunderDiagonal()
{
//variabile locale
int i, j;
cout<<"\nElementele matricii: ";
for(i=0; i<dim1; i++)
{
cout<<"\n";
for(j=0; j<dim2; j++)
{
//apelul metodei private care returneaza valoare
a unui element din matrice
if(i>j) cout<<returnElement(i, j)<<" ";
}
}
cout<<"\n";
}
void displayAnother(int v)
{
//variabile locale
int i, j, t;
cout<<"\nElementele matricii: ";
for(i=0; i<dim1; i++)
{
cout<<"\n";
for(j=0; j<dim2; j++)
{
//apelul metodei private care returneaza valoare
a unui element din matrice
t=returnElement(i, j)>v?0:1;
cout<<t<<" ";
}
}
cout<<"\n";
}
//declararea metodei de afisare a elementelor unei coloane
void displayColumn(int col);
private:
//declararea metodei de afisare a unui element
int returnElement(int row, int column);
};
//implementarea externa a metodelor (publice sau private) declarate in c
lasa
void Matrix::displayColumn(int col)
{
if(col<0||col>dim2)
{
cout<<"\nColoana cu numarul "<<col<<" nu exista in matri
cea din clasa!\n";
}
else
{
cout<<"\nElementele coloanei "<<col<<": ";
for(int i=0; i<dim1; i++)
{
cout<<returnElement(i, col)<<" ";
}
}
cout<<endl;
}
int Matrix::returnElement(int row, int column)
{
return matrix[row][column];
}
int main(void)
{
Matrix m1; //instantiere
int c;
m1.displayMatrix();
cout<<"\nIntroduceti un numar de coloana ale carei elemente vor fi afisa
te: ";
cin>>c;
m1.displayColumn(c);
m1.displayDiagonal();
m1.displayunderDiagonal();
cout<<"\nIntroduceti o valoare de referinta pentru matrice:";
cin>>c;
m1.displayAnother(c);
//incercare (imposibila) de a accesa direct un membru privat al clasei
//m1.returnElement(0, 0);
return 0;
}
4.S se scrie o clas care are ca variabil privat un cmp de tip dat, definit ntr-o stru
ur
extern clasei (zi int, luna int, an - int). Clasa conine metode mutator i accesor (
publice)
pentru informaia privat. In clas se mai afl doua metode publice care:
- testeaz validitatea datei stocate;
- scrie ntr-un fiier toate datele din anul curent care preced (cronologic) data st
ocat n
clas;
In metoda main, dup instanierea clasei i citirea de la tastatur a componentelor unei
date, s
se apeleze metodele membre i apoi s se verifice rezultatele obinute.
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct data
{
int zi;
int luna;
int an;
};
class Calendar
{
data calend;
public:
void write_data(data cal)
{
calend.zi=cal.zi;
calend.luna=cal.luna;
calend.an=cal.an;
}
data get_data()
{
return calend;
}
int validate(data cal)
{
if((cal.zi>=1&&cal.zi<=31)&&(cal.luna>=1&&cal.luna<=12)&&(cal.an
>=1&&cal.an<=100000)) return 1;
else return 0;
}
void write_file(const char *calea)
{
FILE *f;
if(!(f=fopen(calea,"w")))
{
printf("Eroare la crearea fisierului\n");
return;
}
for(int i=calend.luna;i<=12;i++)
{
for(int j=calend.zi;j<=31;j++)
{
fprintf(f,"%d.%d.%d\n",j,i,calend.an);
}
}
printf("Datele au fost scrise cu success!\n");
fclose(f);
}
};
int main(void)
{
Calendar cal;
data tmp;
printf("Introduceti o data in formatul dd/zz/aaaa: ");scanf("%d/%d/%d",&
tmp.zi,&tmp.luna,&tmp.an);
cal.write_data(tmp);
if(cal.validate(cal.get_data())) cal.write_file("txt.txt");
else printf("Data nu are formatul corect. Datele nu au fost scrise in fi
sier.\n");
printf("Data scrisa in clasa este: %d/%d/%d",cal.get_data().zi,cal.get_d
ata().luna,cal.get_data().an);
return 0;
}

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