Chuyển tới nội dung chính

➕ 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ênVí Dụ CaféKết Quả
+Cộng2 + 3 ly5 ly
-Trừ100 - 18 gram82 gram
*Nhân5 * 50000250000 VND
/Chia500 / 1827 ly
%Chia lấy dư500 % 1814 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

  1. Ép kiểu khi chia: (double) a / b để giữ phần thập phân
  2. Dùng ngoặc: (2 + 3) * 4 rõ ràng hơn 2 + 3 * 4
  3. Kiểm tra chia 0: Luôn kiểm tra trước khi chia
  4. Dùng += thay vì = +: x += 5 gọn hơn x = x + 5
  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!