Sunteți pe pagina 1din 12

RAPORT

LUCRARE DE LABORATOR NR. 1


LA DISCIPLINA „PROGRAMAREA ORIENTATĂ PE OBIECTE”
Tema: Structura – mecanism de abstractizare

V6

Realizat: Milnicenco Carolin AI-191

Verificat: Lisnic Inga

Chisinau-2020
Tema: Structura – mecanism de abstractizare

Scopul lucrării:
 Studierea programării prin abstractizarea datelor;
 Studierea regulilor de definire şi utilizare a structurilor de date;
 Crearea variabilelor de tip structură, accesarea componentelor unei structuri.

Întrebări de control:

1.Definiţi noţiunea – tip abstract de date.


Un Tip Abstract de Date
(TAD) este o specificare a unui set de date de un anumit tip, împreună cu un set
de operaţii care pot fi executate cu aceste date
2.Cum se defineşte o structură?
struct Book{
// definirea elementelor structurii
char *author;
char *title;
int year;
int pages;
};

3.Prin ce se deosebeşte structura de alte tipuri de date?


Structură de date este o metodă sistematică de stocare a informațiilor și datelor într-un calculator, în așa fel
încât ele să poată fi folosite în mod eficient. Deseori o alegere bine făcută a structurii de date va permite și
implementarea unui algoritm eficient. Structura de date aleasă este derivată de multe ori dintr-un tip de dată
abstract. O structură de date bine concepută permite efectuarea unei varietăți de operații de bază, utilizând
puține resurse (ca de exemplu memoria necesară și timpul de execuție). Structurile de date se implementează
utilizând tipuri de date, referințe și operații asupra acestora, toate facilitate de către un limbaj de programare.
(aici nu sunt sigur)
4.Cum se defineşte o variabilă de tip structură?
Pentru definirea variabilelor este suficientă utilizarea numelui de structură la fel ca tipurile predefinite:

Book b1, b2;


5.Cînd se utilizează punctul, cînd - săgeata?
Accesarea indirectă a structurilor (şi a claselor) este foarte frecventă înprogramare, fiind singura lor modalitate
de accesare în cazul alocării dinamice, limbajul afost prevăzut cu operatorul de accesare indirectă, “operatorul
săgeată”, definit astfel: dacă p este un pointer către o structură care are un membru x, atunci expresia p->x
estesintactic echivalentă cu (*p).x (adică la compilare prima este tradusă în a doua).Utilizarea operatorului
săgeată simplifică foarte mult scrierea şi măreşte lizibilitateacodului.
Punctul se foloseste la pointere catre structure
(aici nu sunt sigur)
6.Care sunt deosebirile între structura din limbajul C şi C++?
In C++, o structura este, de fapt,  o clasa ai carei membri sunt declarati, in mod implicit, public. In consecinta
in C++, la declararea unei variabile de tip structura nu mai este obligatorie precizarea cuvantului cheie struct.
Exemplu:
a)      descrierea unei structuri in C      b) descrierea unei structuri in C++
typedef struct                                      struct tip_student
  {                                                          {
     int matricola;                                       int matricola;
     char nume[20];                                    char nume[20];
     int nr_note;                                          int nr_note;
     double nota[15];                                 double nota[15];
     double media;                                    double media;
  }tip_student;                                       }
Iar declararea de variabile de tipul structurii de mai sus, in C si in C++ se face astfel:
a) struct tip_student s1,s2,student;   b)    tip_student s1,s2, student;
7.O structură poate oare să conţină altă structură?
-Da, cu conditia ca structura inclusa este declarata mai sus

8.O structură poate oare să conţină pointer spre ea însăşi?

-Desigur, la fel cum poate contine un pointer spre alte structure sau elemente, poate contine si adresa
ei;

9.Poate oare să fie creată dinamic o variabilă de tip structură?

-Da, prin urmarea functiei NEW pentru creare si DELETE pentru eliberarea memoriei.

10.Explicaţi cum are loc apelul prin referinţă.

Prin referinta putem manipula structura fara a fi nevoie de transmis prin functii delete propriu zise a
structurii,doar prin referinta putem manipula datele din memorie, fara a fi nevoie de a fi reutilizare

Varianta 6.
6. Să se creeze tipul abstract de date (structura) – vector, care se compune dintr-un pointer spre double
şi din numărul de elemente. Să se definească funcţiile: de iniţializare, de eliminare a unui vector; de
setare/ modificare a dimensiunii vectorului; de acces la elementele vectorului; de calcul a sumei
elementelor pozitive ale unui vector. În funcţia main să se exemplifice înmulţirea unui vector cu un
număr.

-Codul
#include <iostream>
using namespace std;

struct vector {
double *tab;
int nr_elem;
};

void initializare(vector *V) {


cout << "Introduceti nr de elemnte al vectorului :";
cin >> V->nr_elem;
V->tab = new double[V->nr_elem];
if (!V->tab)
cout << "Memoria nu a fost alocata pentru vector!";
else
cout << "Memoria a fost alocata" << endl;
}

void adaugare_elem(vector *V) {


cout << "adaugati elemntele tabloului" << endl;
for (int i = 0; i < V->nr_elem; i++) {

cin >> V->tab[i];


}
}

void eliminare(vector *V) {


delete[] V->tab;
delete V;
}

void afisare(vector *V) {


for (int i = 0; i < V->nr_elem; i++) {
cout << V->tab[i] << " ";
}
cout <<endl;
}

void modificare(vector *V) {


cout << "Introduceti nr de elemnte al vectorului :";
cin >> V->nr_elem;
V->tab = new double[V->nr_elem];
}

void suma(vector *V) {


double suma = 0;
for (int i = 0; i < V->nr_elem; i++) {
if (V->tab[i] > 0) {
suma = suma + V->tab[i];
}
}
cout << "Suma este : " << suma<< endl;
}

int main() {
vector *V1 ,*V2 ;
int a, optiune, var, x;
while (1) {
system("cls");
cout << " Meniu" << endl;
cout << "1. Initializarea " << endl;
cout << "2. Eliminarea unui vector" << endl;
cout << "3. Modificare a dimensiunii vectorului" << endl;
cout << "4. Acces la elementele vectorului" << endl;
cout << "5. calcul a sumei elementelor pozitive ale unui vector " << endl;
cout << "6. inmultirea vectorului cu un numar " << endl;
cout << "7.iesire din program " << endl;
cout << "Alegeti optiunea ";
cin >> optiune;
switch (optiune) {

case 1:
cout <<"doriti sa initializati vectorul 1? 1/0 " ; cin >> var;
if (var == 1){
cout << "Initializare 1 vector" << endl;
V1 = new vector;
if (V1 == nullptr) cout << "Memoria nu a fost alocata pentru vectorul 1!";
initializare(V1);
adaugare_elem(V1);
}
cout <<"doriti sa initializati vectorul 2? 1/0 " ;cin >> var;
if (var == 1){
cout << "Initializare 2 vector" << endl;
V2 = new vector;
if (V2 == nullptr) cout << "Memoria nu a fost alocata pentru vectorul 2!";
initializare(V2);
adaugare_elem(V2);
}
system("pause");
break;

case 2:
cout << "Doriti sa eliminati vectorul 1? 1/0 "<< endl;
cin >> var;
if (var == 1)
eliminare(V1);
cout << "Doriti sa eliminati vectorul 2? 1/0 "<< endl;
cin >> var;
if (var == 1)
eliminare(V2);
system("pause");
break;

case 3:
cout << "Doriti sa modificati vectorul 1? 1/0 "<< endl;
cin >> var;
if (var == 1) {
modificare(V1);
adaugare_elem(V1);
}
cout << "Doriti sa modificati vectorul 2? 1/0 "<< endl;
cin >> var;
if (var == 1) {
modificare(V2);
adaugare_elem(V2);
}
system("pause");
break;

case 4:
cout << "Doriti sa aveti acces la vectorul 1? 1/0 "<< endl;
cin >> var;
if (var == 1)
afisare(V1);
cout << "Doriti sa aveti acces la vectorul 2? 1/0 "<< endl;
cin >> var;
if (var == 1)
afisare(V2);
system("pause");
break;

case 5:
cout << "Doriti sa aflati suma nr pozitive a vectorului 1? 1/0 "<< endl;
cin >> var;
if (var == 1)
suma(V1);
cout << "Doriti sa aflati suma nr pozitive a vectorului 2? 1/0 "<< endl;
cin >> var;
if (var == 1)
suma(V2);
system("pause");
break;

case 6:
cout << "Doriti sa inmultiti 1 vector? 1/0 "<< endl;
cin >> var;
if (var == 1) {
cout << "Cu ce nr doriti sa inmultiti vectorul? : "<< endl;
cin >> x;
for (int i = 0; i < V1->nr_elem; i++) {
V1->tab[i] = V1->tab[i] * x;
}
}
cout << "Doriti sa inmultiti 2 vector? 1/0 "<< endl;
cin >> var;
if (var == 1) {
cout << "Cu ce nr doriti sa inmultiti vectorul? : "<< endl;
cin >> x;
for (int i = 0; i < V2->nr_elem; i++) {
V2->tab[i] = V2->tab[i] * x;
}
}
system("pause");
break;

case 7:
return 0;
}
}
return 0;
}
-Rezultat:

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

  • Lab 2 C
    Lab 2 C
    Document12 pagini
    Lab 2 C
    Belîi Daniela
    Încă nu există evaluări
  • Lab3Rom 1
    Lab3Rom 1
    Document4 pagini
    Lab3Rom 1
    trfetr4frfrf
    Încă nu există evaluări
  • Tronciu Raport POO-3
    Tronciu Raport POO-3
    Document11 pagini
    Tronciu Raport POO-3
    trfetr4frfrf
    Încă nu există evaluări
  • Lab3Rom 1
    Lab3Rom 1
    Document4 pagini
    Lab3Rom 1
    trfetr4frfrf
    Încă nu există evaluări
  • Lab 1 Rom
    Lab 1 Rom
    Document6 pagini
    Lab 1 Rom
    Carolin
    Încă nu există evaluări
  • GL Lab Soo
    GL Lab Soo
    Document11 pagini
    GL Lab Soo
    trfetr4frfrf
    Încă nu există evaluări
  • Lab 4 Rom
    Lab 4 Rom
    Document4 pagini
    Lab 4 Rom
    trfetr4frfrf
    Încă nu există evaluări
  • Lab 1
    Lab 1
    Document8 pagini
    Lab 1
    trfetr4frfrf
    Încă nu există evaluări