Explorați Cărți electronice
Categorii
Explorați Cărți audio
Categorii
Explorați Reviste
Categorii
Explorați Documente
Categorii
typedef struct{int nr; char nume[30]; int an; int grupa; int n;
int note[15]; }Student;
void main()
{FILE *f,*g;
char s1[20];
Student s;
int i,n;
printf("\nFisier: ");gets(s1);
if(!(f=fopen(s1,"rb")))printf("\nFisierul %s nu poate fi
deschis",s1);
else{printf("\nFisier rezultat (text): ");gets(s1);
g=fopen(s1,"w");
fprintf(g,"\nNr. Nume %25s An Grupa Note"," ");
freadb(s,f);n=0; //citesc primul student din fisierul binar
while(!feof(f)) //cat timp nu am parcurs tot fisierul binar, afisez
datele studentului in fisierul text
{fprintf(g,"\n%3d %-30s %2d %4d ",++n,s.nume,s.an,s.grupa);
for(i=0;i<s.n;i++)
fprintf(g,"%2d ",s.note[i]);
freadb(s,f); //citesc urmatorul student din fisierul binar
}
fclose(g);
fclose(f);}}
iv. Sa se scrie programul care afiseaza datele despre studentii ale
caror numere matricole se introduc de la tastatura. Sfrsitul
introducerii este marcat standard.
#include<stdio.h>
#define fwriteb(x,f) fwrite(&(x),sizeof(Student),1,(f)) //se
defineste scrierea unui articol intr-un fisier binar
#define freadb(x,f) fread(&(x),sizeof(Student),1,(f)) //se
defineste citirea unui articol dintr-un fisier binar
typedef struct{int nr; char nume[30]; int an; int grupa; int n; int
note[15]; }Student;
void main()
{FILE *f,*g;
char s1[20];
Student s;
int i,n,j;
printf("\nFisier: ");gets(s1);
if(!(f=fopen(s1,"rb")))printf("\nFisierul %s nu poate fi deschis",
s1);
else{printf("\nNr. Matricol: ");
scanf("%d",&n); //citesc un nr matricol
while(!feof(stdin))
{rewind(f); //ma pozitionez la inceputul fisierului
freadb(s,f);i=0; //citesc un student
while((!feof(f))&&(!i)) //cat timp nu am ajuns la sfarsitul
fisierului si nu am gasit studentul cautat (i=0)
{if(n==s.nr)
{i=1;
printf("\nNr.mat:%3d Nume: %-30s An: %2d Grupa:
%4d\nNote: ", s.nr,s.nume,s.an,s.grupa);
for(j=0;j<s.n;j++)
printf("%2d ",s.note[j]);}
freadb(s,f);} //citesc urmatorul student
if(!i)printf("\nNu a fost gasit."); //daca i=0 => nu a fost gasit
studentul cu nr matricol citit
printf("\nNr. matricol: ");
scanf("%d",&n);}
fclose(f);}}
if(s.an!=an)freadb(s,f);
else{m=0;n=0;
while((s.an==ca)&&(!feof(f)))
{mg=0;n1=0;
cg=s.grupa;
while((cg==s.grupa)&&(ca==s.an)&&(!feof(f)))
{mg+=s.note[2];
n1++;
freadb(s,f);}
mg=mg/n1;
printf("\nGrupa %d, media: %5.2f",cg,mg);
m+=mg;n+=n1;}
printf("\nMedia anului %d este: %5.2f",an,m/n);
e=0;}}
fclose(f);}}
x. Sa se scrie programul care listeaza, ntr-un fisier text, studentii
integralisti, pe ani si grupe, calculnd media fiecarei grupe si a
fiecarui an.
#include<stdio.h>
#define fwriteb(x,f) fwrite(&(x),sizeof(Student),1,(f)) //se
defineste scrierea unui articol intr-un fisier binar
#define freadb(x,f) fread(&(x),sizeof(Student),1,(f)) //se
defineste citirea unui articol dintr-un fisier binar
typedef struct{int nr; char nume[30]; int an; int grupa; int n; int
note[15]; }Student;
void main()
{FILE *f,*g; char s1[20]; Student s; int i,na,j,e,ng,ca,cg;
float ma,mg,ms;
printf("\nFisier: ");gets(s1);
if(!(f=fopen(s1,"rb")))printf("\nFisierul %s nu poate fi
deschis",s1);
else {printf("\nFisier text: ");gets(s1);
g=fopen(s1,"w");
freadb(s,f);
while(!feof(f))
{ca=s.an;
fprintf(g,"\n\nAnul %d",ca);
ma=0;na=0;
while((s.an==ca)&&(!feof(f)))
{mg=0;ng=0;
cg=s.grupa;
fprintf(g,"\n\tGrupa %d",cg);
while((cg==s.grupa)&&(ca==s.an)&&(!feof(f)))
{e=1;ms=0;
for(j=0;j<s.n;j++)
if(s.note[j]<5)e=0;
else ms+=s.note[j];
if(e){mg+=ms/s.n;
ng++;
fprintf(g,"\n\t\t%4d %-30s Media %5.2f Note: ",
s.nr,s.nume,ms/s.n);
for(j=0;j<s.n;j++)fprintf(g,"%2d ",s.note[j]);}
freadb(s,f);}
if(ng){mg=mg/ng;
fprintf(g,"\n\tGrupa %d, media: %5.2f",cg,mg);
ma+=mg;na+=ng;}
else fprintf(g,"\n\Grupa nu are integralisti");}
if(na)fprintf(g,"\nMedia anului %d este: %5.2f",ca,ma/na);
else fprintf(g,"\nAnul nu are integralisti");}
fclose(f);}}
#
void main()
{FILE *f; char s1[20],materie[]="Filosofie"; Student s; int
i,n,j,e,nota=2;
printf("\nFisier: ");gets(s1);
if(!(f=fopen(s1,"rb+")))printf("\nFisierul %s nu poate fi
deschis",s1);
else{printf("\nNr. grupei: ");
scanf("%d",&n);
while(!feof(stdin))
Lucrul cu fisiere
{rewind(f);
freadb(s,f);
i=0;
while(!feof(f))
{if(n==s.grupa)
{i=1;
s.note[nota]=s.note[nota]+(s.note[nota]<10);
fseek(f,ftell(f)-sizeof(Student),SEEK_SET);
fwriteb(s,f); fseek(f,0,1);}
freadb(s,f);}
if(!i) printf("\n Nu a fost gasit nici un student");
printf("\nNr grupei: ");scanf("%d",&n);}
fclose(f);}}
xiv. Sa se scrie programul care modifica o nota pentru studentii
ale caror numere matricole se introduc de la tastatura. De la
tastatura se va introduce numarul notei care se modifica (de
exemplu, pentru filosofie se va introduce 3).
#
void main()
{FILE *f;char s1[20];Student s;int i,n,j,e,nota=2;
printf("\nFisier: ");gets(s1);
if(!(f=fopen(s1,"rb+")))printf("\nFisierul %s nu poate fi
deschis",s1);
else{printf("\nNr. matricol: ");
scanf("%d",&n);
while(!feof(stdin))
{rewind(f);
freadb(s,f);
i=0;
while(!feof(f))
{if(n==s.nr)
{i=1;
printf("\n %4d %-30s Nota la %s: %2d",s.nr,s.nume, materie,
s.note[nota]);
printf("\n Noua nota(sau 0):");
scanf("%d",&j);
if(j){s.note[nota]=j;
fseek(f,ftell(f)-sizeof(Student),SEEK_SET);
fwriteb(s,f);}
}
freadb(s,f);}
if(!i) printf("\n Nu a fost gasit studentul");
printf("\nNr matricol: ");scanf("%d",&n);}
fclose(f);}
}