Sunteți pe pagina 1din 14

Universitatea Tehnica a Moldovei

RAPORT La lucrarea de laborator nr.1


Tema : Structura – mecanism de abstractizare

Elaborat de studenta Butucea Mariana


gr. FI-141 :

Verificat de profesorul : Rusu Mariana

Chişinău-2016
Problema 1 :
а) Să se creeze tipul abstract de date (structura) – ţara, care are denumire, continentul pe care se află şi
numărul de locuitori. Să se definească funcţiile de setare a denumirii ţării şi a numărului de populaţie, de
modificare a datelor, de comparare a ţărilor şi de eliberare a memoriei. Să se utilizeze operatorul new
pentru setarea denumirii ţării. În main să se exemplifice căutarea ţărilor după denumire şi populaţie.

Problema 2 :
Să se creeze tipul abstract de date (structura) – vector, care are pointer spre int ş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 mediei elementelor pozitive ale vectorului. Ca exemplu, în
funcţia main să se realizeze compararea a doi vectori.
1. Codul sursa :

#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <iostream>

using namespace std;

struct tara
{
char* nume;
char* continent;
long int locuitori;
};
tara indice[50];

void adaugare(int i)
{

char *buf=new char[100];

cout << "\n\n\tDenumirea tarii : "<<i<<" :";


cin >> buf;
indice[i].nume = new char[strlen(buf)+1];
strcpy(indice[i].nume, buf);
cout << "\tContinentul tarii :"<<indice[i].nume<<" ";
cin >> buf;
indice[i].continent = new char[strlen(buf)+1];
strcpy(indice[i].continent, buf);

cout << "Numarul de locuitori : "<<" ";


cin >> indice[i].locuitori;
delete[]buf;
}

void afisare(int i,int n)


{
if(n==0){cout<<"Lista este goala! "<<endl;getch();}
else
for(i=0;i<n;i++)
{
cout<<"-------------------------------------------------------------"<<endl;
cout<<i
<<" "<<indice[i].nume
<<" "<<indice[i].continent
<<" "<<indice[i].locuitori<<endl
<<"-------------------------------------------------------------"<<endl;
}
getch();
}

void modificare(int nr)


{
int opt;
menu:
cout<<"\n\Care cimp doriti sa-l modificati?\n";
cout<<"\t1---numele tarii"<<endl
<<"\t2---continentul"<<endl
<<"\t3---locuitorii"<<endl
<<"\t0---nimic"<<endl;
cin>>opt;
switch(opt)
{
case 1:cout<<"\n\tDati numele nou:";
cin>>indice[nr].nume;
break;
case 2:cout<<"\n\tDati continentul nou:";
cin>>indice[nr].continent;
break;
case 3:cout<<"\n\tIntroduceti numarul de locuitori:";
cin>>indice[nr].locuitori;
break;
case 0:break;
}
}

void sortare(int i,int n)


{
int option,j;
struct tara temp;
cout<<"Dupa care cimp doriti sa faceti sortarea ?"<<endl;
cout<<"1-locuitori"<<endl<<"0-nu doriti nimic"<<endl;
cin>>option;
switch(option)
{
case 1:
for(i=1;i<n;i++)
for(j=i;j>0;j--)
{
if(indice[j].locuitori<indice[j-1].locuitori)
{
temp=indice[j];
indice[j]=indice[j-1];
indice[j-1]=temp;
}
}
cout<<"Lista a fost sortata!"<<endl;
break;
case 0: break;
}
}

void cautare(int i,int n)


{
char country[20];
cout<<"Introduceti numele tarii cautate :"<<endl;
cin>>country;
cout<<"Datele despre tara "<<country<<" sunt :"<<endl;
for(i=0;i<n;i++)
{
if(strcmp(indice[i].nume,country)==0)
cout<<indice[i].nume
<<" "<<indice[i].continent
<<" "<<indice[i].locuitori<<endl;
}
getch();
}

void eliberare(int i,int n)


{
for(i=0;i<n;i++)
{
delete[] indice[i].nume;
indice[i].nume=NULL;
delete[] indice[i].continent;
indice[i].continent=NULL;
indice[i].locuitori=0;

}
}

int main()
{
int i=0,n=0,option;
menu:
cout<<"\n\n\n\t\t\tMENU\n\n\n";
cout<<"\t1.........Introducerea datelor"<<endl
<<"\t2.........Afisarea datelor"<<endl
<<"\t3.........Adaugarea datelor"<<endl
<<"\t4.........Modificarea datelor"<<endl
<<"\t5.........Sortarea datelor"<<endl
<<"\t6.........Cautarea informatiei"<<endl
<<"\t7.........Eliberarea Memoriei"<<endl
<<"\t0.........Iesire"<<endl;
cin>>option;
switch(option)
{
case 1:

cout<<"\n\n\tIntroduceti numarul de tari: ";


cin>>n;
for(i=0;i<n;i++)
adaugare(i);
goto menu;
case 2:

cout<<"\n\n\t\t\tBAZA DE DATE\n\n";
afisare(i,n);
goto menu;
case 3:

if(n==0){
cout<<"\n\n\tIn primul rind introduceti lista de tari";
getch();
goto menu;
}else
adaugare(i);
n++;
afisare(i,n);
goto menu;
case 4:int nr;

if(n==0){cout<<"Lista este goala! "<<endl;


getch();
goto menu;
}
else
afisare(i,n);
cout<<"Introduceti indicile tarii de modificat";
cin>>nr;
modificare(nr);
afisare(i,n);
goto menu;
case 5:
sortare(i,n);

afisare(i,n);
goto menu;
case 6:
cautare(i,n);
goto menu;
case 7:
cout<<"Eliberarea memoriei se va face pentru lista :"<<endl;
afisare(i,n);
eliberare(i,n);
cout<<"Memoria a fost eliberata!"<<endl;
n=0;
getch();
goto menu;

case 0:exit(1);

getch();
return 0;
}
Rezultatele compilarii :
Afisarea datelor :

Cautarea informatiei:

Modificarea datelor:
2. Codul sursa :

#include<iostream>
#include<stdio.h>
#include<conio.h>
#include<process.h>
#include<stdlib.h>
#include<math.h>

using namespace std;

struct Vector
{
int *point;
int n;
};

void Initiere(Vector *v,int n)


{
int j=0;
v->point=new int[n];
if(n<1)v->n=1;
else if(n>20)v->n=20;
else v->n=n;
for(int i=0;i<v->n;i++)
{
cout<<"Introduceti elementul "<<++j<<": ";
cin>>v->point[i];
}
}

void Afisare_Vector(Vector *v)


{
cout<<"\n";
for (int i=0;i<v->n;i++)
cout<<v->point[i]<<" ";
}

void Sterge(Vector *v)


{
delete[] v->point;
v->point=NULL;
v->n=0;
}

void setSize(Vector *v, int newSize) {


if (v->n > newSize) {
cout << "Noua dimensiune este mai mica, citeva elemente vor fi pierdute" << endl;
int *newData = new int[newSize];
for (int i = 0; i < newSize; i++) {
newData[i] = v->point[i];
}

delete[] v->point;
v->point = newData;
v->n = newSize;

} else if (v->n < newSize) {

int *newData = new int[newSize];


for (int i = 0; i < v->n; i++) {
newData[i] = v->point[i];
}

cout << "Dimensiunea noua e mai mare, introduceti " << newSize - v->n << " elemente" <<
endl;
for(int i = v->n; i < newSize; i++){
cin >> newData[i];
}

delete[] v->point;
v->point = newData;
v->n = newSize;
} else {
cout << "Same dimension";
}

int getElement(Vector *v,int id)


{
return v->point[id];
}

void setElement(Vector *v,int id,int val)


{
v->point[id]=val;
}

int main()
{

int n,n2,n3,i,k=0,option;
float val,s=0,s2,medie;
Vector v,v2;

menu:
cout<<"\n\t\t\t.........MENU.........\n\n";
cout<<"\n\t\t\t1...Initierea vectorului";
cout<<"\n\t\t\t2...Afisarea vectorului";
cout<<"\n\t\t\t3...Schimbarea unui element";
cout<<"\n\t\t\t4...Media numerelor pozitive";
cout<<"\n\t\t\t5...Compararea cu al doilea vector(de aceeasi lungime)";
cout<<"\n\t\t\t6...Eliberarea memoriei";
cout<<"\n\t\t\t7...Modificare lungime";
cout<<"\n\t\t\t8...Iesire\n";
cin>>option;
switch(option)
{
case 1:

cout<<"\nIntroduceti lungimea vectorului\n n=";


cin>>n;
Initiere(&v,n);
getch();
goto menu;
case 2:

Afisare_Vector(&v);
getch();
goto menu;
case 3:

Afisare_Vector(&v);
cout<<"\nIntroduceti indicile elementului de schimbat ";
cin>>i;
cout<<"\n Elementul cu indicile "<<i<<"este "<<getElement(&v,i-1);
cout<<"\n Introduceti valoarea noua : ";
cin>>val;
setElement(&v,i-1,val);
Afisare_Vector(&v);
getch();
goto menu;
case 4:

Afisare_Vector(&v);
for (i=0;i<n;i++)
if(v.point[i]>0)
{
s+=v.point[i];
k++;
}
medie=s/k;
cout<<"\nSuma numerelor pozitive este : "<<s;
cout<<"\nMedia lor este : "<<medie;
getch();
goto menu;
case 5:

cout<<"\nIntroduceti lungimea vectorolui 2 \n n2 =";


cin>>n2;
if(n!=n2){
cout<<endl<<"Vectorii nu pot fi comparati";
cout<<endl<<"Mai incercati odata";
goto menu; }
Initiere(&v2,n2);
cout<<endl<<"Vectorul 1 este : ";
Afisare_Vector(&v);
cout<<endl<<"Vectorul 2 este : ";
Afisare_Vector(&v2);
for(i=0;i<n;i++)s+=v.point[i];
for(i=0;i<n2;i++)s2+=v2.point[i];
if(s>s2)cout<<endl<<"Vectorul 1 este mai mare ca vectorul 2";
if(s==s2)cout<<endl<<"Vectorii sunt egali";
else cout<<endl<<"Vectorul 2 este mai mare ca vectorul 1";
getch();
goto menu;

case 6:

Sterge(&v);
Sterge(&v2);
cout<<"\nMemoria a fost eliberata \a\a\a";
getch();
goto menu;

case 7:
cout<<"Dati lungimea noua : ";
cin>>n3;
setSize(&v, n3);
getch();
goto menu;

case 8: exit(0);
default:cout<<"\n\n\n\t\t\a\a\aAlegeti corect optiunea!!!\a\a\a";
getch();
goto menu;

}
return 0;
}
Rezultatele compilarii:
Initializarea, afisarea vectorului :

Media nr pozitive , eliberarea memoriei:


Concluzie:
In prezenta lucrare de laborator am reutilizat notiunea de Structura , cu care am facut cunostinta in cadrul
studierii cursului Structuri de date si algortimi, insa am rezolvat sarcini la un nivel mai complex. Deci
,structura – este o mulţime de date grupate, conform unei ierarhii, de obicei de tipuri diferite. Reprezintă
un tip abstract de date, un tip definit de utilizator prin utilizarea tipurilor deja existente.
Am studiat cum se deosebeste o structura de alte tipuri de date, cum se defineste o variabila de tip
structura, care sunt deosebirile între structura din limbajul C şi C++ si respectiv am implementat in
practica cele studiate.

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