Để gọi ch-ơng trình đã có trên đĩa: ấn F3 Sau đó cho tên File cả đ-ờng dẫn nếu không nhớ tên ấn phím Trên màn hình sẽ xuất hiện các File PAS và các th- thoại mục, dùng các phím để
Trang 1Phần mở đầu
ĐBài 1 khởi động, cấu trúc cơ bản, kiểu dữ liệu
Khái niệm: Ngôn ngữ lập trình PASCAL là ngôn ngữ lập trình bậc cao:
Quản lý, kỹ thuật, hệ thống (cho phép giải các bài toán trong thực tế)
* Tính lôgic cao thuận tiện cho mô tả thuật toán
I Khởi động và soạn thảo ch-ơng trình
Ch-ơng trình ngoài của File PASCAL có phần mở rộng là PAS
- Ta có sử dụng trên TURBO PASCAL
B-ớc 1: Khởi động PASCAL
Giả sử PASCAL l-u trong th- mục: C:\TP\BIN
Để khởi động yêu cầu tối thiểu 3 File: TURBO.EXE
TURBO.TPL TURBO.TP
Từ môi tr-ờng MSDOS vào th- mục TB\BIN rồi gõ TURBO
C:>CD TB\BIN
C:\ TB\BIN> TURBO
Sau khi gõ TURBO thì xuất hiện màn hình soạn thảo ch-ơng trình
B-ớc 2: Soạn thảo ch-ơng trình: Nh- soạn thảo băn bản
Máy yêu cầu cho biết tên File: Enter File Name VD: :\NAM\Gpt
(Nếu ch-ơng trình có lỗi thông báo trên màn hình rồi đ-a con trỏ đến dòng
có lỗi)
Nếu còn lỗi nó lại dừng ở dòng có lỗi
Để gọi ch-ơng trình đã có trên đĩa: ấn F3
Sau đó cho tên File (cả đ-ờng dẫn) nếu không nhớ tên ấn phím
Trên màn hình sẽ xuất hiện các File (PAS) và các th- thoại mục, dùng các phím để chọ nh- của NC
Trang 2B-ớc 6: Dịch ch-ơng trình ra File có phần mở rộng EXE
+ Gọi Menu Compiler (Alt + C)
Ban đầu ở Memory, đ-a vệt sáng đến Distination ấn
{Distination: Memory (DISK)}
+ Sau đó ấn Alt + F9 ch-ơng trình sẽ dịch lên EXE
B-ớc 7: Ra khỏi môi tr-ờng PASCAL ấn Alt + x
(Nếu quên ch-a ghi, máy hỏi có ghi không)
II Cấu trúc cơ bản của ch-ơng trình PASCAL
1 Program Tên ch-ơng trình
2 Uses Khai báo các Unit
3 Const Khai báo các hằng
4 Label Khai báo các nhãn
5 Var Khai báo các biến
6 BEGIN
Các lệnh quảng cáo Các lệnh nhâp dữ liệu Các lệnh tính toán Các lệnh in kết quả
END
* Tên ch-ơng trình: Không phải là tên File, có thể đặt hoặc không đặt
cũng đ-ợc, đặt tên ch-ơng trình là 1 xâu ký tự bất kỳ bắt đầu bằng các chữ cái dài tuỳ ý, không có dấu cách
* Các Unit: Là các đơn vị ch-ơng trình có sẵn của phần mềm TURBO
PASCAL mà ng-ời lập trình đ-ợc phép sử dụng nó
Unit CRT: Chứa tất cả các ch-ơng trình giao diện với màn hình xoá, di chuyển con trỏ
* Các hằng và biến:
+ Hằng: các giá trị của hằng cố định trong suốt quá trình tính toán, PI là
hằng có sẵn trong PASCAL Tất cả các hằng khác dùng phải khai báo
Ví dụ: Const C = 2;
S: = 2 * PI * R; S: = C * PI * R;
Trang 3+ Biến: Dùng để l-u giữ tạm thời các giá trị trong quá trình tính toán
Tất cả các hằng và biến dùng ở trong ch-ơng trình đều phải khai báo ở đầu ch-ơng trình
- Bắt đầu bằng các chữ cái dài tuỳ ý, ví dụ: CHUVI
- Không đ-ợc dùng từ khoá làm tên biến
- Tên biến không đ-ợc trùng với tên ch-ơng trình
- Cách khai báo:
Var Tên biến: Tên kiểu dữ liệu;
Ví dụ: Var n: Integer (n là biến nguyên)
n: = 3 n
n: = n + 1 (n: mới, vế phải n cũ) n
- Cấu trúc điều khiển
III Kiểu dữ liệu
a) Kiểu dữ liệu là 1 bộ đôi (M, P) trong đó M là 1 tập các giá trị; P là 1 tập
Trang 4Khai b¸o Var n, i Integer;
+ C¸c phÐp to¸n: +, -, *, /
* C¶ sè thùc vµ sè nguyªn ®-îc trang bÞ c¸c hµm sè
SQRT (x) (x: lµ sè thùc kh«ng ©m)
Trang 5VD3: ~ Ln b /Ln a
Lna
Lnblogb
VD4:
VD5: ab eLnab eb.Lna ~ EXPb*Ln a
d) Kiểu dữ liệu BOOLEAN
- Khai báo Var b: Boolean;
Biến Boolean là 1 biến lôgic chỉ nhận 1 trong 2 giá trị đúng sai
M
Các phép toán với giá trị Boolean:
P: AND, OR, NOT, XOR
A B A and B A or B Not A A xor B
True False False True False True
False False False False True False
Var A,B :Boolean;
* ODD(n) = True (đúng) nếu n là số lẻ
= False (sai) nếu n là số chẵn VD:
=SQRT(ABS(x-5)+x*x+2)/(EXP(y*ln(2))+sin(x+7))
x * Ln a
EXP
~ e
e
ax Lnax x.Lna
x 7
sin2
2 x5-x
2y y
True False
Trang 6ĐBài 2 Các lệnh in, nhập dữ liệu, xoá màn hình, lệnh gán
1 Lệnh in dữ liệu WRITE, WRITELN
*Cú pháp: Write(gt1, gt2, , gtn);
Gt: - Biểu thức
- Có thể là 1 biến
- Có thể là 1 hằng Tác dụng: In các giá trị lên màn hình và con trỏ không chuyển xuống dòng tiếp theo
Biến, biểu thức mà các giá trị là các số thực để in ở dạng dấu phẩy tĩnh thì
ta phải chỉ ra số ký tự cần thiết và chữ số sau dấu phẩy
Write(a:n:m) nghĩa là in các biến số thực a với n ký tự trong đó có m chữ
số sau dấu phẩy
VD: a:=82.156
Write(a:8:2) kết quả: 82.16 L-u ý: m<n
Các hằng xâu ký tự phải đ-ợc đặt sau dấu nháy đơn
Trang 7Đặc biệt: Readln: Mục đích dừng màn hình cho đến khi ng-ời dùng gõ 1 phím bất kỳ
Thông th-ờng dùng ngay tr-ớc lệnh End
3 Lệnh CLRSCR
Tác dụng: Xoá màn hình đ-a con trỏ về dòng đầu tiên
Phải sử dụng Unit: Uses Crt tr-ớc khi gõ CLRSCR
Trang 8C¸c bµi tËp minh ho¹ Bµi 1: ViÕt ch-¬ng tr×nh tÝnh chu vi h×nh trßn khi biÕt b¸n kÝnh
CV:=2*PI*R; {tÝnh chu vi}
Writeln('Chu vi=',CV:8:2); {in kÕt qu¶}
END
Bµi 2: ViÕt ch-¬ng tr×nh tÝnh S tam gi¸c khi hÕt 3 c¹nh
) )(
)(
(p a p b p c p
Trang 9Bµi 3 Cho c¸c sè thùc x, y, z H·y tÝnh a, b nÕu:
42
x1
y-1-xa
e 3 a
1 -
x -
y x
-y 1
b 3
3 2
y -
x x -
y Ln a
x -
x b 5
5 3
1/3
Trang 113 1 2
1
2 2
3 1
2 2
3 1 3
x-dxcx
tg14 3 x
dxcx
-cd-dxcx
2
x
Trang 13Phần II các cấu trúc điều khiển
Có 3 cấu trúc điều khiển:
- Các lệnh gán và lệnh vào ra dữ liệu đều là lệnh đơn
- Lệnh kép: Nhiều lệnh đơn viết trong một cặp
End Gọi là lệnh kép
Chỗ nào viết đ-ợc lệnh đơn thì chỗ ấy viết đ-ợc lệnh kép
2, Cấu trúc điều khiển: IF
Trang 14IF b > max Then max: = b;
IF c > max Then max: = c;
Writeln ('max = ', max: 8:2);
Trang 16Bµi tËp: Cho sè thùc x TÝnh hµm f(x) nh- sau:
Trang 17If b<>0 Then Writeln(' Ph-¬ng tr×nh v« nghiÖm')
Else Writeln('Ph-¬ng tr×nh v« sè nghiÖm');
y
Trang 19Writeln('Ph-¬ng tr×nh cã 2 nghiÖm ph©n biÖt');
If DT=0 Then Begin
Writeln('Ph-¬ng tr×nh cã 1 nghiÖm kÐp');
x:=(-b/(2*a));
Writeln('x= ', x:8:2);
End Else Writeln(' Ph-¬ng tr×nh v« nghiÖm');
a
b x
2
2
2 1
a
b x
2
Trang 20Bµi tËp 6: Cho 1 sè tù nhiªn n<=100
Chuc: = (n - 100 * Tram) div 10;
Donvi:= n - 100 * Tram - 10 * Chuc;
If n = 100 Then Writen (n,' lµ sè cã 3 ch÷ sè') Else
If n > 10 then Writeln (n,' lµ sè cã hai ch÷ sè') Else Writeln (n,' lµ sè cã 1 ch÷ sè');
Writeln (' Tæng c¸c ch÷ sè = ', Tram + Chuc + Donvi);
Trang 21Else
If (ABS(C1 - C2) = 2) and (ABS(H1 - H2)=1)
or (ABS(C1 - C2) = 1) and (ABS(H1 - H2) = 2) Then
Writeln ('an duoc nhau');
Else Writeln (' kh«ng ¨n ®-îc nhau');
Readln;
END
Trang 22Bµi tËp 8: Cho 3 sè thùc bÊt kú ABC h·y thay sè lín nhÊt b»ng trung b×nh céng
cña 3 sè lµ, sè nhá nhÊt; 1/2 trung b×nh céng cña 3 sè, nÕu 3 sè b»ng nhau th× gi÷ nguyªn
IF b > max Then max: = b;
IF c > max Then max: = c;
min: = a;
IF b < min Then min: = b;
IF c < min Then min: = c;
IF min <> max Then Begin
Trang 23ĐBài 2 Cấu trúc tuyển chọn
1, Kiểu miền con
Khai báo: Chỉ ra giá trị cận trên, cận d-ới của các miền
Ví dụ: Var chuso: 0 9;
Tập đếm đ-ợc Var a : 0.3 0.5
Nếu biến thuộc tập hằng 1 thì S1 đ-ợc thực hiện còn các lệnh khác thì bỏ qua
Nếu không thuộc tập hằng 1 kiểm tra xem có thuộc tập hằng 2 hay không?
Nếu tập hằng i là tập đầu tiên chứa giá trị của biến thì lệnh Si đ-ợc thực hiện
Nếu không tập hằng nào chứa giá trị của biến thì không lệnh nào đựơc thực hiện
S1 Sn có thể là lệnh đơn hoặc kép
Các cấu trúc Case cũng đ-ợc coi là một lệnh
Program Xem boi;
2: Writeln ('Chỉ yêu một mình anh');
3: Writeln ('Chỉ yêu anh và bạn của anh');
4: Writeln ('Yêu tất cả những ai hỏi');
End;
Readln;
END
Trang 24Bài 2: Cho một số có 3 chữ số viết ch-ơng trình in ra 1 dòng chữ tiếng việt
không dấu biểu diễn số đó
Trang 25Case DV of 1: Write ('Mot ');
NÕu biÕn kh«ng thuéc tËp h»ng nµo th× lÖnh (Sn + 1) ®-îc thùc hiÖn
ë d¹ng 2 bao giê còng cã duy nhÊt mét lÖnh ®-îc thùc hiÖn
Dv: = n mod 10;
Case dv of
0, 5: Writeln (n,' Chia hÕt cho 5');
Else Writeln (n,' Kh«ng chia hÕt cho 5');
END;
Trang 26Begin Write ('a='); Readln (a);
Write ('b='); Readln (b);
S: = a * b Write ('S=',S : 8 : 2);
End;
3:
Begin Write ('R = '); Readln (R);
Trang 27ĐBài 3: Cấu trúc lặp với lệnh For Dạng 1:
Biến chạy: Là 1 biến thuộc biến đếm đ-ợc (kiểu số nguyên) (Byte, Integer) Gt1, gt2 là thuộc cùng 1 kiểu với biến chạy
S có thể là lệnh đơn hoặc lệnh kép
Đầu tiên biến đ-ợc gán bằng
Gt1 sau đó máy kiểm tra BTLG nếu
vẫn ch-a v-ợt quá Gt2 thì S đ-ợc thực hiện, thực hiện xong lệnh S biến
đ-ợc tự động nhận giá trị tiếp theo
Sau đó lại quay về kiểm tra BTLG và vòng lặp kết thúc khi biến lớn hơn GT 2
Giả sử I: = 1 to 5 do S;
Nếu Gt1 <= Gt2 thì vòng lặp S đựơc thực hiện gt2 - gt1 + 1 lần
Nếu Gt1 > Gt2 thì S không thực hiện lần nào
Cả cấu trúc For cũng đ-ợc coi là một lệnh
Trong S có thể chứa cấu trúc For khác khi đó ta đ-ợc các cấu trúc For
lồng nhau
Sau mỗi lần lặp biến chạy tự động nhận giá trị tiếp theo do đó trong số các
lệnh của S không đ-ợc có lệnh nào làm thay đổi giá trị của biến chạy
(Biến chạy không đựơc phép có mặt ở vế trái bất kỳ lệnh gán nào trong số
các lệnh của S)
INC(I) ~ I:=I+1 PRED(I) ~ I:=I-1
FOR Biến chạy:= Gt1 TO Gt2 DO S
Trang 28
Trang 29n 1
1
4
13
12
11
Trang 30Dạng 2:
Biến đ-ợc gán bằng GT1 sau đó kiểm tra điều kiện nếu Biến vẫn lớn hơn
hoặc bằng GT2 thì lệnh S đ-ợc thực hiện Sau đó Biến đ-ợc giảm đi 1 rồi lại quay về kiểm tra điều kiện vòng lặp kết thúc khi Biến nhỏ hơn GT2
Nếu gt1 < gt2 thì vòng lặp không đ-ợc thực hiện lần nào
Gt1 > gt2 vòng lặp thực hiện với số lần: gt1 - gt2 + 1
Cả cấu trúc For cũng đựơc coi là một lệnh
(1) Tính
For i:=1 to n do T: =T * (1+ 1/(i * i))
FOR biến: = Gt1 DOWNTO Gt2 DO S
3
112
111
11
n n
11
i T
T(i-1)
Trang 312 2
T2
2 2
Trang 32(3) T = Sin (1) + Sin(2) + + Sin(n)
Trang 33) 1 (
Cos Sin
) 2 ( )
1 (
) 2 ( )
1 (
Cos Cos
Sin Sin
!
)(
!2
)2(
!1
)1(
n
n Sin Sin
Sin
Trang 3412 9
6
Ti-1
Trang 35Writeln (‘T =’, T : 10 : 8);
Readln;
END
Trang 361
1 1
a
Trang 37ĐBài 4: Cấu trúc lặp với lệnh While
Đầu tiên BTLG đ-ợc kiểm tra nếu đúng, lệnh S đ-ợc thực hiện, thực hiện xong lại quay về kiểm tra BTLG Vòng lặp kết thúc khi BTLG sai Nếu lúc đầu
BTLG sai thì lệnh S không đ-ợc thực hiện lần nào
Nếu BTLG đúng thì trong số các lệnh của S phải có một lệnh làm cho
BTLG đến 1 lúc nào đó trở thành sai, nếu không thì vòng lặp thực hiện vô hạn
lần
* Dữ liệu ký tự
Khai báo
Var Tên biến : Char;
Ví dụ: Var TL: Char;
Trong đó Pascal có tất cả 256 ký tự khác nhau mỗi ký tự có 1 mã gọi là mã ASCII, mã ASCII của các ký tự nhận giá trị từ 0 -> 255
Các giá trị của ký tự được đặt trong ‘A’, ‘b’, ‘9’
Trang 38‘ ‘ 32 (chữ hoa và chữ thường cách nhau ‘ ‘ 32)
(97 - 65 = 32) Các chữ cái la tinh đ-ợc xắp xếp liên tiếp mã ASCII
n là một biến của Byte
Hàm này cho ta ký tự có mã ASCII = n
Trang 40Integer: BiÕn sè nguyªn VD: n, d, i: Integer
Trang 41ĐBài 5: Cấu trúc lặp với lệnh REPEAT REPEAT
S;
Until BTLG;
Đầu tiên lệnh S đ-ợc thực
hiện sau đó máy kiểm tra
BTLG, sai lại quay về thực
hiện S Vòng lặp kết thúc khi BTLG đúng
Sự khác nhau giữa Repeat Until và While:
+ ở While BTLG đ-ợc kiểm tra tr-ớc (kiểm tra biểu thức lôgic tr-ớc) rồi
mới thực hiện S;
+ Còn ở Repeat thì thực hiện S rồi mới kiểm tra BTLG
Cho nên ở vòng lặp While S không đ-ợc thực hiện lần nào nếu nh- biểu thức lôgic ban đầu là sai, còn ở Repeat thì S đ-ợc thực hiện ít nhất 1 lần Vì vậy khi nào cần vòng lặp thực hiện ít nhất 1 lần nên dùng Repeat
- ở vòng While: Vòng While kết thúc khi biểu thức lôgic sai
- Còn vòng Repeat kết thúc khi biểu thức lôgic đúng
- ở cấu trúc Repeat nếu S là lệnh kép cũng không cần phải viết trong
cặp Begin - End
S
s
Trang 42VD: ViÕt ch-¬ng tr×nh tÝnh chu vi ®-êng trßn
Trang 44Hàm: GOTOXY(Cột, hàng)
Đ-a con trỏ tới toạ độ đ-ợc xác định bởi cột và hàng
VD: GOTOXY(5,10); đ-a con trỏ tới cột 5 và hàng 10 trên màn hình
Hàm: Where X
Cho biết toạ độ cột con trỏ trên màn hình
Hàm: Where Y: Tọa độ hàng của con trỏ trên màn hình
Trang 45Bµi tËp: Cho 2 sè tù nhiªn n, m t×m -íc chung lín nhÊt cña n, m
ThuËt to¸n ¬ c¬ lit
r=15; n=30; m=15;
r=0; n= 15; m= 0;
Trang 46TÝnh BSCNN cña n vµ m
BSCNN: 15, 9
d = UCLN(15,9) = 3 BCNN = 15 * 9 div 3
Trang 47Bµi t©p:
TÝnh n!!= 1.3.5 n nÕu n lÎ
= 2.4.6 n nÕu n ch½n (0!! = 2; 0! = 1)
Trang 48Kiểu Boolean
(m, p)
Các biến của BOOLEAN chỉ nhận 1trong 2 giá trị
True (đúng) False (sai) P: Các phép toán: AND, OR, NOT, XOR
Var A, B: BOOLEAN
Mỗi biến Boolean cũng đ-ợc coi là 1 biểu thức lôgic
Var A: Boolean Var A: Boolean
Trang 49If n mod i = 0 Then NT: = False Else i: = i + 1;
If NT then Writeln (n, ‘ Lµ sè nguyªn tè’);
i: = 2; NT: = True;
While (i<= SQRT(n)) and NT do
If n mod i = 0 then NT: = False Else i: = i + 1;
If NT then Write (n, ‘ ‘);
End;
Readln;
END
Trang 50If k*(k+1)*(k+2) = m then Writeln (K, ‘ ‘; k+1, ‘ ', k + 2);
Trang 51ĐBài 6: Mảng
Mảng là một tập hợp các giá trị thuộc cùng 1 kiểu dữ liệu
- Mảng có hai loại mảng 1 chiều và mảng nhiều chiều
- Miền chỉ số: Chỉ ra cận d-ới và cận trên của các chỉ số
- Kiểu dữ liệu: Kiểu dữ liệu các phần tử của mảng
VD: Var A:ARRAY [1 100] of Real;
A là 1 mảng chứa tối đa 100 ký tự
Các phép toán đối với mảng: Truy nhập theo chỉ số
Trang 52Bµi 1: Cho n sè thùc bÊt kú a 1 , a 2 , a n
Trang 53Bµi 2: ViÕt ph-¬ng tr×nh tÝnh tÝch v« h-íng cña 2 vÐc t¬: X, Y;
Write('X [', i, ']=');
Readln(X[i]);
End;
For i: = 1 to n do Begin Write ('Y[',i,']=');
Readln (Y[i]);
End;
T: = 0 For i: = 1 to n do T:=T+X[i]*Y[i];
Trang 54Bµi 3: ViÕt ch-¬ng tr×nh tÝnh trung b×nh céng c¸c sè thùc
Readln (X[I]);
End;
T = 0;
For i: = 1 to n do T:=(T+X[i]);
Trang 55Readln (A[i]);
End;
TA: = 0; TD: = 0; SA: =0; SD: = 0;
For i: = 1 to n do Begin
If A[i] < 0 then Begin SA: = SA + 1;
TA:=TA+A[i];
End;
If A[i] > 0 then Begin SD: = SD + 1;
TD: = TD + A[i];
End;
End;
If SA > 0 then Begin TA: = TA/SA;
Writeln(‘TBC các số âm =’, TA : 8 : 2);
End Else Writeln (‘Không có số âm’);
If SD > 0 then Begin TD: = TD/SD;
Writeln(‘TBC các số dương =’, TD : 8 : 2);
End Else Writeln(‘Không có số dương’);
Readln;
END
Trang 56Bµi 5: Cho n sè thùc a1, a2, an vµ 2 sè thùc x, y (x<=y) tÝnh Trung b×nh céng
Writeln (‘T=’, T: 8 : 2);
Else Writeln (‘ Kh«ng cã sè nµo trong [x, y]’) Readln;
END
Trang 57ThuËt to¸n t×m phÇn tö nhá nhÊt (lín nhÊt)
Cho mét d·y sè thø tù a 1 , a 2 , a n T×m phÇn tö nhá nhÊt
Var A [1 max] of Real;
Trang 58VÝ dô: Cho n sè thùc a1, a2, an vµ 2 sè thùc x, y H·y t×m phÇn tö lín nhÊt trong
For i: = 2 to d do
IF B[i] > LN then LN:=B[i];
Writeln('Gi¸ trÞ lín nhÊt',LN:8:2);
End Else Writeln('Kh«ng cã sè nµo trong [x,y]');
Readln;
END
Trang 59
2 sin 1 sin
21
a i
a
sin 1 sin
1
1 sin
Trang 60Bài 2 Cho n số tự nhiên k1, k2, kn
Tính tổng các số nguyên tố trong số đó (các chỉ số của mảng k1 kn)
Write(‘K[‘,i,‘]=’); Readl (K[i]);
End;
For i: = 1 to n do Begin
j: = 2; NT: = True;
While (J<=SQRT(K[i])) and NT do
If K[i] mod J = 0 then NT: = False Else j: = j + 1;
End;
Begin T: = 0;
Trang 61ThuËt to¸n s¾p xÕp
Cho phÇn tö a1, a2, an
S¾p xÕp l¹i phÇn tö nµy theo thø tù t¨ng dÇn vµ gi¶m dÇn
ThuËt to¸n sñi bät (Buble Sort)
For i: =1 to n-1 do For j:= i+1 to n do
If A[i]>A[j] then Begin
Var k: Array [1 100] of Integer;
i, j, n: Integer; Temp: Real;
BEGIN
CLRSCR;
Write(‘n=’); Readln (n);
For i:=1 to n do Begin Write(‘A [‘,i,‘j =’); Readln(A[i]);
End;
For i: =1 to n-1 do For j:= i+1 to n do
IF A[i]>A[j] then Begin