1. Trang chủ
  2. » Tất cả

giao trinh pascal

48 6 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 48
Dung lượng 0,92 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Giới thiệu về lập trình : 1.Chương trình :Dãy lệnh đã được mã hóa đưa vào cho máy tính điện tử 2.Lập trình viết chương trình cho máy tính điện tử 3.Turbo pascal là một ngôn ngữ lập trình

Trang 1

Bài 1 :Mở đầu (t1-2)

I Giới thiệu về lập trình :

1.Chương trình :Dãy lệnh đã được mã hóa đưa vào cho máy tính điện tử

2.Lập trình viết chương trình cho máy tính điện tử

3.Turbo pascal là một ngôn ngữ lập trình được dùng phổ biến nhất hiện nay trong việc giảng dạy tin học ở bậc trung học phổ thông và trung học cơ sở Pascal có đặc điểm : ngữ pháp ,ngữ nghĩa đơn giản và có tính logic ; cấu trúc chương trinh rõ ràng dễ hiểu 4.Cấu trúc của một chương trình pascal :

[program tên chương trình ;]

(*Phần khai báo *)

[const ] : (* khai bao các hằng số trong chương trình *)

[uses] : (*khai báo các thư viện trong chương trình *)

[type] :(*định nghĩa các kiểu dữ liệu*)

[procedure và function ](* khai báo các hàm và thủ tục dùng trong chương trình *) [var] :( khai báo các biến dùng trong chương trình*)

<begin> :

[các lệnh kết thúc bằng ;]

<end.> (*ket thuc chương trình *)

II.Ví dụ về các chương trình Pascal đơn giản

1.Xuất dòng văn bản ra màn hình

lệnh này cho phép xuất ra màn hình hay máy in các dữ liệu ,kết quả và các thông báo cần thiết

cú pháp write (<biểu thức >);

hay writeln (<biểu thức >);

-Lệnh write xuất ra màn hình giá trị của biểu thức tại vị trí con trỏ hiện hành Sau lệnh này con trỏ sẽ ở cuối giá trị được xuất trên màn hình

-Lệnh writeln xuất lên màn hình giá trị của biểu thức tại vị trí con trỏ hiện hành sau đó con trỏ sẽ được đưa về dòng mới

có ba loại :

-Xuất chuổi thông báo : thông báo sẽ được đặt trong ‘ ‘

Vidụ : write(‘TRUONG DINH TIEN HOANG’)

-Xuất giá trị của biên trong biểu thức số thì không cần (‘ ‘)

Ví dụ write ( R )

Hoặc Write ( a*b*c/4);

-Xuất hổn hợp bao gồm hai cách xuất trên giữa hai cách xuất phải có dâu (,)

ví dụ write (‘bán kính đường tròn là :’,R);

định dạng lúc xuất

các định dạng như sau :

biến thực : m:n

m : là tổng số ô trông tối thiểu để in giá trị biến thực khi m =0 thì số ô trống là tuỳ ý

n : là số số lẻ mà biến thực cần có ( ở phẩn thập phân )

Trang 2

ví dụ a:=1.692845

Lệnh nhập :

Lệnh này cho phép chương trình nhận sô liệu và ghi vào biến tương ứng được đưa ra Cú pháp : readln (biến )

Nhập nhiều biến :

Readln (biến 1 ,biến 2 ,….biến n);

Ví dụ a,b :real

Trang 3

1.Khởi động và kết thúc chương trình

-Khởi động :

+ Nhấp vào biểu tượng turbo pascal

+ Từ dấu nhắc Dos

2.Giói thiệu màn hình giao diện của TP

3) Sọan thảo trong môi trương TP

Thông thường màn hình vi tính được chia thành 25 dòng mỗi dòng viết được 80 ký tự Để chọn menu nhấn phím F10 di chuyển điểm sáng đến menu thích ứng nhấn ENTER a) Menu File :

+Chọn nhanh bằng phím Alt+F :dùng để quản lý tập tin : lưu ,mở

Trang 4

-GOTO CURSOR :dùng để chạy chương trình đến vị trí của câu lệnh mà con trỏ đang đứng

-USER SCREEN (ALT+F5) :thoát khỏi màn hình soạn thảo để xem màn hình kết quả vừa thực hiện

d)Menu COMPILE : dùng để biên dịch chương trình từ ngôn ngữ PASCAL sang ngôn ngữ máy

+compile : biên dịch ra máy nhưng không chạy chương trình

+Find error : Tìm lỗi của chương trình sau khi viết xong

e)Menu Debug : dùng để gỡ rối ,tìm lỗi của chương trình

f)Menu Break/Watch :Dùng để quan sát giá trị các biên khi chạy chương trình tới các điểm dừng tùy ý chọn nhăm gỡ rối chương trình

-Để sữa chữa con văn bản ta có thể dùng các phím mũi tên ,end,home hoặc chuột để

di chuyển con trỏ , đến vị trí cần sữa sau đó có thể dùng phím delete ,Back space để xóa và thêm chữ vào

4)Quản lý tài liệu :

+Lưu : File –save

+Lưu với tên mới : File –save as

+Mở file đã lưu : file –open ->chọn tên file cần mở

5.Biên dịch và chạy chương trình : sau khi viết xong chương trình để biên dịch

ta nhấn phím Alt+F9

IV.Phương pháp lập trình

Đối với các bài tóan đơn giản thì ta có thể viết ngay chương trình ,còn đối với các bài toán khó ,phức tạp thông thường thực hiện qua các bước sau :

1.Tìm cách giải các bài toán bằng ngôn ngữ tự nhiên ,tìm giải thuật phù hợp

2.Vẽ lưu đồ bài tóan

3.Thể hiện ngôn ngữ lập trình trên giấy

4.Soạn chương trình trên môi trường phần mềm ngôn ngữ

5.Cho chạy thử ,sửa lỗi và hòan chỉnh chương trình

Trang 6

Bài 2 :Các thủ tục cơ bản của TP (t3-4)

I Giới thiệu về lập trình :

(Thông qua bài tập mẫu , giới thiệu cac thủ tục xuất ,nhập ,khai báo ,phép gán ,các phép toán số học )

Bài toán 1 : cho biết bán kính hãy tính diện tích và chu vi hình tròn

Dữ liệu nhập vào (giả thiết ) : Bán kính hình tròn

Dữ liệu xuất ra (kết luận ) : diện tích và chu vi hình tròn

(1) program Dien_tich_Hinh_tron;

(2) Const p=3.14;

(3) Var r,dt :real;

(4) Begin

(5) Write(‘Hay nhap ban kinh hinh tron ‘);

(6) Readln(r); { lênh nay để lưu gia trị nhập vao biên r }

(7) Dt:=r*r*p; {lệnh này dùng để gán cho biến dt giá trị r*r*p }

(8) Cv=2*r*p; { lệnh này dùng để gán cho biến Cv giá trị r*r*p }

(9) Writeln(‘Dien tich cua hình tròn là ‘,dt);

(10) Readln; { lệnh này dùng để chờ bàn phím ấn Enter }

1.Nguyên tắc cơ bản :

-khai báo tên chương trình giữa các ký tự không được có các khỏang trắng

-khai báo các hằng số : các biến có giá trị không thay đổi trong tòan bộ chương trình

ví dụ : const pi=3.14; { khai báo hằng số Pi có giá trị không đổi 3.14 }

-Biến muốn sử dụng phải khai báo ví dụ var r:real;

khi khai báo biến không được đặt tên biến trùng với từ khóa

+Từ khóa : là các từ riêng của PASCAL ,có ngữ nghĩa

* Từ khóa chung :

PROGRAM,BEGIN,END,PROCEDURE ,FUNCTION

*Từ khóa dùng để khai báo :

CONST,VAR ,TYPE,ARRAY,STRING,RECORD ,SET,FILE OF ,LABEL …

-Thân chương trình : bắt đầu bằng Begin và kết thúc bởi end

+Kết thúc một câu lệnh ,phát biểu phải có dấu chấm phẩy (;) kết thúc chương trinh phải có dấu chấm (.) ,các câu lệnh có thể viết chung trên một dòng

+Nên viết thụt đầu dòng theo cấu trúc phân cấp để tiện theo dõi và sữa lỗi chương trình

2.Biến và khai báo biến :

2.1 Công dụng và cách đặt tên biến:

cách đặt tên biến và chương trình cũng giống như cách đặt tên thư mục và file nhưng đối với tên biến không được đặt kí tự đầu tiên là số

công dụng của biến :

Trang 7

-thực hiện các phép toán chuyển đổi từ các số liệu nhập để cho ra kết quả

-Xuất các kết quả ra cho người dùng chương trình Ngoài ra các biến còn được dùng để lưu trữ các số liệu nhập,các số liệu trung gian trong quá trình xử lý kết quả

2.2 Khai báo biến :

muốn khai báo biến ta đặt vào phần var của chương trình với câu trúc như sau :

<tên biến > :<kiểu >;1.1 Biến là một ô nhớ nằm trong bộ nhớ chính ,nội dung có thể thay đổi được Mổi biến có một tên cho phép người lập trình có thể dọc ghi nội dung của ô nhớ thpông qua tên biến mà không cần biết địa chỉ chính xác của biến

-các tên biến cùng kiểu ta có thể liệt kê liền gần nhau ,cách nhau bằng dấu phẩy

-kiểu ta sẽ định nghĩa như ở phần sau

2.3KIỂU DỮ LIỆU :

A)Kiểu số :

Gồm hai loại : nguyên và thực

Nguyên bao gồm

Loại kích thước fạm vi lưu trữ

b)Kiểu luận lý :

kí hiệu Boolean : baogồm hai giá trị TRUE và FALSE

c)Kiểu kí tự và chuổi

-kiểu kí tự là biến có kích thước 1 byte gồm các kí tự có trong bảng mã ASSCII kí hiệu là Char

-kiểu string là tập hợp 1 chuổi các kí tự có tối đa 255 kí tự

3.Hằng và khai báo biến

hằng là các đại lượng khôngthay đổi giá trị

khai báo hằng :các hằng được khai báo bằng một tên đặt trong phần khai báo const ở đầu chương trình

cách viết

ten_hang=giá_trị_của_hằng;

ví dụ :

PI=3.14; (* Hằng số thực *)

a=5; (* Hằng so ánguyên *)

ch=’Z’; (* Hằng Kí tự Z *)

các hằng giữ nguyên giá trị của nó trong suốt chương trình

4)Câu lệnh xuất

1.Xuất dòng văn bản ra màn hình

lệnh này cho phép xuất ra màn hình hay máy in các dữ liệu ,kết quả và các thông báo

Trang 8

cần thiết

cú pháp write (<biểu thức >);

hay writeln (<biểu thức >);

-Lệnh write xuất ra màn hình giá trị của biểu thức tại vị trí con trỏ hiện hành Sau lệnh này con trỏ sẽ ở cuối giá trị được xuất trên màn hình

-Lệnh writeln xuất lên màn hình giá trị của biểu thức tại vị trí con trỏ hiện hành sau đó con trỏ sẽ được đưa về dòng mới

có ba loại :

-Xuất chuổi thông báo : thông báo sẽ được đặt trong ‘ ‘

Vidụ : write(‘TRUONG DINH TIEN HOANG’)

-Xuất giá trị của biên trong biểu thức số thì không cần (‘ ‘)

Ví dụ write ( R )

Hoặc Write ( a*b*c/4);

-Xuất hổn hợp bao gồm hai cách xuất trên giữa hai cách xuất phải có dâu (,)

ví dụ write (‘bán kính đường tròn là :’,R);

định dạng lúc xuất

các định dạng như sau :

biến thực : m:n

m : là tổng số ô trông tối thiểu để in giá trị biến thực khi m =0 thì số ô trống là tuỳ ý

n : là số số lẻ mà biến thực cần có ( ở phẩn thập phân )

ví dụ write (a*b*c /4/s:0:2)

ví dụ a:=1.692845

5.Lệnh nhập :

Lệnh này cho phép chương trình nhận sô liệu và ghi vào biến tương ứng được đưa ra

-Nhập có tham số :

Cú pháp : readln (biến )

Nhập nhiều biến :

Readln (biến 1 ,biến 2 ,….biến n);

Ví dụ a,b :real

C1 : readln(a);

readln (b);

C2 : readln(a,b);

-Nhập không có có tham số :

Cú pháp : readln

6)Các phép tính số học cơ bản + - * /

Trang 9

a)Phép toán kiểu số :bao gồm các phép toán +,-,*

đối với phép toán chia phân thành hai loại

-Nguyên : mod ,div

-Thực

mod là phép toán lấy phần dư nguyên của phép chia

div :là phép toán lấy phần thương nguyên của phép chia

ví dụ : 9 mod 5=4

9 div 5 =1

7.Phát biểu gán

Dùng theo cấu trúc sau :

biến :=giá trị cần gán ;

ví dụ : a byte gán a:=5;

muốn gán a:=266;không được vì a chỉ nhận giá trị đến 255

chú ý : kiểu số không được gán cho các kiểu khác và ngược lại

VÍ DỤ A:=’PASCAL’ không được

S:=a không được vì s là string

8.Chú thích trong chương trình :

có thể đặt trong cặp dấu { nội dung ghi chú }

hoặc (* nội dung ghi chú *)

II Bài toán 2 :

-cho biết hai cạnh của hình chữ nhật hãy tính diện tich và chu vi hình chữ nhật đó-giáo viên hướng dẫn và gọi một học sinh lên bảng để viết ,sau đó phân tích và sữa lại cho hòan chỉnh

write('Nhap chieu dai hinh chu nhat ');readln(dai);

write('Nhap chieu rong hinh chu nhat ');readln(rong);

s:=dai*rong;

cv:=(dai+rong)*2;

writeln('Dien tich hinh chu nhat la ',s);

writeln('Chu vi hinh chu nhat la ',cv);

readln;

end.

-Nếu còn thời gian thì làm thêm một số bài toán đơn giản khác

ví dụ : nhập cạnh đáy và đường cao tính diện tích tam giác

Trang 10

clrscr;

write('Nhap canh day tam giac ');readln(day);

write('Nhap chieu cao tam giac ');readln(cao);

Trang 11

Bài 3 :Bài tập –Kiểm tra 15 phút (t5-6)

Một số hàm và thủ tục để trình bày

Uses crt;

Clrscr;(xoá màn hình )

Gotoxy (x,y) : chuyển cusor về cột x dòng y

Màn hình gồm 80 cột và 26 dòng

Gotoxy(70,22) chuyển cusor về cột 70,dòng 22

Xuất ra hoá đơn tiền diện được biểu diễn như sau :

CTY ĐIỆN LỰC CỘNG HOÀ XÃ HỘI CHỦ NGHĨA VIỆT NAM

BRVT Độc lập –tự do –hạnh phúc

HOÁ ĐƠN TIỀN ĐIỆN

Họ và tên chủ hộ :

gotoxy(35,5);write('HOA DON TIEN DIEN');

gotoxy(1,7);write('HO TEN CHU HO : ');REDLN(HT);

gotoxy(1,8);write('DIA CHI : ');READLN(DC);

gotoxy(1,11);write('SO KW TIEU THU: ',STT:10:2,' KW');

gotoxy(1,12);write(STT,' KW GIA 550 DONG' );

gotoxy(1,13);write('SO TIEN PHAI TRA: ',STT*550:0:2,' dong'); END

Trang 12

IF(STT<=250) THEN

BEGIN

gotoxy(1,11);write('SO KW TIEU THU: ',STT:10:2,' KW');

gotoxy(1,12);write(150,' KW GIA 550 DONG' );

gotoxy(1,13);write(STT-150,' KW GIA 850 DONG' );

gotoxy(1,14);write('SO TIEN PHAI TRA: ',150*550+(STT-150)*850:0:2,' dong'); END

ELSE

BEGIN

gotoxy(1,11);write('SO KW TIEU THU: ',STT:10:2,' KW');

gotoxy(1,12);write(150,' KW GIA 550 DONG' );

gotoxy(1,13);write(100,' KW GIA 850 DONG' );

gotoxy(1,14);write(STT-250:0:0,' KW GIA 1100 DONG' );

gotoxy(1,15);write('SO TIEN PHAI TRA:

-Giải 1 số bài tập về tính toán đơn giản

bài 1 : Nhập cạnh tính chu vi diện tích hình vuông

writeln('Dien tich hinh vuong la ',s);

writeln('Chu vi hinh vuong la ',cv);

Trang 13

write('Nhap so thu hai ');readln(b); (* b phai khac 0 *) writeln('Tich 2 so la ',a*b);

writeln('Dien tich hinh Tron la ',s:6:2);

writeln('Chu vi hinh tron la ',cv:6:2);

Trang 14

Bài 4 : Điều khiển rẽ nhánh chương trình IF (T7-8)

1 Bài toán 1 :

-Viết chương trình giải phương trinh bậc nhất ax+b=0

-Giải phương trình bằng ngôn ngữ tự nhiên

+ Nếu a<>0 : phương trình có nghiệm x=-b/a ;

+ Nếu a=0 và b=0 : phương trình có vô số nghiệm (vô định )

+ Nếu a=0 và b<>0 : phương trình có vô nghiệm

if a<>0 then write(‘Phuong trinh co nghiem x=’,-b/a:5:2);

if (a=0) and (b=0) then write(‘Phuong trinh co vo so nghiem ’);

if (a=0) and (b<>0) then write(‘Phuong trinh co vo nghiem ’);

readln;

end

1- Cấu trúc phát biểu IF

Dạng 1 :

Cú pháp IF <khối điều kiện > then < khối lệnh S1>

Else <khối lệnh S2>;

Ý nghĩa : nếu khối điều kiện là đúng thì thực hiện khối lệnh S1 Sai thì thực hiện khối lệnh S2;

Lưu đồ

Trang 15

Dạng 2 :

Cú pháp IF <khối điều kiện > then < khối lệnh S>;

Ý nghĩa : nếu khối điều kiện là đúng thì thực hiện khối lệnh S

Sự khác nhau ở hai dạng

Dạng 1 : lúc nào cũng thực hiện lệnh dù điều kiện đúng hay sai

Khi diều kiện đúng thì thực hiện khối lệnh 1

Khi diều kiện sai thì thực hiện khối lệnh 2

Dạng 2 : chỉ thực hiện lệnh khi kiểm tra điều kiện là đúng

II Bài toán 2 :

-Viết chương trình tương tự :

ví dụ : viết chương trình tính tiền của một mặt hàng biết sô lượng và đơn giá biết rằng mua một hàng với số lượng >20 thì giảm 5% tổng giá trị

+nếu mua hàng số lượng <=20 ví dụ số luợng =19 thì tổng tiền là 19x 2000đ

+nếu mua hàng số lượng > 20 ví dụ số luợng =21 thì tổng tiền là 21x2000đx 95%

Trang 16

2.Kiểu Interger : kiểu nguyên

Integer có kích thước 2 byte phạm vi lưu trữ từ -32768=>32767

Phép toán :bao gồm các phép toán +,-,*

đối với phép toán chia phân thành hai loại

-Nguyên : mod ,div

-Thực

mod là phép toán lấy phần dư nguyên của phép chia

div :là phép toán lấy phần thương nguyên của phép chia

ví dụ : 9 mod 5=4

9 div 5 =1

1) Aùp dụng các phép toán MOD, DIV

Tính thời gian của việc nào đó là X giây hãy chuyển đổi và viết ra trên màn hình số thời gian trên dưới dạng bao nhiêu giờ ,bao nhiêu phút,bao nhiêu giây

Trang 17

write(‘Nhap vao so a : ‘);readln(a);

if a mod 2=0 then write(‘Day la so chan ‘)

else

write(‘day la so le ‘);

readln;

end

3.Kiểu real và các phép tính

kiểu real là kiểu số thực chứa phần thập phân,Tất cả phép toán liên quan đến số có phần thập phân phải sử dụng kiểu này

write(‘Nhap so do 3 canh a,b,c ‘);readln(a,b,c);

if (a+b>c) and (b+c>a) and (c+a>b) then

begin

p:=(a+b+c)/2;s:= sqrt(p*(p-a)*(p-b)*(p-c);

writeln(‘Day la so do 3 canh cua tam giac ‘);

writeln(‘Dien tich cua tam giac la ‘,s:6:2);

Trang 18

Bài 5 : Điều kiện rẽ nhánh chương trình –Case (t9-10)

-Nhập vào 1 số a (0<=a<=9) viết số vừanhập bằng chữ ra màn hình

nếu viết bằng cấu trúc if

if so=1 then write(‘Mot ‘);

if so=2 then write(‘Hai ‘);

if so=3 then write(‘Ba ‘);

if so=4 then write(‘Bon ‘);

if so=5 then write(‘Nam ‘);

if so=6 then write(‘Sau ‘);

if so=7 then write(‘Bay ‘);

if so=8 then write(‘Tam ‘);

if so=9 then write(‘Chin ‘);

Gía trị 1: khối lệnh S1;

Gía trị 2: khối lệnh S2;

Gía trị n: khối lệnh Sn;

Else khối lệnh A;

End;

Yù nghĩa:

nếu biến bằng giá trị 1 thì thực hiện khối lệnh S1;

nếu biến bằng giá trị 2 thì thực hiện khối lệnh S2;

nếu biến bằng giá trị n thì thực hiện khối lệnh Sn;

nếu biến <> giá trị 1,2,3, n thì thực hiện khối lệnh A;

cuối phaỉ có End;

chú ý biến chỉ có thể là nguyên hay kí tự

Giải lại bài tóan trên với cấu trúc case …of

program xuatchu;

uses crt;

var so:byte;

begin

Trang 19

Nếu có 1 con thì tiền thương bằng 2 lần tiền lương

Nếu có 2 con thì tiền thưởng bằng 2,5 lần tiền lương

Nếu có 3 con thì tiền thưởng bằng 0,5 lần tiền lương

Nếu có 4 con thì tiền thưởng bằng 0 lần tiền lương

Trang 21

Bài 6 : bài tập (t11-t12 )

Giải môt số bài tập có áp dụng if ,Case

Bt1 : Nhập vào điểm cuối khóa xuất ra thông báo xếp loại

Var diem :byte;

True : writeln(a,’ nho hon ‘,b);

false : writeln(a,’ Lon hon hay bang ‘,b);

end

Readln;

End

Trang 22

2 Viết chương trình tính diện tích các hình , cho hiển thị lên màn hình menu chọn

Nếu nhâp vào 1,2,3 thì yêu cầu nhập vào tương ứng kích thước rồi in ra diện tích

Bài 7 : bài tập (t13-t14 )

Phần lý thuyết :

Bài 1 :

Câu a) Số lớn nhất và nhỏ nhất của byte ?integer ?

Trả lời :

-số lớn nhất của byte là 255 nhỏ nhất là 0

-số lớn nhất của integer là +32767 nhỏ nhất là -32768

Câu b)Có bao nhiêu kết quả của phép chia ? Sự khác nhau ?

Trả lời :

-chia lấy kết quả số thực /

-chia lấy phần nguyên DIV

-chia lấy phần dư MOD

Câu c) Vẽ lưu đồ của câu trúc if …then …else

Trang 24

Bài 8 Oân tập học kỳ 1 (t17-18)

-Oân tâp nội dung từ đầu năm

thực hành :

Làm 1 số bài tập kết hợp rẽ nhánh

Bài 1 Viết một chương trình thực hiện công việc sau :

- Nhập vào điểm của một người (biến kiểu integer) từ bàn phím

Viết ra màn hình thông báo cho các trường hợp :

- Nếu điểm nhỏ hơn 5 thì “Dưới trung bình”

- Nếu điểm lớn hơn hoặc bằng 5 và nhỏ hơn 7 thì “trung binh”

- Nếu điểm lớn hơn hoặc bằng 7 thì “Khá”

Thực hiện với trường hợp phân tích chi tiết hơn : Kém , Yếu Trung bình , Khá , Giỏi

Bài 2

Cho biết số lờn nhất trong hai số bất kỳ a , b

Cho biết số lớn nhất trong ba số bất kỳ a , b

Bài 9 Thi học kỳ (t17-18)

Lý thuyết 1 :

1)Nhập vào 2 số xuất ra số lớn nhất

a)vẽ lưu đồ

b)Viết chương trình đầy đủ

thực hành

Lý thuyết 2 :

1)Nhập vào 2 số xuất ra số bé nhất

a)vẽ lưu đồ

b)Viết chương trình đầy đủ

2) Đề số 2:

Viết chương trình nhập vào 4 số xuất ra

+Trung bình cộng của 4 số

+Số bé nhất trong 4 số

Ngày đăng: 27/10/2016, 10:59

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w