Sie sind auf Seite 1von 5

i.

Sa se scrie programul care creeaza un fisier secvential cu date #define freadb(x,f) fread(&(x),sizeof(Student),1,(f)) //se
despre studentii unei facultati. Articolele au urmatoarea defineste citirea unui articol dintr-un fisier binar
structura: numar matricol, nume, anul, grupa, numarul de note, typedef struct{int nr; char nume[30]; int an; int grupa; int n;
notele (maxim 15). Datele se preiau de la tastatura, sfîrsitul int note[15]; }Student;
introducerii fiind marcat standard. Nota necunoscuta=0; void main()
{FILE *f,*g;
#include<stdio.h> char s1[20];
typedef struct{int nr; char nume[30]; int an; int grupa; int n; int Student s;
note[15];}Student; int i,n;
printf("\nFisier: ");gets(s1);
void main() if(!(f=fopen(s1,"rb")))printf("\nFisierul %s nu poate fi
{FILE *f; char s1[20]; Student s; int i; deschis",s1);
printf("\nFisier: ");gets(s1); else{printf("\nFisier rezultat (text): ");gets(s1);
f=fopen(s1,"wb"); g=fopen(s1,"w");
printf("Nr.matricol: ");scanf("%d",&s.nr); fprintf(g,"\nNr. Nume %25s An Grupa Note"," ");
while(!feof(stdin)) freadb(s,f);n=0; //citesc primul student din fisierul binar
{printf("Nume: ");fflush(stdin);gets(s.nume); while(!feof(f)) //cat timp nu am parcurs tot fisierul binar, afisez
//inainte de citirea unui character sau a unui sir de caractere se datele studentului in fisierul text
face golirea zonei tampon de intrare: fflush(stdin) {fprintf(g,"\n%3d %-30s %2d %4d ",++n,s.nume,s.an,s.grupa);
printf("An: ");scanf("%d",&s.an); for(i=0;i<s.n;i++)
printf("Grupa: ");scanf("%d",&s.grupa); fprintf(g,"%2d ",s.note[i]);
printf("Nr.note:(<15)");scanf("%d",&s.n); freadb(s,f); //citesc urmatorul student din fisierul binar
for(i=0;i<s.n;i++) }
{printf("Nota %d: ",i+1); fclose(g);
scanf("%d",&s.note[i]);} fclose(f);}}
fwrite(&s,sizeof(Student),1,f);
printf("Nr.matricol: ");scanf("%d",&s.nr);} iv. Sa se scrie programul care afiseaza datele despre studentii ale
fclose(f);} caror numere matricole se introduc de la tastatura. Sfîrsitul
introducerii este marcat standard.
ii. Sa se scrie programul care adauga noi studenti în fisierul creat
la problema anterioara. Datele se preiau de la tastatura, sfîrsitul #include<stdio.h>
introducerii fiind marcat standard. #define fwriteb(x,f) fwrite(&(x),sizeof(Student),1,(f)) //se
#include<stdio.h> defineste scrierea unui articol intr-un fisier binar
typedef struct{int nr; char nume[30]; int an; int grupa; int n; int #define freadb(x,f) fread(&(x),sizeof(Student),1,(f)) //se
note[15]; }Student; defineste citirea unui articol dintr-un fisier binar
void main() typedef struct{int nr; char nume[30]; int an; int grupa; int n; int
{FILE *f; char s1[20]; Student s; int i; note[15]; }Student;
printf("\nFisier: ");gets(s1);
f=fopen(s1,"rb+"); //deschidem fisierul pt citire si scriere in el, pt void main()
a nu pierde datele existente {FILE *f,*g;
fseek(f,0,SEEK_END); //adaugarea intr-un fisier organizat char s1[20];
secvential se face la sfarsitul fisierului Student s;
printf("Nr.matricol: ");scanf("%d",&s.nr); int i,n,j;
while(!feof(stdin)) printf("\nFisier: ");gets(s1);
{printf("Nume: ");fflush(stdin);gets(s.nume); if(!(f=fopen(s1,"rb")))printf("\nFisierul %s nu poate fi deschis",
printf("An: ");scanf("%d",&s.an); s1);
printf("Grupa: ");scanf("%d",&s.grupa); else{printf("\nNr. Matricol: ");
printf("Nr.note:(<15)");scanf("%d",&s.n); scanf("%d",&n); //citesc un nr matricol
for(i=0;i<s.n;i++) while(!feof(stdin))
{printf("Nota %d: ",i+1); {rewind(f); //ma pozitionez la inceputul fisierului
scanf("%d",&s.note[i]);} freadb(s,f);i=0; //citesc un student
fwrite(&s,sizeof(Student),1,f); while((!feof(f))&&(!i)) //cat timp nu am ajuns la sfarsitul
printf("Nr.matricol: ");scanf("%d",&s.nr);} fisierului si nu am gasit studentul cautat (i=0)
fclose(f);} {if(n==s.nr)
{i=1;
iii. Sa se scrie programul care listeaza, într-un fisier text, sub printf("\nNr.mat:%3d Nume: %-30s An: %2d Grupa:
forma de tabel, continutul fisierului creat la problema de la %4d\nNote: ", s.nr,s.nume,s.an,s.grupa);
punctul i. for(j=0;j<s.n;j++)
#include<stdio.h> printf("%2d ",s.note[j]);}
#define fwriteb(x,f) fwrite(&(x),sizeof(Student),1,(f)) //se freadb(s,f);} //citesc urmatorul student
defineste scrierea unui articol intr-un fisier binar if(!i)printf("\nNu a fost gasit."); //daca i=0 => nu a fost gasit
studentul cu nr matricol citit
printf("\nNr. matricol: "); fseek(f,p,0); //ma repozitionez in fisier pe pozitia curenta p
scanf("%d",&n);} return n;}
fclose(f);}}
v. Sa se scrie programul care listeaza, în fisiere text, situatia void main()
studentilor din grupele ale caror numere se introduc de la {FILE *f,*g; char s1[20]; Student s,s2;
tastatura. Sfîrsitul introducerii este marcat standard. Lucrul cu fisiere
int i,n,j;
#include<stdio.h> printf("\nFisier: ");gets(s1);
#define fwriteb(x,f) fwrite(&(x),sizeof(Student),1,(f)) //se if(!(f=fopen(s1,"rb")))printf("\nFisierul %s nu poate fi
defineste scrierea unui articol intr-un fisier binar deschis",s1);
#define freadb(x,f) fread(&(x),sizeof(Student),1,(f)) //se else{n=nrart(f,sizeof(Student));
defineste citirea unui articol dintr-un fisier binar j=1; //sortare prin interschimbare (bubble sort)
typedef struct{int nr; char nume[30]; int an; int grupa; int n; int while(j)
note[15];}Student; {j=0;
for(i=0;i<n-1;i++)
void main() {fseek(f,i*sizeof(Student),SEEK_SET);
{FILE *f,*g; char s1[20]; Student s; int i,n,j; freadb(s,f);
printf("\nFisier: ");gets(s1); freadb(s2,f);
if(!(f=fopen(s1,"rb")))printf("\nFisierul %s nu poate fi if((s.an>s2.an)||((s.an==s2.an)&&(s.grupa>s2.grupa)))
deschis",s1); {j=1;
else{printf("\nNr. grupei: "); fseek(f,i*sizeof(Student),SEEK_SET);
scanf("%d",&n); fwriteb(s2,f);
while(!feof(stdin)) fwriteb(s,f);}}}
{rewind(f); fclose(f);}}
fflush(stdin);
printf("\nFisier rezultat: ");gets(s1); vii. Sa se scrie programul care afiseaza studentii integralisti din
g=fopen(s1,"w"); grupele ale caror numere sînt introduse de la tastatura. Sfîrsitul
freadb(s,f);i=0; introducerii este marcat standard.
while(!feof(f))
{if(n==s.grupa) #include<stdio.h>
{i=1; #define fwriteb(x,f) fwrite(&(x),sizeof(Student),1,(f)) //se
fprintf(g,"\nNr.mat:%3d Nume: %-30s An: %2d Grupa: defineste scrierea unui articol intr-un fisier binar
%4d\nNote: ", s.nr,s.nume,s.an,s.grupa); #define freadb(x,f) fread(&(x),sizeof(Student),1,(f)) //se
for(j=0;j<s.n;j++) defineste citirea unui articol dintr-un fisier binar
fprintf(g,"%2d ",s.note[j]);} typedef struct{int nr; char nume[30]; int an;int grupa; int n;
freadb(s,f);} int note[15]; }Student;
if(!i)printf("\nNu a fost gasita."); void main()
printf("\nNr. grupei: "); {FILE *f,*g; char s1[20]; Student s; int i,n,j,e;
scanf("%d",&n); printf("\nFisier: ");gets(s1);
fclose(g);} if(!(f=fopen(s1,"rb")))printf("\nFisierul %s nu poate fi
fclose(f);}} deschis",s1);
else{printf("\nNr. grupei: ");
vi. Sa se scrie programul care sorteaza studentii dupa anii de scanf("%d",&n);
studiu si grupe. (vezi de exp pb ix. fisiere relative) while(!feof(stdin))
{rewind(f);
#include<stdio.h> fflush(stdin);
#define fwriteb(x,f) fwrite(&(x),sizeof(Student),1,(f)) //se freadb(s,f);
defineste scrierea unui articol intr-un fisier binar i=0;
#define freadb(x,f) fread(&(x),sizeof(Student),1,(f)) //se while(!feof(f))
defineste citirea unui articol dintr-un fisier binar {if(n==s.grupa)
{e=1;
typedef struct{int nr;char nume[30];int an;int grupa;int n;int for(j=0;j<n;j++)
note[15];}Student; if(s.note[j]<5)e=0;
//subprogram pt determinarea nr de articole dintr-un fisier binar if(e)
int nrart(FILE *f, int l) {i=1;
{long p; printf("\nNr.mat:%3d Nume: %-30s An: %2d Grupa:
int n; %4d\nNote: ", s.nr,s.nume,s.an,s.grupa);
p=ftell(f); //retin pozitia curenta in fisier for(j=0;j<s.n;j++)
fseek(f,0,2); //ma pozitionez la sfarsitul fisierului printf("%2d ",s.note[j]);}}
n=ftell(f)/l; //determin nr total de articole din fisier => freadb(s,f);}
dimensiunea totala in octeti a fisierului (returnata cu functia if(!i)printf("\nNu au fost gasiti studenti integralisti/Nu exista
ftell) o impart la dimensiunea unui articol grupa.");
printf("\nNr. grupei: "); printf("\nFisier: ");gets(s1);
scanf("%d",&n); if(!(f=fopen(s1,"rb")))printf("\nFisierul %s nu poate fi
fclose(g);} deschis",s1);
fclose(f);}} else {freadb(s,f);e=1;
while((!feof(f))&&(e))
viii. Sa se scrie programul care listeaza, într-un fisier text, {ca=s.an;
studentii integralisti cu cea mai mare medie. if(s.an!=an)freadb(s,f);
else{m=0;n=0;
#include<stdio.h> while((s.an==ca)&&(!feof(f)))
#define fwriteb(x,f) fwrite(&(x),sizeof(Student),1,(f)) //se {mg=0;n1=0;
defineste scrierea unui articol intr-un fisier binar cg=s.grupa;
#define freadb(x,f) fread(&(x),sizeof(Student),1,(f)) //se while((cg==s.grupa)&&(ca==s.an)&&(!feof(f)))
defineste citirea unui articol dintr-un fisier binar {mg+=s.note[2];
typedef struct{int nr; char nume[30]; int an; int grupa; int n; n1++;
int note[15]; }Student; freadb(s,f);}
mg=mg/n1;
void main() printf("\nGrupa %d, media: %5.2f",cg,mg);
{FILE *f,*g; char s1[20]; Student s; int i,n,j,e; float m,max; m+=mg;n+=n1;}
printf("\nFisier: ");gets(s1); printf("\nMedia anului %d este: %5.2f",an,m/n);
if(!(f=fopen(s1,"rb")))printf("\nFisierul %s nu poate fi e=0;}}
deschis",s1); fclose(f);}}
else {fflush(stdin);
printf("\nFisier rezultat: ");gets(s1); x. Sa se scrie programul care listeaza, într-un fisier text, studentii
g=fopen(s1,"w"); integralisti, pe ani si grupe, calculînd media fiecarei grupe si a
freadb(s,f); fiecarui an.
i=0; max=0;
while(!feof(f)) #include<stdio.h>
{m=0.0;e=1; #define fwriteb(x,f) fwrite(&(x),sizeof(Student),1,(f)) //se
for(j=0;j<s.n;j++) defineste scrierea unui articol intr-un fisier binar
if(s.note[j]<5)e=0; #define freadb(x,f) fread(&(x),sizeof(Student),1,(f)) //se
else m+=s.note[j]; defineste citirea unui articol dintr-un fisier binar
if(e) typedef struct{int nr; char nume[30]; int an; int grupa; int n; int
{i=1; note[15]; }Student;
m=m/s.n;
if(m>max){max=m; void main()
g=fopen(s1,"w"); {FILE *f,*g; char s1[20]; Student s; int i,na,j,e,ng,ca,cg;
fprintf(g,"\nNr.mat:%3d Nume: %-30s An: %2d Grupa: %4d float ma,mg,ms;
Media: %5.2f,s.nr,s.nume,s.an,s.grupa,max);} printf("\nFisier: ");gets(s1);
else if(m==max) if(!(f=fopen(s1,"rb")))printf("\nFisierul %s nu poate fi
fprintf(g,"\nNr.mat:%3d Nume: %-30s An: %2d Grupa: %4d deschis",s1);
Media: 5.2f",s.nr,s.nume,s.an,s.grupa,max);} else {printf("\nFisier text: ");gets(s1);
freadb(s,f);} g=fopen(s1,"w");
if(!i)printf("\nNu au fost gasiti studenti integralisti."); freadb(s,f);
fclose(g); while(!feof(f))
fclose(f);}} {ca=s.an;
ix. Sa se scrie programul care calculeaza nota medie la filosofie fprintf(g,"\n\nAnul %d",ca);
a studentilor din anul 2, pe grupe. Se stie ca nota la filosofie este ma=0;na=0;
pe pozitia a treia. Rezultatele vor fi scrise într-un fisier text. while((s.an==ca)&&(!feof(f)))
Pentru rezolvarea problemei, studentii trebuie sa fie sortati dupa {mg=0;ng=0;
ani si grupe. Se va folosi întîi programul de la problema vi. cg=s.grupa;
fprintf(g,"\n\tGrupa %d",cg);
#include<stdio.h> while((cg==s.grupa)&&(ca==s.an)&&(!feof(f)))
#define fwriteb(x,f) fwrite(&(x),sizeof(Student),1,(f)) //se {e=1;ms=0;
defineste scrierea unui articol intr-un fisier binar for(j=0;j<s.n;j++)
#define freadb(x,f) fread(&(x),sizeof(Student),1,(f)) //se if(s.note[j]<5)e=0;
defineste citirea unui articol dintr-un fisier binar else ms+=s.note[j];
typedef struct{int nr; char nume[30]; int an; int grupa; int n; int if(e){mg+=ms/s.n;
note[15];}Student; ng++;
fprintf(g,"\n\t\t%4d %-30s Media %5.2f Note: ",
void main() s.nr,s.nume,ms/s.n);
{FILE *f,*g; char s1[20]; Student s; int i,n,j,e,n1,ca,cg,an=2; for(j=0;j<s.n;j++)fprintf(g,"%2d ",s.note[j]);}
float m,mg; freadb(s,f);}
if(ng){mg=mg/ng; printf("\nNr grupei: ");scanf("%d",&n);}
fprintf(g,"\n\tGrupa %d, media: %5.2f",cg,mg); fclose(f);}}
ma+=mg;na+=ng;}
else fprintf(g,"\n\Grupa nu are integralisti");} xiii. Sa se scrie programul pentru adaugarea punctului din oficiu
if(na)fprintf(g,"\nMedia anului %d este: %5.2f",ca,ma/na); la nota la filosofie pentru studentii din grupa al carei numar este
else fprintf(g,"\nAnul nu are integralisti");} introdus de la tastatura.
fclose(f);}}
xi. Sa se scrie programul care listeaza, într-un fisier text, #
studentii cu mai mult de 2 restante. void main()
# {FILE *f; char s1[20],materie[]="Filosofie"; Student s; int
void main() i,n,j,e,nota=2;
{FILE *f,*g; char s1[20]; Student s; int i,n,j,e; float m,max; printf("\nFisier: ");gets(s1);
printf("\nFisier: ");gets(s1); if(!(f=fopen(s1,"rb+")))printf("\nFisierul %s nu poate fi
if(!(f=fopen(s1,"rb")))printf("\nFisierul %s nu poate fi deschis",s1);
deschis",s1); else{printf("\nNr. grupei: ");
else {fflush(stdin);printf("\nFisier rezultat: ");gets(s1); scanf("%d",&n);
g=fopen(s1,"w"); while(!feof(stdin))
freadb(s,f); Lucrul cu fisiere
i=0;e=0; {rewind(f);
while(!feof(f)) freadb(s,f);
{n=0; i=0;
for(i=0;i<s.n;i++) while(!feof(f))
n+=(s.note[i]<5); {if(n==s.grupa)
if(n>2) {i=1;
{e++; s.note[nota]=s.note[nota]+(s.note[nota]<10);
fprintf(g,"\n%4d %-30s an %2d grupa %2d Note:",s.nr, fseek(f,ftell(f)-sizeof(Student),SEEK_SET);
s.nume, s.an,s.grupa); fwriteb(s,f); fseek(f,0,1);}
for(i=0;i<s.n;i++) freadb(s,f);}
fprintf(g,"%2d ",s.note[i]);} if(!i) printf("\n Nu a fost gasit nici un student");
freadb(s,f);} printf("\nNr grupei: ");scanf("%d",&n);}
fprintf(g,"\nTotal: %d studenti",e); fclose(f);}}
fclose(g);
fclose(f);}} xiv. Sa se scrie programul care modifica o nota pentru studentii
ale caror numere matricole se introduc de la tastatura. De la
xii. Sa se scrie programul pentru modificarea notei la filosofie tastatura se va introduce numarul notei care se modifica (de
pentru studentii din grupa al carei numar este introdus de la exemplu, pentru filosofie se va introduce 3).
tastatura.
# #
void main() void main()
{FILE *f; char s1[20],materie[]="Filosofie"; Student s; {FILE *f;char s1[20];Student s;int i,n,j,e,nota=2;
int i,n,j,e,nota=2; printf("\nFisier: ");gets(s1);
printf("\nFisier: ");gets(s1); if(!(f=fopen(s1,"rb+")))printf("\nFisierul %s nu poate fi
if(!(f=fopen(s1,"rb+")))printf("\nFisierul %s nu poate fi deschis",s1);
deschis",s1); else{printf("\nNr. matricol: ");
else{printf("\nNr. grupei: "); scanf("%d",&n);
scanf("%d",&n); while(!feof(stdin))
while(!feof(stdin)) {rewind(f);
{rewind(f); freadb(s,f);
freadb(s,f); i=0;
i=0; while(!feof(f))
while(!feof(f)) {if(n==s.nr)
{if(n==s.grupa) {i=1;
{i=1; printf("\n %4d %-30s Nota la %s: %2d",s.nr,s.nume, materie,
printf("\n %4d %-30s Nota la %s: %2d",s.nr,s.nume,materie, s.note[nota]);
s.note[nota]); printf("\n Noua nota(sau 0):");
printf("\n Noua nota(sau 0):"); scanf("%d",&j);
scanf("%d",&j); if(j){s.note[nota]=j;
if(j){s.note[nota]=j; fseek(f,ftell(f)-sizeof(Student),SEEK_SET);
fseek(f,ftell(f)-sizeof(Student),SEEK_SET); fwriteb(s,f);}
fwriteb(s,f);fseek(f,0,1);}} }
freadb(s,f);} freadb(s,f);}
if(!i) printf("\n Nu a fost gasit nici un student"); if(!i) printf("\n Nu a fost gasit studentul");
printf("\nNr matricol: ");scanf("%d",&n);}
fclose(f);}
}