Tải bản đầy đủ (.doc) (3 trang)

Bài tập lớn CTDL GT bách khoa HCM Assignment 2015 2016

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (135.31 KB, 3 trang )

Bà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:
F11 F12… F1N O F21 F22… F2N
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.
Ký tự
a

keep_first

Ý nghĩa


b

keep_last

c,d,e,f

+,-,*,\

Ví dụ/Chú thích
Giữ lại đơn thức có hệ số mũ cao nhất.
keep_first(3x3 + 2x2 + x + 2) = 3x3
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ác phép tính cộng, trừ, nhân, chia đa thức. Sinh viên có


g

max_co

h

min_co

i

power

k


đạo hàm

thể lên Google để tìm hiểu về các phép toán này.
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ụ: -2x2 - 5 sẽ ra kết quả -2 (chứ không phải là 0)
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ụ: 5x4 + 3x2 + 1 sẽ ra kết quả là 1 (chứ không phải
là 0)
Hàm F2 sẽ luôn là một hằng số không âm.
kết quả sẽ là (F1 ) F2

Dữ liệu nhập 1 -1 i 2 sẽ tương ứng với (x-1)2 = x2 - 2x + 1
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:
input.txt
Assignment.cpp
Assignmen.doc

Một file input ví dụ.
Chỉ nộp file này

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à


5x+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!




×