1. Trang chủ
  2. » Nhà nghiên cứu

GIao an Tin hoc 9 chuan ca nam

69 3 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

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

Ngày đăng: 05/03/2021, 11:29

Xem thêm:

TÀI LIỆU CÙNG NGƯỜI DÙNG

  • Đang cập nhật ...

TÀI LIỆU LIÊN QUAN

w