1. Trang chủ
  2. » Luận Văn - Báo Cáo

Sử dụng ngôn ngữ lập trình c# xấp xỉ hàm số bằng đa thức nội suy

32 2,4K 7

Đ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

Tiêu đề Sử dụng ngôn ngữ lập trình C# xấp xỉ hàm số bằng đa thức nội suy
Tác giả Phạm Thị Thanh Mai
Người hướng dẫn PGS.TS. Trần Xuân Sinh
Trường học Trường Đại Học Vinh
Chuyên ngành Cử nhân Khoa Học Toán-Tin
Thể loại Khóa luận tốt nghiệp
Năm xuất bản 2010
Thành phố Vinh
Định dạng
Số trang 32
Dung lượng 2,17 MB

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

Nội dung

Mục tiêu của phép nội suy khá nhiều, nhng chủ yếu tìm thuật toán đơn giản tính giá trị f x cho những x không nằm trong bảng x , i y i, i 0 ,n và một chơng Luận văn đợc chia làm 2 chơng:

Trang 1

Khoa Toán

Sử dụng ngôn ngữ lập trình C#

NỘI SUY

Khoá luận tốt nghiệp đại học Ngành cử nhân khoa học toán-Tin

Chuyên ngành:

Xác suất Thống kê và Toán ứng dụng

Cán bộ hớng dẫn: PGS.TS Trần Xuân Sinh Sinh viên thực hiện: Phạm Thị Thanh Mai

Lớp: 47Toán-Tin ứng dụng

Vinh, 5/2010

MỤC LỤC trang MỞ ĐẦU 3

Chơng 1 4

CáC KIếN THứC CƠ Sở 4

1.1 ĐA THỨC NỘI SUY 4

1.1.1 Đa thức nội suy bằng đại số 4

1.1.2 Đa thức nội suy Lagange 5

1.1.3 Sai số của phép nội suy 7

1.1.3.1 Sai số phơng pháp 7

1.1.3.2 Sai số tính toán 10

Trang 2

1.1.4 Đa thức nội suy Newton 10

1.1.4.1 Tỷ hiệu 11

1.1.4.2 Đa thức nội suy Newton 11

1.1.5 Đa thức với mốc nội suy cách đều 12

1.1.5.1 Đa thức Chebysev 12

1.1.5.2 Chọn mốc nội suy 13

1.1.5.3 Sai phân và các tính chất 14

1.1.5.4 Một số quy tắc nội suy hàm số trên lới đều 14

1.1.5.5 Bảng sai phân 15

1.1.5.6 Nội suy ở đầu bảng 16

1.1.5.7 Nội suy ở cuối bảng 17

Chơng 2 18

THIếT LậP CHƯƠNG TRìNH BằNG NGÔN NGữ LậP TRìNH c# 18

2.1 Giới thiệu về C# 18

2.1.1 C# là gì? 18

2.1.2.Lịch sử ra đời của C# 19

2.1.3 Chức năng của C# 19

2.2 Cấu trúc và giao diện của chơng trình 20

KẾT LUẬN 31

tAi liÊu tham khảo.………32

Mở ĐẦU

“Xấp xỉ hàm số bằng đa thức nội suy” là một đề tài khá thú vị Trong thực tế,

nhiều khi ta phải tìm hàm y  f (x), chỉ biết các giá trị của y i tại các điểm

a b

mà độ chính xác không kém bao nhiêu

Mục tiêu của phép nội suy khá nhiều, nhng chủ yếu tìm thuật toán đơn giản tính giá trị f (x) cho những x không nằm trong bảng x , i y i, (i 0 ,n) và một chơng

Luận văn đợc chia làm 2 chơng:

Chơng 1: Trình bày một số định nghĩa và tính chất về đa thức nội suy, đa

thức nội suy Lagrange, đa thức nội suy Newton, các kiến thức cơ sở để thiết lập

chơng trình tính giá trị hàm y tại các mốc nội suy đã cho nhờ đa thức nội suy.

Trang 3

Chơng 2: Đa ra các cấu trúc thuật toán, cấu trúc của chơng trình và thiết kế

giao diện bằng ngôn ngữ lập trình C#

Do khóa luận đợc tiến hành tìm hiểu và hoàn thành trong một thời gian ngắn

Đồng thời với dung lợng của khóa luận và khả năng có hạn của mình tôi cha thểkhai triển và khai thác hết mọi vấn đề một cách sâu sắc Vì vậy, khóa luận của tôikhông thể tránh khỏi những thiếu sót

Qua khoá luận này, tôi xin bày tỏ lòng biết ơn sâu sắc đến PGS.TS TrầnXuân Sinh, ngời đã dành thời gian, tận tình hớng dẫn tôi trong suốt quá trình tôilàm khóa luận Tôi cũng xin gửi lời chân thành cảm ơn đến gia đình, bạn bè đã

động viên, giúp đỡ nhiệt tình, tạo điều kiện tốt nhất cho tôi trong quá trình họctập, nghiên cứu và hoàn thành luận văn này

Vinh, tháng 5 năm 2010

Tác giả

Chơng 1

CáC KIếN THứC CƠ Sở

1.1 ĐA THỨC NỘI SUY

1.1.1 Đa thức nội suy bằng đại số

Ngoài ý nghĩa lịch sử ra, đa thức đại số thờng đợc dùng trong phép nội suyvì lý do đơn giản sau: các phép cộng, trừ, nhân, đạo hàm, tích phân dễ dàng thực

i i

m x a x P

0

)

) ( : ) ( i i i

Trang 4

i m

j

j i

0

2 0 0

n n n

n

n n

x x x

x x

x x

x

x x

x

Suy ra ph¬ng tr×nh (1.1) cã nghiÖm duy nhÊt

1.1.2 §a thøc néi suy Lagange

Sau ®©y ta sÏ tr×nh bµy c¸ch x©y dùng ®a thøc néi suy mµ kh«ng cÇn gi¶i hÖ (1.1)

)(

) (

(

) ) (

)(

) (

( ) ( 1

1 1

0

1 1

0

n i i i i i i

n i

i

x x x

x x x x x

x x x

x x x x x x

)(

) (

(

) ) (

)(

) (

(

1 1

0

1 1

0

n i i

i i i i

n i

i

x x x

x x x x x

x x x

x x x x x

Trang 5

Nếu các mốc nội suy cách đều, tức là x ijx jh, (i 0 ,n 1 ), thì đặt 0 ,

h

x x

t 

hay xx0th ta đợc

P i (x) = P i (x0+ht) =

) (

) ) (

1 ( )

1 (

i t n

n t t

t

C i n i n

i

i n

n

y i t

C n

n t t

t th x P

0

1 0

) 1 (

!

) ) (

1 ( )

Trong công thức (2.1), các hệ số (  1 )ni C n i không phụ thuôc vào hàm số f (x),

Trang 6

Sơ đồ khối tính giá trị hàm f (x) theo phơng pháp nội suy lagrange rất đơn giản

Trang 7

VÝ dô 1: T×m ®a thøc néi suy bËc 2 cña hµmy 3x trªn ®o¹n [ 1 , 1 ] t¹i c¸c mèc néi suy x0   1 ,x1  0 ,x2  1 ,ta cã y0  1 / 3 ,y1  1 ,y2  3 ;

) 6 8 4 ( 6

1 1 ) 1 1 (

) 1 ( 3 ) 1 0 )(

1 0 (

) 1 )(

1 ( 1 ) 1 1 )(

0 1 (

) 1 )(

0 ( 3

1 )

2 1 3

Trang 8

Ví dụ 2: Tìm đa thức nội suy bậc 4 trùng với hàm y =2cos

640 196

9

) 3

4 2 ( 2 ) 3

4 2 )(

2 2 (

) 3

4 ( ) 3

4 )(

2 ( 0 ) 2 3

4 ( 3

4 ) 3

4 3

4 )(

2 3

4 (

) 2 ( ) 3

4 )(

2 ( 1 ) 2 0 )(

3

4 0 )(

3

4 0

3

4 )(

3

4 )(

4 )(

3

4 3

4 )(

3

4 )(

2 3

4 (

) 2 )(

3

4 ( ) 2 ( 1 ) 2 2 )(

3

4 2 )(

2 )(

3

4 ( )

x x x x

x x

x

x

x x

x x x

x x x

x = 1 thì y(1) = f(1)  P(1) 1 4156

Sai số f( 1 )  P( 1 )  0 0015

Công thức nội suy Lagrange trình bày ở trên có u điểm là đơn giản nhng nếuthêm mốc nội suy phải tính lại toàn bộ Nhợc điểm này đợc khắc phục trong côngthức nội suy Newton …

1.1.3 Sai số của phép nội suy

1.1.3.1 Sai số phơng pháp

).

, 0 )(

( ) (x f x i n

Xét hàm hỗ trợ

), ( ) ( : ) (z R z k z

trong đó

.) ( ) (

i

x z z

) (

) ( ) (

x

x p x f k

Mặt khác F(x i)  0 (i 0 ,n) do đóF (z)có n 2 nghiệm phân biệt x,x0,x1, ,x n Theo định lý Role F, (z) có ( n 1 ) nghiệm vv…, F(n 1 )(z) có nghiệm  a, b

Trang 9

, )!

1 ( ) ( )

)(

1 (

f n

 )!

1 (

) ( ) 1 (

So sánh hai cách viết của k ta có:

) ( )!

1 (

) ( )

(

) 1 (

x n

f x R

n

M x

P x

; 180

11

; 5 36

; 3

; sin )

190809

0 11 sin ) ( sup ( 4 )

b x a

Vậy

9

10 106 1 ) 180

11 30

)(

20 30

)(

180

7 30

)(

36 30

(

! 4

190809

0 ) 6 ( 6

), ( )

( )

0 th h t x

Trong đó  (t) t(t 1 ) (tn). nh vậy ta quy về việc nghiên cứu dáng điệu của

Trang 10

2

2 2

) 2 ( ) (

2 2

2 2

n z

2) ( 1 ) ( 1 ) ( 1 ) 1 (t)

n t

t n t n

t t

1 2

1 1

1

; 2

1 ,

n t n

t n t

t n t

thực hiện phép ngoại suy sẽ mắc phải sai số lớn

độ chính xác thấp đối với các đoạn ngoài rìa

1.1.3.2 Sai số tính toán

) ( ) (

) ( )

n

i i x x x

x y

x P

x y

x P

0 ( ) ,( )

) ( )

(

Trang 11

x y

p p

i n

i t

c n

n t t

t p p

0

!

1

1.1.4 §a thøc néi suy Newton

1.1.4.1 Tû hiÖu §Þnh nghÜa tû hiÖu cÊp 1, 2, , n nh sau

i i

x x

y y

, i = 1, 2, , n.

Tû hiÖu cÊp 2

f[x i +1 , x i , x i -1] =

1 1

i i i

i

x x

x x f x x f

Tû hiÖu cÊp n

f[x n , x n -1 , , x0] =

0

0 1

1 ] [ , , ] , ,

[

x x

x x

f x x f

n

n n

+) Tû hiÖu cÊp n cña ®a thøc bËc n lµ h»ng sè.

1.1.4.2 §a thøc néi suy Newton

Ta cã f[x, x0] =

0

0 ) ( ) (

x x

x f x f

, [

x x

x x f x x f

Trang 12

) (

) 1 (

) (

) 1 (

+ Công thức (*) gọi là công thức nội suy Newton tiến Bằng phơng pháp tơng

tự, ta có công thức nội suy lùi nh sau:

1.1.5 Đa thức với mốc nội suy cách đều

b x

x

b x

) (

Trang 13

1 2

) ( )

x x

x T Max x

P

Chứng minh: Giả sử tìm đợc đa thức P(x) x a 1x n 1 a0

n n

Nh vậy G (x) luân phiên đổi dấu qua x i , i = 0, 1, , n, do đó G (x) có ít nhất n

2

) (

n

n x T

Điều này mâu thuẫn với giả thiết

1

1 )

Trang 14

1 2

x T x x x x x

2

) ( )

) (

( )

1 ( ) ( ) (

n

M x

f x

a b

a b x t

1 2 cos )

n

i a

b

Ước lợng tốt nhất của phép nội suy trong trờng hợp này là

1 2

1 2

) ( ) 1 ( )) (

M x

f x

1.1.5.3 Sai phân và các tính chất

1 của f(x) là đại lợng f(x) f(xh)  f(x) Tỷ sai phân cấp 1 của f(x) là

Các tính chất của sai phân:

f gf g g

Trang 15

4) Nếu P (x) là đa thức bậc n thì theo công thức Taylor

) (

! )

( ) (

0

x p i

h x

p h x p

i i

n f x c nh

x

f

0

) ( )

i i n

n f x c f x h

n x f nh

x f

0

) ( )

( ) 1 (

) ) 1 ( ( ) 1 ( )

(

i

i n i

n i

i n i n

i n i n

1 ( ) ( 1 ) ( ( ) ) )

1 ( ) 1 ( ) ( ] 1 ) 1 [(

) ( ( )

Giả sử công thức đúng cho mọi k  n Ta chứng

( )

' ( )

' ( )

' ( )

f( ) ( )  ( )

Trang 16

1.1.5.4 Một số quy tắc nội suy hàm số trên lới đều

i i

i i

i i i

y y

y y

y y

y y

y y y

1 1 1 1

1 2

j n i

j n

j i

n

n j

i j j n i

n

y C y

y c y

0

0

) 1 (

i

y

1.1.5.5 Nội suy ở đầu bảng

nội suy dới dạng

) ) (

(

) )(

( ) ( )

(xa0 a2 xx0 a2 xx0 xx1  a n xx0 xx n1

Trang 17

Cho x  x0, ta đợc a 0 y0 ;

h

y a x

h i

y a

) 1 (

t t

n

n t t

t

0

!

) 1 ) (

1 (

Ta gọi công thức nêu trên là công thứ Newton tiến

1.1.5.6 Nội suy ở cuối bảng

th x x h

x x

h a a x

x y a x

n n

y a

n t t

t y

t t y

t y

th

x

n n

!

1

1

! 2

1

! 1

1 1

0 1

2 1

f(x n +ht)  P(x n +ht) = y n + t1n1 + 2 ! 2 2

) 1 (

n t

t

n

n t t

t

0

!

) 1 ) (

1 (

Chú ý

a) Công thức nội suy Newton tiến (lùi) chỉ là một cách viết khác của côngthức Lagrange

Newton tiến (lùi) thì độ chính xác cao hơn

c) Dùng công thức nội suy Newton tiến (lùi) không phải tính lại từ đầu nếuthêm mốc nội suy mới

Trang 18

Chơng 2 THIếT LậP CHƯƠNG TRìNH BằNG NGÔN NGữ LậP TRìNH c# 2.1 Giới thiệu về C#

2.1.1 C# là gì?

C# là 1 ngôn ngữ lập trình đa năng và khá toàn diện hiện nay C# đợc pháttriển bở Microsoft và cũng chính là 1 phần của NET Phù hợp với nhiều tiêuchuẩn nh ECMA (ECMA-334) và ISO (ISO/IEC 23270) C# là 1 trong 44 ngônngữ đợc hỗ trợ bởi Common Language Runtime của .NET Framework.C# là ngôn ngữ lập trình đơn giản, hiện đại, có tính tổng quát và dễ dàng định h-ớng cho dự án Gói C# gần đây nhất chính là bản 3.0 và bản này chỉ có thể chạyvới >NET Framework 3.5 Phiên bản 4.0 đang đợc hoàn tất

C# có khoảng 80 từ khóa và hơn 10 kiểu dữ liệu dựng sẵn, những C# có tínhdiễn đạt cao C# hỗ trợ lập trình có cấu trúc, hớng đối tợng, hớng thành phần(component oriented)

Trọng tâm của ngôn ngữ hớng đối tợng là lớp Lớp định nghĩa kiểu dữ liệumới, cho phép mở rộng ngôn ngữ theo hớng cần giải quyết C# có những từ khóadánh cho việc khai báo lớp, phơng thức, thuộc tính (property) mới C# hỗ trợ đầy

đủ các khái niệm trụ cột trong lập trình hớng đối tợng: đóng gói, kế thừa, đa hình

Định nghĩa lớp trong C# không đòi hỏi tách rồi các tập tin tiêu đề với tập tincài đặt nh C++ Hơn thế, C# hỗ trợ su liệu mới cho phép su liệu trực tiếp trong tậptin mã nguồn Đến khi tập tin biên dịch sẽ tạo tập tin su liệu theo định dạng XLM.C# hỗ trợ khái niệm giao diện, interface (tơng tự java) Một lớp chỉ có thể kếthừa duy nhất một cha nhng có thể cài đặt nhiều giao diện

C# cung cấp những đặc trng lập trình hớng thành phần property, sự kiện vàdẫn hớng khai báo (đợc gọi là attribute) Lập trình hớng component đợc hỗ trợCLR thông qua siêu dữ liệu (metadata) Siêu dữ liệu mô tả các lớp bao gồm cácphơng thức và thuộc tính, các thông tin bảo mật…

2.1.2 Lịch sử ra đời của C#

Vào năm 1996, Sun Microsystem cho ra đời ngôn ngữ lập trình Java vàMicrosoft đã nhanh chóng mua bản quyền sản phẩm cho hệ điều hành của mình.Java là 1 ngôn ngữ lập trình chạy nền độc lập đem lại sự nổi tiếng cho Sun lúc bấygiờ nhng Microsoft không chịu thua Họ tập hợp đội ngũ nhân lực hoạt động cật

Trang 19

lực để tạo ra chơng trình không cần phải dùng phần mềm của Sun chạy nền Kếtquả là có 1 ngôn ngữ đợc ra đời và có cấu trúc khá giống Java C++ ra đời từ đấy.Trong suốt quãng thời gian phát triển NET, toàn bộ các th viện cũ của ngônngữ và các trình biên soạn đợc gọi là Simple Managed C (SMC) Tháng 1 năm

1999, Ander Hejlsberg đã xây dựng thành công 1 ngôn ngữ mới gọi là "Cool".Tuy nhiên, Microsoft không thích cái tên này cho lắm Cùng thời điểm này, dự

ánh NET đợc phát hành ra thị trờng tại cuộc họp của các chuyên gi lập trình vàotháng 7 năm 2000 và cũng chính từ đây "cool" chính thức chuyển tên thành C#.Các th viện ASP.NET runtime cũng đợc tích hợp vào

* Không thể quản lý bộ nhớ 1 cách thoải mái tuy nhiên, bó sẽ tự thu gomnhững câu lệnh vô nghĩa

*C# bản mật an toàn hơn C++

Trang 20

2.2 Cấu trúc và giao diện của chơng trình

Hình 1 Chơng trình gồm có 4 Form(Giao diện )chính

Form1: Là giao diện chính của chơng trình có giao diện nh hình dới đây:

Trong Form1 gồm menu Các Phép nội suy và Trợ giúp

Trong menu Các Phép nội suy có ba menu con là Newton và Lagrange,Thoát

Mỗi menu con sẽ đa chúng ta tới các form(giao diện) để thực hiện các phép nội suy tơng ứng đó là Nội suy Newton và nội suy Lagrange

Đoạn code để hiện giao diện tính nội suy newton khi nhấp vào menu Newton sẽ là:

private void newTonToolStripMenuItem_Click(object sender, EventArgs e)

{

frmNewton fnt = new frmNewton();//xin một đối tợng mới là frmNewton fnt.Show();//sau đó cho hiện giao diện nay lên bằng phơng thức Show

Trang 21

Đoạn code khi thoát chơng trình khi nhấp chuột vào nút Thoát sẽ là:

private void thoatToolStripMenuItem_Click(object sender, EventArgs e)

{

Application.Exit();//toàn bộ ứng dụng sẽ đợc giải phóng

}

Đoạn code để hiện giao diện giới thiệu về tác giả của chơng trình là

private void tácGiaToolStripMenuItem_Click(object sender, EventArgs e)

{

frmAbout fab = new frmAbout();//xin một đối tợng mới là frmAbout

fab.Show();//cho hiện form này lên bằng phơng thức Show

Form Newton là giao diện để thực hiện các phép nội suy của newton.

Nội dung code ở giao diện tính nội suy newton nh sau:

Với giao diện ban đầu nh hình vẽ khi ta nhập vào số ô dự kiến sẽ nhập giá trị của

x và y tơng ứng là bao nhiêu ví dụ có 5 giá trị x, y tơng ứng nhau thì ta nhập vào

đó là số 5 và nhấp chuột vào Nhập số ô của x ta sẽ có đoạn code nh sau để hiện ra giao diện cho phép ta thực hiện nội suy newton nh ở hình 3 là

private void btnNhapDaySo_Click(object sender, EventArgs e)

{

Trang 22

//nếu ô text đã nhập giá trị tức là khác rỗng thì thực hiện xin

// mới số text tơng ứng x,y để nhập vào

tx[j].Size = new System.Drawing.Size(54, 20);

//thêm ô text vào giao diện tính nội suy bằng phơng thức Add this.Controls.Add(tx[j]);

Trang 23

}

}

Trang 24

Hình 2

Phần tính toán nội suy newton ở Hình 3 ta có đoạn code thể hiện chơng trình nh sau:

Nhập các giá trị x,y vào các ô đã đợc hiển thị ở dới

Nhập giá trị của x cần nội suy từ các giá trị x,y đã nhập sau đó ta nhấp chuột vào nút NộI SUY ta sẽ có kết quả của y

Đoạn code đơc thực hiện khi nhấp chuột vào nút NộI SUY là

private void btnNoiSuy_Click(object sender, EventArgs e)

{

//tính các giá trị delta ban đầu

Trang 25

for (int i = 0; i < Convert.ToInt32(txtsopt.Text); i++)

delta[i, k] = (delta[i, k - 1] - delta[i - 1, k - 1]) /

(Convert.ToSingle(tx[i].Text) - Convert.ToSingle(tx[i - k].Text));

}

}

giatri = delta[0, 0];

float tich = 1;

//áp dụng đúng công thức nội suy newton tại đây

for (int u = 1; u < Convert.ToDouble(txtsopt.Text); u++)

Trang 26

Hình 3 Form Lagrange là giao diện để thực hiện các phép nội suy của lagrange.

Với giao diện tính nội suy lagrange hoàn toàn tơng tự nội suy newton với hình 4

Và đoạn code chính để tính nội suy Lagrange là:

private void btnNoiSuy_Click(object sender, EventArgs e)

{

double giatri=0;

Trang 27

x x x x x

x

L

n k k

k k k k

n k

0

1 1

Trang 29

H×nh 6

Form frmAbout lµ giao diÖn giíi thiÖu t¸c gi¶ viÕt ch¬ng tr×nh.

Trang 30

Hình 7

KẾT LUẬN

Luận văn đã đạt đợc một số kết quả sau:

Trang 31

1 Hệ thống đợc một số kiến thức cơ bản, cần thiết về lý thuyết của đa thứcnội suy Lagrange và đa thức nội suy Newton làm công cụ để giả quyết các bàitoán về tìm giá trị của hàm tại các điểm khi biết các mốc nội suy cho trớc.

2 Giới thiệu tổng quát về ngôn ngữ lập trình visual C#

3 Viết chơng trình chạy thử bằng ngôn ngữ lập trình C#, chơng trình tìm giátrị của hàm cho trớc bàng phơng pháp Lagrange và phơng pháp Newton

Sau khi hoàn thành khóa luận tôi thấy có một số vấn đề đặt ra:

1 Chơng trình ứng dụng cần hoàn thiện hơn, thêm nhiều chức năng thongdụng khác

2 Nghiên cứu ứng dụng C# để giải các bài toán khác

Tài liệu tham khảo

[1] Phạm Kỳ Anh, Giải tích số, NXB Đại học quốc gia Hà Nội, 1996.

[2] Lê Văn Doanh và Trần Khắc Tuấn, 101 thuật toán và chơng trình, NXB

Khoa học và kỹ thuật, Hà Nội,1996

[3] Phan Văn Hạp và Lê Đình Thịnh, Phơng pháp tính và các thuật toán, NXB

Giáo dục, 2000

[4] Nguyến Hữu Khang, Kỹ thuật lập trình ứng dụng C#>net toàn tập, NXB

Lao động - Xã hội, 2002

Ngày đăng: 20/12/2013, 18:44

HÌNH ẢNH LIÊN QUAN

Sơ đồ khối tính giá trị hàm  f ( x )  theo phơng pháp nội suy lagrange rất đơn  giản - Sử dụng ngôn ngữ lập trình c# xấp xỉ hàm số bằng đa thức nội suy
Sơ đồ kh ối tính giá trị hàm f ( x ) theo phơng pháp nội suy lagrange rất đơn giản (Trang 6)

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w