Académique Documents
Professionnel Documents
Culture Documents
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
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.
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).
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.
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
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.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.
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).
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.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.
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
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é.
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 =
function [a,b]=mafonction(A)
.....
-->[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
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.
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 : " = " −
− #
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 ( −
48
E1
15 Annales E2
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.
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