Bài giảng Tin học đại cương - Nguyễn Hồng Phương

Thông tin, dữliệu, tri thức

„ Thông tin (Information): mang lại cho con người

sựhiểubiết, nhậnthứctốthơnvềnhữngđối

tượng trong tựnhiên - xã hội

„ Dữliệu(Data): biểudiễncủa thông tin đượcthể

hiệnbằng các tín hiệuvậtlý. Dữliệutrongthực

tếcó thểlà:

„ các sốliệutrongcácbiểuđồ

„ các ký hiệuquyướcnhưchữviết

„ các tín hiệuvật lý: ánh sáng, âm thanh, nhiệtđộ, áp

suất,.

1.1. Thông tin và xửlý thông tin (2)

„ Tri thức (Knowledge):

„ thông tin ởmứctrừutượng hơn

„ kháđadạng

„ sựhiểubiết chung hay vềmộtlĩnh vựccụthể

nàođó.

„Hệthống thông tin (information

system)

„ Dữliệu Thông tin Tri thức

Xửlý

pdf138 trang | Chuyên mục: Tin Học Đại Cương | Chia sẻ: dkS00TYs | Lượt xem: 1697 | Lượt tải: 1download
Tóm tắt nội dung Bài giảng Tin học đại cương - Nguyễn Hồng Phương, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
843
Ví dụ 2 về hàm fscanf (tiếp)
„ Trường hợp 1: sau chữ số cuối cùng là mã 26 hay kết thúc tệp
#include
void main(){
FILE *f; int c;
f=fopen("songuyen.txt","r");
while(!feof(f)){
fscanf(f,"%d",&c);
printf("%d\n",c);
}
fclose(f);
getch();
}
File đầu vào
Kết quả hiển 
thị
44
Ví dụ 2 về hàm fscanf (tiếp)
„ Trường hợp 2: sau chữ số cuối cùng có ít nhất một khoảng trống hay 
các dấu xuống dòng
#include
void main(){
FILE *f; int c;
f=fopen("songuyen.txt","r");
while(1){
fscanf(f,"%d",&c);
if(feof(f)) break;
printf("%d\n",c);
}
fclose(f);
getch();
}
File đầu vào
Kết quả hiển 
thị
45
Phân tích ví dụ 2
„ Nếu với trường hợp thứ hai mà ta lại dùng
đoạn mã cho trường hợp thứ nhất thì sao?
„ Kết quả:
Hai số 34Một số 34
46
Phân tích ví dụ 2
„ Nếu với trường hợp thứ nhất mà ta lại
dùng đoạn mã cho trường hợp thứ hai thì
sao?
„ Kết quả:
Mất số 34 
cuối cùng
47
8.6.3. Hàm fputs: ghi một chuỗi ký tự lên tệp
„ Dạng hàm:
„ int fputs(const char *s, FILE *f);
„ Đối:
„ s là con trỏ trỏ tới địa chỉ đầu của một chuỗi ký tự kết
thúc bằng dấu '\0'.
„ f là con trỏ tệp.
„ Công dụng: ghi chuỗi s lên tệp f (dấu '\0' không
ghi lên tệp). Nếu thành công hàm trả về ký tự
cuối cùng được ghi lên tệp; nếu có lỗi hàm trả về
EOF.
48
Ví dụ hàm fputs
„ Chương trình sau sẽ nhập các dòng ký tự từ bàn phím và ghi lên tệp "vanban"
#include
#include
void main(){
int i=0; char d[256]; FILE *f;
f=fopen("vanban","w");
clrscr();
printf("Bam Enter de ket thuc");
while(1){
i++;
printf("\nDong %d: ",i); gets(d);
if(d[0]=='\0') break; // Bấm Enter để kết thúc
if(i>1) fputc(10,f);
fputs(d,f);
}
fclose(f);
} Tệp 
vanban
949
8.6.4. Hàm fgets: đọc một dãy ký tự từ tệp
„ Dạng hàm:
„ char *fgets(char *s, int n, FILE *f);
„ Đối:
„ s là con trỏ trỏ tới vùng nhớ đủ lớn để chứa chuỗi ký tự sẽ đọc từ tệp.
„ n là số nguyên xác định độ dài cực đại của dãy cần đọc.
„ f là con trỏ tệp.
„ Công dụng: đọc 1 dãy ký tự từ tệp f chứa vào vùng nhớ s. Việc đọc
kết thúc khi:
„ hoặc đã đọc n-1 ký tự
„ hoặc gặp dấu xuống dòng (cặp mã 13 10). Khi đó mã 10 được đưa vào
xâu kết quả.
„ hoặc kết thúc tệp.
„ Xâu kết quả sẽ được bổ sung thêm dấu hiệu kết thúc chuỗi '\0'. Khi
thành công hàm trả về địa chỉ vùng nhận kết quả; khi có lỗi hoặc gặp
cuối tệp, hàm cho giá trị NULL.
50
Ví dụ hàm fgets
„ Chương trình đọc các dòng ký tự trên tệp "vanban" và đưa ra màn
hình.
#include
#include
void main(){
int i=0; char d[256]; FILE *f;
f=fopen("vanban","r"); clrscr();
while(!feof(f)){
i++;
fgets(d,256,f);
printf("Dong %d: %s\n",i,d);
}
fclose(f);
getch();
} Kết quả
hiển thị
51
8.7. Tệp văn bản và các thiết bị chuẩn
„ Có thể dùng các hàm nhập xuất văn bản trên các
thiết bị chuẩn. C đã định nghĩa các tệp tin và con 
trỏ tệp ứng với các thiết bị chuẩn như sau:
Thiết bị in chuẩn (máy in)stdprnprn
Thiết bị lỗi chuẩn (màn hình)stderrerr
Thiết bị ra chuẩn (màn hình)stdoutout
Thiết bị vào chuẩn (bàn phím)stdinin
Thiết bịCon trỏTệp
„ Khi chương trình C bắt đầu làm việc thì các tệp 
này được tự động mở, vì vậy có thể dùng các 
con trỏ nêu trên để nhập xuất trên các thiết bị
chuẩn 52
8.7. .... ví dụ
#include
#include
void main(){
char ht[25]; float diem; int ns;
printf("\nHo ten: ");fgets(ht,25,stdin);
printf("\nDiem va nam sinh");
fscanf(stdin,"%f%d",&diem,&ns);
fputs(ht,stderr);
fprintf(stdout,"Diem %f nam sinh %d",diem, ns);
}
53
8.8. Các hàm nhập xuất theo kiểu nhị phân
„ 8.8.1. Hàm putw: ghi một số nguyên
„ Dạng hàm: int putw(int n, FILE *f);
„ Đối:
„ n là giá trị nguyên
„ f là con trỏ tệp
„ Công dụng: ghi giá trị n lên tệp f dưới dạng 2 
byte. Nếu thành công hàm trả về số nguyên
được ghi; nếu có lỗi hàm trả về EOF.
54
8.8.2. Hàm getw: đọc một số nguyên
„ Dạng hàm: int getw(FILE * f);
„ Đối: f là con trỏ tệp.
„ Công dụng: đọc một số nguyên 2 byte từ
tệp f. Nếu thành công, hàm trả về số
nguyên đọc được; nếu có lỗi hoặc gặp cuối
tệp, hàm trả về EOF.
10
55
Ví dụ về hàm putw và getw
„ Chương trình ghi một dãy số nguyên lên tệp "songuyen", sau đó đọc
các số nguyên từ tệp này và đưa ra màn hình.
#include
#include
void main(){
FILE *f; int i;
// Ghi các số nguyên
f=fopen("songuyen","wb");
for(i=1000;i<=1010;i++) putw(i,f);
fclose(f);
// Đọc các số nguyên
clrscr();
f=fopen("songuyen",rb");
while((i=getw(f)!=EOF) printf("\n%d",i);
fclose(f);
}
56
8.8.3. Hàm fwrite: ghi các mẫu tin lên tệp
„ Dạng hàm:
„ int fwrite(void *ptr, int size, int n, FILE *f);
„ Đối:
„ ptr là con trỏ trỏ tới vùng nhớ chứa dữ liệu cần ghi.
„ size là kích thước của mẫu tin theo byte.
„ n là số mẫu tin cần ghi.
„ f là con trỏ tệp.
„ Công dụng: ghi n mẫu tin kích thước size byte từ
vùng nhớ ptr lên tệp f. Hàm trả về giá trị bằng số
mẫu tin thực sự được ghi.
57
8.8.4. Hàm fread: đọc các mẫu tin từ tệp tin
„ Dạng hàm:
„ int fread(void *ptr, int size, int n, FILE *f);
„ Đối:
„ ptr là con trỏ trỏ tới vùng nhớ sẽ chứa dữ liệu đọc
được từ tệp tin.
„ size là kích thước của mẫu tin theo byte.
„ n là số mẫu tin cần đọc.
„ f là con trỏ tệp.
„ Công dụng: đọc n mẫu tin kích thước size byte từ
tệp f chứa vào vùng nhớ ptr. Hàm trả về một giá
trị bằng số mẫu tin thực sự đọc được.
58
Ví dụ về fwrite, fread
„ Ví dụ 1: sao chép tệp dùng fwrite, fread
#include
#include
void main(){
int n; char t1[20], t2[20], c[1000];
FILE *f1, *f2;
printf("\nTEP NGUON: ");gets(t1);
printf("\nTEP DICH");gets(t2);
f1=fopen(t1,"rb");
if(f1==NULL){
printf("\nTEP %s khong ton tai",t1);
getch(); exit(1);
}
f2=fopen(t2,"wb");
while((n=fread(c,1,1000,f1))>0) fwrite(c,1,n,f2);
fclose(f1); fclose(f2);
}
59
Ví dụ về fwrite, fread
„ Ví dụ 2: ghi và đọc một dãy n phần tử số thực
#include
#include
void main(){
FILE *f; float a[20],b[20]; int i,n;
// Nhập số phần tử n
do{
printf("Nhap so phan tu n= ");scanf("%d",&n);
}while((n20));
// Nhập vào n phần tử thực
for(i=0;i<n;i++){
printf("\na[%d]= ",i); scanf("%f",&a[i]);
}
60
Ví dụ về fwrite, fread
f=fopen("mangsolieu","wb");
// Ghi n phần tử thực của mảng a vào file f
fwrite(a,sizeof(float),n,f);
fclose(f);
f=fopen("mangsolieu","rb");
// Đọc n phần tử thực từ file f đưa vào mảng b
fread(b,sizeof(float),n,f);
// Hiển thị ra màn hình
for(i=0;i<n;i++) 
printf("\nb[%d]=%f",i,b[i]);
fclose(f);
getch();
}
11
61
Ví dụ về fwrite, fread
„ Ví dụ 3: ghi và đọc cấu trúc
#include
#include
typedef struct{
char ht[25];
float diem;
}HOCSINH;
void main(){
FILE *f; HOCSINH hs;
// Nhập số liệu từ bàn phím và ghi lên tệp
f=fopen("HOSO.DAT","wb");
printf("Bấm Enter để kết thúc");
while(1){
62
Ví dụ về fwrite, fread
printf("\nHo va ten: ");gets(hs.ht);
if(hs.ht[0]=='\0') break;
printf("\nDiem so: ");scanf("%f%*c",&hs.diem);
fwrite(&hs,sizeof(HOCSINH),1,f);
}
fclose(f);
f=fopen("HOSO.DAT","rb");
while(fread(&hs,sizeof(HOCSINH),1,f)>0)
printf("\n%s %f",hs.ht,hs.diem);
fclose(f);
getch();
}
63
8.9. Nhập xuất ngẫu nhiên và các hàm di
chuyển con trỏ chỉ vị
„ Mỗi tệp khi đang mở có một con trỏ chỉ vị dùng
để xác định vị trí đọc/ghi trên tệp.
„ Khi mở tệp tin để đọc/ghi, con trỏ chỉ vị luôn ở
đầu tệp tin. Nhưng nếu mở theo chế độ "a" thì
con trỏ chỉ vị ở cuối tệp để ghi thêm dữ liệu vào
tệp.
„ Việc xuất nhập dữ liệu được thực hiện từ vị trí
hiện tại của con trỏ chỉ vị và sau khi hoàn thành
thì con trỏ này dịch chuyển đi một số byte bằng
số byte đã đọc hay ghi.
„ Việc xuất nhập được tiến hành tuần tự từ đầu
đến cuối tệp tin.
64
8.9.1. Hàm rewind: chuyển con trỏ chỉ vị
về đầu tệp
„ Dạng hàm: void rewind(FILE *f);
„ Đối: f là con trỏ tệp.
„ Công dụng: chuyển con trỏ chỉ vị của tệp f 
về đầu tệp. Khi đó, việc nhập xuất trên tệp
f được thực hiện từ đầu tệp.
65
8.9.2. Hàm fseek: di chuyển con trỏ chỉ vị
đến vị trí mong muốn
„ Dạng hàm:
„ int fseek(FILE *f, long sb, int xp);
„ Đối:
„ f là con trỏ tệp.
„ sb là số byte cần di chuyển.
„ xp cho biết vị trí xuất phát mà việc dịch chuyển được
bắt đầu từ đấy. xp cps thể nhận các giá trị sau:
„ SEEK_SET hay 0: xuất phát từ đầu tệp.
„ SEEK_CUR hay 1: xuất phát từ vị trí hiện tại của con trỏ chỉ vị.
„ SEEK_END hay 2: xuất phát từ cuối tệp.
66
8.9.2. Hàm fseek (tiếp)
„ Công dụng: hàm di chuyển con trỏ chỉ vị
của tệp f từ vị trí xác định bởi xp qua một
số byte bằng giá trị tuyệt đối của sb. Chiều
di chuyển về cuối tệp nếu sb dương, trái lại
di chuyển về đầu tệp. Khi thành công, hàm
trả về giá trị 0; nếu có lỗi hàm trả về giá trị
khác 0.
„ Chú ý: Không nên dùng fseek trên kiểu văn
bản.
12
67
8.9.3. Hàm ftell: cho biết vị trí hiện tại
của con trỏ chỉ vị
„ Dạng hàm: long ftell(FILE *f);
„ Đối: f là con trỏ tệp.
„ Công dụng: khi thành công, hàm cho biết
vị trí hiện tại của con trỏ chỉ vị (byte thứ
mấy trên tệp f). Số thứ tự byte được tính
từ 0. Khi có lỗi, hàm trả về -1L.
68
Ví dụ: fseek và ftell
„ Chương trình dùng fseek và ftell xác định độ dài của tệp.
#include
#include
#include
void main(){
FILE *f; long n; char ten[25]; clrscr();
puts("Ten tep: "); gets(ten);
f=fopen(ten,"rb");
if(f==NULL){
printf("\nTep %s khong ton tai",ten);exit(1);
}
fseek(fp,0,SEEK_END); n=ftell(f); fclose(f);
printf("\nDo dai cua tep %s là %ld byte",ten,n);
getch();
}
69
Bài tập
„ Bài 1:
Viết chương trình:
„ Nhập từ bàn phím N số thực lưu vào một mảng (N 100 và
N được nhập từ bàn phím).
„ Sau đó ghi ra một file văn bản có tên là "float.txt" theo quy
cách: dòng đầu tiên lưu số lượng các số thực, các dòng tiếp
theo lưu các số thực, mỗi số lưu trên một dòng.
„ Đọc lại tệp văn bản đó và lưu các số thực đọc được vào một
mảng.
„ Sắp xếp các số thực trong mảng theo thứ tự tăng dần và ghi
ra một tệp văn bản khác có tên là "floatsx.txt" theo
quy cách giống như tệp "float.txt".
70
Bài tập
„ Bài 2: Viết chương trình ghép nối nội dung 
2 file:
„ Nhập vào từ bàn phím 2 xâu kí tự là đường dẫn
của file nguồn và file đích
„ Ghép nội dung của file nguồn vào cuối file đích.
71
Hỏi-đáp
72
Lời hay ý đẹp

File đính kèm:

  • pdfBài giảng Tin học đại cương - Nguyễn Hồng Phương.pdf
Tài liệu liên quan