from math import log, ceil # Fonctions pour les suites arithmétiques def calculer_terme_arithmetique(): print("Calcul du terme U(n) d'une suite arithmétique") U0 = float(input("Entrez U0 (premier terme) : ")) q = float(input("Entrez la raison q : ")) n = int(input("Entrez le rang n : ")) # Calcul du terme Un Un = U0 + q * n # Affichage des étapes de calcul print(f"\nÉtapes du calcul :") print(f"U(n) = U0 + n * q") print(f"U({n}) = {U0} + {n} * {q}") print(f"U({n}) = {U0} + {n*q}") print(f"U({n}) = {Un}\n") print(f"Le terme U{n} de la suite arithmétique est : {Un}") def somme_arithmetique(): print("Calcul de la somme des n premiers termes d'une suite arithmétique") U0 = float(input("Entrez U0 (premier terme) : ")) q = float(input("Entrez la raison q : ")) n = int(input("Entrez le nombre de termes n : ")) # Calcul de la somme Sn Sn = n * (2 * U0 + (n - 1) * q) / 2 # Affichage des étapes de calcul print(f"\nÉtapes du calcul :") print(f"S(n) = n * (2 * U0 + (n - 1) * q) / 2") print(f"S({n}) = {n} * (2 * {U0} + ({n} - 1) * {q}) / 2") print(f"S({n}) = {n} * ({2 * U0} + {n - 1} * {q}) / 2") print(f"S({n}) = {n} * ({2 * U0 + (n - 1) * q}) / 2") print(f"S({n}) = {Sn}\n") print(f"La somme des {n} premiers termes de la suite arithmétique est : {Sn}") # Fonctions pour les suites géométriques def calculer_terme_geometrique(): print("Calcul du terme U(n) d'une suite géométrique") U0 = float(input("Entrez U0 (premier terme) : ")) r = float(input("Entrez la raison r : ")) n = int(input("Entrez le rang n : ")) # Calcul du terme Un Un = U0 * r ** n # Affichage des étapes de calcul print(f"\nÉtapes du calcul :") print(f"U(n) = U0 * r^n") print(f"U({n}) = {U0} * {r}^{n}") print(f"U({n}) = {U0} * {r**n}") print(f"U({n}) = {Un}\n") print(f"Le terme U{n} de la suite géométrique est : {Un}") def somme_geometrique(): print("Calcul de la somme des n premiers termes d'une suite géométrique") U0 = float(input("Entrez U0 (premier terme) : ")) r = float(input("Entrez la raison r : ")) n = int(input("Entrez le nombre de termes n : ")) # Calcul de la somme Sn if r == 1: Sn = U0 * n print(f"\nPuisque r = 1, la suite est constante et S(n) = U0 * n") print(f"S({n}) = {U0} * {n} = {Sn}\n") else: Sn = U0 * (1 - r ** n) / (1 - r) # Affichage des étapes de calcul print(f"\nÉtapes du calcul :") print(f"S(n) = U0 * (1 - r^n) / (1 - r)") print(f"S({n}) = {U0} * (1 - {r}^{n}) / (1 - {r})") print(f"S({n}) = {U0} * (1 - {r**n}) / (1 - {r})") print(f"S({n}) = {Sn}\n") print(f"La somme des {n} premiers termes de la suite géométrique est : {Sn}") # Résolution d'inéquations pour une suite arithmétique ou géométrique def inequation_arithmetique(): print("Résolution d'une inéquation dans une suite arithmétique") U0 = float(input("Entrez U0 (premier terme) : ")) q = float(input("Entrez la raison q : ")) objectif = float(input("Entrez la valeur à atteindre ou dépasser (par exemple 200) : ")) # Résolution de l'inéquation U(n) >= objectif if q == 0: print("La raison q est nulle, la suite est constante.") if U0 >= objectif: print(f"Le premier terme U0 = {U0} est déjà supérieur ou égal à {objectif}.") else: print(f"Le terme U0 = {U0} ne peut jamais atteindre {objectif}.") else: n = (objectif - U0) / q n_rounded = ceil(n) # On arrondit à l'entier supérieur print(f"\nÉtapes du calcul :") print(f"U(n) = U0 + n * q >= {objectif}") print(f"{U0} + n * {q} >= {objectif}") print(f"n >= ({objectif} - {U0}) / {q}") print(f"n >= {n}") print(f"n doit être supérieur ou égal à {n_rounded}\n") print(f"Le premier terme U(n) qui est supérieur ou égal à {objectif} correspond à n = {n_rounded}.") def inequation_geometrique(): print("Résolution d'une inéquation dans une suite géométrique") U0 = float(input("Entrez U0 (premier terme) : ")) r = float(input("Entrez la raison r : ")) objectif = float(input("Entrez la valeur à atteindre ou dépasser (par exemple 200) : ")) # Résolution de l'inéquation U(n) >= objectif if r <= 0: print("La raison r doit être positive.") elif r == 1: if U0 >= objectif: print(f"Le premier terme U0 = {U0} est déjà supérieur ou égal à {objectif}.") else: print(f"Le terme U0 = {U0} ne peut jamais atteindre {objectif}.") else: n = log(objectif / U0) / log(r) n_rounded = ceil(n) # On arrondit à l'entier supérieur print(f"\nÉtapes du calcul :") print(f"U(n) = U0 * r^n >= {objectif}") print(f"{U0} * {r}^n >= {objectif}") print(f"n >= log({objectif} / {U0}) / log({r})") print(f"n >= {n}") print(f"n doit être supérieur ou égal à {n_rounded}\n") print(f"Le premier terme U(n) qui est supérieur ou égal à {objectif} correspond à n = {n_rounded}.") # Menu principal def menu(): while True: print("\n=== Menu Principal ===") print("1. Calculer un terme d'une suite arithmétique") print("2. Calculer un terme d'une suite géométrique") print("3. Calculer la somme des n premiers termes d'une suite arithmétique") print("4. Calculer la somme des n premiers termes d'une suite géométrique") print("5. Résoudre une inéquation dans une suite arithmétique") print("6. Résoudre une inéquation dans une suite géométrique") print("0. Quitter") choix = input("Choisissez une option : ") if choix == '1': calculer_terme_arithmetique() elif choix == '2': calculer_terme_geometrique() elif choix == '3': somme_arithmetique() elif choix == '4': somme_geometrique() elif choix == '5': inequation_arithmetique() elif choix == '6': inequation_geometrique() elif choix == '0': print("Au revoir !") break else: print("Choix invalide, veuillez réessayer.") # Lancer le programme menu()