Sunteți pe pagina 1din 9

ANEXA A

Raport

la cursul de “Structuri de date și algoritmi”

Verificat:
, doctor, conf. univ.
Departamentul Informatică şi IS,
Facultatea FCIM, UTM

Chișinău – 2022
ANEXA B

1. Srcina

Utilizam metoda Heap Sort si Counting Sort:


2.Codul programului,având comentarii relevante în el;
#include <stdio.h>

#include <stdlib.h>

#include <stdbool.h>

#include <string.h>

#define RANGE 255

2
struct date

{ int ziua;

int luna;

int an; };

struct proptietar

{ char nume[20];

char prenume[20]; };

struct evidenta

char marca[20];

char culoare[20];

int nrinmatriculare;

int aninmatriculare;

char caroserie[20];

int pret;

};

//citirea datelor

Void citire (struct evidenta evid[], struct date dat[], struct proptietar pro[], int n)

{ int i;

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

{ //citirea numelui si prenumelui

printf ("\nNume/Prenume: ");

scanf ("%s %s", pro[i].nume, pro[i].prenume);

//citirea datelor despre automobil

printf ("Marca automobilului: ");

scanf ("%s", evid[i].marca);

printf ("Culoarea automobilului: ");

scanf ("%s", evid[i].culoare);

printf ("Nr. de inmatriculare: ");

scanf ("%i", &evid[i].nrinmatriculare);

printf ("Anul de inmatriculare: ");

scanf ("%i", &evid[i].aninmatriculare);

printf ("Tipul caroseriei: ");

scanf ("%s", evid[i].caroserie);

printf ("Pretul automobilului: ");

scanf ("%i", &evid[i].pret);

//citirea date

printf ("\nZiua: ");

scanf ("%i", &dat[i].ziua);

3
printf ("Luna: ");

scanf ("%i", &dat[i].luna);

printf ("Anul: ");

scanf ("%i", &dat[i].an);}}

//afisarea datelor

Void afisare (struct evidenta evid[], struct date dat[], struct proptietar pro[], int n)

{ int i;

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

//afisarea numelui si prenumelui

printf ("\n\nNume/Prenume: %s %s", pro[i].nume, pro[i].prenume);

//afisarea datelor despre automobil

printf ("\nMarca automobilului: %s", evid[i].marca);

printf ("\nCuloarea automobilului: %s", evid[i].culoare);

printf ("\nNr. de inmatriculare: %i", evid[i].nrinmatriculare);

printf ("\nAnul de inmatriculare: %i", evid[i].aninmatriculare);

printf ("\nTipul caroseriei: %s", evid[i].caroserie);

printf ("\nPretul automobilului: %i", evid[i].pret);

//afisarea datei

printf ("\nZiua: %i", dat[i].ziua);

printf ("\nLuna: %i", dat[i].luna);

printf ("\nAnul: %i", dat[i].an);}}

void heapify (struct evidenta evid[], int n, int i)

{ int max = i; // Initialize largest as root

int left = 2 * i + 1; // left child

int right = 2 * i + 2; // right child

// If left child is larger than root

if (left < n && evid[left].aninmatriculare > evid[max].aninmatriculare)

max = left;

// If right child is larger than root

if (right < n && evid[right].aninmatriculare > evid[max].aninmatriculare)

max = right;

// If root is not largest

if (max != i)

// swap a[i] with a[largest]

int temp = evid[i].aninmatriculare;

evid[i].aninmatriculare = evid[max].aninmatriculare;

evid[max].aninmatriculare = temp;

4
heapify (evid, n, max);}}

/*Function to implement the heap sort*/

Void heapSort (struct evidenta evid[], int n)

{ for (int i = n / 2 - 1; i >= 0; i--)

heapify (evid, n, i);

// One by one extract an element from heap

for (int i = n - 1; i >= 0; i--)

{ /* Move current root element to end */

// swap a[0] with a[i]

int temp = evid[0].aninmatriculare;

evid[0].aninmatriculare = evid[i].aninmatriculare;

evid[i].aninmatriculare = temp;

heapify (evid, i, 0);}}

//function to print the array elements

Void printArr (struct evidenta evid[], int n)

{ int i;

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

{ printf ("\n%i\n", evid[i].aninmatriculare);

printf (" ");}}

//Sortare ascendenta dupa proprietar HeapSort

Void swap (struct proptietar *a, struct proptietar *b)

{ struct proptietar temp = *a;

*a = *b;

*b = temp; }

Void heapify1 (struct proptietar pro[], int n, int i)

{ int max1 = i;

int left1 = 2 * i + 1;

int right1 = 2 * i + 2;

if (left1 < n && strcmp (pro[left1].nume, pro[max1].nume) > 0)

max1 = left1;

if (right1 < n && strcmp (pro[right1].nume, pro[max1].nume) > 0)

max1 = right1;

if (max1 != i)

{ swap (&pro[i], &pro[max1]);

heapify1 (pro, n, max1);}}

void heap_Sort (struct proptietar pro[], int n, int i)

{ for (int i = n / 2 - 1; i >= 0; i--)

heapify1 (pro, n, i);

for (int i = n - 1; i >= 0; i--){

5
swap (&pro[0], &pro[i]);

heapify1 (pro, i, 0);}}

//Sortarea dupa pret CountingSort

Void countingSort (struct evidenta evid[], int n)

{ struct evidenta evid1[10];

int x = evid[0].pret;

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

{ if (evid[i].pret > x)

x = evid[i].pret;}

int count_evid[x + 1];

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

{ count_evid[i] = 0; }

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

{ count_evid[evid[i].pret]++;}

for (int i = 1; i <= x; i++)

{count_evid[i] += count_evid[i - 1];}

for (int i = n - 1; i >= 0; i--)

{ evid1[count_evid[evid[i].pret] - 1] = evid[i];

count_evid[evid[i].pret]--;}

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

{ evid[i] = evid1[i];}}

void schimbare (struct evidenta evid[], struct date dat[], struct proptietar pro[], int n)

int nr_auto = 0;

int i;

printf

("\nIntroduceti numarul masinii la care doriti sa realizati modificari: ");

scanf ("%i", &nr_auto);

if (nr_auto > n && nr_auto < 0)

printf ("Asa masina nu a fost gasita : ");

printf ("\nCe doriti sa inlocuiti? \n");

int sc = 0;

printf

("Nume/Prenume-1, Marca-2, Culoare-3, Nr. inmatriculare-4, An inmatriculare-5, Caroserie-6, Pret-7, Data(Zi,luna,an)- 8\n\n");

6
scanf ("%d", &sc);

switch (sc)

case 1:

printf ("\n%i Nume/Proprietar: ", sc);

scanf ("%s %s", pro[sc].nume, pro[sc].prenume);

printf ("\n");

break;

};

case 2:

printf ("\n Marca:", sc);

scanf ("%s", evid[sc].marca);

printf ("\n");

break;

};

case 3:

printf ("\n Culoarea: ", sc);

scanf ("%s", evid[sc].culoare);

printf ("\n");

break;

};

case 4:

printf ("\nNr. inmatriculare: ");

printf ("%i", evid[sc].nrinmatriculare);

printf ("\n");

break;

case 5:

printf ("\nAn inmatriculare: ");

printf ("%i", evid[sc].aninmatriculare);

printf ("\n");

break;

case 6:

7
printf ("\nCaroserie: ");

printf ("%s", evid[sc].caroserie);

printf ("\n");

break;

case 7:

printf ("\nPret: ");

printf ("%i", evid[sc].pret);

printf ("\n");

break;

case 8:

printf("\nData: \n");

printf("\n Zi:");

printf("%i",dat[sc].ziua);

printf("\n Luna:");

printf("%d",dat[sc].luna);

printf("\n An:");

printf("%d",dat[sc].an);

printf ("\n");

break;};}}

//transmiterea datelor din functia void in functia main

int

main ()

int i, n;

printf ("Introduceti n = ");

scanf ("%d", &n);

struct evidenta evid[n];

struct date dat[n];

struct proptietar pro[n];

printf ("\nDatele automobilului sunt:\n");

citire (evid, dat, pro, n);

//printf ("\nAti introdus datele: \n");

//afisare (evid, dat, pro, n);

printf("\nDatele schimbate:\n");

int checker;

8
printf("Daca doriti sa inregistrati careva modificari, introduceti 1, in caz contrar 0 : ");

scanf("%d", &checker);

int ver = 1;

if(checker != 1) {

} else{

while(ver == 1) {

schimbare(evid, dat, pro, n);

printf("Mai doriti sa realizati careva schimbari (1 - DA | 0 - NU) : ");

scanf("%d", &ver);}};

printf ("\n\nSortarea ascendenta dupa anul de inmatriculare:\n");

heapSort (evid, n);

printArr (evid, n);

printf ("\nSortarea ascendenta dupa proprietar:\n");

heap_Sort (pro, n, i);

afisare (evid, dat, pro, n);

printf ("\n\nSortarea ascendenta dupa pretul automobilului:\n");

countingSort (evid, n);

afisare (evid, dat, pro, n);

return 0;

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