Activité pratique 1

Durée1h15

Consignes globales

Voici une première liste d’exercices pour comprendre les bases de la construction d’un programme. Ils portent sur la déclaration de variables, les types de données, les structures de contrôle, et les fonctions.

L’objectif de cette activité est de vous familiariser avec les concepts fondamentaux de la programmation, en vous concentrant sur la construction d’algorithmes simples.

Certains exercices demandent de concevoir un algorithme pour résoudre un problème spécifique, puis de le coder en Python pour le tester. L’étape de conception est cruciale pour comprendre comment aborder un problème de programmation. Elle impose de réfléchir à la logique de l’algorithme avant de se lancer dans le codage.

Chaque programme Python conçu doit être évalué pour s’assurer qu’il fonctionne correctement et qu’il répond aux exigences de l’exercice.

Important

Le but de cette séance est de vous aider à maîtriser des notions importantes en informatique. Un assistant de programmation intelligent tel que GitHub Copilot sera capable de vous fournir une solution à ces exercices uniquement à partir d’un nom de fichier judicieusement choisi.

Pour comprendre et apprendre, vous ne devez pas utiliser ces outils pour l’instant.

Prendre le temps de réfléchir, de concevoir des algorithmes et de les coder vous-même est essentiel pour acquérir les compétences nécessaires.

Contenu de l’activité

Conversion

Complétez le code Python ci-dessous qui étant donné un entier exprimant un temps en secondes supposé correct :

  • le convertit en heures, minutes, secondes ;
  • l’affiche sous la forme …H, …MN, …SEC.

🏁 Avant de commencer à programmer, réfléchissez à la manière dont vous pourriez aborder ce problème.

Copier/coller

Vous pouvez copier le code présenté ci-après en cliquant sur l’icône située en haut à droite de la fenêtre de code.

​
# Affichage de la demande de saisie
print("Entrez une durée en secondes :")
# Lecture de la durée en secondes
duree_en_secondes = int(input())

# A vous de programmer la conversion
À faire

Complétez le code ci-dessus.

Correction
Cliquez ici pour afficher la correction.
​
# Affichage de la demande de saisie
print("Entrez une durée en secondes :")
# Lecture de la durée en secondes
duree_en_secondes = int(input())

# Conversion en heures, minutes et secondes
heures = duree_en_secondes // 3600
minutes = (duree_en_secondes % 3600) // 60
secondes = duree_en_secondes % 60

Calcul du grade

Complétez le code Python ci-dessous pour qu’il puisse :

  • lire trois notes entières
  • vérifier leur validité (entre 0 et 20)
  • afficher leur moyenne et la mention correspondante (insuffisant, passable, bien, très bien, excellent), ou un message d’erreur.

Les seuils correspondant aux mentions possibles doivent être déclarés comme des constantes entières (valeurs de votre choix).

🏁 Avant de commencer à programmer, réfléchissez à la manière dont vous pourriez aborder ce problème.

​
# Constantes de seuils pour les mentions
PASSABLE = 8
BIEN = 14
TRES_BIEN = 16
EXCELLENT = 18

# lecture, vérification des notes et affichage
print("Saisissez 3 notes entières entre 0 et 20 (une à la fois)");
note1 = int(input())
note2 = int(input())
note3 = int(input())
# A vous de programmer le calcul de la moyenne et l'affichage de la mention
À faire

Complétez le code ci-dessus.

Correction
Cliquez ici pour afficher la correction.

Complétez le code Python ci-dessous pour qu’il puisse:

  • lire trois notes entières
  • vérifier leur validité (entre 0 et 20)
  • afficher leur moyenne et la mention correspondante (insuffisant, passable, bien, très bien, excellent), ou un message d’erreur.

Les seuils correspondant aux mentions possibles doivent être déclarés comme des constantes entières (valeurs de votre choix).

​
# Constantes de seuils pour les mentions
PASSABLE = 8
BIEN = 14
TRES_BIEN = 16
EXCELLENT = 18

# lecture, vérification des notes et affichage
print("Saisissez 3 notes entières entre 0 et 20 (une à la fois)");
note1 = int(input())
note2 = int(input())
note3 = int(input())

# Vérification de la validité des notes
if note1 < 0 or note1 > 20:
    print("Note 1 invalide")
elif note2 < 0 or note2 > 20:
    print("Note 2 invalide")
elif note3 < 0 or note3 > 20:
    print("Note 3 invalide")
else:
    # Calcul de la moyenne
    moyenne = (note1 + note2 + note3) / 3
    print(f"Moyenne: {moyenne:.2f}, ")

    # Détermination de la mention
    if moyenne < PASSABLE:
        mention = "Insuffisant"
    elif moyenne < BIEN:
        mention = "Passable"
    elif moyenne < TRES_BIEN:
        mention = "Bien"
    elif moyenne < EXCELLENT:
        mention = "Très bien"
    else:
        mention = "Excellent"

    print(f"Mention: {mention}")

Calcul de salaire

Complétez le code Python pour calculer le salaire hebdomadaire d’un employé, sachant que :

  • celui-ci a effectué n heures dans la semaine,
  • le taux horaire TAUX_HORAIRE est applicable aux heures normales – jusqu’à HORAIRE_LEGAL (35 heures) –, et que ce taux est majoré de MAJORATION_TAUX (par exemple 50%) pour les heures supplémentaires.

Le nombre d’heures sera lu au clavier (cf. exercice 1).

​
# Constantes    
HORAIRE_LEGAL = 35
TAUX_HORAIRE = 12.5
MAJORATION_TAUX = 0.5

# A vous de compléter le code
À faire

Complétez le code ci-dessus.

Correction
Cliquez ici pour afficher la correction.

Le nombre d’heures sera lu au clavier (cf. exercice 1).

​
# Constantes    
HORAIRE_LEGAL = 35
TAUX_HORAIRE = 12.5
MAJORATION_TAUX = 0.5

# Lecture du nombre d'heures travaillées
print("Entrez le nombre d'heures travaillées dans la semaine :")
n = int(input())
# Calcul du salaire
majoration = 0 
if n > HORAIRE_LEGAL:
    majoration = (n - HORAIRE_LEGAL) * TAUX_HORAIRE * MAJORATION_TAUX

salaire = n * TAUX_HORAIRE + majoration
print(f"Salaire hebdomadaire: {salaire:.2f} euros")

Équation du second degré

Écrivez le code Python lisant les coefficients d’une équation du second degré dans $\mathbb{R}$ $(ax^2 + bx + c = 0)$ et affichant les solutions éventuelles.

  1. Pour calculer la racine carrée de nb : math.sqrt(nb). Cela nécessite d’importer la bibliothèque mathématique (cf. exemple ci-dessous).
  2. D’autre part, de même que int(x) traite x comme un entier, vous pouvez utiliser float(x) pour obtenir un nombre à virgule flottante.
Aide
Pour résoudre l'équation du second degré, vous pouvez utiliser la formule du discriminant : $$\Delta = b^2 - 4ac$$ - Si $\Delta > 0$, l'équation a deux solutions réelles distinctes. Les solutions sont données par : $$x_1 = \frac{-b - \sqrt{\Delta}}{2a}$$ $$x_2 = \frac{-b + \sqrt{\Delta}}{2a}$$ - Si $\Delta = 0$, l'équation a une solution réelle double. La solution est donnée par : $$x = \frac{-b}{2a}$$ - Si $\Delta < 0$, l'équation n'a pas de solution réelle.
​
# Importation de la bibliothèque mathématique
import math 

# A vous de compléter le code
À faire

Complétez le code ci-dessus.

Correction
Cliquez ici pour afficher la correction.

Écrivez le code Python lisant les coefficients d’une équation du second degré dans $\mathbb{R}$ $(ax^2 + bx + c = 0)$ et affichant les solutions éventuelles.

Pour calculer la racine carrée de nb : math.sqrt(nb).

​
# Importation de la bibliothèque mathématique
import math

# Lecture des coefficients
print("Entrez les coefficients a, b et c :")
a = float(input())
b = float(input())
c = float(input())

# Calcul du discriminant
delta = b**2 - 4*a*c

# Affichage des solutions
if delta < 0:
    print("Pas de solution réelle.")
elif delta == 0:
    x = -b / (2*a)
    print(f"Solution unique : x = {x:.2f}")
else:
    x1 = (-b - math.sqrt(delta)) / (2*a)
    x2 = (-b + math.sqrt(delta)) / (2*a)
    print(f"Solutions : x1 = {x1:.2f}, x2 = {x2:.2f}")

Nombre parfait

Un nombre est dit parfait s’il est égal à la somme de tous ses diviseurs, lui-même non compris ; par exemple $6 = 1 + 2 + 3$ et $28 = 1 + 2 + 4 + 7 + 14$ sont tous les deux parfaits.

Écrivez le code Python qui, étant donné un entier positif saisi au clavier, vérifie s’il est parfait.

Aide

Avant de révéler les étapes de l’algorithme, essayez de réfléchir à la manière dont vous pourriez aborder ce problème. Une feuille et un stylo peuvent être utiles pour concevoir un algorithme avant de le coder.

Cliquez ici pour révéler l’aide

Pour vérifier si un nombre est parfait, vous pouvez suivre ces étapes :

  1. Initialisez une variable pour stocker la somme des diviseurs.
  2. Parcourez tous les entiers de 1 à n-1 (où n est le nombre saisi) et vérifiez s’ils sont des diviseurs de n.
  3. Si un entier est un diviseur, ajoutez-le à la somme.
  4. À la fin, comparez la somme des diviseurs à n. Si elles sont égales, n est parfait.
​
# A vous de compléter le code
À faire

Complétez le code ci-dessus.

Correction
Cliquez ici pour afficher la correction.

Un nombre est dit parfait s’il est égal à la somme de tous ses diviseurs, lui-même non compris ; par exemple $6 = 1 + 2 + 3$ et $28 = 1 + 2 + 4 + 7 + 14$ sont tous les deux parfaits.

Écrivez le code Python qui, étant donné un entier positif saisi au clavier, vérifie s’il est parfait.

Aide

Avant de révéler les étapes de l’algorithme, essayez de réfléchir à la manière dont vous pourriez aborder ce problème. Une feuille et un stylo peuvent être utiles pour concevoir un algorithme avant de le coder.

Cliquez ici pour révéler l’aide

Pour vérifier si un nombre est parfait, vous pouvez suivre ces étapes :

  1. Initialisez une variable pour stocker la somme des diviseurs.
  2. Parcourez tous les entiers de 1 à n-1 (où n est le nombre saisi) et vérifiez s’ils sont des diviseurs de n.
  3. Si un entier est un diviseur, ajoutez-le à la somme.
  4. À la fin, comparez la somme des diviseurs à n. Si elles sont égales, n est parfait.
​
# Lecture du nombre entier positif
print("Entrez un nombre entier positif :")
n = int(input())
# Initialisation de la somme des diviseurs
somme_diviseurs = 0
# Parcours des entiers de 1 à n-1 pour trouver les diviseurs
for i in range(1, n):
    if n % i == 0:  # Si i est un diviseur de n
        somme_diviseurs += i  # Ajout à la somme des diviseurs
# Vérification si n est parfait
if somme_diviseurs == n:
    print(f"{n} est un nombre parfait.")
else:
    print(f"{n} n'est pas un nombre parfait.")

Numérologie

Écrivez le code qui calcule le chiffre de numérologie correspondant à une année ; on l’obtient en calculant la somme des chiffres composant l’année, jusqu’à obtenir un chiffre (nombre compris entre 1 et 9 inclus).

Ex: pour l’année 1971 : 1 + 9 + 7 + 1 = 18 ; 1 + 8 = 9.

Pour cela, vous devez déclarer une fonction chiffre_de_numerologie(n) qui prend un entier n en argument et retourne le chiffre de numérologie correspondant.

À faire

Assurez-vous que votre programme peut aussi calculer le chiffre de numérologie d’un entier positif quelconque.

Correction
Cliquez ici pour afficher la correction.

Ex: pour l’année 1971 : 1 + 9 + 7 + 1 = 18 ; 1 + 8 = 9.

Assurez-vous que votre programme peut aussi calculer le chiffre de numérologie d’un entier positif quelconque.

​
# Lecture de l'année ou du nombre entier positif
print("Entrez une année ou un nombre entier positif :")
annee = int(input())
# Fonction pour calculer le chiffre de numérologie
def chiffre_numerologie(n):
    while n >= 10:  # Répéter jusqu'à obtenir un chiffre unique
        n = sum(int(digit) for digit in str(n))  # Somme des chiffres
    return n
# Calcul du chiffre de numérologie
numerologie = chiffre_numerologie(annee)
print(f"Le chiffre de numérologie pour {annee} est : {numerologie}")

Matrice

Etant donnée une matrice carrée de taille n (entier positif), vous devez écrire un programme Python qui effectue les opérations suivantes :

  1. Initialiser une matrice n x n avec des zéros.
  2. Remplir la matrice triangulaire supérieure avec les chiffres de 1 à k, diagonale exclue.
  3. Afficher la matrice.

Vous devez déclarer trois fonctions, chacune effectuant l’une des opérations ci-dessus. La première fonction prend un entier n en argument et retourne une matrice n x n initialisée avec des zéros. La deuxième fonction prend une matrice carrée, détermine son ordre (nombre de lignes ou de colonnes) n puis remplit la matrice triangulaire supérieure avec tous les nombres distincts de 1 à k (k à calculer en fonction de n). La troisième fonction prend une matrice en argument et l’affiche.

Aide

En Python, vous pouvez utiliser des listes imbriquées pour représenter une matrice.

Cliquez ici pour révéler l’aide

Pour initialiser une matrice carrée de taille n, il existe plusieurs méthodes.

  1. Vous pouvez utiliser une boucle pour créer une liste de listes.
matrice = []
for i in range(n):
    ligne = [0] * n  # Crée une ligne de zéros
    matrice.append(ligne)  # Ajoute la ligne à la matrice
  1. Vous pouvez également utiliser une compréhension de liste pour créer la matrice en une seule ligne.
matrice = [[0 for _ in range(n)] for _ in range(n)]
À faire

Répondez à la question ci-dessus.

Correction
Cliquez ici pour afficher la correction.
Aide

En Python, vous pouvez utiliser des listes imbriquées pour représenter une matrice.

Cliquez ici pour révéler l’aide

Pour initialiser une matrice carrée de taille n, il existe plusieurs méthodes.

  1. Vous pouvez utiliser une boucle pour créer une liste de listes.
matrice = []
for i in range(n):
    ligne = [0] * n  # Crée une ligne de zéros
    matrice.append(ligne)  # Ajoute la ligne à la matrice
  1. Vous pouvez également utiliser une compréhension de liste pour créer la matrice en une seule ligne.
matrice = [[0 for _ in range(n)] for _ in range(n)]
​
# Lecture de la taille de la matrice
print("Entrez la taille de la matrice (n) :")
n = int(input())

# Fonction pour initialiser une matrice n x n avec des zéros
def initialiser_matrice(n):
    return [[0 for _ in range(n)] for _ in range(n)]

# Fonction pour remplir la matrice triangulaire supérieure
def remplir_matrice(matrice):
    n = len(matrice) # taille de la matrice
    k = n * (n - 1) // 2  # Calcul de k
    compteur = 1
    for i in range(n):
        for j in range(i + 1, n):  # Remplissage de la partie triangulaire supérieure
            matrice[i][j] = compteur
            compteur += 1

# Fonction pour afficher la matrice
def afficher_matrice(matrice):
    for ligne in matrice:
        for element in ligne:
            print(element, end=' ')
        print()  # Nouvelle ligne après chaque ligne de la matrice

# Initialisation de la matrice
matrice = initialiser_matrice(n)
# Remplissage de la matrice triangulaire supérieure
remplir_matrice(matrice)
# Affichage de la matrice
afficher_matrice(matrice)