10
Seminar 6 – Atp - Fisiere organizate secvential – 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

Sem 06 - Fisiere Org_secvential

Embed Size (px)

DESCRIPTION

fisiere

Citation preview

Seminar 6 Atp Fisiere organizate secvential

1. S se scrie programul care creeaz un fiier binar organizat secvenial numit Stud.dat cu date despre studenii unei faculti. Articolele au urmtoarea structur: numr matricol (intreg)nume (char max.30)anul (intreg)grupa (intreg)numrul de note (intreg), notele (intreg, max.15). Datele se preiau de la tastatur, sfritul introducerii fiind marcat standard (CTRL + Z). Acolo unde nu se cunoate nc nota se va introduce valoarea 0.

Exemplu de rulare

Rezultat: crearea fisierului Stud.dat in directorul in care se afla sursa.

Indicatii

biblioteci: stdio.h definire structura: Student in functia main:{ 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

#define fwriteb(x,f) fwrite(&(x),sizeof(Student),1,(f))#define freadb(x,f) fread(&(x),sizeof(Student),1,(f))

definire structura: la fel ca la ex. 1 in functia main:{ declarare variabile: f si g de tip Fisier; char s1[20]; s de tip Student; 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;is2.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 anca=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