Sunteți pe pagina 1din 6

MINISTERUL EDUCAȚIEI, CULTURII ȘI CERCETĂRII

AL REPUBLICII MOLDOVA
Universitatea Tehnică a Moldovei
Facultatea Calculatoare, Informatică şi Microelectronică
Departamentul Informatică şi Ingineria Sistemelor

Raport
pentru lucrarea de laborator Nr.5

la cursul de “Structuri de date şi algoritmi”

Verificat: Dubina Andrei

Burlacu Natalia, doctor, conf. univ.


Departamentul Informatică şi IS,
Facultatea FCIM, UTM

Chișinău – 2023

1
Sarcina :

Este dată o structura Evidența bibliotecii personale care conține componentele: nume autor, titlul
cărții, editura, anul editării, nr. înregistrare a cărții.
A rezolva în C problema care să efectueze următoarele operații:
v/ Creează un fișier textual (experiment.txt) (în locația de salvare a codului sursă
v/ Deschide fișierul textual cu numele dat, permite introducerea datelor determinate de structura
dată, stocându-le în fișierul de lucru;
v/ Afișează Ia ecran datele structurii introduse recent în fișierul dat. Codul sursă scris de dvs. va
conține funcții (cu apelare în main) care să efectueze următoarele manipulații cu datele din
structură:
v/ Sortarea ascendentă (Selection Sort) și descendentă (Quick Sort) a datelor structurii (nume
autor, anul editării);
v/ Datele de output vor fi înregistrate în alte 2 fișiere: Selection-exp.txt și Quick-exp.txt.

Codul programului :

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// Definirea structurii
typedef struct {
char nume_autor[50];
char titlul_cartei[50];
char editura[50];
int anul_editarii;
int nr_inregistrare;
} Carte;

// Functiile de sortare
void selectionSort(Carte* carti, int n) {
int i, j, min_idx;
Carte temp;
for (i = 0; i < n-1; i++) {
2
min_idx = i;
for (j = i+1; j < n; j++)
if (carti[j].anul_editarii <
carti[min_idx].anul_editarii)
min_idx = j;
temp = carti[min_idx];
carti[min_idx] = carti[i];
carti[i] = temp;
}
}

void quickSort(Carte* carti, int low, int high) {


if (low < high) {
Carte pivot = carti[high];
int i = (low - 1);
Carte temp;
for (int j = low; j <= high - 1; j++) {
if (strcmp(carti[j].nume_autor, pivot.nume_autor) >
0) {
i++;
temp = carti[i];
carti[i] = carti[j];
carti[j] = temp;
}
}
temp = carti[i + 1];
carti[i + 1] = carti[high];
carti[high] = temp;
int pi = i + 1;
quickSort(carti, low, pi - 1);
quickSort(carti, pi + 1, high);
}
}

int main() {
3
FILE *fptr;
Carte carti[100];
int n;

fptr = fopen("experiment.txt", "w");


if (fptr == NULL) {
printf("Eroare la deschiderea fisierului!\n");
exit(1);
}

printf("Introduceti numarul de carti:\n");


scanf("%d", &n);

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


printf("Introduceti numele autorului, titlul cartii,
editura, anul editarii si numarul de inregistrare pentru cartea
%d:\n", i+1);
scanf("%s %s %s %d %d", carti[i].nume_autor,
carti[i].titlul_cartei, carti[i].editura,
&carti[i].anul_editarii, &carti[i].nr_inregistrare);
fprintf(fptr, "%s %s %s %d %d\n", carti[i].nume_autor,
carti[i].titlul_cartei, carti[i].editura,
carti[i].anul_editarii, carti[i].nr_inregistrare);
}

fclose(fptr);

// Afisarea datelor
for (int i = 0; i < n; i++)
printf("Datele introduse sunt: %s %s %s %d %d\n",
carti[i].nume_autor, carti[i].titlul_cartei, carti[i].editura,
carti[i].anul_editarii, carti[i].nr_inregistrare);

// Sortare prin selectie


selectionSort(carti, n);
4
fptr = fopen("Selection-exp.txt", "w");
for (int i = 0; i < n; i++)
fprintf(fptr, "%s %s %s %d %d\n", carti[i].nume_autor,
carti[i].titlul_cartei, carti[i].editura,
carti[i].anul_editarii, carti[i].nr_inregistrare);
fclose(fptr);

// Sortare rapida
quickSort(carti, 0, n - 1);

fptr = fopen("Quick-exp.txt", "w");


for (int i = 0; i < n; i++)
fprintf(fptr, "%s %s %s %d %d\n", carti[i].nume_autor,
carti[i].titlul_cartei, carti[i].editura,
carti[i].anul_editarii, carti[i].nr_inregistrare);
fclose(fptr);

return 0;
}

5
6

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