Sunteți pe pagina 1din 17

//Zinveliu Ioana,lab7

/*1. Modificaţi exemplul 3 astfel încât să permită obtinerea unui nou punct, avand coordonatele

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. Modificați clasa astfel încât sa eliminați metoda

afis() folosind in schimb metode accesor adecvate. Eliminați de asemenea atributul

lungime_sir modificând adecvat metodele clasei. Testati utilizand si functii specifice sirurilor

de caractere din VC++1y/2z (strcpy_s( ) si strcat_s( )).*/

//Zinveliu Ioana,grupa 4

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>

using namespace std;

#include "Header.h"

int main() {

int x1, x2, y1, y2;

char t1[10], t2[10];

cout << "Punctul 1: ";

cin >> x1 >> y1;

cout << "Text 1:";

cin >> t1;

cout << "Punctul 2: ";

cin >> x2 >> y2;

cout << "Text 2:";

cin >> t2;

CPunctText pct1(x1, y1, t1), pct2(x2, y2, t2);

cout << "P1: ";


pct1.afis();

cout << "P2: ";

pct2.afis();

CPunctText s;

s.suma(pct1, pct2);

cout << "\nPunctul format de P1 si P2 e: ";

s.afis();

s.dist();

cout << "\nPunctul format din a doua suma: ";

CPunctText t = pct1.suma1(pct2);

t.afis();

#pragma once

#define _CRT_SECURE_NO_WARNINGS

#include <cstring>

#include<iostream>

using namespace std;

const int dim_sir = 20;

class CPunctText {

int x;

int y;

int lungime_sir;//atribut redundant

char* sNume;

public:

//constructor explicit vid


CPunctText();

//constructor cu parametri

CPunctText(int ix, int iy, const char* sText = "Punct");

//constructor de copiere

CPunctText(const CPunctText& pct);

//destructor:

~CPunctText();

void afis() {

cout << "\nObiectul are x= " << x;

cout << "\nObiectul are y= " << y;

cout << "\nObiectul are sirul = " << sNume;

}//afis

void suma(CPunctText, CPunctText);

CPunctText suma1(CPunctText);

void dist();

};

CPunctText::CPunctText() {

cout << "\n constructor explicit vid";

lungime_sir = dim_sir;

sNume = new char[lungime_sir];

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

cout << "\n constructor cu parametri";

lungime_sir = strlen(sText) + 1;// pentru |0

sNume = new char[lungime_sir];

x = ix;

y = iy;

strcpy(sNume, sText);

CPunctText::CPunctText(const 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;

void CPunctText::suma(CPunctText pct1, CPunctText pct2)

x = pct1.x + pct2.x;

y = pct1.y + pct2.y;

lungime_sir = pct1.lungime_sir + pct2.lungime_sir;

sNume = new char[lungime_sir];

strcpy(sNume, pct1.sNume);

strcpy(sNume, pct2.sNume);

CPunctText CPunctText::suma1(CPunctText pct)

CPunctText a;

a.x = x + pct.x;

a.y = y + pct.y;

a.lungime_sir = this->lungime_sir + pct.lungime_sir;

a.sNume = new char[a.lungime_sir];

strcpy(a.sNume, this->sNume);

strcat(a.sNume, pct.sNume);

return a;
}

void CPunctText::dist()

float d;

d = sqrt((float)x * x + y * y);

cout << "Distanta este: " << d;

/*2. Să se scrie o aplicaţie C/C++ care să modeleze obiectual un tablou unidimensional de numere

reale. Creaţi două instanţe ale clasei şi afișați valorile unui al 3-lea tablou, obținute prin

scăderea elementelelor corespunzătoare din primele 2 tablouri. Dacă tablourile au lungimi

diferite, tabloul rezultat va avea lungimea tabloului cel mai scurt*/

//Zinveliu Ioana,grupa 4

#include<iostream>

using namespace std;

class Vector {

private: int n;

public: float v[200];

int getn()

return n;

void afisare()

for (int i = 0; i < n; i++)

cout << v[i] << " ";


}

void citire()

for (int i = 0; i < n; i++)

cin >> v[i];

void setn(int l)

this->n = l;

};

int main()

Vector v1, v2,v3;

int l1, l2,n;

cout << "Introduceti dimensiunile celor 2 vectori: \n";

cin >> l1 >>l2;

if (l2 < l2)n = l1;

else n = l2;

v1.setn(l1);

v2.setn(l2);

v3.setn(n);

cout << "\nIntroduceti elementele primului vector: \n";

v1.citire();

cout << "\nIntroduceti elementele celui de al doilea vector: \n";

v2.citire();
for (int i = 0; i < n; i++)

v3.v[i] = v1.v[i] - v2.v[i];

cout << "\nV3 este: \n";

v3.afisare();

/*3. Modelați clasa Student care să conțină atributele private nume, prenume, note (tablou 7 valori

int), grupa. Alocați dinamic memorie pentru n studenți. Calculați media cu o metoda din clasa

și sortați studenții după medie, afisând datele fiecărui student*/

//Zinveliu Ioana,grupa 4

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>

using namespace std;

class Student {

private: char nume[20], prenume[20];

int note[7];

int grupa;

public:

void setnume(char n[20])

strcpy(nume, n);

void setprenume(char n[20])

{
strcpy(prenume, n);

void setgrupa(int g)

grupa = g;

void citnote()

for (int i = 0; i < 7; i++)

cin >> note[i];

char* getnume()

return this->nume;

char* getprenume()

return this->prenume;

float medie()

float s = 0;

for (int i = 0; i < 7; i++) {

s += note[i];

return s / 7;

};
int main()

int n;

cout << "Introduceti nr de studenti";

cin >> n;

Student* s = new Student[n];

for (int i = 0; i < n; i++)

char nume[20], p[20];

cout << "\nStudentul " << i + 1;

cout << "\nNume: ";

cin >> nume;

s[i].setnume(nume);

cout << "Prenumele:";

cin >> p;

s[i].setprenume(p);

cout << "Notele: ";

s[i].citnote();

for (int i = 0; i < n - 1; i++)

for (int j = i + 1; j < n; j++)

if ((s + i)->medie() > (s+ j)->medie())

Student Aux;

Aux = *(s+ i);

*(s + i) = *(s + j);

*(s + j) = Aux;

cout << "\nStudentii ordonati crescator dupa medii:";


for (int i = 0; i < n; i++)

cout<<"\n"<<s[i].getnume();

cout<<"\n"<<s[i].getprenume();

/*Să se scrie o aplicaţie C/C++ în care se citeşte de la tastatură un punct prin coordonatele x, y,

z. Să se scrie o metodă prin care să se facă translaţia punctului cu o anumită distanţă pe fiecare

dintre cele trei axe. Să se verifice dacă dreapta care uneşte primul punct şi cel rezultat în urma

translaţiei trec printr-un al treilea punct dat de la consolă.

*/

//Zinveliu Ioana,grupa 4

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>

using namespace std;

class Punct {

public:int x, y, z;

Punct()

x = 0;

y = 0;

z = 0;

Punct(int a, int b, int c)

x = a; y = b; z = c;
}

Punct trans(Punct);

int verificare(Punct, Punct, int);

Punct ec(Punct, Punct, int&);

};

Punct Punct::trans(Punct A)

int a, b, c;

Punct B;

cout << "Introduceti val de translatie pe ox: ";

cin >> a;

cout << "Introduceti val de translatie pe oy: ";

cin >> b;

cout << "Introduceti val de translatie pe oz: ";

cin >> c;

B.x = a + A.x;

B.y = b + A.y;

B.z = c + A.z;

return B;

int Punct::verificare(Punct C, Punct D, int d)

if (D.x * C.x + D.y * C.y + D.z + C.z + d == 0)

return 1;

else return 0;

Punct Punct::ec(Punct A, Punct B, int& d)

Punct C;
C.x = B.x - A.x;

C.y = B.y - A.y;

C.z = B.z - A.z;

d = -A.x * C.x - A.y * C.y - A.z * C.z;

return C;

int main()

Punct X, Y;

int x, y, z, d;

cout << "\nIntroduceti coordonatele: ";

cin >> x >> y >> z;

cout << "\nCoordonatele lui X sunt: " << x << " " << y << " " << z;

Punct A(x, y, z);

X= X.trans(X);

cout << "\nCoordonatele lui Y sunt :" << X.x << " " << X.y << " " << X.z;

Y = Y.ec(A, X, d);

cout << "\nIntroduceti coordonatele unui pct: ";

cin >> x >> y >> z;

Punct D(x, y, z);

if (D.verificare(Y, D, d))

cout << "\nPunctul apartine dreptei ";

else cout << "\nPunctul nu apartine dreptei ";

/*6. Definiți o clasă Complex modelată prin atributele de tip double real, imag și un pointer de tip

char către numele fiecărui număr complex. În cadrul clasei definiți un constructor explicit cu
doi parametri care au implicit valoarea 1.0 și care alocă spațiu pentru nume un șir de maxim

15 caractere, de exemplu "c1". De asemenea, definiți un constructor de copiere pentru clasa

Complex. Clasa va mai conține metode mutator/setter și accesor/getter pentru fiecare membru

al clasei, metode care permit operațiile de bază cu numere complexe și un destructor explicit.

Definiți cel mult 10 numere complexe într-un tablou. Calculați suma numerelor complexe din

tablou, valoare ce va fi folosită pentru a inițializa un nou număr complex, cu numele

"Suma_c". Realizați aceleași acțiuni făcând diferența și produsul numerelor complexe

*/

//Zinveliu Ioana,grupa 4

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>

using namespace std;

class Complex {

private:

double real, imag;

char* nume;

public:

Complex()

nume = new char[15];

strcpy(nume, "c1");

real = 1;

imag = 0;

Complex(double a, double b, char* nume1)

real = a;

imag = b;

strcpy(nume, nume1);
}

~Complex()

real = 0; imag = 0;

void setR(double a)

real = a;

void setI(double b)

imag = b;

void setN(char* nume2)

strcpy(nume, nume2);

double getR()

return real;

double getI()

return imag;

char* getN()

return this->nume;

}
Complex suma(Complex, Complex);

Complex dif(Complex, Complex);

Complex prod(Complex, Complex);

};

Complex Complex::suma(Complex A, Complex B)

Complex C;

C.real = A.real + B.real;

C.imag = A.imag + B.imag;

return C;

Complex Complex ::dif(Complex A, Complex B)

Complex C;

C.real = A.real -B.real;

C.imag = A.imag - B.imag;

return C;

Complex Complex::prod(Complex A, Complex B)

Complex C;

C.real = A.real * B.real - A.imag * B.imag;

C.imag = A.real * B.imag + A.imag * B.real;

return C;

int main()

Complex N[15];
int n;

double r, im;

cout << "dati n:";

cin >> n;

cout << "Introduceti numerele: ";

for (int i = 0; i< n; i++)

cin >> r >>im;

N[i].setR(r);

N[i].setI(im);

Complex S;

S.setR(0);S.setI(0);

for (int i = 0; i < n; i++)

S = S.suma(S, N[i]);

cout << "\nSuma este: " << S.getR() << "+" << S.getI() << "*i";

S.setR(N[0].getR());

S.setI(N[0].getI());

for (int i = 0; i < n; i++)

S = S.dif(S, N[i]);

cout << "\nDiferenta este: " << S.getR() << "+" << S.getI() << "*i";

S.setR(N[0].getR());

S.setI(N[0].getI());

for (int i = 0; i < n; i++)

S = S.prod(S, N[i]);

}
cout << "\nProdusul este: " << S.getR() << "+" << S.getI() << "*i";

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