Phần này có nhiệm vụ mô tả các đối tượng của bài toán, mô tả dữ liệu cho chương trình biết trước mà xử lí.Phần khai báo đầy đủ có 7 phần theo thứ tự quy định không bắt buộc: b.. Một chươ
Trang 5Pascal là tên của một trong các ngôn ngữ lập trình cấp cao thông dụng Ngôn ngữ lập trình Pascal được giáo
sư Niklaus Wirth ở trường Đại học Kỹ thuật Zurich (Thụy sĩ) thiết kế và công bố vào năm 1970 Niklaus Wirth đặt tên
cho ngôn ngữ này là Pascal để tưởng nhớ đến nhà Toán học và Triết học Pháp ở thế kỷ 17 là Blaise Pascal, người
đã phát minh ra một máy tính cơ khí đơn giản đầu tiên của con người
Ngôn ngữ Pascal được dùng hiện nay có nhiều
điểm khác biệt với chuẩn Pascal nguyên thủy của Giáo sư Wirth Tùy theo quốc gia hoặc công ty đã phát triển cho ra đời các chương trình biên dịch ngôn ngữ Pascal
Trang 11PROGRAM <Tên chương trình>;
[Phần khai báo]
BEGIN
<Các câu lệnh>
END
Trang 12Bắt đầu bằng từ khoá PROGRAM và kèm theo <tên chương trình>, kết thúc bằng dấu “;”
có thể có hoặc không
Ví dụ: PROGRAM baitap;
a.Phần tiêu đề
Trang 13Phần này có nhiệm vụ mô tả các đối tượng của bài toán, mô tả dữ liệu cho chương trình biết trước mà xử lí.
Phần khai báo đầy đủ có 7 phần theo thứ tự quy định (không bắt buộc):
b Phần khai báo
Trang 14b Phần khai báo
USES Khai báo sử dụng thư viện. USES CRT;
LABEL Khai báo nhãn cho đoạn chương
Pi=3.14;
Max=100; TYPE Khai báo kiểu dữ liệu mới do người
Trang 16Mọi ngôn ngữ lập trình đều được xây dựng từ một bộ ký tự nào đó Các ký tự được nhóm lại theo nhiều cách khác nhau để tạo nên các từ Các từ lại được liên kết với nhau theo một qui tắc nào đó để tạo nên các câu lệnh Một chương trình bao gồm nhiều câu lệnh và thể hiện một thuật toán để giải một bài toán nào đó Ngôn ngữ PASCAL được xây dựng trên bộ ký tự sau :
26 chữ cái hoa : A B C Z
26 chữ cái thường : a b c z
10 chữ số : 0 1 2 9 Các ký hiệu toán học : + - * / = ( )
Ký tự gạch nối : _ Các ký tự khác : , : ; [ ] {} ! \ & % # $
Dấu cách (space) dùng để tách các từ Ví dụ chữ VIET NAM có 8
ký tự, còn VIETNAM chỉ có 7 ký tự.
Trang 17Từ khoá là những từ được sử dụng để viết các toán tử và các câu lệnh Bảng dưới đây liệt kê các từ khoá của TURBO PASCAL:
Chú ý : Không được dùng các từ khoá để đặt tên cho các hằng, biến, mảng, hàm
Absolute Constructor File Inline On Self Unit And Continue For Interface Operator Set Util Array Destructor Function Lable Packed Shl Uses
Break Downto Implementation Not Record Then With Case Else In Object Reintroduce To Xor Const End Inherited Of Repeat Type
Trang 18Tên là một khái niệm rất quan trọng, nó dùng để xác định các đại lượng khác nhau trong một chương trình Chúng ta có tên hằng, tên biến, tên mảng, tên hàm, tên con trỏ, tên tệp, tên cấu trúc, tên nhãn,
Tên được đặt theo qui tắc sau : Tên là một dãy các ký tự bao gồm chữ cái, số và gạch nối Ký tự đầu tiên của tên phải là chữ hoặc gạch nối Tên không được trùng với khoá.
VÍ DỤ:
CHÚ Ý: Trong PASCAL không phân biệt tên chữ hoa chữ thường
VD: Đặt tên lop10a cũng giống như là LOP10A.
Lop10a Tin_hoc _to3_
10a _to3@_
F(x) Lop 10a
Trang 19Trong PASCAL sử dụng các kiểu dữ liệu có sẵn sau:
Trang 24HÀM Ý NGHĨA VÍ DỤ
ABS(x) Cho trị tuyệt đối của x a=-5 ABS(a)=5
SQR(x) Cho giá trị bình phương của x a=6 SQR(a)=36
SQRT(x) Cho giá trị căn bậc hai của x (x>=0) a=16 SQRT(a)=4
ROUND(x) Cho giá trị một số nguyên do làm tròn x a=5.6 ROUND(a)=6
TRUNC(x) Cho giá trị phần nguyên x a=5.6 TRUNC(a)=5
PRED(n) Cho giá trị n-1, số nguyên trước n i=10 PRED(i)=9
SUCC(n) Cho giá trị n+1, số nguyên sau n i=10 SUCC(i)=11
ODD(n) Cho giá trị TRUE nếu n lẻ, FALSE nếu
Trang 25Mỗi giá trị kiểu char chiếm 1 byte (8 bit) và biểu diễn được 1 kí tự thông qua bảng mã ASCII (0 đến 255) Ví dụ:
Trang 27CÁC PHÉP TOÁN:
- Phép so sánh: > >= < <= = <>
HÀM CHUẨN KIỂU CHAR:
- Hàm ORD(C): Cho số là mã ASCII của kí tự C
Ví dụ: ORD(‘A’)=65; ORD(‘1’)= 49
- Hàm CHR(N): Cho kí tự ASCII tương ứng với số N
Ví dụ: CHR(65)=‘A’; CHR(49)=‘1’
Trang 28Kiểu LOGIC Kích thước
Trang 29CÁC PHÉP TOÁN:
- Phép so sánh: AND, OR, NOT, XOR
TRUE TRUE FALSE TRUE TRUE FALSE TRUE FALSE FALSE TRUE FALSE TRUE FALSE TRUE TRUE TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE
Trang 30a Hằng (Constant)
Định nghĩa: Hằng là một đại lượng có giá trị không
đổi trong suốt quá trình thực hiện chương trình
KT=true; (* KT là hằng kiểu logic *)
Chú ý: Kiểu của hằng do kiểu giá trị quyết định.
Trang 31b Biến (Variable)
Định nghĩa: Biến là một đại lượng có giá trị có thể
thay đổi trong suốt quá trình thực hiện chương trình
Khai báo biến:
Trang 32c Biểu thức (Expression)
Định nghĩa: Biểu thức là tập hợp các toán hạng được liên
kết bởi các toán tử.
• Toán hạng gồm các hằng, biến và hàm.
• Toán tử của phép số học và logic.
• Giá trị biểu thức có thể là kiểu số, chữ hoặc logic
Ví dụ:
S:=Pi*R*R; { S nhận giá trị thực của biểu thức }
Độ ưu tiên:
1 Dấu ( )
2 Dấu dương (+), âm (-), phép phủ định (not)
3 Phép nhân (*), chia (/), lấy phần nguyên
(div), phần dư (mod), phép và (and)
4 Phép cộng (+), trừ (-), phép hoặc (or)
5 Các phép so sánh
Trang 33a Hình thức thể hiện:
Câu lệnh trong chương trình được phân cách nhau bằng dấu chấm phẩy (;)
Một câu lệnh có thể viết trên nhiều dòng.
Nhiều lệnh có thể viết trên một dòng.
Không phân biệt chữ hoa hay chữ thường.
Trang 34Câu lệnh phức là câu lệnh tập hợp nhiều câu lệnh
khác được kết hợp bởi các từ khoá BEGIN và END
Trang 35 Khái niệm: Câu chú thích dùng để giải thích một vấn đề nào đó trong chương trình, nó không được thực hiện khi chạy chương trình.
Cách viết: Chú thích được đặt trong cặp dấu {} hoặc (* *)
Ví dụ: PROGRAM BT1; { dòng tiêu đề }
USES CRT; (* Khai báo sử dụng thư viện *)
Trang 36 Cú pháp:
<Tên biến> := <Biểu thức> ;
Chú ý: Biến được gán và biểu thức phải cùng kiểu dữ liệu
Ví dụ: Sau khi đã có khai báo:
VAR a , b : byte;
c : real;
Ta có thể thực hiện các phép gán sau:
a:=5; b:=7; c:=a*b;
Trang 40a Thủ tục in dữ liệu ra màn hình:
CHỨC NĂNG:
Lệnh sẽ in các mục m1, m2, ra màn hình tại vị trí con trỏ đang đứng.
WRITELN(m1, m2, ); Sau khi in xong sẽ đưa con
trỏ sang một dòng tiếp theo
WRITELN; Để đưa con trỏ sang dòng tiếp theo.
Trang 42• item: là một biến, hằng hoặc biểu thức có giá trị số nguyên.
• n: số chữ số biểu diễn số nguyên, nếu số chữ số của item<n
thì máy sẽ thêm các dấu trống trước số.
Kết quả in ra màn hình:
123 556677
Trang 43• item: là một biến, hằng hoặc biểu thức có giá trị số thực.
• n: số chữ số biểu diễn số nguyên, nếu số chữ số của item<n
thì máy sẽ thêm các dấu trống trước số.
• m: số chữ số phần thập phân, nếu phần thập phân của số<m
Trang 44Kết quả in ra màn hình:
1.2345 566.7700
Trang 46b Thủ tục nhập dữ liệu:
CHỨC NĂNG:
kiểu giá trị nhập vào phải đúng với kiểu dữ liệu đã khai báo cho biến
READ(V1, V2, ); và READLN(V1, V2, ); nhập nhiều
giá trị được phân cách nhau bởi khoảng trống Lệnh
READLN(V1, V2, ) sau khi nhập dữ liệu xong sẽ đưa
con trỏ xuống dòng mới
READLN; đợi cho đến khi ấn phím Enter Được sử dụng
cuối chương trình để dừng lại xem các kết quả hiển thị
chỉ nên nhập 1 biến
Trang 49VÍ DỤ:
Viết chương trình tính diện tích, chu vi hình tròn (làm tròn đến chữ số thập phân thứ 3), bán kính R nhập từ bàn phím.
Trang 50END.
Trang 51B1: Kiểm tra <biểu thức Logic>.
B2: Nếu Đúng thì thực hiện <câu lệnh>.
B3: Kết thúc lệnh.
BT LOGIC
Câu lệnh
Đ
S
Trang 54a Câu lệnh IF
VÍ DỤ: Giải phương trình bậc 2: ax+bx+c=0
Input: Giá trị 3 số a, b, c (nhập từ bàn phím) Out: In ra nghiệm của phương trình.
Trang 55writeln ('x2=',x2:10:10);
end else if d=0 then begin
x1 := -b/2/a ; writeln ('phuong trinh co nghiem kep x1=x2=', x1) ; end
else writeln ('phuong trinh vo nghiem') ; readln ;
END.
Trang 56b Câu lệnh chọn CASE OF
Câu lệnh IF ở trên chỉ rẽ vào một trong hai nhánh tương ứng với giá trị của biểu thức logic
Còn lệnh CASE (rẽ nhánh theo giá trị) cho phép
lựa chọn để thực hiện một trong nhiều công việc tuỳ theo giá trị của biểu thức.
Trang 57b Câu lệnh chọn CASE OF
CÚ PHÁP:
Trang 58b Câu lệnh chọn CASE OF
THỰC HIỆN LỆNH:
B1: Tính giá trị <Biểu thức> rồi đem so sánh với <giá trị i>
• Nếu Bằng thì thực hiện <câu lệnh i> rồi chuyển đến lệnh sau END;
• Ngược lại Sai thì kiểm tra tiếp <giá trị i+1>
B2: Nếu đến <giá trị n> vẫn sai thì thực hiện <câu lệnh n+1> (nếu có)
B3: Kết thúc lệnh.
Trang 59b Câu lệnh chọn CASE OF
VÍ DỤ:
Nhập vào một kí tự và thông báo đó là chữ cái hay chữ số hay kí hiệu.
Trang 60‘0’ ’9’: writeln (KT,’ la mot chu so’);
‘a’ ’z’: writeln (KT,’ la chu cai in thuong’);
‘A’ ’Z’: writeln (KT,’ la chu cai in hoa’); ELSE
writeln (KT,’ la ki hieu’);
END;
readln;
END
Trang 61Trường hợp để giải quyết bài toán nào đó mà ta cần phải lặp đi lặp lại một công việc nào đó thì ta sẽ cần đến lệnh lặp Số bước lặp có thể xác định hoặc không xác định Trong ngôn ngữ PASCAL có 3 câu lệnh lặp là FOR, REPEAT, WHILE Nếu số vòng lặp xác định thì ta sử dụng lệnh FOR còn không xác định thì ta sử dụng lệnh REPEAT hoặc WHILE Tất cả các loại lệnh phải có điểm dừng, cho dù là loại xác định hay không xác định.
Trang 63a Dạng tiến
THỰC HIỆN LỆNH:
B1: <Biến> được gán giá trị của <Bt1>
B2: Nếu giá trị <Biến> > <Bt2> thì chuyển đến B5 B3: Thực hiện <câu lệnh>.
B4: <Biến> được tăng lên một giá trị Biến:=Biến + 1
chuyển đến B2
B5: Kết thúc lệnh.
Trang 64a Dạng tiến
SƠ ĐỒ KHỐI:
Biến := <Bt1>
Biến := Biến +1 Câu lệnh
Biến<=<Bt2>?
Đ
S
Trang 66b Dạng lùi
THỰC HIỆN LỆNH:
B1: <Biến> được gán giá trị của <Bt1>
B2: Nếu giá trị <Biến> < <Bt2> thì chuyển đến B5 B3: Thực hiện <câu lệnh>.
B4: Biến:=Biến - 1 chuyển đến B2.
B5: Kết thúc lệnh.
Trang 67b Dạng lùi
SƠ ĐỒ KHỐI:
Biến := <Bt1>
Biến := Biến +1 Câu lệnh
Biến>=<Bt2>?
Đ
S
Trang 68Chú ý:
Không được thay đổi giá trị của <Biến> bằng một lệnh bất kì
trong vòng lặp FOR Điều này làm cho vòng lặp không có lối thoát
và dẫn đến treo máy.
Kiểu của <Biến>, <Bt1>, <Bt2> phải là kiểu vô hướng đếm đư
ợc (như kiểu nguyên, logic, kí tự, liệt kê).
Các <Bt1>, <Bt2> được ước lượng trước khi vào vòng lặp, do đó
số vòng lặp không bị thay đổi Ta có thể lợi dụng tính tăng giảm của
<Biến> để gán giá trị của nó cho bất kì biến nào hoặc thực hiện
việc gì đó có tính chất tăng hoặc giảm.
Trang 69VÍ DỤ: Tính tổng S của N số tự nhiên đầu tiên.
S=1+2+3+ +N
Trang 71VÍ DỤ: Hoặc ta có thể làm như sau:
Trang 72CÚ PHÁP:
WHILE <Biểu thức LOGIC> DO
<Câu lệnh>;
THỰC HIỆN LỆNH:
B1: Kiểm tra <Biểu thức LOGIC>
B2: Nếu Đúng thì thực hiện <Câu lệnh> rồi chuyển đến B1.
B3: Ngược lại Sai thì kết thúc lệnh, chuyển đến lệnh sau
WHILE DO
Trang 74VÍ DỤ: Với tiền gửi ban đầu là a, lãi suất hàng
tháng là k Tính số tháng gửi tiết kiệm để được
số tiền b Biết rằng tiền lãi hàng tháng sẽ được cộng vào vốn làm vốn tháng sau
Trang 76VÍ DỤ: Tìm ước chung lớn nhất của hai số nguyên
dương M và N.
Trang 77VÍ DỤ: PROGRAM UCLN ;
VAR m , n : integer;
BEGIN write ( 'nhap 2 so nguyen duong m va n: ') ; readln ( m , n ) ;
write ( ‘UCLN (', m , ',‘ , n , ')= ') ; WHILE m <> n DO
IF m > n THEN m := m-n ELSE n:=n-m ;
write ( m ) ; readln ;
END.
Trang 78B2: Kiểm tra <Biểu thức LOGIC>
B3: Nếu Sai thì chuyển đến B1
B4: Kết thúc lệnh, chuyển lệnh sau REPEAT UNTIL
Các câu lệnh được thực hiện ít nhất một lần.
Trang 80write (‘ nhap vao mot so khac 0: ‘); readln(a);
if a=0 then writeln (‘Ban phai nhap lai’) else writeln (‘so duoc chap nhan’);
UNTIL a<>0;
readln;
END.
Trang 82MẢNG
Trang 83a Khái niệm:
• Mảng (Array) là một kiểu dữ liệu có cấu trúc bào gồm một số cố định các thành phần có cùng kiểu, có cùng một tên chung Các thành phần của mảng được truy xuất thông qua các chỉ số.
• Mảng dùng để lưu trữ một dãy số liệu có cùng một tính chất nào đó.
Trang 84b Khai báo mảng một chiều:
Trang 85b Khai báo mảng một chiều:
Ngoài ra ta còn có thể khai báo trực tiếp mảng như sau:
VAR
Tên_mảng : ARRAY [ chỉ_số ] OF kiểu_phần_tử ;
Trang 86b Khai báo mảng một chiều:
Ví dụ:
TYPE
MANGCHAR = ARRAY [1 10] OF char;
THU = (chunhat, hai, ba, tu, nam, sau, bay); TIEN = ARRAY [THU] OF integer;
VAR
A , B : MANGCHAR;
C : TIEN;
D : ARRAY [-1 100] OF integer;
Trang 89write('so thu ',i,' = ') ; readln(a[i]) ;
IF a[i]<=0 THEN writeln ('ban phai nhap so nguyen duong!!!') ; UNTIL a[i]>0 ;
Trang 90VÍ DỤ:
Nhập n (n<100) số nguyên dương từ bàn phím rồi in
ra màn hình các số đó theo thứ tự không giảm
INPUT: Số nguyên dương n và dãy A gồm n số nguyên
dương
OUTPUT : Dãy A đã được sắp xếp không giảm.
Trang 91writeln (' day so da sap xep la: ') ;
FOR i:=1 TO n DO write (a[i]:4) ;
readln ;
END
Trang 92VÍ DỤ:
Tìm giá trị lớn nhất của một dãy số nguyên.
INPUT: Số nguyên dương N và dãy A gồm n số nguyên
dương
OUTPUT : Giá trị lớn nhất Max của dãy số.
Trang 93IF a[i] > max THEN max := a[i] ;
writeln ('So lon nhat trong day la ',max) ; readln ;
END
Trang 95d Mảng nhiều chiều:
CHÚ Ý:
Mảng hai chiều còn được gọi là ma trận
Mỗi phần tử mảng được truy nhập như một biến độc lập, thông qua tên gọi gồm tên mảng và chỉ số của phần tử đó
TÊN_MẢNG [ Chỉ_số_dòng , Chỉ_số_cột ] Hoặc
TÊN_MẢNG [ Chỉ_số_dòng ] [ Chỉ _số_cột ]
Trong mảng hai chều chỉ số sau truy cập nhanh hơn chỉ số trước
Trang 96d Mảng nhiều chiều:
(m,n<100) Tính và in ra màn hình tổng của ma
trận đó.
Trang 99XÂU KÍ TỰ
Trang 100có thể thay đổi còn số phần tử của kiểu mảng luôn cố định.
Trang 1012 KHAI BÁO KIỂU XÂU:
VAR
Tên_biến : STRING [ n ] ;
Trong đó: n là số kí tự tối đa có thể có của xâu Chiều dài tối đa của một xâu là 255 Nếu trong phần khai báo không ghi [ n ] thì xâu có chiều dài mặc định là 255
Trang 1022 KHAI BÁO KIỂU XÂU:
CHÚ Ý:
Khi khai báo thường chúng ta cho số lượng kí tự lớn nhất, nhưng trong thực hiện chương trình thường nhập chuỗi ngắn hơn
Máy dành n+1 byte cho biến để lưu trữ n kí tự (nếu
có khai báo [n]) và 256 byte cho biến (nếu không khai báo [n]);
Trang 103 Xâu được xem như mảng một chiều với các phần tử
là kiểu char Mỗi phần tử xâu được truy nhập như một biến độc lập, thông qua tên gọi gồm tên xâu và chỉ số của phần tử đó
TÊN_CHUỖI [chỉ_số]
Trang 1044 CÁC PHÉP TOÁN TRÊN XÂU KÍ TỰ:
a Phép gán:
Biến:=biểu_thức;
Đại lượng nằm bên phải của lệnh phải được đặt trong cặp nháy đơn nếu đó là xâu ở dạng hằng Ta có thể sử dụng dấu cộng (+) để ghép các xâu khi gán.
Ví dụ:
NAM := ‘Ky’ + ‘Suu’;
Trang 1054 CÁC PHÉP TOÁN TRÊN XÂU KÍ TỰ:
Trang 1064 CÁC PHÉP TOÁN TRÊN XÂU KÍ TỰ:
c Các phép toán so sánh:
Khi so sánh hai xâu kí tự, các kí tự của hai xâu được so sánh từng cặp một từ trái sang phải theo giá trị của bảng mã ASCII
VÍ DỤ:
‘TIN HOC’ = ‘TIN HOC’
‘ABC’ > ‘AB’
‘file’>’FILE’
Trang 107DELETE(s,2,4); lúc này s=‘AFG’
INSERT(s1,s,3); lúc này s=‘ABHICDEFG’
Trang 1105.CÁC THỦ TỤC VÀ HÀM XỬ LÍ XÂU KÍ TỰ
B CÁC HÀM
c COPY(st, p, n)
Cho kết quả là một xâu con gồm n kí tự của xâu st kể từ
kí tự thứ p tính từ trái sang phải.
VD: S = ‘ABCDEF’ thì lệnh Copy(S, 3, 2) = ‘CD’ và Copy(S,4,10) cho ta ‘DEF’.
Trang 111VÍ DỤ: Viết chương trình nhập từ bàn phím một xâu kí tự và in ra màn hình xâu kí tự ngược tương ứng.
Trang 114CÁC BÀI TẬP
Trang 1151 Cho dãy A gồm N (N<100) số nguyên khác nhau sắp theo thứ tự tăng dần và một số nguyên k Tìm vị trí của k trong dãy.