Sunteți pe pagina 1din 27

MINISTERUL EDUCAȚIEI

AL REPUBLICII MOLDOVA
Universitatea Tehnică a Moldovei
Facultatea Calculatoare, Informatică şi Microelectronică
Departamentul Microelectronică si Inginerie Biomedicală

IBM-211 Gligor Dragoș

Raport
pentru lucrarea de laborator Nr.1

la cursul de “Programarea Orientată pe Obiecte”

Verificat:
Barîmb Eusebiu, asistent universitar,
Departamentul Microelectronică si Inginerie Biomedicală,
Facultatea FCIM, UTM

Chișinău – 2022

1
Cuprins:

1. Scopul lucrării:.......................................................................................................................3

1.1. Sarcina lucrării:...................................................................................................................3

2.1 Problema:1..........................................................................................................................4

2.2 Problema: 2.......................................................................................................................17

3. Concluzia:............................................................................................................................26

4. Bibliografia...........................................................................................................................27

2
Tema: Structura – mecanism de abstractizare
1. Scopul lucrării:
1) Studierea programării prin abstractizarea datelor;

2) Studierea regulilor de definire şi utilizare a structurilor de date;

3)Crearea variabilelor de tip structură, accesarea componentelor unei structuri.

1.1. Sarcina lucrării:


Varinta 6:
а) Să se creeze tipul abstract de date (structura) – casă, care are denumirea firmei de

construcţie, adresa, numărul etajelor şi al apartamentelor. Să se definească funcţiile de

setare, de modificare a datelor, de comparare a caselor. Pentru crearea cîmpurilor textuale

să se utilizeze operatorul new. Să se elibereze memoria. În main să se exemplifice sortarea

caselor după numărul de etaje+adresa în ordine alfabetică.

b) Să se creeze tipul abstract de date (structura) – vector, care are pointer spre float şi

numărul de elemente. Să se definească funcţiile de iniţializare, de eliminare a vectorului,

de setare/modificare a dimensiunii, de acces la elementele vectorului, de calcul a normei

vectorului. Ca exemplu, în funcţia main, să se realizeze adunarea elementelor vectorului

cu un număr.

3
2.1 Problema 1
Primul program:
Funct.h
#ifndef funct_H
#define funct_H
struct casa
{
char *name;
char *adres;
int nrEt;
int nrCam;
struct casa *next;
};
void creat(void);
void free(void);
void show(void);
void sortAlf(void);
void sortEt(void);
void modif(casa *mC);
casa *search(char *nume);
void swap(casa *first, casa *last);
int compare(casa &first, casa &last);
#endif
Funct.cpp
#ifndef funct_CPP
#define funct_CPP
#include <iostream>

4
#include <string.h>
#include "funct.h"
casa *head = NULL;
void creat(void){
casa *p = NULL;
static casa *n = head;
char tempChar[256];
int length;
if(n == NULL){
n = new casa;
head = n;
} else {
p = n;
n = new casa;
p->next = n;
}
std::cout << "Introdu numele : "; fflush(stdin);
std::cin.getline(tempChar,255);
length = strlen(tempChar)+1;
n->name = new char[length];
strcpy_s(n->name,length,tempChar);
std::cout << "Introdu adresa : "; fflush(stdin);
std::cin.getline(tempChar,255);
length = strlen(tempChar)+1;
n->adres = new char[length];
strcpy_s(n->adres,length,tempChar);
std::cout << "Introdu nr. de etaje : "; fflush(stdin);
std::cin >> n->nrEt;
std::cout << "Introdu nr. de camere : "; fflush(stdin);

5
std::cin >> n->nrCam;
n->next = NULL;
}
void free(void){
casa *p, *n = head;
while(n != NULL){
p = n->next;
delete[] n->name;
delete[] n->adres;
delete n;
n = p;
}
head = NULL;
}
void show(void){
casa *n = head;
while(n != NULL){
std::cout << "Numele : " << n->name << std::endl;
std::cout << "Adresa : " << n->adres << std::endl;
std::cout << "Nr. Etaje : " << n->nrEt << std::endl;
std::cout << "Nr. Camere : " << n->nrCam << std::endl;
n = n->next;
}
}
casa *search(char *nume){
casa *n = head;
while(n != NULL){
if(!strcmp(nume,n->name)){
return n;

6
}
n = n->next;
}
return NULL;
}
void modif(casa *mC){
int com;
while(true){
std::cout << "Numele : " << mC->name << std::endl;
std::cout << "Adresa : " << mC->adres << std::endl;
std::cout << "Nr. Etaje : " << mC->nrEt << std::endl;
std::cout << "Nr. Camere : " << mC->nrCam << std::endl;
std::cout << "\nAlegeti cimpul pentru modificare :\n" <<
std::endl;
std::cout << "[ 1 ] Numele" << std::endl;
std::cout << "[ 2 ] Adresa" << std::endl;
std::cout << "[ 3 ] Nr. Etaje" << std::endl;
std::cout << "[ 4 ] Nr. Camere\n" << std::endl;
std::cout << "[ 0 ] Exit\n" << std::endl;
std::cout << "Command >> ";
std::cin >> com; fflush(stdin);
switch(com){
case 0:
return;
break;
case 1:
std::cout << "Nmele : ";
std::cin >> mC->name;
break;
case 2:
7
std::cout << "Adresa : ";
std::cin >> mC->adres;
break;
case 3:
std::cout << "Nr. Etaje : ";
std::cin >> mC->nrEt;
break;
case 4:
std::cout << "Nr. Camere : ";
std::cin >> mC->nrCam;
break;
default :
std::cout << "\aAti indrodus o comanda gresita" << std::endl;
break;
}
system("pause");
system("cls");
}
}
void swap(casa *first, casa *last){
casa t, *nf, *nl;
nf = first->next;
nl = last->next;
t = *first;
*first = *last;
*last = t;
first->next = nf;
last->next = nl;
}

8
void sortEt(void){
casa *a = head, *b = NULL;
while(a != NULL) {
b = a->next;
while(b != NULL) {
if(a->nrEt < b->nrEt){
swap(a,b);
}
b = b->next;
}
a = a->next;
}
}
void sortAlf(){
casa *a = head, *b = NULL;
int n, m;
while(a != NULL){
b = a->next;
while(b != NULL){
int k = 0;
n = a->adres[k];
m = b->adres[k];
qaz:if(n>m)
swap(a,b);
else
if(n == m) {
k++;
n = a->adres[k];
m = b->adres[k];

9
goto qaz;
}
b = b->next;
}
a = a->next;
}
}
int lenght(){
casa *n = head;
int count = 0;
while(n != NULL){
count++;
n = n->next;
}
return count;
}
int compare(casa &first, casa &last){
if(first.nrCam > last.nrCam) return 1;
return 0;
}
#endif
Main.cpp
#include <iostream>
#include "funct.h"
using namespace std;
int main(){
int com, m = 1;
char tempChar[256];
casa *tempCasa = NULL;

10
casa *tempCasa2 = NULL;
while(true){
while(m == 1){
cout << "[ 1 ] Add element" << endl;
cout << "[ 0 ] Opreste adaugarea\n" << endl;
cout << "Comand >> ";
cin >> com;
fflush(stdin);
switch(com){
case 0:
m = 0;
break;
case 1:
creat();
break;
default :
cout << "Ati introdus o comanda gresita!\a" << endl;
break;
}
system("pause");
system("cls");
}
cout << "Menu :\n" << endl;
cout << "[ 1 ] Afiseaza BD" << endl;
cout << "[ 2 ] Modificarea unei casei" << endl;
cout << "[ 3 ] Sortarea dupa nr. de etaje" << endl;
cout << "[ 4 ] Sortarea in ordine alfabetica dupa adrese" <<
endl;
cout << "[ 5 ] Cautare" << endl;
cout << "[ 6 ] Compararea a 2 case" << endl;
11
cout << "[ 7 ] Adaugare" << endl;
cout << "[ 0 ] Exit"<< endl << endl;
cout << "Comand >> ";
cin >> com; fflush(stdin); system("cls");
switch(com){
case 0:
free();
exit(0);
break;
case 1:
show();
break;
case 2:
cout << "Introduceti numele pentru cautare : ";
cin >> tempChar;
tempCasa = search(tempChar);
if(tempCasa == NULL) cout << "Nu sa gasit nici o inregistrare\
a" << endl;
else
modif(tempCasa);
break;
case 3:
sortEt();
break;
case 4:
sortAlf();
break;
case 5:
cout << "Introduceti numele pentru cautare : ";
cin >> tempChar;
12
tempCasa = search(tempChar);
if(tempCasa == NULL){
cout << "Nu sa gasit nici o inregistrare\a" << endl;
} else{
cout << "Numele : " << tempCasa->name << endl;
cout << "Adresa : " << tempCasa->adres << endl;
cout << "Nr. Etaje : " << tempCasa->nrEt << endl;
cout << "Nr. Camere : " << tempCasa->nrCam << endl;
}
break;
case 6:
cout << "Introdu numele casei nr.1 : ";
cin >> tempChar;
tempCasa = search(tempChar);
if(tempCasa == NULL) {
cout << "\aCasa cu numele [ " << tempChar << " ] nu a fost
gasita!" << endl;
break;
}
cout << "Introdu numele casei nr.2 : ";
cin >> tempChar;
tempCasa2 = search(tempChar);
if(tempCasa2 == NULL) {
cout << "\aCasa cu numele [ " << tempChar << " ] nu a fost
gasita!" << endl;
break;
}
if(compare(*tempCasa,*tempCasa2) == 1)
cout << "Casa " << tempCasa->name << "are mai multe camere
decit casa "

13
<< tempCasa2->name << endl;
else
cout << "Casa " << tempCasa2->name << "are mai multe camere
decit casa
" << tempCasa->name << endl;
break;
case 7:
m = 1;
break;
default :
cout << "\aAti introdus o comanda gresita!" << endl;
break;
}
system("pause"); system("cls");
}
return 0;
}
Meniul progrmaului

1) Afisarea

14
2)Modificare unei case

In acest exemplu a fost modificat casa „a” la structura nr de camere

3) Sortarea după nr de etaje

4)Sortarea după adresa în ordine alfabetică

15
5)Căutare

6) Compararea a doua case după nr de camere

7)Adăugare

8)Ieșire

16
2.2 Problema 2
#include <iostream>

using namespace std;

struct vector{

float *tablou;

unsigned int nrElement;

};

void init(vector &v,int nr);

void freemem(vector &v);

void show(vector &v);

void adunNr(vector &v, int nr);

void setValue(float &tablou, int value);

void changeSize(vector &v, int size);

float* getElement(vector &v,int poz);

void init(vector &v,int nr) {

v.tablou = new float[nr];

v.nrElement = nr;

v.tablou[0] = NULL;

void freemem(vector &v){

if(v.nrElement != 0) {

delete[] v.tablou;

17
v.tablou = NULL;

v.nrElement = 0;

void show(vector &v){

cout << "Marimea vectorului este : " << v.nrElement << endl;

cout << "Elementele sunt : ";

for(int i=0; i<v.nrElement; i++){

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

void adunNr(vector &v, int nr) {

for(int i=0; i<v.nrElement; i++){

v.tablou[i]+=nr;

void setValue(float &tablou, int value) {

tablou = value;

void changeSize(vector &v, int size) {

if(v.tablou[0] == NULL){

delete[] v.tablou;

v.tablou = new float[size];

18
v.tablou[0] = NULL;

} else{

cout << "\aAtentie, posibil pierdere de informatie!" << endl;

float *temp = new float[size];

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

if(i < v.nrElement) {

temp[i] = v.tablou[i];

} else{

temp[i] = 0;

delete[] v.tablou;

v.tablou = temp;

v.nrElement = size;

float* getElement(vector &v,int poz){

if(poz > v.nrElement-1) return NULL;

return &v.tablou[poz];

int main(){

vector v;

int nr, com, m = 1, value;

19
float *temp;

while(true){

while (m == 1){

system("cls"); m = 0;

cout << "Meniu de initializare :" << endl << endl;

cout << "[ 1 ] Initializare vectorului" << endl;

cout << "[ 0 ] Exit" << endl << endl;

cout << "Command >> ";

cin >> com; fflush(stdin);

switch (com){

case 0:

exit(0);

break;

case 1:

cout << "Introdu nr de elemente : ";

cin >> nr;

init(v,nr);

cout << "Introdu valorile : " << endl;

for(int i=0; i<v.nrElement; i++){

cout << "vector [ " << i << " ] = ";

cin >> value;

setValue(v.tablou[i],value);

20
break;

default:

cout << "\aAti introdu o comanda gresita!" << endl;

break;

system("cls");

cout << "[ 1 ] Afisarea elementelor" << endl;

cout << "[ 2 ] Modificarea marimii" << endl;

cout << "[ 3 ] Acces catre elementul dorit din vector" <<
endl;

cout << "[ 4 ] Adunarea tuturor elementelor cu un numar" <<


endl;

cout << "[ 5 ] Eliminarea vectorului" << endl;

cout << "[ 0 ] Exit" << endl << endl;

cout << "Command >> ";

cin >> com; fflush(stdin);

switch (com){

case 0:

freemem(v);

exit(0);

break;

case 1:

show(v);

21
cout << endl;

break;

case 2:

cout << "Introdu marimea pentru modificare : ";

cin >> nr;

changeSize(v,nr);

break;

case 3:

cout << "Introdu pozitia elementului dorit : ";

cin >> nr;

temp = getElement(v,nr);

cout << "Elementul dorit este :" << *temp << endl;

break;

case 4:

cout << "Introdu nr. dorit pentru adunare : ";

cin >> nr;

adunNr(v,nr);

break;

case 5:

freemem(v);

cout << "Memoria a fost eliminata pentru vectorul dat" <<


endl;

break;

default:
22
cout << "\aAti introdus o comanda gresita!" << endl;

break;

system("pause");

return 0;

Meniul de initializare

Initializarea vectorului

Afisarea

23
Modificarea marimii

Adunarea

Eliminarea memoriei

24
3. Concluzia:
În laboratorul dat am aprofundat cunoștințele în domeniul strucutrilor. Ne-am amintit
regulile de definire și utilizarea lor, cît și a variabilelor de tip structură cu care am lucrat în
programa data. Am lucrat cu abstractizarea datelor, și am stabilit și implimentat conceptele
necesare pentru rezolvarea problemei și primirea rezultatelor dorite. Am folosit multe
cunoștințe care le-am acumulat de la Limbajul C. Cunoștințele date ne vor ajuta la lucru cu
clasele.

25
4. Bibliografia
https://else.fcim.utm.md/mod/resource/view.php?id=37366
https://else.fcim.utm.md/mod/resource/view.php?id=27451
https://else.fcim.utm.md/mod/resource/view.php?id=11585
https://else.fcim.utm.md/mod/resource/view.php?id=13524
https://else.fcim.utm.md/mod/resource/view.php?id=13761
26
https://else.fcim.utm.md/mod/resource/view.php?id=37366

27

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