Flowchart Itération Cours 04
Flowchart / Organigramme Un organigramme est « une représentation graphique normalisée de l'enchaînement des opérations et des décisions effectuées par un programme d'ordinateur » (wikipedia) Exemple ci-contre
Flowchart / Organigramme
Flowchart / Organigramme
Flowchart / Organigramme
Flowchart / Organigramme : exemple 1
Problème du robot (rappel) Le robot dispose d’une quantité infinie de fûts de bière qui ont chacun une capacité limitée. Le robot fait face à une file de personnes désirant boire une bière On ne connait pas la taille de la file Chaque personne ne veut qu’une seule bière Une personne qui est servie ne revient plus dans la file Dès que le robot commence à servir de la bière, plus personne n’intègre la file (taille fixe et finie) Le robot peut vérifier 2 choses: Le fût est-il vide? Y-a-t-il encore une personne à servir? Le robot peut faire 2 actions: Servir une bière Changer le fût Quelle serait la séquence d’étapes à réaliser par le robot pour servir toute la file?
Problème du robot : algorithme itératif Faisons abstraction du fût. Que doit faire le robot serveur de bière ? Combien de fois doit-il servir à boire ? Quel serait l’algorithme ? « Tant qu’il y a quelqu’un dans la file, il faut lui servir à boire ».
Problème du robot : algorithme itératif TANT QUE il y a une personne à servir = vrai FAIRE servir à boire à la personne FIN TANT QUE Condition de séjour BOUCLE
Problème du robot : algorithme itératif Intégrons la vérification sur le fût.
Ecritures répétées Quelle serait la séquence d’instruction nécessaire pour écrire 3 fois à l’écran “Hello World” ? ECRIRE “Hello world” Quid si on doit écrire 300 fois “Hello World” ?
Ecritures répétées Quid si on doit écrire 300 fois “Hello World” ? TANT QUE ??? FAIRE ECRIRE “Hello World” FIN TANT QUE Objectif de la boucle : Ecrire 300 fois “Hello World” Comment faire? Compter le nombre de fois que l’on passe dans la boucle et arrêter après la 300ième fois
Ecritures répétées Compter le nombre de passage ⇒ Utilisation d’un compteur TANT QUE cpt < 300 FAIRE ECRIRE “Hello World” FIN TANT QUE Suffisant ?
Ecritures répétées Compter le nombre de passage ⇒ Utilisation d’un compteur cpt ← 0 TANT QUE cpt < 300 FAIRE ECRIRE “Hello World” cpt ← cpt + 1 FIN TANT QUE Attention: Veillez toujours à initialiser vos variables correctement (ex.: compteur) et incrémenter le compteur
Flowchart / Organigramme : exemples 2 et 3 Séquence linéaire Séquence alternative « si … alors … sinon »
Flowchart / Organigramme : exemples 4 et 5 Séquence répétitive « tant que … faire … » Séquence répétitive « répéter … jusqu'à … »
Exercices Afficher les 100 premiers nombres entiers positif à partir de 0 (inclus) Afficher les nombres entiers compris entre 50 et 100 (inclus) Afficher les nombres pairs entre 0 à 20 (inclus)
Exercice 4 DONNEES IN: n : integer PRECONDITIONS n >0 POSTCONDITIONS / INTERACTIONS Les nombres de zéro à n inclus sont affichés
Exercice 5 DONNEES IN: n, m : integer PRECONDITIONS n < m POSTCONDITIONS / INTERACTIONS Les nombres entiers compris entre n et m inclus sont affichés
Exercice 6 DONNEES IN: n, m : integer PRECONDITIONS n < m POSTCONDITIONS / INTERACTIONS Les nombres pairs compris entre n et m inclus sont affichés
Exercice 7 DONNEES IN: n, m : integer PRECONDITIONS / POSTCONDITIONS INTERACTIONS Les nombres pairs compris entre n et m inclus sont affichés
Exercice 8 DONNEES Les nombres sont entiers PRECONDITIONS / POSTCONDITIONS INTERACTIONS Demander à l’utilisateur de rentrer des nombres. Dès que l’utilisateur rentre la lettre ‘q’, afficher la somme des nombres
Exercice 9 DONNEES IN: n, m : integer PRECONDITIONS n, m > 0 POSTCONDITIONS / INTERACTIONS Affiche : m * n CONSIGNE : Vous ne pouvez pas utiliser l’opérateur de multiplication.
Exercice 10 DONNEES IN: n, m : integer PRECONDITIONS n, m > 0 POSTCONDITIONS / INTERACTIONS Affiche : nm CONSIGNE : Vous devez utiliser l’opérateur de multiplication.
Exercice 11 DONNEES IN: n, m : integer PRECONDITIONS n, m >= 0 POSTCONDITIONS / INTERACTIONS Affiche : nm CONSIGNE : Vous devez utiliser l’opérateur de multiplication.
Exercice 12 Factorielle: 2 ! = 1*2 5 ! = 1*2*3*4*5 DONNEES IN: n : integer PRECONDITIONS n > 0 POSTCONDITIONS / INTERACTIONS Affiche: n ! Factorielle: 2 ! = 1*2 5 ! = 1*2*3*4*5 10 ! = 1*2*3*4*5*6*7*8*9*10
Définition d’un nombre premier Nombre ayant strictement 2 diviseurs (1 et lui même) 2 = Nombre premier ? Oui (1 et 2 sont les uniques diviseurs) 3 = Nombre premier ? Oui (1 et 3 sont les uniques diviseurs) 4 = Nombre premier ? Non (1, 2 et 4 sont diviseurs) 1 = Nombre premier ? Non (il n’y a qu’un seul diviseur) 64 = Nombre premier ? Non
Algorithme des nombres premiers Idées de base pour déterminer si un nombre est premier? Exemple: 65 Parcourir les nombres entre de 2 à 64 et vérifier si l’un d’eux est diviseur S’il existe un tel nombre, que conclure?
Algorithme des nombres premiers Le nombre x est-il premier? Si x = 1 ⇒ Pas premier Si x = 2 ⇒ Premier Si x > 2 ⇒ Essayer de trouver un nombre compris entre [2 .. x-1] qui divise x Il faut les parcourir tous Tant qu’on a pas trouvé un tel nombre, on peut faire l’hypothèse que x est premier Si un seul nombre est diviseur, alors on peut conclure que x n’est pas premier
Algorithme (n°1) des nombres premiers estPremier ← VRAI SI (x = 1) ALORS estPremier ← FAUX FIN SI i ← 2 TANT QUE i < x FAIRE SI (x MOD i = 0) ALORS FIN_SI i ← i + 1 FIN TANT QUE
Algorithme des nombres premiers Pas moyen de faire plus rapide? Faut-il tester tous les nombre entre [2 .. x-1] ? Si le nombre n’est pas divisible par 2… Il ne sera pas divisible par 4 Il ne sera pas divisible par 6 Il ne sera pas divisible par 8 ….
Algorithme (n°2) des nombres premiers estPremier ← VRAI SI (x = 1 OU x = 0 OU (x MOD 2 = 0 AND x ≠ 2)) ALORS estPremier ← FAUX FIN SI i ← 3 TANT QUE i < x FAIRE SI (x MOD i = 0) ALORS FIN_SI i ← i + 2 FIN TANT QUE
Afficher les 10 premiers nombres premiers Quelques idées dans le désordre : Dès qu’on en a trouvé 10, on peut stopper. Ne pas confondre: 2 compteurs sont nécessaires “Les 10 premiers nombres premiers” “Les nombres premiers entre 0 et 10” Le premier compteur parcourt tous les nombres entiers (afin de voir s’il s’agit d’un nombre premier). Tester pour 1 Si premier, afficher, sinon on passe au suivant Le deuxième compte le nombre de nombre premier affiché jusqu’ici. Tester pour 2 Tester pour 3 Si premier, afficher, sinon on passe au suivant …..
Afficher les 10 premiers nombres premiers j = 0 // Nombre de nombres premiers affichés x = 0 // Nombre actuellement testé TANT QUE j < 10 FAIRE [ALGORITHME NOMBRE PREMIER] SI estPremier ALORS j = j + 1 ECRIRE x ECRIRE RETOUR LIGNE FIN SI x = x + 1 FIN TANT QUE