Thpt Nguyễn Trãi Tin Học 11
CHƯƠNG I: MỘT SỐ KHÁI NIỆM VỀ LẬP TRÌNH
VÀ NGƠN NGỮ LẬP TRÌNH
BÀI 1: KHÁI NIỆM LẬP TRÌNH VÀ NGƠN NGỮ LẬP TRÌNH
I. KHÁI NIỆM LẬP TRÌNH & CHƯƠNG TRÌNH DỊCH
1. Khái niệm lập trình
Lập trình là sử dụng cấu trúc dữ liệu và các câu lệnh của ngơn ngữ lập trình
cụ thể để mơ tả dữ liệu và diễn đạt các thao tác của thuật tốn.
2. Khái niệm chương trình dịch
Chương trình dịch là chương trình đặc biệt, có chức năng chuyển đổi
chương trình được viết trên ngơn ngữ lập trình bậc cao thành chương trình
được thực hiện trên máy tính.
3. Ngun tắc thực hiện của chương trình dịch
Chương trình dịch thực hiện hai giai đoạn:
• Phân tích: phân tích chương trình nguồn về từ vựng và cú pháp.
• Tổng hợp: nhằm tạo ra chương trình đích, gồm các bước.
o Chuyển chương trình nguồn về chương trình trung gian
o Chỉnh sửa tối ưu mã trung gian
o Tạo chương trình đích từ chương trình trung gian đã tối ưu.
II. KHÁI NIỆM THƠNG DỊCH VÀ BIÊN DỊCH
1. Khái niệm về thơng dịch:
Thơng dịch được thực hiện bằng cách lặp lại các bước sau
Kiểm tra tính đúng đắn của câu lệnh tiếp theo trong chương trình nguồn
Chuyển đổi câu lệnh đó thành một hay nhiều câu lệnh thương ứng
trong ngơn ngữ máy
Thực hiện câu lệnh vừa chuyển đổi được
Q trình dịch và thực hiện là q trình ln phiên,
Thơng dịch phù hợp cho mơi trường đối thoại giữa người và máy
Thơng dịch khơng có chương trình đích để lưu dữ
2. Khái niệm về biên dịch:
Biên dịch thực hiện qua hai bước:
Mọi đối tượng trong chương trình điều phải được đặt tên.
Turbo pascal, tên khơng q 127 kí tự bao gồm chữ số, chữ cái hoặc dấu
gạch dưới và bắt đầu bằng chữ cái hoặc dấu gạch dưới.
Khơng bắt đầu bằng số, khơng chứa khoảng trống hoặc kí tự đặc biệt.
Trong Free Pascal, tên có thể có độ dài đến 255 kí tự
Ví dụ:
o tên đúng: D
_P
o tên sai: DA B
6p5
G#
Pascal phân biệt ba loại tên:
• Tên dành riêng (từ khóa): do ngơn ngữ lập trình qui định, được
dùng với ý nghĩa riêng, khơng được dùng với ý nghĩa khác.
o Từ khóa chung: PROGRAM, BEGIN, END, PROCEDURE, FUNCTION
o Từ khóa để khai báo: CONST, VAR, LABEL,TYPE, ARRAY, STRING,
RECORD, SET, FILE OF
o Từ khóa cấu trúc lặp:FOR…TO…DO; WHILE…DO…;REPEAT…UNTIL…;
FOR…DOWNTO…DO
o Từ khóa cấu trúc rẽ nhánh: IF…THEN; IF…THEN…ELSE.
o Từ khóa cấu trúc lựa chọn: CASE…OF
Trang 2 Lê Tôn Hiệp
Thpt Nguyễn Trãi Tin Học 11
o Từ khóa điều khiển: WITH, GOTO
o Từ khóa tốn tử: AND, OR, NOT, IN, DIV, MOD, XOR
o Từ khóa rỗng: NULL
• Tên chuẩn: tên dùng với ý nghĩa nhất định. Người lập trình có thể
khai báo và dùng chùng với ý nghĩa khác.
o BOOLEAN, CHAR, INTEGER, BYTE, TEXT, REAL, BREAK, EXTENDED…
o FALSE, TRUE….
x:=4;
y:=2;
x:=x+y;
y:=y+x;
writeln(x,y);
end.
3. Chú thích
Ví dụ:
Lê Tôn Hiệp Trang 3
Tin Học 11 Thpt Nguyễn Trãi
program bien;
uses crt;
var x,y:integer;
begin
clrscr;
x:=4; (* gan gia tri 4 cho bien x*)
y:=2;
x:=x+y; {lay x+y roi gan gia tri nay cho x}
y:=y+x;
writeln(x,y);
end.
Bài tập
Trang 4 Lê Tôn Hiệp
Thpt Nguyễn Trãi Tin Học 11
CHƯƠNG II: CHƯƠNG TRÌNH ĐƠN GIẢN
BÀI 3: CẤU TRÚC CHƯƠNG TRÌNH
I. CẤU TRÚC CHUNG
o chương trình được viết bằng một ngôn ngữ lập trình bậc cao thường gồm
phần khai báo
phần thân.
Ví dụ :
program duongtron;
uses crt;
const pi=3.1419;
var bkinh : integer;
dtich : real;
begin
clrscr;
bkinh:=2;
dtich:=2*pi*bkinh;
Lê Tôn Hiệp Trang 5
Begin
[<Dãy lệnh >]
End.
Tin Học 11 Thpt Nguyễn Trãi
writeln('dien tich hinh tron: ',dtich:5:3);
readln;
end.
d) khai báo biến
Tất cả các biến dùng trong chương trình đều phải đặt tên và khai báo cho chương
trình dòch biết để lưu trữ và xử lý .
Biến của một chương trình là tên của một ô nhớ.
Biến chỉ nhận một giá trò tại mỗi thời điểm thực hiện chương trình gọi là biến đơn
Khai báo biến:
Var <danh_sach_bien> : <kiểu của biến>;
Có thể khai báo nhiều kiểu biến sau từ khóa var
Trong danh sách biến các biến cách nhau bởi dấu phấy (,)
e) Khai báo chương trình con:
Thường bắt đầu bằng từ khóa Function hay Procedure
2 phần thân chương trình
Real
6 byte 2.9*10
-39
…1.7*10
38
Single
4 byte 1.5*10
-45
…3.4*10
38
Double
8 byte 5.0*10
-324
…1.7*10
-308
extended
10 byte 3.4*10
-4932
…1*10
4932
3. Kiểu kí tự
kiểu
Bộ nhớ lưu trữ
một giá trò
Phạm vi giá trò
char
1 byte 256 kí tự trong bộ mã ASCII
4. Kiểu lôgic
Kiểu
Bộ nhớ lưu trữ
C : char;
I, J : byte;
N : word;
Một số chú ý khi khai báo biến:
• Cần đặt tên biến sao cho gợi nhớ đến ý nghóa của biến đó. Điều này rất có lợi cho việc
đọc hiểu và sửa đổi chương trình khi cần thiết .
• Không nên đặt tên biến quá ngắn hay quá dài, dễ mắc lỗi khi viết nhiều lần tên biến.
o Ví dụ: không nên dùng d1,d2 hay diemmontoan, diemmontin cho điểm toán, điểm tin của
học sinh.
• Khi khai báo biến cần đặt biệt lưu ý đến phạm vi giá trò của nó.
o Ví dụ: khi khai báo biến biễu diễn:
số học sinh của một lớp có thể sử dụng kiểu byte
số học sinh của tòan trường thì phải thuộc kiểu Word.
Bài tập
Trang 8 Lê Tôn Hiệp
Thpt Nguyễn Trãi Tin Học 11
Bài 6: PHÉP TOÁN, BIỂU THỨC, CÂU LỆNH GÁN
1. Phép toán
Phép toán Trong toán học Trong Pascal
số nguyên
+ (cộng); - (trừ);x (nhân)
div (chia nguyên),
mod (lấy phần dư)
+ ; - ; *
div
mod
số thực
+ (cộng); - (trừ);x (nhân)
: (chia)
+ ; - ; *
• Viết lần lượt từ trái sang phải;
• Không được bỏ qua dấu nhân (*) trong tích.
Các phép toán được thực hiện theo thứ tự :
• Thực hiện các phép toán trong ngoặc trước;
• Trong dãy các phép toán không chưá ngoặc thì thực hiện từ trái sang phải, theo
thứ tự các phép toán nhưng (*), chia (/), chia nguyên (div), lấy phần dư (mod)
thực hiện trước và các phép toán cộng (+), trừ (-) thực hiện sau.
Ví dụ:
Biểu thức trong toán học Biểu thức trong Pascal
5a+6b 5*a + 6*b
xy
z
x*y/z
Ax
2
+ Bx +C A*x*x + B*x + C
1
2
x y
x
+
−
-
x z
xy
−
(x + y)/ (x-1/2) – (x-z)/(x*y)
Chú ý:
Lê Tôn Hiệp Trang 9
Tin Học 11 Thpt Nguyễn Trãi
đối số
Lôgarit Lnx ln(x) Thực Thực
Lũy thừa của
số e
e
x
exp(x) Thực Thực
Sin sinx sin(x) Thực Thực
Cos cosx cos(x) Thực Thực
4. biểu thức quan hệ
Hai biểu thức cùng kiểu liên kết với nhau bởi phép tốn quan hệ cho ta một
biểu thức quan hệ .
Biểu thức quan hệ có dạng :
<biểu thức 1> <phép tốn quan hệ> <biểu thức 2>
Trong đó, biểu thức 1 và biểu thức 2 cùng là xâu hoặc cùng là biểu thức số
học .
• Ví dụ x < 5
i+1 >= 2
j
Biểu thức quan hệ được thực hiện theo trình tự :
• Tính giá trị các biểu thức .
• Thực hiện phép tốn quan hệ .
• Ví dụ : Điều kiện để điểm M ( x,y) thuộc hình tròn tâm I (a,b) , bán
kính R là :
sqrt ( ( x-a )
(x-a) + (y-b)
(y-b) ) <= R
x2 :=-b/a-x1;
z :=z-1;
i :=i+1;
8. Nhóm thủ tục và hàm chuẩn đối với các biến kiểu ngun
• Nhóm thủ tục chuẩn
Thủ tục Chức năng
Inc (x) Tăng giá trị của biến x một đơn vị.
Dec (x) Giảm giá trị của biến x một đơn vị.
Inc (x,y) Đặt cho biến x giá trị mới bằng giá trị cũ cộng với giá trị của biến y.
Dec (x,y) Đặt cho biến x giá trị mới bằng giá trị cũ trừ với giá trị của biến y.
• Nhóm hàm chuẩn
Hàm Chức năng
Pred (x) Cho giá trị bằng x -1 .
Succ (x) Chi giá trị bằng x + 1.
Random (N) Hàm có biểu thức N kiểu word và cho giá trị là một số ngun
ngẫu nhiên trong phạm vi từ 0 đến N – 1. khi dùng hàm này
ta phải gọi thủ tục randomize.
9. Nhóm hàm chuẩn đối với các biến kiểu thực
Hàm Chức năng
ArcTan (x)
Cho giá trị là số đo của cung thuộc khoảng (-
2
π
,
2
π
)
có tang bằng giá trị của biến x hay số thực x.
Pi Cho giá trị của số
π
Inc (x)
Cho giá trị của biến x là kí tự đứng ngay sau kí tự ứng với
giá trị hiện thời của x trong bộ mã ASCII.
Dec (x)
Cho giá trị của biến x là kí tự đừng ngay trước kí tự ứng với
giá trị hiện thời của x trong bộ mã ASCII.
b.Nhóm hàm chuẩn
Hàm Chức năng
Chr(x)
Cho giá trị là kí tự có mã ASCII thập phân bằng (giá trị của biểu thức) x
có giá rị ngun từ 0 đến 255.
Ord(ch) Cho giá trị mã ASCII thập phân của kí tự ch.
Pred(ch) Cho kí tự đứng ngay trước kí tự ch trong bộ mã ASCII.
Succ(ch) Cho kí tự đứng ngay sau kí tự ch trong bộ mã ASCII.
Upcase(ch)
Nếu ch là chữ cái tiếng Anh, hàm cho giá trị bằng chữ cái hoa tương ứng,
ngược lại, hàm cho giá trị bằng giá trị của ch.
Bài tập
Trang 12 Lê Tôn Hiệp
Thpt Nguyễn Trãi Tin Học 11
Bài 7: CÁC THỦ TỤC CHUẨN VÀO RA ĐƠN GIẢN
1.Nhập dữ liệu vào từ bàn phím
Việc nhập dữ liệu vào từ bàn phím được thực hiện bằng các thủ tục chuẩn:
• Danh sách biến vào là một hoặc nhiều tên biến đơn (trừ biến kiểu boolean).
• Trong trường hợp nhiều biến thì các tên biến được viết cách nhau bởi dấu
phẩy
vd: read(N);
readln(a,b,c);
2.Đưa dữ liệu ra màn hình:
Việc đưa dữ liệu ra màn hình được thực hiện bằng các thủ tục chuẩn:
write(<tên biến>: < độ rộng > :<số chữ số thập phân >);
hoặc
writeln(<tên biến>: < độ rộng > :<số chữ số thập phân >);
write(<tên biến>: < độ rộng >);
hoặc
writeln(<tên biến>: < độ rộng > );
36-24.00
425 56 23.200
Tin Học 11 Thpt Nguyễn Trãi
• độ rộng và số chữ số thập phân là các hằng ngun dương,
Ví dụ
Writeln ( N:5 , X:6:2);
Write ( I :3 , j :4,a+b :8:3) ;
3.một số hàm và thủ tục trình bày màn hình trong pascal: (tham khảo)
Các hàm này trong thư viện CRT.
o ClrScr: xóa tồn bộ màn hình đưa con trỏ về dòng 1
o whereX cho biết con trỏ ở cột nào.
o whereY cho biết con trỏ ở dòng nào.
o Window(x1, y1, x2, y2): thiết lập cửa sổ hoạt động trên màn hình.(free
pascal)
Hồnh độ mới = hồnh độ cũ –x1 +1
Tung độ mới = tung độ cũ –y1 +1
Bài tập
Trang 14 Lê Tôn Hiệp
Thpt Nguyễn Trãi Tin Học 11
Bài 8: SOẠN THẢO, DỊCH, THỰC HIỆN VÀ HIỆU CHỈNH
CHƯƠNG TRÌNH
1. Một số giao diện của các chương trình dịch
Replace: tìm và thay thế
Seach again: lặp lại thao tác tìm kiếm gần nhất
go to line number: số hiệu dòng và nhảy con trỏ đến dòng
đó
Find procedure: tìm thủ tục trong chương trình
Run:thực hiện chương trình đang soạn thảo
Step over: thực hiện theo từng dòng lệnh
Trace into: thực hiện lần theo vết
Goto Cursor:thực hiện đấn chỗ con trỏ thì dừng lại
Compiler: dịch chương trình trong cửa sổ hoạt động
Make:dịch lại các thư viện mà chương trình sử dụng nếu
có sự thay đổi
Build:dịch lại tất cả các thư viện mà chương trình sử dụng
Out put: mở cửa sổ xem kết quả
User screen: hiện màn hình kết quả
Add watch: thêm cửa sổ theo dõi giá trị biến trong q
trình thực hiện chương trình.
Watches:mở cửa sổ theo dõi giá trị của biến
Breakpoint: tạo điểm dừng.
Thpt Nguyễn Trãi Tin Học 11
g. Menu Tool
h. Menu Options
i. Menu Window
4. Một số thao tác và phím tắt thường sử dụng để soạn thảo và thực hiện một
chương trình viết bằng Pascal.
• Soạn thảo: gõ nội dung của chương trình gồm phần khai báo và các lệnh
trong thân chương trình. Về cơ bản, việc soạn thảo chương trình như soạn
thảo văn bản. Lưu chương trình vào đĩa bằng cách nhấn phím F2, nhập tên
tệp rồi bấm phím Enter .
Trong đó
• if, then, else là các từ khóa.
• Điều kiện là biểu thức lôgic.
• Câu lệnh, câu lênh1, câu lệnh2 là một câu lệnh của pascal.
dạng thiếu : điều kiện sẽ được tính và kiểm tra. Nếu điều kiện đúng (có
giá trò true) thì câu lệnh được thực hiện ngược lại thì câu lệnh sẽ bò bỏ qua.
dạng đủ : điều kiện cũng được tính và kiểm tra. Nếu điều kiện đúng thì câu
lệnh1 sẽ được thực hiện ngược lại câu lệnh2 sẽ được thực hiện
Vd 1:
If D< 0 then writeln(‘pt vo nghiem’);
Vd 2:
If a mod 3 = 0 then writeln (‘ a chia het cho 3’)
Else writeln (‘a khong chia het cho 3’);
Vd 3 :
Để tìm max trong 2 số a và b, có htể thực hiện bằng hai cách sau:
dùng câu lệnh gán max := a vào lệnh if then dạng thiếu:
if b>a then max := b ;
Lê Tôn Hiệp Trang 19
Điều
kiện
Câu lệnh
đúng
Sai
Câu lệnh 2
Đk
Câu lệnh 1
Sai
đúng
Điều
kiện
ax
2
+ bx + c = 0, với a ≠ 0.
Input: Các hệ số a, b, c nhập từ bàn phím.
Output: Đưa ra màn hình các nghiệm thực hoặc thơng báo “ Phuong trinh vo
nghiem”
program Giai_PTB2;
uses crt;
var a, b, c, D, x1, x2: real;
begin
clrscr;
write ( ‘a, b, c: ‘); readln ( a, b, c);
D:= b*b – 4*a*c;
if D < 0 then writeln (‘ Phuong trinh vo nghiem.’)
else
begin
x1:=(-b–sqrt(D))/(2*a);
x2:=-b/a–x1;
writeln(‘x1 = ‘,x1:8:3,‘x2=‘,x2:8:3);
end;
readln
end.
Ví dụ 2: Tìm số ngày của năm N, biết rằng năm nhuận là năm chia hết
cho 400 hoặc chia hết cho 4 nhưng khơng chia hết cho 100. Ví dụ các
năm 2000, 2004 là năm nhuận và có số ngày là 366, các năm 1900, 1945
khơng phải là năm nhuận và có số ngày là 365.
Input: N nhập từ bàn phím .
Output: Đưa số ngày của năm N ra màn hình.
program Nam_nhuan;
uses crt;
N+1 sau else (nếu có) sẽ được thực hiện.
Chương trình để giải bài tốn vừa nêu như sau:
Program Vi_du_case ;
Uses crt ;
Var T, N, SN: integer ;
Begin
Clrscr ;
Write(‘Cho biet thang va nam: ‘) ;
Readln( T, N) ;
Case T of
4, 6, 9, 11 : SN: = 30 ;
2 : if(N mod 400 = 0) or((N mod 100<>0) and (n mod 4 = 0) )
then SN: = 29 else SN:= 28
else SN:= 31
end ;
writeln (‘Thang ‘, T, ‘ nam ‘, N, ‘ co ‘, SN, ‘ ngay.’) ;
readln
end.
Bài tập
Lê Tôn Hiệp Trang 21
Case <biểu thức ngun hoặc kí tự> of
<danh sách 1>:<câu lệnh1>;
<danh sách 2>: <câu lệnh2>;
. . . . . . . . . . . . .
<danh sách N>: <câu lệnhN>;
else <câu lệnhN + 1>
end;
Case <biểu thức ngun hoặc kí tự> of
<danh sách 1>:<câu lệnh1>;
<danh sách 2>: <câu lệnh2>;
Ví dụ 1. Chương trình cài đặt các thuật tốn bái tốn 1.
program Tong_day_so;
uses crt;
var S: real;
i: integer;
Trang 22 Lê Tôn Hiệp
Biếnđếm←giá trị đầu
Lệnh
Biếnđếm ≤ giá trị
cuối
Biếnđếm←succ(biếnđếm)
Biếnđếm←giá trị cuối
Lệnh
Biếnđếm ≥ giá trị
đầu
Biếnđếm←pred(biếnđếm)
dạng lặp tiến
dạng lặp lùi
Thpt Nguyễn Trãi Tin Học 11
begin
clrscr; S:=0;
for i:=1 to 100 do S:= S+1/i;
writeln('Tong S la: ', S:8:4);
Readln
end.
program Tong_day_so2;
uses crt;
var S: real;
i: integer;
begin
begin
Clrscr;
S:=0; N:=1;
while 1/N >= 0.0001 do
begin
S:= S+1/N ;N:= N+1;
End;
writeln(' tong S la : ',S);
readln
end.
• Ví dụ : tìm ước chung lớn nhất (UCLN) của hai số nguyên dương M và N.
• Sơ đồ khối
Lê Tôn Hiệp Trang 23
Điều
kiện
Câu lệnh
đúng
sai
Sai
Sai
Nhập M và
N
M > N
?
M = N
?
N N - M
Đưa ra M;
Kết thúc
M M - N
S:=0;
N:=1;
repeat
S:= S+1/N ;
N:= N+1;
until 1/N <0.0001;
writeln(' tong S la : ',S);
readln
end.
Bài tập
Trang 24 Lê Tôn Hiệp
Repeat
<dãy câu lệnh>;
Until <điều kiện>;
Thpt Nguyễn Trãi Tin Học 11
CHƯƠNG IV: KIỂU DỮ LIỆU CĨ CẤU TRÚC
Bài 11. KIỂU MẢNG
I. Kiểu mảng một chiều
Mảng một chiều là dãy hữu hạn các phân tử cùng kiểu.
Các ngôn ngữ lập trình có quy tắc, cách thức cho phép xác đònh mảng như sau:
• Tên kiểu mảng một chiều
• Số lượng phần tử
• Kiểm tra dữ liệu của phần tử
• Cách khai báo biến mảng
• Cách tham chiếu đến phần tử
1. Khai báo mảng một chiều:
o Khai báo gián tiếp:
o Khai báo trực tiếp:
o Trong đó:
• Array, of là các từ khóa.
2
, …, A
n mỗi
số khơng vượt q 500.
Lê Tôn Hiệp Trang 25
Type <tên kiểu mảng> =array[<chỉ số đầu> <chỉ số cuối>]of<kiểu phần tử>;
Var <tên biến mảng>:<tên kiểu mảng>;
Var<tên biến mảng>: array[<chỉ số đầu> <chỉ số cuối>]of<kiểu phần tử>;