"""
Date : 18 sept 2025
Auteur : moi
Thème : Nombres complexes
"""
## modules utiles
from math import pi,sin,cos
import matplotlib.pyplot as plt
























## Q1

# tuple = liste d'objets délimitée par des parenthèses
# liste = liste d'objets délimitée par des crochets

# Rem : les éléments d'une liste/tuple s'appellent items

# Différence essentielle : les tuples ne sont PAS MUTABLES. On
# ne peut pas modifier les items qui le consituent, contrairement
# aux listes.

# Exemples de tuples :
# () : tuple vide
# (3,) : tuple à un seul item, ici l'entier 3
# (1.5, 3 , (1,2), [], "e", "bonjour tout le monde") :
# tuple à 6 items :
#    - un flottant,  (type en python : float, objet élémentaire)
#    - un entier,    (int, objet élémentaire)
#    - un tuple,     (tuple,objet structuré)
#    - une liste,    (list,objet structuré)
#    - un caractère, (str, objet élémentaire)
#    - une chaîne de caractères (str, mais objet structuré)

## Q2a)

def rpart(z):
    return z[0]

# autre possibilité :

def rpart(z):
    a,b = z      # affectation à la volée
    return a

def ipart(z):
    return z[1]

## Q3a)

def somme(z1,z2):
    a1,b1 = z1  # affectation à la volée
    a2,b2 = z2
    return (a1+a2,b1+b2)   # les parenthèses sont optionnelles, pas les virgules


## Q3b)
def produit(z1,z2):
    a1,b1 = z1
    a2,b2 = z2
    return (a1*a2-b1*b2, a1*b2+a2*b1)

## Q3c)
def bar(z):
    return rpart(z),-ipart(z)


## Q4a)
def module2(z):
    a,b = z
    return a**2+b**2 # attention c'est un flottant, pas un
                     # complexe (c-à-d. pas un tuple)

## Q4b)

# Dans z = produit(x,y), x et y sont  des tuples,
# et z est un tuple aussi.
# Donc  produit(z, bar(z)) est un tuple.
# Or on veut que module2(z) renvoie un FLOTTANT.
# Conclusion : en utilisant return produit(z, bar(z))
# pour programmer module2(z), on  ne répond pas à la
# question puisqu'on renvoie un TUPLE.

## Q4c)

def module2(z):
    a,b = z
    return (a**2+b**2,0)  # vu comme un complexe (réel pur)

## Q5

def inverse(z):
    a,b = z
    r2 = module2(z)
    return a/r2, -b/r2    # Fiche Rév.4, thm2 1b)

## Q6

# différence entre les deux scripts : commande texte(z)
# Elle sert à afficher sur le graphique l'affixe z.


