Sunteți pe pagina 1din 7

//Alexe Tudor-Stefan

/*1.Modificai exemplul 3 astfel nct s permit obtinerea unui nou punct, avand coordona
tele
obtinute prin adunarea coordonatelor a dou astfel de puncte. Numele noului punct
va fi
rezultat prin concatenarea numelor celor dou puncte. Adaugati si testati o metoda
care
calculeaza distanta de la un punct la origine.*/
#include <iostream>
using namespace std;
#include <string.h>
#include <stdio.h>
class CPunctText
{
public:
//constructor standard
CPunctText();
//constructor de initializare
CPunctText(int ix, int iy, char *sText="Punct");
//constructor de copiere
CPunctText(CPunctText &pct);
//destructor:
~CPunctText();
public:
CPunctText Adunare(CPunctText &a);
int Get_x() { return x; }
int Get_y() { return y; }
char *Get_sNume() { return sNume; }
void Afis()
{
cout << "\nObiectul are x= " <<x;
cout << "\nObiectul are y= " <<y;
cout << "\nObiectul are sirul = " <<sNume;
}//afis
void Afis(CPunctText a)
{
cout << "\nObiectul are x= " <<a.Get_x();
cout << "\nObiectul are y= " <<a.Get_y();
cout << "\nObiectul are sirul = " <<a.Get_sNume();
}//afis
private:
int x;
int y;
int lungime_sir;
char *sNume;
};
CPunctText::CPunctText()
{
cout << "\n constructor standard";
lungime_sir = 20;
sNume=new char[lungime_sir];
}
CPunctText::CPunctText(int ix, int iy, char *sText)
{
cout << "\n constructor de initializare";
lungime_sir = strlen(sText)+1;
sNume=new char[lungime_sir];
x=ix;
y=iy;
strcpy(sNume, sText);
}
CPunctText::CPunctText(CPunctText &pct)
{
cout << "\n constructor de copiere";
sNume=new char[pct.lungime_sir];
x=pct.x;
y=pct.y;
lungime_sir = pct.lungime_sir;
strcpy(sNume,pct.sNume);
}
CPunctText::~CPunctText()
{
cout << "\n destructor";
delete sNume;
}
CPunctText CPunctText::Adunare(CPunctText &a)
{
CPunctText b(x+a.Get_x(),y+a.Get_y(),strstr(sNume,a.Get_sNume()));
return b;
}
int main(void)
{
CPunctText cpt1(1,2,(char *)"Punct1");
//apel constructor de initializare
CPunctText cpt2(cpt1); //apel constructor de copiere
//CPunctText cpt3=cpt2; //apel constructor de copiere
CPunctText cpt3(4,5); //apel constructor de initializare
cpt1.Afis(&cpt1.Adunare(cpt3));
return 0;
}
/*2.S se scrie o aplicaie C/C++ care sa modeleze obiectual un ir de numere reale. C
reai dou
instane ale clasei i afisati valorile unui al 3-lea sir, obtinute prin scaderea el
ementelor
corespunzatoare din primele 2 siruri. Daca sirurile au lungimi diferite, sirul r
ezultat va avea
lungimea sirului cel mai scurt.*/
#include<iostream>
using namespace std;
class Sir_Real
{
float *sir;
int dimensiune;
public:
Sir_Real(int dim,float *a)
{
sir=new float[dim];
dimensiune=dim;
for(int i=0;i<dim;i++)
{
sir[i]=a[i];
}
}
Sir_Real(Sir_Real &a)
{
sir=new float[a.Get_dim()];
dimensiune=a.Get_dim();
for(int i=0;i<a.Get_dim();i++)
{
sir[i]=a.Get_sir()[i];
}
}
~Sir_Real()
{
delete sir;
}
int Get_dim() { return dimensiune; }
float *Get_sir() { return sir; }
void Afis_Dif(Sir_Real a)
{
int n;
if(dimensiune<=a.Get_dim()) n=dimensiune;
else n=a.Get_dim();
cout << "Sirul diferenta este: ";
//float *tmp=b.Get_sir();//new float[n]];
for(int i=0;i<n;i++)
{
cout << sir[i]-a.Get_sir()[i];
if(i<n-1) cout << ", ";
else cout << endl;
}
}
};
int main(void)
{
float sir_a[]={1,2,3,4,5,6,7,8,9,10};
float sir_b[]={5,6,7,8};
Sir_Real a(10,sir_a),b(4,sir_b);
a.Afis_Dif(b);
}
/*3.S se scrie o aplicaie n care se modeleaz clasa Student cu nume, prenume i notele
din
sesiunea din iarn. S se afieze numele studenilor din grup care au restante si apoi nu
mele
primilor 3 studenti din grupa n ordinea mediilor.*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
class Student
{
char *nume;
char *prenume;
int note[7];
public:
Student(Student &s);
void Set(char name[],char prenome[],int notes[7]);
void Afis_Student();
Student() { }
~Student();
float Get_media();
char *Get_nume() { return nume; }
char *Get_prenume() { return prenume; }
int *Get_note() { return note; }
};
Student::Student(Student &s)
{
nume=new char[strlen(s.Get_nume())];
prenume=new char[strlen(s.Get_prenume())];
strcpy(nume,s.Get_nume());
strcpy(prenume,s.Get_prenume());
for(int i=0;i<7;i++)
{
note[i]=s.Get_note()[i];
}
}
void Student::Set(char name[],char prenome[],int notes[7])
{
nume=new char[strlen(name)];
prenume=new char[strlen(prenome)];
strcpy(nume,name);
strcpy(prenume,prenome);
for(int i=0;i<7;i++)
{
note[i]=notes[i];
}
}
void Student::Afis_Student()
{
printf("Nume:%s\nPrenume:%s\nMedia:%.2f\n",nume,prenume,this->Get_media(
));
}
Student::~Student()
{
delete nume;
delete prenume;
}
float Student::Get_media()
{
float media=0;
for(int i=0;i<7;i++)
{
media+=note[i];
}
media/=7;
return media;
}
int comparare(Student *v1,Student *v2);
Student *Read_studenti(int n);
void Afis_top3(Student *stud);
int main(void)
{
int n;
printf("Introduceti numarul de studenti din grupa:");
scanf("%d",&n);
Student *stud=Read_studenti(n);
qsort( (Student *)stud, n, sizeof( Student ), (int (*) (const void *, co
nst void *)) comparare );
printf("Podiumul din grupa 1 dupa sesiunea din toamna este:\n");
return 0;
Afis_top3(stud);
}
Student *Read_studenti(int n)
{
Student *stud=new Student[n];
char tmp_nume[256];
char tmp_prenume[256];
int tmp_note[7];
for(int i=0;i<n;i++)
{
printf("Introduceti datele aferente primului student\n");
printf("Introduceti numele:");scanf("%s",tmp_nume);
printf("Introduceti prenumele:");scanf("%s",tmp_prenume);
printf("Acum introduceti mai jos notele conform numarului din ca
talog:\n");
for(int j=0;i<7;j++)
{
printf("Nota %d: ",j+1);scanf("%d",&tmp_note[j]);
}
stud[i].Set(tmp_nume,tmp_prenume,tmp_note);
}
return stud;
}
void Afis_top3(Student *stud)
{
char *loc;
for(int i=0;i<3;i++)
{
loc=new char[i+2];
switch(i)
{
case 0: loc[0]='I';loc[1]='\0';break;
case 1: loc[0]='I';loc[1]='I';loc[2]='\0';break;
case 2: loc[0]='I';loc[1]='I';loc[2]='I';loc[3]='\0';break;
default: delete loc;
}
printf("\n\t\t\t\tLocul %d\n",i+1);
stud[i].Afis_Student();
delete loc;
}
}
int comparare(Student *v1,Student *v2)
{
if(v1->Get_media()<v2->Get_media())
return 1;
if(v1->Get_media()==v2->Get_media())
return 0;
if(v1->Get_media()>v2->Get_media())
return -1;
return ((v1->Get_media()-v2->Get_media()));
}
/*4.S se scrie o aplicaie C/C++ n care se citete de la tastatur un punct prin coordon
atele x,y,z.
S se scrie o metod prin care s se fac translaia punctului cu o anumit distan pe fiecar
dintre cele trei axe. S se verifice dac dreapta care unete primul punct i cel rezult
at n urma
translaiei trec printr-un al treilea punct dat de la consol.*/
#include<iostream>
using namespace std;
class Punct
{
int x;
int y;
int z;
public:
int Get_x() { return x; }
int Get_y() { return y; }
int Get_z() { return z; }
Punct(int ix,int iy,int iz)
{
x=ix;
y=iy;
z=iz;
}
Punct() {}
void Translatie(int n)
{
x+=n;
y+=n;
z+=n;
}
int Verificare(Punct pct,int ix,int iy,int iz)
{
if(((float)(ix-x)/(float)(pct.Get_x()-x)==((float)(iy-y)/(float)
(pct.Get_y()-y)))&&((float)(iy-y)/(float)(pct.Get_y()-y)==((float)(iz-z)/(float)
(pct.Get_z()-z))))
return 1;
else return 0;
}
};
int main(void)
{
int x,y,z,n;
cout << "X=";cin >> x;
cout << "Y=";cin >> y;
cout << "Z=";cin >> z;
Punct a(x,y,z);
cout << "Introduceti un numar cu care sa se faca translatia:";cin >> n;
Punct b=a;
b.Translatie(n);
cout << "Introduceti coordonatele unui punct:" << endl;
cout << "X=";cin >> x;
cout << "Y=";cin >> y;
cout << "Z=";cin >> z;
if(a.Verificare(b,x,y,z))
cout << "Punctul de coordonate (" << x << "," << y << "," << z <
< ") se afla pe dreapta ab" << endl;
else
cout << "Punctul de coordonate (" << x << "," << y << "," << z <
< ") nu se afla pe dreapta ab" << endl;
return 0;
}

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