Outils pour utilisateurs

Outils du site


nsi:premiere:structures_algo

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
nsi:premiere:structures_algo [2021/06/17 00:17] goupillwikinsi:premiere:structures_algo [2022/08/28 22:30] (Version actuelle) goupillwiki
Ligne 1: Ligne 1:
 ====== Structures de contrôle utilisées dans les algorithmes ====== ====== Structures de contrôle utilisées dans les algorithmes ======
 +
 +{{ .:algorithme:algorithme_structures_python.eleves.pdf |Fiche à imprimer}}
  
 Dans un algorithme, les lignes sont lues l'une après l'autre dans l'ordre, sauf mention contraire : On peut parfois sauter des lignes et on peut parfois revenir en arrière. Dans un algorithme, les lignes sont lues l'une après l'autre dans l'ordre, sauf mention contraire : On peut parfois sauter des lignes et on peut parfois revenir en arrière.
Ligne 9: Ligne 11:
 On pourrait imaginer diverses structures mais on choisit de se limiter à certaines. On pourrait imaginer diverses structures mais on choisit de se limiter à certaines.
  
-== Structure de test ==+===== Structure de test =====
  
 La structure de base est le ''%%SI%%'' auquel on peut ajouter les blocs ''%%SINON SI%%'' et ''%%SINON%%''. La structure de base est le ''%%SI%%'' auquel on peut ajouter les blocs ''%%SINON SI%%'' et ''%%SINON%%''.
Ligne 15: Ligne 17:
 Il s'agit d'exécuter conditionnellement. Il s'agit d'exécuter conditionnellement.
  
 +==== SI seul ====
  
-<code lang-none>+<code lang-none linenums>
 SI condition ALORS SI condition ALORS
-    lignes à exécuter quand la condition est vérifiée+    lignes à exécuter quand si la condition est vérifiée
 FIN SI FIN SI
 +suite...
 </code> </code>
 +
 +  * En ligne 1, on examine la condition,
 +  * si elle est vraie à ce moment-la, on entre dans le SI, ligne 2
 +  * mais si elle est fausse, on passe directement à la ligne 4
 +
 +==== SI ... SINON ====
  
 <code lang-none linenums> <code lang-none linenums>
Ligne 27: Ligne 37:
 SINON SINON
     lignes à exécuter quand la condition n'est pas vérifiée     lignes à exécuter quand la condition n'est pas vérifiée
-FIN SI+FIN 
 +suite...
 </code> </code>
  
-== Renvoi ==+  * ligne 1, la condition est examinée, 
 +  * si elle est vrai, on exécute le contenu de la partie SI (ligne 2) puis on saute la partie SINON 
 +  * si elle est fausse, on saute la partie SI et on exécute directement la partie SINON (ligne 4) 
 +  * puis on passe à la suite : ligne 6 
 + 
 +===== Renvoi =====
  
-On fournit des données à un algorithmes et il va les utiliser pour son calcul. Ce sont les **entrées**.+On fournit des données à un algorithme et il va les utiliser pour son calcul. Ce sont les **entrées**.
  
 Souvent, on attend de l'algorithme qu'il nous fournisse un résultat (ou plusieurs). C'est la sortie. Souvent, on attend de l'algorithme qu'il nous fournisse un résultat (ou plusieurs). C'est la sortie.
Ligne 44: Ligne 60:
 Après ''%%RENVOYER%%'' l'algorithme s'arrête et ne fait plus rien. Après ''%%RENVOYER%%'' l'algorithme s'arrête et ne fait plus rien.
  
-== Répéter ==+<WRAP tip>Le mot utilisé dans les langages est ''%%return%%'', c'est pourquoi on dit parfois RETOURNER au lieu de RENVOYER, mais RENVOYER est mieux.</WRAP> 
 + 
 +===== Répétition / boucle =====
  
 Il s'agit d'une boucle dans le sens où quelques lignes de l'algorithme vont être exécutées plusieurs fois de suite, en boucle. La question est de savoir : combien de fois. Il s'agit d'une boucle dans le sens où quelques lignes de l'algorithme vont être exécutées plusieurs fois de suite, en boucle. La question est de savoir : combien de fois.
  
-Quand on connaît d'avance le nombre de répétition, on parle de **boucle bornée**. Quand on ne le connaît pas et que le nombre de répétition est liée à une condition, on parle de **boucle non bornée**.+==== boucles bornées ==== 
 + 
 +Quand on connaît d'avance le nombre de répétition, on parle de **boucle bornée**. 
 + 
 +=== RÉPÉTER n FOIS ===
  
 <code lang-none linenums> <code lang-none linenums>
Ligne 55: Ligne 77:
     dans ce cas on connaît d'avance le nombre de répétition     dans ce cas on connaît d'avance le nombre de répétition
     cette structure n'existe pas en Python     cette structure n'existe pas en Python
-FIN RÉPÉTER+FIN 
 +suite...
 </code> </code>
 +
 +Compte le nombre de répétition faites. En ligne 1, s'il reste des répétitions à faire, exécute les lignes de la boucle (2 à 4). En ligne 5 on retourne directement en ligne 1 pour voir s'il reste des répétitions à faire. S'il n'y en a plus, on passe en ligne 6 pour la suite.
 +
 +=== POUR ===
 +
 +Ajoute un compteur qui est mis à jour à chaque répétition. Le compteur peut être utilisé dans la boucle ou mais ce n'est pas obligé.
 +
 +<code lang-none linenums>
 +POUR compteur ALLANT DE début À fin FAIRE
 +    lignes répétées
 +    lors de la première répétition, le compteur vaut la valeur début
 +    à chaque répétition, le compteur est augmenté de 1
 +    la valeur fin est incluse et correspond à la dernière répétition
 +    n'existe pas en Python
 +FIN
 +</code>
 +
 +<WRAP tip>
 +  * J'insiste, dans cette écriture, ''%%fin%%'' est inclus.
 +  * C'est la boucle POUR - FOR la plus traditionnelle en programmation. Pourtant ce n'est pas cette forme qui a été retenue en Python.
 +</WRAP>
 +
 +=== POUR CHAQUE ===
 +
 +<code lang-none linenums>
 +POUR CHAQUE élément DANS ensemble FAIRE
 +    lignes répétées
 +    la valeur de élément énumères les valeurs contenues dans ensemble
 +    ensemble est donc une sorte de collection d'éléments pouvant être énumérés
 +    selon le cas, on pourra compter ou pas sur un certain ordre d'énumération des éléments.
 +FIN
 +</code>
 +
 +==== boucles non bornées ====
 +
 +Quand on ne le connaît pas et que le nombre de répétition est liée à une condition, on parle de **boucle non bornée**.
 +
 +=== TANT QUE ===
 +
 +Deux variantes, soit la condition est examinée au début de la boucle :
  
 <code lang-none linenums> <code lang-none linenums>
-RÉPÉTER TANT QUE condition+TANT QUE condition RÉPÉTER
     lignes qui sont répétées     lignes qui sont répétées
     dans ce cas on ne connaît pas d'avance le nombre de répétition     dans ce cas on ne connaît pas d'avance le nombre de répétition
Ligne 65: Ligne 128:
     si elle est fausse, on saute en ligne 8     si elle est fausse, on saute en ligne 8
     en arrivant en ligne 7 on saute en ligne 1 pour réexaminer la condition     en arrivant en ligne 7 on saute en ligne 1 pour réexaminer la condition
-FIN RÉPÉTER+FIN
 suite... suite...
 </code> </code>
 +
 +Soit la condition est examinée après la boucle.
  
 <code lang-none linenums> <code lang-none linenums>
Ligne 77: Ligne 142:
 suite... suite...
 </code> </code>
 +
 +<WRAP tip>Les boucles ''%%RÉPÉTER TANT QUE%%'' suffisent à tout faire. On peut qualifier les autres boucles de //sucre syntaxique//, c'est à dire de possibilités destinées à l'écriture plus lisible.</WRAP>
 +
 +=== JUSQU'À ===
 +
 +Très proche des précédents.
  
 <code lang-none linenums> <code lang-none linenums>
Ligne 84: Ligne 155:
     est vraie que l'on arrête la boucle.     est vraie que l'on arrête la boucle.
     n'existe pas en Python     n'existe pas en Python
-FIN RÉPÉTER+FIN
 suite... suite...
 </code> </code>
  
-== Pour ==+<WRAP tip>Ces écritures ne sont pas normalisées. On peut les rencontrer avec de petites variations sans importances. Par exemple, on pourra rencontrer ''%%TANT QUE ... FAIRE%%'' au lieu de ''%%TANT QUE ... RÉPÉTER%%''.</WRAP>
  
-Il s'agit là encore de boucles répétitives, des boucles bornées Comme dans le cas ''%%RÉPÉTER nombre FOIS%%''. Les boucles ''%%POUR%%'' y ajoute un compteur qui peut être exploité dans l'exécution de la boucle.+===== Pas de chevauchement =====
  
-> Les boucles ''%%RÉPÉTER TANT QUE%%'' suffise à tout faire. On peut qualifier les autres boucles de //sucre syntaxique//, c'est à dire de possibilités destinées à l'écriture plus lisible.+J'ai choisi d'utiliser le mot ''%%FIN%%'' pour achever les blocs. Il n'y a jamais ambiguïté. 
 +Exemple :
  
 <code lang-none linenums> <code lang-none linenums>
-POUR compteur ALLANT DE début À fin +i = 0 
-    lignes répétées +RÉPÉTER JUSQU'À i = 10 
-    lors de la première répétition, le compteur vaut la valeur début +    ajouter 1 à i 
-    à chaque répétition, le compteur est augmenté de 1 +    SI i pair ALORS 
-    la valeur fin est incluse et correspond à la dernière répétition +        afficher i 
-    n'existe pas en Python +    FIN 
-FIN POUR+FIN
 </code> </code>
  
-<code lang-none linenums> +Dans ce cas, le ''%%FIN%%'' en ligne 6 correspond à la dernière structure ouverte, c'est à dire à ''%%SI%%'' en ligne 4. Le ''%%FIN%%'' en ligne 7 correspond au ''%%RÉPÉTER%%'' en ligne 2. 
-POUR CHAQUE élément DE ensemble + 
-    lignes répétées +Vous pouvez comparer avec de parenthèses : $(2 - (3 + 5)) \times 2$. Quand on rencontre '')'', il n'y a aucune ambiguïté, on sait à quelle ''('' elle correspond
-    la valeur de élément énumères les valeurs contenues dans ensemble + 
-    ensemble est donc une sorte de collection d'éléments pouvant être énumérés + 
-    selon le cas, on pourra compter ou pas sur un certain ordre d'énumération des éléments+Les marges à gauche -- que l'on appelle des **indentations** -- permettent de faire le lien facilement.
-FIN POUR +
-</code>+
  
-=== En Python ===+===== En Python =====
  
 Comme Python est notre langage principal, il est utile de savoir que les structures disponibles seront Comme Python est notre langage principal, il est utile de savoir que les structures disponibles seront
Ligne 119: Ligne 189:
   * ''%%SI...%%''   * ''%%SI...%%''
   * ''%%RENVOYER%%''   * ''%%RENVOYER%%''
-  * ''%%RÉPÉTER TANT QUE%%''+  * ''%%TANT QUE RÉPÉTER%%''
   * ''%%POUR CHAQUE%%''   * ''%%POUR CHAQUE%%''
  
nsi/premiere/structures_algo.1623881872.txt.gz · Dernière modification : de goupillwiki