Explorați Cărți electronice
Categorii
Explorați Cărți audio
Categorii
Explorați Reviste
Categorii
Explorați Documente
Categorii
AL REPUBLICII MOLDOVA
Universitatea Tehnică a Moldovei
Facultatea Calculatoare, Informatică şi Microelectronică
Departamentul Microelectronică si Inginerie Biomedicală
Raport
pentru lucrarea de laborator Nr.1
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
2.1 Problema:1..........................................................................................................................4
3. Concluzia:............................................................................................................................26
4. Bibliografia...........................................................................................................................27
2
Tema: Structura – mecanism de abstractizare
1. Scopul lucrării:
1) Studierea programării prin abstractizarea datelor;
b) Să se creeze tipul abstract de date (structura) – vector, care are pointer spre float şi
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
15
5)Căutare
7)Adăugare
8)Ieșire
16
2.2 Problema 2
#include <iostream>
struct vector{
float *tablou;
};
v.nrElement = nr;
v.tablou[0] = NULL;
if(v.nrElement != 0) {
delete[] v.tablou;
17
v.tablou = NULL;
v.nrElement = 0;
cout << "Marimea vectorului este : " << v.nrElement << endl;
v.tablou[i]+=nr;
tablou = value;
if(v.tablou[0] == NULL){
delete[] v.tablou;
18
v.tablou[0] = NULL;
} else{
temp[i] = v.tablou[i];
} else{
temp[i] = 0;
delete[] v.tablou;
v.tablou = temp;
v.nrElement = size;
return &v.tablou[poz];
int main(){
vector v;
19
float *temp;
while(true){
while (m == 1){
system("cls"); m = 0;
switch (com){
case 0:
exit(0);
break;
case 1:
init(v,nr);
setValue(v.tablou[i],value);
20
break;
default:
break;
system("cls");
cout << "[ 3 ] Acces catre elementul dorit din vector" <<
endl;
switch (com){
case 0:
freemem(v);
exit(0);
break;
case 1:
show(v);
21
cout << endl;
break;
case 2:
changeSize(v,nr);
break;
case 3:
temp = getElement(v,nr);
cout << "Elementul dorit este :" << *temp << endl;
break;
case 4:
adunNr(v,nr);
break;
case 5:
freemem(v);
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