Cân Bằng Phương Trình Hóa Học Bằng C++

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ì?

3. Giải hệ phương trình bằng ma trận tuyến tính

Ví dụ cho phương trình sau và yêu cầu cân bằng nó:
H2 + O2 = H2O (Mình sẽ dùng dấu '=' để thay cho ký tự '→')
Sau khi cân bằng PTHH hoàn chỉnh sẽ là:
2H2 + O2 = 2H2O
Vậy làm thế nào để cần bằng được như thế, có nhiều cách để cân bằng PTHH, một trong số cách đó là dùng đến ma trận tuyến tính (MTTT), tại sai PTHH lại liên quan đến MTTT.
Như đã nói, ý 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:
Ví dụ như với phương trình H2 + O2 = H2O
Ta sẽ đặt biến x, y, z lần lượt là hệ số trước H2, O2, H2O
Lúc này phương trình sau khi cân bằng sẽ có dạng:
xH2 + yO2 = zH2O
Với nguyên tố H ta có phương trình: 2x - 2z = 0
Với nguyên tố O ta có phương trình: 2y - z = 0
Sẽ có một số phương trình vô nghĩa, ví dụ như hệ phương trình:
a + b - c = 0
a + 2b = 0
2a + 3b - c = 0
Ta thấy phương trình 3 là phương trình vô nghĩa vì nó có thể được tạo ra từ phương trình 1 và 2, ta cần loại tất cả những phương trình vô nghĩa.
Đầu tiên ta đưa HPT đó và MTTT, tiếp đó bằng cách áp dụng phương pháp tìm hạng của ma trận mà ta loại bỏ được những phương trình vô nghĩa, hạng phương trình đó chắc chắn sẽ là N - 1.
Cuối cùng ta sẽ có hệ phương trình N ẩn với N - 1 phương trình, áp dụng giải HPT bằng MTTT ta sẽ có được vô số nghiệm theo một biến t nào đó (t là một hệ số bất kỳ trong các hệ số, bước cuối là chọn giá trị của biến t sao cho các hệ số là các số nguyên dương và ước chung lớn nhất của chúng là 1.
Để làm được như vậy bạn cần biết cách biến ma trận đó về dạng ma trận đường chéo.
Sau đây là một số ví dụ cho các bạn dễ hiểu hơn về phần này:
+) Với phương trình:
a H2 + b O2 → c H2O
Ta sẽ có hệ phương trình:
Với nguyên tố H: 2a = 2c <=> a = c
Với nguyên tố O: 2b = c
Với bài này tất cả hệ số đều biễu diễn theo c rồi nên ta chỉ việc chọn c hợp lý nữa là được (mình sẽ nói vấn đề này sau), mình sẽ tìm đươc c = 2, sẽ tình ra được a = 2, b = 1.
PT sau khi cân bằng: 2H2 + O2 → 2H2O
+) Với phương trình:
a Al + b HCl  → c AlCl3 + d H2
Với nguyên tố Al: a = c
Với nguyên tố H: b = 2d
Với nguyên tố Cl: b = 3c
Ta có hệ phương trình:
a + 0b - c + 0d = 0
0a + b + 0c - 2d = 0
0a + b - 3c + 0d = 0
Ta sẽ đưa hệ trên vào ma trận tuyến tính và biến đổi nó về ma trận đường chéo:
Lúc này ta có hệ phương trình:
3a = 2d
b = 2d
3c = 2d
Lúc này tất cả các hệ số đã được biểu diễn theo d, bây giờ chọn d thế nào để các hệ số là tối giản:
  • Đầ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 phương trình:
a Al + b H2SO4 → c Al2(SO4)3 + d H2
  • 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
Ta có hệ phương trình:
  • a + 0b - 2c + 0d = 0
  • 0a + b - 3c + 0d = 0
  • 0a + 2b + 0c - 2d = 0
  • 0a + 4b - 12c + 0d = 0
Ta sẽ đưa hệ trên vào ma trận tuyến tính và biến đổi nó về ma trận đường chéo:
Lúc này ta có hệ:
  • 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: