Documente Academic
Documente Profesional
Documente Cultură
1. Să se scrie programul care creează un fişier binar organizat secvenţial numit “Stud.dat” cu
date despre studenţii unei facultăţi. Articolele au următoarea structură:
număr matricol (intreg)
nume (char max.30)
anul (intreg)
grupa (intreg)
numărul de note (intreg),
notele (intreg, max.15).
Datele se preiau de la tastatură, sfârşitul introducerii fiind marcat standard (CTRL + Z).
Acolo unde nu se cunoaşte încă nota se va introduce valoarea 0.
Exemplu de rulare
- biblioteci: stdio.h
- definire structura: Student
- in functia main:
{
o declarare variabile
o preluare nume fisier
o deschidere fisier binar pentru scriere
o citire numar matricol de la tastatura
o introducere elemente de la tastatura pana la intalnirea CTRL – Z
o inchidere fisier f
}
2. Să se scrie programul care listează, într-un fişier text numit Stud1.txt”, sub formă de
tabel, conţinutul fişierului “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
3. Să se scrie programul care sortează intr-un fisier binar studenţii după anii de studiu şi
grupe. (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 avea 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 fişier text, studenţii integralişti, pe ani şi
grupe, calculând media fiecărei grupe şi a fiecărui 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
- 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
//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 adăugarea punctului din oficiu la nota la filosofie pentru
studenţii din grupa al cărei număr 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 fişiere text, situaţia studenţilor din grupele ale
căror numere se introduc de la tastatură. Sfârşitul 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);
}
}