Chương 1: Thuật giải và chương trình1.Thuật giải algorithm Là một tập hữu hạn các thao tác các công việc, các phép toán có thể đặt tên được và được thực hiện theo một trình tự thích hợp
Trang 1LẬP TRÌNH PASCAL
LỚP: CĐ CK 2011
Trang 2Chương 1: Thuật giải và chương trình
1.Thuật giải (algorithm)
Là một tập hữu hạn các thao tác (các công việc, các phép toán) có thể đặt tên được và được thực hiện theo một trình tự thích hợp trên một số đối tượng để đạt được mục đích mong muốn
"Hữu hạn" ở đây được hiểu cả về mặt thời gian thực hiện lẫn công cụ thực hiện.
I. Khái niệm
Trang 3+ Tính dừng: Thuật toán phải kết thúc sau một số hữu hạn bước.
+ Tính xác định: Các thao tác ở mỗi bước phải hết sức rõ ràng và chỉ được hiểu theo một nghĩa duy nhất Trong cùng một điều kiện hai máy khác nhau hoặc hai lần thao tác khác nhau phải cho cùng một kết quả khi thực hiện cùng một thuật toán.
+ Tính hàng loạt: Thuật toán có hiệu lực như nhau đối với các bài
toán cùng loại (có cùng miền áp dụng thuật toán).
+ Tính khả thi: Thuật toán phải bao gồm các thao tác mà máy có thể thực hiện được (chỉ bao gồm những phép toán số học, các phép
so sánh, các phép logic, các phép nhập xuất thông tin tiêu chuẩn).
+ Tính đầy đủ: Thuật toán phải vét được hết các tình huống, các khả năng có thể xảy ra, không bỏ sót bất kỳ một trường hợp nào.
II CÁC ĐẶC TRƯNG CỦA THUẬT TOÁN
Trang 4III CÁC DẠNG DIỄN TẢ THUẬT TOÁN
1 Diễn đạt bằng văn bản (ngôn ngữ tự nhiên)
-Khá đơn giản; gần gũi với tư duy của con người nhưng phụ thuộc rất nhiều vào cách diễn đạt của người sử dụng
Vì vậy nó không tránh khỏi có những chỗ rườm rà khiến cho người đọc không có được một cái nhìn khái quát với toàn bộ thuật toán
2 Diễn đạt bằng ngôn ngữ lập trình
Ngôn ngữ lập trình (language program) là ngôn ngữ do các chuyên gia tin học tạo ra chuyên dùng để viết chương trình cho máy tính Nó được xây dựng khá đơn giản về chính tả và ngữ pháp khá gần gũi với ngôn ngữ khoa học kỹ thuật, quản lý
Trang 5III CÁC DẠNG DIỄN TẢ THUẬT TOÁN
3 Diễn đạt bằng lưu đồ
Điểm bắt đầu và chấm dứt thuật toán
Thao tác nhập hay xuất dữ liệu
Khối xử lý công việc
Khối quyết định lựa chọn
Điểm nối
Chuẩn bị
Khối chương trình con
Đường đi của chương trình
Trang 6Bước 1: Nhập vào 2 hệ số a và b
Bước 2: Xét điều kiện a = 0 ?
Nếu đúng là a = 0, thì đi đến bước 3 Nếu không, nghĩa là a ≠ 0, thì đi đến bước 4
Bước 3: Xét điều kiện b = 0 ?
Nếu b = 0, thì báo phương trình có vô số nghiệm Chuyển đến bước 5
Nếu b ≠ 0, thông báo phương trình vô nghiệm Chuyển đến bước 5
Bước 4:
PT có một nghiệm duy nhất là x = - b/a
Bước 5: Kết thúc thuật toán
III CÁC DẠNG DIỄN TẢ THUẬT TOÁN
Bằng văn bản
Ví dụ 2: Thuật toán giải phương trình bậc nhất ax + b = 0
Trang 7Bằng Lưu Đồ
Trang 8Ví dụ 3 : Tính tổng S của n số nguyên đầu tiên, ta tiến hành theo hai thuật giải sau
Trang 9Ví dụ 4: Thuật giải đổi chỗ
Viết thuật giải để nhập vào 2 số A, B từ bàn phím sau đó đổi giá trị của biến A cho biến B và ngược lại.
Trang 10Ví dụ 5: Thuật giải tìm số lớn nhất trong 2 số
Trang 11BÀI TẬP
1 Viết thuật giải nhập 1 số từ bàn phím và in ra bình phương của số đó nếu số đó là số dương
2.Viết thuật giải nhập từ bàn phím một số tự nhiên N và in ra các số nguyên trong phạm vi từ 1 đến N
3 Viết thuật giải nhập từ bàn phím 2 số tự nhiên m, n (m<n) và in ra màn hình các số chia hết cho m trong khoảng từ 1 đến n
Hướng dẫn: Để kiểm tra xem một số x có chia hết cho m không ta dùng biểu thức kiểm tra X MOD M=0 Nếu biểu thức này là đúng thì x chia hết cho m.
4 Viết thuật giải nhập 3 số từ bàn phím và in ra số lớn nhất trong ba số đó
5 Viết thuật giải nhập 2 số từ bàn phím và in ra UCLN, BCNN của hai số đó
Trang 12CHƯƠNG 2: CÁC KHÁI NIỆM CƠ BẢN CỦA NGÔN NGỮ LẬP TRÌNH PASCAL
I. GIỚI THIỆU
Pascal là ngôn ngữ lập trình cấp cao do giáo sư Niklaus Writh (trường ĐH kỹ thuật Zurich, Thuỵ sỹ) sáng tác và công bố vào đầu những năm 1970
Nó giúp cho sinh viên cũng như người mới học lập trình có được thói quen viết một chương
trình có cấu trúc sáng sủa, rõ ràng dễ đọc và dễ hiểu.
Trang 13 Pascal là một ngôn ngữ có định kiểu mạnh mẽ Có nghĩa một biến và một hằng của một kiểu dữ liệu không thể tự do đem trộn lẫn với biến và hằng của một kiểu dữ liệu khác Khi
sử dụng phải khai báo rõ kiểu của chúng.
Các kiểu dữ liệu trong Pascal hết sức phong phú thể hiện được nhiều kiểu dữ liệu từ đơn giản đến phức tạp.
Pascal là một ngôn ngữ có cấu trúc Một ngôn ngữ có cấu trúc khối là một ngôn ngữ mà
ta có thể tách các thông tin dữ liệu (biến, hằng, ) và các lệnh cần dùng cho một nhiệm
vụ xác định thành những khối riêng để người lập trình có thể giải quyết dần dần từng khối một hoặc cho nhiều người cùng tham gia lập trình
Ưu điểm của Pascal
Trang 14 Tính cấu trúc của Pascal được thể hiện trên 3 mặt:
Cấu trúc về mặt dữ liệu: từ các dữ liệu kiểu đơn giản hoặc lệnh có cấu trúc ta có thể xây
dựng các dữ liệu có cấu trúc phức tạp hơn
Cấu trúc về mặt lệnh: từ các lệnh đơn giản hoặc lệnh có cấu trúc ta có thể xây dựng các
lệnh phức tạp hơn
Cấu trúc về mặt chương trình: một chương trình có thể chia thành những đơn thể (modul)
tương đối độc lập và những chương trình con
Ưu điểm của Pascal
Trang 15II CÁC PHẦN TỬ CƠ BẢN CỦA NGÔN NGỮ PASCAL
2.1 Bộ ký tự
Ngôn ngữ Pascal được xây dựng từ bộ ký hiệu cơ bản sau:
Bộ 26 chữ cái La tinh: 26 chữ cái thường a, b, c, , z
26 chữ cái hoa: A,B,C, Z
dấu nháy đơn ' các ký hiệu khác như [] $
Dấu cách (space) được dùng để ngăn cách các từ
Trang 162.2 Từ khoá
Là các từ riêng của Pascal, có ngữ nghĩa đã được xác định, không được dùng nó vào các việc khác hoặc đặt tên mới trùng với các từ khóa
Từ khóa chung:
PROGRAM, BEGIN, END, PROCEDURE, FUNCTION
Từ khóa để khai báo:
CONST, VAR, TYPE, ARRAY, STRING, RECORD, SET,
FILE, LABEL
Từ khóa của lệnh lựa chọn:
IF THEN ELSE, CASE OF
Từ khóa của lệnh lặp:
FOR TO DO, FOR DOWNTO DO,
WHILE DO, REPEAT UNTIL
Từ khóa điều khiển:
WITH, GOTO, EXIT, HALT
Từ khóa toán tử:
AND, OR, NOT, IN, DIV, MOD
Trang 172.3 Tên chuẩn
Tên chuẩn là tên đã được định nghĩa sẵn trong Pascal, nhưng người ta có thể định nghĩa lại nếu muốn Trong Pascal ta có các tên chuẩn sau đây:
Boolean, Char, Integer, Word, Byte, Real, Text
False, True, MaxInt
Abs, Chr, Cos, Sin, Eof, Eoln
Exp, Ln, Odd, Ord
Round, Trunc, Sqr, Pred, Succ
Dispose, New, Get, Put,
Read, Readln, Write, Writeln, Reset, Rewrite
Trang 182.4 Tên hay định danh
Là một dãy ký tự do người sử dụng tự đặt cho các hằng, biến, hàm, thủ tục, tên chương trình, tên kiểu dữ liệu mới Tên hay định danh trong Pascal phải tuân thủ các qui định sau:
Tên phải được bắt đầu bằng một chữ cái hoặc chữ số.
Trong tên không chứa dấu cách
Tên không được trùng với một từ khoá của Pascal
Số ký tự của tên bị hạn chế là 8 (Pascal chuẩn), 127 (Turbo Pascal)
Ví dụ: Các tên viết như sau:
Chú ý: Để làm cho tên được sáng sủa người ta cho phép dùng dấu gạch dưới (_) khi viết tên Ví dụ:
GIAI_PHUONG_TRINH
• Các từ trong Pascal có thể viết hoa hoặc viết thường mà giá trị và ý nghĩa của chúng không thay đổi.
Trang 19III CẤU TRÚC CỦA MỘT CHƯƠNG TRÌNH PASCAL
Trang 20Một chương trình Pascal có các phần:
* Phần tiêu đề: Phần này bắt đầu bằng từ khóa Program rồi tiếp đến là tên của chương trình và chấm dứt bằng dấu
chấm phẩy (;)
Tên chương trình phải được đặt theo đúng qui cách của danh hiệu tự đặt Phần tiêu đề có hoặc không
* Phần khai báo dữ liệu: Một chương trình Pascal có thể có một số hoặc tất cả các khai báo dữ liệu sau:
USES : khai báo các thư viện chương trình
CONST : khai báo hằng
TYPE : định nghĩa kiểu dữ liệu mới
VAR : khai báo các biến
Phần khai báo CT con (có thể có hoặc không tùy theo nhu cầu)
* Phần thân chương trình: Phần thân chương trình là phần quan trọng nhất và bắt buộc phải có, phần này luôn nằm giữa 2 từ khoá là BEGIN và END ở giữa là lệnh mà các chương trình chính cần thực hiện Sau từ khóa END là dấu chấm (.) để báo kết thúc chương trình
III CẤU TRÚC CỦA MỘT CHƯƠNG TRÌNH PASCAL
Trang 22Ví dụ: Viết chương trình tính diện tích hình tròn biết bán kính là R , tính diện tích hình vuông
biết cạnh là a
PROGRAM VI_DU; (* Dòng tiêu đề *)
VAR R, A, Dientich: Real;(* Khai báo ba biến thực *)
BEGIN
Write ('Ban kinh : R= '); Readln (R);
Dientich:=3.14*R*R; (* Tính diện tích hình tròn *)
Writeln (‘Dien tich hinh tron la:', Dientich:10:3);
Write ('Do dai canh hinh vuong: A= '); Readln (A);
Trang 23 Dữ liệu (DATA) được định nghĩa là tất cả những gì được máy tính xử lý Các kiểu dữ liệu cần tới máy tính xử lý có rất nhiều, tồn tại dưới nhiều dạng khác nhau về bản chất, ý nghĩa, không chỉ là số liệu mà còn là các kí tự, các mệnh đề logic thể hiện qua các đối tượng cụ thể cần xử lý như tiền lương, địa chỉ, tên, tuổi, văn bản, tín hiệu
Về phương diện ngôn ngữ bậc cao thì dữ liệu đã được khái quát hoá với các kiểu dữ liệu Một kiểu dữ liệu (Data Type) được định nghĩa với hai điểm chính như sau:
- Một tập hợp các giá trị mà một biến thuộc kiểu đó có thể nhận được
- Trên đó xác định một số phép toán.
V CÁC KIỂU DỮ LIỆU CƠ SỞ
Trang 24Một biến phải gắn liền với một kiểu dữ liệu Các kiểu DL trong Pascal
Trang 25Kiểu dữ liệu đơn giản
Kiểu số nguyên( Integer ) Kiểu số thực( Real )
Kiểu ký tự( Char ) Kiểu logic( Boolean )
Kiểu dữ liệu có cấu trúc
Kiểu mảng( Array ) Kiểu chuỗi( String ) Kiểu tập hợp( Set ) Kiểu bản ghi( Record ) Kiểu tập tin( File,Text )
Trang 265.2 Kiểu số nguyên (Integer type)
a. Kiểu số nguyên trong Turbo Pascal : Được định nghĩa với các từ khóa sau:
V CÁC KIỂU DỮ LIỆU CƠ SỞ
Trang 27b Các phép toán số học đối với số nguyên
Trang 285.3 Kiểu số thực (Real type)
Có năm kiểu số thực được tổng kết qua bảng sau:
Trang 29 Các giá trị thực được biểu diễn theo hai cách: dạng dấu phẩy tĩnh và dạng dấu phẩy động.
Dạng dấu phẩy tĩnh: viết dạng thập phân bình thường Ví dụ: 2.14, +5.0, -25.345678, 0.0006
Dạng dấu phẩy động: số được tách thành hai phần là định trị và bậc Phần định trị là một
số nguyên hay số thực viết dưới dạng dấu phẩy tĩnh Phần bậc là một số nguyên.Hai phần cách nhau bởi chữ E hay e
Ví dụ: 123.456E-4: biểu diễn số 0.0123456
0.15E+5: biểu diễn số 15000.05E8: biểu diễn 500000000.0-55.3e2: biểu diễn -5530.0
Các ký tự biểu diễn một số thực phải viết liền nhau.
Trang 30Các phép toán số học cơ bản +, -, * , / được sử dụng trong kiểu real.
Chú ý: Riêng phép toán DIV và MOD không thực hiện đối với kiểu số thực
Trang 315.4 Kiểu logic (Boolean)
Một dữ liệu thuộc kiểu BOOLEAN là một đại lượng được chứa trong 1 byte ở Turbo Pascal và chỉ
có thể nhận được một trong hai giá trị logic là TRUE (đúng) và FALSE (sai)
Qui ước: TRUE > FALSE
Các phép toán trên kiểu Boolean:
Trang 32Các phép toán quan hệ cho kết quả kiểu Boolean:
Trang 335.5 Kiểu ký tự (Char type)
Tất cả các dữ liệu viết ở dạng chữ ký tự được khai báo bởi từ khóa CHAR.
Một ký tự được viết trong hai dấu nháy đơn ‘ ‘ Để tiện trao đổi thông tin cần phải sắp xếp, đánh số các ký tự, mỗi cách sắp xếp như vậy gọi là bảng mã Bảng mã thông dụng hiện nay là bảng mã ASCII
Để thực hiện các phép toán số học và so sánh, ta dựa vào giá trị số thứ tự mã ASCII của từng ký tự, chẳng hạn: 'A'
< 'a' vì số thứ tự mã ASCII tương ứng là 65 và 97.
Trong Turbo Pascal mỗi ký tự được chứa trong 1 byte Các hàm chuẩn liên quan đến kiểu ký tự:
Trang 34Phép toán Ý nghĩa Ví dụ
Các phép toán so sánh logic ‘A’<>’B TRUE
Trang 36X : Boolean ; Chon : Char ; Cần khai báo các biến trước khi sử dụng chúng trong chương trình Khai báo một biến là khai báo sự tồn tại của biến
đó và cho biết nó thuộc kiểu gì.
VI KHAI BÁO BIẾN, HẰNG, KIỂU VÀ BIỂU THỨC
Trang 37<Tên kiểu> = <Mô tả xây dựng kiểu>;
Diem = Real;
Tuoi = 1 100 ; Color = (Red, Blue, Green) ; Thu = (Sun, Mon, Tue, Wed, Thu, Fri, Sat) ; khi đã khai báo kiểu gì thì ta có quyền sử dụng để khai báo biến như ở ví dụ sau:
Dtb : Diem ;
T : tuoi ; Mau : Color ; Ngay_hoc : Thu;
VI KHAI BÁO BIẾN, HẰNG, KIỂU VÀ BIỂU THỨC
Trang 38Mức ưu tiên: Các phép toán:
1 Biểu thức trong ngoặc đơn ( )
VI KHAI BÁO BIẾN, HẰNG, KIỂU VÀ BIỂU THỨC
Trang 396.4 Biểu thức (Expression)
c Qui ước tính thứ tự ưu tiên
Khi tính một biểu thức có 3 qui tắc về thứ tự ưu tiên như sau:
Qui tắc 1 : Các phép toán nào có ưu tiên cao hơn sẽ được tính trước
Qui tắc 2 : Trong các phép toán có cùng thứ tự ưu tiên thì sự tính toán sẽ được thực hiện từ trái sang phải
Qui tắc 3 : Phần trong ngoặc từ trong ra ngoài được tính toán để trở thành một giá trị đơn
d Kiểu của biểu thức
Là kiểu của kết quả sau khi tính biểu thức.
Ví dụ : Biểu thức sau được gọi là biểu thức Boolean:
not (('a'>'c') and ('c'>'C')) or ('B'='b') có giá trị TRUE
VI KHAI BÁO BIẾN, HẰNG, KIỂU VÀ BIỂU THỨC
Trang 40+ Trong một chương trình Pascal, sau phần mô tả dữ liệu là phần mô tả các câu lệnh Các câu lệnh có nhiệm
vụ xác định các công việc mà máy tính phải thực hiện để xử lý các dữ liệu đã được mô tả và khai báo
+ Câu lệnh được chia thành câu lệnh đơn giản và câu lệnh có cấu trúc
- Câu lệnh đơn giản
+ Vào dữ liệu : Read, Readln + Ra dữ liệu : Write, Writeln
+ Lời gọi chương trình con (gọi trực tiếp tên của chương trình con) + Xử lý tập tin : RESET, REWRITE, ASSIGN
VII CÁC THỦ TỤC NHẬP/XUẤT
Trang 41+ - Câu lệnh có cấu trúc
+ Lệnh ghép : BEGIN END + Lệnh chọn : IF THEN ELSE
CASE OF + Lệnh lặp : FOR TO DO
REPEAT UNTIL
WHILE DO + Các câu lệnh phải được ngăn cách với nhau bởi dấu chấm phẩy ( ; ) và các câu lệnh có thể viết trên một dòng hay nhiều dòng.
VII CÁC THỦ TỤC NHẬP/XUẤT
Trang 44Writeln( ‘ chu vi= ’ , (dai+rong)*2);
Writeln( ‘ ket thuc chuong trinh ’ );
Trang 45c := ‘A’ ; c := Chr(90) ;
i := (35+7)*2 mod 4 ; i := i div 7 ;
x := 0.5 ; q := i > 2*j +1 ; q := not p ;
VII CÁC THỦ TỤC NHẬP/XUẤT
Trang 463 Biết rằng trong chương trình có một lệnh gán: i:=n mod 4
Hỏi n có thể khai báo kiểu real được không?
4 Biết rằng trong chương trình có sử dụng một lệnh gán i:=ORD(n) Hãy xác định các kiểu có thể sử dụng được trong khai báo của n
5 Biết rằng S1 và S2 là hai biến kiểu Byte và trong chương trình có lệnh gán S:=S1+S2 Xác định kiểu khai báo đúng nhất của S
6 Biết rằng n là một biến kiểu Byte và trong chương trình có lệnh gán S:=n*(n+1) Hỏi S có thể nhận các kiểu khai báo nào?
Trang 477.Biết rằng trong chương trình có một lệnh gán: i:=ORD(n) Hỏi kiểu của i có thể là kiểu số thực được không?
8 Biết rằng trong chương trình có sử dụng lệnh gán i:=n MOD 4 Hỏi kiểu của n có thể là real được không
9.Biết rằng n là một biến kiểu Integer và trong chương trình có sử dụng lệnh gán S:=n*(n+1)/2 Hỏi kiểu của S có thể trùng với kiểu của n được hay không?
10 Biết n là một biến kiểu Integer và S:=n*n Hỏi biến i có thể khai báo kiểu Integer được không nếu gán i:=SQRT(S)
11 Biết rằng n là một biến kiểu integer và S:=n*(n div (trunc (n/2))) Hỏi S có thể nhận giá trị kiểu Integer được không?