Correction exercices algorithme 1 pdf Algorithmique I Téléch

Correction exercices algorithme 1 pdf Algorithmique I Téléch

Télécharger PDF

Correction des Exercices d'Algorithmique

Ce document présente une série d'exercices d'algorithmique avec leurs solutions en pseudo-code. Il couvre des concepts fondamentaux tels que les structures conditionnelles (SI, SELONQUE), les boucles (POUR, TANTQUE, REPETER...JUSQU'A) et la création de fonctions, essentiels à la logique de programmation. Chaque exercice est accompagné de clarifications et d'explications pour faciliter la compréhension.

Exercice 1 : Résolution d'une Équation du Second Degré

Écrire un algorithme permettant de résoudre une équation du second degré de la forme ax² + bx + c = 0 et d'afficher ses solutions.

Solution 1 : Avec la structure SI...ALORS...SINON

ALGORITHME ResolutionEquationSecondDegre
VAR
    a, b, c, delta, x1, x2, x0 : REEL
DEBUT
    ECRIRE("Saisissez les valeurs a, b et c de l'équation ax² + bx + c = 0 : ")
    LIRE(a, b, c)

    SI (a = 0) ALORS
        ECRIRE("Ceci est une équation du premier degré.")
        SI (b ≠ 0) ALORS
            ECRIRE("La solution est x = ", -c / b)
        SINON
            SI (c = 0) ALORS
                ECRIRE("Infinité de solutions (0x + 0 = 0).")
            SINON
                ECRIRE("Pas de solution (0x + c = 0 avec c ≠ 0).")
            FINSI
        FINSI
    SINON
        delta ← b*b - 4*a*c
        SI (delta > 0) ALORS
            x1 ← (-b - RACINE(delta)) / (2 * a)
            x2 ← (-b + RACINE(delta)) / (2 * a)
            ECRIRE("Les solutions réelles sont x1 = ", x1, " et x2 = ", x2)
        SINON SI (delta = 0) ALORS
            x0 ← -b / (2 * a)
            ECRIRE("La solution réelle unique est x0 = ", x0)
        SINON
            ECRIRE("Pas de solutions réelles (delta < 0).")
        FINSI
    FINSI
FIN
    

Explication : Cet algorithme gère d'abord le cas où le coefficient 'a' est nul, transformant l'équation en un problème du premier degré. Si 'a' n'est pas nul, il calcule le discriminant (delta). La valeur de delta détermine la nature des solutions : deux solutions réelles distinctes si delta est positif, une solution réelle unique si delta est nul, ou aucune solution réelle si delta est négatif.

Solution 2 : Avec la structure SELONQUE

ALGORITHME ResolutionEquationSecondDegre_SelonQue
VAR
    a, b, c, delta, x1, x2, x0 : REEL
DEBUT
    ECRIRE("Saisissez les valeurs de a, b et c de l'équation ax² + bx + c = 0 : ")
    LIRE(a, b, c)

    SI (a = 0) ALORS
        ECRIRE("Ceci est une équation du premier degré.")
        SI (b ≠ 0) ALORS
            ECRIRE("La solution est x = ", -c / b)
        SINON
            SI (c = 0) ALORS
                ECRIRE("Infinité de solutions.")
            SINON
                ECRIRE("Pas de solution.")
            FINSI
        FINSI
    SINON
        delta ← b*b - 4*a*c
        SELONQUE
            delta = 0 :
                x0 ← -b / (2 * a)
                ECRIRE("La solution réelle unique est x0 = ", x0)
            delta > 0 :
                x1 ← (-b - RACINE(delta)) / (2 * a)
                x2 ← (-b + RACINE(delta)) / (2 * a)
                ECRIRE("Les deux solutions réelles sont x1 = ", x1, " et x2 = ", x2)
            SINON :
                ECRIRE("Pas de solutions réelles (delta < 0).")
        FINSELON
    FINSI
FIN
    

Note : La structure SELONQUE est utilisée ici pour simplifier la gestion des cas basés sur la valeur de delta, offrant une alternative plus concise aux instructions SI...ALORS...SINONSI imbriquées.

Exercice 2 : Calcul de la Durée de Vol (même jour)

Écrire un algorithme qui calcule la durée de vol en heures et minutes, connaissant l'heure de départ (h1, m1) et l'heure d'arrivée (h2, m2). On considère que le départ et l'arrivée ont lieu le même jour.

Données : h1, m1, h2 et m2 (heures et minutes). Pour la première solution, on suppose que h2 > h1.

Solution 1 : Cas par cas (gestion des minutes)

ALGORITHME DureeVol
VAR
    h1, h2, m1, m2 : ENTIER
    hd, md : ENTIER
DEBUT
    ECRIRE("Entrez l'horaire de départ (heures minutes) : ")
    LIRE(h1, m1)
    ECRIRE("Entrez l'horaire d'arrivée (heures minutes) : ")
    LIRE(h2, m2)

    SI (m2 >= m1) ALORS
        hd ← h2 - h1
        md ← m2 - m1
    SINON
        hd ← h2 - h1 - 1
        md ← m2 + 60 - m1
    FINSI

    ECRIRE("La durée de vol est : ", hd, "h ", md, "min")
FIN
    

Explication : Cet algorithme gère la soustraction des minutes. Si les minutes d'arrivée sont inférieures aux minutes de départ, il "emprunte" une heure (60 minutes) à la différence d'heures pour effectuer correctement le calcul des minutes.

Solution 2 : Conversion en minutes totales

ALGORITHME DureeVol_Minutes
VAR
    h1, h2, m1, m2 : ENTIER
    hd, md : ENTIER
    tempsDebutMinutes, tempsFinMinutes, dureeTotaleMinutes : ENTIER
DEBUT
    ECRIRE("Entrez l'horaire de départ (heures minutes) : ")
    LIRE(h1, m1)
    ECRIRE("Entrez l'horaire d'arrivée (heures minutes) : ")
    LIRE(h2, m2)

    tempsDebutMinutes ← h1 * 60 + m1
    tempsFinMinutes ← h2 * 60 + m2

    dureeTotaleMinutes ← tempsFinMinutes - tempsDebutMinutes

    hd ← dureeTotaleMinutes DIV 60  (* Division entière pour les heures *)
    md ← dureeTotaleMinutes MOD 60  (* Reste de la division pour les minutes *)

    ECRIRE("La durée de vol est : ", hd, "h ", md, "min")
FIN
    

Explication : Cette méthode est souvent préférée pour sa robustesse. Elle convertit les heures de départ et d'arrivée en un nombre total de minutes depuis minuit, calcule la différence de ces totaux, puis reconvertit cette différence en heures et minutes. Cela simplifie la logique de gestion des cas de minutes.

Exercice 3 : Calcul de la Durée de Vol (sur deux jours)

Écrire un algorithme qui calcule la durée de vol en heures et minutes, sachant que le vol peut s'étendre sur le lendemain (durée totale inférieure à 24 heures).

Données : h1, m1 (heure et minute de départ) et h2, m2 (heure et minute d'arrivée).

Cet exercice demande d'étudier quatre cas possibles en combinant les comparaisons entre h1 et h2, puis m1 et m2 :

  • Cas 1 : h1 <= h2 et m1 <= m2 (Ex: Départ 8h23, Arrivée 13h30)
  • Cas 2 : h1 <= h2 et m1 > m2 (Ex: Départ 8h23, Arrivée 13h15)
  • Cas 3 : h1 > h2 et m1 <= m2 (Ex: Départ 17h30, Arrivée 2h40 - vol le lendemain)
  • Cas 4 : h1 > h2 et m1 > m2 (Ex: Départ 17h30, Arrivée 2h25 - vol le lendemain)

Solution : Avec structures conditionnelles imbriquées

ALGORITHME DureeVol_DeuxJours
VAR
    h1, h2, m1, m2 : ENTIER
    hd, md : ENTIER
DEBUT
    ECRIRE("Entrez l'horaire de départ (h1 m1) et d'arrivée (h2 m2) : ")
    LIRE(h1, m1, h2, m2)

    SI (h2 >= h1) ALORS  (* Arrivée le même jour *)
        SI (m2 >= m1) ALORS
            hd ← h2 - h1
            md ← m2 - m1
        SINON
            hd ← h2 - h1 - 1
            md ← m2 + 60 - m1
        FINSI
    SINON                (* Arrivée le lendemain *)
        SI (m2 >= m1) ALORS
            hd ← h2 - h1 + 24
            md ← m2 - m1
        SINON
            hd ← h2 - h1 + 24 - 1
            md ← m2 + 60 - m1
        FINSI
    FINSI

    ECRIRE("La durée de vol est : ", hd, "h ", md, "min")
FIN
    

Explication : L'algorithme vérifie d'abord si l'arrivée a lieu le même jour (h2 >= h1) ou le lendemain (h2 < h1). Pour le cas du lendemain, 24 heures sont ajoutées à l'heure d'arrivée pour simplifier le calcul des différences horaires. Ensuite, la gestion des minutes est effectuée comme dans l'exercice précédent.

Exercice 4 : Tri de Trois Valeurs Entières par Échanges Successifs

Écrire un algorithme qui lit trois valeurs entières (A, B et C) et les trie par échanges successifs pour les afficher dans l'ordre croissant.

Solution : Utilisation d'une procédure d'échange

ALGORITHME TriSuccessif
VAR
    A, B, C : ENTIER

PROCEDURE ECHANGE(VAR x, y : ENTIER)
VAR temp : ENTIER
DEBUT
    temp ← x
    x ← y
    y ← temp
FIN

DEBUT
    ECRIRE("Entrez les valeurs A, B et C : ")
    LIRE(A, B, C)

    (* Étape 1 : S'assurer que A est le plus petit des deux premiers. *)
    SI (A > B) ALORS
        ECHANGE(A, B)
    FINSI

    (* Étape 2 : S'assurer que B est le plus petit des deux derniers.
       Après cette étape, C contient forcément la plus grande valeur. *)
    SI (B > C) ALORS
        ECHANGE(B, C)
    FINSI

    (* Étape 3 : Une dernière vérification pour s'assurer que A est inférieur à B,
       car l'échange précédent entre B et C aurait pu rendre B plus petit que A. *)
    SI (A > B) ALORS
        ECHANGE(A, B)
    FINSI

    ECRIRE("Les valeurs triées dans l'ordre croissant sont : ", A, ", ", B, ", ", C)
FIN
    

Explication : Cet algorithme utilise une procédure ECHANGE pour permuter deux variables. Le processus de tri par échanges successifs garantit, en trois comparaisons/échanges, que les trois nombres sont placés dans l'ordre croissant. C'est une méthode simple pour un petit nombre d'éléments, basée sur des comparaisons par paires.

Exercice 5 : Algorithme d'une Calculatrice Simple

Écrire un algorithme calculatrice permettant la saisie de deux entiers (a et b) et d'une opération (+, -, *, /) pour afficher le résultat.

Solution : Avec la structure SELONQUE

ALGORITHME CalculatriceSimple
VAR
    a, b : ENTIER
    op   : CARACTERE
DEBUT
    ECRIRE("Saisissez le premier entier : ")
    LIRE(a)
    ECRIRE("Saisissez l'opération (+, -, *, /) : ")
    LIRE(op)
    ECRIRE("Saisissez le deuxième entier : ")
    LIRE(b)

    SELONQUE op
        CASE '+' : ECRIRE("La somme de ", a, " et de ", b, " est égale à ", a + b)
        CASE '-' : ECRIRE("La soustraction de ", a, " et de ", b, " est égale à ", a - b)
        CASE '*' : ECRIRE("Le produit de ", a, " et de ", b, " est égal à ", a * b)
        CASE '/' :
            SI (b = 0) ALORS
                ECRIRE("Erreur : Division par zéro impossible.")
            SINON
                ECRIRE("La division de ", a, " par ", b, " est égale à ", a / b)
            FINSI
        SINON : ECRIRE("Opération invalide. Veuillez utiliser +, -, * ou /.")
    FINSELON
FIN
    

Explication : L'algorithme utilise une structure SELONQUE (similaire à un switch-case dans d'autres langages) pour exécuter l'opération mathématique appropriée en fonction du caractère saisi. Une vérification est essentielle pour empêcher la division par zéro, qui provoquerait une erreur.

Exercice 6 : Somme des Entiers de 1 à N

Écrire un algorithme qui demande un nombre entier positif N et calcule la somme des entiers de 1 jusqu'à ce nombre. Par exemple, si N=4, l'algorithme doit calculer : 1 + 2 + 3 + 4 = 10.

Solution 1 : Avec la boucle POUR

ALGORITHME Somme_Nombres_POUR
VAR
    i, S : ENTIER
    val : ENTIER
DEBUT
    ECRIRE("Entrez un nombre entier positif (N) : ")
    LIRE(val)
    S ← 0
    POUR i DE 1 A val FAIRE
        S ← S + i
    FINPOUR
    ECRIRE("La somme des nombres de 1 à ", val, " est ", S)
FIN
    

Solution 2 : Avec la boucle TANTQUE

ALGORITHME Somme_Nombres_TANTQUE
VAR
    i, S : ENTIER
    val : ENTIER
DEBUT
    ECRIRE("Entrez un nombre entier positif (N) : ")
    LIRE(val)
    S ← 0
    i ← 1
    TANTQUE (i <= val) FAIRE
        S ← S + i
        i ← i + 1
    FINTANTQUE
    ECRIRE("La somme des nombres de 1 à ", val, " est ", S)
FIN
    

Explication : Ces deux algorithmes atteignent le même objectif en utilisant des structures de boucle différentes. La boucle POUR est généralement utilisée lorsque le nombre d'itérations est connu d'avance (ici, 'val' itérations). La boucle TANTQUE est plus flexible et continue tant qu'une condition reste vraie.

Exercice 7 : Moyenne des Entiers de 1 à N

Écrire un algorithme qui demande un nombre entier positif N et calcule la moyenne des entiers de 1 jusqu'à ce nombre. Par exemple, si N=4, l'algorithme doit calculer : (1 + 2 + 3 + 4) / 4 = 10 / 4 = 2.5.

Solution 1 : Avec la boucle POUR

ALGORITHME Moyenne_Nombres_POUR
VAR
    i, S : ENTIER
    val : ENTIER
    Moyenne : REEL
DEBUT
    ECRIRE("Entrez un nombre entier positif (N) : ")
    LIRE(val)
    S ← 0
    POUR i DE 1 A val FAIRE
        S ← S + i
    FINPOUR
    SI (val > 0) ALORS
        Moyenne ← S / val
        ECRIRE("La moyenne des nombres de 1 à ", val, " est ", Moyenne)
    SINON
        ECRIRE("Impossible de calculer la moyenne pour un nombre non positif.")
    FINSI
FIN
    

Solution 2 : Avec la boucle TANTQUE

ALGORITHME Moyenne_Nombres_TANTQUE
VAR
    i, S : ENTIER
    val : ENTIER
    Moyenne : REEL
DEBUT
    ECRIRE("Entrez un nombre entier positif (N) : ")
    LIRE(val)
    S ← 0
    i ← 1
    TANTQUE (i <= val) FAIRE
        S ← S + i
        i ← i + 1
    FINTANTQUE
    SI (val > 0) ALORS
        Moyenne ← S / val
        ECRIRE("La moyenne des nombres de 1 à ", val, " est ", Moyenne)
    SINON
        ECRIRE("Impossible de calculer la moyenne pour un nombre non positif.")
    FINSI
FIN
    

Explication : Similaire à l'exercice de la somme, ces algorithmes calculent d'abord la somme des entiers de 1 à N, puis la divisent par N pour obtenir la moyenne. Il est crucial d'utiliser une variable de type REEL pour la moyenne afin d'obtenir un résultat précis et de gérer le cas où val est nul ou négatif pour éviter une division par zéro.

Exercice 8 : Somme des Prix d'Articles (Terminée par Zéro)

Écrire un algorithme qui affiche la somme des prix d'une suite d'articles (entiers en DH) saisis par l'utilisateur. La saisie des prix se termine par l'entrée de la valeur zéro.

Solution 1 : Avec la boucle TANTQUE

ALGORITHME Somme_Prix_TANTQUE
VAR
    p, S : ENTIER
DEBUT
    S ← 0
    ECRIRE("Entrez le prix du 1er article (0 si Fin) : ")
    LIRE(p)
    TANTQUE (p ≠ 0) FAIRE
        S ← S + p
        ECRIRE("Entrez le prix de l'article suivant (0 si Fin) : ")
        LIRE(p)
    FINTANTQUE
    ECRIRE("La somme totale des prix des articles est : ", S, " DH")
FIN
    

Solution 2 : Avec la boucle REPETER...JUSQU'A (optimisée)

ALGORITHME Somme_Prix_REPETER_Optimisee
VAR
    p, S : ENTIER
DEBUT
    S ← 0
    REPETER
        ECRIRE("Entrez le prix de l'article (0 si Fin) : ")
        LIRE(p)
        SI (p ≠ 0) ALORS (* N'ajoute à la somme que si le prix n'est pas la valeur de terminaison *)
            S ← S + p
        FINSI
    JUSQU'A (p = 0)
    ECRIRE("La somme totale des prix des articles est : ", S, " DH")
FIN
    

Explication : La boucle TANTQUE est une boucle pré-conditionnelle : elle teste la condition avant chaque itération, ce qui est utile si la première valeur peut déjà être la condition de fin. La boucle REPETER...JUSQU'A est post-conditionnelle : elle exécute le corps de la boucle au moins une fois avant de tester la condition. La version optimisée de REPETER évite d'ajouter la valeur zéro (qui indique la fin de la saisie) à la somme totale.

Exercice 9 : Trouver le Plus Grand de N Nombres et son Rang

Écrire un algorithme qui demande successivement N nombres à l'utilisateur (ici, N=10) et affiche à la fin le plus grand de ces nombres ainsi que son rang (sa position de saisie).

Exemple :
Entrez le nombre numéro 1 : 13
Entrez le nombre numéro 2 : 17
...
Entrez le nombre numéro 10 : 5
Le plus grand de ces nombres est : 17
C'était le 2ème nombre saisi.

Solution : Avec la boucle TANTQUE

ALGORITHME TrouverMaxEtRang
CONST NBRE_ELEMENTS = 10 (* Nombre d'éléments à saisir *)

VAR
    indice, val : ENTIER
    plusGrand : ENTIER
    indiceGrand : ENTIER
DEBUT
    ECRIRE("Entrez le 1er nombre : ")
    LIRE(val)
    plusGrand ← val      (* Initialisation avec le premier nombre *)
    indiceGrand ← 1      (* Son rang est 1 *)

    indice ← 2
    TANTQUE (indice <= NBRE_ELEMENTS) FAIRE
        ECRIRE("Entrez le nombre numéro ", indice, " : ")
        LIRE(val)
        SI (val > plusGrand) ALORS
            plusGrand ← val
            indiceGrand ← indice
        FINSI
        indice ← indice + 1
    FINTANTQUE

    ECRIRE("Le plus grand de ces nombres est : ", plusGrand)
    ECRIRE("C'était le ", indiceGrand, "ème nombre saisi.")
FIN
    

Explication : L'algorithme initialise les variables plusGrand et indiceGrand avec la première valeur saisie. Il parcourt ensuite les nombres restants en comparant chaque nouvelle valeur avec le plusGrand actuel. Si une valeur plus grande est trouvée, les variables plusGrand et indiceGrand sont mises à jour en conséquence.

Exercice 10 : Le Jeu de Devinette

Écrire un programme où le premier utilisateur saisit un entier que le second doit deviner. Le programme indique si l'entier cherché est plus grand ou plus petit que la proposition. Un score (nombre de tentatives) est affiché à la fin.

Solution 1 : Avec la boucle TANTQUE

ALGORITHME JeuDevinette_TANTQUE
VAR
    nombreATrouver, proposition, nbTentatives : ENTIER
DEBUT
    ECRIRE("Premier joueur : Entrez le nombre à deviner : ")
    LIRE(nombreATrouver)
    
    ECRIRE("Second joueur : Entrez un nombre (premier essai) : ")
    LIRE(proposition)
    nbTentatives ← 1

    TANTQUE (nombreATrouver ≠ proposition) FAIRE
        SI (proposition > nombreATrouver) ALORS
            ECRIRE("Le nombre cherché est plus petit que ", proposition, ".")
        SINON
            ECRIRE("Le nombre cherché est plus grand que ", proposition, ".")
        FINSI
        nbTentatives ← nbTentatives + 1
        ECRIRE("Entrez un autre nombre (tentative N° ", nbTentatives, ") : ")
        LIRE(proposition)
    FINTANTQUE

    ECRIRE("C'est gagné ! Le nombre de tentatives est : ", nbTentatives)
FIN
    

Solution 2 : Avec la boucle REPETER...JUSQU'A

ALGORITHME JeuDevinette_REPETER
VAR
    nombreATrouver, proposition, nbTentatives : ENTIER
DEBUT
    ECRIRE("Premier joueur : Entrez le nombre à deviner : ")
    LIRE(nombreATrouver)
    nbTentatives ← 0 (* Initialisé à 0 car la première tentative est incrémentée dans la boucle *)

    REPETER
        nbTentatives ← nbTentatives + 1
        ECRIRE("Second joueur : Entrez un nombre (tentative N° ", nbTentatives, ") : ")
        LIRE(proposition)

        SELONQUE
            proposition > nombreATrouver : ECRIRE("Le nombre cherché est plus petit que ", proposition, ".")
            proposition < nombreATrouver : ECRIRE("Le nombre cherché est plus grand que ", proposition, ".")
        FINSELON
    JUSQU'A (nombreATrouver = proposition)

    ECRIRE("C'est gagné ! Le nombre de tentatives est : ", nbTentatives)
FIN
    

Explication : Les deux versions implémentent le jeu de devinette. La version TANTQUE demande la première proposition avant d'entrer dans la boucle. La version REPETER...JUSQU'A exécute au moins une fois le corps de la boucle, demandant la proposition dès le début de la première itération. Les messages d'indication sont affichés à chaque échec.

Exercice 11 : Calcul du PGCD par Soustractions Successives

Écrire une fonction F_PGCD qui retourne le Plus Grand Commun Diviseur (PGCD) de deux nombres entiers positifs en utilisant la méthode des soustractions successives (une variante de l'algorithme d'Euclide).

Principe : Soustraire le plus petit des deux entiers du plus grand jusqu'à ce qu'ils soient égaux. Le résultat est le PGCD.

Exemple : Calcul du PGCD(24, 36)
1. a=24, b=36. Comme a < b, on fait b = b - a = 36 - 24 = 12. (Nouvelles valeurs : a=24, b=12)
2. a=24, b=12. Comme b < a, on fait a = a - b = 24 - 12 = 12. (Nouvelles valeurs : a=12, b=12)
3. a=12, b=12. Comme a = b, l'algorithme s'arrête. Le PGCD est 12.

Solution : Fonction F_PGCD par soustractions

FONCTION F_PGCD_Soustractions(a, b : ENTIER) : ENTIER
DEBUT
    REPETER
        SI (a > b) ALORS
            a ← a - b
        SINON SI (b > a) ALORS
            b ← b - a
        FINSI
    JUSQU'A (a = b)
    RETOURNER(a) (* ou b, puisque a et b sont égaux à la fin *)
FIN
    

Explication : Cette fonction implémente l'algorithme d'Euclide par soustractions. Elle se répète tant que les deux nombres ne sont pas égaux. À chaque itération, le plus grand des deux nombres est remplacé par la différence entre le plus grand et le plus petit. Lorsque les deux nombres deviennent égaux, cette valeur est leur Plus Grand Commun Diviseur.

Exercice 12 : Calcul du PGCD par l'Algorithme d'Euclide (avec Modulo)

Écrire la même fonction F_PGCD en utilisant l'algorithme d'Euclide standard, basé sur la méthode des divisions euclidiennes (opérateur modulo).

Principe : Le PGCD de deux nombres entiers positifs (a, b) est égal au PGCD de b et du reste de la division de a par b. On répète cette opération jusqu'à ce que le reste soit 0. Le PGCD est alors le dernier diviseur non nul (la valeur de b juste avant que le reste devienne 0).

Solution 1 : Avec la boucle TANTQUE

FONCTION F_PGCD_Modulo_TANTQUE(a, b : ENTIER) : ENTIER
VAR
    r : ENTIER
    temp : ENTIER
DEBUT
    (* S'assurer que 'a' est toujours supérieur ou égal à 'b' pour simplifier le premier calcul de modulo,
       bien que l'algorithme fonctionne dans tous les cas tant que b est non nul. *)
    SI (a < b) ALORS
        temp ← a
        a ← b
        b ← temp
    FINSI

    r ← a MOD b (* Reste de la division entière *)
    TANTQUE (r ≠ 0) FAIRE
        a ← b
        b ← r
        r ← a MOD b
    FINTANTQUE
    RETOURNER(b)
FIN
    

Solution 2 : Avec la boucle REPETER...JUSQU'A

FONCTION F_PGCD_Modulo_REPETER(a, b : ENTIER) : ENTIER
VAR
    r : ENTIER
    temp : ENTIER
DEBUT
    (* S'assurer que 'a' est toujours supérieur ou égal à 'b' pour simplifier le premier calcul de modulo. *)
    SI (a < b) ALORS
        temp ← a
        a ← b
        b ← temp
    FINSI

    REPETER
        r ← a MOD b
        a ← b
        b ← r
    JUSQU'A (r = 0)
    RETOURNER(b)
FIN
    

Explication : Ces fonctions implémentent l'algorithme d'Euclide classique, qui est plus efficace que la méthode par soustractions pour de grands nombres. L'opérateur modulo (MOD) est utilisé pour trouver le reste de la division. La boucle continue jusqu'à ce que le reste devienne zéro, le PGCD étant alors la valeur du dernier diviseur (la variable b).

Foire aux Questions (FAQ)

Qu'est-ce qu'un algorithme en programmation ?

Un algorithme est une séquence finie et non ambiguë d'instructions ou d'opérations logiques conçues pour résoudre un problème spécifique ou réaliser une tâche donnée. En programmation, les algorithmes sont la base de tout logiciel, décrivant étape par étape comment atteindre un objectif, avant d'être traduits dans un langage de code compréhensible par une machine.

Pourquoi utiliser des pseudo-codes pour décrire des algorithmes ?

Le pseudo-code est un langage informel qui permet aux développeurs de décrire la logique d'un algorithme sans se soucier de la syntaxe stricte d'un langage de programmation réel. Il combine des éléments de langage naturel avec des structures de contrôle (comme SI, TANTQUE) et des mots-clés de programmation, rendant l'algorithme facile à concevoir, à comprendre et à communiquer avant l'étape de codage.

Quelle est la différence entre une boucle TANTQUE et une boucle REPETER...JUSQU'A ?

La distinction principale réside dans le moment de l'évaluation de la condition. Une boucle TANTQUE (ou "While") est pré-conditionnelle : elle teste la condition AVANT chaque itération. Si la condition est fausse dès le départ, le corps de la boucle ne sera jamais exécuté. Une boucle REPETER...JUSQU'A (ou "Do-While", "Repeat-Until") est post-conditionnelle : elle exécute le corps de la boucle au moins une fois, puis teste la condition APRÈS chaque itération pour décider si elle doit continuer.

Partagez vos remarques, questions ou propositions d'amélioration ici...

Enregistrer un commentaire (0)
Plus récente Plus ancienne

Publicité 1

Publicité 2