Année 2012 2013 Exercice corrigé et commenté Les commentaires sur la démarche sont en violet et en italique Enoncé : Etant donné un nombre N, nous voulons avoir la somme de ses chiffres qui sont des multiples de 3 et celle de ses chiffres qui sont des multiples de 4. Analyse : Une fois la ou les idées, qui constituent votre solution, trouvées il faut les exprimer sous une forme simple, précise et concise. Puis il faut les structurer, autrement dit les ordonner en les numérotant ou en utilisant des puces (ces petits symboles en tête de phrase). Utilisez l’indentation (décalage) pour montrer qu’une idée est à l’intérieure d’une autre. Sur l’exemple ci après on voit que c’est après avoir divisé N par 10, que l’on teste si le reste est divisible par 3 ou par 4. N’hésitez pas à rajouter vos propres commentaires pour clarifier votre analyse. Vous pouvez exprimer votre analyse sous forme narrative (avec des phrases) ou sous forme schématique à travers un dessin, un exemple (bien choisi), bien présenté et bien commenté. Dans ce cas utiliser tous les artifices qui rendront votre analyse claire et facilement compréhensible. Evitez de mettre des expressions compliquées qui obligent le lecteur un effort intellectuel inutile. C’est à vous de présenter votre solution de la façon la plus claire possible. Par exemple ne pas mettre : Si (n div 10) mod 3 = 0, on …… Mais si le reste de la division de N par 10 ( pour avoir le dernier chiffre de N) est un multiple de 3, 0n …. Pour l’exercice précédent, une analyse sous forme narrative peut être : • • • • On donne un nombre N M3 = 0 (M3va contenir la somme des multiples de 3) M4 = 0 (M3va contenir la somme des multiples de 4) On divise successivement N par 10 ( le reste nous donne à chaque fois un chiffre de N), et : o Si ce reste est divisible par 3 , on le cumule dans M3 o Si ce reste est divisible par 4 , on le cumule dans M4 o N = N div 10 (nouvelle valeur de N) Et on s’arrêtera lorsque le quotient de la division est égal à 0 (tous les chiffres ont été extraits) • On écrit M3 et M4 Sous forme schématique, elle peut être : Dans ce cas, l’idée est exprimée à travers un exemple bien choisi. Prenez toujours un cas général et non un cas particulier, afin de ne pas avoir seulement tune partie de la solution M4 0 M3 0 +9 +6 Multiple de 3 8735649 ……….9 ………. ………. +3 Multiple de 3 ………. ………. ………. 10 8735 10 5 873 ……. 3 Multiple de 4 ………. ………. ………. ……. Multiple de 4 +4 = +8 12 N = Multiple de 3 18 10 873564 ………4 ………. 10 87356 ……..6 …. 10 87 10 7 8 …. 8 10 0 test de fin On pourrait à la limite rajouter une phrase d’explication de l’idée du type : On divise le nombre N par 10 , pour extraire ses différents chiffres .Ces derniers sont cumulés dans M3 s’ils sont divisibles par 3 et dans M4 s’ils sont divisibles par 4. CONSEIL : ne jamais construire une analyse à partir de cas particulier mais du cas général. Une fois votre algorithme construit, commencer par le dérouler avec cas général. Et ensuite avec les cas particuliers. Très souvent, le cas général règle le cas particulier. Dans le cas contraire reprendre l’analyse et la compléter. Avec un peu d’expérience , on pourra effectuer un déroulement (plus général) de notre analyse et éviter donc de construire un algorithme pour le modifier ensuite. Algorithme : En principe, si l’analyse est bien structurée, l’algorithme en est extrait très facilement. Il suffit de repérer les structures de bases qui composent généralement un algorithme, c'est-à-dire : les expressions (arithmétiques, conditionnelles, relationnelles et/ou mixtes), les alternatives (ou conditionnelles), les répétitives, les lectures et les écritures. Dans notre cas nous observons rapidement qu’il y a : 1. Une lecture 2. deux affectations (initialisations de M3 et M4) 3. une répétitive dont on ne connaît pas le nombre d’itérations, donc cela ne peut être un POUR. Elle sera de la forme TANT QUE car le nombre d’itérations peut être égal à 0, dans le cas ou N =0. 4. cette répétitive contiendra : a. une alternative, car un chiffre de N ne peut être en même temps divisible par 3 et par 4 en même temps. Chaque bloc de cette alternative contiendra une incrémentation, selon que le chiffre est divisible par 3 ou par 4. b. Une expression arithmétique pour calculer le prochain N 5. l’écriture des résultats M3 et M4 Donc, il faut exercer votre esprit à cette démarche et au bout d’une dizaine d’algorithmes vous verrez la facilité avec laquelle vous allez construire votre algorithme. Il est clair que cela ne sera possible que si votre analyse est bien structurée. Respectez STRICTEMENT le formalisme adopté et ne pas oublier que c’est un langage qui doit être commun, donc ne prenez aucune liberté le concernant. Evitez de couper un algorithme et arrangez-vous afin qu’il soit toujours sur une page. (dans certains cas c’est impossible ! , Non ! la modularité sera là pour remédier à ce problème à chaque fois que cela sera possible) Algorithme int1 Variables N, M3,M4, R : entier DEBUT Ecrire (' Donner N :') Lire(N) M3 Å 0 M4 Å 0 Tant que N <> 0 Faire DTQ R Å N mod 10 Si R mod 3 = 0 Alors M3 Å M3 + R Sinon si R mod 4 = 0 Alors M4 Å M4 + R N Å N div 10 FTQ Ecrire ('M3= ',M3,' M4 = ',M4) FIN Jeu d’essai : Une fois quel’ algorithme est écrit, il faut vérifier qu’il « tourne », c'est-àdire qu’il donne le résultat attendu. Pour cela, il faut construire un jeu d’essai. Ce dernier est très souvent confondu avec le déroulement alors que leurs rôles sont totalement différents. Le jeu d’essai est tout simplement, un ou plusieurs exemples avec leurs résultats et un petit commentaire pour justifier chacun d’eux, qui vont permettre de valider le résultat de l’algorithme .Il est évident que si vous prenez plusieurs exemples, il ne s’agit pas de mettre des cas identiques qui ne seront d’aucune utilité. Son élaboration exige de la réflexion. Parfois un seul exemple suffit mais d’autres fois, plusieurs sont nécessaires. De façon générale il faut prévoir le cas général et ensuite les cas particuliers s’il y en a. Ainsi, pour notre exemple le jeu d’essai peut être : N N N N N N N = = = = = = = 8237349 69336 48884 544712 66291 2157 0 M3 M3 M3 M3 M3 M3 M3 =15 , M4=12 =27 , M4=0 =0 , M4=32 =0 , M4=8 =21 , M4=0 =0 , M4=0 =0 , M4=0 {nombre quelconque} {que des multiples de 3} {que des multiples de 4} {aucun multiple de 3} {aucun multiple de 4} {aucun multiple de 3 et de 4} {nombre nul} Vous observez le rôle des commentaires qui expliquent l’intérêt de chacun des exemples choisis. NOTA : dans certains cas, il ne sera pas possible de proposer un jeu d’essai. Dans ce cas, il faut valider les résultats après leur programmation. Par exemple dans l’exercice ou il s’agissait de retrouver les nombres tels que tels que la somme des cubes des chiffres les composant est égale au nombre lui-même. Il n’est pas évident de trouver un exemple, sauf s’il faut dérouler notre algorithme, au risque de perdre beaucoup de temps. Dans ce cas, une fois que notre programme donne des résultats. Il faut vérifier qu’ils sont justes. Déroulement Le déroulement sert à valider l’algorithme . Le déroulement est constitué d’un tableau dont chaque colonne représente un objet de l’environnement. Au départ il faut dessiner le tableau est reprendre, TOUS et SEULEMENT, les objets déclarés dans l’algorithme. Dans notre cas : N, M3, M4 et R. Durant le déroulement, il faut avoir, en même temps ,2 attitudes : machinale et d’observation. Attitude machinale : effectuer strictement les actions de l’algorithme. 1. on donne une valeur à N 2. on met 0 dans M3 3. on met 0 dans M4 4. si N est différent de 0 9 on N mod 10 dans R 9 si R mod 3 = 0 on rajoute 3 dans M3 . . . Attitude d’observation : en même temps, on observe, au fur et à mesure, que : • dans R les différents chiffres de N sont extraits, un à un. • La détection des multiples de 3 et de 4 est bien faite • Que les constructions de M3 et M4 sont correctes • Et les résultats sont justes Cette attitude d’observation permet d’arrêter rapidement le déroulement afin de reprendre l’analyse et/ou l’algorithme. Si par exemple on observe que R ne donne pas les différents chiffres de N, ou que le contenu de M3 contient des valeurs insolites,….. Dans notre cas, le déroulement est : N 8237349 M3 0 M4 0 R 9 9 823734 4 4 82373 3 12 8237 823 7 3 15 82 8 2 8 12 0 NOTA : pour le déroulement il faut reprendre tous les exemples du jeu d’essai. C’est une assurance que la phase de conception est correcte et que lors de la réalisation les erreurs de logique seront inexistantes. Programmation : Cette étape consiste à traduire consiste à traduire l’algorithme dans un langage de programmation. Elle peut être fastidieuse lors de l’apprentissage du langage. Mais il faut d’une part avoir à portée de main la documentation sur le langage utilisé et surtout s’y référer systématiquement au départ. Et d’autre part apprendre à corriger soi même les différentes erreurs de programmation. Utiliser aussi l’aide en ligne. « un bon programmeur n’est pas celui qui ne fait pas d’erreurs, mais celui qui sait les corriger rapidement ». Vos programmes doivent être lisibles, pour cela : • Eviter de mettre plusieurs instructions par ligne • Aligner verticalement les instructions d’un même bloc • Utiliser l’indentation pour faire ressortir les divers blocs du programme • Mettre des commentaires pertinents program int1; (* recherche de la somme (M3) des chiffres de N qui sont des multiples de 3 et de celle (M4) qui sont des multiples de 4 *) uses crt; var N, M3,M4, R:longint; BEGIN clrscr; Writeln (' Donner N :'); readln(N); M3 := 0; M4:=0; while N <> 0 do BEGIN R := (N mod 10); if R mod 3 = 0 then M3:= M3 + R else if R mod 4 = 0 then M4:= M4 + R; N:= N div 10; END; writeln ('M3= ',M3,' M4 = ',M4); Writeln('-----------------------'); Readln; END. Une fois les erreurs de programmation corrigées. II faut exécuter le programme en reprenant les exemples du jeu d’essai (et du déroulement) afin de valider votre programme. Et surtout, soignez votre travail, c’est une qualité essentielle pour un ingénieur . Utilisez des couleurs différentes(en évitant si possible le rouge), des schémas, des exemples commentés aérez votre travail (et, bien qu’il n’est pas logique de le rappeler, utilisez une règle chaque fois que cela est nécessaire). Un travail bien présenté entraine une image positive que fait de vous le lecteur (ou le correcteur).