Cân Bằng Phương Trình Hóa Học Bằng C++
Hóa học là một nỗi sợ và có thể nói là nỗi ám ảnh của đa số học sinh phải không nào, các phương trình thực sự quá phức tạp ở giai đoạn cân bằng phương trình, vậy nếu như chúng ta tạo ra một chương trình cho phép cân bằng PTHH một cách chớp nhoáng thì sao nhỉ?
1. Phương trình hóa học và cân bằng phương trình hóa học là gì?
2. Ý tưởng thuật toán
Với bài toán cân bằng phương trình hóa học ta cần làm như thế nào? Có rất nhiều cách cân bằng phương trình hóa học, một số đó là định luật bảo toàn khối lượng, có nghĩa là khối lượng các chất trước và sau khi phản ứng không đổi, điều này có nghĩa là số mol của mỗi nguyên tố hóa học tham gia phản ứng của được bảo toàn.
Ví dụ như phương trình sau:
2H2 + O2 → 2H2O
Trước và sau khi phản ứng đều có 4 đơn vị mol Hidro và 2 đơn vị mol Oxi
Bám sát vào điều này ta thấy rằng nếu đặt các hệ số trước các chất trước và sau khi phản ứng bằng các ẩn thì với mỗi nguyên tố học học ta sẽ thu được một phương trình.
Với PTHH:
Al + HCl → AlCl3 + H2
Ta có thể đặt các ẩn số trước tất cả các chất trước và sau phản ứng và việc của chúng ta cần làm là tìm ra chúng
a Al + b HCl → c AlCl3 + d H2
Lúc này ta áp dụng định luật bảo toàn nguyên tố ta có các phương trình sau:
- Với nguyên tố Al: a = c
- Với nguyên tố H: b = 2d
- Với nguyên tố Cl: b = 3c
Như thế ta đã có hệ phương trình 3 phương trình và 4 ẩn số, hệ này vô số nghiệm, việc ta cần làm là tìm ra bộ nghiệm tối giản của hệ phương trình trên (hệ số tối giản khi các hệ số đều là số nguyên dương và ước chúng lớn nhất của tất cả các số đó bằng 1)
Ý tưởng chính của bài này là sẽ đặt N biến là N hệ số trước N chất trước và sau phản ứng, từ M nguyên tố có trong phương trình ta đưa ra được M phương trình, từ đó ta có hệ phương trình (HPT) bậc nhất N ẩn, M phương trình, sau đó ta sẽ giải hệ phương trình đó bằng ma trận tuyến tính để tìm ra các hệ số của PTHH.
3. Giải hệ phương trình bằng ma trận tuyến tính

- Đầu tiên cần tối giản các hệ số của từng phương trình một, ví dụ nếu có phương trình 2a = 4b thì bạn cần tối giản thành a = 2b:
- Sau khi đã tối giản thì hệ số d cần tìm chính là bội chung nhỏ nhất của các hệ số phía bên trái.
Với trường hợp này d = bcnn(3, 1, 3) = 3, như vậy d = 3, a = 2, b = 6, c = 2;
PT sau khi cân bằng:
2Al + 6HCl → 2AlCl3 + 3H2
- Với nguyên tố Al: a = 2c
- Với nguyên tố S: b = 3c
- Với nguyên tố H: 2b = 2d
- Với nguyên tố O: 4b = 12c
- a + 0b - 2c + 0d = 0
- 0a + b - 3c + 0d = 0
- 0a + 2b + 0c - 2d = 0
- 0a + 4b - 12c + 0d = 0

- 3a = 2d
- 2b = 2d
- 6c = 2d
Hệ sau khi rút gọn
- 3a = 2d
- b = d
- 3c = d
d = bcnn(3, 1, 3) = 3, a = 2, b = 3, c = 1
2Al + 3H2SO4 → Al2(SO4)3 + 3H2
4. Kết
Trên đây là các mà mình đã viết ra chương trình cân bằng phương trình hóa học, các bạn có thể tham khảo code c++ của mình tại đây.
Video demo: