# -*- coding: utf-8 -*-
"""
Chapitre 4 - Titrages
---------------------
Evolution des quantités de matière au cours d'un titrage.

On titre V_B = 20,0 mL d'une solution d'hydroxyde de sodium (Na+ + HO-)
par de l'acide chlorhydrique (H3O+ + Cl-) de concentration
c_A = 1,00e-1 mol/L. Réaction support : H3O+ + HO- -> 2 H2O.
Le titrage pH-métrique a donné V_E = 12,3 mL, d'où c_B = 6,15e-2 mol/L.

Objectif : tracer n(H3O+) et n(HO-) en fonction du volume V_A versé.
A ouvrir et exécuter dans EduPython.
DEUX lignes sont à compléter (repérées par # À COMPLÉTER).
"""

import matplotlib.pyplot as plt   # tracé de graphes (fiche M2)

# --- Constantes du titrage ---
c_A = 1.00e-1     # concentration de l'acide versé (mol/L)
c_B = 6.15e-2     # concentration de la solution titrée (mol/L)
V_B = 20.0        # volume de solution titrée (mL)

# --- Liste des volumes versés : de 0 à 25,0 mL par pas de 0,1 mL ---
volumes = []                   # liste vide (fiche O5)
for i in range(251):           # i = 0, 1, 2, ..., 250
    volumes.append(0.1 * i)

# --- Quantités de matière (en mol) pour chaque volume versé ---
# Rappel : c (mol/L) * V (mL) donne des millimoles, d'où le facteur 1e-3.
n_H3O = []   # quantités d'ions oxonium H3O+
n_HO = []    # quantités d'ions hydroxyde HO-

for V_A in volumes:
    if c_A * V_A < c_B * V_B:
        # avant l'équivalence : H3O+ versé entièrement consommé,
        # il reste des ions HO-
        n_H3O.append(0.0)
        n_HO.append((c_B * V_B - c_A * V_A) * 1e-3)
    else:
        # après l'équivalence : HO- épuisé, H3O+ versé s'accumule
        n_H3O.append((c_A * V_A - c_B * V_B) * 1e-3)
        n_HO.append(0.0)

# --- Tracé ---
plt.plot(volumes, n_HO, label="n(HO-)")
plt.plot(volumes, n_H3O, label="n(H3O+)")
plt.xlabel("Volume d'acide versé V_A (mL)")
plt.ylabel("Quantité de matière (mol)")
plt.title("Évolution des quantités de matière au cours du titrage")
plt.grid(True, linestyle=":")
plt.legend()
plt.show()
