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
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:
- bai_giang_tin_hoc_11_bai_14_kieu_du_lieu_tep_nam_hoc_2022_20.pptx