CATEGORII DOCUMENTE |
FISIERE
1. SCOPUL LUCRARII
In aceasta lucrare se vor studia instructiunile limbajului C specifice lucrului cu fisiere text si cu fisiere binare.
2. BREVIAR TEORETIC
2.1. Instructiunea fopen
Prototip:
FILE *fopen(char * fileName, char *mode);
Exemplu:
FILE * fp;
fp=fopen('C:abc.dat','rb');
Descriere:
Este utilizata pentru a deschide fisierul al carui nume extern este dat de primul argument, in modul specificat de al doilea argument. Este o instructiune ce se foloseste atat pentru fisiere text cat si pentru fisiere binare.
2.2. Instructiunea fclose
Prototip:
int fclose(FILE *stream);
Exemplu:
FILE * fp;
fclose(fp);
Descriere:
Este folosita pentru a inchide fisierul cu numele intern dat de argumentul ei (fisier anterior deschis cu fopen). Este o instructiune ce se foloseste atat pentru fisiere text cat si pentru fisiere binare.
2.3. Instructiunea fwrite
Prototip:
int fwrite(void * adresa, int size, int nrArticole, FILE *fp);
Exemplu:
int x;
FILE *fp;
fwrite(&x,sizeof(int),1,fp);
Descriere:
Scrie la pozitia curenta din fisierul cu numele intern fp, un numar de inregistrari dat de al treilea argument (nrArticole), fiecare inregistrare avand un numar de octeti dat de argumentul doi (size). Inregistrarile de scris incep de la adresa specificata de primul argument. Este o instructiune specifica fisierelor binare.
2.4. Instructiunea fread
Prototip:
int fread(void * adresa, int size, int nrArticole, FILE *fp);
Exemplu:
int x;
FILE *fp;
freadf(&x,sizeof(int),1,fp);
Descriere:
Citeste in variabila a carei adresa este data de primul argument (adresa), un numar de inregistrari din fisierul fp, incepand din pozitia curenta a pointerului de fisier. Numarul de inregistrari ce se citesc este dat de argumentul trei (nrArticole), fiecare inregistrare avand marimea in octeti data de argumentul doi (size). Este o instructiune specifica fisierelor binare.
2.5. Instructiunea fseek
Prototip:
int fseek(FILE *stream, long offset, int referinta);
Exemplu:
fseek(fp,0,SEEK_SET);
Descriere:
Muta pointerul de fisier la o noua pozitie, aflata la un offset in octeti dat de argumentul doi, fata de pozitia de referinta specificata de argumentul trei. Offsetul poate fi pozitiv sau negativ. Este o instructiune specifica fisierelor binare.
2.6. Instructiunea ftell
Prototip:
long ftell(FILE * stream);
Exemplu:
L=ftell(fp);
Descriere:
Returneaza valoarea in octeti a pozitiei pointerului de fisier, fata de inceputul fisierului. Este o instructiune specifica fisierelor binare.
2.7. Instructiunea fprintf
Prototip:
int fprintf(FILE *stream, char *format [, variabile, ]);
Exemplu:
int nrCrt;
FILE *fp;
.
fprintf(fp,'%d',nrCrt);
Descriere:
Scrie date, sub controlul unor formate, intr-un fisier. Este o instructiune specifica fisierelor text. Datele se scriu incepand de la pozitia curenta a pointerului de fisier.
2.8. Instructiunea fscanf
Prototip:
int fscanf(FILE *stream, char *format [, adresa, ]);
Exemplu:
int nrCrt;
FILE *fp;
fscanf(fp,'%d',&nrCrt);
Descriere:
Citeste date dintr-un fisier, sub controlul unor formate. Este o instructiune specifica fisierelor text. Datele se citesc incepand de la pozitia curenta a pointerului de fisier.
2.9. Instructiunea fgetc
Prototip:
int fgetc(FILE *stream);
Exemplu:
FILE *fp;
int c;
c=fgetc(fp);
Descriere:
Citeste caracterul de pe pozitia curenta, dintr-un fisier. Este o instructiune specifica fisierelor text.
3. DESFASURAREA LUCRARII
Se vor edita si apoi executa programele descrise in continuare.
Programul nr. 1
Sa se creeze prin program urmatorul fisier text, ce contine 10 linii a cate 10 numere fiecare. Intre cifrele de pe o linie sunt 2 blank uri.
Sursa programului:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main(void)
for(i=0;i<=9;i++)//end for i
fclose(fp);
printf('A fost creat fisierul c:cifre.txt . ');
getch( );
Programul nr. 2
Sa se afle suma numerelor dintr-un fisier text de numere intregi.
Sursa programului:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define NUME_F 'c:numere.txt' //numele fisierului text:
void main(void)
suma=0;
/* SE REPETA
se citesc pe rand,toate numerele din fisier, adaugandu-se
fiecare numar la suma totala
PANA CAND se atinge sfarsitul de fisier */
for(;;)
printf("Suma=%d",suma);
Programul nr. 3
Sa se concateneze doua fisiere text, intr-un al treilea fisier text.
Sursa programului:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
void main()
//copiem pe al doilea, in continuarea celui de-al treilea:
for(;;)
fclose(fp1);
fclose(fp2);
fclose(fp3);
Programul nr. 4
Se citesc de la tastatura 20 de numere intregi care se memoreaza intr-o matrice A de 4 linii si 5 coloane. Sa se copieze continutul matricii intr-un fisier text ce are acelasi format ca si matricea (4 linii si 5 coloane ).
Sursa programului:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main(void)
fp=fopen('c:A_4_5.txt','wt');
if(fp==NULL)
for(i=0;i<4;i++)//end for i
fclose(fp);
printf('A fost creat fisierul c:A_4_5.txt . ');
getch( );
Programul nr. 5
Sa se creeze prin program, N fisiere text de numere cu valorile -1 sau +1, obtinute aleator. Fiecare fisier contine NL linii si NC coloane. Parametrii N, NL si NC se citesc de la tastatura. Primul fisier va avea numele: C:date1.txt, al doilea: C:date2.txt, al treilea: C:date3.txt, s.a.m.d.
Exemplu:
Pentru NL=2 si NC=5 , un fisier tipic creat prin program, este de forma:
-1 -1 -1 1
Sursa programului:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
void main(void)
//scrierea celor NLxNC numere aleatoare in fisierul curent, i:
for(j=0;j<NL;j++)//end for j
//inchiderea fisierului curent:
fclose(fp);
}//end for i }
Programul nr. 6
Sa se creeze prin program un fisier binar ce contine urmatorii 100 de octeti: 10 octeti de valoare 0, 10 octeti de valoare 1, , 10 octeti de valoare 9.
Sursa programului:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main(void)
for(i=0;i<=9;i++)
for(j=1;j<=10;j++)fwrite(&i,1,1,fp);
fclose(fp);
printf('A fost creat fisierul c:cifre.bin . ');
getch( );
Programul nr. 7
Sa se adauge la sfarsitul unui fisier existent, un octet de paritate calculat ca suma modulo 2 a tuturor octetilor din fisierul initial.
Sursa programului:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main(void)
fseek(fp,0,SEEK_END);
L=ftell(fp);
fseek(fp,0,SEEK_SET);
octetCalculat=0;
for(i=0;i<L;i++)
fseek(fp,0,SEEK_END); //Fara aceasta instructiune, scrie la sfarsitul //fisierului, un octet de alta valoare, nu cel specificat prin fwrite !
//(Nu se poate in modul r+, ca imediat dupa o operatie de read sa
urmeze una de write.)
fwrite(&octetCalculat,1,1,fp);
fclose(fp);
clrscr( );
//Verificarea:
fp=fopen('abc.dat','rb');
for(i=0;i<L+1;i++)
fclose(fp);
getch( );
Programul nr. 8
Se va crea prin program un fisier binar 'ran.bin', ce contine 200 de numere, generate ca numere aleatoare, in gama 0..255 .
Sursa programului:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define NUME_F 'ran.bin'
#define NR_VALORI 200
void main(void)
for(i=0;i<NR_VALORI;i++)//for
fclose(fp);
printf('n S-a creat fisierul specificat !');
getch( );
Programul nr. 9
Sa se calculeze si afiseze maximul dintr-un fisier binar de octeti. Pentru testare se va folosi fisierul 'ran.bin', creat prin programul anterior.
Sursa programului:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define NUME_F 'ran.bin'
void main(void)
//afla lungimea fisierului:
fseek(fp,0,SEEK_END);
L=ftell(fp);
if(L==0)
//readuce pointerul de fisier la inceputul fisierului:
fseek(fp,0,SEEK_SET);
fread(&maxim,1,1,fp);//initializeaza maximul cu primul numar din fisier
//citeste octet cu octet tot fisierul
for(i=1;i<L;i++)
fclose(fp);
printf('n Maximul gasit este: %d',maxim);
getch( );
4. PROBLEME PROPUSE
1. Sa se scrie programul prin care un fisierul oarecare este citit si afisat pe ecran, octet cu octet.
2. Sa se afiseze cea mai lunga linie dintr-un fisier text.
3. Se da un fisier text de numere intregi. Sa se calculeze cel mai mare divizor comun al acestor numere.
4. Sa se calculeze si afiseze numarul de valori nule dintr-un fisier binar de octeti.
5. Sa se creeze un fisier binar, ce are numele C:elevi.dat, in care sunt copiate datele citite de la tastatura, pentru toti elevii unei clase. Pentru fiecare elev, se citesc urmatoarele informatii:
numele
prenumele
media
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1899
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved