Bài giảng Tin học 11 - Bài 14: Kiểu dữ liệu tệp - Năm học 2022-2023 - Nguyễn Lan Hương - Trường THPT Nguyễn Thái Học

Bài giảng Tin học 11 - Bài 14: Kiểu dữ liệu tệp - Năm học 2022-2023 - Nguyễn Lan Hương - Trường THPT Nguyễn Thái Học

Tất cả các dữ liệu thuộc các kiểu dữ liệu đã học đều được lưu trữ ở bộ nhớ RAM và do đó dữ liệu sẽ bị mất khi tắt máy

=> Với bài toán có khối lượng dữ liệu lớn, có yêu cầu lưu trữ để xử lí nhiều lần, cần có kiểu tệp

 

pptx 34 trang Trí Tài 03/07/2023 830
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Tin học 11 - Bài 14: Kiểu dữ liệu tệp - Năm học 2022-2023 - Nguyễn Lan Hương - Trường THPT Nguyễn Thái Học", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tiết 37+38:KIỂU DỮ LIỆU TỆP 
I. Vai trò của kiểu tệp 
Tất cả các dữ liệu thuộc các kiểu dữ liệu đã học đều được lưu trữ ở bộ nhớ RAM và do đó dữ liệu sẽ bị mất khi tắt máy 
=> Với bài toán có khối lượng dữ liệu lớn, có yêu cầu lưu trữ để xử lí nhiều lần, cần có kiểu tệp 
Đặc điểm của kiểu tệp: 
Dữ liệu được lưu trữ lâu dài ở bộ nhớ ngoài và không bị mất khi tắt nguồn điện 
Lượng dữ liệu lưu trữ trên tệp có thể rất lớn và chỉ phụ thuộc vào dung lượng đĩa 
2) Phân loại tệp 
Trong Python, file có 2 loại: 
Text File 
 Được cấu trúc như một dãy các dòng, mỗi dòng bao gồm một dãy các kí tự và một dòng tối thiểu là một kí tự dù cho dòng đó là dòng trống. 
 Các dòng trong text file được ngăn cách bởi một kí tự newline và mặc định trong Python chính là kí tự escape sequence newline \n. 
Binary File 
 Các file này chỉ có thể được xử lí bởi một ứng dụng biết và có thể hiểu được cấu trúc của file này. 
 Và chúng ta ở đây với mức độ cơ bản chỉ xử lí text file. 
II) Thao tác với tệp 
1) Mở tệp để đọc 
 Cú pháp: 
 = open(tên_tệp, ’r’, encoding='utf-8') 
2) Mở tệp để ghi 
 Cú pháp: 
 = open(tên_tệp, ’w’, encoding='utf-8') 
 Ví dụ: 
 f = open(‘vd.inp’, ‘r’, encoding='utf-8') 
 g = open(‘vd.out’, ‘w’, encoding='utf-8') 
3) Mở tệp với từ khoá with 
a ) Mở tệp để đọc 
 Cú pháp: 
w ith open(tên_tệp , mode=’r ’) as : 
b) Mở tệp để ghi 
 Cú pháp: 
with open(tên_tệp, mode =’w’) as : 
Ví dụ : 
with open(‘vd.txt’, ’r ’) as f: 
with open (‘data.out’, ’w’) as g: 
4) Đọc và ghi tệp 
a) Phương thức readline 
Cú pháp : 	 . readline() 	 
Công dụng : 
- C hỉ đọc một dòng có nghĩa là đọc tới khi nào gặp newline hoặc hết file thì ngừng. 
- Con trỏ tệp sẽ đọc từ dòng trên xuống dòng dưới. 
- Kết quả đọc được trả về dưới dạng một xâu ký tự . 
- Nếu không đọc được gì, phương thức sẽ trả về một chuỗi có độ dài bằng 0 
Ví dụ 
f = open(‘vidu.txt’, ‘r’, encoding='utf-8') 
s = f.readline() 
Chú ý: muốn đọc 1 số nguyên làm như sau 
s = int(f.readline()) 
4) Đọc và ghi tệp 
a) Phương thức readline 
b) Phương thức write 
Cú pháp : 
 . write(text) 	 
Công dụng : Phương thức này sẽ ghi văn bản text vào tệp . 
Ví dụ: 
	g = open(‘vd.out’, ‘w ’,encoding=‘utf-8’) 
	g.write(s) 
Lưu ý : Mỗi lần sử dụng write. Con trỏ file sẽ được đặt ngay sau kí tự cuối cùng được ghi 
Để ghi dữ liệu trên nhiều dòng, ta có thể xuống dòng bằng câu lệnh 
 . write (”\ n”) 
c) Đóng tệp 
Cú pháp: 
 . close() 	 
Ví dụ: 
	f.close() 
	g.close() 
Ví dụ 
Đọc từ tệp text vd.inp một mảng a gồm các số nguyên dương. Tính tổng các phần tử trong mảng và ghi kết quả ra tệp văn bản vd.out 
Hướng dẫn: 
Đọc chuỗi trong tệp ra 
Tách chuỗi thành các số nguyên 
Tính tổng 
Ghi vào tệp 
Tiết 39+40: Bài 16VÍ DỤ LÀM VIỆC VỚI TỆP 
Bài 1 : Viết chương trình đọc 3 số nguyên a,b,c từ tệp BAI1.INP, a#0. 
Ghi ra tệp BAI1.OUT kết luận nghiệm của phương trình bậc 2 ax 2 +bx+c=0 
+ Dữ liệu vào: Từ file văn bản BAI1.INP: 
 Dòng 1: ghi 3 số nguyên a,b,c 
+ Dữ liệu ra: Ghi ra file văn bản BAI1.OUT 
 - Nếu phương trình vô nghiệm thì ghi : PTVN 
 - Nếu phương trình có 2 nghiệm thì ghi : 
 x1 = 
 x2= 
 - Nếu phương trình có 1 nghiệm kép thì ghi : 
 Nghiệm kép x= 
f=open(r"BAI1.inp ",'r', encoding='utf-8') 
g=open(r"BAI1.out",'w', encoding='utf-8') 
s=f.readline() 
#p,q,r=map(int,s.split()) 
ds=s.split () 
a=int(ds[0]) 
b=int(ds[1]) 
c=int(ds[2]) 
from math import * 
delta=b*b-4*a*c 
if delta<0: 
 g.write("PTVN") 
elif delta==0: 
 x=-b/(2*a) 
 g.write("Nghiệm kép"+str(x)) 
else: 
 x1=(-b-sqrt(delta))/(2*a) 
 x2=-b/a-x1 
 g.write("x1="+str(x1)+"\n") 
 g.write("x2="+str(x2)+"\n") 
 f.close () 
g.close () 
Chương trình bài 1 : 
Bài 2 : Cho 3 số nguyên dương p, q, r 
Yêu cầu: Kiểm tra 3 số này, theo thứ tự có tạo thành một cấp số nhân hay không. Nếu có thì in ra “YES”, ngược lại thì in ra “NO” 
Dữ liệu vào: Từ file văn bản BAI2.INP : 
Gồm một dòng chứa 3 số nguyên dương p, q, r (p, q ≤ 10 9 ). Các số viết cách nhau một dấu cách 
Dữ liệu ra: Ghi ra file văn bản BAI2.OUT 
- Gồm 1 dòng ghi YES hoặc NO tương ứng với kết quả của bài toán dãy số là cấp số nhân hay không là cấp số nhân 
f=open(r"BAI2.inp ",'r', encoding='utf-8') 
g=open(r"BAI2.out ",'w', encoding='utf-8') 
s=f.readline() 
 #p,q,r=map(int,s.split()) 
ds=s.split() 
p=int(ds[0]) 
q=int(ds[1]) 
r=int(ds[2]) 
if q*q==p*r: 
	g.write("YES") 
else: 
	g.write("NO") 
f.close() 
g.close() 
Chương trình bài 2: 
Với yêu cầu của đề, hãy hoàn thành chương trình sau 
Cách 1 
Cách 2 
Bài 2 
Cho một số nguyên dương n 
Yêu cầu: Phân tích n thành tích các thừa số nguyên tố. In ra tích các thừa số nguyên tố theo thứ tự từ bé đến lớn 
Dữ liệu vào: Từ file văn bản FPRIME.INP: 
Gồm một số nguyên dương n (2 ≤ n ≤ 10 6 ). 
Dữ liệu ra: Ghi ra file văn bản FPRIME.OUT 
- Gồm 1 dòng ghi ra số theo yêu cầu của đề bài, mỗi số cách nhau một dấu cách 
Hoặc: viết như này sẽ thuận hơn 
Bài 3 
Cho một dãy số nguyên dương có n phần tử 
Yêu cầu: Tìm ước chung lớn nhất của dãy số đó 
Dữ liệu vào: Từ file văn bản GCDSEQ.INP gồm: 
Dòng 1: gồm một số nguyên dương n (n ≤ 1000). 
Dòng 2: gồm n số nguyên dương là các phần tử của dãy số. (Các số có giá trị không vượt quá 10 6 và các số cách nhau 1 dấu cách) 
Dữ liệu ra: Ghi ra file văn bản GCDSEQ.OUT 
- Gồm 1 số nguyên duy nhất là ước chung lớn nhất của dãy số 
Bài 4 
Cho một dãy số nguyên A có n phần tử: A 1 , A 2 , A n . 
Yêu cầu: Tìm dãy con liên tiếp đan dấu dài nhất 
Dữ liệu vào: Từ file văn bản MIX.INP gồm: 
Dòng 1: gồm một số nguyên dương n (n ≤ 1000). 
Dòng 2: gồm n số nguyên A i là các phần tử của dãy số. (1 ≤ i ≤ n, |A i | ≤ 10 6 ). Các số cách nhau bởi dấu cách 
Dữ liệu ra: Ghi ra file văn bản MIX.OUT 
Dòng 1: gồm một số nguyên k là độ dài của dãy con dài nhất tìm được 
Dòng 2: gồm k số nguyên là dãy con thỏa mãn đề bài 
Bài toán có thể có nhiều kết quả. In ra dãy con dài nhất đầu tiên khi xét từ trái qua phải 
Giải thích: 
i là biến chạy 
m lưu độ dài max của dãy đan dấu 
dau, cuoi: chỉ vào vị trí đầu và cuối của dãy đan dấu 
Ví dụ : 
N = 16 
Dãy a = 1 -2 3 -4 -5 6 -7 8 -9 -8 -7 6 -5 4 -3 2 
Độ dài dãy lớn nhất là: 6, từ vị trí 10 đến 15 (nhớ list đánh số bắt đầu từ 0) 
Dãy đan dấu lớn nhất là: -7 6 -5 4 -3 2 
Bài 5 
Cho 3 dãy số nguyên A, B, C mỗi dãy số gồm N phần tử 
Yêu cầu: tìm cột được tạo ba phần tử tương ứng của 3 dãy số A i , B i , C i có tổng lớn nhất 
Dữ liệu vào: Từ file văn bản 3SEQ.INP gồm: 
Dòng 1: gồm một số nguyên dương n (n ≤ 1000). 
Ba dòng tiếp theo mỗi dòng gồm n số nguyên dương có giá trị không quá 10 6 mô tả 3 dãy số đó. Các số cách nhau bởi dấu cách 
Dữ liệu ra: Ghi ra file văn bản 3SEQ.OUT gồm 1 số nguyên duy nhất là tổng của cột lớn nhất tìm được 

Tài liệu đính kèm:

  • pptxbai_giang_tin_hoc_11_bai_14_kieu_du_lieu_tep_nam_hoc_2022_20.pptx