➕ Tính Toán Công Thức - Arithmetic Operators
Chào mừng đến với bài học về Arithmetic Operators - các phép tính trong Café Âu!
🎯 Món Ăn Hôm Nay
Tưởng tượng bạn là barista tính toán trong quán café:
- Cộng (+): 2 ly + 3 ly = 5 ly
- Trừ (-): 100g cà phê - 18g = 82g còn lại
- Nhân (×): 5 ly × 50,000 VND = 250,000 VND
- Chia (÷): 500g chia cho 18g/ly = 27 ly
Đó chính là Arithmetic Operators - công cụ tính toán hàng ngày!
☕ Arithmetic Operators Là Gì?
Arithmetic Operators = Các phép tính số học (cộng, trừ, nhân, chia)
// Tính tiền 1 đơn hàng
int soLy = 5;
int giaMotLy = 50000;
int tongTien = soLy * giaMotLy; // 250,000 VND
System.out.println("Tổng tiền: " + tongTien + " VND");
5 phép toán cơ bản:
| Toán Tử | Tên | Ví Dụ Café | Kết Quả |
|---|---|---|---|
+ | Cộng | 2 + 3 ly | 5 ly |
- | Trừ | 100 - 18 gram | 82 gram |
* | Nhân | 5 * 50000 | 250000 VND |
/ | Chia | 500 / 18 | 27 ly |
% | Chia lấy dư | 500 % 18 | 14 gram dư |
☕ Ẩn Dụ Café:
- + = Gộp đơn hàng
- - = Trừ nguyên liệu đã dùng
- × = Tính tổng tiền (số lượng × giá)
- ÷ = Chia đều nguyên liệu
- % = Nguyên liệu dư thừa
👨🍳 Câu Chuyện Trong Quán
Sáng nay, barista cần tính toán nhiều thứ:
Tình huống 1: Tính tổng tiền đơn hàng
int lyLatte = 3;
int lyCappuccino = 2;
int giaLatte = 50000;
int giaCappuccino = 45000;
int tongTien = (lyLatte * giaLatte) + (lyCappuccino * giaCappuccino);
System.out.println("🧾 HÓA ĐƠN:");
System.out.printf("Latte x%d: %,d VND\n", lyLatte, lyLatte * giaLatte);
System.out.printf("Cappuccino x%d: %,d VND\n", lyCappuccino, lyCappuccino * giaCappuccino);
System.out.printf("TỔNG: %,d VND\n", tongTien);
Tình huống 2: Chia nguyên liệu
int caPhe = 500; // gram
int caPheMotLy = 18; // gram/ly
int soPhaduoc = caPhe / caPheMotLy;
int caPheConLai = caPhe % caPheMotLy;
System.out.printf("📦 500g cà phê → Pha được %d ly\n", soPhaduoc);
System.out.printf("📦 Còn dư: %dg (không đủ pha thêm)\n", caPheConLai);
🎉 Kết quả: Arithmetic operators giúp tính toán chính xác mọi thứ!
📝 Công Thức Nấu (Code Examples)
Ví Dụ 1: Phép Toán Cơ Bản
public class TinhToanCoBan {
public static void main(String[] args) {
int a = 10;
int b = 3;
System.out.println("☕ PHÉP TOÁN CƠ BẢN:\n");
System.out.println("Cộng: " + a + " + " + b + " = " + (a + b));
System.out.println("Trừ: " + a + " - " + b + " = " + (a - b));
System.out.println("Nhân: " + a + " × " + b + " = " + (a * b));
System.out.println("Chia: " + a + " ÷ " + b + " = " + (a / b));
System.out.println("Chia lấy dư: " + a + " % " + b + " = " + (a % b));
}
}
Output:
☕ PHÉP TOÁN CƠ BẢN:
Cộng: 10 + 3 = 13
Trừ: 10 - 3 = 7
Nhân: 10 × 3 = 30
Chia: 10 ÷ 3 = 3
Chia lấy dư: 10 % 3 = 1
Ví Dụ 2: Tính Tiền Hóa Đơn
public class TinhHoaDon {
public static void main(String[] args) {
// Giá đồ uống
int giaLatte = 50000;
int giaCappuccino = 45000;
int giaEspresso = 40000;
// Số lượng
int soLatte = 2;
int soCappuccino = 3;
int soEspresso = 1;
// Tính từng loại
int tienLatte = soLatte * giaLatte;
int tienCappuccino = soCappuccino * giaCappuccino;
int tienEspresso = soEspresso * giaEspresso;
// Tổng cộng
int tongTien = tienLatte + tienCappuccino + tienEspresso;
// Giảm giá 10%
int giamGia = tongTien * 10 / 100;
int thanhToan = tongTien - giamGia;
System.out.println("🧾 HÓA ĐƠN CAFÉ:\n");
System.out.printf("Latte x%d : %,d VND\n", soLatte, tienLatte);
System.out.printf("Cappuccino x%d : %,d VND\n", soCappuccino, tienCappuccino);
System.out.printf("Espresso x%d : %,d VND\n", soEspresso, tienEspresso);
System.out.println("━━━━━━━━━━━━━━━━━━━━━━━━━━");
System.out.printf("Tạm tính : %,d VND\n", tongTien);
System.out.printf("Giảm 10%% : -%,d VND\n", giamGia);
System.out.println("━━━━━━━━━━━━━━━━━━━━━━━━━━");
System.out.printf("THANH TOÁN : %,d VND\n", thanhToan);
}
}
Output:
🧾 HÓA ĐƠN CAFÉ:
Latte x2 : 100,000 VND
Cappuccino x3 : 135,000 VND
Espresso x1 : 40,000 VND
━━━━━━━━━━━━━━━━━━━━━━━━━━
Tạm tính : 275,000 VND
Giảm 10% : -27,500 VND
━━━━━━━━━━━━━━━━━━━━━━━━━━
THANH TOÁN : 247,500 VND
Ví Dụ 3: Chia Số Thực vs Số Nguyên
public class ChiaHaiKieu {
public static void main(String[] args) {
int caPhe = 100; // gram
int ly = 3;
// Chia số nguyên (mất phần thập phân)
int ketQua1 = caPhe / ly;
// Chia số thực (giữ phần thập phân)
double ketQua2 = (double) caPhe / ly;
System.out.println("📊 CHIA NGUYÊN LIỆU:\n");
System.out.printf("Có %dg cà phê, chia cho %d ly:\n\n", caPhe, ly);
System.out.println("❌ Chia int/int:");
System.out.printf(" %d ÷ %d = %d (mất phần thập phân!)\n\n", caPhe, ly, ketQua1);
System.out.println("✅ Chia double/int:");
System.out.printf(" %.1f ÷ %d = %.2fg/ly (chính xác)\n", (double)caPhe, ly, ketQua2);
}
}
Output:
📊 CHIA NGUYÊN LIỆU:
Có 100g cà phê, chia cho 3 ly:
❌ Chia int/int:
100 ÷ 3 = 33 (mất phần thập phân!)
✅ Chia double/int:
100.0 ÷ 3 = 33.33g/ly (chính xác)
Ví Dụ 4: Toán Tử Tăng/Giảm (++/--)
public class TangGiam {
public static void main(String[] args) {
int khach = 0;
System.out.println("👥 SỐ KHÁCH TRONG QUÁN:\n");
// Khách vào
khach++;
System.out.println("Khách 1 vào: " + khach + " khách");
khach++;
System.out.println("Khách 2 vào: " + khach + " khách");
khach++;
System.out.println("Khách 3 vào: " + khach + " khách");
// Khách ra
khach--;
System.out.println("\nKhách 1 ra: " + khach + " khách");
System.out.println("\n━━━ SỰ KHÁC BIỆT ++ VÀ ++ ━━━\n");
int a = 5;
int b = a++; // b = 5, sau đó a = 6
System.out.println("a++ → b = " + b + ", a = " + a);
int c = 5;
int d = ++c; // c = 6 trước, sau đó d = 6
System.out.println("++c → d = " + d + ", c = " + c);
}
}
Output:
👥 SỐ KHÁCH TRONG QUÁN:
Khách 1 vào: 1 khách
Khách 2 vào: 2 khách
Khách 3 vào: 3 khách
Khách 1 ra: 2 khách
━━━ SỰ KHÁC BIỆT a++ VÀ ++a ━━━
a++ → b = 5, a = 6
++c → d = 6, c = 6
Ví Dụ 5: Toán Tử Gán Kết Hợp (+=, -=, *=, /=)
public class GanKetHop {
public static void main(String[] args) {
int tongTien = 0;
System.out.println("💰 TÍNH TỔNG TIỀN TỪNG BƯỚC:\n");
tongTien += 50000; // tongTien = tongTien + 50000
System.out.printf("Thêm Latte (+= 50,000): %,d VND\n", tongTien);
tongTien += 45000;
System.out.printf("Thêm Cappuccino (+= 45,000): %,d VND\n", tongTien);
tongTien -= 10000; // Giảm giá
System.out.printf("Giảm giá (-= 10,000): %,d VND\n", tongTien);
tongTien *= 2; // Nhân đôi (2 đơn giống nhau)
System.out.printf("Nhân đôi (*= 2): %,d VND\n", tongTien);
tongTien /= 2; // Chia đôi (trả lại)
System.out.printf("Chia đôi (/= 2): %,d VND\n", tongTien);
}
}
Output:
💰 TÍNH TỔNG TIỀN TỪNG BƯỚC:
Thêm Latte (+= 50,000): 50,000 VND
Thêm Cappuccino (+= 45,000): 95,000 VND
Giảm giá (-= 10,000): 85,000 VND
Nhân đôi (*= 2): 170,000 VND
Chia đôi (/= 2): 85,000 VND
🔥 Thực Hành Trong Quán
Bài Tập 1: Tính Nguyên Liệu Cần Thiết
public class TinhNguyenLieu {
public static void main(String[] args) {
int soKhach = 25;
double caPheMotLy = 18.5; // gram
double suaMotLy = 100.0; // ml
double duongMotLy = 2.0; // muỗng
double tongCaPhe = soKhach * caPheMotLy;
double tongSua = soKhach * suaMotLy;
double tongDuong = soKhach * duongMotLy;
System.out.println("📋 NGUYÊN LIỆU CHO " + soKhach + " LY LATTE:\n");
System.out.printf("☕ Cà phê: %.1fg\n", tongCaPhe);
System.out.printf("🥛 Sữa: %.0fml\n", tongSua);
System.out.printf("🍬 Đường: %.0f muỗng\n", tongDuong);
}
}
Bài Tập 2: Tính Doanh Thu Theo Giờ
public class DoanhThuGio {
public static void main(String[] args) {
int gioMoCua = 7;
int gioDongCua = 22;
int lyMotGio = 15;
int giaMotLy = 50000;
int tongGio = gioDongCua - gioMoCua;
int tongLy = tongGio * lyMotGio;
long doanhThu = tongLy * giaMotLy;
System.out.println("📊 TÍNH DOANH THU DỰ KIẾN:\n");
System.out.printf("⏰ Giờ mở cửa: %d:00 - %d:00 (%d giờ)\n",
gioMoCua, gioDongCua, tongGio);
System.out.printf("☕ Ước tính: %d ly/giờ\n", lyMotGio);
System.out.printf("💰 Giá: %,d VND/ly\n\n", giaMotLy);
System.out.println("━━━ KẾT QUẢ ━━━");
System.out.printf("📦 Tổng ly: %d ly\n", tongLy);
System.out.printf("💵 Doanh thu: %,d VND\n", doanhThu);
}
}
Bài Tập 3: Chia Đều Tips
public class ChiaTips {
public static void main(String[] args) {
int tongTips = 100000; // VND
int soNhanVien = 3;
int tipsMoiNguoi = tongTips / soNhanVien;
int tipsDu = tongTips % soNhanVien;
System.out.println("💵 CHIA TIPS CHO NHÂN VIÊN:\n");
System.out.printf("Tổng tips: %,d VND\n", tongTips);
System.out.printf("Số nhân viên: %d người\n\n", soNhanVien);
System.out.printf("✅ Mỗi người nhận: %,d VND\n", tipsMoiNguoi);
System.out.printf("📦 Tiền dư: %,d VND (để quỹ chung)\n", tipsDu);
}
}
Bài Tập 4: Tính Phần Trăm
public class TinhPhanTram {
public static void main(String[] args) {
int tongDoanhThu = 5000000;
int chiPhiNguyenLieu = 1500000;
int chiPhiNhanVien = 2000000;
// Tính phần trăm
double phanTramNguyenLieu = (double) chiPhiNguyenLieu / tongDoanhThu * 100;
double phanTramNhanVien = (double) chiPhiNhanVien / tongDoanhThu * 100;
// Lợi nhuận
int loiNhuan = tongDoanhThu - chiPhiNguyenLieu - chiPhiNhanVien;
double phanTramLoiNhuan = (double) loiNhuan / tongDoanhThu * 100;
System.out.println("📊 BÁO CÁO TÀI CHÍNH:\n");
System.out.printf("💵 Doanh thu: %,d VND (100%%)\n\n", tongDoanhThu);
System.out.println("━━━ CHI PHÍ ━━━");
System.out.printf("🥤 Nguyên liệu: %,d VND (%.1f%%)\n",
chiPhiNguyenLieu, phanTramNguyenLieu);
System.out.printf("👥 Nhân viên: %,d VND (%.1f%%)\n\n",
chiPhiNhanVien, phanTramNhanVien);
System.out.println("━━━ LỢI NHUẬN ━━━");
System.out.printf("💰 Lợi nhuận: %,d VND (%.1f%%)\n",
loiNhuan, phanTramLoiNhuan);
}
}
⚠️ Những Lỗi Barista Thường Gặp
Lỗi 1: Chia Số Nguyên Mất Phần Thập Phân
// ❌ SAI: Chia int/int = int (mất .33)
int caPhe = 100;
int ly = 3;
int ketQua = caPhe / ly; // 33, không phải 33.33
// ✅ ĐÚNG: Ép kiểu để giữ phần thập phân
double ketQua = (double) caPhe / ly; // 33.33
Lỗi 2: Quên Thứ Tự Ưu Tiên
// ❌ SAI: Nhân trước rồi mới cộng
int tong = 2 + 3 * 4; // 14, không phải 20
// ✅ ĐÚNG: Dùng ngoặc để rõ ràng
int tong = (2 + 3) * 4; // 20
Lỗi 3: Chia Cho 0
// ❌ SAI: Chia cho 0 gây lỗi
int a = 100;
int b = 0;
int ketQua = a / b; // ArithmeticException!
// ✅ ĐÚNG: Kiểm tra trước khi chia
int a = 100;
int b = 0;
if (b != 0) {
int ketQua = a / b;
System.out.println(ketQua);
} else {
System.out.println("❌ Không thể chia cho 0!");
}
Lỗi 4: Nhầm ++ và ++
// ❌ NHẦM: a++ vs ++a
int a = 5;
int b = a++; // b = 5, a = 6 (dùng rồi mới tăng)
int c = 5;
int d = ++c; // c = 6, d = 6 (tăng rồi mới dùng)
// ✅ ĐÚNG: Dùng riêng để rõ ràng
int a = 5;
int b = a;
a++; // Rõ ràng hơn
💡 Bí Quyết Của Barista
- Ép kiểu khi chia:
(double) a / bđể giữ phần thập phân - Dùng ngoặc:
(2 + 3) * 4rõ ràng hơn2 + 3 * 4 - Kiểm tra chia 0: Luôn kiểm tra trước khi chia
- Dùng += thay vì = +:
x += 5gọn hơnx = x + 5 - Cẩn thận với ++/--: Dùng riêng dòng để tránh nhầm
🎓 Bạn Đã Học Được
- ✅ 5 toán tử: +, -, *, /, %
- ✅ ++/-- = Tăng/giảm 1 đơn vị
- ✅ +=, -=, *=, /= = Toán tử gán kết hợp
- ✅ Chia int/int = int (mất phần thập phân)
- ✅ Thứ tự ưu tiên: (), ++/--, */%, +/-, =
☕ Món Tiếp Theo
Đã biết tính toán! Giờ học cách so sánh giá trị:
👉 So Sánh Giá Trị - Comparison Operators
💡 Lời Khuyên Cuối: Arithmetic operators giống máy tính trong quán - tính chính xác từng đồng! Nhớ ép kiểu khi chia và dùng ngoặc để rõ ràng!