You are on page 1of 4

#include <stdlib.

h>
#include <stdio.h>
#include <iostream>
#include <conio.h>

typedef struct ///articolul


{
int nr_mat, grupa, pct_scris, pct_teme[10], pct_examen;
int is;
} student;

void formare(FILE *f, int a, int b) ///formez fisierul de la a la b


{
int i;
student s;
s.is = 0;
fseek(f, a * sizeof(s), 0);
for (i = a; i <= b; i++)
fwrite(&s, sizeof(s), 1, f);
}

int det_nr_art(FILE *f) ///determin cate articole are fisierul la un


moment dat
{
fseek(f, 0, 2);
return ftell(f) / sizeof(student);
}

void main()
{
FILE *f;
student s;
int nr_art, i;
fopen_s(&f, "stud.bin", "w+b"); ///creez fisierul;
scanf_s("%i", &s.nr_mat); ///citesc un nr mat initial

formare(f, 0, s.nr_mat - 1); ///formez fisierul de la 0 la nr id


initial

s.is = 1;
scanf_s("%i", &s.grupa); ///citesc grupa si toate celelalte pt
student
scanf_s("%i", &s.pct_scris);

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


scanf_s("%i", &s.pct_teme[i]);

scanf_s("%i", &s.pct_examen);

fseek(f, s.nr_mat * sizeof(s), 0);


fwrite(&s, sizeof(s), 1, f); ///scriu articolul

scanf_s("%i", &s.nr_mat); ///citesc alt nr mat

while (s.nr_mat != -1)


{
nr_art = det_nr_art(f); ///determin daca nr mat citit este in
fisier sau dupa el
if (s.nr_mat > nr_art)
{
formare(f, nr_art, s.nr_mat - 1);
s.is = 1;

scanf_s("%i", &s.grupa); ///citesc grupa si toate


celelalte pt student
scanf_s("%i", &s.pct_scris);

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


scanf_s("%i", &s.pct_teme[i]);

scanf_s("%i", &s.pct_examen);

fseek(f, s.nr_mat * sizeof(s), 0);


fwrite(&s, sizeof(s), 1, f);
}

else
{
fseek(f, s.nr_mat * sizeof(s), 0);
fread(&s, sizeof(s), 1, f);
if (s.is == 1) printf("Element existent");
else
{
s.is = 1;

scanf_s("%i", &s.grupa); ///citesc grupa si toate


celelalte pt student
scanf_s("%i", &s.pct_scris);

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


scanf_s("%i", &s.pct_teme[i]);

scanf_s("%i", &s.pct_examen);

fseek(f, s.nr_mat * sizeof(s), 0);


fwrite(&s, sizeof(s), 1, f);
}
}

scanf_s("%i", &s.nr_mat);
}

fclose(f);

fopen_s(&f, "stud.bin", "r+b");

/*
student x;
int pct_teme_stud;

fread(&x, sizeof(x), 1, f);


while (!feof(f))
{
if (x.is == 1)
{
printf("Studentul cu nr_mat %i ", x.nr_mat);
printf(" din grupa %i ", x.grupa);
printf(" are la proba practica %i puncte ", x.pct_scris);
pct_teme_stud = 0;

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


pct_teme_stud += x.pct_teme[i];

printf(" si %i puncte la teme, ", pct_teme_stud);


printf(" %i puncte la examen.", x.pct_examen);
printf("\n");

}
fread(&x, sizeof(x), 1, f);
}

*/

student x;
int pct_teme_stud;
int v[100]; //vectorul cu studentii cu p maxime la teme
int k = 0; //cati studenti au p maxime la un moment dat
int maxp=-1;

fread(&x, sizeof(x), 1, f);


while (!feof(f))
{
if (x.is == 1)
{
pct_teme_stud = 0;

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


pct_teme_stud += x.pct_teme[i];

if (pct_teme_stud > maxp)


{
k=1;
v[k] = x.nr_mat;
maxp = pct_teme_stud;
}
else if (pct_teme_stud == maxp)
{
k++;
v[k] = x.nr_mat;
}
}
fread(&x, sizeof(x), 1, f);
}

for (i = 1; i <= k; i++)


{
fseek(f, v[i] * sizeof(x), 0);
fread(&x, sizeof(x), 1, f);
printf("Studentul cu nr_mat %i ", x.nr_mat);
printf(" din grupa %i ", x.grupa);
printf(" are la proba practica %i puncte ", x.pct_scris);

printf(" si %i puncte la teme, ", maxp);


printf(" %i puncte la examen.", x.pct_examen);
printf("\n");
}

_getch();

You might also like