Structuri in C++ (Partea a III-a)

5 februarie

Acest al treilea tutorial despre structuri in c++ este destul de complex. Va recomand sa intelegeti mai intai foarte bine primele doua tutoriale din aceasta serie. Pana acum am citit datele unor elevi: numele, prenumele si media. Acum va voi explica metoda de sortare a acestor elevi dupa media lor. Codul sursa este urmatorul:

#include <stdio.h>
#include <conio.h>
// Declaram structura ELEV
typedef struct
{
char nume[50];
char prenume[50];
int medie;
}ELEV;
// Functia de sortare
void sortare(ELEV elem[], int m)
{
// Declararea variabilelor
int i, j;
ELEV t;
// Sortarea structurilor
for (i=0; i<(m-1); i++)
for (j=i+1; j elem[j].medie)
{
t = elem[i];
elem[i] = elem[j];
elem[j] = t;
}
}
void main()
{
// Declararea variabilelor
ELEV element[50];
FILE *f;
int i, j, n;
// Pregatirea fisierului binar pentru scriere
if((f=fopen("struct_elev.mzk","wb")) == NULL)
{
printf("Fisierul nu poate fi deschis");
exit(1);
}
// Citirea datelor de la tastatura
printf("Intruduceti numarul de structuri ce vor fi introduse: ");
scanf("%d", &n);
for (i=0; i<n; i++)
{
printf("Introduceti numele elevului: ");
scanf("%s", element[i].nume);
printf("Introduceti prenumele elevului: ");
scanf("%s", element[i].prenume);
printf("Introduceti media acestuia: ");
scanf("%d", &element[i].medie);
// Introducerea structurilor in fisierul binar
fwrite(&element[i], sizeof(element[i]), 1, f);
}
fclose(f);
// Pregatirea fisierului binar pentru citire
f = fopen("struct_elev.mzk", "rb");
// Aflarea numarului de structuri din fisier
fseek(f, 0L, 2);
n = ftell(f)/sizeof(ELEV);
fseek(f, 0L, 0);
// Citirea structurilor din fisier si afisarea lor
printf("Structurile nesortate: ");
for (i=0; i<n; i++)
{
fread(&element[i], sizeof(element[i]), 1, f);
printf("%s %s, %d.n", element[i].nume, element[i].prenume, element[i].medie);
}
fclose(f);
printf("n");
// Sortarea structurilor
sortare(element, n);
// Afisarea structurilor sortate
printf("Structurile sortate: ");
for (i=0; i<n; i++)
{
printf("%s %s, media %dn", element[i].nume, element[i].prenume, element[i].medie);
}
getch();
}


Nu trebuie sa va speriati de marimea acestui program. Repet, daca ati inteles Structuri in C++ (Part II) veti recunoaste cea mai mare parte din program. Mica diferenta o vom explica imediat.

Dupa cum probabil deja ati observat, nu mai lucram cu o singura structura, ci cu un vector de structuri. Acest lucru ne usureaza viata incredibil de mult in procesul de sortare. Un vector de structuri se declara astfel:

ELEV element[50];

Dupa cum vedeti, nu este foarte complicat. La citirea si afisarea structurilor, singura diferenta este ca am mentionat care element al vectorului il utilizam:

printf("Introduceti numele elevului: ");
scanf("%s", element[i].nume);

Pentru sortare, am creeat la inceputul programului o functie. Aceasta are ca parametru un vector de structuri si numarul de structuri:

void sortare(ELEV elem[], int m)
{
// Declararea variabilelor
int i, j;
ELEV t;
// Sortarea structurilor
for (i=0; i<(m-1); i++)
for (j=i+1; j elem[j].medie)
{
t = elem[i];
elem[i] = elem[j];
elem[j] = t;
}
}

Metoda de sortare este una simpla, utilizata si in Cum sa ordonezi un vector in C++ doar ca elementele sortate sunt de tipul unei structuri.

Cu putina atentie veti observa ca nu este foarte greu. Mult succes si spor la treaba!



Ti-a placut articolul Structuri in C++ (Partea a III-a)?

Ai nevoie de rezolvarea unei probleme la informatica?

Iti recomandam si urmatoarele articole:

Discuta articolul Structuri in C++ (Partea a III-a)



Contul tau

Categorii

Mozku Network

Ne gasesti si pe Facebook

Articole noi

Fisiere populare

  • Proiect Atestat Informatica Visual FoxPro (439)
  • Twitter Patterns (202)
  • Flash Newsletter (126)
  • hitTest Flash (99)
  • Baza de date auto revizuita (98)

Marcaje articole