Bài giảng Nhập môn Tin học - Phần 3: Ngôn ngữ lập trình Pascal - Đào Tăng Kiệm

- Sắp xếp lại danh sách lớp theo điểm trung bình giảm dần. 4.12. Cho một ma trận A vuông (mảng 2 chiều) có m hàng, m cột. - Tính trung bình cộng của cả ma trận. - Tính tổng các phần tử nằm phía trên đường chéo chính. - Tìm giá trị lớn nhất của các phần tử nằm phía dưới đường chéo chính. 4.13. Cho dữ liệu của một phường dân cư có m người. Biết các thông tin Tên chủ hộ, Địa chỉ, Tổng số nước tiêu thụ (m3) mỗi tháng của mỗi nhà trong 12 tháng. - Nhập các thông tin của từng hộ và In lên màn hình (Tên CH., Địa chỉ ,Tháng 1 .Tháng 12) - Tìm số lượng nước tiêu thụ trung bình cả phường trong năm. - Tìm tổng số nước tiêu thụ traong 12 tháng của từng hộ. - Lập danh sách những hộ có lượng tiêu thu nước > X m3 4.14. Cho một ma trận B (mảng 2 chiều) có m hàng, n cột. - Tìm giá trị nhỏ nhất của B - Xoá đi hàng và cột chứa giá trị nhỏ nhất đầu tiên (Xét theo hàng) của ma trận (Ma trận

pdf36 trang | Chia sẻ: huongthu9 | Lượt xem: 489 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Nhập môn Tin học - Phần 3: Ngôn ngữ lập trình Pascal - Đào Tăng Kiệm, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
trong miền theo một trật tự tự nhiên.  Cách khai báo: kiểu miền con cũng có thể khai báo trực tiếp hoặc gián tiếp có dạng Tên kiểu = Hằng cận dưới . . Hằng cận trên Ví dụ: Type thang = 1 .. 12 ; max = 1.. 100 Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm Bộ môn Tin học Xây dựng 9 Var A: array [ max] of real; TD,TC : thang; 5. Kiểu liệt kê:  Là một tập hợp hữu hạn các giá trị đặt trong cặp ngoặc tròn, được sắp xếp theo một thứ tự tùy ý ngăn cách nhau bởi dấu phẩy.  Cách khai báo: kiểu liệt kê cũng có thể khai báo trực tiếp hoặc gián tiếp có dạng Tên kiểu = (Giá trị1, giá trị2,. . . giá trị n); Ví dụ: Type Caukien = ( tuong, cot, dam,san, panen ) Var Btong, Thep: caukien ; 6. Kiểu xâu ký tự (String):  Xâu là một dãy ký tự có độ dài tối đa là 255 ký tự ( theo bảng mã ASCII). Xâu có thể dùng để chứa các tiêu đề, lời nhắc (hằng xâu); chứa các dữ liệu chữ, số, dấu như họ tên, địa chỉ, Xâu có thể là hằng, biến (đơn,mảng).  Khai báo xâu dùng từ khóa STRING .  Cách khai báo: Danh sách dữ liệu: String [n] ; trong đó n là độ dài của xâu  Ví dụ Ten:= ‘ Dai hoc xay dung’ ; Var HT : array [1 .. 10 ] of string [30] ; III. Các kiểu dữ liệu có cấu trúc – Cách khai báo 1. Khái niệm : Trong Turbo Pascal có 6 kiểu dữ liệu có cấu trúc: Array, Set, Record, File, String, Pointer. Muốn làm việc với các dữ liệu này, trước tiên phải khai báo tường minh chúng, một số loại có thể khai báo trực tiếp như Array, String, còn một số khác phải khai báo gián tiếp (mô tả cấu trúc – mô tả kiểu của dữ liệu trước khi khai báo chúng qua từ khóa Type). 2. Khai báo - mô tả kiểu:  Để mô tả một kiểu dữ liệu mới do người lập trình tự tạo dùng từ khóa TYPE có cấu trúc như sau: TYPE Tên kiểu = Mô tả cấu trúc  Ví dụ: Type Thang = [1..12] ; VT = array [1.. 50] of Real ; Hoso = Record HT : string [25] ; NS: integer; LT : array [1.. 30 ] of real ; End; Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm Bộ môn Tin học Xây dựng 10 3. Kiểu mảng (Array):  Khái niệm: - Mảng là loại dữ liệu có cấu trúc, là một tập hợp các phần tử có cùng kiểu dữ liệu. Mỗi mảng có một tên chung và các chỉ số để phân biệt giữa các phần tử mảng. Mảng có thể là 1 chiều véc tơ), 2 chiều (ma trận) hoặc n chiều. - Cũng như các biến khác, khi sử dụng mảng, phải khai báo, tuy nhiên, khác với các biến đơn, ngoài việc khai báo tên, kiểu của biến mảng còn phải khai báo số chiều, kích thước mỗi chiều của mảng để máy dành sẵn bộ nhớ cho các mảng. Mảng có thể khai báo trực tiếp trong Var hoặc khai báo gián tiếp qua Type. - Các chỉ số của phần tử mảng phải đặt trong cặp ngoặc vuông [ ]; Chỉ số mảng phải là số nguyên , có thể là các hằng, biến, biểu thức đơn giản. Các chỉ số ngăn cách nhau bởi dấu phẩy. Ví dụ A[i], C[i, j], B[1] ; HT [i+1] ; - Tên và chỉ số mảng có thể viết hoa hoặc chữ thường (như nhau)  Cách khai báo mảng: - Khai báo trực tiếp: Var Danh_sách_biến_mảng : array [n1 .. n2, m1.. m2, ..] of kiểu_phần_tử ; Trong đó n1,m1 là các chỉ số đầu, n2,m2 là các chỉ số cuối của mảng. Kiểu phần tử phải là một trong các kiểu đơn giản chuẩn hoặc kiểu mới (thì phải khai báo trước đó). Ví dụ : Var A,B : array [ 1.. 30 ] of real; HT: array [ 1.. 50 ] of string [20]; C: array [ 1.. 30, 1..5 ] of integer ; - Khai báo gián tiếp: Type Kiểu_mảng = array [n1 .. n2, m1.. m2, ..] of kiểu_phần_tử ; Var Danh_sách_biến_mảng : Kiểu_mảng ;  Ví dụ : Type VT1 = array [ 1.. 30 ] of real; VT2 = array [ 1.. 50 ] of string [20]; VT3 = array [ 1.. 30, 1..5 ] of integer ; HS = record HT, DC, Lop : string ; Diem: real ; End; Var A,B : VT1 ; HT :VT2 ; C: VT3; DSSV : HS; 4. Dữ liệu kiểu bản ghi  Khái niệm: - Bản ghi (Record) là dữ liệu có cấu trúc trong đó mỗi bản ghi có thể có nhiều trường (Field), mỗi trường có thể có kiểu dữ liệu và cấu trức khác nhau (đơn, mảng, bản ghi). - Bản ghi có thể là đơn (1 bản ghi) hoặc tập hợp với nhau trong một mảng, trong đó mỗi phần tử mảng là một bản ghi. - Bản ghi có thể lồng nhau: trong các trường của bản ghi lại có thể có bản ghi con. Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm Bộ môn Tin học Xây dựng 11 - Trước khi sử dụng bản ghi dưới dạng biến (đơn, mảng) , phải khai báo hay mô tả cấu trúc bản ghi qua từ khóa Type. - Tên của kiểu và tên trường bản ghi cũng tuân theo cách đặt tên thông thường của Pascal.  Cách khai báo - mô tả cấu trúc bản ghi: Type Tên_bản ghi = Record Tên trường 1 : Kiểu ; Tên trường 2 : Kiểu ; . . . . . . . . Tên trường n : Kiểu ; End;  Ví dụ: Khai báo gián tiếp Type HosoCB = record Hoten : string [30] ; Diachi : string [ 50 ] ; Gioi_tinh : Char ; SPthang: array [1.. 12] of integer ; Luong : real ; End; Var Canbo: HosoCB ; DS: array [ 1..50] of HosoCB ; Khai báo trực tiếp Var Canbo: record Hoten : string [30] ; Diachi : string [ 50 ] ; Gioi_tinh : Char ; SPthang: array [ 1.. 12 ] of integer ; Luong : real ; End; 5. Dữ liệu kiểu tập hợp  Khái niệm: Tập hợp là một số phần tử có cùng một số tính chất nào đó, có thể là các số tự nhiên, hoặc một trong các kiểu dữ liệu vô hướng (trừ kiểu thực –Real). Trong tập hợp không có phần tử trống. Số lượng phần tử cực đại trong tập tùy thuộc vào cấu hình máy (với Turbo Pascal là 256). Một tập được đặt trong cặp ngoặc vuông [ ]. Các thành phần của tập ngăn cách nhau bởi dấu phẩy (,).  Khai báo : tập cũng có thể khai báo trực tiếp hoặc gián tiếp qua từ khóa SET OF Khai báo trực tiếp Var Danh_sách_biến: SET OF Khai báo gián tiếp Type Tên_kiểu = SET OF Var Danh_sách_biến: Tên_kiểu  Ví dụ Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm Bộ môn Tin học Xây dựng 12 Type T1 = Set of 5..10 ; T2 = Set of 7.. 15 Var Mon _BB: T1 ; Mon_TC :T2 ;  Các phép tính với tập: Tập có thể tham gia các phép toán số học như : phép gán, phép hợp (+), hiệu (-), giao (*) và các phép tính so sánh (, = >= .), Ví dụ : Phép gán : T:= T1 kết quả : tập T giống hệt T1 Phép hợp : A:= T1+ T2 kết quả A [5 .. 15] : các phần tử thuộc T1 hoặc T2 Phép hiệu: B:= T1- T2 kết quả B [5,6] : các phần tử thuộc T1không thuộc T2 Phép hợp : C:= T1* T2 kết quả C [7 .. 10] : các phần tử thuộc cả T1 và T2 Phép so sánh T1= T2 kết quả : Sai – False Phép so sánh T1> T2 kết quả : Sai - False Phép so sánh T1< T2 kết quả : Đúng – True vì T1 là tập con của T2 IV. Khai báo 1. Khai báo nhãn :  Nhãn là một số nguyên không dấu (tối đa là 4 chữ số) một ký tự hoặc một tên gọi của Pascal được dùng làm mốc trong chương trình, đánh dấu vị trí cần chuyển đến của chương trình. Các câu lệnh đều có thể được gán nhãn. Nhãn đặt ở đầu dòng, cách câu lệnh bằng dấu hai chấm ( :). Các nhãn không được trùng nhau.  Khai báo nhãn : bằng từ khóa Label, có dạng: Label : danh_sách_nhãn ; Danh sách nhãn : tên các nhãn ngăn cách nhau bởi dấu phẩy.  Ví dụ : Label : 10, ‘A’ ; 2. Khai báo hằng:  Hằng là một đại lượng có giá trị không đổi trong các lần thực hiện chương trình. Hằng có thể sử dụng qua một tên và được gán giá trị cụ thể. Các tên của hằng tham gia trong chương trình sẽ tự động được gán giá trị đã khai báo. Khi cần thay đổi giá trị của hằng, chỉ cần thay trong phần khai báo, chương trình sẽ tự động cập nhật.  Cách khai báo: CONST Tên hằng = giá trị ; Ví dụ : CONST SoPT= 30 ; SoHS= 50 ; Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm Bộ môn Tin học Xây dựng 13 3. Khai báo biến:  Tất cả các biến dùng trong chương trình đều phải đặt tên (khác nhau) và phải khai báo. Tên biến dùng để xác lập quan hệ giữa biến, địa chỉ bộ nhớ lưu giữ biến. Biến là một đại lượng có giá trị thay đổi trong mỗi lần thực hiện chương trình.  Cấu trúc và cách khai báo - Khi nhập dữ liệu, với một tên, Biến chỉ nhận 1 giá trị tại mỗi thời điểm gọi là biến đơn. - Với cùng một tên nhưng biến có nhiều phần tử khác nhau, ứng với mỗi phần tử là một giá trị riêng gọi là biến mảng. - Khai báo biến dùng từ khoá VAR. Khai báo biến để chương trình xác lập mối quan hệ giữa tên biến và kiểu sẽ được gán và sử dụng cho biến sau này. Cách khai báo: VAR Danh_sách_biến: Kiểu_biến; + Danh sách biến là tập hợp nhiều tên biến có cùng kiểu, ngăn cách nhau bởi dấu phẩy ( , ) + Kiểu của biến phải là một trong các kiểu dữ liệu chuẩn (có sẵn trong Pascal) hoặc kiểu dữ liệu mới do ngưởi lập trình đã định nghĩa trước đó.  Ví dụ: Var I, m : integer ; A,B,C : real ; X, Y: arrray [ 1.. SoPT ] of real; Z : V1; V. Biểu thức 1. Khái niệm chung: Biểu thức có thể là một hằng, một biến, một hàm mẫu hoặc kết hợp các hằng, biến, hàm bằng các phép tính (toán tử) và các cặp ngoặc tròn. Có 4 loại biểu thức: biểu thức số học, biểu thức so sánh (BT quan hệ), biểu thức xâu, biểu thức logic. Tùy từng loại biểu thức mà kết quả có thể là các giá trị số, ký tự hoặc một trong 2 giá trị đúng (True) hoặc sai (False). 2. Biểu thức số học :  Đặc điểm: - Có 2 loại, biểu thức nguyên và biểu thức thực. - Các dấu (phép tính) của biêủ thức nguyên : +, -, *, div, mod - Các dấu (phép tính) của biêủ thức nguyên : +, -, *, /  Qui tắc viết: - Không viết hai biến hoặc hai phép tính liền nhau; - Chỉ sử dụng các dấu ngoặc tròn, số lượng tùy ý  Qui tắc thực hiện: Thực hiện các phép tính trong ngoặc từ trong ra ngoài. Trong cùng một cặp ngoặc, ưu tiên thực hiện: - Thực hiện các hàm mẫu - Các phép nhân, chia, div, mod theo trật tự từ trái sang phải. Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm Bộ môn Tin học Xây dựng 14 - Các phép tính cộng, trừ từ trái sang phải.  Chú ý: - ab khác với a*b ; b/2a khác với b/2*a và b/(2*a) - Không sử dụng các ký hiệu toán học α,β,δ,√và ký hiệu vật lý nhưλ,µ,ν trong biểu thức của Pascal. - Không sử dụng các chỉ số trên x2, chỉ số dưới x2 trong biểu thức. Các thành phần của biểu thức phải viết trên cùng một dòng ( không có tử số, mẫu số).  Ví dụ: Biểu thức toán học Viết theo Pascal (sin(α)- cos(β))( x2 +y2) √(x+y) (sin(alpha) - cos(beta)*( x*x +y*y))/ (sqrt(x+y) 1 a + b2 c2 1/( a+ ( sqr(b) /sqr(c) )) 3. Biểu thức so sánh (quan hệ)  Đặc điểm: - Là biểu thức có hai vế có thể so sánh với nhau về giá trị hoặc thứ tự. Các vế của biểu thức so sánh có thể là biểu thức số học hoặc biểu thức xâu. - Kết quả của biểu thức so sánh chỉ nhận một trong hai giá trị đúng (True) hoặc sai (False).  Các dấu (phép tính) của biêủ thức so sánh: >, >=, ( lớn hơn, lớn hơn hoặc bằng, nhỏ hơn, nhỏ hơn hoặc bằng, bằng, khác).  Qui tắc viết: - Tuân theo qui tắc của biểu thức số học. - Không được viết 2 phép tính liền nhau. Khi có nhiều hơn 2 phép tính quan hệ, phải kết hợp với các dấu ngoặc tròn và phép tính logic ( xem phần sau).  Qui tắc thực hiện: - Ưu tiên thực hiện các phép tính số học theo các qui ước của phép tính số học. - Thực hiện các phép tính so sánh.  Ví dụ: Biểu thức toán học Viết theo Pascal b2 - 4ac ≥ 0 sqr(b) – 4*a*c >= 0 -b ± √∆ X1,2 = 2a X1:= -b + sqrt (Delta) )/(2*a) X1:= -b - sqrt (Delta) )/(2*a) 4. Biểu thức logic  Đặc điểm: - Trong biểu thức logic có thể là các thành phần của biểu thức số học, BT xâu, các phép tính của BT so sánh và liên kết với nhau qua ít nhất một phép tính logic. Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm Bộ môn Tin học Xây dựng 15 - Kết quả của biểu thức logic chỉ nhận một trong hai giá trị đúng (True) hoặc sai (False).  Các dấu (phép tính) của biêủ thức logic: NOT, AND, OR : phủ định, nhân logic (và), cộng logic (hoặc).  Qui tắc viết: - Tuân theo qui tắc của biểu thức số học, biểu thức so sánh. - Không được viết 2 phép tính liền nhau. - Khi kết hợp nhiều phép tính phải kết hợp với các dấu ngoặc tròn.  Qui tắc thực hiện: - Ưu tiên thực hiện các phép tính số học theo các qui ước của phép tính số học. - Thực hiện các phép tính so sánh. - Thực hiện các phép tính logic.  Ví dụ: Biểu thức toán học Viết theo Pascal Li 45 (L[i] 45) Aij >0 và Aij 0) AND (A[i,j] < Tbc) 5. Biểu thức xâu  Đặc điểm: - Trong biểu thức xâu các thành phần chỉ có thể là các hằng, biến, hàm xâu và các phép toán xâu. - Các dấu (phép tính) của biêủ thức xâu: phép + (ghép) và các phép tính so sánh. - Kết quả của BT xâu có giá trị xâu.  Qui tắc thực hiện: - Thực hiện các phép tính trong ngoặc từ trong ra ngoài. - Thực hiện các hàm mẫu xâu - Các phép cộng, so sánh từ trái sang phải. 6. Hàm mẫu Hàm mẫu là những modul chương trình hay được sử dụng, đã được viết sẵn, dịch và cài trong thư viện chương trình dịch của ngôn ngữ. Khi dùng, người lập trình chỉ cần gọi nó ra theo qui định: qua tên được đặt cho hàm mẫu và các đối số trong cặp ngoặc tròn. Kết quả tính sẽ được trả về nơi gọi hàm mẫu. Các đối số có thể là hằng, biến, biểu thức.  Các hàm mẫu của biểu thức số học: X là đối số Ký hiệu toán học Hàm mẫu Ký hiệu toán học Hàm mẫu Ký hiệu toán học Hàm mẫu X2 Sqr (X) ∣X∣ Abs (X) Cos x Cos (X) √x Sin x Sin (X) Ln x Ln (X) ex Exp (X) Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm Bộ môn Tin học Xây dựng 16 Chương 3 MỘT SỐ LỆNH CƠ BẢN CỦA PASCAL I. Các lệnh (thủ tục) nhập – xuất (In) dữ liệu 1. Thủ tục viết dữ liệu ra màn hình: 1.1. Màn hình và con trỏ: Vùng làm việc của Pascal chiếm phần lớn màn hình, người sử dụng có thể gõ nội dung của từng chương trình hoặc là nơi hiện kết quả. Con trỏ trong màn hình Pascal định vị vị trí làm việc hiện thời, nó có thể ở chế độ thay thế (overwrite) hoặc chế độ chèn (insert). Có thể dùng các phím mũi tên để di chuyển con trỏ đến vị trí mong muốn. Trong đó, các từ khóa hiện màu trắng, còn lại các câu lệnh màu vàng. Một số qui ước viết trong dạng tổng quát của các câu lệnh: : những thành phần bắt buộc của câu lệnh. [ ] : nhứng thành phần không bắt buộc. 1.2. Các thủ tục in dữ liệu:  Dạng tổng quát : WRITE [LN] ; WRITELN;  Ý nghĩa: - Lệnh dùng để in các dòng văn bản, thông báo, chú giải, các kết quả tính toán trên màn hình, - Danh sách biểu thức là tập hợp các biểu thức ngăn cách nhau bởi dấu phẩy, có thể là các hằng, các biến hoặc biểu thức đơn giản (của một trong các loại biểu thức). - Nếu là giá trị hằng, lệnh sẽ in nguyên giá trị. - Nếu là biến, lệnh sẽ in giá trị của biến đã có (đang nằm trong bộ nhớ trong). Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm Bộ môn Tin học Xây dựng 17 - Nếu là biểu thức, lệnh sẽ tính toán biểu thức và in lên màn hình kết quả đã tính. - Cấu trúc và cách thực hiện của Write hoặc Writeln là giống nhau. - Lệnh Writeln không có tham số chỉ có tác dụng chuyển con trỏ xuống dòng dưới hoặc in ra một dòng trống.  Ví dụ : Writeln ( ’ Moi ban nhap du lieu’) ; ( Xuất dữ liệu dạng hằng xâu - dòng văn bản ) Writeln ( ’ Nam nay la ‘, 2012); ( Hằng xâu+ giá tị số ) Writeln ( X[1]) ; Write (C[i]) ; ( Xuất các dữ liệu là các phần tử mảng ) Writeln ( ’ Tong cac phan tu la :’ , T:8:2); ( Hiện trên màn hình : Chú giải + kết quả tính ) Write ( SV[i]. Hoten : 20, SV[i]. DTB : 6:1); ( Xuất DL là các trường của biến bản ghi)  Các lưu ý: Nếu là lệnh Write, sau khi in kết quả, con trỏ vẫn nằm trên cùng dòng, còn nếu dùng lệnh Writeln, sau khi in, con trỏ sẽ tự động xuống dòng dưới. - Khi in kết quả lên màn hình bằng lệnh Write có thể in không qui cách hoặc có qui cách. - Thường kết hợp lệnh Write với lệnh Read để nhập dữ liệu, lúc này lệnh Write đóng vai trò là lời nhắc. - Khi in các mảng ra màn hình, phải kết hợp lệnh Wwite với các lệnh chu trình vì mỗi lệnh write chỉ in được 1 phần tử. - Có thể viết nhiều lệnh Write trên 1 dòng lệnh, tuy nhiên các kết quả in trên cùng hay khác dòng phụ thuộc vào sử dụng Write hay Writeln. Ví dụ: Write (A) ; Write (B) ; Write (C) (3 giá trị của A,B,C in trên cùng 1 dòng) Writeln (A) ; Writeln (B) ; Writeln (C) (3 giá trị của A,B,C in trên 3 dòng) 1.3. Cách in dữ liệu trên màn hình  In không quy cách (không định dạng): Các giá trị trong một câu lệnh lần lượt in ra nối tiếp nhau theo chặn trái. - Nếu biểu thức là hằng xâu và hằng nguyên, nó in đúng giá trị đang có. Nếu là số thực, nó sẽ in theo dạng khoa học (mỗi giá trị chiếm 18 ô trên màn hình, dạng lũy thừa). Ví dụ : Lệnh của Pascal Giá trị của biểu thức Kết quả hiện trên màn hình Writeln (‘ Ket qua tinh toan ‘ ); ‘ Ket qua tinh toan ‘ Ket qua tinh toan Writeln ( SL) ; 12 12 Wwiteln ( Max,Min) ; Max = 125.7 , Min =23.3 0.125700000000E03 0.233000000000E02  In theo quy cách: (Có định dạng): Các giá trị trong một câu lệnh lần lượt in ra liên tiếp nhau, mỗi giá trị sẽ được đặt trong một vùng qui định trong câu lệnh, theo chặn phải. - Nếu biểu thức là hằng xâu và hằng nguyên, nó in theo dạng (Tên hằng :n). Nếu là số thực, nó sẽ in theo dạng : Tên biến : n :TP . Trong đó n là tổng số ô trên màn hình dành Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm Bộ môn Tin học Xây dựng 18 cho để in giá trị của biến (kể cả dấu, phần thập phân, dấu chấm thập phân), TP là số ô dành riêng cho phần thập phân. - Nếu các giá trị không sử dụng hết phần định dạng, sẽ để trống phía trước, nếu số vị trí định dạng khai báo không đủ, sẽ báo lỗi. Ví dụ : Lệnh của Pascal Giá trị của biểu thức Kết quả hiện trên màn hình Writeln (’ Ket qua tinh toan ’ :20 ); ‘ Ket qua tinh toan ‘ - - - Ket qua tinh toan Writeln ( SL: 6) ; 12 - - - -12 Wwiteln ( Max : 8:2, Min:8:1) ; Max= 125.7 , Min =23.3 - - 125.70 - - - - 23.3 For i:= 1 to 3 Do Write ( X[i]: 6:1); X[1]=124 X[2]= -35.6 X[3]= 298.32 _124.0_-35.6_298.3 1.4. In dữ liệu ra giấy (Máy in) : cấu trúc và cách sử dụng lệnh giống như in trên màn hình, trong trường hợp này chỉ thêm vào các câu lệnh tham số của máy in (LST, hoặc LP1, LP2...) Dạng : WRITE [LN] ( LST, ); 2. Thủ tục nhập dữ liệu từ bàn phím  Dạng tổng quát : READ [LN] ; READLN;  Ý nghĩa: - Lệnh READ [LN] dùng để nhập dữ liệu từ bàn phím vào bộ nhớ trong. - Danh sách biến là tập hợp các biến ngăn cách nhau bởi dấu phẩy (không được là hằng hay biểu thức). - Lệnh READLN; không phải để nhập dữ liệu, có thể đặt ở cuối chương trình (trước lệnh END. ) chỉ có tác dụng dừng màn hình ( xem kết quả ). - Cấu trúc và cách thực hiện của Read hoặc Readln là giống nhau, chỉ khác là lệnh Readln sau khi nhập dữ liệu con trỏ tự chuyển xuống dòng dưới.  Ví dụ : Readln ( A,B,C) ; ( Nhập cho biến đơn) Read ( X[i] ) ; ( Biến mảng) Readln ( SV[i]. Hoten , SV[i]. MS); ( Biến bản ghi )  Các lưu ý và ví dụ minh họa: - Lệnh Read chỉ được kích hoạt khi chạy chương trình. Mỗi lần gặp lệnh Read, chương trình dừng thực hiện, chuyển màn hình và đợi người dùng nhập các giá trị của các biến trong lệnh Read. Các giá trị này phải tương ứng với danh sách biến về số lượng, Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm Bộ môn Tin học Xây dựng 19 thứ tự và kiểu đã khai báo. Nếu một trong các yếu tố này không phù hợp, chương trình vẫn dừng không thực hiện tiếp. - Khi nhập dữ liệu (ứng với danh sách biến trong lệnh Read), các dữ liệu phải ngăn cách nhau ít nhất một ô trống. Khi nhập xong dữ liệu, nhấn phím Enter để thực hiện lệnh. Ví dụ : Var m : interger ; X : real ; Ten : string [10] ; Readln ( m, X) ; Nhập dữ liệu: 20 15.5 ↲ Readln ( Ten ) ; Nhập dữ liệu: Xay dung ↲ - Vì bản thân lệnh Read [ln] không thông báo được cho người dùng biết đang đợi biến gì, bao nhiêu biến nên người dùng thường kết hợp lệnh Write với lệnh Read trong quá trình nhập dữ liệu. Lúc này lệnh Write đóng vai trò là lời nhắc, tuy nhiên lệnh Write có thể có hoặc không, nhưng Read bắt buộc phải có. Ví dụ : Write ( ‘ Dua vao so phan tu mang ‘ ); Readln ( n ) ; - Khi nhập các mảng dữ liệu, phải kết hợp lệnh Read với các lệnh chu trình vì mỗi lệnh read chỉ nhận được hữu hạn phần tử. Ví dụ: For i:= 1 to n Do Begin Write (’ A[ ’ , i , ’ ] ’ ); Readln ( A [i] ); End ; - Trong 1 câu lệnh Read chỉ nên nhập cho một loại biến: String, hoặc Char hoặc biến số (Integer – Real). - Giá trị logic không nhập được từ bàn phím. 3. Thủ tục xóa màn hình  Ý nghĩa : Sau khi chạy một bài toán, các dữ liệu nhập vào và kết quả xuất ra của bài toán vẫn nằm trên màn hình khi ta thực hiện bài toán tiếp theo. Để bài toán của mình luôn bắt đầu từ một màn hình mới ta phải xóa màn hình trước khi thực hiện.  Dạng lệnh : CLRSCR; Lệnh thường được đặt ở đầu chương trình. Khi lệnh thực hiện, mọi thông tin cũ trên màn hình sẽ xóa sạch, con trỏ trở về góc trái dòng trên cùng.  Chú ý : Lệnh chỉ thực hiện khi ta đã khai báo trÌnh USES CRT;  Ví dụ Uses Crt; Var a,b,c : real; BEGIN Clrscr; Write (a,b) ; Readln ( a,b); C:= a*a + b*b ; Writeln (’ C= ’ , C:6:1); . END. Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm Bộ môn Tin học Xây dựng 20 II. Lệnh gán  Khái niệm: Lệnh dùng để gán giá trị của một biểu thức cho một biến.  Dạng lệnh: Tên_biến := Biểu thức ;  Cách thực hiện lệnh: Khi gặp lệnh chương trình tính toán giá trị của biểu thức và gán giá trị này cho tên biến.  Các lưu ý: - Dấu của phép gán trong Pascal là := - Tên biến chỉ có thể là một tên và biến có thể là biến đơn hặc phần tử mảng, là giá trị cần tìm. - Biểu thức có thể là một trong 4 loại biểu thức. Đơn giản nó có thể là một hằng, một biến. - Kiểu của biến và biểu thức phải cùng loại.  Ví dụ: - Một số lệnh gán minh hoạ cho câu lệnh I := 1 ; T:= 0 ; X1 := -b + sqrt ( Del) / (2*a) ( Gán dữ liệu đơn ) Max := A[1] ; Z [i] := X [i,j ] + Y[i] ( Gán dữ liệu mảng ) SV[i]. Ten := HT[i].Ten ; (Gán dữ liệu bản ghi) - Sử dụng các lệnh vừa học để viết chương trình Pascal tính các đại lượng Chu vi đáy, Diện tích đáy, Diện tích xung quanh, Diện tích toàn phần, Thể tích cho một hình trụ có chiều cao H, bán kính R. (Ví dụ 1 phần thuật toán ). Program Tinh_hinh_tru; Uses Crt; Var R,H, CVD, DTD, DTXQ, DTTT, TT : real ; BEGIN Clrscr; Write (’ Nhap kich thuoc R,H cua hinh tru ’ ) ; Readln (R,H); CVD := 2* PI* R ; DTD := PI* R*R ; DTXD := CVD*H ; DTTP := DTXQ + 2* DTD ; TT := DTD*H ; Writeln ( ’ Cac ket qua tinh toan ’ ); Writeln ( ’ Chu vi day = ’ , CVD:8:2 ); Writeln ( ’ Dien tich day = ’ , DTD:8:2 ); Writeln ( ’ Dien tich xung quanh = ’ , DTXQ:8:2 ); Writeln ( ’ Dien tich toan phan = ’ , DTTT:8:2 ); Writeln ( ’ The tich = ’ , TT:8:2 ); Readln END. Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm Bộ môn Tin học Xây dựng 21 III. Các lệnh điều khiển (Rẽ nhánh) 1. Lệnh GOTO  Khái niệm –ý nghĩa: Lệnh GOTO là lệnh chuyển điều khiển không điều kiện.  Dạng lệnh : GOTO n ;  Cách sử dụng và cách thực hiện: - Trong đó n là tên nhãn đặt ở đầu câu lệnh muốn chuyển đến. - Lệnh được dùng khi chuyển hướng thực hiện của chương trình đến một vị trí bất kỳ trong chương trình.  Các lưu ý : Khi dùng lệnh GOTO thì nhãn n phải được khai báo trước trong từ khóa Label.  Ví dụ: Sử dụng lệnh IF và GOTO để nhập dữ liệu cho mảng một chiều có 10phần tử Program Nhap_du_lieu_cho_mang_A; Uses Crt; Label 10 ; Const m= 10; Var i: integer ; A: array [1..m ] of Real ; BEGIN Clrscr; Write (’ Nhap gia tri cac phan tu cua A ’ ) ; i := 1 ; 10:Read ( A[ i] ); i := i + 1 ; If i<= n Then Goto 10; END. 2. Câu lệnh rẽ nhánh IF (IF THEN ELSE)  Khái niệm – ý nghĩa: Lệnh IF THEN ELSE là lệnh chuyển điều khiển có điều kiện, thường dùng thể hiện cho các dạng thuật toán phân nhánh (nhánh đôi hoặc phân nhánh lồng nhau)  Dạng lệnh: IF THEN Nhóm lệnh 1 ELSE Nhóm lệnh 2 ; IF THEN Nhóm lệnh ;  Giải thích các đại lượng : - Trong đó IF THEN ELSE là các từ khoá, Biểu thức điều kiện là một trong 4 loại biểu thức, thông thường hay sử dụng biểu thức so sánh và BT logic. Kết quả của các biểu thức này chỉ nhận một trong 2 giá trị “đúng” hoặc “sai” . Với biểu thức số học, giá trị âm là sai, giá trị dương ( cả bằng 0) là đúng. Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm Bộ môn Tin học Xây dựng 22 - Nhóm lệnh có thể là một hoặc nhiều lệnh phải thực hiện trong nhánh. Nếu chỉ có 1 lệnh, viết ngay sau Then, Else, nếu từ hai lệnh trở lên phải đặt trong khối Begin End;  Cách thực hiện : Khi gặp lệnh, chương trình tính toán và kiểm tra biểu thức điều kiện, nếu kết quả của biểu thức là “đúng” bỏ qua Nhóm lệnh 2, thực hiện Nhóm lệnh 1 và thực hiện tiếp các lệnh sau IF; nếu kết quả của biẻu thưc điều kiện là sai bỏ qua Nhóm lệnh 1, thực hiện Nhóm lệnh 1và thực hiện tiếp các lệnh sau IF;  Các lưu ý : - Trong câu lệnh có cả Then, Else là lệnh đầy đủ, dạng lệnh không đầy đủ là chỉ có nhánh Then. - Nếu là lệnh đầy đủ thì End của Begin End của nhánh Then không được viết dấu chấm phẩy (; ). - Nếu Nhóm lệnh có từ 2 lệnh trở lên thì các lệnh này phải đặt trong khối Begin End; - Các lệnh IF có thể lồng nhau.  Ví dụ: - Các lệnh IF minh hoạ cho câu lệnh: + IF a>b THEN Max := a ELSE Max := b ; + IF a [i ,j ] >0 THEN begin T:= T+ a [i ,j ] ; SL := SL +1 ; End; - Viết chương trình Tìm giá trị lớn nhất, nhỏ nhất trong 3 số a,b,c bất kỳ. Program Tim_Max_Min_trong 3_so_abc; Uses Crt; Var a, b, c, Max, Min : real ; BEGIN Clrscr; Write (’ Nhap cac gia tri cua a, b, c ’ ) ; Readln (a, b, c ); IF a>b THEN Begin Max := a ; Min := b ; End ELSE Begin Max := b ; Min := a End; IF c > Max Then Max := c ; IF c < Min Then Min := c ; Writeln ( ’ Gia tri lon nhat trong 3 so la : ’ , Max:8:2 ); Writeln ( ’ Gia tri nho nhat trong 3 so la : ’ , Min:8:2 ); Readln END. Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm Bộ môn Tin học Xây dựng 23 - Viết chương trình để Giải phương trình bậc 2 : ax2 +bx + c =0 (Thuật toán Ví dụ 3) Program GPTbac2; Var a, b, c, delta, x1, x2: real; BEGIN repeat write ( 'nhap gia tri cho a: ' ); readln(a); until a0; write ( 'nhap gia tri cho b: ' ); readln(b); write ( 'nhap gia tri cho c: '); readln(c); delta:=b*b-4*a*c; IF delta>=0 Then begin x1:=(-b+sqrt(delta))/(2*a); x2:=(-b-sqrt(delta))/(2*a); writeln('Nghiem x1= ',x1:7:1); writeln('Nghiem x2= ',x2:7:1); end Else writeln( ' Phuong trinh vo nghiem! ' ); readln end. 2. Câu lệnh lựa chọn CASE (CASE OF)  Khái niệm – ý nghĩa: Lệnh CASE OF là lệnh chuyển điều khiển có điều kiện, thường dùng viết cho các bài toán cần phân nhiều nhánh theo một điều kiện nào đó.  Dạng lệnh : CASE OF M1 : Nhóm lệnh 1 ; M2 : Nhóm lệnh 2 ; . Mn : Nhóm lệnh n ; [ ELSE Nhóm lệnh n+1 ; ] END;  Giải thích các đại lượng : - Biểu thức chọn thường là biểu thức nguyên hoặc BT xâu. - Mi: là giá trị có thể có của biểu thức chọn, nó có thể là một hằng nguyên, ký tự hoặc tập hợp con của các số nguyên, các ký tự. Tập hợp này có thể có kiểu miền con (5..10, 15..20) , (‘a’ .. ‘h’) hoặc kiểu liệt kê (4,7,9 ) , ( ‘ a’ , ‘h’, ‘ g’). - Câu lệnh có cả Else là lệnh đầy đủ, lệnh không có Else là lệnh không đầy đủ.  Cách thực hiện: - Chương trình xét biểu thức chọn, lần lượt kiểm tra giá trị của biểu thức chọn có thuộc một trong các giá trị của Mi hay không, nếu đúng thì Nhóm lệnh i tương ứng được Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm Bộ môn Tin học Xây dựng 24 thực hiện và kết thúc lệnh. Nếu giá trị của biểu thức chọn không nằm trong Mi nào thì Thoát khỏi lệnh ( dạng không đầy đủ ) hoặc thực hiện Nhóm lệnh n+1 (nhánh Else) với dạng đầy đủ. - Mỗi lần thực hiện chỉ có một nhánh (Một nhóm lệnh) được thực hiện. - Với dạng đầy đủ lúc nào cũng có ít nhất một nhánh thực hiện, còn dạng không đầy đủ, có thể không có nhánh nào được thực hiện.  Các lưu ý : - Biểu thức chọn là các biến nguyên hoặc ký tự. Tuỳ từng phiên bản mà nó có thể là biến mảng. - Nếu Nhóm lệnh có từ 2 lệnh trở lên thì các lệnh này phải đặt trong khối Begin End; - Các lệnh CASE có thể lồng nhau. Các lệnh Case như các cặp ngoặc tròn và thực hiện từ trong ra ngoài. Tuy nhiên từ nhóm trong có thể chuyển ra ngoài nhưng cấm các lệnh từ nhóm ngoài chuyển vào trong.  Ví dụ : - Các ví dụ minh hoạ cho lệnh : CASE Tuoi OF 1..5 : Writeln (‘Chưa đi học 1’); 6..10 : Writeln (‘Hoc sinh cap 1’); 11..14 : Writeln (‘Hoc sinh cap 2’); 15..17 : Writeln (‘Hoc sinh cap 3’); 18..23 : Writeln (‘Sinh viên’); ELSE Writeln (‘ Cac loai hinh khac’); End; CASE Dthi [i] OF 0..4 : Writeln (‘Sinh vien kem’); 5..6 : Writeln (‘Sinh vien trung binh’); 7..8 : Begin Slk := Slk + 1; j:= j+1; HSk [j] := HT [i] ; End 9..10 : Begin Slg := Slg + 1; k:= k+1; HSg [j] := HT [i] ; End END; III. Các lệnh chu trình (Cấu trúc lặp) Ở phần trên ta mới xét đến các dạng bài toán thực hiện đơn lẻ các phép tính hoặc các phép xử lý. Trong nhiều bài toán (đặc biệt khi xử lý dữ liệu mảng), ta phải lặp lại nhiều lần một số lệnh nào đó với dạng tổng quát không thay đổi. Nếu viết lặp lại các công thức này thì dài, nhàm chán và không thể nếu chưa biết số lần lặp. Để thể hiện dạng thuật toán lặp, người ta đưa ra cấu trúc cho một hoặc nhiều vòng lặp lồng nhau. Với các dạng thuật toán lặp, Pascal xử dụng các lệnh For To Do, While Do, Repeat Until hoặc các lệnh gán kết hợp với IF – Goto để thể hiện cho vòng lặp biết trước số lần lặp hoặc vòng lặp không xác định. Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm Bộ môn Tin học Xây dựng 25 1. Câu lệnh lặp với số lần lặp xác định FOR ( FOR TO DO)  Khái niệm: Lệnh For To Do dùng cho các bài toán lặp với số lần lặp đã xác định và bước nhẩy (số gia) của biến điều khiển chỉ là +1 hoặc -1.  Cấu trúc lệnh : FOR Bđk := n1 TO n2 DO Các lệnh lặp ; FOR Bđk := n1 DOWNTO n2 DO Các lệnh lặp ;  Giải thích các đại lượng : - Bđk là biến điều khiển hay biến đếm của chu trình. n1 và n2 là giá trị đầu và giá trị cuối của biến điều khiển, chúng phải là các hằng, biến hoặc biểu thức đơn giản có kiểu nguyên hoặc ký tự. - Miền tác động của lệnh (Các lệnh lặp) có thể là 1 hoặc nhiều lệnh sẽ được thực hiện với số vòng lặp |n1-n2| lần.  Cách thực hiện của lệnh: Khi gặp lệnh, chương trìnhc thực hiện cũng gồm 4 bước như trong phần thuật toán. Có thể hiểu là: Các lệnh lặp sẽ được thực hiện nhiều lần với giá trị của biến điều khiển từ n1 đến n2. Câu lệnh sẽ tự động thực hiện các bước: gán giá trị đầu, tăng và kiểm tra giá trị cuối của biến điều khiển (mà không thể hiện từng bước này trong câu lệnh).  Các lưu ý: - Nếu Miền tác động có 1 lệnh thì viết ngay sau Do, nếu có từ 2 lệnh trở lên thì các lệnh này phải đặt trong khối Begin End; - Khôngcó dấu ; sau Do - Các lệnh có thể lồng nhau, tuy nhiên các vòng lặp không được cắt nhau. - Vòng lặp trong có thể kết thức trước khi đến giá trị cuối của biến điều khiển và chuyển ra vòng lặp ngoài, tuy nhiên không thể chuyển từ vòng lặp ngoài vào vòng lặp trong. - Lệnh For to Do là loại lệnh thực hiện trước, kiểm tra sau, do vậy ít nhất sẽ thực hiện 1 lần. - Trong miền tác động của lệnh không được có lệnh nào làm biến đổi giá trị đầu, cuối của biến điều khiển.  Ví dụ: - Các ví dụ minh hoạ cho câu lệnh. + FOR i := 1 TO n DO T:=T + A[i] ; (Tính tổng 1 véc tơ) + FOR i := 1 m DO (Nhập dữ liệu và tính tổng cho mảng A) Begin Write (’ A[ ’ , I , ’ ] = ’); Readln ( A[i] ); T:=T + A[i] ; End; - Các bài tập: + Bài tập 1: Viết chương trình Tìm giá trị lớn nhất của một vecto (Ví dụ 6 phần thuật toán) Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm Bộ môn Tin học Xây dựng 26 Program tim_max_cua_vec_to; Var i,n: integer; a: array [1 .. 50] of real; ln:real; BEGIN write('Nhap so phan tu n='); readln (n); for i:=1 to n do Begin Write ( 'Nhap gia tri cua phan tu thu ', i, ': ' ); Readln (a[i]); End; ln:= a [1]; for i:=1 to n do if a[i]> ln then ln := a[i]; writeln ('Gia tri lon nhat cua day so la ', ln: 10:2); readln; END. + Bài tập 2: Cho một ma trận B có mxn phần tử. Viết chương trình Pascal tính số lượng các phần tử > K trong từng hàng và tích các phần tử < K trong cả ma trận. Program Tim_so_luong_Tich ; Var i, j, m, n, dem : integer; B: array [1.. 10, 1.. 10 ] of real; Sl: array [1.. 10 ] of integer; K, Tich :real ; BEGIN Write ( ' Nhap so phan tu cua ma tran m, n= ' ); Readln (m, n); Write ( ' Nhap gia tri K = ' ); Readln (k); for i:=1 to m do for j:=1 to n do Begin Write ('Nhap gia tri cua phan tu B [', i, ',' , j , ’ ] ’ ); Readln ( B [ i,j ] ); End; For i := 1 to m do Begin SL [i] := 0 ; for j := 1 n do If B [ i, j ] > K Then SL [i] := SL [i] +1 ; End; Tich := 1 ; dem := 0 ; For i := 1 to m do for j := 1 n do If B [ i, j ] < K Then Begin Tich := Tich * B [I,j] ; Dem := Dem + 1 ; End; Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm Bộ môn Tin học Xây dựng 27 { Xuat ket qua } Wwiteln ( ’ So luong cac phan tu cua tung hang > K ’ ); For i:= 1 to m do Writeln ( ’ Hang ’ , i , ’ : ’ , SL [[i] :5 ) ; If Dem 0 Then Writeln ( ’ Tich cac phan tu < K = ’ , Tich : 8:2 ) Else Writeln ( ’ Khong co phan tu nao < K , Tich = 0 ’ ) . Readln END. 2. Câu lệnh lặp kiểm tra điều kiện trước - WHILE (WHILE DO)  Khái niệm: Lệnh While Do dùng cho cả 2 dạng bài toán lặp với số lần lặp đã xác định và không xác định .  Cấu trúc lệnh : WHILE DO Các lệnh lặp ;  Giải thích các đại lượng : - Biểu thức điều kiện là biểu thức so sánh hoặc Logic, kết quả của nó chỉ nhận một trong 2 giá trị đúng hoặc sai. - Miền tác động của lệnh (Các lệnh lặp) có thể là 1 hoặc nhiều lệnh sẽ được thực hiện khi điều kiện đúng.  Cách thực hiện của lệnh: Khi gặp lệnh, chương trình kiểm tra giá trị của BTĐK, các lệnh lặp sẽ được thực hiện khi giá trị của biểu thức điều kiện vẫn là “đúng” và sẽ dừng thực hiện ngay khi giá trị của BTĐK nhận giá trị “sai” .  Các lưu ý : - Khi sử dụng lệnh While Do cho các thuật toán chu trình phải chú ý, trong câu lệnh chưa có các bước gán giá trị đầu và tăng biến điều khiển. Do vậy chúng ta phải tự bổ sung nếu cần. Bước nhẩy của biến điều khiển là bất kỳ. - Nếu Miền tác động có 1 lệnh thì viết ngay sau Do, nếu có từ 2 lệnh trở lên thì các lệnh này phải đặt trong khối Begin End; - Khôngcó dấu ; sau Do - Các lệnh có thể lồng nhau, tuy nhiên các vòng lặp không được cắt nhau. - Vòng lặp trong có thể kết thức trước khi giá trị của biến điều khiển nhận giá trị “sai” và chuyển ra vòng lặp ngoài, tuy nhiên không thể chuyển từ vòng lặp ngoài vào vòng lặp trong. - Lệnh While Do là loại lệnh kiểm tra trước,thực hiện sau, do vậy có thể không có vòng lặp nào được thực hiện.  Ví dụ: - Các ví dụ minh hoạ cho câu lệnh: + WHILE i <= n DO T:= T + i / X[i] ; + WHILE Hoi = ‘C’ DO Begin Write (‘Nhap du lieu ‘); Readln ( SV [i]. Hoten, SV [i] . Diem); Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm Bộ môn Tin học Xây dựng 28 Readln (Hoi) ; End; + i:= 1 ; WHILE i <= n DO Begin Write (’ A[ ’ , i , ’ ] = ’); Readln ( A[i] ); T:=T + A[i] ; i := i+ 1 End; 3. Câu lệnh lặp với điều kiện kiểm tra sau - REPEAT (REPEAT UNTIL)  Khái niệm: Lệnh Repeat Until dùng cho cả 2 dạng bài toán lặp với số lần lặp đã xác định và không xác định.  Cấu trúc lệnh : Repeat Until ;  Giải thích các đại lượng : - Biểu thức điều kiện là biểu thức so sánh hoặc Logic, kết quả của nó chỉ nhận một trong 2 giá trị đúng hoặc sai. - Miền tác động của lệnh (Các lệnh lặp nằm giữa Repeat và Until) có thể là 1 hoặc nhiều lệnh, các lệnh này sẽ được thực hiện khi điều kiện là sai.  Cách thực hiện của lệnh: Khi gặp lệnh, chương trình thực hiện ít nhất một lần các lệnh trong miền tác động (giữa Repeat tới Until), sau đó kiểm tra giá trị của BTĐK, các lệnh sẽ được thực hiện lặp lại khi giá trị của biểu thức điều kiện là “sai” và sẽ dừng thực hiện ngay khi giá trị của BTĐK nhận giá trị “đúng” .  Các lưu ý : - Khi sử dụng lệnh Repeat .. Until cho các thuật toán chu trình phải chú ý, trong câu lệnh chưa có các bước gán giá trị đầu và tăng biến điều khiển. Do vậy chúng ta phải tự bổ sung nếu cần. Bước nhẩy của biến điều khiển có thể là bất kỳ. - Miền tác động của lệnh không phải đặt trong khối Begin End; - Các lệnh có thể lồng nhau, tuy nhiên các vòng lặp không được cắt nhau. - Vòng lặp trong có thể kết thúc trước khi giá trị của biểu thức điều kiện nhận giá trị “đúng” và chuyển ra vòng lặp ngoài, tuy nhiên không thể chuyển từ vòng lặp ngoài vào vòng lặp trong. - Lệnh Repeat Until là loại lệnh thực hiện trước, kiểm tra sau, do vậy các lệnh lặp sẽ thực hiện ít nhất 1 lần.  Ví dụ: - Các ví dụ minh hoạ cho câu lệnh: + REPEAT T:= T + i / X[i] Until i > n ; + REPEAT Write (‘Nhap du lieu, Ho ten ‘); Readln ( SV[i] . Hoten); Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm Bộ môn Tin học Xây dựng 29 Readln (Hoi) ; Until Hoi = ‘K’; + i:= 1 ; Repeat Write (’ A[ ’ , i , ’ ] = ’); Readln ( A[i] ); T:=T + A[i] ; i := i+ 1 Until i > n ; - Ví dụ sử dụng cả 3 lệnh chu trình: Cho một véc tơ A có n phần tử. Viết chương trình tạo ra 2 véc tơ mới từ A là véc tơ B chỉ chứa các phần tử dương và véc tơ C chỉ chứa các phần tử âm. Program Tach_vec_to; Var i,j,k, n: integer; A, B, C : array [1..10] of real; BEGIN Write (' Nhap so phan tu n= '); Readln (n); i:=1; { Nhap du lieu mang A – su dung Repeat } Repeat Write (' Nhap gia tri cua phan tu thu A[ ', i, ' ] : ' ); Readln (a[i]); i:= i+ 1 Until i >n ; { Tach vec to – Su dung While Do } i:=1; j:= 1 ; k:= 1; While i<= n Do Begin If a[i] > 0 Then Begin J:= j + 1; B [j] := A[i] End Else If a[i] <0 Then Begin k := k + 1 ; C [k] := A [i] End; i:= i+ 1 ; End; { In ket qua - Su dung For } If j 0 Then Begin Writeln ( ’ Cac phan tu cua vec to B’ ); For i:= 1 to J Do Write (B [i] :6:1); Writeln; End Else Writeln ( ’ Khong co phan tu duong trong vec to A ’ ); Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm Bộ môn Tin học Xây dựng 30 If k 0 Then Begin Writeln ( ’ Cac phan tu cua vec to B’ ); For i:= 1 to k Do Write (C [i] :6:1); Writeln; End Else Writeln ( ’ Khong co phan tu am trong vec to A ’ ); Readln END. IV. Dữ liệu kiểu bản ghi (Record) và ứng dụng: 1. Khái niệm: Khác với một số dữ liệu đã biết ở các phần trước như mảng, tập hợp là các phần tử phải cùng kiểu, Bản ghi là cách đơn giản để kết hợp nhiều dữ liệu có các kiểu khác nhau thành một kiểu mới do người dùng tự định nghĩa. Đặc điểm của dữ liệu bản ghi : - Mỗi bản ghi có một tên chung và mỗi mục dữ liệu trong BG được gọi là một trường (field). Mỗi trường có thể có kiểu bất kỳ. - Mỗi bản ghi có thể có nhiều trường, trong các trường lại có thể có trường con. - Bản ghi có thể có cấu trúc không đổi hoặc thay đổi. - Các bản ghi có thể lồng nhau (trong các trường lại là một bản ghi khác). - Trước khi làm việc với dữ liệu bản ghi, chúng ta phải khai báo chúng. 2. Khai báo dữ liệu kiểu bản ghi: Khai báo trực tiếp Khai báo gián tiếp Var Tên_bản_ghi : Record Tên_trường_1: Kiểu; Tên_trường_2: Kiểu; . . . . . . Tên_trường_n: Kiểu; End; Type Tên_bản_ghi = Record Tên_trường_1: Kiểu; Tên_trường_2: Kiểu; . . . . . Tên_trường_n: Kiểu; End; Var Danh_sách_biến_BG : Kiểu_bản_ghi; Trong đó: tên của bản ghi và tên trường tuân theo qui định đặt tên của Pascal. Kiểu phải là một trong các kiểu vô hướng, mảng hoặc một kiểu mới đã khai báo trước đó. - Minh họa: + Tạo và khai báo 1 bản ghi để lưu trữ dữ liệu cho từng cán bộ trong một cơ quan bao gồm các thông tin: Họ tên, Địa chỉ, năm sinh, lương, giới tính, tình trạng gia đình: Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm Bộ môn Tin học Xây dựng 31 Type TTHS = Record Ho_ten : string [ 25]; D_chi : string [ 40 ]; N_sinh: integer; Luong : real ; G_tinh : Char ; TTGD : integer End ; + Để lưu trữ dữ liệu cho cả cơ quan có m người, dùng một mảng Ho_so, trong đó mỗi phần tử của mảng là một record có cấu trúc TTHS và khai báo mảng qua Var như sau: Var Ho_so : Array [1.. m] of TTHS ; ( m là hằng số) 3. Truy nhập dữ liệu bản ghi: Để truy nhập bản ghi cũng sử dụng các lệnh Read, Write và các lệnh chu trình. Muốn nhập hoặc xuất dữ liệu bản ghi, phải làm việc với từng trường thông qua các biến bản ghi. Cấu trúc lệnh như sau: Read[ln] ( Biến_bản_ghi. Trường1. trường1_1); Write[ln] ( Biến_bản_ghi. Trường1. trường1_1); Biến bản ghi có thể là biến đơn hoặc biến mảng. - Nhập dữ liệu cho từng cán bộ vào mảng hồ sơ của cơ quan khai báo ở trên như sau: For i:= 1 to m Do Begin Writeln ( ’ Dua vao Ho ten, Dia chi cua can bo thu’ , i , ’: ’ ); Readln (Ho_so [i] . Ho_ten, Ho_so[i] . D_chi ); End; - In lên màn hình danh sách cán bộ gồm Họ tên, Năm sinh, Lương của cả cơ quan : For i:= 1 to m Do Writeln(Ho_so [i].Ho_ten :25, Ho_so[i].N_sinh :6, Ho_so[i].Luong :8:2); 4. Tính toán, xử lý dữ liệu bản ghi: Để tính toán, xử lý các dữ liệu bản ghi, có thể dùng tất cả các lệnh của Pascal như các lệnh điều khiển, lệnh chu trình, lệnh gán Tuy nhiên trong các câu lệnh với kiểu bản ghi thường xuyên phải nhắc lại tên của biến, tên trường làm câu lệnh dài, rườm rà Trong Pascal có thể dùng câu lệnh With để khắc phục điều này. Khi sử dụng With thì các tham số không cần xuất hiện trong các câu lệnh đựoc phủ trong miền With. Cấu trúc của lệnh With WITH Tên_biến_bản_ghi . Tên_trường . [tên_trường . . .] DO Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm Bộ môn Tin học Xây dựng 32 Viết lại các câu lệnh trên dùng With For i:= 1 to m Do With Ho_so[i] Do Writeln (Ho_ten: 25,N_sinh: 6, Luong: 8:2); 5. Ví dụ:  Các ví dụ minh hoạ cho câu lệnh: Khai báo gián tiếp bản ghi đơn Khai báo bản ghi kép Type SV = Record HT : string [15]; D : array [ 1.. 50 ] of real ; TB : real; PL : Char; End ; VT = array [1..60] of SV ; Var DS1,DS2 : VT ; Type HT = Record Ho : String [15] ; Dem : String [10] ; Ten : String [15] ; End; SV = Record Hoten : HT; D : array [ 1.. 50 ] of real ; TB : real; PL : Char; End ; Var DS : array [1..60] of SV;  Các bài tập ví dụ: - Bài tập 1: Cho một lớp học sinh, biết mã số SV, tên và điểm thi 3 môn của mỗi sinh viên. Viết chương trình (cấu trúc dữ liệu kiểu bản ghi) tính điểm trung bình của từng người và sắp xếp lại danh sách theo điểm trung bình tăng dần . Program Vi_du_Ban_ghi_Sapxep; type sinhvien = record masv:string[10]; tensv: string[30]; dt,dl,dh,dtb:real; end; var temp:sinhvien; sv:array[1..100] of sinhvien; n, i, j: integer; BEGIN {Nhap du lieu n sinh vien} write('Nhap so sinh vien:'); readln(n); for i:=1 to n do begin writeln('Nhap thong tin cua sv thu ' , i); Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm Bộ môn Tin học Xây dựng 33 write('Ma sv:'); readln(sv[i].masv); write('Ten sv:'); readln(sv[i].tensv); write('Diem toan:'); readln(sv[i].dt); write('Diem ly:'); readln(sv[i].dl); write('Diem hoa:'); readln(sv[i].dh); sv[i].dtb := (sv[i].dt+sv[i].dl+sv[i].dh)/3; end; {in ra danh sach sinh vien vua nhap} writeln; writeln(' Danh sach sinh vien vua nhap'); writeln(' STT ','Masv':5,'Tensv':10,' DT DL DH DTB'); for i:=1 to n do writeln(i:4, sv[i].masv:5, sv[i].tensv:10, sv[i].dt:6:1, sv[i].dl:6:1, sv[i].dh:6:1, sv[i].dtb:6:1); {sap xep danh sach sinh vien theo diem trung binh tang dan} for i:= 1 to n do for j:=i+1 to n do if (sv[i].dtb >sv[j].dtb) then begin temp:=sv[i]; sv[i]:=sv[j]; sv[j]:=temp; end; {in ket qua sau danh sach sinh vien sau khi sap xep} writeln; writeln(' Danh sach sinh vien sap theo thu tu dtb tang dan'); writeln(' STT ','Masv':5,'Tensv':10,' DT DL DH DTB'); for i:=1 to n do writeln(i:4, sv[i].masv:5, sv[i].tensv:10, sv[i].dt:6:1, sv[i].dl:6:1, sv[i].dh:6:1, sv[i].dtb:6:1); readln; END. - Bài tập 2 : Cho một lớp học sinh có n người, biết mã số SV, tên và điểm thi m môn của mỗi sinh viên. Viết chương trình (cấu trúc dữ liệu kiểu bản ghi) tính điểm trung bình của từng người và tách danh sách lớp thành 3 danh sách: những SV có DTB nhỏ hơn 5 từ 5- 7,và DTB >8. Program Ban_ghi_Tao_danh_sach; type sv=record ms:integer; ht:string[25]; d:array[1..20] of real; dtb:real end; var n,m,n1,n2,n3,i,j,k:integer; Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm Bộ môn Tin học Xây dựng 34 ds,ds1,ds2,ds3:array[1..30] of sv; ttsv:sv; t:real; BEGIN Write ( ' Nhap so nguoi n, somon m= '); readln(n,m); for i:=1 to n do begin write ( 'ms[',i,']=? ' ); readln(ds[i].ms); write ( 'ht[',i,']=? ' ); readln(ds[i].ht); for j:=1 to m do begin write('d[',j,']=? '); readln(ds[i].d[j]); end end; { Tinh diem trung binh cho tung nguoi } for i:=1 to n do begin t:=0; for j:=1 to m do t:=t+(ds[i].d[j]); ds[i].dtb:=t/m end; { Lap cac danh sach } n1:=0; n2:=0; n3:=0; for i:=1 to n do if ds[i].dtb<5 then begin n1:=n1+1; ds1[n1]:=ds[i] end else if ds[i].dtb<8 then begin n2:=n2+1; ds2[n2]:=ds[i] end else begin n3:=n3+1; ds3[n3]:=ds[i] end; writeln; { In ket qua ra man hinh } If n1 0 then begin writeln('1. DS SINH VIEN CO DTB<5:'); for i:=1 to n1 do writeln(ds1[i].ms:5,ds1[i].ht:15,ds1[i].dtb:10:1); end; writeln; if n20 then begin writeln('2. DS SINH VIEN CO DTB: 5-7:'); for i:=1 to n2 do writeln(ds2[i].ms:5,ds2[i].ht:15,ds2[i].dtb:10:1); end; writeln; Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm Bộ môn Tin học Xây dựng 35 if n30 then begin writeln('3. DS SINH VIEN CO DTB: 8-10:'); for i:=1 to n3 do writeln(ds3[i].ms:5,ds3[i].ht:15,ds3[i].dtb:10:1); end; writeln; readln END. 4. Bài tập tự làm - Viết chương trình Pascal cho các bài tập sau: 4.1. Nhập từ bàn phím 3 số nguyên a, b, c. Tìm giá trị Max - Min của chúng. 4.2. Viết chương trình tính tổng của dãy số: 1+2+...+n (Với n được nhập vào từ bàn phím, n>=1). Viết bằng 3 lệnh chu trình khác nhau – So sánh – Nhận xét . 4.3. Viết chương trình tính tổng các số chẵn trong khoảng từ 1- n . 4.4. Viết chương trình tính tổng các số chẵn và chia hết cho 3 trong khoảng từ 1->n, với n được nhập từ bàn phím. 4.5. Viết chương trình tính tổng S = 1 + 1/2 + 1/3 + 1/4 +.....+1/n. Với n là số nguyên và chẵn. 4.6. Viết chương trình tính tổng S = 1 + 1/x + 1/x2 + 1/x3 +.....+1/xn. Với n được nhập từ bàn phím. 4.7. Cho một mảng X (nguyên) có m phần tử. Hãy tách mảng X thành 2 mảng Y chứa các phần tử chẵn của X và mảng Z chứa các phần tử chia hết cho 2. 4.8. Cho dữ liệu của một lớp học sinh có m người. Biết các thông tin Họ tên, Mã số sinh viên, điểm trung bình cả năm của mỗi người. Tìm số người có điểm trung bình >B. Lập 2 danh sách cho những người có điểm trung bình từ 5..7 và từ 8..10. 4.9. Cho một dãy số (mảng 1 chiều) các số thực. Tìm số lớn nhất, bé nhất trong dãy số đó. Sắp xếp dãy số theo chiều tăng dần của các giá trị. 4.10. Cho một mảng X có m phần tử, một mảng Y có n phần tử. Hãy tạo ra mảng Z có m+n phần tử được ghép từ 2 mảng X, Y. Tính tổng các phần tử >A của mảng Z và tích các phần tử<B của Z. So sánh tổng và tích. 4.11. Cho dữ liệu của một lớp học sinh có m người. Biết các thông tin Họ tên, Mã số sinh viên, điểm các môn của n môn mỗi người. - Tìm điểm trung bình n môn của mỗi người. In lên màn hình Tên, Mã số, Điểm trung bình từng người cả lớp. - Lập danh sách những người có điểm trung bình các môn >8 . Giáo trình Nhập môn Tin học: Phần III – Ngôn ngữ lập trình Pascal - 1 GVC: Đào Tăng Kiệm Bộ môn Tin học Xây dựng 36 - Sắp xếp lại danh sách lớp theo điểm trung bình giảm dần. 4.12. Cho một ma trận A vuông (mảng 2 chiều) có m hàng, m cột. - Tính trung bình cộng của cả ma trận. - Tính tổng các phần tử nằm phía trên đường chéo chính. - Tìm giá trị lớn nhất của các phần tử nằm phía dưới đường chéo chính. 4.13. Cho dữ liệu của một phường dân cư có m người. Biết các thông tin Tên chủ hộ, Địa chỉ, Tổng số nước tiêu thụ (m3) mỗi tháng của mỗi nhà trong 12 tháng. - Nhập các thông tin của từng hộ và In lên màn hình (Tên CH., Địa chỉ ,Tháng 1 ..Tháng 12) - Tìm số lượng nước tiêu thụ trung bình cả phường trong năm. - Tìm tổng số nước tiêu thụ traong 12 tháng của từng hộ. - Lập danh sách những hộ có lượng tiêu thu nước > X m3 4.14. Cho một ma trận B (mảng 2 chiều) có m hàng, n cột. - Tìm giá trị nhỏ nhất của B - Xoá đi hàng và cột chứa giá trị nhỏ nhất đầu tiên (Xét theo hàng) của ma trận (Ma trận chỉ còn m-1 hàng và n-1 cột).

Các file đính kèm theo tài liệu này:

  • pdfbai_giang_nhap_mon_tin_hoc_phan_3_ngon_ngu_lap_trinh_pascal.pdf
Tài liệu liên quan