Prezentacja programu PowerPoint

Transkrypt

Prezentacja programu PowerPoint
Język ANSI C – pliki
Wyznaczanie rozmiaru pliku
Rozmiar pliku jest mierzony w bajtach. Bajt jest najmniejszą
jednostką zapisywaną do pliku lub odczytywaną z pliku. Przy
wyznaczaniu długości można wykorzystać funkcję ftell zwracającą
bieżącą pozycję wskaźnika pliku. Jeśli wskaźnik pliku jest ustawiony na
końcu pliku, funkcja ftell podaje liczbę bajtów w pliku, czyli rozmiar
pliku w bajtach.
Algorytm. Wyznaczanie długości pliku (plik otwarty).
1. Ustaw wskaźnik pliku na końcu pliku.
2. Wywołaj funkcję ftell.
Język ANSI C – pliki
Przykład. Wyznaczanie długości pliku.
#include <stdio.h>
#include <conio.h>
int main()
{int i, liczbaBajtow, liczbaElementow;
double
x[5]={ 2.3,0,22,1.2,5.3};
FILE *fp;
fp=fopen("Plik3.dat","r+b");
fseek(fp,0,SEEK_END);
liczbaBajtow=ftell(fp);
liczbaElementow=liczbaBajtow/sizeof(double);
printf("\n Liczba bajtow:%d",liczbaBajtow);
printf("\n Liczba elementow :%d",liczbaElementow);
fclose(fp);
}
Język ANSI C – pliki
Przykład. Obliczanie w pliku sum elementów dodatnich, ujemnych i
ilości elementów zerowych.(cz.1)
#include <stdio.h>
#include <conio.h>
int main()
{
double sumD=0,sumU=0,ilZer=0,buf;
FILE *fp;
fp=fopen("Plik3.dat","r+b");
// wersja 1
fseek(fp,0,SEEK_END);
iloscElementow=ftell(fp)/sizeof(double);
printf("\n Ilosc elementow pliku=%d",iloscElementow);
fseek(fp,0,SEEK_SET);
Język ANSI C – pliki
Przykład. Obliczanie w pliku sum elementów dodatnich, ujemnych i
ilości elementów zerowych. (cz.2)
for (i=0;i< iloscElementow;i++)
{ fread(&buf,sizeof(double),1,fp);
if (buf>0) sumaD+=buf;
if (buf<0) sumaU+=buf;
if (buf==0) ilZer++;
}
printf("\n Suma el. dodatnich :%5.2f",sumaD);
printf("\n Suma el. ujemnych
printf("\n Ilosc
zer
:%5.2f",sumaU);
:%5.2f",ilZer);
Języksum
ANSI
C – pliki dodatnich, ujemnych i
Przykład. Obliczanie w pliku
elementów
ilości elementów zerowych. (cz.3)
// wersja 2 bez wyznaczania dlugosci pliku
fseek(fp,0,SEEK_SET);
while( fread(&buf,sizeof(double),1,fp))
{
if (buf>0) sumaD+=buf;
if (buf<0) sumaU+=buf;
if (buf==0) ilZer++;
}
printf("\n Suma el. dodatnich :%5.2f",sumaD);
printf("\n Suma el. ujemnych
printf("\n Ilosc
fclose(fp);
getch();
return 0;
}
zer
:%5.2f",sumaU);
:%5.2f",ilZer);
Język ANSI C – pliki
Konstrukcja
while( fread(&buf,sizeof(double),1,fp))
{
........
}
umożliwia odczyt pliku bez wyznaczania długości pliku.
Funkcję fread zwraca wartość różną od zera, dopóki nie zostanie
osiągnięty koniec pliku. Wartość różna od zera reprezentuje wartość
logiczną prawda, co powoduje, że pętla while wykonuje kolejne
iteracje umożliwiające odczytywanie danych aż do momentu
osiągnięcia końca pliku.
Język ANSI C-pliki
Przykład. Program wyszukujący w pliku wartość minimalną i
maksymalną.(cz.1)
#include <stdio.h>
#include <conio.h>
int main()
{int i;
double max,min,buf;
FILE *fp;
fp=fopen("Plik2.dat","rb");
fread(&buf,sizeof(double),1,fp);
max=min=buf;
Język ANSI C – pliki
Przykład. Program wyszukujący w pliku wartość minimalną i
maksymalną.(cz.2)
while( fread(&buf,sizeof(double),1,fp))
{
if (buf>max) max=buf;
if (buf<min) min=buf;
}
printf("\n Wartosc maksymalna=%5.2f",max);
printf("\n Wartosc minimalna= %5.2f",min);
getch();
fclose(fp);
return 0;
}
Język ANSI C-pliki
Przykład. Program zamieniający miejscami w pliku element drugi z piątym
(cz.1)
#include <stdio.h>
#include <conio.h>
int main(){
int i, buf1,buf2, buf,iloscElementowTypuInt;
FILE *fp;
fp=fopen("Plik2.dat","r+b");
fseek(fp,0,SEEK_END);
iloscElementowTypuInt= ftell(fp)/sizeof(int);
if (iloscElementowTypuInt<5)
{
printf("\n Nie ma wystarczajacej liczby elementow");
getch();
fclose(fp);
exit(1);
}
Język ANSI C- pliki
Przykład. Program zamieniający miejscami w pliku element drugi z piątym
(cz.2)
fseek (fp,1*sizeof(int),SEEK_SET);
fread(&buf1,sizeof(int), 1,fp);
fseek (fp,4*sizeof(int),SEEK_SET);
fread(&buf2,sizeof(int), 1,fp);
fseek (fp,1*sizeof(int),SEEK_SET);
fwrite(&buf2,sizeof(int), 1,fp);
fseek (fp,4*sizeof(int),SEEK_SET);
fwrite(&buf1,sizeof(int), 1,fp);
fseek(fp,0,0);
for (i=0;i< iloscElementowTypuInt;i++){
fread(&buf,sizeof(int),1,fp);
printf("\n Element pliku nr %d =%d",i,buf);
}
fclose(fp); getch();}
Język ANSI C-pliki
Przykład. Program dopisujący do pliku zadaną liczbę elementów typu int.
#include <stdio.h>
#include <conio.h>
int main(){
int i, buf1,buf2, buf,n=3;
FILE *fp;
fp=fopen("Plik2.dat","a+b");// tryb dopisywania
for (i=0;i<n;i++)
{ printf("\n Podaj liczbe:");
scanf("%d",&buf);
fwrite(&buf,sizeof(int),1,fp);
}
fseek(fp,0,0);
while(fread(&buf,sizeof(int),1,fp))
printf("\n Element pliku nr %d =%d",i,buf);
getch();
return 0; }
Język ANSI C-pliki
Przykład. Program przepisujący zawartość pliku.
#include <stdio.h>
#include <conio.h>
int main(){
int i=0, buf,n=3;
FILE *fp1,*fp2;
fp1=fopen("Plik2.dat","rb");
fp2=fopen("Plik3.dat","w+b");
while(fread(&buf,sizeof(char),1,fp1))
fwrite(&buf,sizeof(char),1,fp2);
fseek(fp2,0,SEEK_SET);
while(fread(&buf,sizeof(int),1,fp2))
printf("\n Element pliku nr %d =%d",i++,buf);
fclose(fp1); fclose(fp2);
getch();return 0;}
Język ANSI C – pliki
Przykład. Sortowanie zawartość plikuF(niemalejąco). (cz.1)
#include <stdio.h>
#include <conio.h>
int main(){
int tab[5]={ 1,-100,2,3,510};
int i, buf,n=5,zam,p1,p2;
FILE *fp;
fp=fopen("Plik2.dat","w+b");
for(i=0;i<5;i++)
fwrite(&tab[i],sizeof(int),1,fp);
fseek(fp,0,SEEK_SET);
printf("\n Plik przed sortowaniem");
while(fread(&buf,sizeof(int),1,fp))
printf("\n Element nr %d=%d",i++,buf);
Język ANSI C-pliki
Przykład. Sortowanie zawartość pliku (niemalejąco). (cz.2)
do
{ zam=0;
for( i=0;i<n-1;i++)
{
fseek(fp,i*sizeof(int),SEEK_SET);
fread(&p1,sizeof(int),1,fp);
fread(&p2,sizeof(int),1,fp);
if (p1>p2)
{
fseek(fp,i*sizeof(int),SEEK_SET);
fwrite(&p2,sizeof(int),1,fp);
fwrite(&p1,sizeof(int),1,fp);
zam=1;
}
}
}
while(zam==1);
Język ANSI C-pliki
Przykład. Sortowanie zawartość pliku (niemalejąco). (cz.3)
fseek(fp,0,SEEK_SET);
i=0;
printf("\n Plik posortowany");
while(fread(&buf,sizeof(int),1,fp))
printf("\n Element nr
fclose(fp);
getch();
return 0;
}
%d=%d",i++,buf);
Język ANSI C-pliki
Funkcja fprintf
int fprintf(FILE *stream, const char *format,...);
Funkcja fprintf wypisuje do strumienia wskazywanego przez
parametr stream wartości argumentów wymienionych na liście
argumentów zgodnie z parametrem format.Zwracana wartość jest
równa ilości wypisanych znaków, jeśli wystąpi bład zwracana jest
wartość ujemna.
Przykład.
FILE *fp;
fprintf(fp,"Test fprintf
% d % f", 2, 24.2);
Język ANSI C – pliki
Funkcja fscanf
int fscanf(FILE *stream, const char *format,...);
Funkcja działa podobnie jak scanf, lecz dane pobiera nie ze
strumienia stdin, ale ze strumienia wskazywanego przez parametr
stream, zgodnie z parametrem format. Funkcja zwraca liczbę
argumentów, którym udało się przypisać wartości.
Przykład.
FILE *fp;
fscanf(fp,"%d%f%lf",&x,&y,&z);