madamasterclass.com

📔 Représentation des entiers naturels

Découvrir la représentation des entiers naturels


Dans ce cours, nous allons explorer les différentes façons de représenter les entiers naturels en informatique. Nous verrons les systèmes binaire, octal et hexadécimal, ainsi que les méthodes de conversion entre ces bases. Nous aborderons également les fonctions Python utiles pour manipuler ces représentations.

En informatique, les nombres entiers peuvent être représentés selon différentes bases numériques. Chaque base a ses avantages spécifiques selon le contexte d'utilisation.

Représentation des nombres en différentes bases

1. Système binaire (base 2)
  • ✅ Utilise uniquement les chiffres 0 et 1
  • ✅ Fondamental en informatique (représentation directe en mémoire)
  • ✅ Préfixe '0b' en Python
   # Représentation binaire en Python
   nombre_binaire = 0b1010  # équivalent à 10 en décimal
   print(nombre_binaire)    # Affiche: 10
   print(bin(10))           # Affiche: '0b1010'
   
2. Système octal (base 8)
  • ✦ Utilise les chiffres de 0 à 7
  • ✦ Historiquement utilisé pour les permissions Unix
  • ✦ Préfixe '0o' en Python
   # Représentation octale en Python
   nombre_octal = 0o12      # équivalent à 10 en décimal
   print(nombre_octal)      # Affiche: 10
   print(oct(10))           # Affiche: '0o12'
   
3. Système hexadécimal (base 16)
  • ✦ Utilise les chiffres 0-9 et les lettres A-F
  • ✦ Très utilisé pour les adresses mémoire et les couleurs
  • ✦ Préfixe '0x' en Python
   # Représentation hexadécimale en Python
   nombre_hex = 0xA         # équivalent à 10 en décimal
   print(nombre_hex)        # Affiche: 10
   print(hex(10))           # Affiche: '0xa'
   
4. Conversions entre bases
Conversion Fonction Python
Décimal → Binaire bin(nombre)
Décimal → Octal oct(nombre)
Décimal → Hexadécimal hex(nombre)
Base quelconque → Décimal int('nombre', base)
5. Fonctions Python utiles
  • ✅ Conversion depuis une base quelconque :
   # Conversion depuis différentes bases
   print(int('1010', 2))    # Convertit '1010' binaire en décimal → 10
   print(int('12', 8))      # Convertit '12' octal en décimal → 10
   print(int('A', 16))      # Convertit 'A' hexadécimal en décimal → 10
   
  • ✅ Formatage avancé :
   # Formatage avec f-strings
   nombre = 255
   print(f"Binaire: {nombre:b}")    # Affiche: Binaire: 11111111
   print(f"Octal: {nombre:o}")      # Affiche: Octal: 377
   print(f"Hexadécimal: {nombre:x}") # Affiche: Hexadécimal: ff
   
6. Conclusion

La maîtrise des différentes représentations des nombres entiers est essentielle en programmation. Le système binaire est fondamental pour comprendre le fonctionnement interne des ordinateurs, tandis que les systèmes octal et hexadécimal offrent des représentations plus compactes souvent utilisées dans les systèmes informatiques. Python fournit toutes les fonctions nécessaires pour convertir facilement entre ces différentes bases.

Représentations numériques en Python

Exercice 1: Conversion décimale → binaire ★ ★ ☆ ☆ ☆

1. Créez une fonction `decimal_vers_binaire(n)` qui convertit un nombre décimal en binaire
2. Créez la fonction inverse `binaire_vers_decimal(b)`
3. Testez avec 10, 25 et 255

def decimal_vers_binaire(n):
    if n == 0: return "0"
    bits = []
    while n > 0:
        bits.append(str(n % 2))
        n = n // 2
    return ''.join(reversed(bits))

def binaire_vers_decimal(b):
    return sum(int(bit) * 2**i for i, bit in enumerate(reversed(b)))

# Tests
print(decimal_vers_binaire(10))  # 1010
print(binaire_vers_decimal("1010"))  # 10
print(decimal_vers_binaire(255))  # 11111111

Exercice 2: Conversion décimale → hexadécimale ★ ★ ★ ☆ ☆

1. Créez une fonction `decimal_vers_hexa(n)` sans utiliser hex()
2. Créez la fonction inverse `hexa_vers_decimal(h)`
3. Gérer les lettres A-F en majuscules

def decimal_vers_hexa(n):
    if n == 0: return "0"
    chiffres = []
    hex_chars = "0123456789ABCDEF"
    while n > 0:
        chiffres.append(hex_chars[n % 16])
        n = n // 16
    return ''.join(reversed(chiffres))

def hexa_vers_decimal(h):
    h = h.upper()
    hex_chars = "0123456789ABCDEF"
    return sum(hex_chars.index(c) * 16**i 
              for i, c in enumerate(reversed(h)))

# Tests
print(decimal_vers_hexa(255))  # FF
print(hexa_vers_decimal("FF"))  # 255

Exercice 3: Conversion générique ★ ★ ★ ★ ☆

1. Créez une fonction `convertir(n, base)` qui convertit n dans une base (2-16)
2. Créez la fonction inverse `vers_decimal(s, base)`
3. Testez avec différentes bases

def convertir(n, base):
    if base < 2 or base > 16:
        raise ValueError("Base doit être entre 2 et 16")
    if n == 0: return "0"
    chiffres = "0123456789ABCDEF"
    result = []
    while n > 0:
        result.append(chiffres[n % base])
        n = n // base
    return ''.join(reversed(result))

def vers_decimal(s, base):
    s = s.upper()
    chiffres = "0123456789ABCDEF"
    return sum(chiffres.index(c) * base**i 
             for i, c in enumerate(reversed(s)))

# Tests
print(convertir(42, 2))   # 101010
print(convertir(42, 8))   # 52
print(vers_decimal("101010", 2))  # 42

Exercice 4: Vérification de formats ★ ★ ★ ☆ ☆

1. Créez une fonction qui vérifie si une chaîne est un nombre binaire valide
2. Faites de même pour l'hexadécimal
3. Créez une fonction qui détecte automatiquement la base

def est_binaire(s):
    return all(c in '01' for c in s)

def est_hexadecimal(s):
    return all(c.upper() in '0123456789ABCDEF' for c in s)

def detecter_base(s):
    if s.startswith('0b'): return 2
    if s.startswith('0x'): return 16
    if est_binaire(s): return 2
    if est_hexadecimal(s): return 16
    return 10  # par défaut

# Tests
print(est_binaire("10101"))  # True
print(est_hexadecimal("FF2A"))  # True
print(detecter_base("0b1010"))  # 2

Exercice 5: Calculatrice multi-base ★ ★ ★ ★ ★

1. Créez une calculatrice qui peut:
- Additionner deux nombres dans une base donnée
- Convertir le résultat dans d'autres bases
2. Implémentez une interface simple

def calculatrice():
    print("Calculatrice multi-base")
    a = input("Premier nombre: ")
    b = input("Deuxième nombre: ")
    base = int(input("Base (2-16): "))
    
    # Conversion en décimal
    dec_a = vers_decimal(a, base)
    dec_b = vers_decimal(b, base)
    
    # Calcul
    result_dec = dec_a + dec_b
    
    # Affichage
    print(f"\nRésultats:")
    print(f"Binaire: {convertir(result_dec, 2)}")
    print(f"Octal: {convertir(result_dec, 8)}")
    print(f"Décimal: {result_dec}")
    print(f"Hexadécimal: {convertir(result_dec, 16)}")

# Exemple d'utilisation
calculatrice()

Représentations numériques en Python - Systèmes de numération

Exercice 1: Conversion de Base 2 à Base 8 ★ ★ ☆ ☆ ☆

Dans le cadre d'un projet sur les systèmes de numération, vous devez développer une fonction pour convertir des nombres binaires en octaux. Cela aidera à interpréter les valeurs des capteurs qui fournissent des données en binaire.
1. Créez une fonction `binaire_vers_octale(b)` qui convertit un nombre binaire en octal.
2. Créez la fonction inverse `octale_vers_binaire(o)`.
3. Testez avec "1010", "11111111" et "1001".

def binaire_vers_octale(b):
    dec = int(b, 2)
    return oct(dec)[2:]

def octale_vers_binaire(o):
    dec = int(o, 8)
    return bin(dec)[2:]

# Tests
print(binaire_vers_octale("1010"))  # 12
print(octale_vers_binaire("12"))    # 1010

Exercice 2: Conversion de Base 8 à Base 16 ★ ★ ★ ☆ ☆

Dans un système de gestion de fichiers, il est nécessaire de convertir des identifiants de fichiers octaux en hexadécimaux pour assurer une compatibilité avec d'autres systèmes. Développez des fonctions pour effectuer cette conversion.
1. Créez une fonction `octale_vers_hexadecimale(o)` qui convertit un nombre octal en hexadécimal.
2. Créez la fonction inverse `hexadecimale_vers_octale(h)`.
3. Testez avec "17", "77" et "10".

def octale_vers_hexadecimale(o):
    dec = int(o, 8)
    return hex(dec)[2:].upper()

def hexadecimale_vers_octale(h):
    dec = int(h, 16)
    return oct(dec)[2:]

# Tests
print(octale_vers_hexadecimale("17"))  # F
print(hexadecimale_vers_octale("F"))    # 17

Exercice 3: Conversion de Base 10 à Base N ★ ★ ★ ★ ☆

Lors d'un projet de développement logiciel, vous devez permettre la représentation de nombres dans différentes bases pour répondre aux besoins des utilisateurs. Créez une fonction qui convertit des nombres décimaux en n'importe quelle base de 2 à 16.
1. Créez une fonction `decimal_vers_base(n, base)` qui convertit un nombre décimal vers une base N (2-16).
2. Créez la fonction inverse `base_vers_decimal(s, base)`.
3. Testez avec 42 dans les bases 2, 8 et 16.

def decimal_vers_base(n, base):
    if base < 2 or base > 16:
        raise ValueError("Base doit être entre 2 et 16")
    chiffres = "0123456789ABCDEF"
    result = []
    while n > 0:
        result.append(chiffres[n % base])
        n //= base
    return ''.join(reversed(result))

def base_vers_decimal(s, base):
    s = s.upper()
    chiffres = "0123456789ABCDEF"
    return sum(chiffres.index(c) * (base ** i) for i, c in enumerate(reversed(s)))

# Tests
print(decimal_vers_base(42, 2))   # 101010
print(decimal_vers_base(42, 8))   # 52
print(decimal_vers_base(42, 16))  # 2A

Exercice 4: Vérification d'un Format de Base 16 ★ ★ ★ ☆ ☆

Dans le cadre d'une application de sécurité, il est essentiel de valider les entrées des utilisateurs pour s'assurer qu'elles respectent les formats de nombre attendus. Développez des fonctions pour vérifier si une chaîne est un nombre valide en base décimale ou hexadécimale.
1. Créez une fonction `est_hexadecimal(s)` qui vérifie si une chaîne est un nombre hexadécimal valide.
2. Créez une fonction `est_decimal(s)` qui vérifie si une chaîne est un nombre décimal valide.
3. Testez avec des valeurs valides et invalides.

def est_hexadecimal(s):
    return all(c.upper() in '0123456789ABCDEF' for c in s)

def est_decimal(s):
    return s.isdigit()

# Tests
print(est_hexadecimal("1A3F"))  # True
print(est_decimal("12345"))     # True
print(est_hexadecimal("G12"))    # False
print(est_decimal("12.34"))     # False

Exercice 5: Calculatrice Multi-Base ★ ★ ★ ★ ★

Pour un projet d'application de calculatrice, vous devez créer une fonction qui permet aux utilisateurs d'additionner des nombres dans plusieurs bases et d'afficher le résultat dans différentes bases. Cela améliorera l'expérience utilisateur en simplifiant les conversions.
1. Créez une calculatrice qui peut:
- Additionner deux nombres dans une base donnée (2-16)
- Afficher le résultat dans d'autres bases.
2. Implémentez une interface simple.
3. Testez avec des entrées dans différentes bases.

def calculatrice_multi_base():
    print("Calculatrice Multi-Base")
    a = input("Premier nombre: ")
    b = input("Deuxième nombre: ")
    base = int(input("Base (2-16): "))

    # Conversion en décimal
    dec_a = base_vers_decimal(a, base)
    dec_b = base_vers_decimal(b, base)

    # Calcul
    result_dec = dec_a + dec_b

    # Affichage
    print(f"\nRésultats:")
    for b in [2, 8, 10, 16]:
        print(f"Base {b}: {decimal_vers_base(result_dec, b)}")

# Exemple d'utilisation
calculatrice_multi_base()

Sens de variation et Limite d'une suite

Exercice 1: ★ ★ ★ ☆ ☆

Considérons la suite définie par \( u_n = \frac{n}{n + 1} \) pour \( n \in \mathbb{N} \).
1. Déterminez le sens de variation de la suite \( (u_n) \).
2. Calculez la limite de la suite \( (u_n) \) lorsque \( n \) tend vers l'infini.

1. Pour étudier le sens de variation, nous calculons \( u_{n+1} - u_n \) : \[ u_{n+1} = \frac{n+1}{n+2} \] \[ u_{n+1} - u_n = \frac{n+1}{n+2} - \frac{n}{n+1} = \frac{(n+1)^2 - n(n+2)}{(n+2)(n+1)} = \frac{1}{(n+2)(n+1)} \] Comme \( n \) est positif, \( u_{n+1} - u_n > 0 \). Donc, la suite \( (u_n) \) est croissante. 2. Pour la limite, nous avons : \[ \lim_{n \to \infty} u_n = \lim_{n \to \infty} \frac{n}{n+1} = \lim_{n \to \infty} \frac{1}{1+\frac{1}{n}} = 1. \] Ainsi, la limite de la suite est 1.


Exercice 2: ★ ★ ★ ★ ☆

Soit la suite définie par \( v_n = \frac{1}{n} + \frac{(-1)^n}{n} \) pour \( n \in \mathbb{N}^* \).
1. Étudiez le sens de variation de la suite \( (v_n) \).
2. Calculez la limite de la suite \( (v_n) \) lorsque \( n \) tend vers l'infini.

1. Pour le sens de variation, nous observons que \( v_n \) varie entre \( \frac{1}{n} + \frac{1}{n} \) et \( \frac{1}{n} - \frac{1}{n} \). Ainsi, la suite oscille autour de \( \frac{1}{n} \). 2. Calculons la limite : \[ \lim_{n \to \infty} v_n = \lim_{n \to \infty} \left( \frac{1}{n} + \frac{(-1)^n}{n} \right) = \lim_{n \to \infty} \frac{1 + (-1)^n}{n} = 0. \] La limite de la suite est donc 0.


Exercice 3: ★ ★ ★ ★ ★

Considérons la suite définie par \( w_n = n^2 - 3n + 2 \).
1. Déterminez le sens de variation de la suite \( (w_n) \).
2. Calculez la limite de la suite \( (w_n) \) lorsque \( n \) tend vers l'infini.

1. Pour étudier le sens de variation, nous calculons la dérivée : \[ w'(n) = 2n - 3. \] La dérivée est positive pour \( n > 1.5 \), donc \( (w_n) \) est croissante pour \( n \geq 2 \). 2. La limite est : \[ \lim_{n \to \infty} w_n = \lim_{n \to \infty} (n^2 - 3n + 2) = \infty. \] La limite de la suite est donc \( \infty \).


Exercice 4: ★ ★ ★ ☆ ☆

Soit la suite définie par \( z_n = \frac{3^n}{n!} \).
1. Étudiez le sens de variation de la suite \( (z_n) \).
2. Calculez la limite de la suite \( (z_n) \) lorsque \( n \) tend vers l'infini.

1. Pour le sens de variation, nous calculons : \[ \frac{z_{n+1}}{z_n} = \frac{3^{n+1}}{(n+1)!} \cdot \frac{n!}{3^n} = \frac{3}{n+1}. \] Pour \( n \geq 3 \), \( \frac{z_{n+1}}{z_n} < 1 \), donc \( (z_n) \) est décroissante. 2. La limite est : \[ \lim_{n \to \infty} z_n = 0. \] La limite de la suite est donc 0.


Exercice 5: ★ ★ ★ ★ ★

Considérons la suite définie par \( a_n = \ln(n+1) - \ln(n) \).
1. Étudiez le sens de variation de la suite \( (a_n) \).
2. Calculez la limite de la suite \( (a_n) \) lorsque \( n \) tend vers l'infini.

1. Pour le sens de variation, nous avons : \[ a_n = \ln\left(\frac{n+1}{n}\right) = \ln\left(1 + \frac{1}{n}\right). \] Comme \( \ln(x) \) est croissante, \( a_n \) est positif et décroissant. 2. Pour la limite : \[ \lim_{n \to \infty} a_n = \lim_{n \to \infty} \ln\left(1 + \frac{1}{n}\right) = 0. \] La limite de la suite est donc 0.


Sens de variation et Limite d'une suite

Exercice 1: ★ ★ ★ ☆ ☆

Un investisseur place 1000€ dans un compte d'épargne qui rapporte 5% d'intérêt par an. La valeur de l'investissement après \( n \) années est donnée par \( V_n = 1000 \times (1 + 0.05)^n \).
1. Déterminez le sens de variation de la suite \( (V_n) \).
2. Calculez la limite de la valeur de l'investissement lorsque \( n \) tend vers l'infini.

1. La suite \( (V_n) \) est exponentielle et croissante, car \( V_{n+1} = V_n \times 1.05 \).

2. La limite est : \[ \lim_{n \to \infty} V_n = \infty. \] La valeur de l'investissement augmente sans limite.


Exercice 2: ★ ★ ★ ★ ☆

Une population de bactéries double chaque heure. Si la population initiale est de 100 bactéries, la population après \( n \) heures est donnée par \( P_n = 100 \times 2^n \).
1. Étudiez le sens de variation de la suite \( (P_n) \).
2. Calculez la limite de la population lorsque \( n \) tend vers l'infini.

1. La suite \( (P_n) \) est croissante car chaque heure la population double.

2. La limite est : \[ \lim_{n \to \infty} P_n = \infty. \] La population de bactéries croît sans limite.


Exercice 3: ★ ★ ★ ★ ★

Un coureur parcourt une distance de 10 km. Il commence par courir 1 km le premier jour, puis augmente sa distance de 0.5 km chaque jour. La distance parcourue le \( n \)-ième jour est donnée par \( D_n = 1 + 0.5(n - 1) \).
1. Déterminez le sens de variation de la suite \( (D_n) \).
2. Calculez la limite de la distance parcourue lorsque \( n \) tend vers l'infini.

1. La suite \( (D_n) \) est croissante car chaque jour le coureur ajoute 0.5 km.

2. La limite est : \[ \lim_{n \to \infty} D_n = \infty. \] La distance parcourue augmente indéfiniment.


Exercice 4: ★ ★ ★ ☆ ☆

Un architecte prévoit de construire un gratte-ciel. Chaque étage mesure 3 mètres de hauteur. La hauteur totale après \( n \) étages est donnée par \( H_n = 3n \).
1. Étudiez le sens de variation de la suite \( (H_n) \).
2. Calculez la limite de la hauteur lorsque \( n \) tend vers l'infini.

1. La suite \( (H_n) \) est croissante car chaque étage ajoute 3 mètres à la hauteur.

2. La limite est : \[ \lim_{n \to \infty} H_n = \infty. \] La hauteur du gratte-ciel augmente sans limite.


Exercice 5: ★ ★ ★ ★ ★

Une personne commence à économiser 100€ le premier mois et augmente son épargne de 10€ chaque mois. La somme totale après \( n \) mois est donnée par \( S_n = 100n + 10\frac{n(n-1)}{2} \).
1. Déterminez le sens de variation de la suite \( (S_n) \).
2. Calculez la limite de la somme totale lorsque \( n \) tend vers l'infini.

1. La suite \( (S_n) \) est croissante car chaque mois, la personne ajoute une somme supérieure à celle du mois précédent.

2. La limite est : \[ \lim_{n \to \infty} S_n = \infty. \] La somme totale d'épargne augmente sans limite.


Forum(s) associé(s)

Page: