lOMoARcPSD| 58702377
MỤC LỤC
CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI......................................................................5
1.1 GIỚI THIỆU ĐỀ TÀI..............................................................................................5
1.1.1 Mục tiêu đề tài.................................................................................................5
1.1.2 Khái niệm DS LK Kép.....................................................................................6
1.1.3 Đặc điểm, vai trò và cài đặt DS......................................................................8
1.1.4 Phân tích đề tài................................................................................................9
1.2 PHÂN CÔNG CÔNG VIỆC.......................................................................................13
CHƯƠNG 2: THUẬT TN......................................................................................14
2.1 LƯU ĐỒ THUẬT TOÁN...........................................................................................14
2.2 B DỮ LIỆU MÃU..................................................................................................17
CHƯƠNG 3: CÀI ĐẶT................................................................................................27
MODULE 1: KHAI BÁO CÁC THÀNH PHẦN CẦN TRONG CHƯƠNG TRÌNH............27
MODULE 2: THÊM ĐA THỨC THÀNH PHẦN ĐA THỨC VÀO CUỐI........................28
MODULE 3: THUẬT TOÁN SẮP XẾP..........................................................................28
MODULE 4: TỐI ƯU CHƯƠNG TRÌNH........................................................................29
KẾT LUẬN...............................................................................................................31
KẾT QUẢ ĐẠT ĐƯỢC...........................................................................................32
HƯỚNG PHÁT TRIỂN...........................................................................................33
DANH MỤC BẢNG BIỂU VÀ SƠ ĐỒ
Số hiệu
Loại
Tên
Số trang
1.2.1
Bảng
Bảng phân công nhiệm vụ
13, 14
lOMoARcPSD| 58702377
2.1.1
Hình
Lưu đồ thuật toán sắp xếp đa
thức theo chiều tăng dần của
hệ số
15
2.1.2
Hình
Lưu đồ thuật toán sắp xếp đa
thức theo chiều tăng dần của
số mũ
16
2.2.1
Bảng
Input bộ 1
17
2.2.2
Bảng
Input bộ 2
18
2.2.3
Bảng
Input bộ 3
19
2.2.4
Bảng
Input bộ 4
20
2.2.5
Bảng
Input bộ 5
21
2.2.6
Bảng
Input bộ 6
22
2.2.7
Bảng
Input bộ 7
23
2.2.8
Bảng
Input bộ 8
24
2.2.9
Bảng
Input bộ 9
25
2.2.10
Bảng
Input bộ 10
26
lOMoARcPSD| 58702377
CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI
1.1 Giới thiệu đề tài
1.1.1 Mục tiêu đề tài
Viết chương trình cho phép nhập vào 1 đa thức, mỗi phần tử của đa thức bao gồm.
(DS LK Kép)
-hệ số của biến 1
- số mũ của biến 1
-hệ số của biến 2
- số mũ của biến 2
- tên biến 1 - tên biến 2.
Hãy:
19.1 Nhập 1 đa thức cho đến khi nhập dấu “$”.
19.2. Sắp xếp đa thức theo chiều tăng dần của hệ số biến 1.
19.3. Sắp xếp đa thức theo chiều tăng dần của hệ số biến 2.
19.4 Sắp xếp đa thức theo chiều tăng dần của số mũ biến 1.
19.5 Sắp xếp đa thức theo chiều tăng dần của số mũ biến 2.
19.6. Sắp xếp đa thức theo chiều giảm dần của hệ số biến 1 tăng dần của hệ số
biến 2.
1.1.2 Khái niệm DS LK Kép
Về việc sử dụng danh sách liên kết kép sẽ khắc phục điểm yếu của danh sách liên
kết đơn chỉ c liên kết ti node kế tiếp không c liên kết ti node đứng trưc.
Do vây ta luôn p ải duyêt t àn bô danh  ách t node gốc để tìm kiếm d liêu tại
mộ t v tr  ất kì.
Môt node trong danh  ách liên kết kép đưc cấu thành t ba thành phần d
liêụ và phần kết nối ti node kế tiếp và node trưc n.
lOMoARcPSD| 58702377
Prev: Là con tr ti node trưc.
Next: Là con tr ti node kế tiếp.
Xây dng danh sách liên kết kép bi liên kết các node vi nhau.
Viêc chn d liệ u trong danh ách liên kết kép
Giả sử trưc khi chn d liêu ta c mộ t node riêng biệ t à môt danh ách liên
kết kép.
Trưng hp ta muốn chn vào v tr gia danh sách liên kết trên sẽ đưc tả
như sau:
lOMoARcPSD| 58702377
So sánh vi danh sách liên kết đơn:
- Về ưu điểm: Ta c thể duyêt danh  ách theo cả hai chiều bi vì danh sách liên
kết kép c con tr prev để truy câp node trưc  à con tr next để truy câp
node  sau. Nên khi muốn tìm kiếm d liêu trong danh  ách ta không nhất thiết
phải duyêt t đ
ầu danh sách như vi danh sách liên kết đơn.
- Về nhưc điểm: Vì con tr prev đưc thêm vào mỗi node, như vây ẽ tốn thêm
không gian bô nh và c
ách thức hoạt đông c
ủa danh sách liên kết kép cũng
vì vâ mà phức tạp hơn.
1.1.3 Đặc điểm, vai trò và cài đặt DS
Các thành phần ca danh sách liên kết kép bao gồm:
+ Các node: Mỗi node bao gồm phần d liêu, mộ t con tr prev đ
tr đến
node ngay trưc n và môt con tr next đ
ể tr ti node ngay tiếp sau n.
+ Con tr head để tr ti v tr đầu tiên của danh sách liên kết.
lOMoARcPSD| 58702377
Các thao tác chnh vi danh sách liên kết kép:
+ Tạo môt node mi à trả về con tr ti node đ
+ Chn môt node ào cuối danh sách
+ Hiển th tất cả các node trong danh sách.
lOMoARcPSD| 58702377
1.1.4 Phân tích đề tài
Tổng quan về cấu trúc d liệu giải thuật thì đây môn hc nền tảng để xây
dng duy cho các môn lập trình đồng thi xác đnh và đnh hưng cho hc viên.
Ni về đề tài, đề tài của nhm 19 chúng em c tên gi chung là : Sắp xếp đa thức
theo chiều tăng dần. Đây một đề tài kh vi nhm em, n yêu cầu duy về
nhng con số nhiều hơn làm việc bằng câu ch như đa số các đề tài khác của
các bạn trong lp. Trưc hết ta phải phân tch đề bài để tìm ra hưng đi và đưa ra
cách giải quyết vấn đề.
- Phân tch đề bài:
Sau khi đc xong nửa đầu của đề bài thì câu hi ln nhất hiện ra trong đầu phải là
câu hi: ĐA THỨC LÀ ? Đa thức chuỗi các k t toán hc bao gồm các
phần tử của đa thức và các phần tđ đưc nối vi nhau bi dấu cộng. phần
tử của đa thức lại bao gồm hệ số, tên của biến và số mũ.
Vậy sau khi tìm đưc câu trả li cho câu hi của nửa đầu thì công thức hay khuôn
mẫu để tạo thành 1 đa thức sẽ đưc gi gn lại theo dạng:
(Hệ số) Tên biến số mũ + …+(Hệ số’) Tên biến số mũ’
Đã xong câu hi cho nửa đầu thì ta đi đến yêu cầu, phần yêu cầu đầu tiên cho đề
tài là: Nhập vào một đa thức cho đến khi nhập dấu “$” . Vậy thì quá trình nhập
xuất đa thức sẽ kết thúc khi ta nhập hệ số = $ hoặc số = $. Qua đ ta c ththấy
rõ hai trưng hp c thể xảy ra:
TH1: Hệ số = $
Quá trình nhập xuất kết thúc
lOMoARcPSD| 58702377
Trong trưng hp này thì không c đáng chú ý khi muốn kết thúc quá trình
nhập xuất ngay sau khi hoàn thành xong thành phần đa thức cuối cùng trưc đ.
TH2: Hệ số là một số bất kì và số mũ = $
Vậy thì phần tử đa thức sẽ c dạng: (hệ số) X
$
VD: Hệ số = 5
Số mũ = $
In ra màn hình: 5 , việc không nhập số mũ hoặc kết thúc nhập hàm tại v tr nhập
số mũ sẽ biến phần tử của đa thức đ thành hệ số t do tức là sẽ không phụ thuộc
vào x cũng như việc nhập một hệ số bất kì và nhập số mũ = 0.
Yêu cầu tiếp theo trong đề tài và cũng chnh là yêu cầu quan trong nhất đ là: sắp
xếp đa thức theo chiều tăng dần của hệ số và số mũ. Dng lại  đây và đặt ra một
câu hi mi vậy thì hai yêu cầu trên khác nhau  điểm nào? C thể thấy rõ nhất là
một yêu cầu làm việc vi hệ số một yêu cầu còn lại làm việc vi smũ. Phân
tch qua một chút về hai thành phần này, như đã trình bày  trên, đa thức thì phải
c tên biến, hệ số và s mũ nhưng n phải đưc sắp xếp theo trình t. Lấy tên biến
x làm trung tâm để dễ dàng hình dung vấn đề, nhng thành phần nào đứng trưc x
sẽ đưc gi là hệ số, nhưng sẽ c vài trưng hp ngoại lệ c thể kể đến như việc ta
nhập t bàn phm vi hệ số = 0 và ta biết rằng số 0 nhân vi số nào cũng bằng 0 vì
vậy trong trưng hp này thành phần của đa thức sẽ là hệ số t do và đồng thi rơi
vào trưng hp đặc biệt đ là = 0.
Trưng hp tiếp theo về hệ số cũng đặc biệt không kém đ khi ta nhập t bàn
phm vi hsố bằng 1, trong trưng hp này việc in ra màn hình vi dạng 1x thì
sẽ không đưc tối ưu cho lắm vì trên thc tế chẳng ai viết như thế cả và trong việc
viết phần mềm rồi in ra n hình về lâu dài cũng khiến cho n b tốn nhiều hơn
lOMoARcPSD| 58702377
dung lưng d tnh, vậy trong trưng hp này ta sẽ tối ưu ha đoạn chương trình
bằng cách: nếu ta nhập t bàn phm vi hệ s= 0 thì ta sẽ không in thành phần này
ra màn hình.
cũng gần tương t vi trưng hp hệ số = 1 ta sẽ chỉ in ra tên biến số
của n thay vì viết cả phần hệ số là = 1 ra màn hình. Về các trưng hp còn lại là
hệ số != 0 và 1 thì in ra màn hình như bình thưng vì n đã tối ưu rồi.
Đến đây chúng em nhận ra một vấn đề na ảnh hưng gián tiếp ti hệ số đ là số
mũ, nếu trong trưng hp số bằng nhau gia không chỉ 1 mà rất nhiều nhng
phần tử trong đa thức thì sao? Lấy v dụ khi ta nhập vào đa thức c hai phần tử c
số bằng nhau như sau: 3x
5
+ 4x
5
thì xét về mặt toán hc ta c thrút gn đa
thức này bằng cách cộng hai phần hệ số vi nhau và gi nguyên phần số mũ = 7x
5
.
Vậy thì một lần na ta phải tối ưu lại câu lệnh, nếu như số mũ của phần tử bằng
vi số mũ của phần tử mi thì ta cho phép hai phần tử này rút gn bằng cách tnh
tổng hai thành phần hệ số của chúng đồng thi gi nguyên thành phần số của
chúng.
Tiếp theo khi làm việc vi số tcũng c nhng trưng hp đặc biệt xảy ra
tương t vi hệ số, nếu ta nhập t bàn phm số mũ = 0 thì xét về mặt toán hc bất
số nào 0 đều bằng 1 cho nên lúc này thành phần đa thức sẽ b rút gn chỉ còn
phần hsố do tên biến đã b triệt tiêu bi việc số mũ = 0. Nếu nhập t bàn phm số
mũ bằng 1 thì lại xảy ra trưng hp dư tha d liệu do nếu xét về mặt toán hc thì
x
1
= x. Vì vậy nếu trong trưng hp số mũ nhập vào tbàn phm bằng 1 thì ta c
thể tối ưu câu lệnh bằng cách không in ra số mũ của phần tử đ mà chỉ in ra hệ số
và tên của biến đ mà thôi.
Phần cuối cùng đ sắp xếp, tvề bản chất việc sắp xếp hsố số n
nhau. Để sắp xếp đa thức theo chiều tăng dần của hệ số ta đi tphần tử đầu tiên
của đa thức và kết thúc khi đi đến phần tcuối cùng ca đa thức đ. Nếu hệ số của
lOMoARcPSD| 58702377
phần tử đã duyệt ln hơn so vi hệ số của phần tử muốn duyệt tiếp theo thì ta đổi
chỗ hai phần tử đ vi nhau. Khi đi hết quá trình đ ta sẽ đưc dãy sắp xếp đa thức
theo chiều tăng dần của hệ số cũng như là số mũ.
1.2 Phân công công việc
ST
T
Tên đầu việc
Công việc
chia đến nh nhất
Đánh giá
1
Thiết kế chương
trình và thuật
toán bằng ngôn
ng C++
Phân tch đề bài.
Tìm ra giải pháp cho
yêu cầu của đề bài.
Quá trình
phân tch ổn
để triển khai
nhiều vấn đề.
Thiết kế bộ d liệu
mẫu.
Bộ d liệu
tạo ra đa
dạng vi
nhiều trưng
hp đặc biệt.
2
Cài đặt Code
Khai báo các phần tử
tham gia vào chương
trình.
Thiết kế hàm thêm đa
thức.
Tch cc
tham gia làm
bài.
Hàm dễ hiểu,
dễ vận dụng.
lOMoARcPSD| 58702377
Thiết kế hàm main.
Thiết kế hàm thêm
vào cuối dãy.
Tch cc
tham gia làm
bài.
Hàm dễ hiểu,
dễ vận dụng.
2
Cài đặt Code
Vẽ lưu đồ thuật toán.
Thiết kế hàm sắp xếp.
Bổ sung và tối ưu
thuật toán .
Tch cc
tham gia làm
bài.
Hàm dễ hiểu,
dễ vận dụng.
3
Word và PowerPoint
Tch cc
tham gia làm
bài và đng
gp ý kiến.
Bảng 1.2.1 - Bảng phân công nhiệm vụ
CHƯƠNG 2: THUẬT TOÁN
2.1 Lưu đồ thuật toán
Quy trình thc hiện quá trình thiết kế lưu đồ như sau
B1: Quyết đnh xem bạn cần vẽ lưu đồ cho quy trình nào
lOMoARcPSD| 58702377
Tất nhiên, việc xây dng lưu đồ trưc tên cần phải c ý tưng. Ý tưng đ để
quy trình hoá theo lưu đồ vi mục đch gì. Mục đch đây sắp xếp các thành
phần của phần tử trong đa thức cụ thể là hệ số và số mũ
B2: Thu thập thông tin
Tr khi ngđến việc gì thì thông tin cũng là điều quan trng nhất bạn cần phải
tìm hiểu. Thông tin bạn cần cho lưu đồ lại càng cần phải chnh xác và c liên quan
ti phần lưu đồ bạn chuẩn b thc hiện.
Ngay cả khi quy trình c vẻ đơn giản hoặc thi gian diễn ra ngắn thì thông tin thu
thập đều quan trng cả và phải đều chnh xác. Sau bưc này tsẽ c hai khả năng
đ là quy trình vẫn đưc gi nguyên như cũ hoặc quay tr lại bưc trưc đvà lặp
lại quy trình hoặc rẽ sang quy trình hoàn toàn khác.
B3: Bắt tay vào thc hiện vẽ lưu đ
Khi bạn đã c trong tay đủ các thông tin thì hoạt động vẽ đưc tiến hành ngay. Các
bạn c thể dùng cách đơn giản nhất là dùng bút giấy, hoặc cao cấp hơn đ là các
phần mềm, công cụ để hỗ tr bạn lên lưu đồ rất đơn giản. Hoặc  mức độ thấp thì
bạn c thể dùng Microsoft PowerPoint, Paint hoặc các phần mềm soạn thảo khác
để thc hiện thao tác cuối cùng này.
lOMoARcPSD| 58702377
Hình 2.1.1 – Lưu đồ thuật toán sắp xếp đa thức theo chiều tăng dần của hệ số
lOMoARcPSD| 58702377
Hình 2.1.2 – Lưu đồ thuật toán sắp xếp đa thức theo chiều tăng dần của số mũ
2.2 Bộ dữ liệu mãu
Bộ 1:
Phần tử
0
1
2
3
4
Hệ số
3
9
1
3
9
lOMoARcPSD| 58702377
Số mũ
4
7
2
1
0
Bảng 2.2.1 – Input bộ 1
Kết quả:
Bộ 2:
Phần tử
0
1
2
3
4
Hệ số
7
5
1
5
5
Số mũ
3
5
9
11
5
lOMoARcPSD| 58702377
Bảng 2.2.2 – Input bộ 2
Kết quả:
Bộ 3:
Phần tử
0
1
2
3
4
Hệ số
12
3
50
4
49
Số mũ
6
19
70
1
11
Bảng 2.2.3 – Input bộ 3
Kết quả:
lOMoARcPSD| 58702377
Bộ 4:
Phần tử
0
1
2
3
4
Hệ số
5
17
12
9
40
Số mũ
3
7
12
7
1
Bảng 2.2.4 – Input bộ 4
Kết quả:
lOMoARcPSD| 58702377
Bộ 5:
Phần tử
0
1
2
3
4
Hệ số
9
19
17
9
3
Số mũ
7
17
3
2
0
Bảng 2.2.5 – Input bộ 5
Kết quả:
lOMoARcPSD| 58702377
Bộ 6:
Phần tử
0
1
2
3
4
Hệ số
17
9
0
3
17
Số mũ
12
11
1
0
5
Bảng 2.2.6 – Input bộ 6
Kết quả:
lOMoARcPSD| 58702377
Bộ 7:
Phần tử
0
1
2
3
4
Hệ số
12
7
37
99
100
Số mũ
11
9
2
7
0
Bảng 2.2.7 – Input bộ 7
Kết quả:

Preview text:

lOMoAR cPSD| 58702377 MỤC LỤC
CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI......................................................................5
1.1 GIỚI THIỆU ĐỀ TÀI..............................................................................................5
1.1.1 Mục tiêu đề tài.................................................................................................5
1.1.2 Khái niệm DS LK Kép.....................................................................................6
1.1.3 Đặc điểm, vai trò và cài đặt DS......................................................................8
1.1.4 Phân tích đề tài................................................................................................9
1.2 PHÂN CÔNG CÔNG VIỆC.......................................................................................13
CHƯƠNG 2: THUẬT TOÁN......................................................................................14
2.1 LƯU ĐỒ THUẬT TOÁN...........................................................................................14
2.2 BỘ DỮ LIỆU MÃU..................................................................................................17
CHƯƠNG 3: CÀI ĐẶT................................................................................................27
MODULE 1: KHAI BÁO CÁC THÀNH PHẦN CẦN CÓ TRONG CHƯƠNG TRÌNH............27
MODULE 2: THÊM ĐA THỨC VÀ THÀNH PHẦN ĐA THỨC VÀO CUỐI........................28
MODULE 3: THUẬT TOÁN SẮP XẾP..........................................................................28
MODULE 4: TỐI ƯU CHƯƠNG TRÌNH........................................................................29
KẾT LUẬN...............................................................................................................31
KẾT QUẢ ĐẠT ĐƯỢC...........................................................................................32
HƯỚNG PHÁT TRIỂN...........................................................................................33
DANH MỤC BẢNG BIỂU VÀ SƠ ĐỒ Số hiệu Loại Tên Số trang 1.2.1 Bảng
Bảng phân công nhiệm vụ 13, 14 lOMoAR cPSD| 58702377 2.1.1 Hình
Lưu đồ thuật toán sắp xếp đa 15
thức theo chiều tăng dần của hệ số 2.1.2 Hình
Lưu đồ thuật toán sắp xếp đa 16
thức theo chiều tăng dần của số mũ 2.2.1 Bảng Input bộ 1 17 2.2.2 Bảng Input bộ 2 18 2.2.3 Bảng Input bộ 3 19 2.2.4 Bảng Input bộ 4 20 2.2.5 Bảng Input bộ 5 21 2.2.6 Bảng Input bộ 6 22 2.2.7 Bảng Input bộ 7 23 2.2.8 Bảng Input bộ 8 24 2.2.9 Bảng Input bộ 9 25 2.2.10 Bảng Input bộ 10 26 lOMoAR cPSD| 58702377
CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI
1.1 Giới thiệu đề tài
1.1.1 Mục tiêu đề tài
Viết chương trình cho phép nhập vào 1 đa thức, mỗi phần tử của đa thức bao gồm. (DS LK Kép) -hệ số của biến 1 - số mũ của biến 1 -hệ số của biến 2 - số mũ của biến 2
- tên biến 1 - tên biến 2. Hãy:
19.1 Nhập 1 đa thức cho đến khi nhập dấu “$”.
19.2. Sắp xếp đa thức theo chiều tăng dần của hệ số biến 1.
19.3. Sắp xếp đa thức theo chiều tăng dần của hệ số biến 2.
19.4 Sắp xếp đa thức theo chiều tăng dần của số mũ biến 1.
19.5 Sắp xếp đa thức theo chiều tăng dần của số mũ biến 2.
19.6. Sắp xếp đa thức theo chiều giảm dần của hệ số biến 1 và tăng dần của hệ số biến 2.
1.1.2 Khái niệm DS LK Kép
Về việc sử dụng danh sách liên kết kép sẽ khắc phục điểm yếu của danh sách liên
kết đơn là chỉ có liên kết tới node kế tiếp mà không có liên kết tới node đứng trước.
Do vây ta luôn pḥ ải duyêt tọ àn bô danh ṣ ách từ node gốc để tìm kiếm dữ liêu tại
mộ t vị trí ḅ ất kì. Môt node trong danh ṣ
ách liên kết kép được cấu thành từ ba thành phần là dữ
liêụ và phần kết nối tới node kế tiếp và node trước nó. lOMoAR cPSD| 58702377
Prev: Là con trỏ tới node trước.
Next: Là con trỏ tới node kế tiếp.
Xây dựng danh sách liên kết kép bởi liên kết các node với nhau.
Viêc chèn dữ liệ u trong danh ṣ ách liên kết kép
Giả sử trước khi chèn dữ liêu ta có mộ t node riêng biệ t ṿ à môt danh ṣ ách liên kết kép.
Trường hợp ta muốn chèn vào vị trí giữa danh sách liên kết ở trên sẽ được mô tả như sau: lOMoAR cPSD| 58702377
So sánh với danh sách liên kết đơn:
- Về ưu điểm: Ta có thể duyêt danh ṣ ách theo cả hai chiều bởi vì danh sách liên
kết kép có con trỏ prev để truy câp node trước ṿ
à con trỏ next để truy câp
node ̣ sau. Nên khi muốn tìm kiếm dữ liêu trong danh ṣ ách ta không nhất thiết phải duyêt từ đ ̣
ầu danh sách như với danh sách liên kết đơn.
- Về nhược điểm: Vì con trỏ prev được thêm vào mỗi node, như vây ṣ ẽ tốn thêm
không gian bô nhớ và c ̣ ách thức hoạt đông c ̣
ủa danh sách liên kết kép cũng
vì vâỵ mà phức tạp hơn.
1.1.3 Đặc điểm, vai trò và cài đặt DS
Các thành phần của danh sách liên kết kép bao gồm:
+ Các node: Mỗi node bao gồm phần dữ liêu, mộ t con trỏ prev đ ̣ ể trỏ đến
node ngay trước nó và môt con trỏ next đ ̣
ể trỏ tới node ngay tiếp sau nó.
+ Con trỏ head để trỏ tới vị trí đầu tiên của danh sách liên kết. lOMoAR cPSD| 58702377
Các thao tác chính với danh sách liên kết kép:
+ Tạo môt node mới ṿ à trả về con trỏ tới node đó
+ Chèn môt node ṿào cuối danh sách
+ Hiển thị tất cả các node trong danh sách. lOMoAR cPSD| 58702377
1.1.4 Phân tích đề tài
Tổng quan về cấu trúc dữ liệu và giải thuật thì đây là môn học nền tảng để xây
dựng tư duy cho các môn lập trình đồng thời xác định và định hướng cho học viên.
Nói về đề tài, đề tài của nhóm 19 chúng em có tên gọi chung là : Sắp xếp đa thức
theo chiều tăng dần. Đây là một đề tài khó với nhóm em, nó yêu cầu tư duy về
những con số nhiều hơn là làm việc bằng câu chữ như đa số các đề tài khác của
các bạn trong lớp. Trước hết ta phải phân tích đề bài để tìm ra hướng đi và đưa ra
cách giải quyết vấn đề. - Phân tích đề bài:
Sau khi đọc xong nửa đầu của đề bài thì câu hỏi lớn nhất hiện ra trong đầu phải là
câu hỏi: “ ĐA THỨC LÀ GÌ ? ” Đa thức là chuỗi các kí tự toán học bao gồm các
phần tử của đa thức và các phần tử đó được nối với nhau bởi dấu cộng. Mà phần
tử của đa thức lại bao gồm hệ số, tên của biến và số mũ.
Vậy sau khi tìm được câu trả lời cho câu hỏi của nửa đầu thì công thức hay khuôn
mẫu để tạo thành 1 đa thức sẽ được gói gọn lại theo dạng:
(Hệ số) Tên biến số mũ + …+(Hệ số’) Tên biến số mũ’
Đã xong câu hỏi cho nửa đầu thì ta đi đến yêu cầu, phần yêu cầu đầu tiên cho đề
tài là: Nhập vào một đa thức cho đến khi nhập dấu “$” . Vậy thì quá trình nhập
xuất đa thức sẽ kết thúc khi ta nhập hệ số = $ hoặc số mũ = $. Qua đó ta có thể thấy
rõ hai trường hợp có thể xảy ra: TH1: Hệ số = $
Quá trình nhập xuất kết thúc lOMoAR cPSD| 58702377
Trong trường hợp này thì không có gì đáng chú ý vì khi muốn kết thúc quá trình
nhập xuất ngay sau khi hoàn thành xong thành phần đa thức cuối cùng trước đó.
TH2: Hệ số là một số bất kì và số mũ = $
Vậy thì phần tử đa thức sẽ có dạng: (hệ số) X $ VD: Hệ số = 5 Số mũ = $
In ra màn hình: 5 , việc không nhập số mũ hoặc kết thúc nhập hàm tại vị trí nhập
số mũ sẽ biến phần tử của đa thức đó thành hệ số tự do tức là sẽ không phụ thuộc
vào x cũng như việc nhập một hệ số bất kì và nhập số mũ = 0.
Yêu cầu tiếp theo trong đề tài và cũng chính là yêu cầu quan trong nhất đó là: sắp
xếp đa thức theo chiều tăng dần của hệ số và số mũ. Dừng lại ở đây và đặt ra một
câu hỏi mới vậy thì hai yêu cầu trên khác nhau ở điểm nào? Có thể thấy rõ nhất là
một yêu cầu làm việc với hệ số và một yêu cầu còn lại làm việc với số mũ. Phân
tích qua một chút về hai thành phần này, như đã trình bày ở trên, đa thức thì phải
có tên biến, hệ số và số mũ nhưng nó phải được sắp xếp theo trình tự. Lấy tên biến
x làm trung tâm để dễ dàng hình dung vấn đề, những thành phần nào đứng trước x
sẽ được gọi là hệ số, nhưng sẽ có vài trường hợp ngoại lệ có thể kể đến như việc ta
nhập từ bàn phím với hệ số = 0 và ta biết rằng số 0 nhân với số nào cũng bằng 0 vì
vậy trong trường hợp này thành phần của đa thức sẽ là hệ số tự do và đồng thời rơi
vào trường hợp đặc biệt đó là = 0.
Trường hợp tiếp theo về hệ số cũng đặc biệt không kém đó là khi ta nhập từ bàn
phím với hệ số bằng 1, trong trường hợp này việc in ra màn hình với dạng 1x thì
sẽ không được tối ưu cho lắm vì trên thực tế chẳng ai viết như thế cả và trong việc
viết phần mềm rồi in ra màn hình về lâu dài cũng khiến cho nó bị tốn nhiều hơn lOMoAR cPSD| 58702377
dung lượng dự tính, vì vậy trong trường hợp này ta sẽ tối ưu hóa đoạn chương trình
bằng cách: nếu ta nhập từ bàn phím với hệ số = 0 thì ta sẽ không in thành phần này ra màn hình.
Và cũng gần tương tự với trường hợp hệ số = 1 ta sẽ chỉ in ra tên biến và số mũ
của nó thay vì viết cả phần hệ số là = 1 ra màn hình. Về các trường hợp còn lại là
hệ số != 0 và 1 thì in ra màn hình như bình thường vì nó đã tối ưu rồi.
Đến đây chúng em nhận ra một vấn đề nữa ảnh hưởng gián tiếp tới hệ số đó là số
mũ, nếu trong trường hợp số mũ bằng nhau giữa không chỉ 1 mà rất nhiều những
phần tử trong đa thức thì sao? Lấy ví dụ khi ta nhập vào đa thức có hai phần tử có
số mũ bằng nhau như sau: 3x5 + 4x5 thì xét về mặt toán học ta có thể rút gọn đa
thức này bằng cách cộng hai phần hệ số với nhau và giữ nguyên phần số mũ = 7x5.
Vậy thì một lần nữa ta phải tối ưu lại câu lệnh, nếu như số mũ của phần tử cũ bằng
với số mũ của phần tử mới thì ta cho phép hai phần tử này rút gọn bằng cách tính
tổng hai thành phần hệ số của chúng đồng thời giữ nguyên thành phần số mũ của chúng.
Tiếp theo khi làm việc với số mũ thì cũng có những trường hợp đặc biệt xảy ra
tương tự với hệ số, nếu ta nhập từ bàn phím số mũ = 0 thì xét về mặt toán học bất
kì số nào mũ 0 đều bằng 1 cho nên lúc này thành phần đa thức sẽ bị rút gọn chỉ còn
phần hệ số do tên biến đã bị triệt tiêu bởi việc số mũ = 0. Nếu nhập từ bàn phím số
mũ bằng 1 thì lại xảy ra trường hợp dư thừa dữ liệu do nếu xét về mặt toán học thì
x1 = x. Vì vậy nếu trong trường hợp số mũ nhập vào từ bàn phím bằng 1 thì ta có
thể tối ưu câu lệnh bằng cách không in ra số mũ của phần tử đó mà chỉ in ra hệ số
và tên của biến đó mà thôi.
Phần cuối cùng đó là sắp xếp, thì về bản chất việc sắp xếp hệ số và số mũ là như
nhau. Để sắp xếp đa thức theo chiều tăng dần của hệ số ta đi từ phần tử đầu tiên
của đa thức và kết thúc khi đi đến phần tử cuối cùng của đa thức đó. Nếu hệ số của lOMoAR cPSD| 58702377
phần tử đã duyệt lớn hơn so với hệ số của phần tử muốn duyệt tiếp theo thì ta đổi
chỗ hai phần tử đó với nhau. Khi đi hết quá trình đó ta sẽ được dãy sắp xếp đa thức
theo chiều tăng dần của hệ số cũng như là số mũ.
1.2 Phân công công việc ST Công việc Tên đầu việc Đánh giá T chia đến nhỏ nhất Thành viên Thiết kế chương trình và thuật Quá trình Phân tích đề bài. toán bằng ngôn phân tích ổn Tìm ra giải pháp cho Thái Bảo Tuấn ngữ C++ để triển khai yêu cầu của đề bài. nhiều vấn đề. 1 Bộ dữ liệu tạo ra đa
Thiết kế bộ dữ liệu Nguyễn Văn Tuấn dạng với mẫu. nhiều trường hợp đặc biệt. Khai báo các phần tử Tích cực tham gia vào chương tham gia làm 2 Cài đặt Code trình. Nguyễn Văn Tuấn bài. Thiết kế hàm thêm đa Hàm dễ hiểu, thức. dễ vận dụng. lOMoAR cPSD| 58702377 Thiết kế hàm main. Thiết kế hàm thêm vào cuối dãy. Tích cực tham gia làm Trần Mạnh điều bài. Hàm dễ hiểu, dễ vận dụng. Tích cực
Vẽ lưu đồ thuật toán. tham gia làm
Thiết kế hàm sắp xếp. bài. 2 Cài đặt Code Thái Bảo Tuấn Hàm dễ hiểu, Bổ sung và tối ưu dễ vận dụng. thuật toán . Tích cực Tất cả thành viên tham gia làm 3 Word và PowerPoint trong nhóm bài và đóng góp ý kiến.
Bảng 1.2.1 - Bảng phân công nhiệm vụ
CHƯƠNG 2: THUẬT TOÁN
2.1 Lưu đồ thuật toán
Quy trình thực hiện quá trình thiết kế lưu đồ như sau
B1: Quyết định xem bạn cần vẽ lưu đồ cho quy trình nào lOMoAR cPSD| 58702377
Tất nhiên, việc xây dựng lưu đồ trước tên cần phải có ý tưởng. Ý tưởng đó là để
quy trình hoá theo lưu đồ với mục đích gì. Mục đích ở đây là sắp xếp các thành
phần của phần tử trong đa thức cụ thể là hệ số và số mũ B2: Thu thập thông tin
Trừ khi nghĩ đến việc gì thì thông tin cũng là điều quan trọng nhất mà bạn cần phải
tìm hiểu. Thông tin bạn cần cho lưu đồ lại càng cần phải chính xác và có liên quan
tới phần lưu đồ bạn chuẩn bị thực hiện.
Ngay cả khi quy trình có vẻ đơn giản hoặc thời gian diễn ra ngắn thì thông tin thu
thập đều quan trọng cả và phải đều chính xác. Sau bước này thì sẽ có hai khả năng
đó là quy trình vẫn được giữ nguyên như cũ hoặc quay trở lại bước trước đó và lặp
lại quy trình hoặc rẽ sang quy trình hoàn toàn khác.
B3: Bắt tay vào thực hiện vẽ lưu đồ
Khi bạn đã có trong tay đủ các thông tin thì hoạt động vẽ được tiến hành ngay. Các
bạn có thể dùng cách đơn giản nhất là dùng bút và giấy, hoặc cao cấp hơn đó là các
phần mềm, công cụ để hỗ trợ bạn lên lưu đồ rất đơn giản. Hoặc ở mức độ thấp thì
bạn có thể dùng Microsoft PowerPoint, Paint hoặc các phần mềm soạn thảo khác
để thực hiện thao tác cuối cùng này. lOMoAR cPSD| 58702377
Hình 2.1.1 – Lưu đồ thuật toán sắp xếp đa thức theo chiều tăng dần của hệ số lOMoAR cPSD| 58702377
Hình 2.1.2 – Lưu đồ thuật toán sắp xếp đa thức theo chiều tăng dần của số mũ
2.2 Bộ dữ liệu mãu Bộ 1: Phần tử 0 1 2 3 4 Hệ số 3 9 1 3 9 lOMoAR cPSD| 58702377 Số mũ 4 7 2 1 0 Bảng 2.2.1 – Input bộ 1 Kết quả: Bộ 2: Phần tử 0 1 2 3 4 Hệ số 7 5 1 5 5 Số mũ 3 5 9 11 5 lOMoAR cPSD| 58702377 Bảng 2.2.2 – Input bộ 2 Kết quả: Bộ 3: Phần tử 0 1 2 3 4 Hệ số 12 3 50 4 49 Số mũ 6 19 70 1 11 Bảng 2.2.3 – Input bộ 3 Kết quả: lOMoAR cPSD| 58702377 Bộ 4: Phần tử 0 1 2 3 4 Hệ số 5 17 12 9 40 Số mũ 3 7 12 7 1 Bảng 2.2.4 – Input bộ 4 Kết quả: lOMoAR cPSD| 58702377 Bộ 5: Phần tử 0 1 2 3 4 Hệ số 9 19 17 9 3 Số mũ 7 17 3 2 0 Bảng 2.2.5 – Input bộ 5 Kết quả: lOMoAR cPSD| 58702377 Bộ 6: Phần tử 0 1 2 3 4 Hệ số 17 9 0 3 17 Số mũ 12 11 1 0 5 Bảng 2.2.6 – Input bộ 6 Kết quả: lOMoAR cPSD| 58702377 Bộ 7: Phần tử 0 1 2 3 4 Hệ số 12 7 37 99 100 Số mũ 11 9 2 7 0 Bảng 2.2.7 – Input bộ 7 Kết quả: