Documente Academic
Documente Profesional
Documente Cultură
Indicatii
biblioteci: stdio.h
definire structura: Student
in functia main:
{
o
o
o
o
o
o
declarare variabile
preluare nume fisier
deschidere fisier binar pentru scriere
citire numar matricol de la tastatura
introducere elemente de la tastatura pana la intalnirea CTRL Z
inchidere fisier f
2. S se scrie programul care listeaz, ntr-un fiier text numit Stud1.txt, sub form de
tabel, coninutul fiierului Stud.dat creat la problema anterioara. Fisierul Stud.dat din
care va fi preluata informatia va fi copiat langa fisierul sursa al problemei (altfel se va da
calea catre el).
Exemplu de rulare
Rezultat
Indicatii
- biblioteci: stdio.h
- definire functii citire/scriere pentru usurinta
declarare variabile:
o f si g de tip Fisier;
o char s1[20];
o s de tip Student;
o intregi i,n;
preluare nume de fisier ( printf("\nFisier: "); gets(s1); )
daca (!(f=fopen(s1,"rb"))) mesaj ("\nFisierul %s nu poate fi deschis",s1);
altfel {
printf("\nFisier rezultat (text): ");
gets(s1);
g=fopen(s1,"w");
fprintf(g,"\nNr. Nume %25s An Grupa Note"," ");
freadb(s,f);
n=0;
atat timp cat (!feof(f))
{
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);
}
fclose(g);
fclose(f);
}
}
3. S se scrie programul care sorteaz studenii dup anii de studiu i grupe intr-un fisier
binar. (se va apela apoi problema 2 cu listare in fisierul text stud2.txt. Se vor verifica datele
daca sunt sau nu sortate)
Rulare:
- se va copia in directorul cu fisierul sursa fisierul Stud.dat
- in cadrul rularii se va da numele acestui fisier
- dupa rulare, se va copia fisierul rezultat ( care va acea acelasi nume Stud.dat) in
directorul problemei 2).
- se va rula problema 2 pentru a putea vizualiza intr-un fisier text continutul fisierului
sortat Stud.dat
Rezultat
Indicatii:
-
biblioteci: stdio.h
declarare variabile: FILE *f,*g; char s[20]; Student s1,s2; int ok,n,i;
preluare nume fisier ( printf("\nFisier: ");gets(s); )
daca (!(f=fopen(s,"rb+"))) mesaj ("\nFisierul %s nu poate fi deschis",s);
altfel {
n=nrart(f,sizeof(Student));
ok=1;
while(ok)
{
ok=0;
for(i=0;i<n-1;i++)
{
fseek(f, i*sizeof(Student), 0);
fread(&s1, sizeof(Student), 1, f);
fread(&s2, sizeof(Student), 1, f);
daca ((s1.an>s2.an)|| ((s1.an==s2.an) && (s1.grupa>s2.grupa)))
{
ok=1;
fseek(f,i*sizeof(Student),0);
fwrite(&s2, sizeof(Student), 1, f);
fwrite(&s1, sizeof(Student), 1, f);
}
}
}
fclose(f);
}
}
4. S se scrie programul care listeaz, ntr-un fiier text, studenii integraliti, pe ani i
grupe, calculnd media fiecrei grupe i a fiecrui an. (fisierul rezultat se va numi stud3.txt
si se va verifica rezultatul comparand cu datele din stud2.txt)
Indicatii
- biblioteci: stdio.h
- definire functii citire/scriere pentru usurinta
#define fwriteb(x,f) fwrite(&(x),sizeof(Student),1,(f))
#define freadb(x,f) fread(&(x),sizeof(Student),1,(f))
-
definire structura
typedef struct{int nr; char nume[30]; int an; int grupa; int n; int note[15];}Student;
in functia main:
{
definire variabile:
f,g - de tip Fisier;
char s1[20];
Student s;
i,na,j,e,ng,ca,cg - intregi;
ma,mg,ms - de tip real;
preluare nume fisier: printf("\nFisier: "); gets(s1);
daca (!(f=fopen(s1,"rb"))) mesaj ("\nFisierul %s nu poate fi deschis",s1);
altfel {
mesaj ("\nFisier text: ");
gets(s1);
g=fopen(s1,"w"); //se deschide fisier text pentru scriere
freadb(s,f); // se citeste un element din fisierul binar f
atat timp cat (!feof(f))
{// operatii initiale pentru an
ca=s.an;
fprintf(g,"\n\nAnul %d",ca);
ma=0; na=0;
atat timp cat ((!feof(f))&& (s.an==ca))
{ // operatii initiale pentru grupa
mg=0; ng=0;
cg=s.grupa;
fprintf(g,"\n\tGrupa %d",cg);
atat timp cat ((!feof(f))&&(ca==s.an)&&(cg==s.grupa))
{
e=1;
ms=0;
for(j=0;j<s.n;j++)
daca (s.note[j]<5)e=0;
altfel ms+=s.note[j];
daca (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);}
//operatii finale grupa
daca (ng) { fprintf(g,"\n\tGrupa %d, media:
%5.2f",cg,mg/ng);ma+=mg;na+=ng;}
altfel fprintf (g,"\n\Grupa nu are integralisti");
}
//operatii finale an
daca (na) fprintf(g,"\nMedia anului %d este:
%5.2f",ca,ma/na);
altfel fprintf(g,"\nAnul nu are integralisti");}
fclose(f);
fclose(g);
}
}
5. S se scrie programul pentru adugarea punctului din oficiu la nota la filosofie pentru
studenii din grupa al crei numr este introdus de la tastatur.
- biblioteci: stdio.h
- definire structura:
typedef struct{int nr; char nume[30]; int an; int grupa; int n; int note[15]; }Student;
- in functia main:
{ declarare variabile: FILE *f; char s1[20]; Student s; int n,i;
- preluare nume de fisier: printf("\nFisier: ");gets(s1);
daca (!(f=fopen(s1,"rb+"))) mesaj ("\nFisierul %s nu poate fi deschis",s1);
altfel {
- se citeste numarul grupei ( mesaj ("\nNr. grupei: "); scanf("%d",&n);)
- atat timp cat (!feof(stdin))
{
rewind(f);
fread(&s, sizeof(Student), 1, f);
i=0;
atat timp cat (!feof(f))
{daca (n == s.grupa)
{
i=1;
s.note[0]=(s.note[0]==10)? s.note[0]: s.note[0]+1;
fseek(f, ftell(f)-sizeof(Student), 0);
fwrite(&s, sizeof(Student), 1, f);
fseek(f, 0, 1); //folosit la trecerea de la scriere la citire
}
fread(&s, sizeof(Student), 1, f);
}
daca (!i) mesaj ("\n Nu a fost gasit nici un student");
se citeste numarul grupei ( printf("\nNr grupei: ");scanf("%d",&n); )
}
fclose(f);
}
}
6. S se scrie programul care listeaz, n fiiere text, situaia studenilor din grupele ale
cror numere se introduc de la tastatur. Sfritul introducerii este marcat standard.
-
biblioteci - stdio.h
definire functii scriere/citire fisier binar
#define fwriteb(x,f) fwrite(&(x),sizeof(Student),1,(f))
#define freadb(x,f) fread(&(x),sizeof(Student),1,(f))
definire structura:
typedef struct{int nr;
char nume[30];
int an;
int grupa;
int n;
int note[15];
}Student;
in functia main
{
- variabile: FILE *f,*g; char s1[20]; Student s; int i,n,j;
- preluare fisier ( printf("\nFisier: ");gets(s1); )
daca (!(f=fopen(s1,"rb"))) mesaj ("\nFisierul %s nu poate fi deschis",s1);
altfel {
mesaj ("\nNr. grupei: ");
scanf("%d",&n);
atat timp cat (!feof(stdin))
{
rewind(f);
fflush(stdin);
printf("\nFisier rezultat: ");gets(s1);
g=fopen(s1,"w");
freadb(s,f);
i=0;
atat timp cat (!feof(f))
{
if(n==s.grupa)
{
i=1;
fprintf(g,"\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++)
fprintf(g,"%2d ",s.note[j]);
}
freadb(s,f);
}
daca (!i) mesaj ("\nNu a fost gasita.");
printf("\nNr. grupei: ");
scanf("%d",&n);
fclose(g);
}
fclose(f);
}
}