import matplotlib.pyplot as plt # fonctions de trace
from math import exp # fonction exponentielle necessaire

#equation de la réaction : 2 SO2(g) + O2(g) = 2 SO3(g)
#quantités initales : 2 mol de dioxyde de soufre et 1 mol de dioxygène
#P = P°

def constante(T):
    # renvoie la valeur de la constante thermodynamique d'equilibre à la temperature T
    A COMPLETER

def quotient(ksi):
    # renvoie la valeur du quotient reactionnel pour l'avancement ksi a la pression standard et pour des quantites de matiere initiales de 1 mol de dioxygene et 2 mol de dioxyde de soufre (proportions stoechiometriques)
    A COMPLETER

def avancement_eq(T):
    #renvoie l'avancement de la reaction a l'equilibre dichotomie la solution de l'equation Q - K = 0 en cherchant par 
    # Initialisation des variables
    gauche = 0.000001 # xi minimal nul (mais le quotient reactionnel diverge en zero)
    droite = 0.999999 # xi maximal = 1 (idem)
    ksi = 0.5 # on commence par tester l'avancement ksi = 0.5 mol
    K = constante(T) # valeur de la constante thermodynamique d'equilibre a T
    # Premiere valeur du quotient reactionnel (pour un avancement de 0.5 mol, au milieu de l'intervalle)
    Q = quotient(ksi)
    while abs(Q-K) > 0.0001: # condition d'arret
        if Q > K: # si le quotient reactionnel est superieur a K, l'avancement a l'equilibre est a chercher a gauche
            droite = ksi
        else:
            gauche = ksi # sinon on cherche a droite
            ksi = A COMPLETER # nouveau milieu de l'intervalle
            Q = quotient(ksi) # nouvelle valeur de Q pour le milieu de l'intervalle
    return ksi

## Corps principal
# Trace en fonction de la temperature entre 600 et 1500 K (un point tous les 10 K)
T = [temp for temp in range(600,1500,10)] # liste des abscisses
ksi = [] # liste vide des ordonnees
for temp in T:
    A COMPLETER # ajout successif des valeurs de l'avancement a l'equilibredans la liste des ordonnees

A COMPLETER # trace du nuage de points
# titres des axes et du graphique
plt.ylabel("avancement a l'equilibre (mol)")
plt.xlabel("temperature (K)")
plt.title("Influence de la temperature sur l'oxydation de SO2")
plt.show()

# enregistrement du graphique dans un fichier image
plt.savefig('oxydation.png')