# -*- 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.
Un petit algorithme est à compléter (repéré 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-

# À COMPLÉTER : écrire une boucle « for V_A in volumes » contenant un
# bloc if/else. Avant l'équivalence, H3O+ est entièrement consommé et il
# reste des ions HO-. Après l'équivalence, HO- est épuisé et H3O+
# s'accumule. À chaque tour, ajouter une valeur à n_H3O et à n_HO.

# --- 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()
