Informatique Générale Cours 3. Boucles Tant Que Boucles Pour

Documents pareils
Cours d algorithmique pour la classe de 2nde

Algorithmique et programmation : les bases (VBA) Corrigé

Programmation C++ (débutant)/instructions for, while et do...while

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Algorithmique et structures de données I


Examen Médian - 1 heure 30

TRIGONOMETRIE Algorithme : mesure principale

Corrigé des TD 1 à 5

Introduction à MATLAB R

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

Cours Informatique Master STEP

Algorithmique et Programmation, IMA

Application 1- VBA : Test de comportements d'investissements

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Organigramme / Algorigramme Dossier élève 1 SI

Bases de programmation. Cours 5. Structurer les données

Initiation à la programmation en Python

Algorithmique avec Algobox

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

Cours d Informatique

Travaux Pratiques de Commande par ordinateur 1 TRAVAUX PRATIQUES

1. Structure d'un programme FORTRAN 95

Conventions d écriture et outils de mise au point

STAGE IREM 0- Premiers pas en Python

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

alg - Classes, instances, objets [oo] Exercices résolus

Visual Basic for Applications

PROGRAMMATION EVENEMENTIELLE sur EXCEL

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

Propagation sur réseau statique et dynamique

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Algorithme. Table des matières

Recherche dans un tableau

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

TD3 - Facturation avec archivage automatisé

Les suites numériques

Date M.P Libellé Catégorie S.Catégorie Crédit Débit Solde S.B

Utilisation d objets : String et ArrayList

CORRECTION EXERCICES ALGORITHME 1

Chapitre 2 Devine mon nombre!

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

L ALGORITHMIQUE. Algorithme

C++ - Classes, instances, objets [oo] Exercices résolus

Programmer en JAVA. par Tama

Série TD 3. Exercice 4.1. Exercice 4.2 Cet algorithme est destiné à prédire l'avenir, et il doit être infaillible! Exercice 4.3. Exercice 4.

Programmation Objet - Cours II

TD3: tableaux avancées, première classe et chaînes

Module Administration BD Chapitre 1 : Surcouche procédurale dans les SGBDS

Introduction à l algorithmique et à la programmation M1102 CM n 3

FORMATION au VBA Pour EXCEL. Version 2007 & +

Formation VBA 3 Interagir

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

1 Recherche en table par balayage

Cours d Algorithmique et de Langage C v 3.0

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Listes de validation dans OpenOffice Calc

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Gestion mémoire et Représentation intermédiaire

Les structures. Chapitre 3

1. Installation de COMPTINE

Rappels sur les suites - Algorithme

Notions fondamentales du langage C# Version 1.0

EXCEL TUTORIEL 2012/2013

POUR ALLER UN PEU PLUS LOIN SUR UN TABLEUR. Version EXCEL

Programmation Visual Basic. Visite guidée d'un programme Visual Basic 6.0

Algorithmes récursifs

Java Licence Professionnelle CISII,

Correction TD algorithmique

Problèmes liés à la concurrence

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

L informatique en BCPST

Le prototype de la fonction main()

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Algorithmique & programmation


Algorithmique avec Algobox

Partie 1. Fonctions plus complexes dans Excel. Fonctions Si(), Et(), Ou() et fonctions imbriquées. Opérateurs logiques. I.1.

Plan du cours. Historique du langage Nouveautés de Java 7

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Rapport de Mini-Projet en ArcGIS Engine

La Clé informatique. Formation Excel XP Aide-mémoire

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Guide de formation avec cas pratiques. Programmation. Philippe Moreau Patrick Morié. Daniel-Jean David

Définitions. Numéro à préciser. (Durée : )

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Stockez et organisez vos données sous Excel. Une approche systématique, structurée et simplifiée

GUIDE D UTILISATION 1

1. Introduction Création d'une requête...2

Visual Basic.NET Interaction avec Excel

REALISATION d'un. ORDONNANCEUR à ECHEANCES

Programmation VBA. Excel Daniel-Jean David. et Groupe Eyrolles, 2014, ISBN :

Présentation du PL/SQL

UML et les Bases de Données

Transcription:

Informatique Générale Cours 3 Boucles Tant Que Boucles Pour 1

2 La Boucle TantQue

Les boucles, à quoi ca sert? Exemple du contrôle de saisie Dans le cas d une saisie au clavier (une lecture), où par exemple, le programme pose une question à laquelle l utilisateur doit répondre par O (Oui) ou N (Non), tôt ou tard, l utilisateur, facétieux ou maladroit, risque de taper autre chose que la réponse attendue. Dès lors, le programme peut planter soit par une erreur d exécution (parce que le type de réponse ne correspond pas au type de la variable attendu) soit par une erreur fonctionnelle (il se déroule normalement jusqu au bout, mais en produisant des résultats fantaisistes). On met en place ce qu on appelle un contrôle de saisie, afin de vérifier que les données entrées au clavier correspondent bien à celles attendues par l algorithme. 3

Contrôle de saisie avec un SI Exemple n 1 Variable Rep en Caractère Début Ecrire Voulez vous un café? (O/N) Lire Rep Si Rep <> O ET Rep <> N Alors Ecrire Saisie erronnée. Recommencez Lire Rep FinSi Fin C est correct tant que l utilisateur ne se trompe qu une seule fois, et entre une valeur correcte à la deuxième demande. Si l on veut prévoir un cas de deuxième erreur, il faudrait rajouter un SI. Et ainsi de suite, on peut rajouter des centaines de SI, et écrire un algorithme très lourd, et sans garantie de prévoir tous les cas d erreur. La solution consistant à aligner des SI est donc une impasse 4

La structure de boucle Syntaxe Explication Tant que condition faire instructions FinTantQue Le programme arrive sur la ligne du TantQue. Il examine alors la valeur de la condition. Si cette valeur est VRAI, le programme exécute les instructions qui suivent, jusqu à ce qu il rencontre la ligne FinTantQue. Il retourne ensuite sur la ligne du TantQue, procède au même examen, et ainsi de suite. Les exécutions successives du bloc d instructions ne s arrêtent que lorsque la condition prend la valeur FAUX. Le programme continue alors avec l exécution des instructions qui suivent la boucle, s il y en a. 5

Contrôle de saisie avec boucle naïf Exemple n 2 Variable Rep en Caractère Début Ecrire Voulez vous un café? (O/N) TantQue Rep <> O ET Rep <> N Faire Lire Rep FinTantQue Fin Là, on a le squelette de l algorithme correct. Mais son principal défaut est de provoquer une erreur à chaque exécution. En effet, l expression booléenne qui figure après le TantQue interroge la valeur de la variable Rep. Malheureusement, cette variable, si elle est été déclarée, n a pas été affectée avant l entrée dans la boucle. On teste donc une variable qui n a pas de valeur, ce qui provoque l arrêt immédiat de l exécution. 6

Contrôle de saisie avec boucle avec une première lecture Pour éviter ceci, il faut que la variable Rep ait déjà été affectée avant qu on en arrive au premier tour de boucle. Pour cela, on peut faire une première lecture de Rep avant la boucle. Dans ce cas, celle-ci ne servira qu en cas de mauvaise saisie lors de cette première lecture. Exemple n 3 Variable Rep en Caractère Début Ecrire Voulez vous un café? (O/N) Lire Rep TantQue Rep <> O ET Rep <> N Faire Lire Rep FinTantQue Fin 7

Contrôle de saisie avec boucle avec initialisation arbitraire 8 Une autre possibilité, fréquemment employée, consiste à ne pas lire, mais à affecter arbitrairement la variable avant la boucle. Cette affectation doit avoir pour résultat de provoquer l entrée obligatoire dans la boucle. L affectation doit donc faire en sorte que le booléen soit mis à VRAI pour déclencher le premier tour de la boucle. Dans notre exemple, on peut donc affecter Rep avec n importe quelle valeur, hormis O et N : car dans ce cas, l exécution sauterait la boucle, et Rep ne serait pas du tout lue au clavier. Exemple n 4 Variable Rep en Caractère Début Rep X Ecrire Voulez vous un café? (O/N) TantQue Rep <> O ET Rep <> N Faire Lire Rep FinTantQue Fin

Contrôle de saisie avec boucle avec une première lecture et affichage libellés Exemple n 5 Variable Rep en Caractère Début Ecrire Voulez vous un café? (O/N) Lire Rep TantQue Rep <> O ET Rep <> N Faire Ecrire Vous devez répondre par O ou N. Recommencez Lire Rep FinTantQue Ecrire Saisie acceptée Fin 9

Contrôle de saisie avec boucle avec initialisation arbitraire et affichage libellés Exemple n 6 Variable Rep en Caractère Début Rep X Ecrire Voulez vous un café? (O/N) TantQue Rep <> O ET Rep <> N Faire Lire Rep Si Rep <> O ET Rep <> N Alors Ecrire Saisie Erronée, Recommencez FinSi FinTantQue Fin 10

Erreurs sur les conditions de boucle ERREUR 1 : écrire une structure TantQue dans laquelle la condition n est jamais VRAI. Le programme ne rentre alors jamais dans la boucle! ERREUR 2 : écrire une boucle dans laquelle la condition ne devient jamais FAUX. L ordinateur tourne alors dans la boucle infiniment et n en sort plus. Seule solution, quitter le programme de façon brutale (CTRL+C par ex). La «boucle infinie» est une des hantises les plus redoutées des programmeurs. Comment faire pour éviter ces erreurs? Exécuter son algorithme «à la main» pour déterminer si le comportement de l algorithme sera correct, en déterminant un invariant de boucle (une proposition qui est vraie à chaque tour de boucle). 11

Exemple de boucle TantQue Ecrire un algorithme qui demande un nombre de départ (sans contrôle de saisie), et qui ensuite affiche les dix nombres suivants. Par exemple, si l'utilisateur entre le nombre 17, le programme affichera les nombres de 18 à 27. Exemple n 7 Variable n en Numérique Variable i en Numérique Debut Ecrire «Entrer un nombre :» Lire n i 1 Tant que i <= 10 Faire Ecrire n+i i i + 1 FinTantQue Fin 12

Exécution de l algorithme à la main Déclarations : n? i? n 17 i 1 1 er tour : (i<=10) vaut (1<=10), condition VRAI Ecrire 17+1, c est-à-dire Ecrire 18 i i+1 c est-à-dire i 1+1 donc i 2 Au début du 1 er tour, i vaut 1; à la fin du 1 er tour, i vaut 2 2eme tour : (i<=10) vaut (2<=10), condition VRAI Ecrire 17+2, c est-à-dire Ecrire 19 i i+1 c est-à-dire i 2+1 donc i 3 Au début du 2 ème tour, i vaut 2; à la fin du 2 ème tour, i vaut 3 Au début du k ème tour, i vaut k; à la fin du k ème tour, i vaut k+1 Cette déclaration est vraie à chaque tour de boucle. C est un invariant de boucle. 13

Exécution de l algorithme à la main D après l invariant de boucle, on sait qu au début du 10 ème tour, i vaut 10, à la fin du 10 me tour, i vaut 11. 10 ème tour : (i<=10) vaut (10<=10), condition VRAI Ecrire 17+10, c est-à-dire Ecrire 27 i i+1 c est-à-dire i 10+1 donc i 11 11 ème tour : (i<=10) vaut (11<=10), condition FAUX Le programme sort de la boucle. Fin du programme. Conclusion : le programme affiche bien ce qui était demandé. 14

Style de boucle TantQue Plutôt que de définir une condition compliquée pour la boucle TantQue, une bonne façon d écrire les boucles TantQue est d utiliser une variable booléenne pour la condition, initialisée à VRAI. Dans la boucle, cette variable passe à FAUX lorsque la condition n est plus remplie. Exemple n 8 Variables n, i en Numérique Variable estok en Booléen Debut estok VRAI Ecrire «Entrer un nombre :» Lire n i 1 Tant que estok Faire Ecrire n+i i i + 1 Si i > 10 Alors estok FAUX FinSi FinTantQue Fin 15

16 La Boucle Pour

La Boucle Pour Dans le dernier exemple, vous avez remarqué qu une boucle pouvait être utilisée pour augmenter la valeur d une variable. Cette utilisation des boucles est très fréquente, et dans ce cas, il arrive très souvent qu on ait besoin d effectuer un nombre déterminé de passages. Or, a priori, la structure TantQue ne sait pas à l avance combien de tours de boucle elle va effectuer (puisque le nombre de tours dépend de la valeur d une condition). La boucle Pour est utilisée quand le programmeur peut dénombrer à l avance le nombre de tours de boucles nécessaires. 17

La Boucle Pour Syntaxe 1 : Var cpt en Entier Pour cpt debut à fin Faire instructions FinPour Explication Le programme arrive sur la ligne du Pour. Il initialise la valeur du compteur cpt avec la valeur debut. Si la valeur de cpt est inférieure ou égale à la valeur fin, il rentre dans la boucle : il exécute les instructions qui suivent, jusqu à ce qu il rencontre la ligne FinPour Le programme augmente cpt de 1 (incrémentation) et retourne ensuite sur la ligne du Pour. Il recommence à comparer la valeur du compteur cpt avec la valeur fin. Les exécutions successives du bloc d instructions ne s arrêtent que lorsque le compteur dépasse la valeur fin (pour le dernier tour, cpt vaut fin). Le programme continue alors en sortant de la boucle : il reprend l exécution des instructions qui suivent la boucle, s il y en a. 18

Exemple de Boucle Pour Ecrire un algorithme qui demande un nombre de départ, et qui calcule la somme des entiers jusqu à ce nombre. Par exemple, si l on entre 5, le programme doit calculer 1 + 2 + 3 + 4 + 5 = 15 Exemple n 9 Variables N, i, Som en Entier Debut Ecrire Entrez un nombre : Lire N Som 0 Pour i 1 à N Faire Som Som + i FinPour Ecrire La somme est : & Som Fin 19

La boucle Pour est équivalente à une boucle TantQue Variable i en Entier Début i 1 TantQue i <= 15 Faire Ecrire Passage numéro : & i i i + 1 FinTantQue Fin Variable i en Entier Début Pour i 1 à 15 Faire Ecrire Passage numéro : &i FinPour Fin La structure «Pour Faire» n est pas du tout indispensable ; on pourrait fort bien programmer toutes les situations de boucle uniquement avec un «Tant Que». Le seul intérêt du «Pour» est d épargner un peu de fatigue au programmeur, en lui évitant de gérer lui-même la progression de la variable qui lui sert de compteur 20

La boucle Pour Syntaxe 1 : Var cpt en Entier Pour cpt debut à fin faire instructions FinPour Dans une boucle Pour, la progression du compteur est laissée à votre libre disposition. Dans la plupart des cas, on a besoin d une variable qui augmente de 1 à chaque tour de boucle. On ne précise alors rien à l instruction «Pour» ; celle-ci, par défaut, comprend qu il va falloir procéder à cette incrémentation de 1 à chaque passage, en commençant par la première valeur et en terminant par la deuxième. 21

Exemple de boucle Pour Exemple n 12 debut Var cpt en Entier Var s en Numerique s 5 Pour cpt 1 à 7 faire Ecrire s= & s s 2 * s + 1 FinPour fin Affichage : s=5 s=11 s=23 s=47 s=95 s=191 s=383 Cet exemple calcule et affiche les 7 premiers termes de la suite s définie par s 0 =5 et s n = s (n-1) *2 +1 22

La boucle Pour avec pas personnalisé Syntaxe 2 : Var cpt en Entier Pour cpt debut à fin Pas valeurpas faire instructions FinPour Si vous souhaitez une progression plus spéciale, de 2 en 2, ou de 3 en 3, ou en arrière, de 1 en 1, ou de 10 en 10, ce n est pas un problème : il suffira de le préciser à votre instruction «Pour» en lui rajoutant le mot «Pas» et la valeur de ce pas (Le «pas» dont nous parlons, c est le «pas» du marcheur, «step» en anglais). 23

Exemples de boucles Pour avec pas personnalisé Exemple avec un pas de 4 Variable i,duree en Entier Ecrire Entrez la duree (entier positif) Lire duree Début Ecrire Les jeux olympiques ont lieu aux dates : Pour i 2000 à (2000+duree) Pas 4 Faire Ecrire i FinPour Fin L écart entre la valeur finale et la valeur initiale (ici la durée) n est pas nécessairement un multiple du pas. La boucle s arrête quand la valeur du compteur est strictement supérieure à la valeur finale. 24

Exemples de boucles Pour avec pas personnalisé Exemple avec un pas de -1 Variable i en Entier Début Pour i 10 à 0 Pas -1 Faire Ecrire i FinPour Ecrire Boom! Fin Avec un pas négatif dans une boucle, la valeur initiale du compteur doit être supérieure à sa valeur finale! Dans le cas contraire, on aura simplement écrit une boucle dans laquelle le programme ne rentrera jamais 25

Manipulation du compteur de boucle Attention à ne pas manipuler le compteur de boucle au sein du bloc Pour! 26 Augmente la valeur de Truc de 1 à chaque passage Double la valeur de Truc à chaque passage. Exemple n 10 debut Variable Truc en Entier Pour Truc 1 à 15 Faire Truc Truc * 2 Ecrire Passage numéro :, Truc FinPour fin Affiche successivement : «Passage numéro : 2» «Passage numéro : 6» «Passage numéro : 14» «Passage numéro : 30»

Boucles imbriquées Une boucle peut tout à fait contenir d autres boucles. On dit que les boucles sont imbriquées. Exemple n 11 debut Variables ligne, colonne en Entier Pour ligne 1 à 3 Faire Pour colonne 1 à 4 Faire Cellule(ligne,colonne) ( & ligne &, & colonne & ) FinPour FinPour fin 27

Exécution d une boucle imbriquée (1,1) (1,2) (1,3) (1,4) (2,1) (2,2) (2,3) (2,4) (3,1) (3,2) (3,3) (3,4) 1 ère boucle : 1 er tour : ligne=1 2 ème boucle : 1 er tour : colonne=1 2 ème tour : colonne=2 3 ème tour : colonne=3 4 ème tour : colonne=4 1 ère boucle : 2 ème tour : ligne=2 2 ème boucle : 1er tour : colonne=1 2ème tour : colonne=2 3ème tour : colonne=3 4ème tour : colonne=4 1 ère boucle : 3 ème tour : ligne=3 2 ème boucle : 1er tour : colonne=1 2ème tour : colonne=2 3ème tour : colonne=3 4ème tour : colonne=4 28

Application à la programmation VBA pour Excel 29

Boucles Syntaxe : While Condition [Exit While] Wend For cptr=début To fin [Step valeurpas] [Exit For] Next While...Wend répète un traitement jusqu'à ce qu'une certaine condition soit réalisée tandis que For...Next effectue un traitement un nombre de fois donné, en fonction d'un compteur. Le pas est facultatif. Par défaut, il est de 1. Facultativement, l'instruction Exit For permet de quitter directement une boucle For tandis que Exit While quitte directement une boucle While. 30

31 Sub chiffre() Boucles While : exemple ' saisie d un chiffre entre 10 et 20 jusqu à ce que la valeur rentrée soit correcte Dim n As Integer Dim ok As Boolean ok = False While ok = False n = InputBox("Entrer un chiffre entre 10 et 20") If n < 10 Then MsgBox ("Trop petit") ElseIf n > 20 Then MsgBox ("Trop grand") Else MsgBox ("Vous avez rentré le chiffre " & n) ok = True End If Wend End Sub

Boucles For : exemple Sub puissance() ' calcule x puissance y ' y est supposé être un entier positif Dim x As Double Dim y As Integer Dim puissance As Double pour éviter le dépassement de capacité x = InputBox("Valeur de x?") y = InputBox("Valeur de y?") puissance = 1 For i = 1 To y puissance = puissance * x Next MsgBox (x & " puissance " & y & "=" & puissance) End Sub 32

Boucles : exercice Modifier l exemple précédent pour que le programme vérifie que la valeur donnée pour y soit positive et redemande à l utilisateur de donner une nouvelle valeur pour y tant que ce n est pas le cas: 1. Première méthode : en utilisant une condition sur y 2. Deuxième méthode : en utilisant une variable booléenne 33

Solution : première méthode Sub puissanceverif1() ' calcule x puissance y ' y doit être un entier positif Dim x As Double Dim y As Integer Dim puissance As Double x = InputBox("Valeur de x?") y = InputBox("Valeur de y?") While y < 0 y = InputBox("y doit être positif. Recommencez.") Wend puissance = 1 For i = 1 To y puissance = puissance * x Next MsgBox (x & " puissance " & y & "=" & puissance) End Sub 34

Solution : deuxième méthode Sub puissanceverif2() ' calcule x puissance y ' y doit être un entier positif Dim x As Double Dim y As Integer Dim puissance As Double Dim estok As Boolean estok = False x = InputBox("Valeur de x?") While Not estok y = InputBox("Valeur de y?") If y >= 0 Then estok = True ElseIf MsgBox(«Recommencez.") End If Wend puissance = 1 For i = 1 To y puissance = puissance * x Next MsgBox (x & " puissance " & y & "=" & puissance) End Sub 35

Boucles : exemple Sub dessineetoiles() ' affiche un tableau d'étoiles dans la feuille Excel courante en demandant ' le nombre de lignes à l'utilisateur Dim nblignes As Integer Dim i As Integer Dim j As Integer nblignes = InputBox("nb de lignes?") j = 1 For i = 1 To nblignes For j = 1 To i Cells(i, j) = "X" Next Next End Sub 36

Boucles : exemple avec interruption Affiche un message si le mot «toto» apparaît dans les 5 premières cases de la première ligne. Sub testboucle() Dim i As Integer For i = 1 To 5 MsgBox ("i=" & i) If Cells(1, i) = "toto" Then MsgBox "Toto existe sur la plage A1:A5 Exit For End If Next End Sub Interruption de la boucle si le test réussi. Les derniers tours de boucle ne sont pas effectués. 37