Bài tập lớn CTDL GT bách khoa HCM Assignment 2015 2016 Bài tập lớn CTDL GT bách khoa HCM Assignment 2015 2016 Bài tập lớn CTDL GT bách khoa HCM Assignment 2015 2016 Bài tập lớn CTDL GT bách khoa HCM Assignment 2015 2016 Bài tập lớn CTDL GT bách khoa HCM Assignment 2015 2016 Bài tập lớn CTDL GT bách khoa HCM Assignment 2015 2016 Bài tập lớn CTDL GT bách khoa HCM Assignment 2015 2016 Bài tập lớn CTDL GT bách khoa HCM Assignment 2015 2016 Bài tập lớn CTDL GT bách khoa HCM Assignment 2015 2016 Bài tập lớn CTDL GT bách khoa HCM Assignment 2015 2016 Bài tập lớn CTDL GT bách khoa HCM Assignment 2015 2016 Bài tập lớn CTDL GT bách khoa HCM Assignment 2015 2016 Bài tập lớn CTDL GT bách khoa HCM Assignment 2015 2016
Trang 1Bài Tập Lớn
Xử lý đa thức một biến
1 Giới thiệu
Trong bài tập lớn này, sinh viên sẽ được cung cấp một file chứa dữ liệu nhập, bao gồm các thông số cho biểu thức tính toán trên đa thức một biến Chương trình sẽ tính toán và in ra đa thức kết quả Sinh viên cũng sẽ được cung cấp chương trình mẫu đọc dữ liệu từ file nhập, tạo thành danh sách liên kết và xuất kết quả ra màn hình
2 Dữ liệu nhập
Dữ liệu nhập của chương trình được chứa trong file mang tên input.txt File này sẽ chứa các thông tin về một phép tính giữa hai đa thức F1 và F2 có dạng sau:
F 11 F 12 … F 1N O F 21 F 22 … F 2N
Trong đó
- Fij: Hệ số thứ j của đa thức Fi, là một số nguyên có giá trị từ -100 đến 100
- O: là một chữ cái biểu diễn cho toán tử Ý nghĩa của chữ cái có thể tham khảo
trong Bảng 1
Ví dụ với dữ liệu nhập 1 0 1 c 3 1 1 1 thì biểu thức cần tính toán sẽ là (x2 + 1) +
(3x3 + x2 + x + 1), kết quả sẽ là 3x3 + 2x2 + x + 2.
Lưu ý: trong số các toán tử sẽ có các toán tử một ngôi, trong trường hợp này F2 sẽ không có dữ liệu
3 Các toán tử tính toán
Bảng 1 mô tả các toán tử, ý nghĩa và các ví dụ tương ứng
Bảng 1- Ký tự đại diện cho các toán tử và ý nghĩa của chúng.
a keep_first Giữ lại đơn thức có hệ số mũ cao nhất
keep_first(3x3 + 2x2 + x + 2) = 3x3
b keep_last Giữ lại đơn thức có hệ số mũ thấp nhất
keep_last(3x3 + 2x2 + x + 2) = 2 keep_last(3x3 + 2x2) = 2x2
c,d,e,f +,-,*,\ Các phép tính cộng, trừ, nhân, chia đa thức Sinh viên có
Trang 2thể lên Google để tìm hiểu về các phép toán này.
g max_co trả về giá trị của hệ số lớn nhất
max_co(3x3 + 2x2 + x + 2) = 3 max_co(x2 + x + 2) = 2 max_co(5x2 +5x + 2) = 5
Chú ý trường hợp khuyết hệ số:
Ví dụ: -2x 2 - 5 sẽ ra kết quả -2 (chứ không phải là 0)
h min_co trả về giá trị của hệ số nhỏ nhất
Tương tự cho trường hợp khuyết hệ số như max_co:
Ví dụ: 5x 4 + 3x 2 + 1 sẽ ra kết quả là 1 (chứ không phải
là 0)
i power Hàm F 2 sẽ luôn là một hằng số không âm.
kết quả sẽ là (F 1 )F
2
Dữ liệu nhập 1 -1 i 2 sẽ tương ứng với (x-1)2 = x 2 - 2x + 1
k đạo hàm Tính đạo hàm của hàm số
Ví dụ: Dữ liệu nhập 1 2 1 k thì kết quả là 2x + 2
4 Mã khởi động
Sinh viên download file assigment.zip từ trang Web của môn học Khi giải nén
file này, sẽ có được các file sau:
Assignmen.doc File mô tả nội dung bài tập lớn
Chương trình chính có dạng như sau:
void main() {
PolyList list1, list2;
char op;
char rest[20000];
readFile("input.txt",&list1,&list2, &op, rest);
list1.calculate(&list2, op,rest);
list1.printOut();
}
Hàm readFile() sẽ đọc nội dung file Input, xây dựng hai danh sách liên kết list1
và list2, toán tử cần tính toán sẽ chứa trong ký tự op Các nội dung còn lại (xem thêm
phần bonus) sẽ được chứa trong chuỗi rest.
Ví dụ:
Khi file input là 2 0 1 c 3 1 1 1 thì list1 tương ứng với (2,0,1), list2 tương ứng với (3,1,1,1), op là ‘c’ và rest là chuỗi rỗng.
Khi file input là 1 2 1 k thì list1 tương ứng với (1,1,1), list2 là rỗng, op là ‘k’ và
rest là chuỗi rỗng
Khi file input là 1 2 1 k c 3 1 thì list1 tương ứng với (1,2,1), list2 là rỗng, op là ‘k’
và rest là “c 3 1” Biểu thức tương ứng sẽ là (x2 + 2x +1)’ + 3x + 1 Kết quả là
Trang 35x+3 (đây là trường hợp bonus – xem thêm phần 5).
Hàm printOut sẽ xuất kết quả tính toán ra màn hình Sinh viên KHÔNG thay đổi nội
dung hàm này Lời giải cho trường hợp a đã được cung cấp sẵn để sinh viên tham khảo
5 Trường hợp Bonus
Trong trường hợp bonus, biểu thức cần tính sẽ chứa nhiều hơn một toán tử Ví dụ: khi file
input là 1 2 i 0 c 3 1 * 1 0 thì biểu thức tương ứng sẽ là (x + 2)0 + (3x + 1) * x Các toán tử không có độ ưu tiên, sẽ lần lượt được tính từ trái qua phải Ví dụ với biểu thức trên, (x +
2)0 sẽ được tính trước, kết quả là 1, sau đó sẽ tính tiếp 1+(3x+1), kết quả là 3x+2 Cuối cùng sẽ tính (3x+2)*x, kết quả là 3x2 + 2x.
6 Nộp bài
Khi nộp bài, sinh viên sử dụng account đã được cấp phát để nộp bài qua mạng Sinh viên
chỉ nộp đúng một file Assignment.cpp File được nộp phải là file chương trình gốc, SINH
VIÊN KHÔNG ĐƯỢC NÉN FILE KHI NỘP BÀI Sinh viên phải kiểm tra chương
trình của mình trên MS 2010 trước khi nộp.
Thời hạn chót để nộp bài là 17h00 ngày thứ 2, 11/01/2016 Sinh viên phải dùng account
trên hệ thống Sakai để nộp bài KHÔNG nhận bài được gửi qua mail hoặc bất kỳ hình thức nào khác Bài nộp trễ sẽ KHÔNG được nhận
7 Xử lý gian lận
Bài tập lớn phải được sinh viên TỰ LÀM Sinh viên sẽ bị coi là gian lận nếu:
- Có sự giống nhau bất thường giữa mã nguồn của các bài nộp Trong trường hợp này,
TẤT CẢ các bài nộp đều bị coi là gian lận Do vậy sinh viên phải bảo vệ mã nguồn bài
tập lớn của mình
- Sinh viên không hiểu mã nguồn do chính mình viết, trừ những phần mã được cung cấp sẵn trong chương trình khởi tạo Sinh viên có thể tham khảo từ bất kỳ nguồn tài liệu nào, tuy nhiên phải đảm bảo rằng mình hiểu rõ ý nghĩa của tất cả những dòng lệnh mà mình viết Trong trường hợp không hiểu rõ mã nguồn của nơi mình tham khảo, sinh viên được
đặc biệt cảnh báo là KHÔNG ĐƯỢC sử dụng mã nguồn này; thay vào đó nên sử dụng
những gì đã được học để viết chương trình
Trong trường hợp bị kết luận là gian lận, sinh viên sẽ bị điểm 0 cho bài tập lớn
KHÔNG CHẤP NHẬN BẤT KỲ GIẢI THÍCH NÀO VÀ KHÔNG CÓ BẤT KỲ NGOẠI LỆ NÀO!