Nhập môn lập trình
Chia sẻ bởi Huy Hoang |
Ngày 29/04/2019 |
87
Chia sẻ tài liệu: Nhập môn lập trình thuộc Bài giảng khác
Nội dung tài liệu:
1
NHẬP MÔN LẬP TRÌNH
TIN HỌC ĐẠI CƯƠNG
2
BIỂU DIỄN BÀI TOÁN TRÊN MÁY TÍNH
I. Bài toán và thuật toán:
Khái niệm bài toán trong tin học.
Khái niệm thuật toán, các đặc trưng cơ bản của thuật toán.
Biểu diễn bài toán trên máy tính.
Biểu diễn thuật toán.
II. Ngôn ngữ lập trình Pascal
Khái niệm về ngôn ngữ lập trình và chương trình dịch.
Các lệnh cơ bản: lệnh nhập/xuất, lệnh rẽ nhánh (if), lệnh lặp (while, for).
Sử dụng ngôn ngữ lập trình để giải một số bài toán cơ bản.
3
Vấn đề - bài toán
Máy tính và việc giải quyết vấn đề - bài toán
Thuật toán - thuật giải
Các phương pháp biểu diễn thuật toán
Bài tập tổng hợp
I. BÀI TOÁN VÀ THUẬT TOÁN
4
Các bước để giải một bài toán trên máy tính
Bước 1: Xác định vấn đề - bài toán
Bước 2: Lựa chọn phương pháp giải
Bước 3: Xây dựng thuật toán hoặc thuật giải
Bước 4: Cài đặt chương trình
Bước 5: Hiệu chỉnh chương trình
Bước 6: Thực hiện chương trình
5
1. Vấn đề - bài toán
Vấn đề được hiểu như những khó khăn vướng mắc cần được giải quyết.
Vấn đề được thể hiện dưới dạng bài toán. Có điều kiện ban đầu và kết quả cần đạt tới.
A là giả thiết hay điều kiện ban đầu
B là kết luận hay kết quả cần đạt tới
là suy luận, giải pháp để giải quyết vấn đề
6
1. Vấn đề - bài toán
Ví dụ 1: Tìm các số x1,x2 sao cho ax2+bx+c=0 với a,b,c là các số cho trước.
A : các số cho trước a,b,c
B : giá trị của x1,x2
cách giải phương trình bậc 2
7
1. Vấn đề - bài toán
Ví dụ 2: Cho bản đồ như sau. Tìm đường đi ngắn nhất từ thành phố a đến thành phố f
A : Các TP a,b,c,d,e,f và các khoảng cách
B : Độ dài ngắn nhất từ a đến f
phương pháp tìm đường đi ngắn nhất từ a đến f
8
2. Máy tính và việc giải quyết vấn đề - bài toán
Máy tính có thể tính toán một khối lượng khổng lồ phép tính với độ chính xác tuyệt đối và tốc độ cực nhanh
Máy tính không thể tự tìm ra cách giải quyết vấn đề mà phải nhờ vào những chỉ dẫn của con người thông qua ngôn ngữ máy.
Sự phát triển của ngôn ngữ bậc cao giúp con người có thể giao tiếp với máy tính một cách dễ dàng hơn.
Quá trình chuyển đổi giữa ý tưởng, ngôn ngữ tự nhiên sang ngôn ngữ bậc cao gọi là lập trình.
Ngôn ngữ bậc cao còn được gọi là ngôn ngữ lập trình.
9
2.1. Phân loại ngôn ngữ lập trình
2.1.1. Ngôn ngữ máy
2.1.2. Hợp ngữ
2.1.3. Ngôn ngữ bậc cao
10
2.1.1. Ngôn ngữ máy
Là ngôn ngữ duy nhất mà máy tính có thể trực tiếp hiểu và thực hiện
Mỗi loại máy có ngôn ngữ máy của riêng nó
Là tập hợp các dạng câu lệnh
Ưu điểm: cho phép khai thác triệt để và tối ưu khả năng của máy tính
Nhược điểm: khó viết, chương trình nhận được cồng kềnh và khó hiệu chỉnh
11
2.1.2. Hợp ngữ (Assembly)
Có cấu trúc rất giống ngôn ngữ máy
Mã lệnh được thay bằng tên viết tắt tương ứng
Chỉ chạy được sau khi đã được dịch ra ngôn ngữ máy thông qua chương trình hợp dịch (Assembler)
Ưu điểm: khắc phục được nhược điểm của ngôn ngữ máy
Nhược điểm: không phù hợp với số đông người lập trình
12
2.1.3. Ngôn ngữ bậc cao
Mô phỏng ngôn ngữ tự nhiên, sử dụng các ký hiệu toán học thống nhất chung
Không phụ thuộc vào loại máy tính cụ thể
Chỉ chạy được sau khi đã được dịch ra ngôn ngữ máy thông qua chương trình thông dịch (Interpreter) hoặc biên dịch (Compiler)
Ưu điểm: dễ viết, chương trình dễ hiểu, dễ hiệu chỉnh và dễ nâng cấp hơn
13
2.2. Chương trình dịch
2.2.1. Khái niệm
2.2.2. Kỹ thuật thông dịch (Interpreter)
2.2.3. Kỹ thuật biên dịch (Compiler)
14
Nội dung
2.2.1. Khái niệm
2.2.2. Kỹ thuật thông dịch (Interpreter)
2.2.3. Kỹ thuật biên dịch (Compiler)
15
2.2.1. Khái niệm
Là chương trình đặc biệt dùng để chuyển chương trình trên ngôn ngữ ban đầu (chương trình nguồn) sang chương trình tương đương trên ngôn ngữ máy
16
2.2.2. Kỹ thuật thông dịch
Là kiểu dịch từng dòng lệnh để hiểu công việc cần làm và thực hiện ngay chứ không nhất thiết phải tạo ra các đoạn mã tương đương trong ngôn ngữ máy
Nếu một câu lệnh phải thực hiện nhiều lần thì cũng phải dịch nhiều lần
Ứng dụng: môi trường đối thoại giữa người và hệ thống
17
2.2.3. Kỹ thuật biên dịch
Là kiểu dịch toàn bộ chương trình ban đầu thành một chương trình tương ứng trong ngôn ngữ máy (chương trình đích), sau đó nạp chương trình đích vào máy tính để thực hiện
Ứng dụng: phù hợp với các chương trình ổn định và phải thực hiện nhiều lần
18
Một số ngôn ngữ lập trình thông dụng
Basic được thiết kế bởi John G. Kemeny và Thomas E. Kurtz tại ĐH Dartmouth vào 1963
Pascal được Niklaus Wirth phát thiết kế năm 1970
C do Dennis Richie thiết kế năm 1972 tại phòng thí nghiệp Bell Telephone của hãng AT&T sử dụng trong hệ điều hành Unix
Java được phát triễn bởi James Gosling thuộc Sun Microsystem vào 6/1991
19
Một số phương pháp giải quyết vấn đề (3/3)
Phương pháp trực tiếp
Áp dụng khi vấn đề - bài toán đã có cách giải chính xác, việc tìm lời giải chỉ là thao tác lập trình
Phương pháp gián tiếp
Áp dụng khi vấn đề - bài toán chưa tìm ra lời giải chính xác
20
3. Thuật toán – Thuật giải
3.1 Thuật toán
Thuật toán là một dãy hữu hạn các bước xác định nhằm giải quyết vấn đề với kết quả mong muốn.
Ví dụ: Thuật toán giải phương trình bậc nhất ax+b=0 với a,b là hằng số
1. Yêu cầu cho biết giá trị của a,b
2. Nếu a=0 thì
2.1 Nếu b = 0 thì PT vô định. Kết thúc
2.2 Nếu b ≠ 0 thì PT vô nghiệm. Kết thúc
3. Nếu a ≠ 0 thì PT có nghiệp x=-b/a. Kết thúc
21
3.2 Tính chất của thuật toán
Tính xác định
Các bước trong thuật toán đều xác định và có thể thực thi
Tính hữu hạn
Số bước của thuật toán là hưu hạn và có tính chất dừng
Tính đúng đắn
Thuật toán phải cho kết quả đúng như mong muốn.
22
3.3 Đặc trưng của thuật toán
Đầu vào và đầu ra
Mọi thuật toán đều nhận kết quả ở đầu vào, xử lý và cho kết quả cuối cùng
Tính hiệu quả
Khối lượng tính toán, không gian và thời gian được thi hành là yếu tố quyết định để đánh giá, lựa chọn thuật toán giải quyết vấn đề.
Tính tổng quát
Thuật toán phải áp dụng cho một họ bài toán
23
3.4 Thuật giải
Mở rộng hai tiêu chuẩn của thuật toán:
Tính xác định và tính đúng đắn được mở rộng để chấp nhận các cách giải cho kết quả tốt, gần đúng nhưng ít phức tạp và hiệu quả.
Các cách giải chấp nhận được nhưng không hoàn toàn đáp ứng đầy đủ các tiêu chuẩn của thuật toán thường được gọi là các thuật giải.
Một trong những thuật giải thường gặp trong khoa học trí tuệ nhân tạo là Heuristic.
24
4. Các phương pháp biểu diễn thuật toán
4.1 Dùng ngôn ngữ tự nhiên
4.2 Dùng lưu đồ, sơ đồ khối
4.3 Dùng mã giả
25
4. Các phương pháp biểu diễn thuật toán
4.1 Dùng ngôn ngữ tự nhiên
Dùng ngôn ngữ thường ngày để liệt kê các bước của thuật toán.
26
Ví dụ: Thuật toán giải phương trình bậc nhất ax+b=0 với a,b là hằng số
1. Yêu cầu cho biết giá trị của a,b
2. Nếu a=0 thì
2.1 Nếu b = 0 thì PT vô số nghiệm.
Kết thúc thuật toán
2.2 Nếu b ≠ 0 thì PT vô nghiệm.
Kết thúc thuật toán
3. Nếu a ≠ 0 thì PT có nghiệp x=-b/a.
Kết thúc thuật toán
27
4. Các phương pháp biểu diễn thuật toán
4.1 Dùng ngôn ngữ tự nhiên
Không có qui tắc cố định, nên thường dài dòng,khó hiểu, đôi khi không thể hiện rõ cấu trúc của thuật toán.
28
4. Các phương pháp biểu diễn thuật toán
4.2 Dùng lưu đồ, sơ đồ khối
Lưu đồ hay sơ đồ khối là công cụ trực quan để diễn đạt các thuật toán.
Các ký hiệu:
29
Ví dụ: Thuật toán giải phương trình bậc nhất ax+b=0 với a,b là hằng số
30
4. Các phương pháp biểu diễn thuật toán.
4.2 Dùng mã giả
Vay mượn cú pháp của một ngôn ngữ lập trình nào đó để thể hiện thuật toán
Ví dụ: Giải pt ax+b=0 với a,b là hằng số. (5/6)
- Nhập a,b
- if a=0 thì
if b=0 thì : xuất kết quả “Pt vô định”
else xuất kết quả “Pt vô nghiệm”
else xuất kết quả x = -b/a
31
Bài tập tổng hợp: Viết thuật toán dạng liệt kê và vẽ lưu đồ các vấn đề sau
Tính diện tích, chu vi của hình chữ nhật.
Tính diện tích, chu vi của hình tròn.
Giải phương trình bậc hai ax2+bx+c=0
Tìm số lớn nhất giữa 3 nguyên cho trước được nhập từ bàn phím.
Nhập vào một tháng trong năm, cho biết tháng đó có bao nhiêu ngày.
Nhập vào hai số nguyên, cho biết ước chung lớn nhất của chúng.
Nhập vào một số nguyên dương, cho biết số đó có nguyên tố hay không?
32
II. Ngôn ngữ lập trình Pascal
Giới thiệu ngôn ngữ lập trình Pascal
Cấu trúc tổng quát của một chương trình Pascal
Các kiểu dữ liệu đơn giản
Khai báo, biểu thức, câu lệnh
Các thủ tục nhập, xuất dữ liệu
Cấu trúc điều kiện
Cấu trúc lặp
Kiểu dữ liệu mảng
Kiểu dữ liệu chuỗi
Chương trình con: thủ tục và hàm
33
1. Giới thiệu ngôn ngữ lập trình Pascal
1.1 Chương trình Pascal đầu tiên
Sử dụng Turbo Pascal hoặc Free Pascal soạn thảo, biên dịch và chạy chương trình.
{This is first program}
Program FirstProgram;
Begin
Writeln(‘Hello World’);
End.
34
1.2 Chương trình giải phương trình bậc nhất.
Program PhuongTrinhBacI;
Var a,b:integer;
Uses crt;
Begin
clrscr;
write(‘a=’);readln(a);
write(‘b=’);readln(b);
if a<>0 then
writeln(‘x=‘,-b/a)
else
if b=0 then
write(‘PTVSN’)
else
write(‘PTVN’);
readln;
End.
35
2. Cấu trúc tổng quát của chương trình
Program Tên_Chương_Trình;
{Phần khai báo}
Uses …
Label …
Const …
Type …
Var …
{Phần chương trình con}
Procedure
Function
{Chương trình chính}
Begin
{Các lệnh của chương trình chính}
End.
36
3. Các kiểu dữ liệu cơ bản
3.1 Kiể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)
3.2 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)
37
3.1 Kiểu dữ liệu đơn giản
Kiểu số nguyên(Integer)
38
3.1 Kiểu đơn giản
Kiểu số thực(Real)
39
3.1 Kiểu đơn giản
Kiểu ký tự(Char)
Kiểu ký tự bao gồm các chữ cái (A Z, a z), các chữ số (0 9) các ký hiệu ! @ # $ %...
40
3.1 Kiểu đơn giản
Kiểu ký tự(Char)
41
3.1 Kiểu đơn giản
Kiểu Logic (Boolean)
Dữ liệu thuộc kiểu boolean chỉ có thể nhận giá trị TRUE hoặc FALSE
Các phép toán trên kiểu Boolean
AND, OR, NOT, XOR
42
4. Khai báo, biểu thức, câu lệnh
4.2 Khai báo biến(Variable)
Biến là một vùng nhớ được đặt cho một tên dùng để lưu trữ dữ liệu nào đó. Giá trị của vùng nhớ chính là giá trị của biến.
Tên biến phải bắt đầu bằng một chữ cái, không có khoảng trắng
Cách khai báo
Var : ;
43
4. Khai báo, biểu thức, câu lệnh
4.2 Khai báo biến(Variable)
Var
N : integer;
a,b : real;
ch : char;
hovaten : string;
test : boolean;
Cách khai báo
Var : ;
44
4. Khai báo, biểu thức, câu lệnh
4.1 Khai báo hằng (Constant)
Hằng là một đại lượng không đổi trong suốt quá trình thực thi chương trình.
Cách khai báo
Const = ;
Const
PI = 3.14; {hằng số thực}
TEN = ‘NGUYỄN VĂN A’; {hằng chuỗi}
T = TRUE; {hằng logic}
45
4. Khai báo, biểu thức, câu lệnh
4.3 Biểu thức
Là một công thức tính toán bao gồm các phép toán, hằng, biến, hàm và các dấu ngoặc.
Ví dụ:
SQR(B) – 4*A*C
((a>b) and (a>c)) or d
Chr(Ord(‘A’)+32)
Kiểu của biểu thức chính là kiểu của giá của biểu thức.
46
4. Khai báo, biểu thức, câu lệnh
4.3 Biểu thức
Thứ tự ưu tiên
Phép gọi hàm
Not - (dấu âm)
* / DIV MOD AND
+ - OR XOR
= <> <= >= < > IN
Qui tắc tính thứ tự độ ưu tiên
Phép toán có độ ưu tiên cao hơn sẽ được tính trước
Các phép toán có cùng độ ưu tiên thì tính từ trái sang phải.
Phần trong ngoặc từ trong ra ngoài được tính thành giá trị đơn.
47
4. Khai báo, biểu thức, câu lệnh
4.4 Câu lệnh
Lệnh gán
Lệnh gán dùng để đặt giá trị vào một biến
Cách sử dụng
:= ;
:= ;
Ví dụ
Delta := SQR(B) – 4*A*C;
Bcnn := a*b div UCLN(a,b);
dientich := chieudai*chieurong;
48
4. Khai báo, biểu thức, câu lệnh
4.5 Câu lệnh ghép
Các câu lệnh đơn được đặt giữa BEGIN và END sẽ tạo thành một câu lệnh ghép.
Cách sử dụng
Begin
…
End;
If (a <> 0) then
Begin
write(‘nghiệm=’ );
write(-b/a);
End;
49
5. Các thủ tục nhập xuất dữ liệu
5.1 Nhập dữ liệu từ bàn phím
Begin
readln(s);
read(a,b);
readln;
End.
50
5. Các thủ tục nhập xuất dữ liệu
5.2 Xuất dữ liệu ra màn hình
Ví dụ
Write(‘diem’,diem, ‘hocbong’,200);
Writeln;
Writeln(‘chu vi=’,(dai+rong)*2);
Writeln(‘ket thuc chuong trinh’);
51
6. Cấu trúc điều kiện
Program PhuongTrinhBacI;
Var a,b:integer
Begin
write(‘a=’);readln(a);
write(‘b=’);readln(b);
if a<>0 then
writeln(‘x=‘,-b/a)
else
if b=0 then
write(‘PTVSN’)
else
write(‘PTVN’);
readln;
End.
52
6. Cấu trúc điều kiện
6.1 Câu lệnh if …then …else
Program PhuongTrinhBacI;
Var a,b:integer;
Begin
write(‘a=’);readln(a);
write(‘b=’);readln(b);
if a<>0 then
writeln(‘x=‘,-b/a)
else
if b=0 then
write(‘PTVSN’)
else
write(‘PTVN’);
readln;
End.
if <điều kiện> then
if <điều kiện> then
else
53
6. Cấu trúc điều kiện
6.2 Câu lệnh Case … Of
Case Of
: ;
: ;
…
: ;
[ Else; ]
End;
Biểu thức chọn phải có giá trị rời rạc, đếm được
54
6. Cấu trúc điều kiện
6.2 Câu lệnh Case … Of
Var
N, sodu : integer;
Begin
Write(‘N=’); readln(N);
sodu = N mod 2;
Case sodu Of
0: Writeln(N,’ la so chan’);
1:Writeln(N,’ la so le’);
end;
End.
55
7. Cấu trúc lặp
Var
a:integer;
Begin
repeat
Write(‘a=’);
readln(a);
until a>=0;
writeln(sqrt(a));
End.
56
7. Cấu trúc lặp
Var
a:integer;
Begin
repeat
Write(‘a=’);
readln(a);
until a>=0;
writeln(sqrt(a));
End.
7.1 Cấu trúc lặp Repeat …Until
Cú pháp:
Repeat
Until <điều kiện>
Lặp lại quá trình thực hiện câu lệnh cho đến khi điều kiện đúng thì dừng.
57
7. Cấu trúc lặp
Var
a,b:integer;
Begin
Write(‘a,b=’);
Readln(a,b);
while a<>b do
begin
if a>b then a:=a-b
else b:=b-a;
end;
writeln(a);
End.
58
7. Cấu trúc lặp
Var
a,b:integer;
Begin
Write(‘a,b=‘);
Readln(a,b);
while a<>b do
begin
if a>b then a:=a-b
else b:=b-a;
end;
writeln(a);
End.
7.2 Cấu trúc lặp While…Do
Cú pháp:
While <điều kiện> Do
Nếu điều kiện đúng thì thực hiện câu lệnh cho đến khi điều kiện Sai thì dừng.
59
7. Cấu trúc lặp
Viết chương trình tính tổng sau với N là số tự nhiên cho trước:
60
Bắt đầu
N>0
N
kết thúc
S
Đ
T
T=0
I = 1
T = T + I2
I = I + 1
I<=N
Đ
S
Var
N:word;
T:longint;
I:word;
Begin
repeat
Write(‘N=’); Readln(N);
until N>0;
T:=0; I:=1;
while I<=N do
begin
T:=T+I*I;
I:=I+1;
end;
writeln(T);
End.
61
Bắt đầu
N>0
N
kết thúc
S
Đ
T
T=0
I = 1
T = T + I2
I = I + 1
I<=N
Đ
S
Var
N:word;
T:longint;
I:word;
Begin
repeat
Write(‘N=’); Readln(N);
until N>0;
For I:=1 to N do
T := T+I*I;
writeln(T);
End.
62
7. Cấu trúc lặp
7.3 Cấu trúc lặp For
For:= to do
For:= downto do
For i:=1 to N do
Writeln(i);
For ch:=‘Z’ downto ‘A’ do
Writeln(ch);
63
Var
N:word;
T:longint;
I:word;
Begin
repeat
Write(‘N=’); Readln(N);
until N>0;
For I:=1 to N do
T := T+I*I;
writeln(T);
End.
Var
N:word;
T:longint;
I:word;
Begin
repeat
Write(‘N=’); Readln(N);
until N>0;
T:=0; I:=1;
while I<=N do
begin
T:=T+I*I;
I:=I+1;
end;
writeln(T);
End.
Var
N:word;
T:longint;
I:word;
Begin
repeat
Write(‘N=’); Readln(N);
until N>0;
T:=0; I:=1;
repeat
T:=T+I*I;
I:=I+1;
until I>N;
writeln(T);
End.
64
7. Cấu trúc lặp
Chú ý:
Vòng lặp For có số bước lặp xác định
Biến đếm phải có kiểu rời rạc
Biến đếm tự động tăng/giảm 1 sau mỗi lần lặp
For:= to do
For:= downto do
7.3 Cấu trúc lặp For
65
Bài tập về chu trình và rẽ nhánh :
Số hoàn thiện là số mà tổng các ước thực sự bằng chính nó. Ví dụ: 6=1+2+3. Hãy tìm các số hoàn thiện nhỏ hơn N.
Số nguyên tố là số chỉ có 2 ước là 1 và chính nó. Hãy tìm các số nguyên tố nhỏ hơn N.
Tính S = 1*2*3 + 2*3*4 +…+ n*(n+1)*(n+2)
Viết chương trình tìm số Fibonaci thứ n
Fo=Fn=1 và Fn=Fn-1+Fn
Viết chương kiểm tra 1 số có phải là số chính phương?
66
8. Kiểu dữ liệu mảng (Array)
67
8.1 MẢNG (DÃY) MỘT CHIỀU
68
a. khái niệm
Mảng(array) là một tập các phần tử có cùng kiểu dữ liệu.
Số phần tử của mảng được xác định trước, ngay khi khai báo.
Mỗi phần tử của mảng có vị trí xác định. Vị trí đó gọi là chỉ số.
R: array[-1..1] of real;
C: array[‘a’..’d’] of char;
B: array[1..10] of byte;
69
Mỗi phần tử được truy cập trực tiếp thông qua tên mảng và chỉ số được bao giữa [ ]
c = (‘A’,’B’,’C’)
a = (2,3,4)
c[1] = ‘A’
c[2] = ‘B’
c[3] = ‘C’
a[-1] = ‘2’
a[0] = ‘3’
a[1] = ‘4’
c :array[1..3] of char;
a :array[-1..1] of byte;
70
b. Khai báo
Var
tênmảng : array[phạm vi chỉ số] of kiểu phần tử;
Var
a: array[1..100] of byte;
c: array[‘A’..’Z’] of char;
snt: aray[1..1000] of word;
hoten:array[1..30]of char;
danhsach:array[1..100] of sinhvien;
Ví dụ
71
b. Khai báo
Type
tên kiểu mới : array[phạm vi chỉ số] of kiểu phần tử.
Var
tên mảng : tên kiểu mới ;
Khai báo gián tiếp
Type
MangSoNguyen : array[‘1’..’10’] of byte.
Var
a: MangSoNguyen;
72
b. Khai báo
Var
tênmảng : array[phạm vi chỉ số] of kiểu phần tử.
Chú ý:
Phạm vi chỉ số phải là kiểu đoạn con,rời rạc, đếm được
Ví dụ: Kiểu ký tự
kiểu số nguyên,
kiểu liệt kê,
kểu boolean;
73
c. Nhập mảng
Var
a : array[1..100] of integer;
i, n: byte;
begin
write(‘nhap so phan tu’);
readln(n);
for i:=1 to n do
begin
write(‘nhap phan tu thu ’,i,’ :’);
readln(a[i]);
end;
end;.
Bước 2 :
Nhập từng phần tử của mảng
74
d. Xuất mảng
Var
a : array[1..100] of integer;
i, n: byte;
Begin
……
for i:=1 to n do
begin
write(‘phan tu thu ’,i,’ :’);
writeln(a[i]);
end;
end;.
75
Bài tập về mảng một chiều
Nhập vào dãy số N số nguyên. Xếp các số lẻ vào đầu dãy, các số chẵn vào cuối dãy.
Viết chương trình nhập vào một dãy số nguyên. Sau đó chèn thêm một phần tử tại vị trí bất kỳ vào dãy. In ra dãy số sau khi chèn.
Viết chương trình nhập vào một dãy số nguyên. Xóa một phần tử có giá trị bất kỳ trên dãy. In ra dãy sau khi xóa.
Nhập vào một dãy gồm N số nguyên. Xuất ra dãy số trên sau khi được sắp xếp tăng dần.
Nhập vào một dãy số nguyên, kiểm tra dãy trên có phải là cấp số cộng không?
Nhập vào dãy N số nguyên, tìm dãy cấp số cộng dài nhất trên dãy đã cho.
76
8.2 MẢNG NHIỀU CHIỀU
77
a. Khai báo
Var
: array[phạm vi chỉ số dòng, phạm vi chỉ số cột] of ;
Ví dụ:
matran:array[1..5,1..5] of integer;
bangtinh:array[1..256, ‘A’..‘Z’] of string;
78
A[ 3 , 3 ] = 5
A:array[1..5,1..5] of byte;
Chỉ số hàng
Chỉ số cột
79
b. Nhập mảng
Var
a : array[1..10,1..10] of word;
n,m,i: byte;
begin
write(‘N,M=’);
readln(n,m);
for i:=1 to n do
for j:=1 to m do
begin
write(‘a[’,i,’,’,j,’=’);
readln(a[i,j]);
end;
end;.
Bước 2 :
Nhập từng phần tử của mảng
80
c. Xuất mảng
Var
a : array[1..100] of integer;
i, n,m: byte;
begin
….
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j]:3);
writeln;
end;
end.
81
82
Bài tập về mảng hai chiều
Tìm phần tử có giá trị lớn nhất trong ma trận vuông cấp N.
Viết chương trình tính tổng các phần tử trên đường chéo chính.
Viết chương trình in ra tam giác Pascal với N là số dòng cho trước.
Viết nhập vào hai ma trận, sau đó in ma trận kết quả của phép nhân 2 ma trân trên.
Viết chương trình tính tổng các phần tử trên tam giác dưới của một ma trận vuông cấp N.
83
9. Kiểu dữ liệu chuỗi (String)
84
a. Khai báo
Var
: string[độ dài];
ví dụ:
Var
ho_va_ten : string[40];
gioitinh : string[3];
filename : string;
danhsachlop:array[1..50] of string[50];
85
Var
s:string;
Begin
s:=“abcdef”;
write(ord(s[0]));
End.
S
Các thao tác nhập, xuất, so sánh, gián giá trị trên chuổi được sử dụng giống như các biến thuộc kiểu cơ bản thông thường
86
b. Các hàm thao tác trên chuỗi
87
Bài tập về chuỗi
Viết chương trình kiểm tra một chuỗi có phải là Palindrom hay không?
Viết chương trình đếm số ký tự xuất hiện trong chuỗi.
Viết chương trình đổi các ký tự trong chuỗi từ hoa sang thường
Viết chương trình cắt bỏ các khoảng trắng thừa trong chuỗi.
Viết chương trình in ra từ dài nhất trong chuỗi.
Viết chương trình nhập vào họ và tên. In ra họ, tên lót, tên
Viết chương trình nhập vào danh sách họ và tên. In ra danh sách vừa nhập với định dạng canh đều 2 bên.
88
10. Chương trình con
Procedure & Function
89
N:=Ord(‘a’);
X:=SQRT(16);
N:=SQR (5);
Write(‘hello world’);
St=Copy(‘Chao ban’,1,4);
Delete(St,1,4)
N:=Trunc(3.245);
N:=Chr(‘65’);
M:=Round(9.57,1);
St:=Upcase(‘abc’);
N:=Length(St);
Val(‘123’,N,Er)
Một số thủ tục và hàm do Pascal định nghĩa
90
Một số thủ tục và hàm tự định nghĩa
Nhapmang(A,n);
dtb:=Tinh trungbinh(a)
K:=Mu(x,n)
Xuatmang(a,n);
If laSNT(n) then
Writeln(n);
T:=T+Giaithua(i)/Mu(i,n);
If palindrom(st) then
write(“Chuoi doi xung”;
St:=trim(st)
M:=dinhthuc(A)
Sapxep(A,n)
Writeln(Tongduongcheochinh(A,n))
91
10.1 Khái niệm
Thủ tục (Procedure) và hàm (Function) là những chương trình con có chức năng giúp cho người lập trình giảm bớt công sức và chương trình ngắn gọn, dễ hiểu và dễ kiểm tra.
Begin
Nhap(n);
Nhapmang(a,n);
Sapxep(a,n);
Xuat(a,n);
End.
Begin
Nhap(A,n);
Nhap(B,n);
Cong(C,A,B,n)
Xuat(C,n)
End.
92
10.2 Định nghĩa thủ tục và gọi thủ tục
Loại 1: Thủ tục không có tham số
Procedure Ten_thu_tuc;
{phần khai báo của thủ tục}
Begin
{phần thân thân thủ tục}
End;
Ví dụ:
Procedure xuat_loi_chao;
Begin
Writeln(‘-----------------’);
Writeln(‘Chao cac ban’);
Writeln(‘-----------------’);
End;
Begin
xuat_loi_chao;
End.
Lời gọi thủ tục
93
10.2 Định nghĩa thủ tục và gọi thủ tục
Loại 2: Thủ tục có tham số
Procedure Ten_thu_tuc(Danh sách các tham số)
{phần khai báo của thủ tục}
Begin
{phần thân thân thủ tục}
End;
Ví dụ:
Procedure Xuatmang(A:Mang; n:integer);
Var
i:integer;
Begin
For i:=1 to n do
Write(a[i]);
End;
Begin
Nhapmang(a,n);
Xuatmang(a,n)
End.
94
10.3 Định nghĩa hàm và gọi hàm
Định nghĩa
Funtion ten_ham(Danh sách các tham số nếu có):kiểu trả về
{phần khai báo của hàm}
Begin
{phần thân thân hàm}
ten_ham:=
End;
Gọi hàm
Tên_hàm(Danh sách các tham số nếu có)
Khi gọi hàm, tên hàm phải tham gia như là một biểu thức.
Ví dụ1:
Function Lapphuong ( x : byte ) : longint;
Begin
Lapphuong:=x*x*x;
End.
Begin
Writeln(Lapphuong(10));
End.
95
10.3 Định nghĩa hàm và gọi hàm
Funtion ten_ham(Danh sách các tham số nếu có):kiểu trả về
{phần khai báo của hàm}
Begin
{phần thân thân hàm}
ten_ham:=
End;
Ví dụ 2:
Function Mu ( x : byte; n:byte ) : longint;
Var
i:byte;
M:longint;
Begin
for i:=1 to n do
M:=M*x;
Lapphuong:=M;
End.
Begin
Writeln(Mu(2,10));
End.
96
10.3 Định nghĩa hàm và gọi hàm
Funtion ten_ham(Danh sách các tham số nếu có):kiểu trả về
{phần khai báo của hàm}
Begin
{phần thân thân hàm}
ten_ham:=
End;
Ví dụ3:
Function giaithua (n:byte ) : longint;
Var
i:byte;
gt:longint;
Begin
for i:=1 to n do
gt:=gt*i;
giaithua:=gt;
End.
Begin
Writeln(giaithua(10));
End.
97
10.4 Tầm vực hoạt động của biến
Biến toàn cục:
Là biến được khai báo trong chương trình chính. Các biến này có thể sử dụng mọi nơi trong chương trình, kể cả trong chương trình con.
Biến cục bộ:
Là biến được khai báo trong chương trình con. Biến này chỉ có thể sử dụng trong chương trình con mà nó khai báo.
Tầm vực hoạt động của biến là phạm vi mà biến có tác dụng.
98
Cho biết kết quả sau khi chạy chương trình
Var
a,b,c:word;
Procedure giam(a:word; b:word);
Begin
a:=a-1;
b:=b-1;
writeln(a,b);
End.
function Tang(a,b:word):word;
Begin
a:=a+1;
b:=b+a; c:=b;
Writeln(a,b);
Tang:=a;
End.
Begin
a:=5; b:=5; c:=5;
giam(b,c);
c:=Tang(a,b);
write(a,b,c);
End.
99
10.5 Tham số của chương trình con
Tham biến : là tham số của chương trình con, được khai báo sau từ khóa Var. Tham biến giúp đưa giá trị vào chương trình con và giúp chương trình gọi nhận giá trị từ chương trình con.
Tham trị : là tham số của chương trình con, giúp đưa giá trị vào chương trình con.
Begin
Nhap(n);
Nhapmang(a,n);
Sapxep(a,n);
Xuat(a,n);
End.
Begin
Nhap(A,n);
Nhap(B,n);
Cong(C,A,B,n)
Xuat(C,n)
End.
100
10.5 Tham số của chương trình con
Tham biến : là tham số của chương trình con, được khai báo sau từ khóa Var. Tham biến giúp đưa giá trị vào chương trình con và giúp chương trình gọi nhận giá trị từ chương trình con.
Tham trị : là tham số của chương trình con, giúp đưa giá trị vào chương trình con.
Procedure nhap(var a:mang; var n:byte);
Var i:byte;
Begin
write(‘N=‘);readln(n);
for i:=1 to n do
readln(a[i]);
end;
101
10.5 Tham số của chương trình con
Tham biến : là tham số của chương trình con, được khai báo sau từ khóa Var. Tham biến giúp đưa giá trị vào chương trình con và giúp chương trình gọi nhận giá trị từ chương trình con.
Tham trị : là tham số của chương trình con, giúp đưa giá trị vào chương trình con.
Procedure xuat(a:mang; n:byte);
Var i:byte;
Begin
for i:=1 to n do
writeln(a[i]);
end;
102
Var
n:word;
Function kiemtra(n:word):boolean;
Begin
for i:=2 to trunc(sqrt(n)) do
if n mod I =0 then
begin
kiemtra:=false
exit;
end;
kiemtra:=true;
end.;
Procedure nhap(var n:word)
Begin
write(‘Nhap so’);
readln(n);
End.
Begin
nhap(n);
if kiemtra(n) then
write(n,’ la SNT’)
else
write(n,’ khong la SNT’);
End.
103
Cho biết kết quả sau khi chạy chương trình
Var
a,b,c:word;
Procedure Tang(a:word;var b:word)
Begin
a:=a+1;
b:=a;
c:=a;
End.
Begin
a:=5; b:=5; c:=5;
Tang(a,b);
write(a,b,c);
End.
104
Cho biết kết quả sau khi chạy chương trình
Var
a,b,c:word;
function Tang(var a,b:word):word;
Begin
a:=a+1;
b:=b+a; c:=b;
Tang:=a;
End.
Procedure giam(a:word;var c:word)
Begin
a:=b-1;
c:=a-1;
end.;
Begin
a:=5; b:=5; c:=5;
c:=Tang(a,b);
giam(b,c);
write(a,b,c);
End.
105
Cho biết kết quả sau khi chạy chương trình
Var
a,b,c:word;
function Tang(var a,b:word):word;
Begin
a:=a+1;
b:=b+a; c:=b;
Tang:=a;
End.
Begin
a:=5; b:=5; c:=5;
c:=Tang(a,b);
write(a,b,c);
End.
106
Bài tập về thủ tục và hàm
Viết lại các chương trình nhập xuất mảng một chiều, hai chiều sử dụng chương trình con.
Viết chương trình nhập vào một dãy số nguyên gồm N số. In ra giá trị trung bình, tổng các phần tử lẻ, tổng các phần tử chẵn, các số nguyên tố của giải trên.
Viết chương trình nhập vào một chuỗi ký tự. Viết chương trình con LTrim, CTrim,Rtrim để loại bỏ các khoảng trắng bên trái, ở giữa, bên phải của chuỗi đã cho.
Viết chương trình trình con Power, Lower để đổi một chuỗi sang chữ hoa và chũ thường.
107
Bài tập về thủ tục và hàm
Mỗi hình chữ nhật được mô tả bởi điểm đầu và điểm cuối của 1 đường chéo. Mỗi điểm được mô tả bởi 2 thành phần x,y. Viết chương trình nhập vào danh sách N các hình chữ nhật. Sau đó in ra tọa độ của hình chữ nhật có diện tích lớn nhất.
Viết chương trình nhập vào 2 điểm A(x,y), B(x,y) trong mặt phẳng tọa độ OXY. Tính khoảng cách của đoạn thẳng AB.
108
HẾT
NHẬP MÔN LẬP TRÌNH
TIN HỌC ĐẠI CƯƠNG
2
BIỂU DIỄN BÀI TOÁN TRÊN MÁY TÍNH
I. Bài toán và thuật toán:
Khái niệm bài toán trong tin học.
Khái niệm thuật toán, các đặc trưng cơ bản của thuật toán.
Biểu diễn bài toán trên máy tính.
Biểu diễn thuật toán.
II. Ngôn ngữ lập trình Pascal
Khái niệm về ngôn ngữ lập trình và chương trình dịch.
Các lệnh cơ bản: lệnh nhập/xuất, lệnh rẽ nhánh (if), lệnh lặp (while, for).
Sử dụng ngôn ngữ lập trình để giải một số bài toán cơ bản.
3
Vấn đề - bài toán
Máy tính và việc giải quyết vấn đề - bài toán
Thuật toán - thuật giải
Các phương pháp biểu diễn thuật toán
Bài tập tổng hợp
I. BÀI TOÁN VÀ THUẬT TOÁN
4
Các bước để giải một bài toán trên máy tính
Bước 1: Xác định vấn đề - bài toán
Bước 2: Lựa chọn phương pháp giải
Bước 3: Xây dựng thuật toán hoặc thuật giải
Bước 4: Cài đặt chương trình
Bước 5: Hiệu chỉnh chương trình
Bước 6: Thực hiện chương trình
5
1. Vấn đề - bài toán
Vấn đề được hiểu như những khó khăn vướng mắc cần được giải quyết.
Vấn đề được thể hiện dưới dạng bài toán. Có điều kiện ban đầu và kết quả cần đạt tới.
A là giả thiết hay điều kiện ban đầu
B là kết luận hay kết quả cần đạt tới
là suy luận, giải pháp để giải quyết vấn đề
6
1. Vấn đề - bài toán
Ví dụ 1: Tìm các số x1,x2 sao cho ax2+bx+c=0 với a,b,c là các số cho trước.
A : các số cho trước a,b,c
B : giá trị của x1,x2
cách giải phương trình bậc 2
7
1. Vấn đề - bài toán
Ví dụ 2: Cho bản đồ như sau. Tìm đường đi ngắn nhất từ thành phố a đến thành phố f
A : Các TP a,b,c,d,e,f và các khoảng cách
B : Độ dài ngắn nhất từ a đến f
phương pháp tìm đường đi ngắn nhất từ a đến f
8
2. Máy tính và việc giải quyết vấn đề - bài toán
Máy tính có thể tính toán một khối lượng khổng lồ phép tính với độ chính xác tuyệt đối và tốc độ cực nhanh
Máy tính không thể tự tìm ra cách giải quyết vấn đề mà phải nhờ vào những chỉ dẫn của con người thông qua ngôn ngữ máy.
Sự phát triển của ngôn ngữ bậc cao giúp con người có thể giao tiếp với máy tính một cách dễ dàng hơn.
Quá trình chuyển đổi giữa ý tưởng, ngôn ngữ tự nhiên sang ngôn ngữ bậc cao gọi là lập trình.
Ngôn ngữ bậc cao còn được gọi là ngôn ngữ lập trình.
9
2.1. Phân loại ngôn ngữ lập trình
2.1.1. Ngôn ngữ máy
2.1.2. Hợp ngữ
2.1.3. Ngôn ngữ bậc cao
10
2.1.1. Ngôn ngữ máy
Là ngôn ngữ duy nhất mà máy tính có thể trực tiếp hiểu và thực hiện
Mỗi loại máy có ngôn ngữ máy của riêng nó
Là tập hợp các dạng câu lệnh
Ưu điểm: cho phép khai thác triệt để và tối ưu khả năng của máy tính
Nhược điểm: khó viết, chương trình nhận được cồng kềnh và khó hiệu chỉnh
11
2.1.2. Hợp ngữ (Assembly)
Có cấu trúc rất giống ngôn ngữ máy
Mã lệnh được thay bằng tên viết tắt tương ứng
Chỉ chạy được sau khi đã được dịch ra ngôn ngữ máy thông qua chương trình hợp dịch (Assembler)
Ưu điểm: khắc phục được nhược điểm của ngôn ngữ máy
Nhược điểm: không phù hợp với số đông người lập trình
12
2.1.3. Ngôn ngữ bậc cao
Mô phỏng ngôn ngữ tự nhiên, sử dụng các ký hiệu toán học thống nhất chung
Không phụ thuộc vào loại máy tính cụ thể
Chỉ chạy được sau khi đã được dịch ra ngôn ngữ máy thông qua chương trình thông dịch (Interpreter) hoặc biên dịch (Compiler)
Ưu điểm: dễ viết, chương trình dễ hiểu, dễ hiệu chỉnh và dễ nâng cấp hơn
13
2.2. Chương trình dịch
2.2.1. Khái niệm
2.2.2. Kỹ thuật thông dịch (Interpreter)
2.2.3. Kỹ thuật biên dịch (Compiler)
14
Nội dung
2.2.1. Khái niệm
2.2.2. Kỹ thuật thông dịch (Interpreter)
2.2.3. Kỹ thuật biên dịch (Compiler)
15
2.2.1. Khái niệm
Là chương trình đặc biệt dùng để chuyển chương trình trên ngôn ngữ ban đầu (chương trình nguồn) sang chương trình tương đương trên ngôn ngữ máy
16
2.2.2. Kỹ thuật thông dịch
Là kiểu dịch từng dòng lệnh để hiểu công việc cần làm và thực hiện ngay chứ không nhất thiết phải tạo ra các đoạn mã tương đương trong ngôn ngữ máy
Nếu một câu lệnh phải thực hiện nhiều lần thì cũng phải dịch nhiều lần
Ứng dụng: môi trường đối thoại giữa người và hệ thống
17
2.2.3. Kỹ thuật biên dịch
Là kiểu dịch toàn bộ chương trình ban đầu thành một chương trình tương ứng trong ngôn ngữ máy (chương trình đích), sau đó nạp chương trình đích vào máy tính để thực hiện
Ứng dụng: phù hợp với các chương trình ổn định và phải thực hiện nhiều lần
18
Một số ngôn ngữ lập trình thông dụng
Basic được thiết kế bởi John G. Kemeny và Thomas E. Kurtz tại ĐH Dartmouth vào 1963
Pascal được Niklaus Wirth phát thiết kế năm 1970
C do Dennis Richie thiết kế năm 1972 tại phòng thí nghiệp Bell Telephone của hãng AT&T sử dụng trong hệ điều hành Unix
Java được phát triễn bởi James Gosling thuộc Sun Microsystem vào 6/1991
19
Một số phương pháp giải quyết vấn đề (3/3)
Phương pháp trực tiếp
Áp dụng khi vấn đề - bài toán đã có cách giải chính xác, việc tìm lời giải chỉ là thao tác lập trình
Phương pháp gián tiếp
Áp dụng khi vấn đề - bài toán chưa tìm ra lời giải chính xác
20
3. Thuật toán – Thuật giải
3.1 Thuật toán
Thuật toán là một dãy hữu hạn các bước xác định nhằm giải quyết vấn đề với kết quả mong muốn.
Ví dụ: Thuật toán giải phương trình bậc nhất ax+b=0 với a,b là hằng số
1. Yêu cầu cho biết giá trị của a,b
2. Nếu a=0 thì
2.1 Nếu b = 0 thì PT vô định. Kết thúc
2.2 Nếu b ≠ 0 thì PT vô nghiệm. Kết thúc
3. Nếu a ≠ 0 thì PT có nghiệp x=-b/a. Kết thúc
21
3.2 Tính chất của thuật toán
Tính xác định
Các bước trong thuật toán đều xác định và có thể thực thi
Tính hữu hạn
Số bước của thuật toán là hưu hạn và có tính chất dừng
Tính đúng đắn
Thuật toán phải cho kết quả đúng như mong muốn.
22
3.3 Đặc trưng của thuật toán
Đầu vào và đầu ra
Mọi thuật toán đều nhận kết quả ở đầu vào, xử lý và cho kết quả cuối cùng
Tính hiệu quả
Khối lượng tính toán, không gian và thời gian được thi hành là yếu tố quyết định để đánh giá, lựa chọn thuật toán giải quyết vấn đề.
Tính tổng quát
Thuật toán phải áp dụng cho một họ bài toán
23
3.4 Thuật giải
Mở rộng hai tiêu chuẩn của thuật toán:
Tính xác định và tính đúng đắn được mở rộng để chấp nhận các cách giải cho kết quả tốt, gần đúng nhưng ít phức tạp và hiệu quả.
Các cách giải chấp nhận được nhưng không hoàn toàn đáp ứng đầy đủ các tiêu chuẩn của thuật toán thường được gọi là các thuật giải.
Một trong những thuật giải thường gặp trong khoa học trí tuệ nhân tạo là Heuristic.
24
4. Các phương pháp biểu diễn thuật toán
4.1 Dùng ngôn ngữ tự nhiên
4.2 Dùng lưu đồ, sơ đồ khối
4.3 Dùng mã giả
25
4. Các phương pháp biểu diễn thuật toán
4.1 Dùng ngôn ngữ tự nhiên
Dùng ngôn ngữ thường ngày để liệt kê các bước của thuật toán.
26
Ví dụ: Thuật toán giải phương trình bậc nhất ax+b=0 với a,b là hằng số
1. Yêu cầu cho biết giá trị của a,b
2. Nếu a=0 thì
2.1 Nếu b = 0 thì PT vô số nghiệm.
Kết thúc thuật toán
2.2 Nếu b ≠ 0 thì PT vô nghiệm.
Kết thúc thuật toán
3. Nếu a ≠ 0 thì PT có nghiệp x=-b/a.
Kết thúc thuật toán
27
4. Các phương pháp biểu diễn thuật toán
4.1 Dùng ngôn ngữ tự nhiên
Không có qui tắc cố định, nên thường dài dòng,khó hiểu, đôi khi không thể hiện rõ cấu trúc của thuật toán.
28
4. Các phương pháp biểu diễn thuật toán
4.2 Dùng lưu đồ, sơ đồ khối
Lưu đồ hay sơ đồ khối là công cụ trực quan để diễn đạt các thuật toán.
Các ký hiệu:
29
Ví dụ: Thuật toán giải phương trình bậc nhất ax+b=0 với a,b là hằng số
30
4. Các phương pháp biểu diễn thuật toán.
4.2 Dùng mã giả
Vay mượn cú pháp của một ngôn ngữ lập trình nào đó để thể hiện thuật toán
Ví dụ: Giải pt ax+b=0 với a,b là hằng số. (5/6)
- Nhập a,b
- if a=0 thì
if b=0 thì : xuất kết quả “Pt vô định”
else xuất kết quả “Pt vô nghiệm”
else xuất kết quả x = -b/a
31
Bài tập tổng hợp: Viết thuật toán dạng liệt kê và vẽ lưu đồ các vấn đề sau
Tính diện tích, chu vi của hình chữ nhật.
Tính diện tích, chu vi của hình tròn.
Giải phương trình bậc hai ax2+bx+c=0
Tìm số lớn nhất giữa 3 nguyên cho trước được nhập từ bàn phím.
Nhập vào một tháng trong năm, cho biết tháng đó có bao nhiêu ngày.
Nhập vào hai số nguyên, cho biết ước chung lớn nhất của chúng.
Nhập vào một số nguyên dương, cho biết số đó có nguyên tố hay không?
32
II. Ngôn ngữ lập trình Pascal
Giới thiệu ngôn ngữ lập trình Pascal
Cấu trúc tổng quát của một chương trình Pascal
Các kiểu dữ liệu đơn giản
Khai báo, biểu thức, câu lệnh
Các thủ tục nhập, xuất dữ liệu
Cấu trúc điều kiện
Cấu trúc lặp
Kiểu dữ liệu mảng
Kiểu dữ liệu chuỗi
Chương trình con: thủ tục và hàm
33
1. Giới thiệu ngôn ngữ lập trình Pascal
1.1 Chương trình Pascal đầu tiên
Sử dụng Turbo Pascal hoặc Free Pascal soạn thảo, biên dịch và chạy chương trình.
{This is first program}
Program FirstProgram;
Begin
Writeln(‘Hello World’);
End.
34
1.2 Chương trình giải phương trình bậc nhất.
Program PhuongTrinhBacI;
Var a,b:integer;
Uses crt;
Begin
clrscr;
write(‘a=’);readln(a);
write(‘b=’);readln(b);
if a<>0 then
writeln(‘x=‘,-b/a)
else
if b=0 then
write(‘PTVSN’)
else
write(‘PTVN’);
readln;
End.
35
2. Cấu trúc tổng quát của chương trình
Program Tên_Chương_Trình;
{Phần khai báo}
Uses …
Label …
Const …
Type …
Var …
{Phần chương trình con}
Procedure
Function
{Chương trình chính}
Begin
{Các lệnh của chương trình chính}
End.
36
3. Các kiểu dữ liệu cơ bản
3.1 Kiể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)
3.2 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)
37
3.1 Kiểu dữ liệu đơn giản
Kiểu số nguyên(Integer)
38
3.1 Kiểu đơn giản
Kiểu số thực(Real)
39
3.1 Kiểu đơn giản
Kiểu ký tự(Char)
Kiểu ký tự bao gồm các chữ cái (A Z, a z), các chữ số (0 9) các ký hiệu ! @ # $ %...
40
3.1 Kiểu đơn giản
Kiểu ký tự(Char)
41
3.1 Kiểu đơn giản
Kiểu Logic (Boolean)
Dữ liệu thuộc kiểu boolean chỉ có thể nhận giá trị TRUE hoặc FALSE
Các phép toán trên kiểu Boolean
AND, OR, NOT, XOR
42
4. Khai báo, biểu thức, câu lệnh
4.2 Khai báo biến(Variable)
Biến là một vùng nhớ được đặt cho một tên dùng để lưu trữ dữ liệu nào đó. Giá trị của vùng nhớ chính là giá trị của biến.
Tên biến phải bắt đầu bằng một chữ cái, không có khoảng trắng
Cách khai báo
Var
43
4. Khai báo, biểu thức, câu lệnh
4.2 Khai báo biến(Variable)
Var
N : integer;
a,b : real;
ch : char;
hovaten : string;
test : boolean;
Cách khai báo
Var
44
4. Khai báo, biểu thức, câu lệnh
4.1 Khai báo hằng (Constant)
Hằng là một đại lượng không đổi trong suốt quá trình thực thi chương trình.
Cách khai báo
Const
Const
PI = 3.14; {hằng số thực}
TEN = ‘NGUYỄN VĂN A’; {hằng chuỗi}
T = TRUE; {hằng logic}
45
4. Khai báo, biểu thức, câu lệnh
4.3 Biểu thức
Là một công thức tính toán bao gồm các phép toán, hằng, biến, hàm và các dấu ngoặc.
Ví dụ:
SQR(B) – 4*A*C
((a>b) and (a>c)) or d
Chr(Ord(‘A’)+32)
Kiểu của biểu thức chính là kiểu của giá của biểu thức.
46
4. Khai báo, biểu thức, câu lệnh
4.3 Biểu thức
Thứ tự ưu tiên
Phép gọi hàm
Not - (dấu âm)
* / DIV MOD AND
+ - OR XOR
= <> <= >= < > IN
Qui tắc tính thứ tự độ ưu tiên
Phép toán có độ ưu tiên cao hơn sẽ được tính trước
Các phép toán có cùng độ ưu tiên thì tính từ trái sang phải.
Phần trong ngoặc từ trong ra ngoài được tính thành giá trị đơn.
47
4. Khai báo, biểu thức, câu lệnh
4.4 Câu lệnh
Lệnh gán
Lệnh gán dùng để đặt giá trị vào một biến
Cách sử dụng
Ví dụ
Delta := SQR(B) – 4*A*C;
Bcnn := a*b div UCLN(a,b);
dientich := chieudai*chieurong;
48
4. Khai báo, biểu thức, câu lệnh
4.5 Câu lệnh ghép
Các câu lệnh đơn được đặt giữa BEGIN và END sẽ tạo thành một câu lệnh ghép.
Cách sử dụng
Begin
…
End;
If (a <> 0) then
Begin
write(‘nghiệm=’ );
write(-b/a);
End;
49
5. Các thủ tục nhập xuất dữ liệu
5.1 Nhập dữ liệu từ bàn phím
Begin
readln(s);
read(a,b);
readln;
End.
50
5. Các thủ tục nhập xuất dữ liệu
5.2 Xuất dữ liệu ra màn hình
Ví dụ
Write(‘diem’,diem, ‘hocbong’,200);
Writeln;
Writeln(‘chu vi=’,(dai+rong)*2);
Writeln(‘ket thuc chuong trinh’);
51
6. Cấu trúc điều kiện
Program PhuongTrinhBacI;
Var a,b:integer
Begin
write(‘a=’);readln(a);
write(‘b=’);readln(b);
if a<>0 then
writeln(‘x=‘,-b/a)
else
if b=0 then
write(‘PTVSN’)
else
write(‘PTVN’);
readln;
End.
52
6. Cấu trúc điều kiện
6.1 Câu lệnh if …then …else
Program PhuongTrinhBacI;
Var a,b:integer;
Begin
write(‘a=’);readln(a);
write(‘b=’);readln(b);
if a<>0 then
writeln(‘x=‘,-b/a)
else
if b=0 then
write(‘PTVSN’)
else
write(‘PTVN’);
readln;
End.
if <điều kiện> then
if <điều kiện> then
else
53
6. Cấu trúc điều kiện
6.2 Câu lệnh Case … Of
Case
…
[ Else
End;
Biểu thức chọn phải có giá trị rời rạc, đếm được
54
6. Cấu trúc điều kiện
6.2 Câu lệnh Case … Of
Var
N, sodu : integer;
Begin
Write(‘N=’); readln(N);
sodu = N mod 2;
Case sodu Of
0: Writeln(N,’ la so chan’);
1:Writeln(N,’ la so le’);
end;
End.
55
7. Cấu trúc lặp
Var
a:integer;
Begin
repeat
Write(‘a=’);
readln(a);
until a>=0;
writeln(sqrt(a));
End.
56
7. Cấu trúc lặp
Var
a:integer;
Begin
repeat
Write(‘a=’);
readln(a);
until a>=0;
writeln(sqrt(a));
End.
7.1 Cấu trúc lặp Repeat …Until
Cú pháp:
Repeat
Until <điều kiện>
Lặp lại quá trình thực hiện câu lệnh cho đến khi điều kiện đúng thì dừng.
57
7. Cấu trúc lặp
Var
a,b:integer;
Begin
Write(‘a,b=’);
Readln(a,b);
while a<>b do
begin
if a>b then a:=a-b
else b:=b-a;
end;
writeln(a);
End.
58
7. Cấu trúc lặp
Var
a,b:integer;
Begin
Write(‘a,b=‘);
Readln(a,b);
while a<>b do
begin
if a>b then a:=a-b
else b:=b-a;
end;
writeln(a);
End.
7.2 Cấu trúc lặp While…Do
Cú pháp:
While <điều kiện> Do
Nếu điều kiện đúng thì thực hiện câu lệnh cho đến khi điều kiện Sai thì dừng.
59
7. Cấu trúc lặp
Viết chương trình tính tổng sau với N là số tự nhiên cho trước:
60
Bắt đầu
N>0
N
kết thúc
S
Đ
T
T=0
I = 1
T = T + I2
I = I + 1
I<=N
Đ
S
Var
N:word;
T:longint;
I:word;
Begin
repeat
Write(‘N=’); Readln(N);
until N>0;
T:=0; I:=1;
while I<=N do
begin
T:=T+I*I;
I:=I+1;
end;
writeln(T);
End.
61
Bắt đầu
N>0
N
kết thúc
S
Đ
T
T=0
I = 1
T = T + I2
I = I + 1
I<=N
Đ
S
Var
N:word;
T:longint;
I:word;
Begin
repeat
Write(‘N=’); Readln(N);
until N>0;
For I:=1 to N do
T := T+I*I;
writeln(T);
End.
62
7. Cấu trúc lặp
7.3 Cấu trúc lặp For
For
For
For i:=1 to N do
Writeln(i);
For ch:=‘Z’ downto ‘A’ do
Writeln(ch);
63
Var
N:word;
T:longint;
I:word;
Begin
repeat
Write(‘N=’); Readln(N);
until N>0;
For I:=1 to N do
T := T+I*I;
writeln(T);
End.
Var
N:word;
T:longint;
I:word;
Begin
repeat
Write(‘N=’); Readln(N);
until N>0;
T:=0; I:=1;
while I<=N do
begin
T:=T+I*I;
I:=I+1;
end;
writeln(T);
End.
Var
N:word;
T:longint;
I:word;
Begin
repeat
Write(‘N=’); Readln(N);
until N>0;
T:=0; I:=1;
repeat
T:=T+I*I;
I:=I+1;
until I>N;
writeln(T);
End.
64
7. Cấu trúc lặp
Chú ý:
Vòng lặp For có số bước lặp xác định
Biến đếm phải có kiểu rời rạc
Biến đếm tự động tăng/giảm 1 sau mỗi lần lặp
For
For
7.3 Cấu trúc lặp For
65
Bài tập về chu trình và rẽ nhánh :
Số hoàn thiện là số mà tổng các ước thực sự bằng chính nó. Ví dụ: 6=1+2+3. Hãy tìm các số hoàn thiện nhỏ hơn N.
Số nguyên tố là số chỉ có 2 ước là 1 và chính nó. Hãy tìm các số nguyên tố nhỏ hơn N.
Tính S = 1*2*3 + 2*3*4 +…+ n*(n+1)*(n+2)
Viết chương trình tìm số Fibonaci thứ n
Fo=Fn=1 và Fn=Fn-1+Fn
Viết chương kiểm tra 1 số có phải là số chính phương?
66
8. Kiểu dữ liệu mảng (Array)
67
8.1 MẢNG (DÃY) MỘT CHIỀU
68
a. khái niệm
Mảng(array) là một tập các phần tử có cùng kiểu dữ liệu.
Số phần tử của mảng được xác định trước, ngay khi khai báo.
Mỗi phần tử của mảng có vị trí xác định. Vị trí đó gọi là chỉ số.
R: array[-1..1] of real;
C: array[‘a’..’d’] of char;
B: array[1..10] of byte;
69
Mỗi phần tử được truy cập trực tiếp thông qua tên mảng và chỉ số được bao giữa [ ]
c = (‘A’,’B’,’C’)
a = (2,3,4)
c[1] = ‘A’
c[2] = ‘B’
c[3] = ‘C’
a[-1] = ‘2’
a[0] = ‘3’
a[1] = ‘4’
c :array[1..3] of char;
a :array[-1..1] of byte;
70
b. Khai báo
Var
tênmảng : array[phạm vi chỉ số] of kiểu phần tử;
Var
a: array[1..100] of byte;
c: array[‘A’..’Z’] of char;
snt: aray[1..1000] of word;
hoten:array[1..30]of char;
danhsach:array[1..100] of sinhvien;
Ví dụ
71
b. Khai báo
Type
tên kiểu mới : array[phạm vi chỉ số] of kiểu phần tử.
Var
tên mảng : tên kiểu mới ;
Khai báo gián tiếp
Type
MangSoNguyen : array[‘1’..’10’] of byte.
Var
a: MangSoNguyen;
72
b. Khai báo
Var
tênmảng : array[phạm vi chỉ số] of kiểu phần tử.
Chú ý:
Phạm vi chỉ số phải là kiểu đoạn con,rời rạc, đếm được
Ví dụ: Kiểu ký tự
kiểu số nguyên,
kiểu liệt kê,
kểu boolean;
73
c. Nhập mảng
Var
a : array[1..100] of integer;
i, n: byte;
begin
write(‘nhap so phan tu’);
readln(n);
for i:=1 to n do
begin
write(‘nhap phan tu thu ’,i,’ :’);
readln(a[i]);
end;
end;.
Bước 2 :
Nhập từng phần tử của mảng
74
d. Xuất mảng
Var
a : array[1..100] of integer;
i, n: byte;
Begin
……
for i:=1 to n do
begin
write(‘phan tu thu ’,i,’ :’);
writeln(a[i]);
end;
end;.
75
Bài tập về mảng một chiều
Nhập vào dãy số N số nguyên. Xếp các số lẻ vào đầu dãy, các số chẵn vào cuối dãy.
Viết chương trình nhập vào một dãy số nguyên. Sau đó chèn thêm một phần tử tại vị trí bất kỳ vào dãy. In ra dãy số sau khi chèn.
Viết chương trình nhập vào một dãy số nguyên. Xóa một phần tử có giá trị bất kỳ trên dãy. In ra dãy sau khi xóa.
Nhập vào một dãy gồm N số nguyên. Xuất ra dãy số trên sau khi được sắp xếp tăng dần.
Nhập vào một dãy số nguyên, kiểm tra dãy trên có phải là cấp số cộng không?
Nhập vào dãy N số nguyên, tìm dãy cấp số cộng dài nhất trên dãy đã cho.
76
8.2 MẢNG NHIỀU CHIỀU
77
a. Khai báo
Var
Ví dụ:
matran:array[1..5,1..5] of integer;
bangtinh:array[1..256, ‘A’..‘Z’] of string;
78
A[ 3 , 3 ] = 5
A:array[1..5,1..5] of byte;
Chỉ số hàng
Chỉ số cột
79
b. Nhập mảng
Var
a : array[1..10,1..10] of word;
n,m,i: byte;
begin
write(‘N,M=’);
readln(n,m);
for i:=1 to n do
for j:=1 to m do
begin
write(‘a[’,i,’,’,j,’=’);
readln(a[i,j]);
end;
end;.
Bước 2 :
Nhập từng phần tử của mảng
80
c. Xuất mảng
Var
a : array[1..100] of integer;
i, n,m: byte;
begin
….
for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j]:3);
writeln;
end;
end.
81
82
Bài tập về mảng hai chiều
Tìm phần tử có giá trị lớn nhất trong ma trận vuông cấp N.
Viết chương trình tính tổng các phần tử trên đường chéo chính.
Viết chương trình in ra tam giác Pascal với N là số dòng cho trước.
Viết nhập vào hai ma trận, sau đó in ma trận kết quả của phép nhân 2 ma trân trên.
Viết chương trình tính tổng các phần tử trên tam giác dưới của một ma trận vuông cấp N.
83
9. Kiểu dữ liệu chuỗi (String)
84
a. Khai báo
Var
ví dụ:
Var
ho_va_ten : string[40];
gioitinh : string[3];
filename : string;
danhsachlop:array[1..50] of string[50];
85
Var
s:string;
Begin
s:=“abcdef”;
write(ord(s[0]));
End.
S
Các thao tác nhập, xuất, so sánh, gián giá trị trên chuổi được sử dụng giống như các biến thuộc kiểu cơ bản thông thường
86
b. Các hàm thao tác trên chuỗi
87
Bài tập về chuỗi
Viết chương trình kiểm tra một chuỗi có phải là Palindrom hay không?
Viết chương trình đếm số ký tự xuất hiện trong chuỗi.
Viết chương trình đổi các ký tự trong chuỗi từ hoa sang thường
Viết chương trình cắt bỏ các khoảng trắng thừa trong chuỗi.
Viết chương trình in ra từ dài nhất trong chuỗi.
Viết chương trình nhập vào họ và tên. In ra họ, tên lót, tên
Viết chương trình nhập vào danh sách họ và tên. In ra danh sách vừa nhập với định dạng canh đều 2 bên.
88
10. Chương trình con
Procedure & Function
89
N:=Ord(‘a’);
X:=SQRT(16);
N:=SQR (5);
Write(‘hello world’);
St=Copy(‘Chao ban’,1,4);
Delete(St,1,4)
N:=Trunc(3.245);
N:=Chr(‘65’);
M:=Round(9.57,1);
St:=Upcase(‘abc’);
N:=Length(St);
Val(‘123’,N,Er)
Một số thủ tục và hàm do Pascal định nghĩa
90
Một số thủ tục và hàm tự định nghĩa
Nhapmang(A,n);
dtb:=Tinh trungbinh(a)
K:=Mu(x,n)
Xuatmang(a,n);
If laSNT(n) then
Writeln(n);
T:=T+Giaithua(i)/Mu(i,n);
If palindrom(st) then
write(“Chuoi doi xung”;
St:=trim(st)
M:=dinhthuc(A)
Sapxep(A,n)
Writeln(Tongduongcheochinh(A,n))
91
10.1 Khái niệm
Thủ tục (Procedure) và hàm (Function) là những chương trình con có chức năng giúp cho người lập trình giảm bớt công sức và chương trình ngắn gọn, dễ hiểu và dễ kiểm tra.
Begin
Nhap(n);
Nhapmang(a,n);
Sapxep(a,n);
Xuat(a,n);
End.
Begin
Nhap(A,n);
Nhap(B,n);
Cong(C,A,B,n)
Xuat(C,n)
End.
92
10.2 Định nghĩa thủ tục và gọi thủ tục
Loại 1: Thủ tục không có tham số
Procedure Ten_thu_tuc;
{phần khai báo của thủ tục}
Begin
{phần thân thân thủ tục}
End;
Ví dụ:
Procedure xuat_loi_chao;
Begin
Writeln(‘-----------------’);
Writeln(‘Chao cac ban’);
Writeln(‘-----------------’);
End;
Begin
xuat_loi_chao;
End.
Lời gọi thủ tục
93
10.2 Định nghĩa thủ tục và gọi thủ tục
Loại 2: Thủ tục có tham số
Procedure Ten_thu_tuc(Danh sách các tham số)
{phần khai báo của thủ tục}
Begin
{phần thân thân thủ tục}
End;
Ví dụ:
Procedure Xuatmang(A:Mang; n:integer);
Var
i:integer;
Begin
For i:=1 to n do
Write(a[i]);
End;
Begin
Nhapmang(a,n);
Xuatmang(a,n)
End.
94
10.3 Định nghĩa hàm và gọi hàm
Định nghĩa
Funtion ten_ham(Danh sách các tham số nếu có):kiểu trả về
{phần khai báo của hàm}
Begin
{phần thân thân hàm}
ten_ham:=
End;
Gọi hàm
Tên_hàm(Danh sách các tham số nếu có)
Khi gọi hàm, tên hàm phải tham gia như là một biểu thức.
Ví dụ1:
Function Lapphuong ( x : byte ) : longint;
Begin
Lapphuong:=x*x*x;
End.
Begin
Writeln(Lapphuong(10));
End.
95
10.3 Định nghĩa hàm và gọi hàm
Funtion ten_ham(Danh sách các tham số nếu có):kiểu trả về
{phần khai báo của hàm}
Begin
{phần thân thân hàm}
ten_ham:=
End;
Ví dụ 2:
Function Mu ( x : byte; n:byte ) : longint;
Var
i:byte;
M:longint;
Begin
for i:=1 to n do
M:=M*x;
Lapphuong:=M;
End.
Begin
Writeln(Mu(2,10));
End.
96
10.3 Định nghĩa hàm và gọi hàm
Funtion ten_ham(Danh sách các tham số nếu có):kiểu trả về
{phần khai báo của hàm}
Begin
{phần thân thân hàm}
ten_ham:=
End;
Ví dụ3:
Function giaithua (n:byte ) : longint;
Var
i:byte;
gt:longint;
Begin
for i:=1 to n do
gt:=gt*i;
giaithua:=gt;
End.
Begin
Writeln(giaithua(10));
End.
97
10.4 Tầm vực hoạt động của biến
Biến toàn cục:
Là biến được khai báo trong chương trình chính. Các biến này có thể sử dụng mọi nơi trong chương trình, kể cả trong chương trình con.
Biến cục bộ:
Là biến được khai báo trong chương trình con. Biến này chỉ có thể sử dụng trong chương trình con mà nó khai báo.
Tầm vực hoạt động của biến là phạm vi mà biến có tác dụng.
98
Cho biết kết quả sau khi chạy chương trình
Var
a,b,c:word;
Procedure giam(a:word; b:word);
Begin
a:=a-1;
b:=b-1;
writeln(a,b);
End.
function Tang(a,b:word):word;
Begin
a:=a+1;
b:=b+a; c:=b;
Writeln(a,b);
Tang:=a;
End.
Begin
a:=5; b:=5; c:=5;
giam(b,c);
c:=Tang(a,b);
write(a,b,c);
End.
99
10.5 Tham số của chương trình con
Tham biến : là tham số của chương trình con, được khai báo sau từ khóa Var. Tham biến giúp đưa giá trị vào chương trình con và giúp chương trình gọi nhận giá trị từ chương trình con.
Tham trị : là tham số của chương trình con, giúp đưa giá trị vào chương trình con.
Begin
Nhap(n);
Nhapmang(a,n);
Sapxep(a,n);
Xuat(a,n);
End.
Begin
Nhap(A,n);
Nhap(B,n);
Cong(C,A,B,n)
Xuat(C,n)
End.
100
10.5 Tham số của chương trình con
Tham biến : là tham số của chương trình con, được khai báo sau từ khóa Var. Tham biến giúp đưa giá trị vào chương trình con và giúp chương trình gọi nhận giá trị từ chương trình con.
Tham trị : là tham số của chương trình con, giúp đưa giá trị vào chương trình con.
Procedure nhap(var a:mang; var n:byte);
Var i:byte;
Begin
write(‘N=‘);readln(n);
for i:=1 to n do
readln(a[i]);
end;
101
10.5 Tham số của chương trình con
Tham biến : là tham số của chương trình con, được khai báo sau từ khóa Var. Tham biến giúp đưa giá trị vào chương trình con và giúp chương trình gọi nhận giá trị từ chương trình con.
Tham trị : là tham số của chương trình con, giúp đưa giá trị vào chương trình con.
Procedure xuat(a:mang; n:byte);
Var i:byte;
Begin
for i:=1 to n do
writeln(a[i]);
end;
102
Var
n:word;
Function kiemtra(n:word):boolean;
Begin
for i:=2 to trunc(sqrt(n)) do
if n mod I =0 then
begin
kiemtra:=false
exit;
end;
kiemtra:=true;
end.;
Procedure nhap(var n:word)
Begin
write(‘Nhap so’);
readln(n);
End.
Begin
nhap(n);
if kiemtra(n) then
write(n,’ la SNT’)
else
write(n,’ khong la SNT’);
End.
103
Cho biết kết quả sau khi chạy chương trình
Var
a,b,c:word;
Procedure Tang(a:word;var b:word)
Begin
a:=a+1;
b:=a;
c:=a;
End.
Begin
a:=5; b:=5; c:=5;
Tang(a,b);
write(a,b,c);
End.
104
Cho biết kết quả sau khi chạy chương trình
Var
a,b,c:word;
function Tang(var a,b:word):word;
Begin
a:=a+1;
b:=b+a; c:=b;
Tang:=a;
End.
Procedure giam(a:word;var c:word)
Begin
a:=b-1;
c:=a-1;
end.;
Begin
a:=5; b:=5; c:=5;
c:=Tang(a,b);
giam(b,c);
write(a,b,c);
End.
105
Cho biết kết quả sau khi chạy chương trình
Var
a,b,c:word;
function Tang(var a,b:word):word;
Begin
a:=a+1;
b:=b+a; c:=b;
Tang:=a;
End.
Begin
a:=5; b:=5; c:=5;
c:=Tang(a,b);
write(a,b,c);
End.
106
Bài tập về thủ tục và hàm
Viết lại các chương trình nhập xuất mảng một chiều, hai chiều sử dụng chương trình con.
Viết chương trình nhập vào một dãy số nguyên gồm N số. In ra giá trị trung bình, tổng các phần tử lẻ, tổng các phần tử chẵn, các số nguyên tố của giải trên.
Viết chương trình nhập vào một chuỗi ký tự. Viết chương trình con LTrim, CTrim,Rtrim để loại bỏ các khoảng trắng bên trái, ở giữa, bên phải của chuỗi đã cho.
Viết chương trình trình con Power, Lower để đổi một chuỗi sang chữ hoa và chũ thường.
107
Bài tập về thủ tục và hàm
Mỗi hình chữ nhật được mô tả bởi điểm đầu và điểm cuối của 1 đường chéo. Mỗi điểm được mô tả bởi 2 thành phần x,y. Viết chương trình nhập vào danh sách N các hình chữ nhật. Sau đó in ra tọa độ của hình chữ nhật có diện tích lớn nhất.
Viết chương trình nhập vào 2 điểm A(x,y), B(x,y) trong mặt phẳng tọa độ OXY. Tính khoảng cách của đoạn thẳng AB.
108
HẾT
* Một số tài liệu cũ có thể bị lỗi font khi hiển thị do dùng bộ mã không phải Unikey ...
Người chia sẻ: Huy Hoang
Dung lượng: |
Lượt tài: 4
Loại file:
Nguồn : Chưa rõ
(Tài liệu chưa được thẩm định)