[Buổi 24][Lớp & đối tượng][HW] Bài 5: Lớp khoản vay và lịch thanh toán


LÀM BÀI

Points: 100
Time limit: 1.0s
Memory limit: 256M

Author:
Problem types
Allowed languages
C++

Lớp khoản vay và lịch thanh toán

Bối cảnh

Một Loan object giữ principal, monthlyRate (%) và fixedPayment. Method simulate(months) phải mô phỏng từng tháng: trước hết cộng lãi balance *= 1 + rate/100, sau đó trừ payment nhưng không cho balance âm. Hệ thống cần biết sau m tháng còn bao nhiêu và tháng đầu tiên khoản vay được trả hết; nếu chưa hết trong m tháng, monthPaid=0.

Bài Medium yêu cầu behavior nhiều bước trên state nhưng không được thay đổi principal gốc khi chỉ chạy báo cáo. simulate() có thể dùng biến local balance. Đây là ví dụ về method query phức tạp hơn nhưng vẫn chưa cần encapsulation chặt của B25.

Mục tiêu quan trọng của bài là giữ công thức/behavior bên trong class thay vì để main tự tính lại ở nhiều nơi. Mỗi object phải có state riêng và method đọc đúng state đó. Khi behavior được gọi nhiều lần hoặc dùng trong ranking, một nguồn logic duy nhất giúp tránh hai công thức gần giống nhưng cho kết quả khác nhau.

Yêu cầu

  1. Tạo class Loan với data principal, rate, payment.
  2. Method simulate(m) trả balance và paidMonth.
  3. Lãi trước, payment sau mỗi tháng.
  4. In balance paidMonth với balance 2 decimals.

Input

Một dòng principal rate payment months.

Output

Một dòng.

Ràng buộc

0≤principal≤1e9, 0≤rate≤100, payment≥0, 0≤months≤10000.

Ví dụ 1

Input

100 0 30 4

Output

0.00 4

Giải thích

Rate0 nên mỗi tháng chỉ trừ30: sau tháng1 còn70, tháng2 40, tháng3 10, tháng4 balance thành -20 nên clamp0 và paidMonth=4. Output 0.00 4.

Trường hợp mẫu cũng cho thấy kết quả được lấy thông qua behavior của object, không phải do main tự thay đổi field rồi tính tạm. Mỗi object giữ state độc lập, nên các phép tính ở object này không làm thay đổi object khác và output phản ánh đúng state đã nhập.

Ví dụ 2

Input

100 10 50 3

Output

0.00 3

Giải thích

Tháng1: 100→110 sau lãi, trừ50 còn60. Tháng2: 60→66, trừ50 còn16. Tháng3: 16→17.6, trừ50 làm hết nợ. Output 0.00 3.

Trường hợp mẫu cũng cho thấy kết quả được lấy thông qua behavior của object, không phải do main tự thay đổi field rồi tính tạm. Mỗi object giữ state độc lập, nên các phép tính ở object này không làm thay đổi object khác và output phản ánh đúng state đã nhập.

Thông tin học tập

  • Module: M07
  • Buổi: B24
  • Loại bài: HOMEWORK
  • Độ khó: Medium
  • Concepts: class, methods, amortization simulation, state-derived reports
  • Giới hạn kiến thức: B01-B24
  • Time limit: 1 second(s)
  • Memory limit: 256 MB
  • Point: 100

Comments

There are no comments at the moment.

Zalo