Vai trò của kiểu tệpTấ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ê
Trang 1Bài 14, 15
KIỂU DỮ LIỆU TỆP THAO TÁC VỚI TỆP
(1 tiết)
Trang 2I 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
Trang 3Đặ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
Trang 6II) Thao tác với tệp
Trang 7Một số mode cơ bản liên quan đến text file
Trang 8 Con trỏ file cũng sẽ đi từ dòng này qua dòng khác
Kết quả đọc được trả về dưới dạng một chuỗi
Nếu không đọc được gì, phương thức sẽ trả về một chuỗi có
độ dài bằng 0
Trang 10Lư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
• <File>.write(t”\n”)
Trang 12Ví 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
Trang 14BÀI TẬP
Bài 1: 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 MULSEQ.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 MULSEQ.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
Trang 16Với yêu cầu của đề, hãy hoàn thành chương trình sau
Trang 17Cách 1
Trang 19Bà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 ≤ 106)
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
Trang 22Hoặc: viết như này sẽ thuận hơn
Trang 23Bà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
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ố
Trang 26Bài 4
Cho một dãy số nguyên A có n phần tử: A1, A2, …An.
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 Ai là các phần tử của dãy số (1 ≤ i ≤ n, |Ai| ≤ 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
Trang 28Giả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
Trang 30Bài 5
Cho 3 dãy số nguyên A, B, C mỗi dãy số gồm N phần tử
Bi, Ci 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ị
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