Sunteți pe pagina 1din 7

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
distincte
pentru fiecare din atributele clasei.
In funcia main, s se creeze 3 instane distincte ale clasei PilotF1 i s se
foloseasc metodele
mutator pentru a iniializa datele din fiecare obiect cu informaia corespunztoare
citit 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 mare,
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 numar
de %d pole positionuri a obtinut un record de %d",pilot->get_nume(),pilot-
>get_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
ptratic; 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
valori de 0
(dac elementul corespunztor este mai mare dect o valoare citita) sau 1 (n caz
contrar);
#include<iostream>
using namespace std;

class Matrix
{
int matrix[10][10],dim1,dim2;
public:
Matrix()
{
int i,j;
cout<<"Introduceti dimensiunile matricii:";
cin>>dim1>>dim2;
cout<<"Introduceti elementele matricii:"<<endl;
for(i=0;i<dim1;i++)
{
for(j=0;j<dim2;j++)
{
cout<<"\nmatrix["<<i<<"]["<<j<<"]=";
cin>>matrix[i][j];
}
}
}
void displayMatrix()
{
int i,j;
cout<<"Elementele matricii sunt: \n";
for(i=0;i<dim1;i++)
{
cout<<"\n";
for(j=0;j<dim2;j++)
cout<<returnElement(i,j)<<" ";
}
cout<<"\n";
}
void displayColumn(int col);
void displayColoanaPrincipala();
void displayElementeDeSubDiagonalaPrincipala();
void modificaMatrice(int n);
private:
int returnElement(int row, int column);
};

void Matrix::modificaMatrice(int n)
{
int i,j;
for(i=0;i<dim1;i++)
{
for(j=0;j<dim2;j++)
{
if(matrix[i][j]>n)matrix[i][j]=0;
else matrix[i][j]=1;
}
}
displayMatrix();
}

void Matrix::displayElementeDeSubDiagonalaPrincipala()
{
int i,j;
for(i=0;i<dim1;i++)
{
for(j=0;j<dim2;j++)
{
if(i>j)cout<<returnElement(i,j)<<" ";
}
}
}

void Matrix::displayColoanaPrincipala()
{
int i;
if(dim1==dim2)
{
for(i=0;i<dim1;i++)
{
cout<<returnElement(i,i)<<" ";
}
}
}

void Matrix::displayColumn(int col)


{
if(col<0||col>dim2)
{
cout<<"\nColoana cu numarul "<<col<<" nu exista in
clasa!\n";
}
else
{
cout<<"\nElementele coloanei"<<col<<": ";
for(int i=0;i<dim1;i++)
{
cout<<returnElement(i,col)<<" ";
}
}
}

int Matrix::returnElement(int row, int column)


{
return matrix[row][column];
}

void main(void)
{
Matrix m1;
int c;
m1.displayMatrix();
cout<<"\nIntroduceti un numar pentru o coloana a carei elemente
vor fi afisate: ";
cin>>c;
m1.displayColumn(c);
cout<<"\nElementele de pe diagonala principala sunt: ";
m1.displayColoanaPrincipala();
cout<<"\nElementele de sub diagonala principala sunt: ";
m1.displayElementeDeSubDiagonalaPrincipala();
cout<<"\nIntroduceti valoarea limita: ";
cin>>c;
m1.modificaMatrice(c);
}

4.S se scrie o clas care are ca variabil privat un cmp de tip dat, definit
ntr-o structur
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
stocat 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
fisier.\n");
printf("Data scrisa in clasa este: %d/%d/
%d",cal.get_data().zi,cal.get_data().luna,cal.get_data().an);
return 0;
}

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