0% au considerat acest document util (0 voturi)
25 vizualizări5 pagini

New Text Document

Documentul conține un program C care gestionează un tablou de structuri pentru produse, permițând citirea, afișarea, căutarea, sortarea, inserarea și ștergerea produselor. Programul utilizează atât alocare statică, cât și dinamică a memoriei pentru gestionarea produselor. Funcțiile sunt bine definite și includ manipularea datelor utilizatorului printr-un meniu interactiv.

Încărcat de

Laurențiu M
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca TXT, PDF, TXT sau citiți online pe Scribd
0% au considerat acest document util (0 voturi)
25 vizualizări5 pagini

New Text Document

Documentul conține un program C care gestionează un tablou de structuri pentru produse, permițând citirea, afișarea, căutarea, sortarea, inserarea și ștergerea produselor. Programul utilizează atât alocare statică, cât și dinamică a memoriei pentru gestionarea produselor. Funcțiile sunt bine definite și includ manipularea datelor utilizatorului printr-un meniu interactiv.

Încărcat de

Laurențiu M
Drepturi de autor
© All Rights Reserved
Respectăm cu strictețe drepturile privind conținutul. Dacă suspectați că acesta este conținutul dumneavoastră, reclamați-l aici.
Formate disponibile
Descărcați ca TXT, PDF, TXT sau citiți online pe Scribd

// 1.

Să se elaboreze un program ce va aloca static un tablou unidimensional de


structuri și va realiza următoarele funcții:
// citirea de la tastatură a elementelor tabloului;
// afișarea la consolă a elementelor tabloului;
// căutarea unui element după o valoare a unui cîmp din structură și returnarea
poziției unde se află primul element găsit.

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

#define MAX_SIZE 100

// Definirea structurii
typedef struct {
int id;
char nume[50];
float pret;
} Produs;

// Funcția pentru citirea elementelor tabloului


void citesteProduse(Produs produse[], int n) {
for (int i = 0; i < n; i++) {
printf("Introduceti datele pentru produsul %d:\n", i + 1);
printf("ID: ");
scanf("%d", &produse[i].id);
printf("Nume: ");
scanf("%s", produse[i].nume);
printf("Pret: ");
scanf("%f", &produse[i].pret);
}
}

// Funcția pentru afișarea elementelor tabloului


void afiseazaProduse(Produs produse[], int n) {
printf("\nProdusele introduse sunt:\n");
for (int i = 0; i < n; i++) {
printf("Produs %d: ID = %d, Nume = %s, Pret = %.2f\n", i + 1,
produse[i].id, produse[i].nume, produse[i].pret);
}
}

// Funcția pentru căutarea unui element după valoarea unui câmp


int cautaDupaNume(Produs produse[], int n, const char *nume) {
for (int i = 0; i < n; i++) {
if (strcmp(produse[i].nume, nume) == 0) {
return i; // Returnează poziția primului element găsit
}
}
return -1; // Returnează -1 dacă nu s-a găsit niciun element
}

int main() {
Produs produse[MAX_SIZE];
int n;

printf("Introduceti numarul de produse: ");


scanf("%d", &n);

if (n > MAX_SIZE) {
printf("Numarul de produse depaseste dimensiunea maxima.\n");
return 1;
}

citesteProduse(produse, n);
afiseazaProduse(produse, n);

char numeCautat[50];
printf("\nIntroduceti numele produsului cautat: ");
scanf("%s", numeCautat);

int pozitie = cautaDupaNume(produse, n, numeCautat);


if (pozitie != -1) {
printf("Produsul cu numele \"%s\" a fost gasit la pozitia %d.\n",
numeCautat, pozitie + 1);
} else { printf("Produsul cu numele \"%s\" nu a fost gasit.\n", numeCautat); }

return 0;
}

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

// Definirea structurii
typedef struct {
int id;
char nume[50];
float pret;
} Produs;

// Funcție pentru citirea unui singur produs


void citesteUnProdus(Produs *produs) {
printf("Introduceti datele pentru noul produs:\n");
printf("ID: ");
scanf("%d", &produs->id);
printf("Nume: ");
while ((getchar())!= '\n' && getchar()!= EOF); // Curăță bufferul pentru a
preveni probleme la fgets
fgets(produs->nume, sizeof(produs->nume), stdin);
produs->nume[strcspn(produs->nume, "\n")] = '\0'; // Elimină '\n'
printf("Pret: ");
scanf("%f", &produs->pret);
}

// Funcția pentru citirea produselor


Produs* citesteProduse(int *n) {
printf("Introduceti numarul de produse: ");
scanf("%d", n);
Produs *produse = (Produs*)malloc(*n * sizeof(Produs));
if (!produse) {
printf("Eroare la alocarea memoriei!\n");
exit(1);
}

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


printf("Produs %d:\n", i + 1);
citesteUnProdus(&produse[i]);
}
return produse;
}

// Funcția pentru afișarea produselor


void afiseazaProduse(Produs *produse, int n) {
printf("\nProdusele sunt:\n");
for (int i = 0; i < n; i++) {
printf("Produs %d: ID = %d, Nume = %s, Pret = %.2f\n", i + 1,
produse[i].id, produse[i].nume, produse[i].pret);
}
}

// Funcția pentru căutarea unui produs după nume


int cautaDupaNume(Produs *produse, int n, const char *nume) {
for (int i = 0; i < n; i++) {
if (strcmp(produse[i].nume, nume) == 0) {
return i;
}
}
return -1;
}

// Funcția de comparare pentru sortare


int comparaProduse(const void *a, const void *b) {
return ((Produs*)a)->pret > ((Produs*)b)->pret ? 1 : -1;
}

// Funcția de sortare
void sorteazaDupaPret(Produs *produse, int n) {
qsort(produse, n, sizeof(Produs), comparaProduse);
}

// Funcția generală pentru inserare la orice poziție


Produs* insereazaProdus(Produs *produse, int *n, int pozitie) {
if (pozitie < 0 || pozitie > *n) {
printf("Pozitie invalida!\n");
return produse;
}

Produs *temp = (Produs*)realloc(produse, (*n + 1) * sizeof(Produs));


if (!temp) {
printf("Eroare la realocare!\n");
return produse;
}
produse = temp;

for (int i = *n; i > pozitie; i--) {


produse[i] = produse[i - 1];
}
citesteUnProdus(&produse[pozitie]);
(*n)++;
return produse;
}

// Funcția pentru ștergerea unui element de pe o poziție X


Produs* stergeDeLaPozitie(Produs *produse, int *n, int pozitie) {
if (pozitie < 0 || pozitie >= *n) {
printf("Pozitie invalida!\n");
return produse;
}

for (int i = pozitie; i < *n - 1; i++) {


produse[i] = produse[i + 1];
}

Produs *temp = (Produs*)realloc(produse, (*n - 1) * sizeof(Produs));


if (!temp && *n - 1 > 0) {
printf("Eroare la realocare!\n");
return produse;
}

produse = temp;
(*n)--;
return produse;
}

// Funcția pentru eliberarea memoriei


void elibereazaMemorie(Produs **produse) {
free(*produse);
*produse = NULL;
}

// Funcția pentru afișarea meniului


void afiseazaMeniu() {
printf("\n--- Meniu ---\n");
printf("1. Citeste produse\n");
printf("2. Afiseaza produse\n");
printf("3. Cauta produs dupa nume\n");
printf("4. Sorteaza produse dupa pret\n");
printf("5. Inserare produs la sfarsit\n");
printf("6. Inserare produs la inceput\n");
printf("7. Inserare produs la pozitie X\n");
printf("8. Sterge produs de la pozitie X\n");
printf("9. Iesire\n");
}

int main() {
Produs *produse = NULL;
int n = 0, optiune, pozitie;
char numeCautat[50];

do {
afiseazaMeniu();
printf("Introduceti optiunea: ");
scanf("%d", &optiune);

switch (optiune) {
case 1:
produse = citesteProduse(&n);
break;
case 2:
afiseazaProduse(produse, n);
break;
case 3:
printf("Introduceti numele produsului cautat: ");
while ((getchar())!= '\n' && getchar()!= EOF); // Curăță bufferul
fgets(numeCautat, sizeof(numeCautat), stdin);
numeCautat[strcspn(numeCautat, "\n")] = '\0';
pozitie = cautaDupaNume(produse, n, numeCautat);
if (pozitie != -1) {
printf("Produsul \"%s\" a fost gasit la pozitia %d.\n",
numeCautat, pozitie + 1);
} else {
printf("Produsul \"%s\" nu a fost gasit.\n", numeCautat);
}
break;
case 4:
sorteazaDupaPret(produse, n);
printf("Produsele au fost sortate dupa pret.\n");
break;
case 5:
produse = insereazaProdus(produse, &n, n);
break;
case 6:
produse = insereazaProdus(produse, &n, 0);
break;
case 7:
printf("Introduceti pozitia pentru inserare: ");
scanf("%d", &pozitie);
produse = insereazaProdus(produse, &n, pozitie);
break;
case 8:
printf("Introduceti pozitia pentru stergere: ");
scanf("%d", &pozitie);
produse = stergeDeLaPozitie(produse, &n, pozitie);
break;
case 9:
elibereazaMemorie(&produse);
printf("Memorie eliberata. Iesire...\n");
break;
default:
printf("Optiune invalida!\n");
}
} while (optiune != 9);

return 0;
}

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