100% found this document useful (1 vote)
439 views7 pages

Kis Alexandru Lab 7

1. The document describes a C++ class called CPunctText that models points with x and y coordinates and a name string. It includes methods to add two points, calculate the distance from a point to the origin, and display point details. 2. A C++ application is created to model a class called Sir that represents arrays of real numbers. Two instances are created and a third array is displayed containing the element-wise differences of the first two arrays. 3. A C++ application models a Student class with name, surname, and grades attributes. It displays the names of students with failures and the top 3 students by average grade. 4. A C++ application reads x, y, z

Uploaded by

Sabine Crihan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
439 views7 pages

Kis Alexandru Lab 7

1. The document describes a C++ class called CPunctText that models points with x and y coordinates and a name string. It includes methods to add two points, calculate the distance from a point to the origin, and display point details. 2. A C++ application is created to model a class called Sir that represents arrays of real numbers. Two instances are created and a third array is displayed containing the element-wise differences of the first two arrays. 3. A C++ application models a Student class with name, surname, and grades attributes. It displays the names of students with failures and the top 3 students by average grade. 4. A C++ application reads x, y, z

Uploaded by

Sabine Crihan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 7

1.

Modificati exemplul 3 astfel incat sa permita obtinerea unui nou punct, avand
coordonatele
obtinute prin adunarea coordonatelor a doua astfel de puncte. Numele noului punct
va fi
rezultat prin concatenarea numelor celor doua puncte. Adaugati si testati o metoda
care
calculeaza distanta de la un punct la un punct la origine.

#include<iostream>
using namespace std;
#include<string.h>
#include<stdio.h>
#include<math.h>

class CPunctText{
private:
int x;
int y;
int lungime_sir;
char *sNume;
public:
//constructor standard
CPunctText();
//constructor initializare
CPunctText(int ix,int iy,char *sText="punct");
//constructor copiere
CPunctText(CPunctText &pct);//constructor copiere
//destructor
~CPunctText();

public:
void Afis()
{
cout<<"\nObiectul are x="<<x;
cout<<"\nObiectul are y="<<y;
cout<<"\nObiectul are sirul="<<sNume<<endl;
}

//metoda ce aduna doua puncte


CPunctText Suma(CPunctText pct);
//metoda ce calculeaza distanta de la punct la origine
float Distanta()
{
return (sqrt(float(x*x+y*y)));
}
};

//constructor
CPunctText::CPunctText()
{
lungime_sir=20;
sNume=new char[lungime_sir];
}

CPunctText::CPunctText(int ix,int iy,char *sText)


{
lungime_sir=strlen(sText)+1;
sNume=new char[lungime_sir];
x=ix;
y=iy;

strcpy(sNume,sText);
}

CPunctText::CPunctText(CPunctText &pct)
{
sNume=new char[pct.lungime_sir+1];
x=pct.x;
y=pct.y;

lungime_sir=pct.lungime_sir+1;
strcpy(sNume,pct.sNume);
}

CPunctText CPunctText::Suma(CPunctText pct)


{
CPunctText s;

s.x=x+pct.x;
s.y=y+pct.y;
s.lungime_sir=lungime_sir+pct.lungime_sir+1;
s.sNume=new char[s.lungime_sir];
strcpy(s.sNume,sNume);
strcat(s.sNume,pct.sNume);

return s;
}
//destructor
CPunctText::~CPunctText()
{
delete sNume;
}

void main(void)
{
CPunctText cpt1(1,2,"punct1");//apel constructor standard
CPunctText cpt2(cpt1);//apel constructor de copiere
CPunctText cpt3=cpt2;//apel constructor de copiere
CPunctText cpt4(4,5,"punct4");//apel constructor de initializare

cout<<"\t\tSe vor aduna obiectele:\n";


cpt3.Afis();
cout<<"Distanta de la punct la origine este:"<<cpt3.Distanta()<<endl;
cpt4.Afis();
cout<<"Distanta de la punct la origine este:"<<cpt4.Distanta()<<endl;
cout<<"\n\t\tRezultatul va fi:";

CPunctText cpt5=cpt4.Suma(cpt1);
cpt5.Afis();
cout<<"Distanta de la punct la origine este:"<<cpt5.Distanta()<<endl;
}

2.Sa se scrie o aplicatie C/C++ care sa modeleze obiectual un sir de numere reale.
Creati
doua instante ale clasei si afisati valorile unui al 3-lea sir, obtinut prin
scaderea
elementelor corespunzatoare din primele 2 siruri. Daca sirurile au lungimi
diferite, sirul
rezultat va avea lungimea sirului celui mai scurt.

#include<iostream>
using namespace std;

class Sir{
int n;//lungimea sirului
int *v;//un pointer la un sir de numere intregi

public:
//constructor
Sir()
{
n=1;
v=new int[n];
}
Sir(int m)
{
n=m;
v=new int[n];
for(int i=0;i<n;i++)
{
cout<<"v["<<i+1<<"]=";
cin>>v[i];
}
cout<<endl;
}
//constructor de copiere
Sir(Sir &s)
{
n=s.n;
v=new int[n];
for(int i=0;i<n;i++)
v[i]=s.v[i];
}
//destructor
~Sir()
{
delete v;
}

//metoda de afisare
void Afis()
{
for(int i=0;i<n;i++)
cout<<v[i]<<" ";
cout<<endl;
}
//metoda ce returneaza un sir obtinut prin diferenta a doua siruri
Sir Sir_nou(Sir s)
{
Sir sn;

if (n>s.n)
sn.n=s.n;
else
sn.n=n;
sn.v=new int[sn.n];
for(int i=0;i<sn.n;i++)
sn.v[i]=v[i]-s.v[i];
return sn;
}
};

void main(void)
{
int n;

cout<<"Dati numarul de elemente al primului sir ";


cin>>n;
Sir s1(n);
cout<<"Dati numarul de elemente al celui de al doilea sir ";
cin>>n;
Sir s2(n);

cout<<"Primul sir introdus este: ";


s1.Afis();
cout<<"\nAl doilea sir introdus: ";
s2.Afis();

Sir s3=s1.Sir_nou(s2);
cout<<"\nSirul obtinut este: ";
s3.Afis();
}

3. Sa se scrie o aplicatie in care se modeleaza clasa Student cu nume, prenume si


notele din
sesiunea din iarna. Sa se afiseze numele studentilor din grupa care au restante si
apoi
numele primilor 3 studenti din grupa in ordinea mediilor.

#include<iostream>
using namespace std;
#include<string.h>

class Student{
char nume[20];
char prenume[20];
int nr_note;
int note[10];
public:
//constructor
Student()
{
strcpy(nume,"");
strcpy(prenume,"");
nr_note=0;
note[0]=0;
}
//metoda mutator ce initializeaza atributele clasei cu date citite de la
tastatura
void Initializare()
{
char num[20],p[20];

cout<<"Nume si prenume: ";


cin>>num;
cin>>p;
strcpy(nume,num);
strcpy(prenume,p);
nr_note=4;
cout<<"Dati cele 4 note:\n";
for(int i=0;i<nr_note;i++)
{
cout<<"nota "<<i+1<<" ";
cin>>note[i];
}
}
//metoda de afisare
void Afisare()
{
cout<<"\t"<<nume<<" "<<prenume<<endl;
}
//metoda calcul al mediei notelor
float Medie()
{
float s=0;
for(int i=0;i<nr_note;i++)
s+=note[i];
return (s/nr_note);
}
//metoda ce testeaza daca un student are restante
int Cauta()
{
int ok=0;

for(int i=0;i<nr_note;i++)
if(note[i]<5)
ok=1;
return ok;
}
};
void main(void)
{
Student v[10];
int i,n,max,k,j;
int medii[10];

cout<<"Dati numarul de studenti din grupa (cuprins intre 4 si 10):";


cin>>n;
cout<<"Introduceti datele studentilor:";
for(i=0;i<n;i++)
{
cout<<"\nstudentul "<<i+1<<" \n";
v[i].Initializare();
}
cout<<"Studenti cu restante in sesiunea de iarna :\n";
for (i=0;i<n;i++)
if (v[i].Cauta())
v[i].Afisare();

for(i=0;i<n;i++)
medii[i]=v[i].Medie();

cout<<"\nPrimi trei studenti cu cele mai mari medii sunt:\n";


for(k=1;k<=3;k++)
{
max=0;
for (i=0;i<n;i++)
if (medii[i]>max)
{
max=medii[i];
j=i;
}
medii[j]=0;
v[j].Afisare();
}
}

4. Sa se scrie o aplicatie C/C++ in care se citeste de la tastatura un punct prin


coordonatele x,y,z. Sa se scrie o metoda prin care sa se faca trandlatia punctului
cu o
anumita distanta pe fiecare dintre cele trei axe. Sa se verifice daca dreapta care
uneste
primul punct si cel rezumat in urma translatiei trec printr-un al treilea punct dat
de la
consola.

#include<iostream>
using namespace std;

class Punct{
int x;
int y;
int z;
public:
Punct()
{
x=0;
y=0;
z=0;
}
void Initializare()
{
int ix,iy,iz;

cin>>ix;
cin>>iy;
cin>>iz;
x=ix;
y=iy;
z=iz;
}
void Afisare()
{
cout<<"("<<x<<","<<y<<","<<z<<")\n\n";
}
Punct Translatie(int dx,int dy,int dz)
{
Punct p;

p.x=x+dx;
p.y=y+dy;
p.z=z+dz;

return p;
}
//functia de verificare
void Verificare_coliniaritate(Punct p1,Punct p2)
{
if((((x-p1.x)/(p2.x-p1.x))==((y-p1.y)/(p2.y-p1.y)))&&(((x-p1.x)/(p2.x-
p1.x))==((z-p1.z)/(p2.z-p1.z))))
cout<<"\nCele 3 puncte sunt coliniare!!!\n";
else
cout<<"\nCele 3 puncte nu sunt coliniare!!!\n";
}
};

void main(void)
{
int dx,dy,dz;
Punct p1,p3,p2;

cout<<"Dati cordonatele primului punct (x,y,z): ";


p1.Initializare();
cout<<"Ati introdus coodonatele: ";
p1.Afisare();

cout<<"Dati valorile cu care doriti sa se faca translatia (dx, dy, dz): ";
cin>>dx;
cin>>dy;
cin>>dz;
p2=p1.Translatie(dx,dy,dz);
cout<<"Noul punct va avea coordonatele: ";
p2.Afisare();

cout<<"Dati cordonatele celui de al treilea punct (x,y,z): ";


p3.Initializare();
cout<<"Ati introdus coodonatele: ";
p3.Afisare();
p3.Verificare_coliniaritate(p1,p2);
}

You might also like