Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #define NR 10
- typedef struct
- {
- char prenume[NR];
- char sex;
- float nota;
- }STUD;
- void ordonare_prenume(STUD tablou[], int n)
- {
- int i, j;
- STUD aux;
- for(i = 0; i < n - 1; i++)
- for(j = i + 1; j < n; j++)
- if(strcmp(tablou[i].prenume,tablou[j].prenume) == -1)
- {
- aux = tablou[i];
- tablou[i] = tablou[j];
- tablou[j] = aux;
- }
- }
- void ordonare_nota(STUD tablou[],int n)
- {
- int i, j;
- STUD aux;
- for(i = 0; i < n - 1; i++)
- for(j = i + 1; j < n; j++)
- if(tablou[i].nota - tablou[j].nota > 0.01)
- {
- aux = tablou[i];
- tablou[i] = tablou[j];
- tablou[j] = aux;
- }
- }
- void afisare(STUD tablou[],int n)
- {
- int i;
- for(i = 0; i < n; i++)
- {
- printf("\n Preumele este %s",tablou[i].prenume);
- printf("\n Sexul este %c",tablou[i].sex);
- printf("\n Nota este %.3f",tablou[i].nota);
- }
- }
- int main(void)
- {
- FILE *f, *f1, *f2;
- int i, n, optiune, nr_baieti = 0, nr_fete = 0;
- STUD student, *retinere_inf, *retinere_inf_fete, *retinere_inf_baieti;
- // Generarea unui fisier binar pentru a scrie informatii in el
- /*
- if((f = fopen("Ex1.dat","wb")) == NULL)
- {
- printf("Eroare");
- exit(1);
- }
- printf("Cate informatii doriti sa adaugati in fisier ? ( <10 )");
- scanf("%d",&n); // numarul de informatii
- fflush(stdin);
- // Scrierea a "n" persoane in fisier
- for(i = 0; i < n; i++)
- {
- puts("\nPrenumele : max. 10 caractere");
- gets(student.prenume);
- puts("\nSexul : f - fata, b -baiat");
- scanf("%c",&student.sex);
- puts("\nNota : (>1) ");
- scanf("%f",&student.nota);
- fflush(stdin);
- fwrite(&student,sizeof(STUD),1,f);
- }
- fclose(f);
- */
- // Citirea inf din fisier si retinerea lor intr-un vector
- if((f = fopen("Ex1.dat","rb")) == NULL)
- {
- printf("Eroare");
- exit(1);
- }
- fseek(f,0L,SEEK_END);
- n = ftell(f)/sizeof(student);
- fseek(f,0L,SEEK_SET);
- retinere_inf = (STUD *)malloc(n*sizeof(STUD));
- for(i = 0; i < n; i++)
- {
- fread(&student,sizeof(STUD),1,f);
- retinere_inf[i] = student;
- }
- fclose(f);
- if((f1 = fopen("Fete.dat","wb")) == NULL)
- {
- printf("Eroare");
- exit(1);
- }
- if((f2 = fopen("Baieti.dat","wb")) == NULL)
- {
- printf("Eroare");
- exit(1);
- }
- for(i = 0; i < n; i++)
- {
- printf("%2s %2c %.2f\n", retinere_inf[i].prenume, retinere_inf[i].sex, retinere_inf[i].nota);
- if(retinere_inf[i].sex == 'f')
- fwrite(&retinere_inf[i],sizeof(STUD),1,f1); // Retinem in fisierul de fete
- else fwrite(&retinere_inf[i],sizeof(STUD),1,f2); // Retinem in fisierul de baieti
- }
- fclose(f1);
- fclose(f2);
- if((f2 = fopen("Baieti.dat","rb")) == NULL)
- {
- printf("Eroare");
- exit(1);
- }
- if((f1 = fopen("Fete.dat","rb")) == NULL)
- {
- printf("Eroare");
- exit(1);
- }
- fseek(f2,0L,SEEK_END);
- nr_baieti = ftell(f2)/sizeof(STUD);
- fseek(f2,0L,SEEK_SET);
- nr_fete = n - nr_baieti;
- retinere_inf_baieti = (STUD*)malloc(nr_baieti*sizeof(STUD));
- retinere_inf_fete = (STUD*)malloc(nr_fete*sizeof(STUD));
- for(i = 0; i < nr_fete; i++)
- {
- fread(&student,sizeof(STUD),1,f1);
- retinere_inf_fete[i] = student;
- }
- for(i = 0; i < nr_baieti; i++)
- {
- fread(&student,sizeof(STUD),1,f2);
- retinere_inf_baieti[i] = student;
- }
- fclose(f1);
- fclose(f2);
- free(retinere_inf);
- // Ordonarea dupa prenume a inf din fisierul baietilor
- ordonare_prenume(retinere_inf_baieti,nr_baieti);
- puts("Afisare baieti : ");
- afisare(retinere_inf_baieti,nr_baieti);
- puts("\n***\t***");
- puts("\nAfisare fete : ");
- ordonare_nota(retinere_inf_fete,nr_fete);
- afisare(retinere_inf_fete,nr_fete);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement