Vous êtes sur la page 1sur 54

IMRO- M1- Algorithmique

2015-2016
4.7 CODE ASCII _____________________________ 13
1 DEFINITION _______________________________ 4
5 OPERATIONS SUR LES VARIABLES ____________ 15
1.1 QU’EST QU’UN ORDINATEUR ___________________ 4
1.2 QU’EST CE QU’UN ALGORITHME ? _______________ 4 5.1 TYPE DU RESULTAT _________________________ 15
1.3 FORME __________________________________ 4 5.2 PRIORITES _______________________________ 15
1.4 RIGUEUR ________________________________ 4 5.3 OPERATIONS ET FONCTIONS PARTICULIERES ________ 15
1.5 LANGAGE DE PROGRAMMATION ________________ 4 5.4 CONVERSION DES VARIABLES __________________ 15
5.4.1 ALGORITHME ___________________________ 15
2 ANALYSE DES PROBLÈMES ___________________ 6 5.4.2 TRADUCTION EN VBA _____________________ 16
5.4.3 TRADUCTION GIBIANE _____________________ 16
2.1 DÉMARCHE _______________________________ 6 5.4.4 TRADUCTION EN PYTHON ___________________ 16
2.2 EXEMPLE1 – D2R2 JUNIOR ____________________ 6 5.4.5 TRADUCTION SCILAB ______________________ 17
2.3 EXEMPLE 2 – MÈRE-DENIS ____________________ 7
2.4 EXERCICES________________________________ 7 6 TABLEAU ________________________________ 18
2.4.1 R201 – BOCUSE __________________________ 7
2.4.2 R202 – MANNEKEN-PIS ____________________ 7 6.1 DEFINITION ______________________________ 18
6.2 TRADUCTION EN VBA _______________________ 18
3 STRUCTURES ______________________________ 9 6.3 TRADUCTION EN GIBIANE ____________________ 19
6.3.1 METHODE 1 : ___________________________ 19
3.1.1 CONDITION _____________________________ 9 6.3.2 METHODE 2 ____________________________ 19
3.1.2 RÉPÉTITION D’INSTRUCTIONS__________________ 9 6.4 TRADUCTION EN PYTHON ____________________ 19
3.1.2.1 Nombre de répétitions connu ____________ 9 6.4.1 LISTES ________________________________ 19
3.1.2.2 Nombre de répétition inconnu ___________ 9 6.4.2 TUPLES _______________________________ 20
3.2 EXEMPLE – _______________________________ 9 6.4.3 DICTIONNAIRE __________________________ 20
3.2.1 RÉGULATION DE LA TEMPÉRATURE ______________ 9 6.5 TRADUCTION SCILAB _______________________ 20
3.2.2 UN AUTOMATISME AVEC CAPTEUR ______________ 9
3.3 EXERCICES________________________________ 9 7 LECTURE ET ECRITURE _____________________ 21
3.3.1 R301 – FIACRE ___________________________ 9
3.3.2 R302 – CRÉSUS _________________________ 10 7.1 ALGORITHME ____________________________ 21
3.3.3 R303 – HONORÉ ________________________ 10 7.2 TRADUCTION EN VBA _______________________ 21
3.3.4 R304 – JANUS __________________________ 11 7.2.1 LECTURE ET ECRITURE A L’ECRAN ______________ 21
3.3.5 R305 – APOLLON ________________________ 11 7.2.2 LECTURE ET ECRITURE SUR FICHIER _____________ 21
7.2.2.1 Modes d’ouverture ___________________ 21
4 VARIABLES ______________________________ 12 7.3 TRADUCTION EN GIBIANE ____________________ 23
7.3.1 DIRECTIVE ACQUERIR ____________________ 24
4.1 QU’EST CE QU’UNE VARIABLE ? ________________ 12 7.3.2 DIRECTIVE SAUVER ______________________ 24
4.2 TYPE DE VARIABLE _________________________ 12 7.3.3 DIRECTIVE RESTITUER ____________________ 24
4.3 NOM DE VARIABLES ________________________ 12 7.3.4 DIRECTIVE SORTIR _______________________ 24
4.4 TRADUCTION EN VBA _______________________ 12 7.3.5 DIRECTIVE LIRE _________________________ 25
4.5 TRADUCTION EN GIBIANE ____________________ 12 7.3.6 OPERATEUR LIRE ________________________ 25
4.5.1 TRADUCTION EN PYTHON ___________________ 12 7.3.7 DIRECTIVE @EXCEL1 _____________________ 25
4.5.2 TRADUCTION SCILAB ______________________ 12 7.4 TRADUCTION EN PYTHON ____________________ 25
4.6 EXEMPLE _______________________________ 13 7.5 TRADUCTION SCILAB _______________________ 26
8 LES TESTS _______________________________ 28 11 SOUS PROGRAMME ______________________ 39

8.1 STRUCTURE D’UN TEST ______________________ 28 11.1 DEFINITION _____________________________ 39


8.2 CONDITION ______________________________ 28 11.2 TRADUCTION EN VBA ______________________ 39
8.3 CONDITIONS COMPOSEES ____________________ 28 11.3 TRADUCTION EN GIBIANE ___________________ 39
8.4 TRADUCTION EN VBA _______________________ 29 11.4 TRADUCTION EN PYTHON ___________________ 39
8.5 TRADUCTION EN GIBIANE ____________________ 29 11.5 TRADUCTION SCILAB ______________________ 39
8.6 TRADUCTION EN PYTHON ____________________ 29
8.7 TRADUCTION SCILAB _______________________ 29 12 CHAINES DE CARACTERES _________________ 41

9 STRUCTURES – EXEMPLES ET TRADUCTION ____ 30 12.1 FONCTIONS DE BASE _______________________ 41


12.2 TRADUCTION EN VBA ______________________ 41
9.1 POUR __________________________________ 30 12.2.1 CONCATENATION _______________________ 41
9.1.1 DEFINITION ____________________________ 30 12.2.2 FONCTIONS PARTICULIERES _________________ 41
9.1.2 TRADUCTION EN VBA______________________ 30 12.3 TRADUCTION EN GIBIANE ___________________ 41
9.1.3 TRADUCTION EN GIBIANE ___________________ 30 12.4 TRADUCTION EN PYTHON ___________________ 41
9.1.4 TRADUCTION EN PYTHON ___________________ 30 12.5 TRADUCTION SCILAB ______________________ 41
9.1.5 TRADUCTION SCILAB ______________________ 31
9.2 STRUCTURE REPETER JUSQU’A _________________ 31 13 ALGORITHMES __________________________ 42
9.2.1 DEFINITION ____________________________ 31
9.2.2 TRADUCTION EN VBA______________________ 31
9.2.3 TRADUCTION EN GIBIANE ___________________ 31 13.1 GÉNÉRALITÉS ___________________________ 42
9.2.4 TRADUCTION EN PYTHON ___________________ 32 13.2 LISTE D’INSTRUCTIONS _____________________ 42
9.2.5 TRADUCTION SCILAB ______________________ 32 13.3 INSTRUCTIONS PARTICULIÈRES ________________ 42
9.3 TANT QUE _______________________________ 32 13.4 EXERCICES______________________________ 42
9.3.1 DEFINITION ____________________________ 32 13.4.1 COMPTEUR ___________________________ 42
9.3.2 TRADUCTION EN VBA______________________ 32 13.4.2 LECTURE DE FICHIER ______________________ 42
9.3.3 TRADUCTION EN GIBIANE ___________________ 32 13.4.3 FACTORIELLE __________________________ 42
9.3.4 TRADUCTION EN PYTHON ___________________ 32 13.4.4 AMUSEMENT __________________________ 42
9.3.5 TRADUCTION SCILAB ______________________ 32 13.4.5 PUISSANCE ____________________________ 43
9.3.6 EXEMPLES _____________________________ 33
9.3.6.1 Problème ___________________________ 33 14 EXERCICES ______________________________ 44
9.3.6.2 Algorithme __________________________ 33
9.3.6.3 VBa ________________________________ 33 14.1 MANIPULATION DE VARIABLES________________ 44
9.3.6.4 Gibiane _____________________________ 33 14.2 CONDITIONS ____________________________ 44
9.3.7 TRADUCTION EN PYTHON ___________________ 34 14.3 STRUCTURES ____________________________ 45
9.3.8 TRADUCTION SCILAB ______________________ 34 14.4 EXERCICES GENERAUX______________________ 47
9.4 STRUCTURE CHOIX _________________________ 34
9.4.1 DEFINITION ____________________________ 34
9.4.2 TRADUCTION EN VBA______________________ 34 15 ANNALES_______________________________ 49
9.4.3 TRADUCTION EN GIBIANE ___________________ 34
9.4.4 TRADUCTION EN PYTHON ___________________ 34 15.1 PROBLEME 2012 _________________________ 49
9.4.5 TRADUCTION SCILAB ______________________ 34 15.2 RATTRAPAGE 2013 _______________________ 50
15.3 CONTROLE 2014 _________________________ 51
10 FONCTION______________________________ 36 15.4 RATTRAPAGE 2014 _______________________ 51
15.5 CONTROLE 2015 _________________________ 51
15.6 CONTROLE 2015 – RATTRAPAGE ______________ 52
10.1 DEFINITION _____________________________ 36
10.1.1 CONSTITUTION _________________________ 36
10.1.2 VARIABLES LOCALES ______________________ 36 16 BIBLIOGRAPHIE _________________________ 54
10.1.3 EXEMPLE _____________________________ 36
10.2 TRADUCTION EN VBA ______________________ 36
10.3 TRADUCTION EN GIBIANE ___________________ 37
10.4 TRADUCTION EN PYTHON ___________________ 37
10.5 TRADUCTION SCILAB ______________________ 37
2
3
1.3 Forme
Un algorithme est encadré par 2 mots : début et fin.
1 Définition Il comporte 2 parties : une première partie consistant
en la déclaration des variables utilisées dans le
1.1 Qu’est qu’un ordinateur programme, la deuxième partie étant les instructions.
C’est une machine capable : Les 2 parties sont bien séparées. Le programme, une
D’envoyer (écrire) et de recevoir (lire) des fois l’algorithme réalisé et traduit en langage de
informations codées avec des périphériques programmation, sera commenté afin de pouvoir être
(imprimante, clavier, disque dur, écran, capteur relu par n’importe qui, n’importe quand.
électronique, souris, …). Exemple :
De réaliser des additions Début
De réaliser des multiplications | Déclaration de variables
De réaliser des comparaisons (>, <,=) | A : entier
| B : entier
C’est tout. C’est bien moins qu’un être humain, | Instructions
c’est juste le niveau classe primaire. La grosse | Lire A
différence est qu’il le fait VITE. | B← 4
Qu’est qu’un programme ? | A←A+B
Pour faire travailler un ordinateur, on ne peut pas Fin
lui dire « fait cela », »devine comment tu dois le faire », On indente les instructions à l’intérieur d’une
…. Cela ne donne rien, il est trop bête. Il faut lui structure de programmation de façon à rendre
décomposer ce qu’on attend de lui en actions qu’il l’algorithme et le programme lisible.
comprend :
• Communication avec un périphérique
• Addition
1.4 Rigueur
• Multiplication
• Comparaison. Un ordinateur est basé sur un système binaire :
Cette décomposition s’appelle un algorithme. c’est vrai ou c’est faux. En conséquence la
programmation ne tolère pas l’ « à peu près ». Le
1.2 Qu’est ce qu’un algorithme ? programme doit être bien pensé, doit être basé sur un
C’est le squelette abstrait d’un programme algorithme qui fonctionne (écrit sur un papier brouillon
informatique, indépendant du mode de codage et vérifié sur un brouillon aussi à la main) et doit
particulier qui permettra sa mise en œuvre effective au respecter la syntaxe du langage de programmation
sein d'un ordinateur. choisi. Cela veut dire être rigoureux.
L'algorithme est un moyen pour le programmeur de En conséquence vous êtes prié de respecter la
présenter son approche du problème à d'autres forme donnée au paragraphe précédent pour vos
personnes. En effet, un algorithme est l'énoncé dans un algorithmes. Tout algorithme ne respectant pas cette
langage bien défini d'une suite d'opérations permettant forme sera noté 0/20.
de répondre au problème. Un algorithme doit donc être
1.5 Langage de programmation
:
•lisible: l'algorithme doit être compréhensible Après avoir écrit l’algorithme, vous le traduisez
même par un non-informaticien dans le langage informatique choisi. Dans la suite vous
•de haut niveau: l'algorithme doit pouvoir être seront présentées les traductions dans 4 langages
traduit en n'importe quel langage de programmation, il différents : VBA, Gibiane, python et Scilab.
ne doit donc pas faire appel à des notions techniques VBa est le langage proposé avec Excel. C’est un
relatives à un programme particulier ou bien à un langage orienté objet et vous le découvrirez lors des TP.
système d'exploitation donné Gibiane est le langage proposé avec Cast3M. Il
•précis: chaque élément de l'algorithme ne doit pas permet de créer des applications utilisant les modules
porter à confusion, il est donc important de lever toute de Cast3M.
ambiguïté Python est un langage très souple, orienté objet,
Pour écrire un algorithme, il faut d’abord analyser le permettant, entre autre de gérer les chaines de
problème, puis le décomposer en une succession de caractère facilement et aussi les cartes géographiques.
taches très simples, accessible à un enfant de CE1 (il Python est un langage orienté objet, son éditeur est
doit savoir ses 4 opérations !). gratuit, récupérable sur internet. Il est possible de créer

4
un exécutable (fichier.exe) ou bien de travailler comme
un langage interprété. On présente ici les
caractéristiques élémentaires du langage.
Scilab est un langage, imitation de Matlab, qui
présente l’intérêt de tracer des graphiques, de réaliser
des statistiques et surtout de travailler avec des
matrices facilement.
Les 3 derniers sont gratuits.

5
• Prendre un objet placé entre 0,2 m et 1 m de
distance
2 Analyse des problèmes • Poser un objet devant lui à une distance
comprise entre 0,2 et 1 m.
2.1 Démarche On désire déplacer un objet de A à B, le robot étant
Lorsque vous devez programmer une machine, la
en O à l’origine.
première chose à faire est de lister les opérations
qu’elle peut effectuer. Les machines peuvent être un
ordinateur, mais aussi un robot, un véhicule autonome,
y
….. = Robot
La première chose est de faire la liste des
instructions que peut exécuter la machine. Par
exemple, un distributeur de café est capable de
• Identifier les pièces de monnaie B
• Compter la somme correspondante
• Calculer la somme à rendre
• Lire l’instruction sur la quantité de sucre 4m
• Lire l’instruction sur le produit
• Envoyer à chaque vanne produit
l’instruction d’ouverture (eau, mélanges 4m 3m
solubles) A
• Mettre le chauffage de l’eau en route 3m
• Descendre un gobelet x
• Identifier quand le mélange est fait O
• Prévenir l’utilisateur
Puis il faut analyser le problème. Dans l’exemple du Figure 2-1 – Expérimentation de D2R2Jr
distributeur de café : on demande un expresso
correspond à : Il y a plusieurs solutions possibles, la suivante est
1. Comptage des pièces (40 centimes) n’est pas optimale.
2. Rendu de la monnaie 1. Avancer de 1m
3. Ouverture de la vanne café (on admet 2. Avancer de 1m
qu’une ouverture correspond par un 3. Avancer de 1m
reglage machine à une seule dose) 4. Avancer de 1m
4. Descente d’un gobelet 5. Tourner de 15° sens direct
5. Mise en route chauffage eau 6. Tourner de 15° sens direct
6. Ouverture de la vanne eau (idem 7. Tourner de 15° sens direct
l’ouverture correspond à la quantité 8. Tourner de 15° sens direct
nécessaire pour un gobelet par réglage 9. Tourner de 15° sens direct
machine) 10. Tourner de 15° sens direct
7. Vérification de la fermeture de toutes les 11. Avancer de 1m
vannes 12. Avancer de 1m
8. Envoi d’un message 13. Prendre l’objet à 1 m
Dans l’exemple, l’analyse du problème utilise les 14. Tourner de 15° sens indirect
instructions que peut exécuter la machine. 15. Tourner de 15° sens indirect
16. Tourner de 15° sens indirect
2.2 Exemple1 – D2R2 junior 17. Tourner de 15° sens indirect
D2R2, quand il était petit, ne savait que avancer ou 18. Tourner de 15° sens indirect
reculer et tourner et saisir un objet posé devant lui (de 19. Tourner de 15° sens indirect
face uniquement) et poser l’objet en face de lui aussi. Il 20. Avancer de 1m
ne connait que 6 instructions : 21. Avancer de 1m
• Avancer de 1 m 22. Avancer de 1m
• Reculer de 1 m 23. Poser l’objet à 1 m
• Tourner de 15° sens direct
• Tourner de 15° sens indirect

6
Remarquez ici, que comme D2R2 jr ne peut pas - Chauffer 60° pendant 5 minutes
saisir un objet distant de 0 m, on l’amène à 1 m de -
l’objet.
1. Pour faire un cake, il faut vigoureusement mélanger
tous les ingrédients pendant 15 minutes puis cuire à
2.3 Exemple 2 – Mère-Denis 200° pendant 45 min. Ecrire le programme
Mère-Denis est un lave linge basique qui lave à correspondant.
température ambiante, n’à qu’un seul programme de 2. Pour le même cake, si l’on remplace la levure
lavage et n’utilise pas de produit autre que la lessive chimique par la levure de boulanger il faut avant de
que vous mettez dans le tambour avec le linge. cuire laisser la pate lever dans une atmosphère à 60°
Les instructions qu’il connait sont : pendant 1h. Ecrire le programme correspondant.
1. Pomper de l’eau 3. La recette de la pate à pain demande : pétrir
2. Tourner le tambour sur 100 tours (mélanger lentement) la pate pendant 5 minute, laisser
3. Vidanger l’eau. reposer dans un environnement à 600 pendant 2
4. Bloquer la porte heures. Pétrir à nouveau pendant 5 minutes et cuire à
5. Débloquer la porte 200 ° pendant 1h00. Ecrivez le programme
On veut écrire l’unique programme de Mère-Denis. correspondant.
Le lavage se fait sur 600 tours, un premier rinçage se 4. Pour faire une soupe il faut cuire tous les ingrédients
fait sur 100 tours puis un 2ème rinçage sur 200 tours. à 100° pendant 20 minutes puis mixer pendant 5
Puis un essorage se fait sur 100 tours minutes. Ecrire le programme correspondant.

1. Bloquer la porte 2.4.2 R202 – Manneken-Pis


2. Pomper de l’eau Manneken-Pis est un arroseur automatique de jardin. Il
3. Tourner le tambour sur 100 tours ne connaît que les instructions suivantes :
4. Tourner le tambour sur 100 tours • Pomper l’eau
5. Tourner le tambour sur 100 tours • Charger la buse large
6. Tourner le tambour sur 100 tours • Charger la buse étroite
7. Tourner le tambour sur 100 tours • Tourner de 15° dans le sens direct
8. Tourner le tambour sur 100 tours • Arroser pendant 5 minutes
9. Vidanger l’eau. La buse étroite permet de faire un jet qui atteint une
10. Pomper de l’eau distance de 4,5 à 5,5 m et d’arroser sur 2 m². La buse
11. Tourner le tambour sur 100 tours large permet de faire un jet qui arrose à une distance de
12. Vidanger l’eau. 1 à 4 m une surfaces de 4 m ².
13. Pomper de l’eau La figure 2.2 donne le schéma des parcelles à arroser.
14. Tourner le tambour sur 100 tours
15. Tourner le tambour sur 100 tours 10m
16. Vidanger l’eau.
17. Tourner le tambour sur 100 tours
18. Débloquer la porte

Dans ce programme, le lavage se fait des


instructions 1 à 9, le premier rinçage de 10 à 12, le
deuxième rinçage de 13 à 16 et l’essorage en 17.

2.4 Exercices 10m


2.4.1 R201 – Bocuse
Bocuse est un robot mixeur. Il ne connait que les
instructions suivantes :
- Chauffer à 100°C pendant 10 minutes
- Chauffer à 200°C pendant 10 minutes
- Mixer à 20 tours/min pendant 2,5 minutes
- Mixer à 60 tours/min pendant 2,5 minutes
- Mixer à 100 tours/min pendant 2,5 minutes
- Stopper pendant 5 minutes
- Chauffer 30° pendant 5 minutes
7
Figure 2-2 – Jardin à arroser

Le débit est toujours le même. Il faut 0,05 m3 d’eau par


m2. Ecrivez le programme qui fait au mieux pour
arroser.

8
| Instructions
|…
3 Structures FinTantQue
Dans un programme on évite de répéter des L’entrée dans la boucle se fait sur une condition
instructions. Pour cela une structure permet de ne pas
réécrire les instructions autant de fois qu’il faut les
répéter. 3.2 Exemple –
Il est aussi possible de tester la réponse d’un
capteur : par exemple pour le distributeur, la quantité 3.2.1 Régulation de la température
d’eau est fonction du volume de solide que l’on met Lorsque vous utilisez un thermostat, celui-ci
dans le gobelet, sinon ça déborde. On peut mettre un maintient la température à une consigne que vous avez
capteur optique à coté de la buse pour identifier le donnée (par exemple 20°). En fait il y a un capteur, qui
niveau d’eau. On versera tant que le niveau d’eau limite mesure la température à un endroit donné, puis il y a
n’est pas atteint. une comparaison avec la température de consigne, si la
Pour compter les pièces il y a un mécanisme (basé température mesurée est trop élevée on arrête le
sur la mesure des propriétés magnétiques des pièces) chauffage, si elle est trop basse on continue à chauffer.
qui identifie les pièces. Le distributeur interroge ce Il y a donc non seulement une température de consigne
mécanisme : si la pièce fait 20 centime alors ajoute 20 à mais aussi un intervalle 2∆T dans lequel doit se situer la
la somme totale. Si la somme est supérieure alors on température mesurée.
rend la différence et on interroge le capteur instruction
(bouton expresso ou autre bouton). Les instructions que connait le thermostat sont :
• Acquérir la température du capteur
3.1.1 Condition • Faire marcher le corps de chauffe
On exécute une instruction si une condition est • Arrêter le corps de chauffe
validée. Rappel : un booléen est une variable qui ne
prend que 2 valeurs (vrai ou faux). Le programme s’écrit ainsi :
Si booléen Alors 1. Acquérir la température T du capteur
| Instructions 1 2. Si abs(T-Tconsigne)>DT alors
Sinon Faire marcher le corps de chauffe
| Instructions 2 Sinon
Fin si Arrêter le corps de chauffe
Fin si
« Si booléen Alors » signifie, « Si la variable booléenne
prend la valeur VRAI Alors…. » Il ne s’agit ici que du régulateur. En fait pour un
radiateur par exemple, il faut intégrer ce programme
3.1.2 Répétition d’instructions comme sous programme d’une suite de commandes
plus importante.
3.1.2.1 Nombre de répétitions connu
Pour compt = 1 à N (pas p) faire 3.2.2 Un automatisme avec capteur
|… Cette idée de régulation peut être étendue à
| Instructions d’autres régulations que celle de la température. Le
|… problème est toujours le même : il y a un capteur, une
Fin pour consigne, une amplitude d’intervalle autour de cette
Ici N est le nombre de répétitions consigne et une action à réaliser dès que la mesure sort
de l’intervalle.
3.1.2.2 Nombre de répétition
inconnu 3.3 Exercices
REPETER
|… 3.3.1 R301 – Fiacre
| Instructions Fiacre est un robot tondeuse de jardin. Il a des
|… capteurs de chocs pour le renseigner sur les reliefs qu’il
JUSQU'A condition peut rencontrer, et un capteur magnétique qui le
La sortie de la boucle se fait sur une condition renseigne sur les limites du terrain. En effet pour pas
qu’il tonde le monde entier, on enterre autour du jardin
TantQue booléen des émetteurs qui le renseignent sur les limites du
|… jardin. Les capteurs renvoient une réponse vrai si choc

9
ou si limite de terrain atteinte et faux sinon. Il interroge entre 50€ et 1000€, en laissant le choix sur la
aussi sa batterie et quand il y a alerte il revient au composition du mélange de billets (choix entre
garage pour se recharger. majoritairement 10€, majoritairement 20€ ou mélange
Les instructions qu’il connait sont : optimal en nombre de billets).
• Avancer en tondant 4. Ecrire un programme qui gère Crésus, en
• Reculer supposant la réserve de billets finie et en supposant
• Tourner de 15° dans le sens direct que Crésus délivre n’importe quelle somme comprise
• Interroger le capteur choc entre 50€ et 1000€, en laissant le choix sur la
• Interroger le capteur électromagnétique composition du mélange de billets (choix entre
• Interroger la batterie majoritairement 10€, majoritairement 20€ ou mélange
• Retourner au garage. optimal en nombre de billets).

1. Ecrire le programme pilotant Fiacre


3.3.3 R303 – Honoré
2. Développer le programme « retourner au
Honoré est la caisse automatique de la boulangerie
garage » en faisant l’hypothèse le garage émet un signal
du coin. La boulangère lui indique le prix à payer, le
qui oriente Fiacre. Quelles sont les instructions
client introduit pièces ou billets et Honoré rend la
élémentaires nécessaires ? Quel est le programme qui
monnaie. Il y a 3 capteurs : un capteur C1 qui lit
permet de rentrer au garage ?
l’information donnée par la boulangère (somme à
payer), un capteur C2 qui lit la valeur de la pièce
3.3.2 R302 – Crésus introduite, un capteur C3 qui lit la valeur du billet
Crésus est un distributeur de billets. Il peut introduit. La valeur renvoyée par les capteurs est nulle
distribuer des billets de 10€, 20€ ou 50€. si rien n’est introduit (C2 et C3). Les instructions de
Les instructions de bases sont les suivantes : base sont les suivantes :
• Envoyer un message à l’écran • Acquérir prix sur C1
• Acquérir une réponse à l’écran • Acquérir valeur d’une pièce sur C2
• Identifier le type de carte bancaire • Acquérir valeur d’un billet sur C3
• Identifier la banque sur la carte • Sortir un billet de 10€
• Interroger la banque (pour voir combien on • Sortir un billet de 20€
peut donner de l’argent, on appelle smax • Sortir un billet de 50€
cette somme) • Tester la présence de billet dans la réserve
• Lire le code sur la carte 10€
• Sortir un billet de 10€ • Tester la présence de billet dans la réserve
• Sortir un billet de 20€ 20€
• Sortir un billet de 50€ • Tester la présence de billet dans la réserve
• Tester la présence de billet dans la réserve 50€
10€ • Sortir une pièce de 0,01€
• Tester la présence de billet dans la réserve • Tester la présence de pièces dans la réserve
20€ 0,01€
• Tester la présence de billet dans la réserve • Sortir une pièce de 0,02€
50€ • Tester la présence de pièces dans la réserve
Crésus sait aussi faire les additions de réels, les 0,02€
multiplications de réels. Il connait aussi la fonction • Sortir une pièce de 0,05€
« modulo ». • Tester la présence de pièces dans la réserve
1. Ecrire un programme qui gère Crésus, en 0,05€
supposant la réserve de billets infinie et en supposant • Sortir une pièce de 0,10€
que Crésus ne délivre que 50€, 60€, 70€, 80€ 90€ ou • Tester la présence de pièces dans la réserve
100€. 0,10€
2. Ecrire un programme qui gère Crésus, en • Sortir une pièce de 0,20€
supposant la réserve de billets infinie et en supposant • Tester la présence de pièces dans la réserve
que Crésus délivre n’importe quelle somme comprise 0,20€
entre 50€ et 1000€. • Sortir une pièce de 0,50€
3. Ecrire un programme qui gère Crésus, en • Tester la présence de pièces dans la réserve
supposant la réserve de billets infinie et en supposant 0,50€
que Crésus délivre n’importe quelle somme comprise • Sortir une pièce de 1€
10
• Tester la présence de pièces dans la réserve
1€
• Sortir une pièce de 2€
• Tester la présence de pièces dans la réserve
2€
Honoré sait aussi faire les additions de réels, les
multiplications de réels. Il connait aussi la fonction
« modulo ».
1. Ecrire le programme qui gère Honoré. On
supposera les réserves en argent infinies.
2. Ecrire le programme qui gère Honoré. On
supposera les réserves en argent finies.

3.3.4 R304 – Janus


Janus est un automatisme qui gère le volet d’une
fenêtre, le volet est un volet roulant animé par un
moteur électrique tournant à vitesse constante. . Il est
doté de 2 capteurs et d’une commande :
un capteur C1 lui indiquant si le volet est
entièrement levé (C1=0 si non entièrement levé, 1
sinon) ;
un capteur C2 lui indiquant si le volet est
entièrement baissé ;
la commande C3 renvoie -1 si on veut descendre le
volet, 0 si on veut arrêter le volet, 1 si on veut monter le
volet.
Les instructions auxquelles obéit l’automate sont :
• Acquérir l’information C1
• Acquérir l’information C2
• Acquérir l’information commande C3
• Mettre le moteur en marche sens descente
• Mettre le moteur en marche sens montée
• Arrêter le moteur

Ecrire le programme qui gère Janus.

3.3.5 R305 – Apollon


En fait on voudrait diriger tous les automatismes
Janus d’une maison. C’est Apollon qui est
l’automatisme qui centralise les informations. Apollon
envoie un ordre pour baisser ou lever le volet (A=-1
pour descendre le volet et A=1 pour lever le volet). Il y a
N Janus (i=1 à N) avec des capteurs C1i et C2i et une
commande C3i. Apollon dispose d’une horloge qui lui
indique les heures (h=0h00 à 23h59). Il connaît la date t.
Il a reçu 2 consignes : ouvrir pour t=H1 et fermer pour
t=H2.
Les instructions que connait Apollon sont :
• Lire la date t
• Envoyer un ordre A à Janus n°i

1. Ecrire le programme gérant Apollon.


2. Reprendre le programme gérant Janus N°i.

11
4.3 Nom de variables
Les noms de variables doivent être choisis de façon
4 Variables à être évocateurs de ce qu’ils représentent.
Dans certains langages (fortran) les noms
4.1 Qu’est ce qu’une variable ? commençant par i, j, k, l, m, n sont toujours des entiers
Dans un programme informatique, on va avoir en implicitement sauf déclaration contraire. C’est la raison
permanence besoin de stocker provisoirement des pour laquelle il est important de déclarer toutes les
valeurs. Il peut s’agir de données issues d’un fichier, variables de façon à ce que vos algorithmes soient
fournies par l’utilisateur (frappées au clavier), ou encore traduisibles dans tous les langages de programmation.
. Il peut aussi s’agir de résultats obtenus par le
programme, intermédiaires ou définitifs. Ces données 4.4 Traduction en VBa
peuvent être de plusieurs types (on en reparlera) : elles Le = dans une instruction signifie prend pour valeur.
peuvent être des nombres, du texte, etc. Toujours est-il Exemple :
que dès que l’on a besoin de stocker une information au C=C+1
cours d’un programme, on utilise une variable. Il s’agit ici d’une instruction et le égal signifie prend
Pour employer une image, une variable est une pour valeur, ici C prend pour valeur l’ancienne valeur de
boîte, que le programme (l’ordinateur) va repérer par C à laquelle on a ajouté 1. La position à droite ou à
une étiquette. Pour avoir accès au contenu de la boîte, gauche du signe « = » a alors une importance
il suffit de la désigner par son étiquette. La première primordiale.
chose à faire avant de pouvoir utiliser une variable est C’est la raison pour laquelle lorsqu’on écrit un
de créer la boîte et de lui coller une étiquette. Ceci se algorithme, c’est le symbole qui signifie « prend pour
fait tout au début de l’algorithme, avant même les valeur », ce qui permet d’éviter la confusion.
instructions proprement dites. C’est ce qu’on appelle la
déclaration des variables. On peut même rajouter un 4.5 Traduction en Gibiane
commentaire pour se souvenir (quand on relira le code Comme en VBa c’est le symbole « = » qui sert à
3 mois après) ce que représente la variable. traduire « prend pour valeur ». Que ce soit en VBa ou
Pour attribuer une valeur à une variable on utilise en Gibiane il est important de noter qu’écrire
l’instruction « prend pour valeur » qui s’écrit avec une A=B
flèche ← ne signifie pas la même chose que d’écrire
A prend pour valeur 3 s’écrit en algorithmique : B=A
A←3 dans une instruction.
4.2 Type de variable 4.5.1 Traduction en Python
Les variables peuvent être de type entier (integer), Ce sont des boites où l’on range des entités
réel double précision (double), réel simple précision, pouvant prendre différentes valeurs. En Python, ces
complexe, texte (string), lettre (character), logique variables ne sont pas définies initialement : elles
peuvent dans le cours d’un programme prendre une
nom taille min Max valeur chaine de caractères, une valeur réelle, etc.
(octets) L’instruction d’affectation est le signe « = ».
byte 1 0 255
(8 bits) La fonction type renvoie le type de variable. Par
caractèr 1 -128 127 exemple :
e (8 bits)
X=20
logique 2 faux Vrai
(16 bits) print (type(X))
Chaine Longueur Renvoie
de de la
caractèr chaine
<type ‘int’*>
es
entier 2 -32768 32767 4.5.2 Traduction Scilab
(16 bits)
Entier 4 -2 147 483 648 2 147 483 647 La traduction est le même que pour Python, Gibiane
long (32 bits) et VBa. Par contre il existe des variables en plus qui
Reel 4 1,40x10-45 3,40282310
+38

simple (32 bits) -3,402823x10+38 -1,40x10-45 n’existent pas dans les autres langages : les matrices et
Reel 8 4,94065645841246544E-324 1,79769313486231570E+308 les vecteurs. Dans les autres langages cela est traduit
si c’est un nombre >0 si c’est un nombre >0
double (64 bits)
-1,79769313486231570E+308 -4,94065645841246544E-324
par des tableaux (voir plus loin).
Si c’est un nombre négatif si c’est un nombre négatif

12
Les crochets permettent de définir une matrice. Un 25 EM End of Medium (fin de support)
espace ou une virgule permet de passer d’une colonne 26 SUB Substitute (substitution)
à la suivante et un point virgule, d’une ligne à l’autre. 27 ESC Escape (échappement)
mat=[1 2 3;4 5 6] File Separator (séparateur de
28 FS
représente la matrice :
1 2 3
fichier)
=
4 5 6
Group Separator (séparateur de
29 GS
groupe)
Vect = [1 ;2 ;3]
Record Separator (séparateur
représente le vecteur : 30 RS
1 d'enregistrement)
= 2 31 US Unit Separator (séparateur d'unité)
3 32 SP Espace (Space en anglais)
33 ! Point d'exclamation
4.6 Exemple 34 " Guillemet droit
Algorithmique Langage de Croisillon et parfois Dièse ou (aussi
35 #
programmation dénommé signe numéro)
B 1 B=1 36 $ Dollar
C B+2 C=B+2 37 % Pourcent
C C+1 C=C+1 Esperluette (aussi dénommé
38 &
Perluète)
4.7 Code ASCII Apostrophe (guillemet fermant
39 '
simple ou accent aigu)
Il existe plusieurs norme pour coder les caractères.
40 ( Parenthèse ouvrante
Code en
Caractè 41 ) Parenthèse fermante
base Signification
re 42 * Astérisque
10
43 + Plus
0 NUL Null (nul)
44 , Virgule
1 SOH Start of Header (début d'en-tête)
Moins (aussi dénommé tire ou trait
2 STX Start of Text (début du texte) 45 -
d'union)
3 ETX End of Text (fin du texte)
46 . Point
End of Transmission (fin de
4 EOT 47 / Barre oblique (Slash en anglais)
transmission)
48 0 Le chiffre zéro
Enquiry (End of Line) (demande, fin
5 ENQ 49 1 Le chiffre un
de ligne)
50 2 Le chiffre deux
6 ACK Acknowledge (accusé de réception)
51 3 Le chiffre trois
7 BEL Bell (caractère d'appel)
52 4 Le chiffre quatre
8 BS Backspace (espacement arrière)
53 5 Le chiffre cinq
Horizontal Tab (tabulation
9 HT 54 6 Le chiffre six
horizontale)
55 7 Le chiffre sept
10 LF Line Feed (saut de ligne)
56 8 Le chiffre huit
11 VT Vertical Tab (tabulation verticale)
57 9 Le chiffre neuf
12 FF Form Feed (saut de page)
58 : Deux-points
13 CR Carriage Return (retour chariot)
59 ; Point-virgule
14 SO Shift Out (fin d'extension)
60 < Inférieur
15 SI Shift In (démarrage d'extension)
61 = Égal
16 DLE Data Link Escape
62 > Supérieur
17 DC1 Device Control 1 à 4 (DC1 et DC3
63 ? Point d'interrogation
18 DC2 sont généralement utilisés pour
Arrobe (aussi dénommé A
19 DC3 coder XON et XOFF dans un canal 64 @
commercial)
20 DC4 de communication duplex)
65 A
Negative Acknowledge (accusé de
21 NAK 66 B
réception négatif)
67 C
22 SYN Synchronous Idle
68 D
End of Transmission Block (fin du
23 ETB 69 E
bloc de transmission)
24 CAN Cancel (annulation) 70 F

13
71 G 122 z
72 H 123 { Accolade ouvrante
73 I 124 | Barre verticale
74 J 125 } Accolade fermante
75 K 126 ~ Tilde
76 L 127 DEL Delete (effacement)
77 M
78 N
79 O
80 P
81 Q
82 R
83 S
84 T
85 U
86 V
87 W
88 X
89 Y
90 Z
91 [ Crochet ouvrant
Barre oblique inversée (backslash
92 \ en anglais) ; également nommée
Antislash
93 ] Crochet fermant
94 ^ Accent circonflexe (avec chasse)
trait bas aussi dénommé Tiret bas,
95 _
ou souligné (underscore en anglais)
96 ` Accent grave (avec chasse)
97 a
98 b
99 c
100 d
101 e
102 f
103 g
104 h
105 i
106 j
107 k
108 l
109 m
110 n
111 o
112 p
113 q
114 r
115 s
116 t
117 u
118 v
119 w
120 x
121 y

14
S (A+B)-(C*4/T)+(V /T)
pour forcer l’ordre et les priorités des opérations. Cela
5 Opérations sur les variables permettra à vos algorithmes de pouvoir être traduit
dans tous les langages de programmation.
5.1 Type du résultat En Python il y a priorité entre les opérations. Il est
cependant préférable de garder l’habitude d’indiquer
Une opération entre 2 variables de même type au programme par des parenthèses l’ordre dans lequel
donne un résultat du type commun aux 2 opérandes. vous voulez que les opérations soient faites.
Une opération entre 2 variables de type différent donne
un résultat du type de celui de plus faible précision. 5.3 Opérations et fonctions particulières
Notation :
La traduction de certaines opérations et certaines
RSP : Réel Simple Précision
fonctions mathématiques dépend du langage. Le
RDP : Réel double précision
tableau suivant en donne quelques unes.
Variable 1 Variable 2 Opération Type de la
Opération VBa Gibian Python Scila
variable Fonction e b
résultat Puissance ** **
Entier Entier + ,-,*,/ entier Reste div
entier RSP + ,-,*,/ RSP entière %
entier RDP + ,-,*,/ RSP (modulo)
RSP RDP + ,-,*,/ RSP Concaténat
& CHAI +
Caractère Caractère + Chaîne de ion
(concaténation) caractères Ln math.log() ln()
La division de 2 entiers est la division euclidienne. Loga math.log(x,base
Le résultat est un entier et il y a un reste. )
exp math.exp() exp()
Exemple : test de parité Sinus math.sin()
Si 2*(N/2)=N alors Cosinus math.cos()
│ N est pair Tangente math.tan()
Sinon Dans le langage python il faut charger la
│ N est impair bibliothèque math avant de faire un calcul par
Fin si l’instruction
import math
5.2 Priorités
5.4 Conversion des variables
Dans quel ordre un programme effectue t il les
opérations ? Par exemple : A+B-C*4/T+V /T Convertir une variable signifie en changer de type.
En fait cela dépend du programme. Par exemple on transforme une variable entière en
Par exemple en VBA * et/ sont prioritaires : il variable réelle. Cela impacte la place mémoire utilisée
effectue donc d’abord C*4 /T et V/T puis il additionne par la variable. Dans l’exemple suivant on dispose
tout. d’une variable de type caractère, s, on la convertit en
Avec Gibiane toutes les opérations ont la même réel, puis on la reconvertit en caractère.
priorité : il fait A+B puis à ce résultat il retranche C, il
multiplie le tout par 4 et divise ce dernier résultat par T 5.4.1 Algorithme
additionne V au résultat précédent et enfin divise le Début
tout par T. | Déclaration de variables
Le tableau suivant récapitule les résultats : | S : chaîne de caractères
A B C T V résultat | B : réel
VBA 1 2 1 4 2 2,5 | Res : chaîne de caractère
Gibiane 1 2 1 4 2 1 | Instructions
Le résultat est bien entendu différent. En | S « 10,7 »
conséquence, il ne faut pas compter sur l’ordinateur | B← réel(S)+1,21
pour deviner les priorités auxquelles vous pensez. Vous | Res←caractère(B) + « 0 »
allez donc programmer en mettant des parenthèses Fin
pour signifier comment les opérations doivent être
effectuées. Par exemple vous programmez :

15
Dans l’algorithme suivant on trasforme S en reel, ce qui mettre un point.
permet de faire une addition, qui n’est pas premise
entre une chaîne de caractère et un reel. Puis le résultat Le nombre réel B est
est retransformé en chaîne de caractère et on lui reconverti en chaine de
concatène 0 , ce qui revient à mettre un 0 à la fin de la caractères et on concatène
chaïne. la chaine « 0 » à la fin de la
chaine « 11.91 » ce qui
5.4.2 Traduction en VBA donne « 11.910 »
Le tableau suivant donne les fonctions permettant Notez que le séparateur
les conversions décimal est redevenu un
Action Élément du langage point tel qu’est
normalement écrit le
Convertir une valeur ANSI Chr , ChrW séparateur décimal en VBa.
en chaîne .
Convertir un nombre en Format , Str Le séparateur décimal nous permet ici d’identifier
chaîne quand le programme considère la variable comme une
Convertir une chaîne en Asc , AscW chaîne de quand il le considère comme un réel. Cela
valeur ASCII vient de ce que VBa fait l’effort pour un même
Convertir une chaîne en Val programme, d’afficher suivant la tradition locale
nombre d’écriture du séparateur décimal.

5.4.3 Traduction Gibiane


Sub conversion()
'déclaration des variables Mot clef Syntaxe
Dim S As String
Dim B As Double ENTI ENTI1 = ENTIER FLOT1
Dim Res As String ENTI1=sign(FLOT1)*n Avec n ≤ abs(FLOT1
CHAI MOT1 = CHAINE ('FORMAT' MOT2 ) OBJ1 |(*N)| ( OBJ2 .....) ;
Chai permet la concaténation et la transformation de fréels
'instructions en mot.
S = "10.7" FLOT FLOT1 = FLOTTANT ENTI1 ; FLOT1 = FLOTTANT MOT1 ;
Conversion d’un entire en reel ou une chaine de caractère en
MsgBox (S) flottant
B = Val(S) + 1.21
MsgBox (B)
Res = Str(B) & "0"
MsgBox (Res)
5.4.4 Traduction en Python
End Sub Le tableau suivant donne les fonctions permettant
les conversions
Les résultats sont les suivants :
Fonction Type entrée Type sortie
La première instruction nous
Int Flottant Entier
dit d’affecter la chaine de
Float Caractère Flottant
caractère 10.7 à S
Str Flottant Caractère
Notez le point comme
Chr Code ASCII Caractère
séparateur, 10.7 est
considéré comme une Ord Caractère Code ASCII
chaine de caractères.
Par exemple
S = "10.7"
On a convertit 10.7 en réel, print (type(S))
le séparateur décimal est X = float (S)+1.21
une virgule et l’opération print (X)
10,7+1,21 est effectuée. print (str(X)+ "0")
A l’affichage VBa renvoie renvoie :
une virgule comme <class 'str'>
séparateur, mais quand vous 11.91
programmez vous devez 11.910

16
5.4.5 Traduction Scilab
Le tableau suivant donne les fonctions permettant
les conversions
Fonction Type entrée Type sortie
String Réel Chaine
Evstr Chaine Réel
Bool2s Vecteur Les valeurs booléen-
booléen nes vrai ou faux sont
Matrice remplacées par 1 ou 0
booléenne
floor Réel Arrondi à la valeur
entière inférieure la
plus proche
Ceil Réel Arrondi à la valeur
entière supérieure la
plus proche
Int-fix Réel Comme floor si le réel
est >0 sinon comme
ceil

17
| Déclaration de variables
| A (10) matrice entière
6 Tableau | K : entier
| Instructions
6.1 Définition | K← 1
| Lire A(K)
Un ensemble de valeurs portant le même nom de | K← K+1
variable et repérées par un nombre, s’appelle un | Lire A(K)
tableau, ou encore une variable indicée. | K← K+1
Le nombre qui, au sein d’un tableau, sert à repérer | Lire A(K)
chaque valeur s’appelle l’indice. | K← K+1
Chaque fois que l’on doit désigner un élément du | Lire A(K)
tableau, on fait figurer le nom du tableau, suivi de | K← K+1
l’indice de l’élément, entre parenthèses. On peut créer | Lire A(K)
des tableaux contenant des variables de tous types : | K← K+1
tableaux de numériques, bien sûr, mais aussi tableaux | Lire A(K)
de caractères, tableaux de booléens, tableaux de tout | K← K+1
ce qui existe dans un langage donné comme type de | Lire A(K)
variables. Par contre, hormis dans quelques rares | K← K+1
langages, on ne peut pas faire un mixage de types | Lire A(K)
différents de valeurs au sein d’un même tableau. | écrire « il y a », K, « valeurs de A»
Un tableau se déclare initialement, en précisant le | écrire A(1), A(2), A(3), A(4), A(5), A(6)
nombre d’indices et leur plage de variation. La | écrire A(7), A(8), A(9), A(10)
déclaration d’un tableau se fait avec les déclarations Fin
des variables avant la partie instruction.
Dans cet algorithme on voit que K est incrémenté à
6.2 Traduction en VBa
chaque lecture, c’est un compteur. On verra plus loin
Pour déclarer un tableau on utilise la commande une autre façon de faire.
dim (pour dimension) et on indique le nombre de
variables, ainsi que leur plage de variation. Par défaut la Sub compteur()
valeur basse des indices est 0. La syntaxe (de base) est : 'déclarations de variables
Dim MonTableau(valeur_basse_indice_1 to Dim A(10) As Double
valeur_haute _indice_1, ..., valeur_basse_indice_n to Dim k As Integer
valeur_haute _indice_n) as type de variable
Exemple : 'instructions
Dim Matrice(3, 4) As Integer signifie que l’on crée k=1
le tableau appelé Matrice, qu’il ne contient que des A(k) = InputBox("donnez une valeur de A", "recup A")
variables entières, que le premier indice varie de 0 à 3 k=k+1
et que le deuxième varie de 0 à 4. A(k) = InputBox("donnez une valeur de A", "recup A")
Dim MaMatrice(1 To 5, 4 To 9, 3 To 5) As Double k=k+1
signifie que l’on crée un tableau appelé MaMatrice qui A(k) = InputBox("donnez une valeur de A", "recup A")
ne contient que des variables double précision, qui a k=k+1
trois indices dont le premier varie de 1 à 5, le second de A(k) = InputBox("donnez une valeur de A", "recup A")
4 à 9 et le troisième de 3 à 5. k=k+1
De façon général, il n’est peut être pas souvent A(k) = InputBox("donnez une valeur de A", "recup A")
nécessaire de créer des tableaux en VBa puisque les k=k+1
feuille Excel sont gérées comme des tableaux. La A(k) = InputBox("donnez une valeur de A", "recup A")
commande qui permet de désigner la feuille Excel est : k=k+1
Sheets(« MaFeuille »).Cells(10,5) = 3 A(k) = InputBox("donnez une valeur de A", "recup A")
On attribue par cette instruction la valeur 3 à la cellule k=k+1
d’indices 10 et 5 de la feuille MaFeuille qui sert ici de A(k) = InputBox("donnez une valeur de A", "recup A")
tableau. k=k+1
A(k) = InputBox("donnez une valeur de A", "recup A")
Ex : utilisation d’un compteur et d’un tableau k=k+1
Algorithme : A(k) = InputBox("donnez une valeur de A", "recup A")
Début
18
MsgBox ("il y a " & k & "valeurs de A") Ma_liste[0] est r
MsgBox (A(1) & "," & A(2) & "," & A(3) & "," & A(4)) Ma_liste[3] est liste
MsgBox (A(5) & "," & A(6) & "," & A(7) & "," & A(8))
MsgBox (A(9) & "," & A(10)) Les méthodes sont :
append(elt) :ajout d’élément elt à la fin de la liste;
End Sub sort() : tri de la liste par ordre croissant;
index(elt) : renvoie l’indice de position du premier
élément qui vaut elt ;
6.3 Traduction en Gibiane reverse() : ordonne la liste par ordre décroissant ;
En Gibiane on ne crée que des tableaux à un seul del : destruction d’élément de la liste ;
indice. La syntaxe pour la déclaration est : extend(list_2) : ajoute une liste list_2 à la fin de la liste
Table vecteur MonTab ; insert(i,elt) : insère l’élément elt à la position d’indice i;
Puis pour attribuer une valeur on utilise la syntaxe remove(elt) : suprime le premier élément de la liste qui
suivante : vaut elt et envoie une erreur s’il n’y en a pas ;
MonTab.i = (3 * i) **3 ; pop([i]) : supprime l’élément en position d’indice i.
Comment peut on traduire un tableau à plusieurs count(elt) : compte le nombre de fois où elt apparaît
dimension ? Il existe 2 méthodes. dans la liste

6.3.1 Méthode 1 : Exemple :


>>> ma_liste=[1,3,5,0,'abc']
On veut traduire MonTab(40 ;50). On crée 2
>>> print ma_liste[0]
tableaux un tableau MonTab1(40) et un tableau
1
MonTab2(50).
>>> print ma_liste[4]
La déclaration est :
abc
Table vecteur MonTab1
>>> ma_liste.append(4)
Table Vecteur MonTab2
>>> print ma_liste
[1, 3, 5, 0, 'abc', 4]
6.3.2 Méthode 2 >>> lis=['z',6,3,8,4,1,9]
>>> lis.sort()
On crée un unique tableau, MonTab(NlxNc) où Nl est >>> print lis
le nombre de ligne et Nc le nombre de colonne. C’est un [1, 3, 4, 6, 8, 9, 'z']
vecteur unique de taille pour l’exemple précédent 2000. >>> del lis[0]
Pour retrouver MonTab(i,j) on utilise la relation >>> print lis
suivante : [3, 4, 6, 8, 9, 'z']
MonTab(i,j) = MonTabgibiane((j-1)Nl+i) >>> print lis[0]
3
>>>
6.4 Traduction en Python
Les variables se rapprochant le plus des tableaux Un tableau à n dimensions se génère en créant une
sont les listes et les tuples. liste de liste. Le tableau donné par montab(i,j) dans
l’algorithme se traduit par :
6.4.1 Listes >>> tab1 = [1,2,3,4,5]
Une liste est un objet. Il existe donc différentes >>> tab2 = [6,7,8,9,2]
méthodes associées à cet objet. Elle peut contenir et >>> Montab = [tab1,tab2]
ordonner toute sorte d’objet, elle n’a pas de type défini. >>> print montab[1][2]
La déclaration d’une liste se fait en lui affectant des
éléments, que l’on range entre crochets et séparés par Traceback (most recent call last):
des virgules: File "<pyshell#17>", line 1, in <module>
Ma_liste = [r,25, chaine, liste, 45.0] print montab[1][2]
Les objets ou les variables qu’elle contient ne sont NameError: name 'montab' is not defined
pas toujours de même type. Les méthodes associées à >>> print Montab[1][2]
cet objet permettent différentes actions. La 8
numérotation des éléments d’une liste commence à >>>
zéro. Pour retrouver le 1er élément d’une liste on utilise
l’indice de position :

19
On note dans cet exemple que le caractère M et le >>> tel = {'Albert':'0555 34 1234', 'Fidèle':'0234 56
caractère m sont bien différentiés dans Python. Ici 7890'}
Montab[1] désigne tab2, si on avait voulu tab1 on aurait >>> tel['Albert']
écrit Montab[0]. Montab[1][2] désigne l’élément '0555 34 1234'
d’indice 2 du tableau tab2 soit le 3ème élément de tab2 Dans cet exemple ‘Albert’ est la clef de la première
c’est à dire 8. paire. Les méthodes associées à cet objet sont :
key() : renvoie la clef
value() : renvoie la valeur
has_key() : vérifie si la clef existe

6.4.2 Tuples En créant une liste de dictionnaires ayant les mêmes


Un tuple consiste en un certain nombre de valeurs clefs on obtient une structure que l’on peut utiliser
séparées par une virgule et délimitées par des comme base de données.
parenthèses.
>>> mon_tuple=('ceci','é',1,'cours',2,'M1')
>>>
Il est possible d’imbriquer les tuples : 6.5 Traduction Scilab
>>> mon_tuple=('ceci','é',1,'cours',2,'M1') Une matrice est définie ainsi :
>>> autre_tuple=('encore',1) -->ma_matrice=[1 2 3 ; 4 5 7 ; 7 3 0]
>>> son_tuple=(mon_tuple,autre_tuple,2,4,7) ma_matrice =
>>> len(son_tuple)
5 1. 2. 3.
>>> son_tuple[4] 4. 5. 7.
7 7. 3. 0.
>>> Ou ainsi :
Un tuple vide est défini par (). Les éléments d’un -->ma_matrice=[1, 2 ,3 ; 4, 5, 7 ; 7, 3 ,0]
tuple sont indicés, le premier élément est indicé à zéro. ma_matrice =
>>> vide = ()
>>> len(vide) 1. 2. 3.
0 4. 5. 7.
Il n’est pas possible de modifier un élément d’un 7. 3. 0.
tuple une fois que celui-ci a été créé. Mais il est possible
de créer un nouveau à partir d’un ancien en allongeant Dans la définition le « ; » permet de séparer les
le tuple : lignes.
>>> mon_tuple=('ceci','é',1,'cours',2,'M1')
>>> mon_tuple[0]='cela'
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
mon_tuple[0]='cela'
TypeError: 'tuple' object does not support item
assignment
>>> mon_tuple=mon_tuple+(5,)
>>> mon_tuple
('ceci', 'é', 1, 'cours', 2, 'M1', 5)
>>>
On constate dans cet exemple qu’il n’a pas été possible
de modifier le premier élément du tuple (celui de rang
0), mais on a pu changer le tuple en lui ajoutant un
élément à la fin. Il faut noter le syntaxe : l’élément
ajouté est noté lors de l’ajout (5,).

6.4.3 Dictionnaire
C’est une liste non ordonnée de paires clé :valeur.
Les clés sont uniques. Le dictionnaire est défini entre {}.

20
7 Lecture et écriture

7.1 Algorithme
En algorithmique les instructions sont simples. Il
s’agit de : lire et écrire. Par contre il convient de
préciser si on doit lire dans un fichier ou lire à l’écran,
de même écrire dans un fichier ou écrire à l’écran.
7.2.2 Lecture et écriture sur fichier
7.2 Traduction en VBa Pour la lecture sur fichier, on commence par
préciser le fichier que l’on va ouvrir et lui attribuer un
7.2.1 Lecture et écriture à l’écran numéro (filenumber). La commande et :
En général on lit sur les feuilles Excel associées au
fichier VBa. La lecture devient simplement l’attribution Open pathname For mode [Access access] [lock] As [#]filenumber
d’une valeur à une variable. Par exemple :
NomDeVariableLocale=Sheets(“NomDeFeuilleDeCl Élément Description
asseur”).Cells(i,j).Value
Une autre possibilité est d’interroger à l’écran. On pathname indiquant un nom de
Expression de chaîne
le fait avec la méthode InputBox. Pour écrire un résultat fichier — peut comprendre un nom de
à l’écran on utilise la méthode MsgBox. L’exemple répertoire ou de dossier et un nom de
suivant donne une syntaxe simple. lecteur.
Sub pgessai_boum()
Dim A As Integer mode Mot clé indiquant le mode d'ouverture du
Dim B As Integer fichier : Append, Binary, Input, Output ou
Dim C As Integer Random. S'il n'est pas indiqué, le fichier
'lecture de A et B est ouvert en mode Random.
C = InputBox("donnez une valeur de A", "recup A")
access Facultatif. Mot clé indiquant les
A=C
opérations autorisées sur le fichier
C = InputBox("donnez une valeur de B", "recup B")
ouvert : Read, Write ou Read Write.
B=C
MsgBox "la valeur de A est : " & A, , "final" lock Facultatif. Mot clé indiquant les
MsgBox "la valeur de B est : " & B, , "final" opérations restreintes sur le fichier ouvert
End Sub par d'autres processus : Shared, Lock
Read, Lock Write et Lock Read Write.
Dans cet exemple C = InputBox("donnez une valeur
de A", "recup A") crée une fenêtre de lecture dont le filenumber valide compris entre 1 et
Numéro de fichier
titre est « recup A », le texte est « donnez une valeur de 511, inclus. Utilisez la fonction FreeFile
A » et qui permet la lecture de C (valeur de la variable). pour obtenir le prochain numéro de
fichier disponible.
Exemple :
Open "Monfic" For Input As #1
Ouverture du fichier Monfic en mode séquentiel en
lecture seule.

7.2.2.1 Modes d’ouverture


MsgBox "la valeur de A est : " & A, , "final" renvoie
une fenêtre dont le titre est « final » et le message est 7.2.2.1.1 Ouverture en mode séquentiel
la concaténation de « la valeur de A est : » et de la Les enregistrements sont lus et écrits ligne par
valeur de A.
ligne. Pour accéder à un enregistrement précis on doit
obligatoirement lire tous les enregistrements qui
précèdent. Les enregistrement sont de longueur
variable
21
Pour ouvrir un fichier en mode séquentiel on utilise
les valeurs de mode : input, output ou append. Le mode
input ouvre un fichier en lecture seule. Le mode output
ouvre un fichier en mode écriture, le mode append
ouvre un fichier en mode écriture aussi mais vous
rajouter alors les enregistrements à la fin du fichier.

En fin de programme l’instruction Close Monfic ferme le


fichier et libère le numéro de fichier. Exemple 3 :
Sub LecEcri()
Exemple 1 : Dim a As Integer
Sub LecEcri() Dim b As Integer
Dim c As Integer
Open "d:monfic.txt" For Output As #10
Write #10, 1
Write #10, 2 Open "d:monfic.txt" For Output As #10
Write #10, 3 Write #10, 1
Close #10 Write #10, 2
Write #10, 3
End Sub Close #10
Open "d:monfic.txt" For Output As #10
Donne le fichier monfic.txt sous D : , dont le Write #10, 4
contenu est : Write #10, 7
1 Write #10, 8
2 Close #10
3
Donne le fichier :
Exemple 2 : 4
Sub LecEcri() 7
Dim a As Integer 8
Dim b As Integer Le fichier précédent Monfic.txt a donc été écrasé quand
Dim c As Integer on l’a réouvert avec la deuxième commande Open
"d:monfic.txt" For Output As #10

Open "d:monfic.txt" For Output As #10 Exemple 4 :


Write #10, 1 Open "d:monfic.txt" For Output As #10
Write #10, 2 Write #10, 1
Write #10, 3 Write #10, 2
Close #10 Write #10, 3
Close #10
Open "d:monfic.txt" For Input As #10 Open "d:monfic.txt" For Append As #10
Input #10, a Write #10, 4
Input #10, b Write #10, 7
Input #10, c Write #10, 8
Close #10 Close #10
MsgBox (a & b & c)
Donne le fichier :
End Sub 1
2
Reprend l’exemple précédent, rouvre le fichier 3
Monfic.txt, le lit et renvoie : 4
7
8
En utilisant le mode append au lieu de output, les
données précédentes n’ont pas été écrasées mais on a
écrit à la suite des données précédentes.
22
Pour lire un fichier, jusqu’au dernier enregistrement on Put
utilise le symbole EOF qui signifie End Of File. Cela
donne : Le fichier monfic.dat créé ainsi est :
Open "d:monfic.txt" For Input As #10 Ò_) €
While Not EOF(10) ×_nsi\ansicpg1252\deff0\deflang1036{\font
tbl{\f0\fswiss\fcharset0 Arial;}}
Input #10, a {\*\generator Msftedit
MsgBox (a) 5.41.15.1515;}\viewkind4\uc1\pard\f0\fs20
Wend 12345\par
Close #10 13456\par
Ces instructions renvoient dans une boite message 14765\par
16090\par
d’abord 1, puis 2, puis 3, puis 4 puis 7 puis 8, puis
20000\par
comme la fin du fichier de numéro logique 10 est \par
atteinte la lecture sur le fichier s’arrête et on ferme le \par
fichier (close #10). }
_
quand il est lu avec wordpad. Les enregistrements
7.2.2.1.2 Ouverture en accès direct étaient : 1234, 2345, 3456 et 4567.
C’est le mode RANDOM. Les enregistrements sont
de longueur fixe. Dans un tel cas on peut avoir Les fichiers à accès direct sont surtout utilisés pour
directement accès à un enregistrement donné sans lire créer des bases de données.
tous les précédents uniquement en connaissant son
7.2.2.1.3 Ouverture en accès binaire
rang. Par exemple on va chercher dans un fichier le 4ème
enregistrement. Comme tous les enregistrements ont la C’est la même approche que pour les fichiers à
même taille on doit sauter 3.taille_enregistrement dans accès direct, la seule différence étant que l’on lit le
le fichier pour retrouver le 4ème enregistrement. fichier octet par octet.
L’ouverture en accès direct se fait ainsi :
Open « d :Monfic.txt » For Random As #num_fic Len=len(variable) 7.3 Traduction en gibiane
C’est dans le mot clef OPTI que l’on précise le type
Exemple : de lecture. Chaque fichier ouvert en lecture ou en
Sub LecEcri() écriture est désigné par un numéro logique. Cela
Dim a As Integer permet de distinguer les fichiers entre eux.
Dim Nb As Integer OPTION MOT1 VAL1 (MOT2 VAL2 ...) ;
Dim i As Integer Mot-clé Valeurs possibles (une)
Défaut Commentaire
MOTi VALi
9
Nb = 4 numéro unité logique ou (5 pour la
Open "d:monfic.dat" For Random As #10 Len = Len(a) 'ACQU' fichier d'entrée
'nom fichier' lecture à
For i = 1 To Nb l’écran)
numéro unité logique ou
a = InputBox("enregistrement" & i) 'DONN'
'nom fichier'
5 cartes données
Put #10, i, a numéro unité logique ou
'IMPR' 6 imprimante
Next i nom fichier
numéro unité logique ou
Close #10 'LECT'
'nom fichier'
4 fichier d'entrée
Niveau des
'NIVE' 0,1,2,3,4,5,6,7,8,9 9
Open "d:monfic.dat" For Random As #10 Len = Len(a) sorties
numéro unité logique ou
For i = 1 To Nb 'nom fichier'
'REST' 2 fichier d'entrée
Get #10, i, a mot-clé éventuel FORMAT
MsgBox (a) mot-clé éventuel XDR
numéro unité logique ou
Next i 'nom fichier'
8
Close #10 mot-clé éventuel FORMAT
mot-clé éventuel XDR
'SAUV' fichier de sortie
mot-clé éventuel TAILLE
End Sub suivi de la taille max en
4.5e8
nombre de mots simple
précision.
Ici l’instruction (méthode) put sert à écrire sur le fichier numéro unité logique ou
en accès direct et l’instruction (méthode) get sert à lire 'SGBD' 3 Sgbd
'nom fichier'
sur ce même fichier. La syntaxe est : 'SORT'
numéro unité logique ou
7 fichier de sortie
'nom fichier'
Get num_logique_fichier,numéro de l’enregistrement,
nom de l’enregistrement.
23
Dans la suite du programme différentes directives L'écriture se fait en incrémental, c'est à dire que
ou opérateurs servent à lire une donnée sur un fichier. seuls les objets n'ayant pas déjà étés sauvés et ceux
Ces directives et opérateurs sont : Acqu, lire, sauv, rest, ayant étés modifiés seront écrits à la suite de ceux étant
sort. déjà sur le fichier. Il est possible de donner un "label" à
cette partie de la sauvegarde dans la perspective de
7.3.1 Directive ACQUERIR relire le fichier jusqu'à ce label inclus.
Inséré dans un ensemble de données de CASTEM
2000, l'opérateur ACQUERIR permet d'acquérir des
objets OBJET1 (OBJET2 . . .) sur un fichier d'unité 7.3.3 Directive RESTITUER
logique N2 définie à l’aide de la directive opti. La directive RESTITUER permet de remettre en
Exemple : mémoire les objets décrits dans le fichier de numéro
OPTION ACQUERIR N2 ; logique IORES1 défini par la directive OPTI, si le "label"
ACQUERIR OBJET1 (N1) ( OBJET2*TYP2 ....); est précisé la lecture s'arrêtera une fois lue la partie de
Dans ce cas objet1 peut être entier, flottant, mot, la sauvegarde portant ce label.
listenti, listreel. Dans le cas d'objets de type LISTENTI ou Exemple :
LISTREEL il est nécessaire de fournir le nombre de OPTION REST IORES1 ;
valeurs à lire, N1 (type ENTIER). D’autre part le fichier
doit être composé d'enregistrements de 80 caractères. RESTITUER ('FORMAT' ) ;
Seuls les 72 premiers caractères de chaque
enregistrement sont lus. ('LABEL' CHA1 )
Exemple :
Le fichier de lecture étant le suivant : Utiliser l'option FORMAT si et seulement si le
1 ' est plus petit que ' 2 fichier a été écrit (à l’aide de la directive SAUV) en
2 fois 3 égale 6 formaté. Un LABEL vide ou pas de label du tout entraine
12 34 56 78 90 la restitution de tout le fichier.
la séquence de lecture suivante :

ACQUERIR I*ENTIER MM*MOT J*FLOTTANT; 7.3.4 Directive SORTIR


ACQUERIR K*ENTIER ; La directive SORTIR sort sur le fichier logique N1
ACQUERIR LL*LISTENTI 5 ; défini dans OPTI. En absence du mot-clé 'AVS' ou du
mot-clé 'EXCE' elle sort la partie du maillage limitée par
conduit aux valeurs suivantes des différentes variables : l'objet GEO1 (type MAILLAGE). Toutes les composantes
I =1 nommées définies sur cette partie figurent dans le
MM= est plus petit que fichier.
J =2 OPTION SORT N1 ; (N1 = 7 par défaut)
K =2 SORT GEO1 ('NOOP')
LL= 12 34 56 78 90 'AVS' (GEO1) (CHPO1) (CHAM1) ('SUIT') ('TEMP' FLO1)
'EXCE' OBJ1

7.3.2 Directive SAUVER Lorsque le mot-clé 'AVS' est spécifié, la directive


SORTIR sort (sur le même fichier que dans la cas
La directive SAUVER permet d'écrire les objets précédent) le MAILLAGE GEO1, le CHPOINT CHPO1 et le
OBJET1, ... OBJETi sur le fichier logique IOSAU1 défini MCHAML CHAM1 au format adapté au programme de
par la directive OPT de manière à interrompre un calcul, post-traitement AVS ( /UCD/ ASCII). La présence de
pour le reprendre ultérieurement. Il ne s'agit pas d'un chacun des trois arguments est facultative, mais au
stockage de résultats en vue d'une recombinaison moins un des trois doit être présent.
ultérieure. Lorsque le mot EXCE est spécifié, la directive SORTIR
est utile pour une utilisation ultérieure par EXCEL
Exemple : (Microsoft). En fait ce sont les LISTREEL qui sont sortis.
OPTION SAUV IOSAU1 ; Si OBJ1 est un LISTREEL il est sorti tel quel. Si OBJ1 est
une EVOLUTIO les titres puis les valeurs des listreels
SAUVER ('FORMAT' ) OBJET1 ... OBJETi ; sont sortis (chaque listreel est agrandi à la plus grande
longueur).
('LABEL' CHA1 ) Si OBJ1 est une table, chaque LISTREEL contenu
dans la table est sorti avec comme titre la valeur de

24
l'indice si celui-ci est un mot (chaque listreel est agrandi champs élémentaires dont chacun
à la plus grande longueur). s'appuie sur un sous-maillage
élémentaire.
tout autre Objet de type FLOTTANT (un nombre
7.3.5 Directive LIRE nom réél). Chaque composante du champ
La directive LIRE lit un MAILLAGE sur le fichier global (s'il existe) apparaît dans la table
d'unité logique N1 définie par la directive OPTION : sous son propre nom (tronqué à 4
Exemple : caractères).
OPTION LECT N1; (N1 = 4 par défaut)
LIRE (GEO1) ; Plusieurs structures UCD peuvent être lues (par
Tous les sous-objets présents dans le fichier sont exemple dans un fichier créé avec la directive SORT
également lus. Si le nom GEO1 du maillage est fourni, 'AVS' ... 'SUIT') si on répète l'ordre de lecture plusieurs
on vérifie qu'il existe bien sur le fichier. fois (voir soravs.dgibi).

7.3.6 Opérateur LIRE 7.3.7 Directive @EXCEL1


En présence du mot-clé 'AVS' LIRE devient un Pour récupérer vos données sous excel, il est
opérateur, qui lit le fichier d'unité logique N1 définie possible d’utiliser la directive @excel.
par la directive OPTION. Exemple: (dans cet exemple Volmor est un maillage)
Exemple : nbmax = nbel volmor;
OPTION LECT N1; (N1 = 4 par défaut) listcas1 = prog nbmax ;
TAB1 = LIRE 'AVS' ; listcas2 = prog nbmax ;
i=0;
On suppose que le fichier est de format AVS UCD
(Unstructured Cell Data) ASCII. Les objets trouvés dans repe bloc09 nbmax ;
ce fichier sont logés dans la table TAB1. La structure de i=i+1;
cette table est la suivante (tous les indices sont de type ppe = volmor elem i ;
MOT) : ‘ (retrouve l’élément i du maillage VOLMOR)
Indice Contenu ppp = bary ppe;
MAILSUPP Objet de type MAILLAGE composé de ‘ (retrouve le barycentre de l’élément i)
points (POI1) et contenant tous les y = coor 2 ppp ;
nœuds. Cet objet constitue le support du ‘ (retrouve le coordonnée y de l’élément)
champ nodal (objet de type CHPOINT) si x = coor 1 ppp;
celui-ci existe. Il est toujours créé. Il peut listcas1 = listcas1 et x;
être utilisé pour visualiser différentes listcas2 = listcas2 et y;
parties du maillage par rapport au fin bloc09 ;
maillage entier. contcri1 = EVOL 'MANU' 'X' listcas1 'sigy' listcas2;
LEMAILLA Objet de type MAILLAGE contenant tous @EXCEL1 contcri1 'contcri1.txt' ;
les éléments trouvés dans le fichier AVS.
C'est un objet composé de sous-maillages
élémentaires, dont chacun est homogène 7.4 Traduction en Python
du point de vue du type d'élément et du L’instruction print permet d’afficher le contenu
numéro du matériau. Il est toujours créé. d’une ou plusieurs variables. Par exemple :
SOUMAILA Objet de type TABLE. Cette table contient >>> print (mon_tuple)
les sous-maillages élémentaires qui sont ('ceci', 'é', 1, 'cours', 2, 'M1', 5)
indicés par des nombres entiers, allant de >>>
1 jusqu'au nombre de ces sous- maillages. Remarquez la syntaxe : print est suivi de la variable à
Cette table est toujours créée. afficher entre parenthèses.
LECHPOIN Objet de type CHPOINT. Il n'est créé que
lorsque le fichier AVS contient le champ Pour lire dans un fichier, on crée d’abord un objet
nodal. Il s'appuie sur le maillage fichier à l’aide de l’instruction la fonction open() :
MAILSUPP. filein=open(‘monfic.txt’, ‘r’)
LEMCHAML Objet de type MCHAML. Il n'est créé que filein.readlines()
lorsque le fichier AVS contient le champ filein.close()
par élément. Il est composé de sous-
25
filein est un objet fichier, auquel on applique les edmpkht
méthodes readlines, read, seek, tell ou close.
on obtient :
Pour écrire dans un fichier : >>>
De la même façon on crée l’objet fichier : bonjour
fileout = open(‘monfic.txt’, ‘w’) ceci est un
La méthode d’écriture est write. e
Méthode Action ss
read(n) Lit au plus n bits sur le fichier. 24
readline() Lit une seule ligne du fichier 6
readlines() Renvoie une liste donnant toutes 6
les lignes du fichier. 43
\n est l’indicateur de fin de ligne >>>
write(chaine de Ecrit la chaine de caractère dans
caractères) le fichier. Pour écrire autre chose fic=open('111.txt','w')
qu’une chaine de caractère il faut fic.write('ceci est un essai\n')
d’abord la convertir en chine. for i in range(6):
tell() Renvoie un nombre entier chaine1=str(i*i)
donnant la position actuelle chaine2=str((i+1)*i)
mesurée en nombre d’octets chaine=chaine1+chaine2
depuis le début du fichier fic.write(chaine)
seek(décalage,point La position est calculée en print('ceci est un essai',file=fic)
de départ) ajoutant décalage à un point de print (chaine)
référence (point de départ) : 0 fic.close()
utilise le début du fichier comme
point de départ, 1 la position on obtient à l’écran :
courante, 2 la fin de fichier. Par >>>
défaut le pont de départ est 0. 00
12
On peut ouvrir un fichier en mode écriture (‘w’), lecture 46
seule (‘r’), en mode ajout (‘a’), et en mode lecture + 912
écriture (‘r+’). 1620
2530
Exemple : >>>
fic_lect= open('maic.txt','r')
a=fic_lect.read(20) Et sur le fichier 111.txt :
print (a) ceci est un essai
a=fic_lect.readline(1) 00ceci est un essai
print (a) 12ceci est un essai
a=fic_lect.readline(2) 46ceci est un essai
print (a) 912ceci est un essai
a=fic_lect.tell() 1620ceci est un essai
print (a) 2530ceci est un essai
a=fic_lect.seek(6,0)
7.5 Traduction Scilab
print (a)
a=fic_lect.seek(0,1) nomfic = "U:\M1 - programation\Scilab\datqq.txt"
print (a)
a=fic_lect.seek(0,2) u=file('open',nomfic,'unknown')
print (a) for k=1:4
list(fic_lect) a=rand(1,4)
write(u,a)
pour le fichier 'maic.txt' comprenant : end
bonjour file('backspace',u)
ceci est un essai //x=read(u,4,4)
quell fin=read(u,1,1)

26
file('rewind',u) 0.7821625
while x<>fin 7.8216253780D-01
x=read(u,1,1) x =
write(%io(2),x)
0.0540932
end 5.4093234707D-02
x =
file('close',u)
donne : 0.2992685
U:\M1 - programation\Scilab\datqq.txt 2.9926850274D-01
-->u=file('open',nomfic,'unknown') x =
u =
0.0029166
13. 2.9166326858D-03
-->for k=1:4 x =
--> a=rand(1,4)
--> write(u,a) 0.4343749
-->end 4.3437494524D-01
a = -->file('close',u)

0.0670617 0.7651132 0.0417362 0.3438272 Rand : function permettant de générer des nombres
a = aléatoires
Read : permet de lire le fichier
0.1970167 0.2122899 0.3140399 0.7821625
a =

0.0540932 0.9190207 0.4603516 0.2992685


a =

0.0029166 0.8993471 0.8387927 0.4343749


-->file('backspace',u)
-->//x=read(u,4,4)
-->fin=read(u,1,1)
fin =

0.4343749
-->file('rewind',u)
-->while x<>fin
--> x=read(u,1,1)
--> write(%io(2),x)
-->end
x =

0.0670617
6.7061674315D-02
x =

0.3438272
3.4382718056D-01
x =

0.1970167
1.9701673323D-01
x =

27
test d’égalité exige que jusqu’à la 17eme décimale on
ait la même valeur. Or la 17eme décimale est
8 Les tests approchée. On fait pour les réels des tests > ou bien <.
Pour la même raison faire un test ≥ ou ≤ n’a pas de
8.1 Structure d’un test sens. Si on veut tester l’égalité de 2 réels on teste leur
différence. Par exemple tester A=B où A et B sont réel
Il n’y a que deux formes possibles pour un test ; la va se programmer : abs(A-B)<10-n, n étant une valeur
première est la plus simple, la seconde la plus positive dépendant de la précision cherchée.
complexe.
Si booléen Alors 8.3 Conditions composées
| Instructions
Certains problèmes exigent parfois de formuler des
Fin si
conditions qui ne peuvent pas être exprimées sous la
forme simple exposée ci-dessus. Reprenons le cas «
Si booléen Alors
Toto est inclus entre 5 et 8 ». En fait cette phrase cache
| Instructions 1
non une, mais deux conditions. Car elle revient à dire
Sinon
que « Toto est supérieur à 5 et Toto est inférieur à 8 ».
| Instructions 2
Il y a donc bien là deux conditions, reliées par ce qu’on
Fin si
appelle un opérateur logique, le mot ET.
Ceci appelle quelques explications.
Comme on l’a évoqué plus haut, l’informatique met
Un booléen est une expression dont la valeur est
à notre disposition quatre opérateurs logiques : ET, OU,
VRAI ou FAUX. Cela peut donc être (il n’y a que deux
NON, et XOR.
possibilités) :
Le ET a le même sens en informatique que dans le
• une variable (ou une expression) de type
langage courant. Pour que "Condition1 ET Condition2"
booléen
soit VRAI, il faut impérativement que Condition1 soit
• une condition
VRAI et que Condition2 soit VRAI. Dans tous les autres
cas, "Condition 1 et Condition2" sera faux.
8.2 Condition Il faut se méfier un peu plus du OU. Pour que
"Condition1 OU Condition2" soit VRAI, il suffit que
Une condition est une comparaison Condition1 soit VRAIE ou que Condition2 soit VRAIE. Le
Cette définition est essentielle ! Elle signifie qu’une point important est que si Condition1 est VRAIE et que
condition est composée de trois éléments : Condition2 est VRAIE aussi, Condition1 OU Condition2
une valeur reste VRAIE. Le OU informatique ne veut donc pas dire
un opérateur de comparaison « ou bien »
une autre valeur Le XOR (ou OU exclusif) fonctionne de la manière
Les valeurs peuvent être a priori de n’importe quel suivante. Pour que "Condition1 XOR Condition2" soit
type (numériques, caractères…). Mais si l’on veut que la VRAI, il faut que soit Condition1 soit VRAI, soit que
comparaison ait un sens, il faut que les deux valeurs de Condition2 soit VRAI. Si toutes les deux sont fausses, ou
la comparaison soient du même type ! que toutes les deux sont VRAI, alors le résultat global
Les opérateurs de comparaison sont : est considéré comme FAUX. Le XOR est donc
égal à… l'équivalent du "ou bien" du langage courant.
différent de… J’insiste toutefois sur le fait que le XOR est une
strictement plus petit que… rareté, dont il n’est pas strictement indispensable de
strictement plus grand que… s’encombrer en programmation.
plus petit ou égal à… Enfin, le NON inverse une condition :
plus grand ou égal à… NON(Condition1) est VRAI si Condition1 est FAUX, et il
L’ensemble des trois éléments constituant la sera FAUX si Condition1 est VRAI. C'est l'équivalent
condition constitue donc, si l’on veut, une affirmation, pour les booléens du signe "moins" que l'on place
qui a un moment donné est VRAIE ou FAUSSE. devant les nombres.
Dans un test on n’écrit jamais de condition d’égalité Alors, vous vous demandez peut-être à quoi sert ce
sur 2 réels : ils seront toujours différents, n’oubliez pas NON. Après tout, plutôt qu’écrire NON(Prix > 20), il
qu’un réel double est compris entre - serait plus simple d’écrire tout bonnement Prix=<20.
1,79769313486231570E+308 et - Dans ce cas précis, c’est évident qu’on se complique
4,94065645841246544E-324 s’il est négatif, et inutilement la vie avec le NON. Mais si le NON n'est
4,94065645841246544E-324 et jamais indispensable, il y a tout de même des situations
1,79769313486231570E+308 s’il est positif. En effet un dans lesquelles il s'avère bien utile.

28
On représente fréquemment tout ceci dans des 8.7 Traduction Scilab
tables de vérité (C1 et C2 représentent deux conditions,
If condition then Instruction 1;
et on envisage à chaque fois les quatre cas possibles)
Else Instruction 2 ;
end
C1 C2 C1 et C2 C1 ou C2 C1 xor C2 Non C1
If condition1 then Instruction 1;
V V V V V F
Elseif condition2 then Instruction 2 ;
V F F V F F Else Instruction 3 ;
F V F V F V end
F F F F V V
exemple :
8.4 Traduction en VBa Algorithme :
If Condition then mettre les trois valeurs dans d
Instructions1 si alice obtient trois 6, alors
Else │ alice gagne 20 euros
Instruction2 sinon, si elle obtient 3 dés identiques, alors
Endif │ alice gagne 10 euros
sinon, si elle obtient 2 dés identiques, alors
8.5 Traduction en gibiane │ alice gagne 5 euros
SI Condition ; sinon
Instructions1; │ alice ne gagne rien
SINON ; Fin si
Instructions2; afficher le gain d’alice
FINSI ;
Traduction en scilab :
D=tirage_entier(3,1,6);
if D==[6,6,6] then
8.6 Traduction en Python G=20;
elseif taille(unique(D))==1 then
if (condition):
G=10;
instruction 1
elseif taille(unique(D))==2 then
else :
G=5;
instruction 2
else
G=0;
instruction 3
end
afficher("Alice gagne "+..
Remarque : c’est seulement l’indentation qui
string(G)+ " euros")
permet de voir que les instructions 1 et 2 sont à
l’intérieur d’une structure. L’instruction 3 n’est pas
indentée, elle n’est donc pas dans la boucle.
L’indentation est obligatoire, elle permet d’identifier les
structures. En effet il n’y a pas d’instruction de fin de
structure. On repère la fin d’une structure par le fait
que les instructions ne sont plus indentées.

Si l’on imbrique 2 boucles on indente doublement.


if (condition1):
if (condition 2):
instruction1
else :
instruction 2

instruction 3

29
Exemple 2:
Sub exo202()
9 Structures – Exemples et traduction Dim n As Integer
'n est le nombre pour lequel on s'interroge
9.1 Pour Dim i As Integer
'i est un compteur et designe le diviseur testé
On utilise cette structure pour répéter des Dim somme As Integer
instruction un nombre de fois connu. 'somme est le somme des diviseurs stricts
Dim reste As Integer
9.1.1 Définition
'reste est le reste de la division entière de n par i
Pour compt = 1 à N (pas p) faire
| Instructions 'initialisation
Fin pour somme = 1
reste = 10
Exemple :
Ex : utilisation d’un compteur et d’un tableau 'recherche des diviseurs et calcul de la somme
Algorithme : n = InputBox("donnez l'entier n", "recup n")
Début For i = 2 To (Int(n / 2)) Step 1
| Déclaration de variables reste = n - (Int(n / i) * i)
| A (10) matrice entière If reste = 0 Then
| K : entier somme = somme + i
| Instructions End If
| Pour k=1 à 10 faire Next i
| Lire A(K)
| fin pour 'test sur la somme pour savoir si n est parfait
| écrire « il y a », K, « valeurs de A» If somme = n Then
| Pour k=1 à 10 faire MsgBox n & " est parfait", , "Réponse"
| écrire A(K) Else
| fin pour MsgBox n & " n'est pas parfait", , "Réponse"
| écrire A(1), A(2), A(3), A(4), A(5), A(6) End If
| écrire A(7), A(8), A(9), A(10)
Fin End Sub

9.1.2 Traduction en VBa 9.1.3 Traduction en Gibiane


For i=1 to N step p (i = 0 ;)
Instructions1 REPE bloc01 N;
Next i Instructions1 ;
Exemple 1 : compteur et tableau (i=i+p ;)
Sub compteur2() FIN bloc01 ;

'déclarations de variables 9.1.4 Traduction en Python


Dim A(10) As Double La boucle for existe en Python mais le compteur
Dim k As Integer peut être n’importe quoi, que python gère dans un
tableau.
'instructions etudiants=['albert','berthe','cedric','dagobert']
For k = 1 To 10 for i in etudiants :
A(k) = InputBox("donnez une valeur de A", "recup A") print (i)
Next k print ("ceci imprime la liste des étudiants")
MsgBox ("il y a " & (k - 1) & "valeurs de A") donne :
For k = 1 To 10 >>>
MsgBox (A(k)) albert
Next k berthe
End Sub cedric
dagobert
30
ceci imprime la liste des étudiants Un programme contenant une telle structure doit
>>> toujours être enregistré avant d’être exécuté, car une
erreur de programmation peut conduire à une boucle
Si on veut introduire un compteur, la fonction range () tournant une infinité de fois.
qui permet de créer une liste d’entiers : Range(5) crée
la liste [0, 1, 2, 3, 4] c'est-à-dire une liste de 5 entiers 9.2.1 Définition
commençant par 0 et de pas 1. On crée ainsi la liste des La structure algorithmique correspondante est :
compteurs. REPETER
for instruction
a=0 JUSQU'A condition
for i in range(5):
print (i)
a=a + i 9.2.2 Traduction en VBa
print (a) Les 2 syntaxes suivantes traduisent le « Répéter jusqu’à
donne : ce que ». Dans le premier cas la condition est en début
>>> de boucle il faut donc initialiser la condition, et dans le
0 2nd cas les instructions dans la boucle sont effectuées
1 une fois et on teste la condition en fin de boucle.
2
Do until (condition)
3
Instructions
4 Loop
10
>>> Do
Instructions
9.1.5 Traduction Scilab
Loop until (condition)
for … end

exemple 9.2.3 Traduction en Gibiane


Algorithme En Gibiane cela se traduit par REPE et par QUITTER.
mettre 4 dans u(1) Exemple :
Pour n allant de 1 à 20 i = 0;
│ u(n+1) prend la valeur u(n)+2n+3 repe idiot 20;
│ afficher n et u(n) i = (i + 1) ;
Fin pour si (i ega 10) ;
quitter idiot;
Traduction en Scilab finsi ;
u(1)=4; mess i;
for n=1:20 fin idiot;
u(n+1)= u(n)+2*n+3; mess 'bientot fin';
afficher([n,u(n)]) fin;
end
donne à l’exécution :
9.2 Structure Répéter jusqu’à
$ * i = 0;
On utilise cette structure quand on a des $ * repe idiot 20;
instructions à répéter, on ne sait pas combien de fois, $ * i = (i + 1) ;
mais on arrête la répétition lorsqu’une condition est $ * si (i ega 10) ;
réalisée. Dans la structure « Répéter …jusqu’à » la $ * quitter idiot;
condition est testée en fin de boucle, la série $ * finsi ;
d’instructions est donc exécutée au moins une fois, $ * mess i;
dans la structure « tant que …. Faire » , la série 1
d’instruction n’est exécutée que si la condition est $ * fin idiot;
vérifiée. Si ce n’est pas le cas, la série d’instruction n’est 2
jamais exécutée. 3
4
31
5 Msgbox(« bonjour »)
6 X=2
7 Loop
8 Renvoie le message « bonjour » une fois.
9 Do
$ * mess 'bientot fin'; Instructions
bientot fin Loop while (condition)
$ * fin; Dans cette traduction les instructions sont exécutées
puis à la fin on vérifie la condition. Dans ce cas l’exmple
La directive QUIT (ou QUITTER) permet de sortir de précédent donne :
la boucle quand la condition est vérifiée. X=0
Do
9.2.4 Traduction en Python Msgbox(« bonjour »)
Voir paragraphe 734 X=2
Loop while x=1
9.2.5 Traduction Scilab Renvoie le message « bonjour » une fois. On voit ici
Voir paragraphe 735 qu’il n’y a pas besoin d’initialiser.

9.3 Tant que While (condition)


Instructions
Quand vous utilisez ce genre de structure, vous Wend
avez fini d’écrire le programme, avant de tester le Cette syntaxe traduit plus simplement le « tant que »
programme, vous avez naturellement déjà vérifié algorithmique.
l’algorithme, vous enregistrez votre programme. En
effet une petite erreur de traduction de l’algorithme
peut entrainer une boucle infinie, qui vous oblige à 9.3.3 Traduction en Gibiane
interrompre le programme de façon brutale et peut
On peut le réaliser à l’aide des directives REPE, QUIT
vous faire perdre tout votre travail.
et de la condition si
9.3.1 Définition
9.3.4 Traduction en Python
while condition ;
TantQue booléen
Instruction1
|…
Instruction 2
| Instructions
Reprise des instructions du programme
|…
FinTantQue
Il n’y a pas d’instruction de fin de boucle, seule
9.3.2 Traduction en VBa l’indentation permet de voir que la boucle est finie.
Il existe plusieurs traductions. Exemple :
Do while (condition) i=1
Instructions while i <= 4:
Loop print (i)
Dans cette traduction les instructions sont exécutées i= i + 1
tant que la condition est vraie. Il faut initialiser de façon print ("ce programme imprime 1,2,3,4")
à ce que la condition soit réalisée avant de rentrer dans
la boucle. Exemple : 9.3.5 Traduction Scilab
X=0
while … end
Do while x=1
Msgbox(« bonjour »)
Exemple
X=2
Algorithme
Loop
mettre 1,2 dans h (h = hauteur du sapin)
Dans cet exemple il ne se passe rien car initialement
mettre 2005 dans a (a = année)
x=0. Pour rentrer dans la boucle il faut initialiser x à 1.
Tant que h<7
X=1
│ h prend la valeur h+0,3 (mon sapin grandit)
Do while x=1
│ a prend la valeur a+1 (une année se passe)
32
Fin de tant que
afficher a (la dernière année) 'Instructions
N = InputBox("Donnez un nombre entier positif")
Traduction en Scilab
h=1.2; 'initialisation
a=2005; Rest = 0
while h<7 i=0
h=h+0.3; Rac = N
a=a+1;
end While (Rac - Rest) > 0
afficher("Je couperai mon sapin en "+string(a)) Rac = Rac - (2 * i + 1)
Rest = (2 * i + 1)
i=i+1
9.3.6 Exemples
Wend
9.3.6.1 Problème
Écrire une fonction qui calcule la racine carrée Rac = i
entière d’un nombre entier positif par soustractions If (Rac * Rac) = N Then
successives des nombres impairs. MsgBox ("la racine de " & N & " est " & Rac)
Else
9.3.6.2 Algorithme MsgBox ("la racine approchée de " & N & " est " & Rac)
End If
DEBUT
Déclaration des variables
End Sub
Dimension Rac entier
Dimension N entier 9.3.6.4 Gibiane
Dimension Rest entier
Dimension i entier *Rac : différence de N avec la somme des nombres
*impairs
Instructions * i0 : indicateur
Ecrire « Donnez un nombre entier positif » * i compteur permettant de soustraire les nombres
Lire N *impairs
Rest 0 * Rac0 : racine carrée approchée
i 0 *reste : nombre impair
Rac N
*Instructions;
Tant que (Rac-Rest)>0 Faire option acqu 5;
│ Rac Rac-(2i+1) mess "Donnez un nombre entier positif";
│ Rest 2i+1 acqu N;
│ i i+1
Fin tant que *initialisation
Rac i Reste = 0;
Si (Rac.Rac = N) alors i = 0;
│ Ecrire « la racine de » , N, « est », Rac Rac = N;
Sinon i0 = 0;
│ Ecrire « La racine approchée de », N, « est », Rac
Finsi repe bloc01 N;
FIN Rac = Rac - (2 * i + 1);
Reste = (2 * i + 1);
9.3.6.3 VBa i = i + 1;
delta = rac - reste;
Sub RacineCarrée()
si ((delta <eg 0) et (i0 ega 0));
'Déclaration des variables
Rac0 = i;
Dim Rac As Integer
i0 = 1;
Dim N As Integer
finsi;
Dim Rest As Integer
fin bloc01;
Dim i As Integer
33
9.4 Structure Choix
delta = rac0 * rac0;
si (delta ega N) ; 9.4.1 Définition
mess "la racine de " N "est " Rac0; Choix
sinon; | si A= valeur1 alors
mess "la racine approchée de " N " est " Rac0; | Exécuter instructions 1
finsi; | si A= valeur2 alors
fin; | Exécuter instructions 2
| …..
Remarque : pour traduire la structure « tant que » on a | …..
choisi de limiter la fonction REPE à N fois qui est | si A= valeuri alors
supérieur au nombre de fois nécessaire. Un indicateur | Exécuter instructions i
i0 permet de fixer rac0 au nombre de fois où l’on peut | …..
soustraire un nombre impair sans que le résultat | …..
devienne négatif. La boucle continue après sans que les | si A= valeur autre
calculs effectués ne changent la valeur de rac0. | Exécuter instructions autres
On aurait aussi pu utiliser la directive QUITTER qui Fin choix
aurait évité de répéter les instructions N fois.
Les Valeur i sont les valeurs que peut prendre la
9.3.7 Traduction en Python
variable A

9.4.2 Traduction en VBa


Select case A
Case valeur1
Instructions1
Case valeur2
Instructions2
….
….
Case valeuri
Instructionsi
….
….
Elsecase
9.3.8 Traduction Scilab
Instructions autres
N=input("donnez une valeur du nombre entier ") End select
Rest=0
i=0 9.4.3 Traduction en Gibiane
Rac=N Il n’y a pas de structure particulière. Cela se traduira
pas des structures «SI ..SINON…FINSI » imbriquées.
while((Rac-Rest)>0) then 9.4.4 Traduction en Python
Rac=Rac-((2*i)+1)
Rest=(2*i)+1 Il n’y a pas de structure particulière. Cela se traduira
i=i+1 pas des structures «if : else : » imbriquées.
end
9.4.5 Traduction Scilab
Rac=i select ... case ... else ...end
select atester // atester contient un expression
if ((Rac*Rac)==N) then case cas1 // si atester vaut cas1 alors
print(%io(2),Rac); instruction1
else case cas2 // si atester vaut cas2 alors
print(%io(2), Rac); instruction2
end else // autrement

34
instruction3
end

exemple :
a=round(rand(1,2));
select a
case [0 0]
b=1;
case [0 1]
b=2;
else
b=0
end

35
DEBUT FONCTION Puissance(R,N)
Déclaration variables
10 Fonction Variables d’entrée :
Dimension N entier
10.1 Définition Dimension R réel
Variables locales :
10.1.1 Constitution Dimension i entier
Dimension RR réel
Une fonction est donc constituée de trois parties :
• le nom proprement dit de la fonction. Instructions :
• deux parenthèses, une ouvrante, une RR 1
fermante. Ces parenthèses sont toujours Pour i=1 à N faire
obligatoires, même lorsqu'on n'écrit rien à │ RR RR*R
l'intérieur. Fin Pour
• une liste de valeurs, indispensables à la Puissance = RR
bonne exécution de la fonction. Ces valeurs FIN FONCTION
s’appellent des arguments, ou des
paramètres. Certaines fonctions exigent un On voit ici que la dernière instruction est : nom de
seul argument, d’autres deux, etc. et la fonction sans ses arguments (ici c’est donc Puissance
d’autres encore aucun. A noter que même et non Puissance(R,N)) égale une variable.
dans le cas de ces fonctions n’exigeant
aucun argument, les parenthèses restent Par la suite dans le programme principal (par
obligatoires. Le nombre d’arguments exemple calcul de l’aire d’un carré) on fait appel à cette
nécessaire pour une fonction donnée ne fonction. Les variables locales n’existent plus, c'est-à-
s’invente pas : il est fixé par le langage. Par dire une fois le calcul de la fonction effectué, l’espace
exemple, la fonction sinus a besoin d’un mémoire alloué à ces variables est réalloué à d’autres
argument (ce n’est pas surprenant, cet variables.
argument est la valeur de l’angle). Si vous
essayez de l’exécuter en lui donnant deux DEBUT
arguments, ou aucun, cela déclenchera une Déclaration de variables
erreur à l’exécution. Notez également que Variable Aire réel
les arguments doivent être d’un certain Variable RR réel
type, et qu’il faut respecter ces types. Instructions
On commence par définir une fonction. Dans cette Ecrire « donnez le coté du carré »
partie du programme on associe à la fonction une série Lire RR
d’instruction qui seront exécutées à l’appel de la Aire Puissance(RR, 2)
fonction. Cette série d’instruction se termine toujours Ecrire « l’aire du carré est », Aire
par une instruction du type : FIN
Nom fonction variable
On a utilisé ici la variable RR pour désigner le coté
10.1.2 Variables locales du carré, ce qui ne pose pas de problème puisque dans
Dans cette partie du programme on peut définir des la fonction ce n’est qu’une variable locale. On remarque
variables locales qui ne seront pas exploitées par la que dans les langages de programmation il existe des
suite dans le programme principal. Ces variables locales fonctions prédéfinies (sinus, cosinus, ……) et on ignore
n’ont de sens que dans les instructions définissant la les noms donnés aux variables locales utilisées pour le
fonction. calcul de la fonction. Le fait que ces variables ne soient
que locales et disparaissent apres permet quand on
10.1.3 Exemple programme de donner des noms à des variables sans se
La fonction puissance n’existe pas en algorithmique. poser la question de savoir si les programmateurs des
On va donc écrire les instructions permettant de fonctions n’ont pas déjà utiliser ce nom.
calculer la puissance entière d’un nombre.
Les paramètres de la fonction sont le nombre et la 10.2 Traduction en VBa
puissance. Le programme d’une fonction en VBA comporte au
minimum les lignes suivantes :

36
Function NomDeLaFonction(Var1 As Type1, Var2 c=a-b
As Type2,…) As TypeDuResultat print(c)
Instructions return c
NomDeLaFonction=[Résultat ou Formule
permettant de calculer le résultat]
End Function x=8
y=3
On peut choisir librement le nom qu’on souhaite z=1
donner à la fonction et à ses variables. Les seules z=maf(x,y)
contraintes sont : print(z)
Ne pas utiliser un nom ayant déjà une autre
signification pour Excel (nom déjà donné à une x=10
autre fonction, à une variable…) y=2
Ne pas mettre d’espace. Cette contrainte est c= maf(x,y)
générale à tout ce à quoi on attribue un nom. print(c)
Ne pas utiliser certains caractères spéciaux, renvoie :
comme %... >>>
Même si c’est toléré en VBA, éviter d’utiliser 2
des caractères accentués (é, è, à…) 2
Privilégier des noms évocateurs pour que la 2
relecture du programme soit plus aisée. 2
Préférer des noms avec une première lettre en >>>
majuscule.
10.5 Traduction Scilab
Une façon usuelle de définir des fonctions est de mettre
10.3 Traduction en Gibiane celles-ci dans un fichier à extension ``.sci''. Le nom de
Il faut écrire un sous programme. La fonction telle fichier est sans importance3.5, et plusieurs fonctions
que définie dans ce paragraphe n’existe pas en Gibiane. peuvent être dans le même fichier.
Néanmoins il est possible de définir ``inline'' une
fonction avec la commande deff. Depuis la version 2.6
de Scilab, on peut directement dans un script écrire une
10.4 Traduction en Python fonction avec la même syntaxe comme si celle-ci se
Pour définir une fonction, la syntaxe est la suivante : trouvait dans un fichier séparé. Elle est ``chargée''
def NomDeLaFonction (v1,v2, ….,vi,…)) : automatiquement.
instruction 1
instruction 2 Syntaxe
return vj la fonction doit commencer par le mot réservé function
Puis dans le programme principal, la fonction est et finir par endfunction sous la forme
appelée : function
Instruction p1 [out1,out2,...,outN]=nomfonction(in1,in2,...,inP)
Instruction p2
NomDeLaFonction (+++) // out1,out2,...,outN sont les variables de sortie
Instruction p3 // in1,in2,...,inP variables d entree

Ou bien instructions
Instruction p1 endfunction
Instruction p2
x= NomDeLaFonction (+++) Il faut veiller à ne pas ``écraser'' une fonction Scilab
Instruction p3 existante, dans ce cas doit apparaître un message
signalant une telle éventualité.

L’exemple suivant illustre cela : -->function out=norm(in)


def maf(a,b): --> out=sqrt(sum(in.^2,'r'));
a=7 -->endfunction
b=5 Warning :redefining function: norm

37
Ceci est déjà le cas pour un certain nombre de fonctions
Dans ce dernier cas la fonction est définie directement Scilabpar exemple
dans l'espace de travail, elle est automatiquement -->[m,k]=max(rand(1:10))
``chargée''. k =

Charger une fonction 9.


Pour que la fonction soit reconnue et exécutée par m =
Scilab il faut la ''charger''. En effet les fonctions sous
Scilab ont un statut de variables, et donc nécessitent 0.8782165
d'être initialisées. Le fait qu'une fonction soit une
variable permet, de manière naturelle de la passer en où la variable k va contenir le rang du terme maximal.
paramètre. Scilab offre la possibilité lors d'un appel de fonction de
Pour cela comme pour l'exécution d'un script, par le contrôler le nombre de paramètres en entrée et sortie.
menu puis , on peut sélectionner le fichier (.sci) et Il s'agit de la commande argn. Voici un exemple d'une
cliquer sur . fonction, qui teste le nombre d'argument passé en
paramètre et calcul le déterminant de l'argument et sa
On peut faire ceci en ligne par la commande getf trace dans le cas où deux variables de sortie sont
spécifiées.
-->getf NomFichier.sci
function [a,b]=mafonction(A)
ou [lhs,rhs]=argn()
-->getf(`'/nom.complet.du.repertoire/NomFichier.sci') // lhs : left hand side
// rhs : right hand side
et les fonctions3.6 de NomFichier.sci deviennent if rhs==0
accessibles. disp('Impossible de faire quelque chose')
return
end
Remarque : Attention quand on modifie une fonction il a=det(A);
faut la ``recharger'' (doit apparaître : Warning if lhs==2
:redefining function ). b=trace(A)
end
endfunction
Appel d'une fonction
Pour exécuter une fonction il suffit de l'appeler en argn peut être aussi utilisé sous la forme lhs=argn(1) ou
passant les arguments nécessaires rhs=argn(2). Les fonctions varargin et varargout
-->mafonction(rand(2,2)) permettent une gestion plus pointue de la liste des
variables d'entrées et de sorties.
Mais dans le cas où ma fonction est définie comme suit

function [a,b]=mafonction(A)
.....

l'appel précédent ne renvoie que la valeur de a.


Pour obtenir les deux valeurs escomptées il faut faire un
appel sous la forme

-->[p,q]=mafonction(rand(2,2))
q =

! 0.8782165 0.5608486 !
p =

! 1. 0. !

38
d’entrée, et des variables de sortie qui se trouvent
dans la parathèse, en argument, suivant le nom du
11 Sous programme sous programme. C’est comme un sous traitant à
qui vous fournissez des renseignements pour qu’il
11.1 Définition fasse le travail (variables d’entrée) et qui vous
Un sous programme est une série d’instructions. renvoie d’autres renseignements en retour
Cela permet 2 choses : (variables de sortie).
Eviter de répéter des séries d’instructions
identiques dans un programme principal. On les Sub NomDeLaMacroPrincipale()
remplace alors par le sous programme qu’on appelle Dim Variable_entrée1 As TypeVariableE1
quand on veut effectuer la série d’instruction. Dim Variable_entrée2 As TypeVariableE2
Structurer un programme : un programme principal ….
qui sert à appeler différents sous programmes, chacun
Dim Variable_sortie1 As TypeVariableS1
d’eux faisant une opération unique.
Dim Variable_sortie2 As TypeVariableS2
Un sous programme peut être assimilé à une affaire
confiée à un sous traitant : on doit lui donner des …
Call NomDeLaMacroSecondaire (Variable_entrée1,
informations pour qu’il travaille et lui quand le travail
Variable_entrée2, …, Variable_sortie1, Variable_sortie2,…)
est fini renvoie d’autres informations, ou les mêmes

transformées. Ce sont les variables d’entrées et les
variables de sortie. End Sub

11.2 Traduction en VBa


11.3 Traduction en gibiane
Une macro (appelée aussi procédure) est une
séquence d’instructions en langage VBA qu’Excel La procédure commence par l’opérateur DEBPROC,
interprète et qui conduisent à la réalisation de et finit par l’opérateur FINPROC.
différentes actions ou tâches. Une macro s’écrit dans un Syntaxe :
module (comme pour les fonctions) selon la syntaxe DEBPROC PROC1 (OBJ1?TYP1 OBJ2?TYP2 .... ) ;
suivante : L'opérateur DEBPROC crée un objet de type
PROCEDUR qui contient une suite d'instructions
Sub NomDeLaMacro() élémentaires, dont la première est DEBPROC et la
[séquence d’instructions traduisant ce que la dernière est FINPROC. La procédure peut avoir une liste
macro doit faire] d'arguments typés (OBJ1,OBJ2,...). ? peut prendre deux
End Sub valeurs :
* qui rend la donnée de l'argument
A la différence d’une fonction, la première ligne obligatoire au moment de l'appel de la procédure,
du programme d’une macro ne se termine pas / qui la rend facultative.
par « As TypeDeResultat », car le rôle d’une Une procédure a accès à tous les objets existants
macro n’est pas de retourner un résultat. avant son appel mais ne peut pas les modifier. Tout
Parmi les instructions figurant dans le corps objet dont le nom commence par ! ne sera pas initialise
d’une macro, on peut trouver : par un objet de même nom défini en dehors de la
• des structures conditionnelles « procédure. Les objets créés lors de l'exécution d'une
If/Then/Else/End If » procédure ne sont pas accessibles à l'extérieur de la
procédure.
• la déclaration et l’utilisation de variables
locales
• l’appel à une fonction programmée dans le
même projet VBA 11.4 Traduction en Python
Macros principales Pas trouvée!
La macro principale (ou programme principal
dans les autres langages) est la programme qui 11.5 Traduction Scilab
exécute tout le travail que vous avez à
programmer. Il peut faire appel à des fonctions ou
a des sous programme (ou macros secondaires en
VBa). Les macro secondaires ont des variables
39
40
Left : Renvoie une valeur de type Variant (String)
contenant le nombre indiqués de caractères d'une
12 Chaines de caractères chaîne en partant de la gauche.
Exemple : left(« il fait beau »,6) renvoie « il fai » .
12.1 Fonctions de base
Mid : Renvoie une valeur de type Variant (String)
L’unique opérateur est la concaténation. A partir de contenant un nombre indiqué de caractères extraits
cet opérateur il est possible de créer une fonction qui d'une chaîne de caractères à partir d’une position
compte les mots, compte les lettres ... Voir les donnée.
exercices. Exemple : Mid((« il fait beau »,9,3) renvoie le morceau
de chaine qui commence au 9ème caractère et de
12.2 Traduction en VBa
longueur 3 caractères : «bea »
12.2.1 Concaténation
Right : Renvoie une valeur de type Variant (String)
L’opérateur de concaténation est & ou +. Il est contenant le nombre indiqué de caractères d'une
préférable d’utiliser &. La syntaxe est : chaîne en partant de la droite.
résultat= expression1 & expression2 Exemple : Right(« il fait beau », 6) renvoie « t beau ».
résultat = expression1+expression2
avec : 12.3 Traduction en gibiane
opérateur + : L'opérateur CHAINE permet de fabriquer un objet
Expression 1 Expression2 résultat MOT1 de type MOT de 72 caractères au plus.
String String String Syntaxe :
String Variant String MOT1 = CHAINE ('FORMAT' MOT2 ) OBJ1(?N) ( OBJ2 .....) ;
String Numérique Erreur OBJi : objets de type MOT, ENTIER, FLOTTANT ou
LOGIQUE
Opérateur & : MOT2 : format FORTRAN dans lequel on souhaite
Expression 1 Expression2 résultat écrire les flottants. On peut préciser le format pour
Quelconque Quelconque String chacun des flottants. MOT2 doit obligatoirement
commencer et finir par des parenthèses. Le format par
défaut est '(1PE12.5)'.
12.2.2 Fonctions particulières
Chr : Renvoie une valeur de type String contenant le Exemple :
caractère associé au code ASCII de caractère indiqué. ed = '123';
Exemple : Chr(97)=a edd = '456';
eddd = chai ed edd;
Asc : Renvoie une donnée de type Integer mess eddd ;
représentant le code de caractère correspondant à la
première lettre d'une chaîne. renvoie : 123456
Exemple : asc(a) = 97

Instr : Renvoie une valeur de type Variant (Long)


indiquant la position de la première occurrence d'une 12.4 Traduction en Python
chaîne à l'intérieur d'une autre chaîne. Toute lecture sur fichier est du type texte. Python
Exemple : InStr(2, "il fait beau ", "ait", 1) recherche la ne reconnait que du texte quelque soit ce qui est écrit
chaine "ait" à l’intérieur de la chaine "il fait beau " à sur le fichier.
partir du 2ème caractère. Le dernier paramètre, ici égale
à 1, indique le type de comparaison. S’il est égal à 1 la
comparaison est textuelle, s’il est égal à 0 la
comparaison est binaire. La fonction compare alors les
code ascii et va distinguer les majuscules et les
minuscules ce qui n’est pas le cas si la comparaison est 12.5 Traduction Scilab
textuelle. Ici le résultat est 5.

Len : renvoie le nombre de caractères d’une chaine.


Exemple : len(« il fait beau ») renvoie 12.
41
Pour K=1 à N faire
| K K+1
13 Algorithmes | Affichez K
Fin pour
13.1 Généralités
Dans les chapitres précédents, vous avez écrit des Fin programme
programmes, à partir d’une liste d’instructions
disponibles (chapitre 2) et de structures (chapitre 3). Un
algorithme, écrit en vue d’un programme informatique, 13.4.2 Lecture de fichier
est un tel programme mais la liste des instructions est la Début programme
même quelque soit les langages informatiques. Déclaration de variable :
Un langage informatique est une interface entre Mat(100) : matrice entière
l’ordinateur et le programmateur. C’est la façon dont on I : entier
peut communiquer avec la machine. Actuellement les Imax : entier
langages informatiques sont assez proches des
algorithmes. En fait si vous savez écrire un algorithme Instructions
et si vous avez les traductions des instructions et des I 0
structures algorithmiques dans un langage informatique Ouvrir « monfic.txt » en lecture séquentielle
(Basic, Fortran, VBA , Python, Scilab, Gigiane, etc ….), Tant que non-fin-de-fichier et I≠101 faire
alors vous pouvez écrire un programme dans n’importe | I I+1
lequel langage informatique. Pour la structure d’un | lire Mat(I)
algorithme, référez vous au polycopié de cours. Fin pour
Imax I

13.2 Liste d’instructions Pour I=1 à Imax faire


On retrouve : | écrire Mat(I) sur « monfic.txt »
• Les 4 opérations + , - , x, \ Fin pour
• Les fonctions : sin, cos, tan, exp, ln, loga,
• Ouverture, lecture, écriture et fermeture de Fin programme
fichiers
• Création de matrices à n dimensions
13.4.3 Factorielle
Début programme
13.3 Instructions particulières Déclaration de variable :
Il peut y avoir des sous programme que votre K : entier
algorithme appelle. Ces sous programmes sont créés FacK : entier (factorielle)
par les fabricants de système : les impressions de
documents font appel à des sous programmes de Instructions
gestion d’imprimantes que vous appelez dès lors que Afficher : « donner la factorielle à calculer »
vous mettez comme instruction « Impression ». Lire K
FacK K
Tant que K≠0 faire
13.4 Exercices | FacK FacK*K
Dans les exercices suivants, on vous propose de | K K-1
traduire des algorithmes déjà écrits dans les 4 langages | Afficher FacK
proposés par le polycopié : VBA , Python, Scilab et Fin pour
Gigiane. On vous demande aussi d’expliquer ce que fait Afficher « le résultat est », FacK
ce programme. Fin programme
13.4.1 Compteur
Début programme
13.4.4 Amusement
Déclaration de variable : Début programme
K : entier (compteur) Déclaration de variable :
K : entier
Instructions JeuK : entier
K 0 I : entier
42
Instructions
Afficher : « donnez un entier entre 1 et 9 »
Lire K
JeuK 37*K
Pour I=1 à 2 faire
| JeuK JeuK+ JeuK
Fin pour
Afficher K, JeuK
Fin programme

13.4.5 Puissance
Début programme
Déclaration de variable :
n : entier
x : réel
K : entier(indice)
Res : réel

Instructions
Afficher : « donnez un réel »
Lire x
Res 1
Pour K=1 à n faire
| Res Res*x
| Afficher Res
Fin pour
Afficher « le résultat est » , Res
Fin programme

43
113. On veut savoir quand une mère aura le double
de l’âge de sa fille. Ecrire le programme qui le
14 Exercices détermine.

14.1 Manipulation de variables


14.2 Conditions
101. Soit A une variable et B une autre. Elles sont
201. Ecrire un algorithme permettant de classer
lues par l’algorithme puis en sortie leur valeur sont
trois nombres en effectuant le moins possible de
échangées.
comparaisons.
102. Ecrire un programme qui demande un nombre
202. Un nombre entier n > 2 est dit parfait s'il est
à l’utilisateur, puis qui calcule et affiche le carré de ce
égal à la somme de tous ses diviseurs stricts, 1 compris.
nombre.
Ecrire un programme qui teste si son argument est un
nombre parfait.
103. Soit A une variable réelle et B une variable
réelle. On veut sommer les 2 variables et obtenir la
203. Ecrire une fonction maximum qui renvoie le
quotient et le reste de la division de B par A.
plus grand élément d'un vecteur entier. Même question
avec une liste chaînée.
104. Ecrire un algorithme qui lit les valeurs de A et
de B, et renvoie dans A, B-A et dans B, A-B.
204. Ecrire un algorithme qui demande trois noms à
l’utilisateur et l’informe ensuite s’ils sont rangés ou non
105. Soit la phrase : il fait beau mardi. Ecrire un
dans l’ordre alphabétique.
algorithme qui à l’aide de variables chaîne de caractères
de longueur inférieure à 6 caractères, écrit
205. Ecrire un algorithme qui demande un nombre
Il fait beau mardi
à l’utilisateur, et l’informe ensuite si ce nombre est
Mardi il fait beau
positif ou négatif (on inclut le traitement du cas où le
Fait il beau mardi
nombre vaut zéro).
Beau fait mardi beau
206. Ecrire un algorithme qui demande l’âge d’un
106. Ecrire un algorithme qui lit deux entiers A et B,
enfant à l’utilisateur. Ensuite, il l’informe de sa
et écrit AxB et A/B.
catégorie :
• "Poussin" de 6 à 7 ans
107. Écrire un algorithme qui retourne la factorielle
• "Pupille" de 8 à 9 ans
d’un entier positif ou nul (5! = 5 × 4 × 3 × 2 × 1).
• "Minime" de 10 à 11 ans
• "Cadet" après 12 ans
108. Écrivez l’algorithme qui calcule le volume
d’une sphère étant donné son rayon
207. Les élections législatives, en Guignolerie
Septentrionale, obéissent à la règle suivante :
109. On veut calculer la longueur de l’hypoténuse
• lorsque l'un des candidats obtient plus de 50% des
d’un triangle rectangle. Ecrivez l’algorithme
suffrages, il est élu dès le premier tour.
correspondant.
• en cas de deuxième tour, peuvent participer
uniquement les candidats ayant obtenu au moins 12,5%
110. Ecrire un algorithme utilisant des variables de
des voix au premier tour. Vous devez écrire un
type chaîne de caractères, et affichant quatre variantes
algorithme qui permette la saisie des scores de quatre
possibles de la célèbre « belle marquise, vos beaux yeux
candidats au premier tour. Cet algorithme traitera
me font mourir d’amour ». On ne se soucie pas de la
ensuite le candidat numéro 1 (et uniquement lui) : il
ponctuation, ni des majuscules.
dira s'il est élu, battu, s'il se trouve en ballottage
favorable (il participe au second tour en étant arrivé en
111. Ecrire un algorithme qui demande un nombre
tête à l'issue du premier tour) ou défavorable (il
de départ, et qui ensuite affiche les dix nombres
participe au second tour sans avoir été en tête au
suivants. Par exemple, si l'utilisateur entre le nombre
premier tour).
17, le programme affichera les nombres de 18 à 27.
208. Une compagnie d'assurance automobile
112. Ecrire l’algorithme puis le programme qui
propose à ses clients quatre familles de tarifs
transforme un temps en seconde en temps en jours,
identifiables par une couleur, du moins au plus onéreux
heures, minutes, secondes.
44
: tarifs bleu, vert, orange et rouge. Le tarif dépend de la dans la variable qui stocke la phrase, et pas uniquement
situation du conducteur : à l’écran).
• un conducteur de moins de 25 ans et titulaire du
permis depuis moins de deux ans, se voit attribuer le 214. Ecrire un algorithme qui demande deux
tarif rouge, si toutefois il n'a jamais été responsable nombres à l’utilisateur et l’informe ensuite si leur
d'accident. Sinon, la compagnie refuse de l'assurer. produit est négatif ou positif (on laisse de coté le cas où
• un conducteur de moins de 25 ans et titulaire du le produit est nul). Attention toutefois : on ne doit pas
permis depuis plus de deux ans, ou de plus de 25 ans calculer le produit des deux nombres.
mais titulaire du permis depuis moins de deux ans a le
droit au tarif orange s'il n'a jamais provoqué d'accident,
au tarif rouge pour un accident, sinon il est refusé. 14.3 Structures
• un conducteur de plus de 25 ans titulaire du
permis depuis plus de deux ans bénéficie du tarif vert 301. La suite de Fibonacci est définie par les
s'il n'est à l'origine d'aucun accident et du tarif orange relations :
pour un accident, du tarif rouge pour deux accidents, et F0 = F1 = 1; Fn+1 = Fn + Fn-1 pour n > 1:
refusé au-delà 1. Ecrire un programme récursif calculant Fn pour n
• De plus, pour encourager la fidélité des clients > 0.
acceptés, la compagnie propose un contrat de la 2. Pour améliorer le temps d'exécution, écrire un
couleur immédiatement la plus avantageuse s'il est programme récursif calculant le couple (Fn-1; Fn).
entré dans la maison depuis plus d'un an.
Ecrire l'algorithme permettant de saisir les données 302. Écrire l’algorithme qui retourne le plus petit
nécessaires (sans contrôle de saisie) et de traiter ce diviseur premier d’un nombre entier supérieur à 1.
problème. Avant de se lancer à corps perdu dans cet
exercice, on pourra réfléchir un peu et s'apercevoir qu'il 303. Écrire un algorithme qui retourne le plus grand
est plus simple qu'il n'en a l'air (cela s'appelle faire une commun diviseur (pgcd) de deux nombres entiers
analyse !) positifs par l’algorithme d’Euclide :
pgcd(a, b) = a si b = 0
209. Ecrivez un algorithme permettant à l’utilisateur pgcd(b, a mod b) sinon.
de saisir un nombre déterminé de valeurs. Le
programme, une fois la saisie terminée, renvoie la plus 304. Soient a0; . . .; an-1, n nombres entiers
grande valeur en précisant quelle position elle occupe naturels dont on veut calculer le plus petit commun
dans le tableau. On prendra soin d’effectuer la saisie multiple. On suppose disposer d'une fonction ppcm2
dans un premier temps, et la recherche de la plus calculant le ppcm de deux entiers.
grande valeur du tableau dans un second temps. Ecrire un programme itératif calculant ppcm(a0; . .
.; an-1). Les nombres ai seront places dans un vecteur.
210. Ecrivez un algorithme qui permette de saisir un
nombre quelconque de valeurs, et qui les range au fur 305. Ecrire une fonction maximum qui renvoie le
et à mesure dans un tableau. Le programme, une fois la plus grand élément d'un vecteur entier.
saisie terminée, doit dire si les éléments du tableau sont
tous consécutifs ou non. 306. Écrivez un algorithme qui permette la saisie
d’un nombre quelconque de valeurs. Toutes les valeurs
211. Ecrivez un algorithme qui demande un nombre doivent être ensuite augmentées de 1, et le nouveau
entier à l’utilisateur. L’ordinateur affiche ensuite le tableau sera affiché à l’écran.
message "Ce nombre est pair" ou "Ce nombre est
impair" selon le cas. 307. Écrivez un algorithme permettant, toujours sur
le même principe, à l’utilisateur de saisir un nombre
212. Ecrivez un algorithme qui demande une phrase déterminé de valeurs. Le programme, une fois la saisie
à l’utilisateur et qui affiche à l’écran le nombre de mots terminée, renvoie la plus grande valeur en précisant
de cette phrase. On suppose que les mots ne sont quelle position elle occupe dans le tableau. On prendra
séparés que par des espaces. soin d’effectuer la saisie dans un premier temps, et la
recherche de la plus grande valeur du tableau dans un
213. Ecrivez un algorithme qui demande une phrase second temps.
à l’utilisateur. Celui-ci entrera ensuite le rang d’un
caractère à supprimer, et la nouvelle phrase doit être 308. Un des plus anciens systèmes de cryptographie
affichée (on doit réellement supprimer le caractère (aisément déchiffrable) consiste à décaler les lettres

45
d’un message pour le rendre illisible. Ainsi, les A
deviennent des B, les B des C, etc. Ecrivez un algorithme 312. A l’issue d’un jury d’examen on édite le
qui demande une phrase à l’utilisateur et qui la code diplôme provisoire. Ecrire un algorithme qui lit le
selon ce principe. Comme dans le cas précédent, le nombre de candidats, puis lit le nom de chaque
codage doit s’effectuer au niveau de la variable candidat, ainsi que sa moyenne. Il doit imprimer le
stockant la phrase, et pas seulement à l’écran. diplôme sur lequel figure le nom la moyenne et le
classement du candidat si la moyenne est >10. Sinon il
309. Une amélioration (relative) du principe n’édite rien.
précédent consiste à opérer avec un décalage non de 1,
mais d’un nombre quelconque de lettres. Ainsi, par 313. Ecrire un algorithme qui calcule la moyenne
exemple, si l’on choisit un décalage de 12, les A d’un nombre de notes à saisir (le nombre et les notes).
deviennent des M, les B des N, etc.
Réalisez un algorithme sur le même principe que le 314. Master mind : Vous choisissez 6 valeurs
précédent, mais qui demande en plus quel est le différentes comprises entre 0 et 9 inclus. Ecrire un
décalage à utiliser. Votre sens proverbial de l'élégance algorithme qui devine ces valeurs en vous proposant
vous interdira bien sûr une série de vingt-six "Si...Alors" des solutions. A chaque solution proposée vous lui
donnez 2 nombres : le premier celui des chiffres qui
310. Un système de cryptographie beaucoup plus sont dans votre combinaison bien placés et le second
difficile à briser que les précédents fut inventé au XVIe celui des nombres qui sont dans votre combinaison mal
siècle par le français Vigenère. Il consistait en une placé.
combinaison de différents chiffres de César.
On peut en effet écrire 25 alphabets décalés par 315. Écrire une fonction qui calcule la racine carrée
rapport à l’alphabet normal : entière d’un nombre entier positif par soustractions
• l’alphabet qui commence par B et finit par …YZA successives des nombres impairs.
• l’alphabet qui commence par C et finit par …ZAB
• etc. 316. Un professeur note les résultats d’un test
Le codage va s’effectuer sur le principe du chiffre de portant sur 50 questions en utilisant la table suivante :
César : on remplace la lettre d’origine par la lettre bonnes 0- 11- 21- 31- 41-
occupant la même place dans l’alphabet décalé. réponses 10 20 30 40 50
Mais à la différence du chiffre de César, un même note E D C B A
message va utiliser non un, mais plusieurs alphabets Écrire l’algorithme qui retourne la note, étant
décalés. Pour savoir quels alphabets doivent être donné un nombre de bonnes réponses.
utilisés, et dans quel ordre, on utilise une clé.
Si cette clé est "VIGENERE" et le message "Il faut 317. Écrivez l’algorithme ayant en paramètres le
coder cette phrase", on procèdera comme suit : nombre d’heures effectuées par un salarié et son salaire
La première lettre du message, I, est la 9e lettre de horaire, qui retourne sa paye hebdomadaire. Les heures
l’alphabet normal. Elle doit être codée en utilisant sup. (au-delà de 35 heures) sont payées à 150%.
l’alphabet commençant par la première lettre de la clé,
V. Dans cet alphabet, la 9e lettre est le D. I devient donc 318. Ecrire un algorithme qui demande un nombre
D. compris entre 10 et 20, jusqu’`a ce que la réponse
La deuxième lettre du message, L, est la 12e lettre convienne. En cas de réponse supérieure à 20, on fera
de l’alphabet normal. Elle doit être codée en utilisant apparaitre un message : « Plus petit ! », et inversement,
l’alphabet commençant par la deuxième lettre de la clé, « Plus grand ! » si le nombre est inférieur à 10.
I. Dans cet alphabet, la 12e lettre est le S. L devient
donc S, etc. Quand on arrive à la dernière lettre de la 319. Ecrire un algorithme qui demande un nombre
clé, on recommence à la première. de départ, et qui calcule la somme des entiers jusqu’`a
Ecrire l’algorithme qui effectue un cryptage de ce nombre. Par exemple, si l’on entre 5, le programme
Vigenère, en demandant bien sûr au départ la clé à doit calculer : 1 + 2 + 3 + 4 + 5 = 15
l’utilisateur. NB : on souhaite afficher uniquement le résultat,
pas la décomposition du calcul.
311. La fonction RND() donne des valeurs tirées au
hasard comprises entre 0 et 1. . Ecrire un algorithme qui 320. Ecrivez un algorithme qui permette à
tire au hasard 10 cartes à jouer. Il affiche les cartes l’utilisateur de supprimer une valeur d’un tableau
tirées, puis les trie d’abord par couleur puis dans préalablement saisi. L’utilisateur donnera l’indice de la
chaque couleur par ordre croissant (1-2-….R). valeur qu’il souhaite supprimer. Attention, il ne s’agit

46
pas de remettre une valeur à zéro, mais bel et bien de la Pour chaque entrée concernant le nombre de
supprimer du tableau lui-même ! Si le tableau de départ produit vous ferez un test pour vérifier que c’est un
était : nombre entier.
12 8 4 45 64 9 2
Et que l’utilisateur souhaite supprimer la valeur 404. Ecrivez les algorithmes qui génèrent un
d’indice 4, le nouveau tableau sera : nombre Glup aléatoire tel que …
12 8 4 45 9 2
•0 =< Glup < 2
•–1 =< Glup < 1
•1,35 =< Glup < 1,65
14.4 Exercices généraux •Glup émule un dé à six faces
401. Soit =∑ un polynôme de degré i •–10,5 =< Glup < +6,5
dont on cherche les racines. •Glup émule la somme du jet simultané de deux
dés à six faces
0. Ecrire le programme qui demande à l’utilisateur
le degré et les ai. 405. Ecrire une fonction qui prend en entrée un
1. Tracez ce polynôme pour x variant de -1000 à entier naturel a et retourne cet entier écrit à l'envers.
+1000. Par exemple, si a = 1234, la fonction devra retourner a =
2. Tracez ce polynôme pour x variant entre 2 bornes 4321.
données par l’utilisateur.
3. Identifiez les intervalles pour lesquels il y a 406. On considère l'équation x2−2y2 = 1 d'inconnues
changement de signe. x, y 2 entiers positifs. Ecrire un algorithme permettant
4. Choisissez un de ces intervalles. Divisez-le en de déterminer toutes les solutions de cette équation
1000 points et recalculez le polynôme pour chacun de pour lesquelles y < 101.
ces points.
5. Recommencez cette procédure jusqu’à ce que la 407. 1. Ecrire 21 en base 2.
différence entre les bornes de l’intervalle de 2. Proposer un algorithme qui prend en entrée un
changement de signe soit inférieure à ε=10-6. entier n et retourne son écriture en base 2
6. Tentez une autre méthode : prenez la droite
reliant les 2 points extrêmes de l’intervalle. Trouvez en 408. Une puce se déplace sur un axe gradué. Au
l’équation de la tangente et redéfinissez un nouvel temps t = 0, la puce est en 0. Si la puce est en x, à
intervalle. l'instant n + 1, elle est en x + 1 avec probabilité 1/3, en x
+ 2 avec probabilité 1/3, en x − 3 avec probabilité 1/3.
402. Soit N un entier. On souhaite programmer un algorithme simulant la
1. On voudrait tester si N est un carré parfait. position de la puce après 50 itérations. On propose
2. soit un triangle rectangle d’hypothénuse N. On l'algorithme suivant :
voudrait savoir s’il est possible d’avoir 2 nombres x=0
entiers longueur des cotés de ce triangle. Pour t = 1 à n Faire
Ouvrir un fichier en mode séquentiel pour écrire. Si (random()<1/3) alors
Dans ce fichier seront recopiés tous les entiers multiples x=x+1
de 5 entre 0 et 100. Puis ce fichier sera relu pour fin si
récupérer sur 2 autres fichiers respectivement les Si (random()>=1/3) et (random()<2/3) alors
nombres pairs et les nombres impairs. x=x+1
Fin si
403. Vous devez concevoir un programme Si (random()>=2/3) alors
permettant à un utilisateur de choisir entre différents x=x-3
produits. Suivant le choix de produits qu’ils font et le Fin si
nombre de produit pour chacun des choix, leur devis est Fin Pour.
calculé. Afficher x.
Il y a 20 produits que l’on listera de produit(1) à Cet algorithme fonctionne-t-il ? Sinon, le corriger.
produit(20), ils ont chacun un prix. Le programme dans NB. La fonction random() retourne un nombre
un premier temps permettra au vendeur de remplir sa (pseudo)-aléatoire entre 0 et 1.
« grille » de prix, puis un nombre indéterminé à
l’avance de client se servira du programme pour établir 409. Pour pouvoir budgétiser les entretiens de ses
un devis. chaussées, un commune se dote d’un programme de

47
diagnostic. Ce programme assure la prévision des où N2c est la valeur calculée de N2 avec α et β.
entretiens. On rentre les notes issues de l’inspection et où N3c est la valeur calculée de N3 avec α et β.
le programme ressort les dates d’inspection et les dates On retiendra la valeur de (α,β) qui minimise l’erreur, on
de réfection de chaussée. la nommera (αmin,β min).
Il y a 3 notes variant de 0 à 5 :
La note de rugosité de la forme : = − 3ème étape : écrire le programme principal qui gère

=
tout cela, et fait les prévisions.
La note d’état de structure de la forme :
− −
La note d’environnement de la forme : " = " −
− #

Le programme doit lire les notes dans un fichier (3


ans d’archive avec une note de chaque type par an). Le
fichier est de la forme :
2011 4
2012 4
2013 3
2011 5
2012 4.5
2013 4.5
2011 4
2012 4
2013 2

1ère étape : écrire la fonction qui calcule :


=$ , &, , , '

2ème étape :
Ecrire le sous programme qui détermine a, b
connaissant les notes des années précédentes, en
supposant que la chaussée neuve correspond au couple
(t0,N0)=(1990 ;5,005)
Pour cela pour les 2 premières années on
détermine a et b
Pour les 2 suivantes aussi
− ( =& (− )
ln − ( = ,- & + ' ln ( −
ln − ( − ln − /
'=
ln ( − − ln / −
,- & = ln − ( − ' ln ( −

On peut déterminer 2 valeurs successives de α et β,


notons les α1 et α2, β 1 et β2.
Lesquelles prendre ?
Pour déterminer lesquelles prendre on va minimiser
une fonction erreur qui représente l’écart entre la
valeur simulée et la note réelle. Pour cela on calcule un
(α1,β 1) avec N1 et N2 et un (α2,β 2) avec N2 et N3. Puis
en prenant 10 valeurs équidistantes de α entre α1 et α2
et 10 autres de β entre β1 et β2, on calculera l’erreur
commise sur le calcul de N1, N2 et N3. Cette erreur est
donnée par :
011 21 = ( − (3 / + / − /3 / + 4 − 43 /
où N1c est la valeur calculée de N1 avec α et β.

48
E1

15 Annales E2

15.1 Problème 2012

Ei
On veut programmer un modèle rhéologique sous σ σ
VBA. Ce modèle simule la plasticité parfaite, l’élasticité
pure et l’élastoplasticité. L’objectif est de tracer la
courbe contrainte déformation pour chaque modèle En
parallèle ou série que vous choisissez de construire.
Barème : question 1 = 3 points ; question 2 = 5,5
points ; question 3 = 9 points ; question 4 = 1,5 points ; σc
question 5 = 1 point.
ε
Question 1.
Le modèle rhéologique à simuler dans la première
question est le suivant :
Il fonctionne ainsi :
56 7 < 73 ,915 : = 0
E1
7
E2 56 7 ≥ 73 ,915 : =
σ σ ∑ 0
Programmez une macro principale dans le module
RepQuest2, permettant de :
σc D’utiliser comme données sur la feuille
Quest2 dans la colonne B en deuxième ligne
ε le nombre d’éléments élastiques (ressorts)
n, puis sur les n lignes suivantes le module
correspondant à chaque ressort i, puis sur
Il fonctionne ainsi : la ligne après le dernier module la
56 7 < 73 ,915 : = 0
7
contrainte critique.
56 7 ≥ 73 ,915 : =
0( + 0/
D’écrire sur la colonne E à partir de la ligne
3 et sur les 100 lignes suivantes des valeurs
Programmez la fonction Soupl dans le module de contraintes en ordre croissant allant de 0
nommé Repquest1 qui permet d’obtenir ε connaissant à σmax. La contrainte σmax est égale à 1,5 fois
σ: la contrainte critique σc.
: = =92>, 7, 0( , 0/ , 73 D’écrire sur la colonne D à partir de la ligne
3 et sur les 100 lignes suivantes des valeurs
de déformation obtenues à l’aide du
Question 2. modèle rhéologique.
Le modèle rhéologique global à simuler dans la Puis dans la feuille Excel tracez la courbe contrainte
deuxième question est le suivant : déformation correspondant à l’exemple donné sur
quest1 d’abord (ce qui permettra peut être de valider
votre programme), puis celui donné en J2-K11 (vous
recopierez ces données de façon à pouvoir les lires en
colonne B …).
modules de chacun des ressorts en parallèle. La loi
caractérisant un élément est donc de la forme :
Question 3. : = =92>, 7, 0, 73
56 7 < 73 ,915 : = 0
7
On appelle élément, le modèle rhéologique
56 7 ≥ 73 ,915 : =
0
précédent. On met en série plusieurs éléments. On
constate pour chaque élément que mettre plusieurs
ressorts en parallèle ne sert pas à grand-chose, il suffit
d’un unique ressort dont le module est la somme des Où σ, E et σc représentent respectivement la
contrainte aux bornes de l’élément, le module de
49
l’élément et la contrainte critique de l’élément. Le Refaites le même programme mais sur le module
nouveau modèle rhéologique à étudier est le suivant : RepQuest4 avec mais les données sont demandées à
l’aide de boites de dialogue, puis écrites par le
σ Elément 1 σ Elément i σ Elément n σ programme sur les colonnes A et B. Reprenez l’exemple
E1 σ1 Ei σi En σn
précédent et tracez la courbe.

Question 5.
Sur le module RepQuest5 se trouve un exemple de
Plusieurs éléments sont mis en série. La loi qui régie programme traçant une courbe dans la feuille Quest5.
la série est la suivante : Reprenez le programme de la question 4 mais le
Pour chaque élément i : programme trace aussi la courbe à partir de données
écrites préalablement sur la feuille Quest5 par le
56 7 < 7 ,915 : = 0 programme. Utilisez l’exemple précédent.
7
56 7 ≥ 7 ,915 : =
0
Pour le système en série : 15.2 Rattrapage 2013

: = ?:
Une association étudiante veut réaliser un
programme qui enregistre le nom des étudiants
( adhérents, leur année de naissance et le type d’études
Vous allez écrire dans le module repQuest3 une qu’ils poursuivent (lettre, droit ou sciences). Une fois
macro secondaire SubElem(sig,sigc,modu,eps) qui ces données enregistrées dans un tableau, on calcule
donne pour chaque élément sa déformation (variable leur âge moyen, on détermine le nombre d’étudiants de
de sortie eps) en fonction de la contrainte appliquée, la chaque filière, le nombre total d’étudiants inscrits. Les
contrainte critique et le module (variables d’entrée résultats seront mis en forme et sauvegardés dans un
sig,sigc,modu). fichier à accès séquentiel.
Puis vous allez écrire le programme principal Vous devez donc écrire un programme qui
ElastoPlast() demande les noms, années de naissance et filière de
Il lit dans la colonne B de la feuille quest 3 à chaque inscrit, les range dans un tableau, calcule l’âge
partir de B3 le nombre d’éléments moyen et le nombre d’étudiants dans chaque filière
Il calcule le maximum des contraintes ainsi que le nombre total d’inscrits. Puis ce programme
critiques. Celles-ci se présentent sur une écrira dans le fichier de façon compréhensible, les
ligne sur 2. Vous allez donc travailler avec noms, années de naissance et filières des étudiants ainsi
un indice qui évolue comme 2*i ou 2*i+1 que l’age moyen et le nombre d’inscrits par filière.
(vous choisirez l’un ou l’autre) avec i La mise en forme est, par exemple : l’âge moyen
désignant le compteur de la boucle. des inscrits est ??? ans. (Le terme ??? est le résultat
Ensuite il lit dans l’ordre pour chaque trouvé)
élément son module et sa contrainte
critique et calcule au fur à mesure la
déformation : = ∑ ( : en fonction de la
Voici un exemple de liste sur laquelle vous testerez
votre programme :
contrainte sigma et écrit dans les colonnes
Nom année de naissance Filière
D et E de la même feuille la déformation et
Petit 1991 lettres
la contrainte sur 100 cellules. La contrainte
Martin 1988 droit
varie de 0 jusqu’au maximum des
Legoff 1991 science
contraintes critiques multiplié par 1,5.
Schmidt 1987 droit
Appliquez votre programme aux données des
cellules J3K16, et tracez la courbe sur la feuille. Smith 1986 droit
Dupont 1990 lettres
Attention, la difficulté ici est dans le compteur de Durand 1992 science
lignes : un élément représente 2 lignes, et ils sont donc Diop 1993 science
écrits sur 2*nombre d’éléments. Testez la lecture des Ouedraogo 1988 science
données sur votre papier de brouillon avant de Brahima 1992 science
programmer. Abrahamovitch 1990 lettres
Hollande 1987 science
Royal 1993 science
Question 4. Sarkozy 1990 droit
Ivanovitch 1987 science
50
15.3 Contrôle 2014 Vous devez écrire un programme qui doit pouvoir
lire un fichier et effectuer des opérations dessus.
Logiciel de paye des stagiaires
Le fichier s’appelle « control-20140.txt » et se
trouve à l’adresse suivante : K:\Master
Une entreprise a choisi de prendre des stagiaires
1\programmation\control-20140.txt.
licence IMRO. Or ils n’arrivent jamais à l’heure et ne
1. Ouvrez le fichier en mode séquentiel
repartent jamais à l’heure. Le patron décide donc de les
2. la Deuxième ligne contient la taille totale du
payer à l’heure. Il vous demande de faire le programme
fichier. Ecrire la ligne de commande qui permet de
qui établit en fonction des heures de présence la paye
l’écrire.
de chacun des stagiaires. Les heures sont données dans
3. Définir une matrice 10 lignes et 10 colonnes et
un fichier récupéré d’après la pointeuse.
écrire le programme qui ouvre le fichier, lit sur les 10
Ecrivez un programme qui ouvre le fichier, le lit, et
premières lignes chacune des 10 premières colonnes, et
calcule l’indemnité de sachant que 35 h semaine pour 4
les écrit dans un fichier ouvert en mode séquentiel que
semaines de 5 jours est payé 420€. L’indemnité est
vous appellerez sortie01.txt.
plafonnée à 420 euros par 4 semaines. La durée de
4. Il y a 60 colonnes. Ecrire le programme qui crée
stage est de 12 semaines (de 5 jours ouvrables).
une matrice 300x60 et qui permettra de lire le contenu
Se disant que certains ont peut être travaillé plus, il
de la matrice.
décide de donner une prime à ceux qui ont travaillé plus
5. Créez une autre matrice contenant les maxima
sans pour autant augmenter l’indemnité sous forme de
locaux par ligne, dans cette nouvelle matrice vous
tickets restaurant (1 ticket toutes les 10 heures en plus,
remplacerez les valeurs non maximales par 0 et vous
donc si il a travaillé en plus entre 0 et 9,9 heures il n’a
laisserez les maxima. Par exemple la ligne suivante : 1 3
pas de ticket, si il a travaillé entre 10 et 19,9 heures en
8 9 2 7 donne : 0 0 0 9 0 0. Pour cela vous remplacez les
plus il a un ticket, etc. …). Le programme que vous
bords par zéro (ici 1 et 7), puis il faut tester chaque
réalisez doit permettre de sortir un fichier dans lequel
valeur V avec la valeur précédente Vp et la valeur
sont écrits sur la même ligne le nom, le nombre
suivante Vs. Si V est supérieur à Vp et à Vs alors vous
d’heures total de travail effectué, le nombre d’heures
gardez V (ici seul 9 rempli cette condition) et tout ce qui
correspondant à 12 semaines de 5 jours à 8 heures par
ne remplit pas cette condition est mis à zéro.
jours, l’indemnité et la prime éventuelle.
6. Modifiez ce programme pour pouvoir écrire sur la
Le fichier récupéré de la pointeuse est un fichier se
dernière ligne de la matrice le nombre de maxima
présentant sous la forme suivante :
locaux obtenus.
numéro du jour nom du stagiaire heure
7. Programmez de même le programme qui crée
arrivée heure départ heure arrivée heure départ
une matrice qui remplace chaque centre de carré de
il y a une première heure d’arrivée à le matin et une
3x3 valeurs par leur moyenne. Exemple :
deuxième l’après midi, de même pour l’heure de
1 2 3 4 0 0 0 0
départ. Les heures sont comptées en dixièmes d’heure
5 6 7 8 0 4 4 0
(vous n’avez pas à convertir en minutes). Un fichier test
9 1 2 3 donne 0 5 5 0
vous est donné.
4 5 6 7 0 4,2 3,3 0
La fonction int(nombre) convertit un réel en entier.
8 1 2 3 0 0 0 0
Bon travail.
15.5 Contrôle 2015
Conseil :
1. Commencer par faire un programme qui lit les On veut programmer un jeu sur ordinateur. Ce jeu
données et les range dans des tableaux à définir comprend plusieurs étapes. A chaque étape son score
2. Puis compléter de façon à ce que le programme peut augmenter ou diminuer.
identifie les noms et prénoms des stagiaires et les Etape 1.0 : l’ordinateur propose 2 nombres tirés au
écrive dans un fichier (le nombre de stagiaires n’est pas hasard A et B entre 1 et 13. Ces nombres peuvent, par
connu mais on considère qu’il est inférieur à 100 et est hasard être les mêmes. Le joueur en choisit un et
à déduire du fichier de données initiales) marque le nombre de points correspondant à son
3. Transformez-le ensuite pour qu’il puisse calculer tirage. Par exemple, si l’ordinateur propose A=5 et B=8
les heures faites pour chaque jour par chaque stagiaire et que le joueur choisit A alors le joueur marque 5
4. Transformez-le pour qu’il fasse la somme des points. Écrivez l’algorithme correspondant.
heures réalisées par stagiaire Remarque : la fonction aléa (ou rnd() en VBA)
5. Répondez au problème complet donne un nombre aléatoire entre 0 et 1 bornes exclues.
Écrivez l’algorithme correspondant.
15.4 Rattrapage 2014
51
Etape 1.1 : l’ordinateur propose 2 nombres tirés au Etape 4.1 : On améliore l’algorithme précédent. En
hasard A et B entre 1 et 13. Si ce sont les mêmes, fait il est tellement difficile de faire une suite, que le
l’ordinateur tire à nouveau au hasard jusqu’à ce que ce joueur choisit 5 cartes, mais peut en rejeter 1, 2 ou 3
soient 2 nombre différents. Le joueur en choisit un et après qu’il ait vu leur valeur, et l’ordinateur lui en
marque le nombre de points correspondant à son repropose autant. La suite de l’algorithme est comme le
tirage. Par exemple, si l’ordinateur propose A=5 et B=5, précédent. Écrivez l’algorithme correspondant.
l’ordinateur retire au hasard une valeur de B jusqu’à ce
que B soit différent de 5. Écrivez l’algorithme
correspondant. 15.6 Contrôle 2015 – Rattrapage
Etape 1.2 : l’ordinateur propose 15 nombres La société « QuiSaitTout » organise un sondage sur
différents tirés au hasard entre 1 et 52. Le joueur en les habitudes en matière de feuilletons télévisuels. On
choisit 5 et marque le nombre de points correspondant s’intéresse à la fréquence à laquelle les individus
à son tirage. regardent certains feuilletons. Au final (c'est-à-dire si
Par exemple : l’ordinateur lui écrit à l’écran : voulez vous avez fait tout le contrôle jusqu’à la fin) on aimerait
vous le nombre numéro 1 ? Le joueur répond oui (ou pouvoir dire :
non) X1% des personnes entre 25 et 50 ans ont regardé
puis l’ordinateur lui écrit à l’écran : voulez vous le « Dr House » 5 fois ou moins dans l’année
nombre numéro 2 ? Le joueur répond oui (ou non), et X2% des personnes entre 25 et 50 ans ont regardé
ainsi 15 fois de suite, sachant que le joueur ne peut en « Dr House » entre 5 et 20 fois dans l’année
choisir que 5. Écrivez l’algorithme correspondant. X3% des personnes entre 25 et 50 ans ont regardé
Etape 1.3 : En fait il s’agit d’un jeu de 52 cartes : il y « Dr House » plus de 20 fois dans l’année
a 13 cartes dans 4 couleurs. On va ranger les cartes
dans un tableau qu’on appellera carte(i,j) où i varie de 1 Y1% des personnes de plus de 50 ans ont regardé
à 13 et j de 1 à 4. On suppose que le tableau a déjà été « Les feux de l’amour » 5 fois ou moins dans l’année
initialisé dans l’ordinateur. On reprend le problème Y2% des personnes de plus de 50 ans ont regardé
précédent mais au lieu de générer un nombre entre 1 et « Les feux de l’amour » entre 5 et 20 fois dans l’année
52, on génère aléatoirement les coordonnées i et j. Y3% des personnes de plus de 50 ans ont regardé
Écrivez l’algorithme correspondant. « Les feux de l’amour » plus de 20 fois dans l’année
Etape 2.0 : Le programme génère aléatoirement
des cartes à jouer toutes différentes, et le joueur choisit Z1% des personnes de moins de 25 ans ont regardé
ou non la carte générée sans la connaître. Il choisit 5 «Arrow » 5 fois ou moins dans l’année
cartes. Si les 5 cartes sont la même couleur il marque 15 Z2% des personnes de moins de 25 ans ont regardé
points, si 4 cartes sont de la même couleur il marque 10 «Arrow » entre 5 et 20 fois dans l’année
points, si 3 cartes sont de la même couleur il marque 5 Z3% des personnes de moins de 25 ans ont regardé
points. Écrivez l’algorithme correspondant. «Arrow » plus de 20 fois dans l’année
Etape 3.0 : Le programme génère aléatoirement
des cartes à jouer toutes différentes, et le joueur choisit Le sondage se fait par ordinateur. Les gens
ou non la carte générée sans la connaître. Il choisit 5 répondent aux questions posées par le programme et
cartes. Si 4 cartes sont la même figure (4 as par vous devez écrire le programme qui analyse les
exemple) il marque 15 points, si 3 cartes sont la même réponses.
figure il marque 10 points, si 2 cartes sont la même
figure il marque 5 points. Écrivez l’algorithme Question 1 : écrire l’algorithme du programme qui
correspondant. interroge une personne. Il doit lui demander son âge et
Etape 4.0 : Le programme génère aléatoirement selon l’âge l’interroger sur le nombre de fois qu’elle
des cartes à jouer toutes différentes, et le joueur choisit regarde «Arrow » (moins de 25 ans), « Dr House »
ou non la carte générée sans la connaître. Il choisit 5 (entre 25 et 50 ans) ou « les feux de l’amour » (plus de
cartes. Si les figures des cartes se suivent il marque 15 50 ans). Pensez à bien définir vos variables.
points, si de plus elles sont de la même couleur (pique,
cœur, carreau ou trèfle) il marque 30 points, si il n’y a Question 2 : on interroge 100 personnes.
que 4 cartes qui se suivent il marque 10 points si de plus Redéfinissez vos variables si nécessaire et donnez
elles sont de même couleur il marque 20 points, si il n’y l’algorithme du programme qui interroge ces 100
a que 3cartes qui se suivent il marque 8 points si de plus personnes. .
elles sont de même couleur il marque 16 points.
Écrivez l’algorithme correspondant. Question 3 : on laisse l’ordinateur sur un stand au
Salon des Arts Ménagers d’Egletons. Les gens

52
remplissent le questionnaire quand ils passent devant
l’ordinateur. En fin de journée, le responsable du
sondage, rentre -98751 à la place de l’age et cela
stoppe le programme. Ecrire l’algorithme
correspondant.

Question 4 : l’objectif du sondage est quand même


de récapituler les réponses. Ecrire la suite de
l’algorithme qui à la suite de celui de la question 2 ou
de la question 3 délivre la réponse du type présenté ci
dessus dans l’introduction (pourcentages de chaque
réponse pour chaque catégorie d’age).

53
16 Bibliographie
http://www.pise.info/algo/index.htm
http://perso.limsi.fr/Individu/cecile/Enseignement/
coursAlgo_V1.pdf
http://www.esiee.fr/~perrotol/tp1.pdf
http://www.math.univ-
montp2.fr/~lacour/exo_algo.pdf
http://www.ac-nancy-metz.fr/eco-
gestion/eric_crepin/algo/exercices/presentation.htm
http://suptri.0fees.net/Exercices/Programmation/A
lgorithmique%20.pdf

54

Vous aimerez peut-être aussi