# Computing: Free Pascal Programming

 Programming Home Home Contact

## Balancing chemical equations (chemeq).

Description: The program calculates the coefficients of the reactants and products of a chemical reaction in order to balance the equation entered by the user. Enter the (unbalanced) equation using the format:
reactant1 + reactant2 ... -> product1 + product 2 ...
Entering "H" instead, displays a short help text.

Programming notes: The program uses a brute force approach to determine the coefficients. This may result in thousands and thousands of calculations to be done. Whereas for "normal" equations, this doesn't really matter and the answer is more or less instantaneous, for complicated equations, containing 6 molecules and coefficients greater than 10, it may take time. Al + NH4ClO4 -> Al2O3 + AlCl3 + H2O + N2 (balanced: 10Al + 6NH4ClO4 -> 4Al2O3 + 2AlCl3 + 12H2O + 3N2) took some 15 secs on my machine; but these "extreme cases" are very rare in practice.

Coefficients are calculated by generating all size (reactants + products) combinations (including repetitives) of the integers from 1 to a presupposed maximum coefficient value. The program first tries with CoeffMax = 6, then CoeffMax = 12 and finally, if the equation is still not balanced, asks the user if it should continue trying. This has been done to limit calculation time on slower computers, considering that it's rather rare to have equations with coefficient maxima greater than 6.

Version 1.1 (August 2018): Bug fixed: Equations with molecules containing "{Atom}10" or "({Atoms})10" are correctly balanced now.

Improvements: Gaining lots of speed by eliminating those combinations which can't be the searched coefficients (e.g. if 1 1 1 1 is not the solution, 2 2 2 2 and 3 3 3 3 can't be either). Another way to limit the number of calculations would be to sort the combinations differently (2 2 3 1 is lots more probable than 1 1 1 12...)

Free Pascal features: Recursion, string extraction, complex Pascal data structures.

Screenshot: