Tóm lại: Khi viết một chương trình, đầu tiên đừng nghĩ tên chương trình là gì, dùng các biến nào, khoan nghĩ đến phải nhập xuất dữ liệu như thế nào cho đẹp mắt, mà phải tập trung trước [r]
(1)NGƠN NGỮ LẬP TRÌNH NGƠN NGỮ LẬP TRÌNH PASCAL PASCAL
BÀI
GIỚI THIỆU CHƯƠNG TRÌNH PASCAL KIẾN THỨC YÊU CẦU:
Biết thao tác cài đặt Windows
Biết sử dụng chuột thao tác bàn phím KIẾN THỨC ĐẠT ĐƯỢC
Biết khái niệm ngôn ngữ Pascal
Biết cách cài đặt Pascal từ đĩa CD Biết cách sử dụng Pascal
Biết bước để tạo, lưu thực chương trình
Biết biên dịch thực thi chương trình I/ Khái niệm
Ngơn ngữ lập trình (programming language): Là hệ thống kí hiệu tuân theo quy ước ngữ pháp ngữ nghĩa, dùng để xây dựng chương trình cho máy tính
Ngữ pháp (syntax): Quy ước quan hệ ký hiệu Ví dụ ngơn ngữ Pascal: ký hiệu Begin, end phải thành cặp, sau if biểu thức điều kiện, sau kí hiệu then
Ngữ nghĩa (sematics): Quy ước ý nghĩa kí hiệu Ví dụ ngôn ngữ Pascal: dấu + biểu thị cho phép cộng, dấu - biểu thị cho dấu trừ …Phát biều if …then … có nghĩa “nếu … làm …”
Chương trình (program): Là tập hợp mô tả, phát biểu, nằm hệ thống quy ước ý nghĩa thứ tự thực hiện, nhằm điều khiển máy tính làm việc
Lập trình (to program): Làm chương trình, viết chương trình, cịn gọi “thảo chương” II/ Cài đặt chương trình
Cài đặt chương trình từ đĩa CD chứa chương trình Turbo Pascal Cho đĩa CD có chứa Turbo Pascal 7.0 (TP7.0) vào ổ đĩa CD
Vào cửa sổ My Computer hay Explore
Nhấp phải chuột hình đĩa CD, chọn Open menu
Nhấp phải chuột thư mục TP7.0, chọn Open menu ra, nhấp đúp nút trái chuột vào thư mục TP7.0 Chúng ta thấy sau :
(2)Hình H1 : Cửa sổ chứa thư mục tập tin thư mục TP7.0 Nhấp đúp vào mục iNSTALL, bạn thấy hộp thoại hình H2
Hình H2
Nhấp nút Run Program Bạn thấy hộp thoại thông báo, hộp thoại này, bạn nhấn phím Enter để tiếp tục cài đặt, khơng thích, bạn nhấn phím ESC để thốt.
Hình H3 : Cửa sổ thơng báo cài đặt Turbo Pascal
(3)Hình H4 : nhập vào tên ổ đĩa chứa Turbo Pascal Nhấn phím Enter, em thấy hộp thoại hình H5
Hình H5 Nhập vào đường dẫn chứa tập tin Turbo Pascal 7.0
Bạn giữ nguyên đường dẫn này, máy bạn khác, tuỳ theo đường dẫn ổ đĩa CD chứa chương trình
Nhấn phím Enter, bạn thấy hộp thoại hình H6
(4) Nhấn phím Enter, bạn có
Hình H7 Hình cho chọn lại thư mục bắt đầu install
Nếu thích thay đổi thư mục chứa tất tập tin hệ thống Turbo Pascal, bạn nhấn phím Enter, khơng muốn, nhấn phím F9 để bắt đầu install.
Ở nhấn phím Enter, hộp thoại ra, chúng tơi xố đường dẫn có sẵn nhập vào C:\CAiDAT (nhớ tạo thư mục CAiDAT trước)
Hình H8 Đã sửa lại C:\CAiDAT
(5)Hình H9
Nhấn phím F9 để bắt đầu install Sau vài thao tác, bạn hoàn thành việc cài đặt Turbo Pascal 7.0 vào ổ đĩa cứng mình.
Sử dụng chương trình Pascal đĩa cứng a Sử dụng đĩa cứng:
Nhấp phải chuột menu Start, chọn Explore Trong ổ đĩa C: nhấp chọn tên CAiDAT Nhấp đúp chuột thư mục BiN
Nhấp đúp chuột Turbo (hình cửa sổ, Turbo.exe)
Hình H10 b Sử dụng đĩa mềm:
Với đĩa mềm, bạn phải có tối thiểu hai tập tin TURBO.EXE TURBO.TPL, bạn chép tập tin có tên TUBBO hình H10 Khi chạy chương trình, bạn cần nhấp đúp Turbo (hình cửa sổ) thư mục gốc ổ đĩa a:\
c Sử dụng MS-DOS PROMPT Win9x:
Vào cửa sổ MS-DOS PROMPT, cách nhấp phải nút chuột biểu tượng, chọn Open menu ra, hoặc vào menu Start, chọn Progams, chọn MS-DOS PROMPT Bạn thấy sau:
(6) Thơng thường thư mục C:\WiNDOWS> hình C:\Windows>CD\ gõ Enter (chuyển thư mục gốc) C:\CD CAiDAT gõ Enter (Chuyển đến thư mục CAiDAT) C:\CAiDAT\CD BiN gõ Enter (chuyển đến thư mục BiN) C:\CAiDAT\BiN>Turbo gõ Enter Cửa sổ Pascal
Ghi chú: Vì tập tin Turbo.exe nằm C:\CAiDAT\BiN\Turbo.exe Hoặc từ thư mục C:\WiNDOWS> hình
C:\Windows>CD\ gõ Enter (chuyển thư mục gốc)
C:\NC gõ Enter C:\NC\NC gõ Enter Tuỳ theo máy bạn cách khai báo đường dẫn tập tin Autoexec.bat
Vào thư mục chứa tập tin Turbo.exe, đưa vệt sáng đến tên tập tin này, gõ phím Enter Ví dụ :Theo hướng dẫn trên, bạn thấy tập tin Turbo.exe nằm C:\CAiDAT\BiN
Vậy bạn vào thư mục CAiDAT, sau vào thư mục BiN (thực NC) Bạn thấy hình sau :
Hình H12 vào tập tin Turbo.exe Gõ phím Enter, cửa sổ PASCAL cho bạn lập trình
(7)III/ Cách sử dụng Turbo Pascal Tạo - lưu - mở tập tin chương trình a Tạo tập tin
Bạn vào cửa sổ Pascal giả sử nhập đoạn chương trình sau: Program Hienthi;
Begin
Write (‘chung toi se giai thich chuong trinh cac bai sau’); Readln;
End
Hình H14 Cửa sổ viết chương trình xong b Lưu tập tin chương trình
Nhấn phím F2 vào menu File, chọn Save
Chọn đường dẫn tên tập tin cần lưu Thường Pascal lấy đường dẫn chứa tập tin Turbo.exe, C:\CAiDAT\BiN Bạn nhập tên Bai1 Pascal tự động gán phần mở rộng PAS Nếu muốn lưu nơi khác, bạn nhập đường dẫn tên tập tin Nếu sau muốn lưu với tên khác, tập tin cũ còn, bạn vào menu File, chọn Save as
Ví dụ: E:\Bai1, D:\Luu\Bai1… c Mở tập tin chương trình
Vào cửa sổ Pascal
(8)Hình H15 Cửa sổ mở chương trình Sử dụng phím soạn thảo Program
a Dịch chuyển trỏ
Các phím hướng , , , bàn phím dịch chuyển dấu nháy lên dòng trên, xuống dòng dưới, qua phải kí tự, qua trái kí tự
Ctrl + Ctrl + : dịch chuyển dấu nháy theo từ Home: Đưa dấu nháy đầu dòng
End: Đưa dấu nháy cuối dòng
Page Up Page Down: Dịch dấu nháy lên xuống theo trang hình Ctrl + Page Up Ctrl + Page Down: Đưa dấu nháy đầu tập tin hay cuối tập tin b Sữa chữa văn
Phím Del để xố kí tự vị trí thời dấu nháy Phím Backspace để xố kí tự nằm bên trái dấu nháy
Ctrl + Y để xố dịng chứa dấu nháy insert để chọn chế độ chèn đè
c Các phím chức
Nhìn vào cửa sổ soạn thảo chương trình Pascal, bạn thấy phím chức có tác dụng sau:
F1 Help: Nhấn phím F1 thơng tin dẫn F2 Save: Nhấn phím F2 lưu chương trình F3 Open: Nhấn phím F3 mở chương trình
Alt+F9 Compile: Nhấn giữ phím Alt, nhấn thêm phím F9 Compile chương trình F9 Make: Compile chương trình
Alt+F10 Local menu: Hiện menu
Alt+Kí tự có màu đỏ đứng trước mục menu: Xuất menu
ESC: Nhấn phím ESC làm biến hộp thoại, menu… hình soạn thảo
Biên dịch (Compile) chương trình
Khi viết xong chương trình, để biên dịch, bạn thực cách sau: Nhấn Alt+F9
Nhấn Alt+C, dùng phím , di chuyển vệt sáng đến chữ Compile menu, nhấn phím Enter Hoặc nhấp chuột menu Compile, nhấp chọn mục Compile menu buông xuống, nhấn phím F10, dùng phím hướng di chuyển vệt sáng đến mục Compile menu, chọn Compile menu buông xuống
Ở chế độ mặc nhiên, Pascal chọn Destination Memory Trong trường hợp này, bạn nhấn Alt+F9 vào menu chọn Compile biên dịch chương trình, báo kết sai Khơng tạo tập tin
(9)Khi nhấp chuột menu Compile Bạn thấy Destination memory
Hình H16
Nếu muốn chọn chế độ Disk, bạn cần nhấp chuột dịng Destination Memory nhấn phím D bàn phím, menu biến Thực chọn lại menu Compile, bạn sẽ thấy hình sau:
Khi nhấp chuột menu Compile Bạn thấy Destination Disk.
Hình H17
Bạn lưu ý, Compile chương trình Destination Disk tạo tập tin với tên có phần mở rộng EXE đĩa, bạn chạy chương trình cách gõ đường dẫn tên chương trình dấu nhắc hệ thống, chạy cách chọn tên chương trình Norton Commander, chạy menu Start/Run Windows
Nếu chỗ sai, bạn thấy hộp thơng báo sau
(10)Hình H19 Compile chọn Destination Disk
(11)4 Thoát khỏi Pascal
Vào menu File, chọn Exit Nhấn Alt+X
Ghi chú:
Chạy thử chương trình, bạn biết sau
TÓM LƯỢC
Để cài đặt Turbo Pascal 7.0, bạn phải có đĩa CD đĩa mềm chứa Turbo 7.0 Biết thực
các thao tác để tìm đến tập tin có tên install.exe, thực tác động hộp thoại
Để thực chương trình Pascal đĩa cứng, bạn cần tìm đến thư mục có chứa tập tin
Turbo.exe, thơng thường thư mục BiN Nhấn đúp vào tên tập tin nhấp phải chuột tên tập tin này, chọn Open menu Để thực đĩa mềm tương tự vậy, dùng đĩa mềm, ta cần chép tập tin có tên TURBO Để thực MS-DOS PROMPT, bạn vào MS-DOS PROMPT, hình DOS, vào Norton Commander, chọn thư mục có chứa tập tin Turbo.exe, di chuyển vệt sáng đến tập tin nhấn phím Enter
Để tạo chương trình, bạn gõ thơng tin vào cửa sổ soạn thảo
Để lưu chương trình, bạn nhấn phím F2 vào menu File, chọn Save Sau muốn lưu thêm
một tập tin có tên khác, bạn vào menu File, chọn Save as
Để mở chương trình, bạn nhấn phím F3 vào menu File, chọn Open, hộp thoại
ra, chọn tên tập tin muốn mở, nhấp nút Open hộp thoại
Cần thao tác phím chức hướng dẫn học để thực cho cơng việc soạn thảo
chương trình
Biết cách biên dịch chương trình
PHẦN THỰC HÀNH :
1 Tạo thư mục có tên PASCAL thư mục gốc ổ đĩa C:\ Cài đặt Turbo Pascal 7.0 vào thư mục
2 Xác định tập tin Turbo.exe nằm đâu cài đặt a Nằm C:\
b Nằm C:\PASCAL c Nằm C:\PASCAL\BiN d Cả câu sai
3 Sau cài đặt xong, chép tập tin có tên TURBO thư mục BiN vào thư mục gốc ổ đĩa mềm A:\
4 Thực tập vào PASCAL với cách: a Thực ổ đĩa cứng b Thực ổ đĩa mềm
c Thực cách sử dụng MS-DOS PROMPT
(12)5 Tạo chương trình sau: Program Thuchanh; Begin
Write(‘Ban co thich hoc PASCAL không?’); Readln;
End
a Thử biên dịch chương trình cách nêu học
b Xố dấu chấm phẩy (;) phía sau chữ Thuchanh Biên dịch chương trình để xem kết Hãy thử bỏ dấu chấm sau End để xem thông báo biên dịch, thử bỏ dấu nháy đơn bao chuỗi ‘Ban co thich hoc PASCAL khong’ Thử bỏ Begin End Sau thử xong, sửa lại cho
c Hãy lưu chương trình thư mục BTPASCAL ổ đĩa C: d Thoát khỏi PASCAL
6 Tập mở chương trình cách học lưu với tên khác, chọn địa lưu C:\BTPASCAL
Khi lưu tập tin với tên khác trên, thấy: a Tập tin cũ thay đổi thành tên b Pascal báo sai
c Tập tin cũ cịn, có thêm tập tin với tên vừa lưu d Cả câu sai
(13)BÀi
CẤU TRÚC CHƯƠNG TRÌNH PASCAL KIẾN THỨC YÊU CẦU:
Biết kí tự sử dụng Pascal
Biết phân tích vấn đề để áp dụng ngôn ngữ Pascal
KIẾN THỨC ĐẠT ĐƯỢC
Biết cấu trúc chương trình Pascal
Biết chọn giải thuật để giải vấn đề
Biết cách dịch chương trình sang mã máy Biết chạy thử chương trình kiểm tra kết
I/ Những nguyên tắc lập trình Pascal Các ký hiệu sử dụng Pascal
Bất ngơn ngữ lập trình xây dựng từ số hữu hạn ký hiệu Trong ngôn ngữ Pascal xây dựng từ ký hiệu:
Begin, end, var, while, do, {, }, ;, …
Và kí tự a, b, c, d, …, A, B, C, D, …, 1, 2, 3, 4, … Ngôn ngữ Pascal không dùng ký hiệu chữ hy lạp
Để xây dựng thành chương trình, ký hiệu phải tuân theo quy ước ngữ pháp ngữ nghĩa quy định Pascal
a Danh hiệu (identifiler)
Trong Pascal, để đặt tên cho biến, hằng, kiểu, chương trình …Ta dùng danh hiệu (indentifiler) Danh hiệu Pascal quy định bắt đầu phải chữ cái, sau chữ cái, chữ số hau dấu gạch “_”
Ví dụ:
Tam X
PT_bac_1 Delta Z200
Ví dụ: biến sau danh hiệu 2bien
n! Bien x
Trong Pascal danh hiệu không phân biệt chữ thường chữ hoa
Vídụ: y với Y Thanh_Da THANH_dA
Chú ý: Chúng ta không nên đặt danh hiệu trùng với danh hiệu ngôn ngữ nên dùng danh hiệu có tính gợi nhớ để dễ viết kiểm tra chương trình, người đọc cảm thấy dễ hiểu
Ví dụ: Write, Writeln, read, readln, sqrt, integer, real … b Từ khoá (key word)
Trong ngơn ngữ có từ dành riêng phần tử tạo nên ngơn ngữ Do khơng đặt danh hiệu trùng với từ dành riêng người ta thường gọi từ từ khoá (key word)
Ví dụ: Program, begin, end, while, do, procedure, function, type, var … Từ dành riêng không phân biệt chữ thường chữ hoa Một số từ dành riêng Pascal
(14)And Array Begin Case Const Div Do Downto Else End File For Forward Function Goto if
In Label Mod Nil Not Of Or Procedure
Program Record Repeat Set Shl Shr String Then
To Type Until Var While With Xor
c Khoảng trắng, dấu chấm phẩy, dấu móc, dấu nháy đơn, tốn tử, tốn hạng
Khoảng trắng “ “: Dùng để cách biệt từ chuỗi
Dấu chấm phẩy “;”: Dùng sau tên chương trình, sau câu lệnh (trừ câu lệnh trước Else, đề cập sau)
Dấu móc “{ }”: Trong Pascal đặt hai dấu móc phần ghi Dấu nháy đơn “’”: Dùng để bao chuỗi
Tốn tử: Đặt hai tốn hạng Ví dụ: x+2, y=8, 7>3, x<7, z>=y … +, =, >, <, <= tốn tử, cịn hai bên toán hạng
Cấu trúc chương trình Pascal
Một chương trình Pascal gồm phần khai báo sau thân chương trình Khai báo Program
Khai báo Uses Khai báo Label Khai báo Const Khai báo Type Khai báo Var
Khai báo chương trình (thủ tục hay hàm) Thân chương trình
Thân chương trình khoá Begin kết thúc từ khoá End và dấu chấm “.” Giữa Begin End phát biểu
Ví dụ:
Program Chuongtrinhmau; Uses
…… Label …… Const … Type …… Var
… (Khai báo tên kiểu biến) Function …
End;
Procedure … End;
Begin …… …… End
Thơng thường chương trình Pascal, khai báo Uses, Label, const, type, Function, Procedure có khơng tuỳ theo bài, khơng dùng biến khơng cần khai báo Var (như ví dụ 1), nhiên hầu hết chương trình dùng khai báo Program, var biến thân chương trình
II/ Các bước để viết chương trình máy tính
(15)Để lập trình giải vấn đề, điều trước tiên cần có giải thuật Giải thuật kiến thức lĩnh vực vấn đề giải Giải thuật có ý nghĩa định đến thành cơng chương trình, có giải thuật tốt, có chương trình tốt Có giải thuật tổng quát tổ chức cấu trúc liệu, thuật tốn xếp, thuật tốn tìm kiếm, thuật tốn phân phối nhớ … thuật toán thuộc lĩnh vực chun mơn giải thuật tốn, sở liệu, trí tuệ nhân tạo, đồ hoạ …Tuy nhiên lĩnh vực cấp 2, bạn cần biết qua thuật toán đơn giản
Ví dụ: Để giải phương trình bậc 2, ta phải xét dấu delta với (delta=b2-4*a*c)
Viết chương trình ngơn ngữ Pascal
Quan trọng phần cốt lõi thân chương trình để giải thành cơng u cầu đề
Sau phần nhập liệu đầu chương trình xuất kết cuối chương trình
Cuối thêm phần khai báo, cần dùng biến khai báo phần Var, đặt tên chương trình phần khai báo program
Ví dụ: Để giải phương trình bậc phát biểu if với điều kiện trường hợp a hay khác 0, b hay khác Trong phần lõi thường nhập xuất
Tóm lại: Khi viết chương trình, đừng nghĩ tên chương trình gì, dùng biến nào, khoan nghĩ đến phải nhập xuất liệu cho đẹp mắt, mà phải tập trung trước tiên vào việc viết phần chương trình cho thể xác qua giải thuật
Dịch chương trình sang mã máy
Biên dịch chương trình xem có chỗ viết sai cú pháp hay vấn đề để điều chỉnh lại
Chạy thử kiểm tra kết quả
Khi biên dịch khơng báo lỗi, chưa chương trình bạn cho kết đúng, nhiều giải thuật sai, cho kết sai Do bạn chạy thử chương trình, kiểm tra kết xem có xác hay khơng
Ví dụ: chỗ thay dấu cộng bạn lại cho dấu trừ, chỗ biến a, bạn lại để biến b Cú pháp đúng, biên dịch kết sai
Để chạy chương trình, bạn thực cách sau: Nhấn Ctrl+F9
Nhấn Alt+R (hoặc nhấp chuột trái tên menu, nhấn phím F10, di chuyển vệt sáng đến mục Run), đưa vệt sáng đến Run, nhấn phím Enter
TÓM LƯỢC
Cần nắm vững nguyên tắc lập trình Pascal, biết ký hiệu dùng được, không dùng dược, không nên dùng Biết số từ khố để khơng dùng tên danh hiệu giống
Cần biết kí tự thường dùng dấu chấm phẩy, dấu nháy đơn, dấu móc, chúng thường dùng đâu
Cần biết toán tử Pascal
Biết cấu trúc chương trình Pascal, vị trí chúng, phần bỏ được, phần khơng thể thiếu
Trước khai báo biến, phải có từ khố Var
Biết bước viết chương trình, chương trình, biết phần cốt lõi để tập
trung thực trước
Biết biên dịch sửa lỗi chương trình
Qua kết quả, kiểm tra lại giải thuật, sử dụng biến hay không
PHẦN THỰC HÀNH:
(16)a Thanhtien b 1_Luong c Dem so d !Giaithua e $USD f Ket – Qua g Ket_qua h BaSo555 i Nam 2003
2 Danh hiệu sau dùng không a begin
b Batdau c Until d DenKhi
3 Trong Pascal, dùng dấu nháy bao chuỗi cho câu sau có khơng “Toi rat thich hoc ngon ngu PASCAL”
4 Tìm chỗ sai thiếu chương trình sau: Program Quangcao
Write(‘Chao mung SEA Games 22 tai Viet Nam’) Readln;
End
Program Vui:
X : integer; { Cho biết khai báo đúng} Y : Real; (Cho biết khai báo đúng) Begin
Write(“Khai bao bien x co kieu nguyen, bien Y co kieu so thuc”); Readln
End;
Program Nhanxet; {Begin}
Write(Hoc Pascal kho qua!); Readln;
End
5 Tìm giải thuật tính tổng 10 số ngun Tìm giải thuật tính tổng số chẵn Tìm giải thuật tính Max số, max số Tìm giải thuật để biết ước số chung lớn số
(17)BÀI KIỂU DỮ LIỆU CƠ SỞ
KIẾN THỨC YÊU CẦU:
Biết khắc ghi kiểu liệu, phạm vi kích thước Pascal
Biết sử dụng kiểu liệu phù hợp cho biến chương trình
KIẾN THỨC ĐẠT ĐƯỢC
Biết sử dụng kiểu liệu phù hợp cho biến chương trình cách nhuần nhuyển xác
I/ Dữ liệu kiểu số
Khái niệm liệu kiểu liệu
Trong Pascal liệu (data) thuộc kiểu liệu định Một kiểu liệu (data type) quy định hình dạng, cấu trúc giá trị liệu cách biểu diễn cách xử lý liệu Ngôn ngữ lập trình chấp nhận xử lý liệu tuân theo quy định kiểu ngôn ngữ lập trình
Các kiểu liệu Pascal Có thể phân loại sau:
a Các kiểu đơn giản (simple type): Kiểu real
Các kiểu rời rạc: integer, char, boolean, byte, word, liệt kê, miền b Các kiểu có cấu trúc:
Array (dãy) Record (mẫu tin) Set (tập hợp) File (tập tin) String (chuỗi)
c Kiểu trỏ (pointer type)
Tìm hiểu số kiểu bản
a Kiểu số nguyên (integer): Là số nguyên, biểu diễn dạng số hệ thập phân (cơ số 10 dùng số từ đến 9), biểu diễn dạng hệ thập lục phân hexidecimal (cơ số 16, dùng số từ đến 9, A, B, C, D, E, F), dùng dấu $ đặt trước số dạng số 16, nằm khoảng từ $0 đến $FFFF Có kiểu số ngun sau:
Ví dụ:
Hexidecimal Decimal $FFFF 65535 $1A3E 6718 $321F 12831
Tên kiểu Phạm vi Kích thước
Shortint -128 đến 127 byte
Integer -32768 đến 32767 byte
Longint -2147483648 đến 2147483647 byte
Byte đến 255 byte
Word đến 65535 byte
Cách khai báo: Tên biến, dấu hai chấm “:”, kiểu, dấu chấm phẩy “;”
(18)Ví dụ:
VAR
X : Byte; So : integer; Ketqua : integer;
Chúng ta khai báo nhiều biến kiểu cách dấu phẩy “,”
Ví dụ:
VAR
So,Ketqua : integer;
Các phép tốn thực kiểu số nguyên: + (cộng), - (trừ), * (nhân), DiV (phép chia nguyên) MOD (số dư)
b Kiểu số thực (real): Là liệu số thực, viết dạng số thập phân, theo sau luỹ thừa 10 (ký hiệu chữ E)
Ví dụ:
-234.5678
-2.5E2 có nghĩa -2.5 x 102
1.8E-10 có nghĩa 1.8 x 10-10
Tên kiểu Phạm vi Kích thước
Single 1.5E-45 đến 3.4E+38 byte Real 2.9 x 10 –39 đến 1.7 x 1038 6 byte
Double 5.0E-324 đến 1.7E+308 byte Extended 3.4E-4932 đến 1.1E+4932 10 byte Comp -9.2E+18 đến 9.2E+18 byte Cách khai báo: Tên biến, dấu hai chấm “:”, kiểu, dấu chấm phẩy “;”
Ví dụ:
VAR X : Real; Y : Single;
Z : Double;
Chúng ta khai báo nhiều biến kiểu cách dấu phẩy “,”
Ví dụ:
VAR
So,Ketqua : Real;
Các phép tốn thực kiểu số nguyên: + (cộng), - (trừ), * (nhân), / (chia) III/ Dữ liệu kiểu Logic
Kiểu Logic (Boolean) : Gồm hai giá trị False (sai) True (đúng)
Ví dụ:
VAR
BienLogic : Boolean;
Khi khai báo xong ta gán cho BienLogic hai giá trị: BienLogic := True; hay BienLogic := False;
Biểu thức Logic
Ví dụ: x > 5; (x < 4) And (y > 7)
x > (True) x có giá trị từ trở lên, sai (False) x có giá trị nhỏ
(x < 4) And (y > 7) khi x có giá trị nhỏ giá trị y từ trở lên
Kết biểu thức có giá trị sai Các biểu thức thường dùng làm điều kiện phát biểu Pascal
Bạn thường dùng toán tử so sánh là: = , > , < , >= , <= , <>
Ví dụ:
if (x >10) Then
(19)Đối với kiểu này, bạn cần biết toán tử luận lý NOT, AND, OR XOR
A NOT A
True False
False True
A B A AND B
True True True True False False False True False False False False
A B A OR B
True True True True False True False True True False False False
A B A XOR B
True True False True False True False True True False False False III/ Dữ liệu kiểu Char (ký tự)
Kiểu Char : Là liệu ký tự, ký tự viết hai dấu nháy (‘ ‘)
Ví dụ: ‘3’, ‘M’, ‘N’, ‘a’, ‘b’ VAR
Kytu : Char; Kytu := ‘A’;
Một kí tự chứa byte
Kí tự biểu diễn nhớ giá trị bảng mã ASCii
Ví dụ : Ký tự ‘B’ có mã ASCii 66, biểu diễn nhớ byte có trị 66 Như ký tự biểu diễn trị từ đến 255
Toán tử hàm thư viện dùng cho kiểu Char
Các ký tự so sánh với dựa bảng mã ASCii Vậy dùng tốn tử so sánh kiểu
Ví dụ : ‘A’ < ‘B’ bảng mã ASCii A=65 B=66 65<66 Hàm CHR(n:Byte): Hàm cho ta ký tự có mã ASCii n
Ví dụ : CHR(65) = ‘A’, CHR(97) = ‘a’, CHR(67) = ‘C’, CHR(98) = ‘b’ Hàm ORD(c:Char): Hàm cho ta mã ASCii kí tự c
Ví dụ : ORD(‘A’) = 65, ORD(‘a’) = 97 IV/ Dữ liệu kiểu String (chuỗi)
Kiểu String : Là chuỗi ký tự, chiều dài tối đa 255 Ví dụ:
VAR
Chuoi : String;
Chuoi := ‘***CHAO BAN ***’; Bạn giới hạn cho chuỗi
Ví dụ: VAR
(20)Chuoingan := ‘ThanhDa’;
Nếu khai báo biến trên, bạn dùng chuổi có chiều dài tối đa
Tốn tử nối chuỗi : Bạn dùng dấu cộng ‘+’ để nối hai chuỗi với Ví dụ:
VAR
Chuoi : String; Chuoimot : String; Chuoihai : String[6]; Bạn thực sau:
Chuoimot := ‘Truong DHBK’; Chuoihai := ‘TP.HCM’
Chuoi := Chuoimot + Chuoihai;
V/ Một số hàm thủ tục thư viện Pascal 1. Hàm
Hàm ABS(Num)
Num có kiểu integer Real
Hàm cho kết trị tuyệt đối Num, kiểu kết giống kiểu đối số Num
Ví dụ: ABS(-34)=34; ABS(-34.5) = 3.4500000000E+01 Hàm EXP(Num)
Num có kiểu integer Real
Kết e mũ Num (eNum), kết có kiểu Real
Ví dụ: EXP(2) = e2
Hàm Ln(Num)
Num có kiểu integer Real
Kết Logarit tự nhiên Num Kiểu kết Real
Ví dụ: Ln(10) = 2.3025850930E+00 Hàm SQR(Num)
Num có kiểu integer Real
Kết bình phương Num Kiểu kết kiểu đối số
Ví dụ: SQR(3) = 9, SQR(1.2) = 1.4400000000E+00 Hàm SQRT(Num)
Num có kiểu integer Real
Kết bậc hai Num (Num phải lớn 0), kết có kiểu Real
Ví dụ: SQRT(4) = 2.0000000000E+00 Hàm iNT(Num)
Num có kiểu integer Real
Kết cho ta phần nguyên Num Kiểu kết Real
Ví dụ: iNT(4.6) = 4.0000000000E+00 Hàm FRAC(Num)
Num có kiểu integer Real
Cho ta phần lẻ đối số Kiểu kết Real
Ví dụ: FRAC(4.3) = 0.3, FRAC(-2.5) = -0.5 Hàm ROUND(Num)
Num có kiểu Real
Kết làm trịn số theo ngun tắc thơng thường, kiểu kết integer
Ví dụ: ROUND(3.6) = 4, ROUND(3.2) = Hàm TRUNC(Num)
Num có kiểu Real
(21)Ví dụ : TRUNC(4.6) = Hàm ODD(Num)
Num có kiểu integer
Hàm có kết True Num số nguyên lẻ, trái lại cho kết False Vậy kiểu kết Boolean
Ví dụ : ODD(4) = FALSE Hàm RANDOM
Kiểu kết Real
Kết số nguyên ngẫu nhiên 0<= n<= Num Hàm UPCASE(Ch)
Ch có kiểu Char
Kết kí tự hoa tương ứng với Ch, kiểu kết Char
Ví dụ: UPCASE(‘h’) = H Hàm COPY(Ch, Vitri, So)
Ch biểu thức kiểu String
Vitri So biểu thức kiểu integer
Hàm trả chuỗi gồm có So kí tự, Vitri chuỗi Ch
Ví dụ: Nếu chuỗi Ch =’PASCAL’, COPY(Ch, 4, 3) CAL Hàm LENGTH(Ch)
Ch chuỗi
Cho biết chiều dài chuỗi Ch, kiểu kết integer
Ví dụ: LENGTH(‘PASCAL’) = Hàm POS(SubCh, Ch)
SubCh, ch chuỗi
Hàm cho ta biết vị trí xuất SubCh biểu thức Ch, SubCh khơng nằm Ch cho trị
Ví dụ: Ch = ‘PASCAL’, POS( ‘AS’, Ch) = 2, POS( ‘L’, Ch)= POS( ‘T’, Ch) =
2. Thủ tục
CLRSCR: Xố hình đưa dấu nháy dịng cột hình. GOTOXY(X, Y): Đem dấu nháy dòng Y cột X
EXiT: Nếu Exit thuộc chương trình chấm dứt chương trình trở chỗ gọi Nếu thuộc chương trình chấm dứt chương trình
HALT: Chấm dứt thực chương trình. DELAY(time)
Time có kiểu integer, tính theo 1/1000 giây Thủ tục DELAY(time) dừng thời gian time DELETE(Ch, Vitri, So)
Ch có kiểu chuỗi Vitri, So kiểu integer
Thủ tục xoá biểu thức Ch số kí tự So, vị trí
Ví dụ: Nếu Ch = ‘PASCALViSUALBASiC’
DELETE(Ch, 7, 11) PASCAL iNSERT(Ch1, Ch2, Vitri)
Ch1, Ch2 biểu thức kiểu chuỗi Vitri biểu thức kiểu integer
Thủ tục thêm Ch1 vào chuỗi Ch2 trước vị trí Vitri
Ví dụ: Ch2=’ASCAL’ insert(‘P’, Ch2, 1) ta ‘PASCAL’
Nếu Vitri vượt chiều dài chuỗi Ch2 Ch1 nối vào sau chuỗi Ch2 Ví dụ : insert(‘BASiC’, Ch2, 8) ‘ASCALBASiC’
STR(Giatri, Ch)
Giatri biểu thức integer Real có ghi dạng in Ch biến kiểu chuỗi
(22)Ví dụ: j := 12345; Thì STR(j:6, Ch) cho ta Ch=’ 12345’ (có khoảng trắng trước) Nếu dùng STR(j, Ch) ta ‘12345’
VAL(Ch, Bien, Loi)
Ch biểu thức kiểu chuỗi
Bien biến có kiểu integer Real Loi biến có kiểu integer
Thủ tục biến chuỗi Ch thành số gán vào Bien (Ch phải là chuỗi biểu diễn số nguyên số thực)
Ví dụ: Ch =’2004’ VAL(Ch, x, e) cho x=2004, e=0
Nếu Ch=’2004A’ VAL(Ch, x, e) cho x khơng xác định, e=5 (kí tự thứ chuỗi Ch bị lỗi)
Nếu khơng có lỗi, e=0, có lỗi, e vị trí gây lỗi Trong chuỗi Ch khơng có dấu trắng ‘ ‘đi trước sau số
TÓM LƯỢC
Cần nắm vững liệu kiểu số, kiểu Logic, kiểu Char, kiểu String, cách khai báo kiểu, biết
giá trị giới hạn loại kiểu, khai báo nên chọn kiểu cho phù hợp, tránh tốn nhiều nhớ, biết cách khai báo biến, toán tử sử dụng kiểu
Cần biết thêm hàm thủ tục dùng kiểu cách dùng hàm thủ tục chương trình để thực yêu cầu đầu cách nhanh chóng
PHẦN THỰC HÀNH :
1 Xác định kiểu liệu giá trị giới hạn cho biến qua khai báo biến sau: a x : integer;
b x : Byte; c y : Longint; d Chuoi : Char; e Chuoi : String; f Ketqua : Real; g Tongso : Double; h Ketqua : Boolean; i Ketqua : Single;
2 Tìm câu sai khai báo biến sau đây: a Tongso : Real;
b Soam : int; c Soduong : integer; d Dungsai : Boolean;
3 Thêm, bớt sửa lại chương trình sau cho (có ghi cho bạn chỗ sai, ký hiệu ‘:=’ phép gán Pascal) Kiểm tra lại cách chạy thử chương trình:
Program TiMCHOSAi {thiếu} Var
m : integer; n : Real;
ch : Chuoi; {sai} Begin
m := 19; n := 25.62;
(23)Writeln (‘So nguyen m =’, m); Writeln (‘So thuc n =’, n);
Writeln ‘Hoi ban mot chut‘, Ch); {thiếu} Readln;
End
4/ Tìm chỗ sai thiếu chương trình sau, nêu rõ điều sai thiếu: Program BongdaSEAGAMES22;
X : integer; Ch1 : Ctring;
Ch2 : String; Begin
Ch1 := ‘Doi tuyen bong da ViETNAM’ Ch2 := ‘Doi tuyen bong da THAiLAN’ X := 1;
Writeln(‘Trong tran dau 30/11/2003 vao luc 17h30 ’, Ch1, ‘ Da hoa ’, Ch2, ‘ voi ti so ’, x, ‘-‘, x);
Writeln(‘Ban cam thay vui hay nuoi tiec cho doi tuyen Viet Nam’); Readln;
End
Ghi chú: Cho biết chỗ sai chương trình tính từ xuống: thiếu, sai Nhập vào chương trình sau, chạy xem kết nhận xét
Program THUHAM; Var
X : Real; Y : Real; Z : integer; Ch1 : String; Ch2 : String; Begin
X := 15.56; Y := 20.92; Z := 5;
Ch1 := ‘Seagame2’;
Ch2 := ‘DuoctochuctaiVietNam’;
Writeln (‘Gia tri tuyet doi cua X la: ‘, ABS(X)); Writeln (‘e luy thua Z la: ‘, EXP(Z));
Writeln (‘Logarith cua Z la: ‘, Ln(Z)); Writeln (‘Binh phuong cua Z la: ‘, SQR(Z)); Writeln (‘Can bac hai cua Z la: ‘, SQRT(Z));
Writeln (‘Phan nguyen cua X va Y la: ‘, iNT(X), iNT(Y)); Writeln (‘Phan le cua so X va Y la: ‘, FRAC(X), FRAC(Y));
Writeln (‘Ket qua tron so cua X va Y la: ‘, ROUND(X), ‘ ‘ ,ROUND(Y)); Writeln (‘Phan nguyen cua X la “so nguyen”: ‘, TRUNC(X));
Writeln (‘Copy(Ch1,4,5) la: ‘, COPY(Ch1,4,5));
Writeln (‘Chieu dai cua chuoi Ch1 va Ch2 la: ‘, LENGTH(Ch1), ‘ ‘, LENGTH(Ch2)); Writeln (‘Chu e co dau tien chuoi Ch1 la: ‘, POS(‘e’, Ch1));
Readln; End
6 Viết chương trình có dùng CLRSCR sau, bạn chạy thử chương trình lần, nhận xét kết xuất hình
Program DungCLRSCR; Uses CRT;
Begin Clrscr;
(24)(25)BÀI CÂU LỆNH ĐƠN
KIẾN THỨC YÊU CẦU:
Biết dùng lệnh Pascal
Biết cách khai báo biến dùng kiểu liệu phù hợp Biết nhận định ý nghĩa câu lệnh để dùng cho KIẾN THỨC ĐẠT ĐƯỢC
Biết cách sử dụng xếp câu lệnh chương trình
Biết cách sử dụng lệnh, thủ tục hàm, biết cách khai báo, cách gọI thân chương trình Biết ý nghĩa khai báo kiểu Type, Const, lệnh Uses khai báo biến
Biết lệnh để nhập liệu từ bàn phím, xuất liệu hình máy in
I/ Sử dụng câu lệnh Pascal Câu lệnh khai báo liệu:
Sau khai báo Program tên chương trình dấu chấm phẩy khai báo đơn vị chuẩn (Unit) bạn dùng lệnh, hàm, thủ tục … liên quan đến đơn vị chuẩn Bạn khai báo thư viện lệnh (Uses) sau:
Khai báo: Uses tên đơn vị;
Ví dụ: Trong tập trước, dùng lệnh CLRSCR; để xố thơng tin hình, đưa dấu nháy góc trái hình Lệnh thuộc đơn vị chuẩn CRT, bạn khơng khai báo Uses Crt; trình biên dịch báo lỗi khơng biết lệnh Clrscr, xem bạn chưa định nghĩa biến
Turbo Pascal có đơn vị chuẩn : Crt, Dos, Graph, Grảph, Overlay, Printer, System, Turbo Windos.
Khai báo kiểu Type thường để khai báo cấu trúc dùng chương trình
Ví dụ: khai báo kiểu tập hợp Type
TapN = Set of integer;
Traicay = (Nhan, saurieng, cam, quyt); Taptraicay = Set of Traicay;
Ví dụ: Khi khai báo mẫu tin Type
Hocsinh = record Hoten : String[40]; Namsinh : 1990 1995; Noisinh : String;
End;
Khai báo Const dùng để khai báo
Ví dụ:
Const n = 10;
Khai báo biến thường khai báo sau cùng, trước hàm thủ tục (nếu có), trước thân chương trình Trước khai báo biến bạn phải dùng từ khoá VAR đề cập trên.
Ví dụ:
Var
x,y,n,m : integer; k : Real;
Ketqua : String;
Sử dụng hàm chương trình
(26)Để cho chương trình sáng sủa dễ hiểu, người ta thường dùng hàm thủ tục chương trình, vị trí chúng thường đặt trước thân chương trình
a/ hàm
Function tênhàm(các thông số (cách dấu ‘;’): kiểu trả về; Var
……… ……… Begin
……… ……… End;
b/ Thủ tục
Procedure tênthủtục(các thông số (cách dấu ‘;’); Var
……… ……… Begin
……… ……… End;
Ghi chú: Hàm thủ tục bạn học sau Các câu lệnh dùng thân chương trình
Câu lệnh đơn: lệnh gán giá trị (:=) Ví dụ: x:=5; y:=8; z:=7.9; Ch1:= ‘Doi bong da Viet Nam’; …Lệnh gọi thủ tục, gọi hàm
ví dụ: Có thủ tục
Procedure Nhap(Var an:Mang; m,n:integer; x,y:integer); Var
……… Begin ……… ……… End;
Begin {Thân chương trình} ………
………
Nhap(a,m,n,WhereX,WhereY); {Lệnh gọi thủ tục} ………
……… End
Giả sử bạn có hàm sau:
Function Max(m:Real; n:Real;):Real; Begin
……… ……… End;
Begin
……… ………
Writeln(‘So lon nhat cua hai so tren la: ‘, Max(a,b); {lệnh gọi hàm} Readln;
End
Các câu lệnh nhập, xuất:
Read(biến1,biến2, …,biến n); Write(mục1, mục2, …, mục n);
Các câu lệnh có cấu trúc: Như lệnh lựa chọn if, case, lệnh lặp For, While, Repeat Các lệnh bạn học tới.
(27)Ghi chú: Sau End hàm, thủ tục, câu lệnh ghép dấu chấm phẩy ‘;’ III/ Lệnh nhập - xuất liệu
Lệnh nhập liệu
Từ bàn phím: Để nhập liệu từ bàn phím vào cho biến chương trình, bạn dùng lệnh Read Readln sau:
Read(biến1, biến2, …, biếnN); Readln(biến1, biến2, …, biếnN);
Trong biến1, biến2, …, biếnN phải có kiểu số nguyên, số thực, ký tự kiểu chuỗi
Mỗi câu lệnh Read Readln dừng chương trình nhập liệu vào biến, nhập chưa đủ, máy chờ nhập xong
Lệnh Readln;
Khơng đọc giá trị cả, chờ nhấn phím Enter trở hình soạn thảo, dùng để kiểm tra kết chương trình, khơng có lệnh này, nhấn phím Ctrl+F9 bạn khơng thấy kết quả, hình soạn thảo, muốn thấy, bạn phải nhấn Alt+F5
Lệnh gán giá trị cho biến
Khi muốn gán giá trị cho biến khai báo, bạn dùng dấu hai chấm dấu (:=)
Ví dụ: x := 25; y:= 3.6; Chuoi := ‘Hoc Pascal khong co gi kho’; 2 Lệnh xuất liệu
Để xuất liệu hình, dùng lệnh Write Writeln Write(mục1, mục2, …, mụcN);
Lệnh viết mục từ mục1 đến mụcN, không xuống hàng sau viết xong mục cuối Các mục biến, hằng, biểu thức … chuỗi có bao hai dấu nháy đơn, biến, cần ghi tên biến
Ví dụ:
Program LenhWrite; Begin
Write(‘Chuc mung ban’);
Write(‘den voi ngon ngu Pascal.’); Readln;
End
Chạy thử chương trình, có kết sau: Chuc mung ban den voi ngon ngu Pascal.
Mặc dầu dùng hai câu lệnh Write, kết xuất dòng kết chương trình trên, bạn dùng:
Program LenhWrite; Begin
Write(‘Chuc mung ban ’, ‘den voi ngon ngu Pascal.’); Readln;
End
Bạn xem ví dụ sau: Program LenhWrite; Var
X : integer; Begin X:= 14;
Write(‘Ban Son nam duoc: ‘, X, ‘ tuoi.’); Readln;
End
Kết Ban Son nam duoc 14 tuoi Lệnh Writeln(mục1, mục2, …, mụcN);
(28)Ví dụ:
Program LenhWriteln; Begin
Writeln(‘Chuc mung ban’);
Writeln(‘Den voi ngon ngu Pascal.’); Readln;
End
Kết là:
Chuc mung ban
Den voi ngon ngu Pascal Program LenhWriteln;
Begin
Writeln(‘Chao mung Sea Games 22’); Write(‘Duoc to chuc tai ’);
Write(‘Viet Nam.’); End
Kết là:
Chào mung Sea Games 22 Duoc to chuc tai Viet Nam.
Write(R:10:6); viết số thực chiếm 10 chỗ, chỗ dành cho phần thập phân. Write(i:10); viết số nguyên chiếm 10 chỗ.
Để xuất liệu máy in, bạn phải khai báo chương trình: Uses Printer;
Dùng câu lệnh Write Writeln có dạng sau: Write(LST, mục1, mục2, …, mụcN); Writeln(LST, mục1, mục2, …, mụcN);
Với LST tên thiết bị máy in khai báo Unit Printer
TÓM LƯỢC
Khi dùng lệnh, hàm, thủ tục đơn vị chuẩn, bạn phải khai báo Ví dụ: dùng lệnh Clrscr, Gotoxy(x,y) bạn phải khai báo Uses Crt; muốn xuất liệu hình, bạn phải khia báo Uses Printer; …
Dùng khai báo Type để khai báo cấu trúc tập hợp, mẫu tin có dùng số khai báo Const Trước khai báo biến nhớ có từ khố Var
Cấu trúc hàm bắt đầu Function, thủ tục bắt đầu Procedure Xem lại cách gọi chúng chương trình
Lệnh gán dùng ‘:=’, phải lựa chọn vấn đề dùng phát biểu if Case, cần công việc lặp lặp lại, dùng phát biểu For, While Repeat Câu lệnh ghép khoá Begin kết thúc End dấu chấm phẩy
Khi nhập liệu từ bàn phím dùng lệnh Read Readln
Khi cần xuất liệu hình dùng lệnh Write Writeln, dùng Write khơng xuống hàng, dùng Writeln xuống hàng sau thực Nếu dùng khai báo Uses Printer; xuất máy in
PHẦN THỰC HÀNH:
1 Viết chương trình xuất hình hai chuỗi: ‘Chao mung doi tuyen bong da Viet Nam’ ‘Tai Sea Game 22’
(29)b Dùng hai lệnh Write để có kết câu A
c Dùng hai lệnh để chuỗi xuất dòng trên, chuỗi hai xuất dòng sau d Dùng thêm lệnh Clrscr giải thích kết hình thực lệnh Tìm câu lệnh gán biến sau đây:
a Tongso := Real; b Soam =: int; c Soduong :- integer; d Dungsai :: Boolean;
3 Thêm, bớt sửa lại chương trình sau cho đúng, kiểm tra lại cách chạy thử chương trình: Program TiMCHOSAi;
Var
m : integer; n : Real; ch : String; Begin
Clrscr; m =: 19; n := 25.62;
Ch := ‘Hoc di doi voi hanh’; Writeln (‘So nguyen m =’, ‘m’); Writeln (‘So thuc n =’, n);
Writeln ‘Hoi ban mot chut‘, ‘Ch’); Readln;
End
4 Víết chương trình có khai báo biến x, y z có kiểu nguyên, thực phép gán x 2, y z tích hai số x y Xuất kết hình câu:
a Tong hai so x va y la: (kết đúng) b Tong hai so x va y la:
(kết đúng)
c (Kết đúng) la ket qua cua tich hai so x va y
5 Viết chương trình với khai báo biến trên, không dùng phép gán, mà nhập từ bàn phím hai biến x y sau báo kết giống trường hợp A, B C
6 Giải thích chương trình sau thực điều Program TinhToan;
Uses Crt; Var
Bien : real;
Ketquamot, Ketquahai, ketquaba : Real; Begin
Clrscr;
Writeln(‘Nhap vao mot bien :’); Readln(Bien);
Ketquamot := Bien * Bien; Ketquahai := * Bien; Ketquaba := Bien * SQRT(2);
Writeln(‘Do ban day la gi? = ‘, Ketquamot : 10 : 1); Writeln(‘Ket qua la gi? = ‘, Ketquahai : 10 : 1); Writeln(‘Cung cau hoi nhu tren ‘, Ketquaba : 10 : 2); Readln;
End
7 Viết chương trình tính diện tích hình tam giác theo cơng thức Hê Rơng S = bậc hai cùa p(p-a)(p-b)(p-c) với p =(a+b+c)/2
8 Viết chương trình tính phép tốn cộng, trừ, nhân, chia hai số, với hai số nhập từ bàn phím
(30)10 Viết chương trình nhập vào số nguyên (là số giây) Đổi số giây vừa nhập thành dạng x y phút z giây
(31)BÀI Câu lệnh lựa chọn
KIẾN THỨC YÊU CẦU:
Biết xác định vấn đề có sử dụng đến câu lệnh chọn lựa, cách dùng câu lệnh chọn lựa cho phù hợp
Biết phải dùng câu lệnh ghép KIẾN THỨC ĐẠT ĐƯỢC
Biết nắm vững câu lệnh chọn lựa Pascal, cách dùng câu lệnh cho phù hợp,
dùng câu lệnh If khơng có Else, có dùng Else, câu lệnh If lồng nhau, câu lệnh Case
Biết thực câu lệnh ghép xác I/ Câu lệnh if … then … else … ; Câu lệnh if … then …;
iF <Điều kiện> THEN Câu lệnh;
Ý nghĩa: Sẽ xét điều kiện theo sau iF Nếu thực lệnh theo sau THEN, sai coi lệnh thực xong Điều kiện đơn giản biểu thị quan hệ =, <>, >, <, >=, <= Điều kiện phức hợp có sử dụng phép toán Logic NOT, AND, OR điều kiện đơn giản
Ví dụ:
Program iF_THEN; Var
x : integer; y : integer; Ketqua : Longint; Begin
Write(‘Ban nhap vao gia tri cua x = ‘); Readln(x);
Write(‘Ban nhap vao gia tri cua y = ‘); Readln(y);
Write(‘Ban doan x + y = ‘); Readln(Ketqua);
if (Ketqua=x+y) Then
Writeln(‘Hoan ho ban da doan dung’); if (Ketqua<>x+y) Then
Writeln(‘Rat tiec ban da doan sai’); Readln;
End
Chương trình cho người sử dụng nhập vào hai số x y, sau nhập kết x+y Nếu nhập kết quả, chương trình báo ‘Hoan ho ban da lam dung’, nhập kết sai, chương trình báo ‘Rat tiec ban da lam sai’
Ở chỗ mà Pascal cho phép viết lệnh mà ta lại cần viết nhiều lệnh thành phần thành phần phải để cặp từ khoá begin end (đừng nhầm với Begin … End tồn chương trình), câu lệnh ghép:
BEGiN ………. ………. END;
Ví dụ:
(32)Program iF_THEN; {Co dùng lệnh ghép} Var
x : integer; y : integer; Ketqua : Longint; Begin
Write(‘Ban nhap vao gia tri cua x = ‘); Readln(x);
Write(‘Ban nhap vao gia tri cua y = ‘); Readln(y);
Write(‘Ban doan x + y = ‘); Readln(Ketqua);
if (Ketqua=x+y) Then Begin
Writeln(‘Hoan ho ban da doan dung’); Writeln(‘Ban hoc toan rat tot’);
End;
if (Ketqua<>x+y) Then Begin
Writeln(‘Rat tiec ban da doan sai’); Writeln(‘Ban can co gang hoc tot hon’); End;
Readln; End
Câu lệnh if … then … else …; iF <Điều kiện> THEN Câu lệnh mot ELSE
Câu lệnh hai;
Ghi chú: Câu lệnh trước ELSE khơng có dấu chấm phẩy ‘;’
Ý nghĩa: Xét điều kiện theo sau iF, thực câu lệnh một, sai thực câu lệnh hai
Ví dụ:
Program iF_THEN_ELSE; Var
x : integer; y : integer; Ketqua : Longint; Begin
Write(‘Ban nhap vao gia tri cua x = ‘); Readln(x);
Write(‘Ban nhap vao gia tri cua y = ‘); Readln(y);
Write(‘Ban doan x + y = ‘); Readln(Ketqua);
if (Ketqua=x+y) Then
Writeln(‘Hoan ho ban da doan dung’) Else
Writeln(‘Rat tiec ban da doan sai’); Readln;
End
Câu lệnh if … then … else …; (lồng nhau).
Các bạn xem phát biểu if … then … else lồng ví dụ sau:
(33)Program iF_THEN_ELSE_Longnhau; Var
Toan : integer; Ly : integer; Hoa : integer; Ketqua : integer; Begin
Write(‘Ban nhap diem Toan (toi da la 10) : ‘); Readln(Toan);
Write(‘Ban nhap diem Ly (toi da la 10) : ‘); Readln(Ly);
Write(‘Ban nhap diem Hoa (toi da la 10) : ‘); Readln(Hoa);
Ketqua := Toan + Ly + Hoa; if (Ketqua >= 25) Then
Writeln(‘Dau vao dai hoc, khong can xet diem khong che’) Else
Begin
if ((ketqua>=21) And (Toan>=7) And (Ly>=7) And (Hoa>=7) Then Writeln(‘Hoc sinh dau, vi cac mon deu tu tro len’)
Else
Writeln(‘Khong du tieu chuan vao dai hoc’); End;
Readln; End
II/ Câu lệnh Case … of. Câu lệnh Case … of … end;
CASE <Biểu thức chọn> OF Chon : Lệnh 1;
Chon : Lệnh 2; ………. ……… Chon N : Lệnh n; END;
Đầu tiên biểu thức chọn tính trị, trị nằm chọn nào, câu lệnh sau chọn thực hiện, kiểm tra từ xuống, khơng có chon thoả, kết thúc khơng làm
Nhận xét: Phát biểu CASE dạng làm gọn phát biểu iF Bạn nên dùng CASE lựa chọn nhiều trường hợp
Ví dụ:
Program CASE_KhongcoELSE; Var
x : integer; Begin
Write(‘Ban nhap so cua thang ‘); Readln(x);
Case (x) of
(34)11: Writeln(‘Day la thang Muoi mot’); 12: Writeln(‘Day la thang Muoi hai’); End;
Readln; End
Trong phát biểu Case này, bạn nhập số từ đến 12, chương trình khơng thơng báo cả, phát biểu Case xem chấm dứt
Để nhập vào số không thuộc từ đến 12, chương trình phải báo câu đó, phải dùng lệnh Case … of … else … end sau:
Câu lệnh Case … of … else … end; CASE <Biểu thức chọn> OF Chon : Lệnh 1;
Chon : Lệnh 2; ………. ……… Chon N : Lệnh n; Else Câu lệnh; END;
Đầu tiên biểu thức chọn tính trị, trị nằm chọn nào, câu lệnh sau chọn thực hiện, kiểm tra từ xuống, khơng có chon thoả, thực lệnh sau ELSE
Nhận xét: Phát biểu CASE dạng làm gọn phát biểu iF Mọi phát biểu Case viết lại với phát biểu iF Bạn nên dùng CASE lựa chọn nhiều trường hợp
Ví dụ:
Program CASE_KhongcoELSE; Var
x : integer; Begin
Write(‘Ban nhap so cua thang ‘); Readln(x);
Case (x) of
1: Writeln(‘Day la thang gieng’); 2: Writeln(‘Day la thang Hai’); 3: Writeln(‘Day la thang Ba’); 4: Writeln(‘Day la thang Tu’); 5: Writeln(‘Day la thang Nam’); 6: Writeln(‘Day la thang Sau’); 7: Writeln(‘Day la thang Bay’); 8: Writeln(‘Day la thang Tam’); 9: Writeln(‘Day la thang Chin’); 10: Writeln(‘Day la thang Muoi’); 11: Writeln(‘Day la thang Muoi mot’); 12: Writeln(‘Day la thang Muoi hai’); Else
Begin
Writeln(‘Khong co thang nay’);
Writeln(‘Ban khong biet cac thang nam’); End;
End; Readln; End
Trong câu lệnh Case … of Pascal, có nhiều chọn có giá trị, gộp lại Bạn xem ví dụ sau:
Program CASE_goplai; Var
x : integer; Begin
(35)Readln(x); Case (x) of
1,3,5,7,8,10,12: Writeln(‘Thang: ’,x, ‘ co 31 ngay’); 4,6,9,11: Writeln(‘Thang: ‘,x, ‘ co 30 ngay’);
2: Writeln(‘Thang: ‘, x, ‘ co 28 ngay’);
Else Begin
Writeln(‘Khong co thang nay’);
Writeln(‘Ban khong biet cac thang nam’); End;
End; Readln; End
TÓM LƯỢC
Khi xét điều kiện thực điều đó, khơng thôi, dùng câu lệnh if … then điều cần thực
Khi điều kiện thực điều này, khơng thực điều Ta thực câu lệnh if … then … else
Nếu có nhiều câu lệnh, dùng phát biểu ghép Begin … end
Sử dụng phát biểu Case … of lựa chọn nhiều trường hợp Lưu ý gộp lựa chọn có giá trị
Khi khơng cần thể điều khơng có chọn thoả, dùng câu lệnh Case of
không có Else Nếu cần thể hiện, ta dùng Case … of có Else PHẦN THỰC HÀNH:
1 Cho chương trình sau: Program Doan; Uses Crt; Var
a, b, So : integer; Begin
Clrscr;
Write(‘Nhap vao so a va b : ‘); Readln(a,b);
So := a;
if So < b then So := b; Writeln (x);
Readln; End
a Hãy giải thích lệnh cho biết chương trình làm việc gì?
b Hãy bổ sung thơng báo cần thiết vào chương trình để làm dễ dàng cho người sử dụng
2 Viết chương trình nhập vào chiều dài chiều rộng hình chữ nhật Nếu kết chiều dài nhân với chiều rộng, thông báo cho kết quả, ngược lại báo sai cho người sử dụng biết Viết chương trình nhập số a, b, c bất kỳ, Hãy kiểm tra xem ba số độ dài cạnh tam giác hay không, thông báo thoả hay không thoả trường hợp tương ứng
4 Có người viết chương trình tìm số lớn số sau: Program Max_3so;
(36)a, b, c : Real; Begin
Write(‘Nhap vao so ‘); Readln(a,b,c);
if a < b then a:=b Else
if a < c then a:=c;
Write(‘So lon nhat la : ‘,a); Readln;
End
Chương trình cho đáp số có lúc đúng, có lúc sai, tuỳ thuộc vào a, b, c Bạn giải thích vậy? Hãy sửa lại cho Bạn viết
5 Bạn nhìn chương trình sau: Program Tinhtoan; Var
Toantu : Char; Ketqua : Real; x, y : integer; Lamduoc : Boolean; Begin
Write(‘Nhap vao hai so x va y : ‘); Readln(x,y);
Write(‘Nhap vao phep toan can thuc hien: ‘); Readln(Toantu);
Lamduoc := true; Case Toantu of
‘+’ : Ketqua := x + y; ‘-‘ : Ketqua := x – y; ‘*’ : Ketqua := x * y;
‘/’ : if (y=0) then Lamduoc := False Else Ketqua := x/y; Else Lamduoc := False;
End;
if Lamduoc then Writeln(‘Ket qua se la : ‘, Ketqua) Else Writeln(‘Khong lam duoc’);
End
Giải thích câu lệnh chương trình, cho biết chương trình thực điều Bạn thấy chương trình hay sai, có hay khơng?
6 Viết chương trình nhập vào mùa Xuân, Hạ, Thu, Đông (mùa Xuân, nhập X, mùa Hạ, nhập H, mùa Thu nhập T mùa Đông nhập D), dùng phát biểu Case … of có Else
Nếu nhập X báo câu ‘Mua Xuan rat dep, toi rat thich’
Nếu nhập H báo câu ‘Mua Ha rat nong va buon, vi xa Thay va ban be’ Nếu nhập T báo câu ‘Mua Thu la vang rat dep, canh troi tho mong’ Nếu nhập D báo câu ‘Mua dong lanh leo, nhung rat thich’
Nếu khác ký tự báo câu ‘Khong co mua nay, ban nhap lai’
7 Viết chương trình nhập vào số a, b, c Máy hỏi để người sử dụng nhập vào kết quả: a Đố bé a+b+c ? (nhập vào)
b Đố bé a+b-c ? (nhập vào) c Đố bé a-b+c ? (nhập vào)
Sau nhập xong câu hỏi trên, nhập kết sai tuỳ trường hợp, chương trình báo sau: Trường hợp a, báo câu “Hoan hơ bé giỏi, a+b+c=”, ngược lại báo “Bé làm sai rồi” Trường hợp b, báo câu “Hoan hơ bé giỏi, a+b-c=”, ngược lại báo “Bé làm sai rồi” Trường hợp c, báo câu “Hoan hô bé giỏi, a-b+c=”, ngược lại báo “Bé làm sai rồi”
(37)(38)BÀI CÂU LỆNH LẶP
KIẾN THỨC YÊU CẦU:
Biết xác định vấn đề có sử dụng đến câu lệnh lặp, cách dùng câu lệnh lặp cho phù hợp
Biết cách khỏi vịng lặp cần, biết tránh làm vịng lặp vơ tận KIẾN THỨC ĐẠT ĐƯỢC
Biết nắm vững câu lệnh lặp Pascal, cách dùng câu lệnh cho phù hợp, nên dùng
câu lệnh FOR, WHILE REPEAT
Biết số lần lặp câu lệnh
Biết tránh trường hợp làm cho vịng lặp vơ tận
Biết dùng câu lệnh để khỏi vịng lặp cần thiết
I/ Câu lệnh FOR
Ta dùng câu lệnh lặp For biết trước số lần lặp Câu lệnh For có dạng: Dạng 1: For … to … …
Dạng 2: For … downto … … Câu lệnh For … to … …
FOR i:= bieuthuc1 TO bieuthuc2 DO Caulenh;
i gọi biến điều khiển, thuộc kiểu rời rạc
Biểu thức phải nhỏ biểu thức
Ví dụ:
Program Vonglap_FOR1; Var
x : integer; Begin
For x := To 12 Do
Writeln(‘Day la thang: ‘, x); Readln;
End
Chạy thử chương trình, bạn có kết sau: Đây tháng:
Đây tháng: Đây tháng: Đây tháng: Đây tháng: Đây tháng: Đây tháng: Đây tháng: Đây tháng: Đây tháng: 10 Đây tháng: 11 Đây tháng: 12
Ghi chú:
Không nên thay đổi trị biến điều khiển i bên phát biểu Caulenh
Ví dụ:
Phát biểu sau chạy vô tận For i:= to
Begin
(39)Writeln(i); i := 12; End;
Câu lệnh For … Dowto … Do …
FOR i:= Bieuthuc1 DOWNTO bieuthuc2 DO Caulenh;
i gọi biến điều khiển, thuộc kiểu rời rạc Biểu thức phải lớn biểu thức
Ví dụ:
Program Vonglap_FOR2; Var
x : integer; Begin
For x := 12 Downto Do Writeln(‘Day la thang: ‘, x); Readln;
End
Chạy thử chương trình, bạn có kết sau: Đây tháng: 12
Đây tháng: 11 Đây tháng: 10 Đây tháng: Đây tháng: Đây tháng: Đây tháng: Đây tháng: Đây tháng: Đây tháng: Đây tháng: Đây tháng: II/ Câu lệnh WHILE
Câu lệnh WHILE … DO …;
Dùng để lặp lặp lại cơng việc điều kiện cịn thoả Phát biểu While có dạng:
WHILE Dieukien DO Caulenh;
Dieukien: Biểu thức logic
Trước hết điều kiện xét, giá trị False, vòng lặp While kết thúc, True phát biểu caulenh thực hiện, sau thực xong, quay lại kiểm tra điều kiện, công việc tiếp tục lập luận điều kiện có giá trị False
Ví dụ:
Program Vonglap_While; Var
x : integer; Begin x := 1;
While (x<=12) Do Begin
Writeln(‘Day la thang: ‘,x); x := x +1;
End; Readln; End
Bạn thấy kết ví dụ vịng lặp For … to … …;
(40)Program TinhTong; Var
So : integer; Tong : Longint; Begin
Tong := 0;
Write(‘Ban nhap vao so nguyen bat ky, nhap de ket thuc ‘); Readln(So);
While So <> Begin
Tong := Tong + So; Readln(So);
End;
Writeln(‘Tong cac so vua nhap vao la: ‘, Tong); Readln;
End
Lưu ý vòng lặp While
Khác với vòng lặp For, vịng lặp While, số lần lặp khơng xác định được, tuỳ thuộc vào người sử dụng, ví dụ chương trình trên, số lần lặp thực bạn chưa nhập vào số Bạn cần ý dùng điều kiện vịng lặp While, chọn điều kiện ln ln vịng lặp thực vơ tận, khơng được, trừ Caulenh có chứa phát biểu Goto nhảy khỏi vịng lặp While
Ví dụ : While True Writeln(‘Se lap vo tan’);
Bạn thử thêm vào đoạn chương trình biến Dem có kiểu nguyên, gán cho biến 0, lần điều kiện While biến đếm tăng lên (kiểm tra điều kiện trước, thực biến dem điều kiện thoả) Bạn thấy số lần vòng lặp While thực biến đếm bạn xem ví dụ sau:
Program TinhTong; Var So : integer;
Tong : Longint; Dem : integer; Begin
Dem := 0; Tong := 0;
Write(‘Ban nhap vao so nguyen bat ky, nhap de ket thuc ‘); Readln(So);
While So <> Begin
Dem := Dem + 1; Tong := Tong + So; Readln(So);
End;
Writeln(‘Tong cac so vua nhap vao la: ‘, Tong); Writeln(‘Bien dem luc bang: ‘,Dem);
Readln; End
Chạy thử chương trình, giả sử nhập vào số sau (sau lần nhập, gõ phím Enter):
2
Bạn thấy kết :
(41)III/ Câu lệnh Repeat … Until Câu lệnh Repeat … Until;
Dùng để lặp lặp lại công việc điều kiện thoả REPEAT
Caulenh 1; Caulenh 2; ………… ………… Caulenh n; UNTIL Đieukien;
Các phát biểu bên thân Repeat thực hiện, sau kiểm tra biểu thức logic điều kiện, trị True phát biểu Repeat thực xong, trị False quay lại thực phát biểu bên Repeat, trình tiếp tục điều kiện True
V í dụ:
Program TinhTong; Var
So : integer; Tong : Longint; Dem : integer; Begin
Dem := 0; Tong := 0;
Write(‘Ban nhap vao so nguyen bat ky, nhap de ket thuc ‘); Readln(So);
Repeat Begin
Dem := Dem + 1; Tong := Tong + So; Readln(So);
End; Until So = 0;
Writeln(‘Tong cac so vua nhap vao la: ‘, Tong); Writeln(‘Bien dem luc bang: ‘,Dem);
Readln; End
Chạy thử chương trình, giả sử nhập vào số sau (sau lần nhập, gõ phím Enter):
2
Bạn thấy kết là:
Tong cac so vua nhap vao la: 12 Bien dem luc bang:
Kết giống vịng lặp While
Ví dụ:
Program Vonglap_Repeat; Var
x : integer; Begin x := 1;
(42)Writeln(‘Day la thang: ‘,x); x := x +1;
End; Readln; End
Ví dụ:
Tính n giai thừa (n!) n! = 1*2*3* … *n Program Giaithua;
Var Gt : Longint; i : integer; n : integer; Begin
i := 0; Gt := 1;
Write(‘Ban nhap vao so n = ‘); Readln(n);
Repeat i := i + 1; Gt := Gt * i; Until i = n;
Writeln(n, ‘ giai thua = ‘, n); Readln;
End
Lưu ý vòng lặp Repeat
Khác với vòng lặp For, vòng lặp Repeat, số lần lặp khơng xác định được, tuỳ thuộc vào người sử dụng, ví dụ chương trình trên, số lần lặp thực i nhỏ n Bạn cần ý dùng điều kiện vòng lặp Repeat, chọn điều kiện ln ln sai vịng lặp thực vơ tận, khơng được, trừ Caulenh có chứa phát biểu Goto nhảy khỏi vịng lặp Repeat
Trong câu lệnh Repeat …Until, hành động thực xét điều kiện lặp IV/ So sánh đặc điểm vòng lặp For, While, Repeat
Điều kiện lặp
Với vịng lặp FOR điều kiện lặp biết trước, vòng lặp While Repeat chưa biết trước
So sánh While với Repeat Với vòng lặp While, điều kiện lặp xét trước hành động Với vòng lặp Repeat hành động thực xét điều kiện lặp
FOR: Thực điều kiện biết trước WHiLE: Điều kiện lặp xét trước, thực REPEAT: Điều kiện lặp xét sau, dừng
Chú ý: Khi viết vòng lặp, cần cân nhắc While repeat để chọn cho phù hợp Số lần lặp
Đối với vòng lặp FOR … TO … DO … số lần thực (bieuthuc2 – bieuthuc 1) +
Đối với vòng lặp FOR … DOWNTO … DO … số lần thực (Bieuthuc1 – Bieuthuc2) +1
Ví dụ:
For x:=1 to Writeln(x, ‘ ‘);
Chạy thử chương trình, bạn Sẽ thực lần (5 - 1) +1 For x:=5 downto
Writeln(x, ‘ ‘);
Chạy thử chương trình, bạn Sẽ thực lần (5 – 1)+1 For x:=1 To
Writeln(x, ‘ ‘); Hoặc:
(43)Writeln(x, ‘ ‘);
Chạy thử chương trình, bạn thấy kết là: thực lần (1 – 1)+1 Đối với vịng lặp WHiLE, bạn xem ví dụ sau:
Ví dụ:
Program Vonglap_While; Var
x:integer; Begin x:=1;
While x<>6 Begin
Write(x, ‘ ‘); x:=x+1; End;
Readln; End
Chạy thử chương trình bạn thấy:
Ghi chú: Nếu bỏ câu lệnh x:= x+1; vịng lặp, chương trình bị lặp vô tận Bạn thử suy nghĩ vậy?
Đối với vòng lặp REPEAT, bạn xem ví dụ sau:
Ví dụ:
Program Vonglap_Repeat; Var
x:integer; Begin x:=1; Repeat Begin
Write(x, ‘ ‘); x:=x+1; End;
Until x = 6; Readln; End
Chạy thử chương trình bạn thấy: Nếu bỏ câu lệnh x := x+1; chương trình bị lặp vơ tận
Bạn xem ví dụ sau để biết thêm vòng lặp While Repeat Program Vonglap_While;
Var
i : integer; Begin i := 10;
While i <> 10 Writeln(i); Readln; End
Chạy thử chương trình bạn khơng hết, vịng lặp While khơng thực Cũng ví dụ trên, dùng vịng lặp Repeat
Program Vonglap_Repeat; Var i : integer;
(44)Chạy thử chương trình bạn 10 Thực xong kiểm tra điều kiện, khác với vòng lặp While, kiểm tra điều kiện từ đầu
Điều kiện thoát
Đối với vòng lặp FOR: Khi giá trị biến điều khiển bieuthuc2, thực xong Với vịng lặp WHILE: Khi điều kiện sai khỏi vịng lặp
Với vịng lặp REPEAT: Khi điều kiện khỏi vịng lặp
TĨM LƯỢC
Khi biết trước số lần lặp, dùng vòng lặp FOR Nếu biểu thức nhỏ biểu thức 2, ta dùng For … to … do, ngược lại dùng For … downto … …
Khi chưa biết trước số lần lặp, dùng vòng lặp While Repeat, cân nhắc để sử dụng vòng lặp
Cần nhớ vòng lặp While xét điều kiện lặp trước, thực Cịn vịng lặp Repeat điều
kiện lặp xét sau, dừng Bạn nhớ điều để tránh sai lầm viết chương trình
Cần ý điều kiện, sử dụng câu lệnh để tăng biến đếm, khơng có lặp vơ tận PHẦN THỰC HÀNH:
1 Cho chương trình sau: Program Doanthu; Var
i, So : integer; Begin
So := 0;
For i := to 10 So := So + i;
Write(So); Readln; End
a Hãy giải thích lệnh cho biết chương trình làm việc gì?
b Hãy bổ sung thông báo cần thiết vào chương trình để làm dễ dàng cho người sử dụng
c Nếu sửa lại chương trình sau: Program Doanthu;
Var
i, So : integer; Begin
So := 0;
For i := to 10 Begin
So := So + i; Write(So); End;
Readln; End
Chương trình làm việc gì? Cho chương trình sau:
Program Doanthu; Var
i, So : integer; Begin
So := 0;
(45)Write(So); Readln; End
a/ Hãy giải thích lệnh cho biết chương trình làm việc gì?
b/ Hãy bổ sung thông báo cần thiết vào chương trình để làm dễ dàng cho người sử dụng
3 Viết chương trình tính tổng số nhập vào từ bàn phím, gõ vào số cách dùng vòng lặp Repeat
4 Xem chương trình sau: Program Baitap; Var
x, i : integer; Begin
Writeln(‘Tua de la gi ? ……… ‘); Readln(x);
if x < then
Writeln (‘Khong xet’) Else
Begin i:=2;
While x mod i <> i := i + 1;
if i = then
Writeln(‘x la:………’) Else
Writeln(‘x khong la: ……… ’); End;
Readln;
End
Bạn đốn xem chương trình muốn thực điều gì, bạn thêm vào chỗ … để người xem dễ hiểu
5 Bạn xem chương trình sau: Program Baitap; Var
gt, i, n : integer; Begin
gt:= 1; i:= 0;
Write(‘Ban nhap vao so n = ‘); Readln(n);
Repeat i := i + 1; gt := gt * i; Until i = n; Writeln(gt); Readln; End
Giải thích câu lệnh chương trình, cho biết chương trình thực điều
6 Viết chương trình nhập vào số nguyên n không âm, đọc n từ bàn phím, n âm, yêu cầu nhập lại Viết Repeat While Theo bạn cách viết tự nhiên tốt hơn?
7 Viết chương trình tìm ước số lẻ lớn số nguyên dương n (ví dụ ước số lẻ lớn 60 15) Viết While Repeat
Hướng dẫn: Chia n cho nhiều lần khơng thể chia hết nữa, số dư cịn lại ước số lẻ lớn n
(46)9 Viết chương trình in kí tự từ A đến Z từ a đến z dạng sau: Kí tự Mã ASCii kí tự
A : 65 B : 66 … … Z : 90 a : 97 b : 98 … … z : 122
10 Viết chương trình lặp lặp lại nhiều lần cơng việc sau: Đọc kí tự in mã ASCii Chương trình kết thúc phím nhấn
11 Viết chương trình nhập vào số nguyên dương, in ước số lớn lũy thừa Ví dụ: nhập 160, in 32
12 Viết chương trình nhập vào số tự nhiên, kiểm tra xem số có phải số nguyên tố hay không, dùng câu lệnh Repeat
13 Viết chương trình in n số nguyên tố đầu tiên, n số nhập vào 14 Viết chương trình nhập vào số nguyên dương, tính S = + + …+ n 15 Viết chương trình tính S = 12 + 22 + …+n2
(47)BÀI
KIỂU DỮ LIỆU CÓ CẤU TRÚC: ARRAY (kiểu mảng) KIẾN THỨC YÊU CẦU:
Biết xác định vấn đề có sử dụng đến cấu trúc mảng
Biết cách khai báo sử dụng
KIẾN THỨC ĐẠT ĐƯỢC
Biết khái niệm liệu cấu trúc mảng
Biết cách khai báo mảng chiều hai chiều
Biết nhập xuất liệu mảng
Biết cách tìm kiếm phần tử mảng
Biết cách xếp phần tử mảng theo phương pháp chọn phương pháp Bubble sort
I/ Dữ liệu có cấu trúc mảng
Khái niệm liệu cấu trúc mảng
Một liệu kiểu mảng mảng gồm nhiều phần tử kiểu Các phần tử (element) mảng phải kiểu, phần tử mảng có số, kiểu số phải có kiểu rời rạc Cách khai báo liệu cấu trúc mảng
a Mảng chiều
Bạn khai báo theo cách sau: Var
Mang : Array [ 100 ] of integer;
Với khai báo trên, thay đổi lại là: Const
N = 100; Var
Mang : Array [ N ] of integer; Hoặc
Type
Khaibao = Array [ 100 ] of integer; Var
Mang : Khaibao;
Mang mảng gồm 100 số nguyên Kiểu số kiểu miền integer integer kiểu sở mảng
Mang[1], Mang[2], …, Mang[100] phần tử mảng Mang
b Mảng hai chiều
Bạn khai báo mảng hai chiều sau: Type
Khaibao = Array [ 20 ] of Array [ 50 ] of Real; Var
Mang : Khaibao;
Mảng hai chiều cịn việt dạng Type
Khaibao = Array [ 20, 50 ] of Real; Var
Mang : Khaibao; Hoặc
Var
Mang : Array [1 20, 50 ] of Real; Mang: Là mảng hai chiều
(48) Mang có 20 phần tử Mang[1], Mang[2], , Mang[20] mà phần tử Mang[i] dãy có 50 phần tử Real
Mang[1] mảng có phần tử Mang[1][1], …, Mang[1][50] ………
Mang[20] mảng có phần tử Mang[20][1], …, Mang[20][50] II/ Sử dụng liệu cấu trúc mảng
Nhập liệu cho cấu trúc mảng
Vì số mảng xác định nên người ta dùng vòng lặp For để nhập liệu cho cấu trúc mảng
Ví dụ 1:
Program Mang_mot_chieu; Var
i : integer;
So : Array[1 5] of integer; Begin
(* Nhập phần tử vào mảng So*) For i:= to
Begin
Write(‘Ban nhap phan tu So[‘, i, ‘] = ‘); Readln(So[i]);
End; Readln; End
Ví dụ 2:
Program Mang_hai_chieu; Var
i, j : integer;
So : Array[1 5, 5] of integer; Begin
(* Nhập phần tử vào mảng So*) For i:= to
For j := to Begin
Write(‘Ban nhap phan tu So[‘, i, ‘,’, j, ‘] = ‘); Readln(So[i,j]);
End; Readln; End
Ghi chú: Nếu mảng hai chiều, dùng hai vòng lặp For lồng để nhập, thực nhập sau: So[1,1], So[1,2], …, So[1,5], So[2,1], So[2,2],…, So[5,1], So[5,2], …, So[5,5] Xuất liệu cấu trúc mảng
Muốn xuất liệu mảng, ta dùng vòng lặp For cho mảng chiều For i:= to
Writeln(So[i], ‘ ‘);
Dùng hai vòng lặp For lồng cho mảng hai chiều For i:=1 to
For j:= to Write(So[i,j], ‘ ‘);
Bạn xem chương trình nhập xuất mảng chiều hai chiều sau:
Ví dụ 1:
Program Mang_mot_chieu; Var
i : integer;
So : Array[1 5] of integer; Begin
(49)For i:= to Begin
Write(‘Ban nhap phan tu So[‘, i, ‘] = ‘); Readln(So[i]);
End;
(* Xuất liệu hình) For i:= to
Writeln(So[i]); Readln;
End
Ví dụ 2:
Program Mang_hai_chieu; Var
i, j : integer;
So : Array[1 5, 5] of integer; Begin
(* Nhập phần tử vào mảng So*) For i:= to
For j := to Begin
Write(‘Ban nhap phan tu So[‘, i, ‘,’, j, ‘] = ‘); Readln(So[i,j]);
End;
(* Xuất phần tử mảng So hình*) For i:= to
For j := to Writeln(So[i,j]); Readln;
End
Cách truy nhập liệu String theo cấu trúc mảng chiều
Bạn khai báo mảng chiều với số phần tử từ n, mảng có kiểu String Bạn dùng vòng lặp For để nhập xuất liệu hình Ví dụ sau cho biết việc nhập liệu kiểu String vào mảng chiều cách xuất liệu kiểu String hình
Ví dụ:
Program String; Var
Chuoi:Array[1 10] of String; i: integer;
Begin
(*Nhập liệu String cho phần tử mảng*) For i:=1 to 10
Begin
Write(‘Ban nhap chuoi cho phan tu Chuoi[‘,i, ‘] = ‘); Readln(Chuoi[i]);
End;
(*Xuất liệu String mảng hình*) For i:=1 to 10
Writeln(Chuoi[i]); Readln;
End
Chạy thử chương trình, giả sử bạn nhập cho 10 phần tử là: Chuoi[1] = Chaomung
Chuoi[2] = SEAGAMES22 Chuoi[3] = Duoc
(50)Chuoi[7] = Thantinh Chuoi[8] = Doanket Chuoi[9] = Huunghi
Chuoi[10]= ViHanhphucnhanloai Bạn có kết
Chaomung SEAGAMES22 Duoc
Tochuc Tai VietNam Thantinh Doanket Huunghi
ViHanhphucnhanloai
III/ Tìm kiếm phần tử mảng Tìm kiếmtuần tự (Sequential search)
Phương pháp đơn giản để tìm kiếm lưu trữ thơng tin mảng, kế duyệt qua toàn mảng cách để tìm Bạn xem ví dụ sau:
Program Timkiemtuantu; Var
Mang : Array[1 10] of integer; i, x, Dem : integer;
Begin
(*Nhập thông tin cho mảng*) For i:= to 10
Begin
Write(‘Ban nhap phan tử Mang [‘,i, ‘] = ‘); Readln(Mang[i]);
End;
(*Tìm kiếm thơng tin mảng*) Write(‘Ban nhap phan tu can tim: ’);
Readln(x); Dem:=0;
For i:= to 10 if Mang(i) = x then Begin
Writeln(‘Phan tu can tim: ‘, x, ‘ o vi tri thu ‘,i ,’ cua mang’); Dem:= Dem+1;
End; if Dem=0 then
Writeln(‘Khong tim thay phan tu !!! ’); Readln;
End
Trong chương trình trên, khai báo mảng có 10 phần tử có kiểu nguyên biến i dùng cho vòng lặp For, biến x chứa phần tử cần tìm nhập vào từ bàn phím, biếm dem dung để đếm số lần tìm thấy để làm điều kiện xác định có tìm thấy hay khơng
Vòng lặp For để nhập vào 10 phần tử Nhập phần tử cần tìm, cho biến dem
Vịng lặp For để tìm, lần tìm gặp, báo vị trí thứ mảng, tăng biến dem lên Nếu biến dem 0, báo khơng tìm thấy phần tử
IV/ Sắp xếp phần tử mảng
Có nhiều phương pháp xếp mảng, bạn biết qua hai cách, dùng phương pháp chọn (selection sort) phương pháp đổi chỗ, hay gọi phương pháp bọt (bubble sort)
(51)Đây thuật toán xếp đơn giản hoạt động sau: Đầu tiên tìm phần tử nhỏ mảng hốn vị với phần tử vị trí đầu tiên, sau tìm phần tử nhỏ hốn vị với phần tử vị trí thứ hai, tiếp tục theo phương pháp toàn mảng xếp Phương pháp gọi xếp chọn làm việc cách lặp lại việc “chọn” phần tử nhỏ lại Bạn xem thuật toán sau:
Var i,j,min,tam : integer; Begin
For i:= to N-1 do Begin
min:=i;
For j:=i+1 to N do
if a[i] < a[min] then min:=j;
Tam:=a[min]; a[min]:=a[i]; a[i]:= tam; End;
End
Bạn xem chương trình hồn chỉnh sau: Program Sapxepchon;
Const N=10; Var
Mang : Array[1 N] of integer; i,j,min,tam : integer;
Begin
(*Nhập phần tử mảng*) For i:= to N
Begin
Write(‘Nhap phan tu Mang[‘,i, ‘ ]= ‘); Readln(Mang[i]);
End;
(*Dùng thuật toán chọn*) For i:= to N-1
Begin := i;
For j:= i+1 to N
if Mang[j] < Mang[min] then min:=j;
tam:= Mang[min]; Mang[min]:=Mang[i]; Mang[i]:=tam; End;
(*Xuất phần tử mảng sau xếp) For i:= to N
Write(Mang[i], ‘ ‘); Readln;
End
Đầu tiên khai báo số N=10, khai báo mảng có N phần tử kiểu nguyên Biến i j dùng cho vòng lặp For Biến phần tử nhỏ, biến tam để chứa thông tin tạm
Nhập N phần tử mảng, dùng thuật toán xếp chọn để xếp lại phần tử mảng từ nhỏ đến lớn Xuất hình giá trị xếp
Chạy thử chương trình, nhập vào 10 số nguyên, bạn thấy kết Dùng phương pháp đổi chỗ (Bubble sort)
Đây phương pháp thường dùng, hoán vị phần tử kề nhau, cần, khơng cần đến hốn vị khác bước tập tin xong Bạn xem thuật toán sau:
Var i,j,tam : integer; Begin
For i:= N Downto do For j:=2 to i do
if a[j-1] > a[j] then Begin
(52)A[j-1]:= a[j]; A[j]:= tam; End;
End
Bạn xem chương trình hồn chỉnh sau: Program SapxepBubblesort;
Const N=10;
Var Mang : Array[1 N] of integer; i,j,tam : integer;
Begin
(*Nhập phần tử mảng*) For i:= to N
Begin
Write(‘Nhap phan tu Mang[‘,i, ‘ ]= ‘); Readln(Mang[i]);
End;
(*Dùng thuật toán Bubble sort*) For i:= N downto
For j:=2 to i
if Mang[j-1] < Mang[j] then Begin
tam:= Mang[j-1]; Mang[j-1]:=Mang[j]; Mang[j]:=tam; End;
(*Xuất phần tử mảng sau xếp) For i:= to N
Write(Mang[i], ‘ ‘); Readln;
End
TÓM LƯỢC
Mảng chứa nhiều phần tử có kiểu với nhau, phần tử có số có kiểu rời rạc
Khai báo biến chiều
Var
Mang : Array[1 n] of kiểu;
Khai báo biến hai chiều
Var
Mang : Array[1 n m] of kiểu;
Dùng vòng lặp For để nhập phần tử mảng chiều, dùng hai vòng lặp For lồng để nhập phần tử cho mảng hai chiều Tương tự cần xuất liệu mảng hình
Để tìm kiếm phần tử mảng, ta dùng vịng lặp để duyệt tìm (sequential search) phần tử mảng
Khi muốn xếp phần tử mảng, ta dùng phương pháp chọn (Selection sort) phương pháp đổi chỗ (bubble sort)
PHẦN THỰC HÀNH:
1 Viết chương trình nhập vào mảng số nguyên (mảng chiều mảng hai chiều) a Xuất hình phần tử mảng theo thứ tự nhập vào
(53)2 Viết chương trình nhập vào hai mảng có số phần tử nhau, tạo mảng thứ ba tổng hai mảng (c[i]=a[i] + b[i]), Xuất hình phần tử ba mảng (mỗi mảng dòng)
3 Viết chương trình in ra:
a Phần tử lớn mảng b Phần tử nhỏ mảng c Tổng phần tử mảng Ghi chú: Viết mảng chiều hai chiều
4 Nhập vào mảng số nguyên, cho biết có phần tử lớn 0, nhỏ (viết mảng chiều hai chiều)
5 Nhập mảng số nguyên, in bốn dòng a Các số lẻ, cho biết số số lẻ b Các số chẵn, cho biết số chẵn c Các số nguyên tố
d Các số số nguyên tố (Viết mảng chiều hai chiều)
6 Nhập vào mảng số nguyên a in dãy số vừa nhập vào b in dãy số từ nhỏ đến lớn c in dãy số từ lớn đến nhỏ
7 Viết chương trình nhập mảng số nguyên, in phần tử mảng (Khơng in phần tử có rồi)
Ví dụ: nhập dãy 4 in
8 Tương tự số thực
9 Cho mảng A[1 9] với phần tử số nguyên a Tính tổng số lẻ có mảng
b Tính tổng số chẵn có mảng c Tính tổng số có mảng d Tính tổng số dương có mảng
10 Nhập vào mảng có 10 số ngun, tìm số nhập vào từ bàn phím, tìm thấy báo có, ngược lại báo khơng có
11 Nhập vào mảng với phần tử tên trái cây, nhập vào tên trái cây, tìm kiếm mảng, thấy báo có, ngược lại khơng báo hết
12 Viết chương trình nhập vào mảng số thực gồm 12 phần tử
a Sắp xếp theo thứ tự tăng dần hai phương pháp chọn đổi chỗ b Sắp xếp theo thứ tự giảm dần hai phương pháp
13 Nhập vào 20 số thực, thơng báo hình
a Một số thực có thuộc mảng hay khơng?
(54)BÀI CHƯƠNG TRÌNH CON (Sub program)
KIẾN THỨC YÊU CẦU:
Biết cần sử dụng đến chương trình con, tầm vực hoạt động
Biết cách khai báo sử dụng
Biết nắm vững vị trí khai báo biến KIẾN THỨC ĐẠT ĐƯỢC
Biết khái niệm chương trình
Biết cách khai báo sử dụng chương trình chương trình
Biết hai dạng chương trình thủ tục (Procedure) hàm (Function), bước để viết chương trình
Biết nắm vững biến toàn cục biến địa phương, đặc biệt tầm vực hoạt động biến loại
Biết nắm vững cách truyền tham số cho chương trình dạng tham trị tham biến Biết viết chương trình hai dạng thủ tục hàm
Biết khái niệm đệ quy tính đệ quy chương trình I/ Khái niệm chương trình con
Khái niệm
Chương trình đoạn chương trình, câu lệnh chúng bao cặp từ khoá Begin … End; Chúng ta gọi nhiều lần chương trình qua tên chương trình Nơi gọi cung cấp thơng số cho chương trình chương trình làm thay đổi giá trị vài thơng số
Chúng ta dùng chương trình khi:
Có cơng việc thực nhiều nơi (mỗi nơi có thơng số riêng) q trình thực cơng việc khơng có thay đổi)
Khi cần phân đoạn chương trình để chương trình sáng dễ hiểu Phân loại chương trình con
Có hai loại chương trình thủ tục (Procedure) hàm (Function) Hàm có trả Như giới thiệu trước, thủ tục hàm đặt trước thân chương trình Khi gọi chương trình vị trí chương trình chính, máy nhảy đến địa đoạn mã chương trình (đã dịch sang chương trình máy Compiler) để thực hiện, sau thực xong quay câu lệnh sau lệnh gọi chương trình để thực tiếp
Các bước để viết chương trình con
Phải biết cấu trúc chương trình con, nên dùng thủ tục hay hàm yêu cầu đầu bài, biết sử dụng thông số …
Ghi chú: Khi cần tính giá trị, nên dùng Function, không nên dùng Procedure II/ Chương trình con
Chương trình dành riêng, Procedure Function, là tên chương trình con, sau tham số bao hai dấu ngoặc đơn (có thể có khơng, có nhiều cách dấu chấm phẩy “;”) Những tham số hình thức khơng đứng sau từ khố Var gọi tham số hình thức trị, có Var gọi tham số biến
Dạng Procedure
PROCEDURE Tên (Thamsố1 : Kiểu; …,ThamsốN: kiểu);
Const ……. Type
(55)……. Var ……. Begin ……. ……. End;
Ghi chú: Thủ tục khơng có kiểu trả về, sau End dấu chấm phẩy
Ví dụ:
Procedure Giaithua(m:integer; var gt:Real); Var
i : integer; Begin gt:= 1;
For i:=1 to m gt:= gt * i; End;
Dạng Function.
FUNCTiON Tên (Thamsố1 : Kiểu; …,ThamsốN: kiểu) : Kiểu;
Const ……. Type ……. Var ……. Begin ……. …….
Tên := giá trị trả về End;
Ghi chú: Hàm có trả về, sau End dấu chấm phẩy
Ví dụ:
Function Giaithua(m:integer) : Real; Var
i : integer; gt : Real; Begin gt:= 1;
For i:=1 to m gt:= gt * i;
giaithua:= gt; (* Gán trị kết cho tên hàm*) End;
III/ Một số đặc tính chương trình con Biến toàn cục biến địa phương
Giả sử có chương trình có chương trình con, biến nằm phần khai báo chương trình gọi biến toàn cục (global variable)
Những biến thuộc phần khai báo Var chương trình gọi biến cục (local variable) hay gọi biến địa phương chương trình
Ví dụ:
Program TínhGiaithua; Var
n : integer;
Function giaithua(m : integer) : Real; Var
(56)gt : real; Begin gt := 1;
For i:=1 to m gt := gt * i; giaithua := gt; End;
Begin …… …… End
n biến tồn cục, biết đến tồn chương trình
i, gt biến địa phương chương trình con, biến khơng có ý nghĩa thân chương trình chính, tức khơng biết đến
Ví dụ:
Trong thân chương trình ví dụ trên, bạn viết câu lệnh Write(‘Ket qua’, gt); compiler bị báo lỗi, biến gt chưa khai báo chương trình
Ghi chú:
Tầm vực biến phạm vi khối (chương trình hay chương trình khai báo nó) Chuyển tham số cho chương trình Tham trị - tham biến
Các tham số gọi chương trình gọi tham số thực (actual parameter) Khi gọi tham số thực chuyển cho chương trình tương ứng với tham số hình thức theo thứ tự xuất chúng danh sách tham số
Ví dụ:
Program Tinh; Var
a,b : integer;
Function Cong(x:integer; y:integer):integer; Var
……… Begin ……… ……… End; Begin
Write(‘Ban nhap so a = ‘); Readln(a);
Write(‘Ban nhap so b = ‘); Readln(b);
Writeln( a, ‘+’, b, ‘= ‘, Cong(a,b)); Readln;
End
Nhìn vào chương trình trên, bạn thấy chương trình hàm có tên Cong, với hai tham số hình thức theo thứ tự x, y có kiểu ngun Trong thân chương trình chính, bạn thấy tham số thực a, b truyền tương ứng cho hàm gọi Cong(a,b) a tương ứng với x, b tương ứng với y Bạn thử thay lại lời gọi hàm Cong(b,b) kết b+b, số a nhập vào khơng tham gia việc gọi hàm
Tham trị (value parameter):
Không sau từ khoá Var danh sách tham số hình thức
Được cấp nhớ riêng chương trình gọi bị xố bỏ chương trình thực xong
Tham số thực tương ứng biểu thức
Tham trị thực chất biến cục bộ, chương trình gọi, tham trị nhận trị trị tham số thực, trước chương trình bắt đầu thực
(57)Tham biến (variable parameter):
Đi sau tứ khoá Var danh sách tham số Tham số thực tương ứng phải biến
Những thay đổi tham biến thực chất thực tham số thực tương ứng Thực chất truyền tham số tham biến truyền địa
Viết chương trình con
Như biết, chương trình có hai dạng, Procedure Function
a Dạng Procedure
Ví dụ:
Viết chương trình tính phép tốn dùng chương trình thủ tục Program Thutuc;
Var
a,b,c : real;
Procedure Cong(x:real; y:real; z:real;); Begin
z := x + y; End;
Procedure Tru(x:real; y:real; z:real;); Begin
z := x - y; End;
Procedure Nhan(x:real; y:real; z:real;); Begin
z := x * y; End;
Procedure Chia(x:real; y:real; z:real;); Begin
z := x / y; End;
Begin (*Chương trình chính*) Write(‘Ban nhap vao so a = ‘); Readln(a);
Write(‘Ban nhap vao so b = ‘); Readln(b);
Cong(a,b,c);
Writeln(a, ‘+’, b, ‘= ‘, c); Tru(a,b,c);
Writeln(a, ‘-’, b, ‘= ‘, c); Nhan(a,b,c);
Writeln(a, ‘*’, b, ‘= ‘, c); Chia(a,b,c);
Writeln(a, ‘/’, b, ‘= ‘, c); Readln;
End
b Dạng Function
Ví dụ:
Viết chương trình tính phép tốn dùng chương trình hàm Program Ham;
Var a,b : real;
Function Cong(x:real; y:real) : real; Var
z : real; Begin
(58)Function Tru(x:real; y:real) : real; Var
z : real; Begin
z := x - y; Tru:=z; End;
Function Nhan(x:real; y:real) : real; Var
z : real; Begin
z := x * y; Nhan:=z; End;
Function Chia(x:real; y:real) : real; Var
z : real; Begin
z := x / y; Chia:=z; End;
Begin (*Chương trình chính*) Write(‘Ban nhap vao so a = ‘); Readln(a);
Write(‘Ban nhap vao so b = ‘); Readln(b);
Writeln(a, ‘+’, b, ‘= ‘, Cong(a,b)); Writeln(a, ‘-’, b, ‘= ‘, Tru(a,b)); Writeln(a, ‘*’, b, ‘= ‘, Nhan(a,b)); Writeln(a, ‘/’, b, ‘= ‘, Chia(a,b)); Readln;
End
Qua hai ví dụ viết chương trình dạng thủ tục hàm, bạn cần lưu ý cách gọi, bước thực hiện, phân biệt khác để nắm vững tránh sai sót viết chương trình sau
Ghi chú:
Tầm vực chương trình tồn cha (tại vị trí cha gọi chương trình nó)
Tính đệ quy chương trình con
Đệ quy khái niệm toán học khoa học máy tính Định nghĩa đơn giản chương trình đệ quy chương trình mà gọi đến (và hàm đệ quy hàm định nghĩa dựa nó) Một chương trình đệ quy khơng thể gọi đến mãi (và hàm đệ quy lúc định nghĩa dựa vào trừ định nghĩa bị xoay vòng) Một điều kiện cần thiết phải có điều kiện kết thúc chương trình khơng gọi đến (và hàm khơng định nghĩa dựa nó) Tất tính tốn thực tế diễn đạt khn mẫu đệ quy
Ví dụ 1:
Bạn xem hàm giai thừa, định nghĩa công thức: N! = N * (N-1)! với N>=1 0! =
Hàm tương ứng với chương trình đệ quy sau: FuncTion Giaithua(N : integer) : integer; Begin
if N = then Giaithua:= 1 else
(59) Nó gọi đến (với giá trị đối số nhỏ hơn) có điều kiện kết thúc tính kết trực tiếp
Ví dụ 2:
Tính dãy Fibonacci:
Fn = Fn-1 + Fn-2 với n = F0 = F1 = Quan hệ định nghĩa dãy
1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, … Số sau hai số trước cộng lại
Chúng ta có chương trình đệ quy
Function Fibonacci(n: integer) : integer; Begin
if n<=1 then Fibonacci := 1 else
Fibonacci := Fibonacci(n – 1) + Fibonacci(n – 2); End;
TĨM LƯỢC
Chương trình đoạn chương trình, câu lệnh chúng bao cặp từ khoá
Begin … End; Chúng ta gọi nhiều lần chương trình qua tên chương trình
Chương trình có hai dạng, Procedure Function
Các khai báo chương trình giống chương trình chính, chương trình phải có dạng Procedure Function, sau đến tên chương trình con, tham số bao dấu ngoặc đơn, tham số có khơng cách dấu chấm phẩy
Hàm có trả
Cần xác định nên dùng chương trình thủ tục hay hàm Cần ý đến cách gọi hàm thủ tục chương trình
Các biến khai báo sau từ khố Var chương trình gọi biến tồn cục, biết tồn chương trình, biến khai báo sau từ khố Var chương trình gọi biến địa phương khơng biết đến chương trình
Khi gọi tham số thực chuyển cho chương trình tương ứng với tham số hình thức theo thứ tự xuất chúng danh sách tham số
Tham trị Không sau từ khoá Var danh sách tham số hình thức Được cấp nhớ riêng chương trình gọi bị xố bỏ chương trình thực xong Tham số thực tương ứng biểu thức Tham trị thực chất biến cục bộ, chương trình gọi, tham trị nhận trị trị tham số thực, trước chương trình bắt đầu thực Những thay đổi tham trị khơng ảnh hưởng đến chương trình chính, nghĩa khơng kéo theo thay đổi tham số thực tương ứng
Tham biến sau tứ khoá Var danh sách tham số.Tham số thực tương ứng phải
biến.Những thay đổi tham biến thực chất thực tham số thực tương ứng Thực chất truyền tham số tham biến truyền địa
Đệ quy khái niệm toán học khoa học máy tính Định nghĩa đơn giản
chương trình đệ quy chương trình mà gọi đến (và hàm đệ quy hàm định nghĩa dựa nó)
PHẦN THỰC HÀNH:
1 Viết lại chương trình tính bốn phép toán bản, cộng - trừ - nhân – chia thủ tục hàm Viết chương trình kiểm tra xem số tự nhiên n có phải số nguyên tố hay không?
3 Viết chương trình kiểm tra xem mảng a[] có mặt phần tử x hay khơng?
4 Viết chương trình cho biết số phần tử dương, số phần tử âm, số phần tử mảng số nguyên
(60)Function giaithua(m : integer) : Real; Var
i : integer; gt : real; Begin gt := 1;
For i:=1 to m gt := gt * i; giaithua := gt; End;
Viết chương trình nhập vào số nguyên dương cho kết với chương trình
(61)BÀI KIỂU DỮ LIỆU CÓ CẤU TRÚC FILE KIẾN THỨC YÊU CẦU:
Biết cần sử dụng đến FILE
Biết cách khai báo sử dụng
Biết nắm vững hàm câu lệnh dùng FILE KIẾN THỨC ĐẠT ĐƯỢC
Biết khái niệm FILE Pascal
Biết cấu trúc loại FILE, File văn bản, File định kiểu không định kiểu Biết cách khai báo biến File, gán tên File, mở File để đọc, để ghi đóng File
Biết nắm vững biến toàn cục biến địa phương, đặc biệt tầm vực hoạt động biến loại
này
Biết sử dụng thành thạo lệnh, thủ tục hàm File
I/ Khái niệm File Khái niệm
Kiểu File (tập tin) Pascal cấu trúc liệu gồm nhiều phần tử kiểu chứa thiết bị đĩa cứng hay đĩa mềm, số lượng phần tử không hạn chế, biến kiểu file dùng để thiết lập với thiết bị ngồi máy in, hình …
File dùng để lưu trữ liệu thời gian dài, chương trình kết thúc Chứa với khối lượng lớn
Để cung cấp cho hay nhiều chương trình hoạt động nhiều thời điểm Cấu trúc phân loại file.
File kiểu liệu quan trọng Mọi liệu cần lưu trữ đĩa mềm, đĩa cứng phải dùng đến kiểu file Chúng ta có loại file
File văn (text) File có định kiểu File không định kiểu II/ File
Cách khai báo biến file
a Khai báo file văn
Được khai báo với từ khoá Text Tập tin văn dùng phổ biến số thiết bị ngoại vi hình, bàn phím, máy in …Bạn khai báo sau:
Var
<Tenbienfile> : Text;
Trong kiểu Text định nghĩa trước
b Khai báo file có định kiểu
Được khai báo với từ khoá FiLE OF Kiểu phần tử, bạn khai báo sau: Type
<Tenkieufile> = FiLE OF Kieuphantu; Var
<Tenbienfile> : (Tenkieufile>; Hoặc khai báo trực tiếp sau: Var
<Tenbienfile> : FiLE OF Kieuphantu;
Có thể hiểu phần tử file có định kiểu Record
Ví dụ:
Type
Lilich = Record
Hovaten : String [40];
(62)Namsinh : integer; Noisinh : String [50]; Diachi : String [50]; Tencha : String [40]; Tenme : String [40]; End;
FileLilich = FiLE OF Lilich; Var
Hocsinh : Lilich; F1, F2 : FileLilich;
(Từ Type đến End; cấu trúc kiểu Record)
c/ Khai báo file không định kiểu
Được khai báo với từ khố có chữ FiLE Bạn khai báo sau: Var
<Tenbienfile> : FiLE;
Với kiểu file trên, ta phải dùng thủ tục sau để gán tên file, mở file đóng file Lệnh gán tên file cho biến file đại diện
ASSiGN (F, Tenfile); Lệnh mở file
a/ Mở file để đọc
RESET (F);
b/ Mở file để ghi
REWRiTE (F); Lệnh đóng file
Khi xử lý xong, phải đóng file lại CLOSE (F);
Ví dụ 1:
Assign(F1, ‘Hocsinh.LL’); Gán Hocsinh.LL cho F1
Ví dụ 2:
Assign(F1, “Hocsinh.LL’); Rewrite(F1);
Chỉ sau thực phát biểu Rewrite(F1) đĩa có file Hocsinh.LL, file rỗng Nếu file Hocsinh.LL có đĩa, hai phát biểu xoá file Hocsinh.LL cũ
Ví dụ 3:
Assign(F2, ‘Hocsinh.LL’); Reset(F2);
Nếu file chưa có đĩa, có lỗi thời gian thi hành Một số lệnh hàm xử lý file
a Với File có định kiểu:
Lệnh Read(Bienfile, cacbien)
Cacbien hay nhiều biến thuộc kiểu thành phần kiểu file, có nhiều chúng cách dấu phẩy (,) Các biến đọc từ Bienfile, sau lần đọc, trỏ file tự động đưa đến phần tử
Ví dụ:
Var
F1 : FileLilich; x, y : Lilich; Begin
Assign(F1, ‘Hocsinh.LL’); Reset(F1);
Read(F1, x, y); ……
……
(63)x.Namsinh 1990 ……
……
y.Hovaten ‘Phan Thanh Bình’ y.Namsinh 1991
…… ……
Lệnh Write(Bienfile, Cacbien)
Giải thích lệnh read, biến ghi lên Bienfile, sau lần ghi trỏ file tự động đưa đến phần tử
Ví dụ:
…… ……
Write(‘Ban cho biet ten file: ‘); Readln(Tenfile);
Assign(F1, Tenfile); Rewrite(F1);
x.Hovaten := ‘Thanh Văn Anh’; x.Namsinh := 1990;
x.Noisinh := ‘Saigon’; ……
……
y.Hovaten := ‘Phan Văn Bình’; y.Namsinh := 1991;
y.Noisinh := ‘HaNoi’; ……
……
Write(F1,x, y); Close(F1);
b Với File văn
Ngoài Read(F, ch); Write(F, ch); dùng để đọc, ghi ký tự, tập tin văn có lệnh ghi, đọc theo dịng văn
Readln(F, Cacbien); Writeln(F, Cacbien);
c Với File không định kiểu
Dùng lệnh đọc ghi theo khối, có tốc độ nhanh BlockRead BlockWrite.
Ngồi cịn có số thủ tục hàm xử lý File thông dụng sau:
Hàm EOF(F): Cho giá trị True trỏ file vị trí kết thúc file Thủ tục dùng cần đọc liệu
Hàm EOLN(F): Cho giá trị True trỏ file vị trí kết thúc dịng file văn bản, thủ tục dùng với file văn
Hàm SEEK(F, i): Đặt vị trí trỏ file vào vị trí RECORD thứ i (i đếm từ 0) SEEK áp dụng cho file có định kiểu
Thủ tục EARSE(F): Xoá file đĩa Thủ tục RENAME(F): Đổi tên file
(64) Kiểu File cấu trúc liệu gồm nhiều phần tử kiểu chứa thiết bị
đĩa cứng hay đĩa mềm
File dùng để lưu trữ liệu thời gian dài, chương trình kết thúc Chứa với khối lượng lớn
Để cung cấp cho hay nhiều chương trình hoạt động nhiều thời điểm
Chúng ta có loại file File văn (text) File có định kiểu File không định kiểu
Khai báo biến file văn bản:
Var <Tenbienfile> : Text;
Khai báo biến file định kiểu: Type
<Tenkieufile> = FiLE OF Kieuphantu; Var
<Tenbienfile> : (Tenkieufile>; Hoặc khai báo trực tiếp sau: Var
<Tenbienfile> : FiLE OF Kieuphantu;
Khai báo biến file không định kiểu: Var
<Tenbienfile> : FiLE;
Lệnh gán tên file:
ASSiGN (F, Tenfile);
Lệnh mở file để đọc: RESET (F);
Lệnh mở file để ghi: REWRiTE (F);
Lệnh đóng file: CLOSE (F);
PHẦN THỰC HÀNH:
1 Tham khảo chương trình nhập điểm cho học sinh, khơng muốn nhập phần họ tên học sinh bỏ trống
Program Vaodiem; Type
Phieudiem = Record HotenHs : String[40]; Van : real;
Toan : real; Ngoaingu : real; Ly : real;
Hoa : real; Sinh : real; Kythuat : real; Su : real; Dia : real; CD : real; TD : real; Nhac : real; Ve : real; End;
FilePhieudiem = FiLE OF Phieudiem; Var
(65)DK : Boolean; Begin
Assign(F, ‘Lop’); Rewrite(F); DK := True; While DK With HS Begin
Writeln(‘Ban de vung ho ten neu khong nhap tiep, go Enter.’); Write(‘Ho va ten hoc sinh: ‘);
Readln(HotenHS);
if HotenHS = ‘ ‘ then DK:= False Else
Begin
Write(‘Diem Van : ‘); Readln(Van); Write(‘Diem Toan : ‘); Readln(Toan);
Write(‘Diem Ngoai ngu : ‘); Readln(Ngoaingu); Write(‘Diem Ly : ‘); Readln(Ly);
Write(‘Diem Hoa : ‘); Readln(Hoa); Write(‘Diem Sinh : ‘); Readln(Sinh);
Write(‘Diem Ky thuat : ‘); Readln(Kythuat); Write(‘Diem Su : ‘); Readln(Su);
Write(‘Diem Dia : ‘); Readln(Dia); Write(‘Diem Cong dan : ‘); Readln(CD); Write(‘Diem The duc : ‘); Readln(TD); Write(‘Diem Nhac : ‘); Readln(Nhac); Write(‘Diem Ve : ‘); Readln(Ve); Write(F, HS);
End; End; Close(F); End
Giải thích:
Trong chương trình trên, bạn khai báo Phieudiem có kiểu Record gồm 13 phần tử
Thành phần HotenHS có kiểu chuỗi, thành phần cịn lại có kiểu số thực
Khai báo File có định kiểu
Khai báo biến HS có kiểu Phieudiem
Khai báo biến F có kiểu FilePhieudiem
Biến DK có kiểu Boolean, dùng làm điều kiện vịng lặp
Vì dùng kiểu File, bạn phải dùng lệnh gán Assign, theo điều kiện bạn phải dùng lệnh mở file để ghi Rewrite
Vịng lặp While để nhập thơng tin Phieudiem DK true
Nếu để trống phần HotenHS, gõ Enter, khỏi vịng lặp DK lúc False
Chương trình dùng để nhập thông tin vào File, muốn vừa nhập thông tin vào File đồng thời cho xuất hình thơng tin vừa nhập Bạn thay đổi chương trình chút sau:
Program Vaodiem; Type
Phieudiem = Record HotenHs : String[40]; Van : real;
Toan : real; Ngoaingu : real; Ly : real;
(66)Kythuat : real; Su : real; Dia : real; CD : real; TD : real; Nhac : real; Ve : real; End;
FilePhieudiem = FiLE OF Phieudiem; Var
HS : Phieudiem; F : FilePhieudiem; DK : Boolean; Begin
Assign(F, ‘Lop’); Rewrite(F); DK := True; While DK With HS Begin
Writeln(‘Ban de vung ho ten neu khong nhap tiep, go Enter.’); Write(‘Ho va ten hoc sinh: ‘);
Readln(HotenHS);
if HotenHS = ‘ ‘ then DK:= False Else
Begin
Write(‘Diem Van : ‘); Readln(Van); Write(‘Diem Toan : ‘); Readln(Toan);
Write(‘Diem Ngoai ngu : ‘); Readln(Ngoaingu); Write(‘Diem Ly : ‘); Readln(Ly);
Write(‘Diem Hoa : ‘); Readln(Hoa); Write(‘Diem Sinh : ‘); Readln(Sinh);
Write(‘Diem Ky thuat : ‘); Readln(Kythuat); Write(‘Diem Su : ‘); Readln(Su);
Write(‘Diem Dia : ‘); Readln(Dia); Write(‘Diem Cong dan : ‘); Readln(CD); Write(‘Diem The duc : ‘); Readln(TD); Write(‘Diem Nhac : ‘); Readln(Nhac); Write(‘Diem Ve : ‘); Readln(Ve); Write(F, HS);
End; End; Close(F); Reset(F);
While not EOF(F) Begin
Read(F, HS); Begin
Writeln(‘Ho va ten hoc sinh: ‘, HS.HotenHS); Writeln(‘Diem Van: ‘, HS.Van);
Writeln(‘Diem Toan: ‘, HS.Toan);
Writeln(‘Diem Ngoai ngu: ‘, HS.Ngoaingu); Writeln(‘Diem Ly: ‘, HS.Ly);
Writeln(‘Diem Hoa: ‘, HS.Hoa); Writeln(‘Diem Sinh: ‘, HS.Sinh);
(67)Writeln(‘Diem Dia: ‘, HS.Dia); Writeln(‘Diem Cong dan: ‘, HS.CD); Writeln(‘Diem The duc: ‘, HS.TD); Writeln(‘Diem Nhac: ‘, HS.Nhac); Writeln(‘Diem Ve: ‘, HS.Ve); End;
End; Close(F); Readln; End
Phần đầu chương trình giống Để đọc File, dùng lệnh Reset
Vịng lặp While in thơng tin hình khơng phải EOF (cuối tập tin)
Khi thực chương trình, in lần tất học sinh mà bạn vừa nhập, có nhiều học sinh, thấy hình cuối cùng, để thấy lần thông tin học sinh mà cho biết học sinh thứ mấy, bạn thêm vài lệnh (những lệnh đậm)
Program Vaodiem; Type
Phieudiem = Record HotenHs : String[40]; Van : real;
Toan : real; Ngoaingu : real; Ly : real;
Hoa : real; Sinh : real; Kythuat : real; Su : real; Dia : real; CD : real; TD : real; Nhac : real; Ve : real; End;
FilePhieudiem = FiLE OF Phieudiem; Var
HS : Phieudiem; F : FilePhieudiem; DK : Boolean; N : integer; Begin
Assign(F, ‘Lop’); Rewrite(F); DK := True; While DK With HS Begin
Writeln(‘Ban de vung ho ten neu khong nhap tiep, go Enter.’); Write(‘Ho va ten hoc sinh: ‘);
Readln(HotenHS);
if HotenHS = ‘ ‘ then DK:= False Else
Begin
Write(‘Diem Van : ‘); Readln(Van); Write(‘Diem Toan : ‘); Readln(Toan);
(68)Write(‘Diem Ly : ‘); Readln(Ly); Write(‘Diem Hoa : ‘); Readln(Hoa); Write(‘Diem Sinh : ‘); Readln(Sinh);
Write(‘Diem Ky thuat : ‘); Readln(Kythuat); Write(‘Diem Su : ‘); Readln(Su);
Write(‘Diem Dia : ‘); Readln(Dia); Write(‘Diem Cong dan : ‘); Readln(CD); Write(‘Diem The duc : ‘); Readln(TD); Write(‘Diem Nhac : ‘); Readln(Nhac); Write(‘Diem Ve : ‘); Readln(Ve); Write(F, HS);
End; End; Close(F); Reset(F); N := 1;
While not EOF(F) Begin
Read(F, HS); Begin
Writeln(‘Day la hoc sinh thu: ‘,N); Writeln(‘Ho va ten hoc sinh: ‘, HS.HotenHS); Writeln(‘Diem Van: ‘, HS.Van);
Writeln(‘Diem Toan: ‘, HS.Toan);
Writeln(‘Diem Ngoai ngu: ‘, HS.Ngoaingu); Writeln(‘Diem Ly: ‘, HS.Ly);
Writeln(‘Diem Hoa: ‘, HS.Hoa); Writeln(‘Diem Sinh: ‘, HS.Sinh);
Writeln(‘Diem Ky thuat: ‘, HS.Kythuat); Writeln(‘Diem Su: ‘, HS.Su);
Writeln(‘Diem Dia: ‘, HS.Dia); Writeln(‘Diem Cong dan: ‘, HS.CD); Writeln(‘Diem The duc: ‘, HS.TD); Writeln(‘Diem Nhac: ‘, HS.Nhac); Writeln(‘Diem Ve: ‘, HS.Ve); N;= N + 1;
Readln; End; End; Close(F); Readln; End
2 Viết chương trình để ghi phần tử mảng so[] lên file Viết chương trình đọc liệu từ file phần tử có kiểu
Luong = record Hoten : String[40]; Mucluong : real; End;
Vào mảng, xếp lại theo thứ tự tăng dần vùng mức lương ghi trở lại vào file
4 Viết chương trình dự đốn giải bóng đá Sea games 22, in kết dự đoán lên file Cách dự đoán: cho điểm đội bóng theo mục sau:
Điểm huấn luyện viên tối đa 30 điểm Điểm thủ môn tối đa 15
Điểm hậu vệ tối đa 30
(69) Điểm thuận lợi sân bãi tối đa 20 Sau tính tổng điểm đội