Remarques sur le premier programme
• Ce programme « marche » mais on voit bien
func main() {
qu’il a quelques défauts : Color("purple")
Down()
• On répète 4 fois la valeur 5. Si on veut Forward(5)
Right()
maintenant tracer un carré de 6 x 6, il Forward(5)
faudra faire 4 modi cations. Right()
Forward(5)
Right()
• Le tracé du carré consiste à répéter 4 fois Forward(5)
la séquence avancer/droite… Up()
}
1
fi
Concepts fondamentaux
Introduction des concepts de
constante, de variable et de boucle
2
Résolution du 1er problème : la notion de constante
• Le premier problème peut se résoudre aisément avec une constante (un
emplacement en mémoire, où l'on stocke une valeur qui ne changera pas au cours du
programme) : on stocke le nombre de pas dans une constante et on utilise ensuite
cette constante. Si l'on veut un carré plus grand, il suf t de modi er la valeur de cette
constante ; les autres instructions resteront inchangées.
• Pour cela, notre traceur a besoin de deux nouvelles compétences :
• Pouvoir déclarer qu'il va utiliser une constante et y stocker une valeur (la valeur
d'une constante ne pouvant être modi ée par le programme, il faut obligatoirement
lui donner une valeur lorsqu'on la déclare).
• Pouvoir lire la valeur contenue dans une constante pour l’utiliser dans une
instruction, par exemple ici dans l’instruction Forward.
3
fi
fi
fi
Premier exemple amélioré : appelons la constante nbPas
• L'algorithme : • Le programme :
Déclarer la constante nbPas func main() {
const nbPas = 5
et y stocker la valeur 5
Color("purple")
Choisir la couleur violet
Down()
Baisser le stylet Forward(nbPas)
Avancer de nbPas Right()
Tourner à droite Forward(nbPas)
Avancer de nbPas Right()
Tourner à droite Forward(nbPas)
Avancer de nbPas Right()
Tourner à droite Forward(nbPas)
Avancer de nbPas Up()
Lever le stylet. }
4
Résolution du 2e problème : notions de répétition et de variable
• Pour le deuxième problème, on préférera simplement dire : faire 4 fois la séquence
avancer/droite car en informatique, on a horreur de se répéter… Il faut donc trouver un
moyen de compter le nombre de fois que l’on fait quelque chose.
• Il faut donc un compteur : mais qu’est-ce qu’un compteur sinon un emplacement mémoire
dont la valeur contiendra une valeur initiale et ira jusqu'à la valeur nale ? Comme cette valeur
va varier au cours du programme, ça ne peut pas être une constante, mais une variable.
• Répéter une suite d'instructions, c’est exactement ce que permet de faire la boucle Tant
Que.
• Pour cela, notre traceur a besoin de 3 nouvelles compétences : déclarer une variable,
modi er le contenu d'une variable et répéter une suite d'instructions un certain nombre de
fois.
5
fi
fi
Premier exemple amélioré
Déclarer la constante nbPas et y stocker la valeur 5 func main() {
const nbPas = 5
Déclarer la variable cpteurCotes
var cpteurCotes int
Choisir la couleur violet La répétition (boucle) est contrôlée par
Baisser le stylet Init()la valeur de cpteurCotes.
Initialiser cpteurCotes avec la valeur 1 On dit que cpteurCotes est la
Down("purple")
TQ cpteurCotes <= 4 FAIRE cpteurCotes = 1 de boucle
variable
Avancer de nbPas for cpteurCotes <= 4 {
Tourner à droite Forward(nbPas)
Augmenter de 1 la valeur de cpteurCotes Right()
cpteurCotes = cpteurCotes + 1
FTQ
}
Lever le stylet. Up()
}
6
Premier exemple amélioré
Déclarer la constante nbPas et y stocker la valeur 5 func main() {
Déclarer la variable cpteurCotes const nbPas = 5
Choisir la couleur violet var cpteurCotes int
Baisser le stylet
Color("purple")
Initialiser cpteurCotes avec la valeur 1
Down()
TQ cpteurCotes <= 4 FAIRE cpteurCotes = 1
Avancer de nbPas for cpteurCotes <= 4 {
Tourner à droite Forward(nbPas)
Augmenter de 1 la valeur de cpteurCotes Right()
FTQ cpteurCotes = cpteurCotes + 1
Lever le stylet. }
Up()
}
7
Remarques
• L’initialisation d’une constante ou d'une variable se fait
func main() {
simplement avec le signe égal. Attention à choisir un nom
const nbPas = 5 « parlant ».
var cpteurCotes int
• Une constante ou une variable est toujours d'un certain type. Ici, le
Color("purple") traceur peut deviner celui de nbPas, mais pas celui de
cpteurCotes : il faut donc le préciser (int => entier)
Down()
cpteurCotes = 1 • Ne pas oublier d'initialiser la variable de boucle avant la boucle.
for cpteurCotes <= 4 {
Forward(nbPas) • La lecture de la valeur d’une constante ou d'une variable est
automatique : il suf t de mettre son nom et il sera remplacé par sa
Right() valeur.
cpteurCotes = cpteurCotes + 1
} • Attention au test de la boucle : il faut faire 4 fois la boucle (et on part
de 1…)
Up()
} • Ne pas oublier de mettre à jour la variable de boucle dans la boucle
(cpteurCotes = cpteurCotes + 1) : sinon on "boucle sans n"
8
fi
fi
Remarques sur le programme
Ne pas oublier
func main() { d'initialiser la variable
const nbPas = 5 de boucle avant la
var cpteurCotes int boucle…
attention à la
Color("purple") syntaxe !
Down()
cpteurCotes = 1
for cpteurCotes <= 4 {
Ne pas oublier de
Forward(nbPas) modi er la variable de
Right() boucle… Sinon, on
ne sortira jamais
cpteurCotes = cpteurCotes + 1
}
Up()
}
ou : cpteurCotes++
9
fi
Déclarations de constantes
• Pour présenter dès le départ les « outils » dont aura besoin le programme, ces
déclarations seront généralement placées au début du programme.
• Les constantes sont déclarées dans une section const. Si vous devez déclarer
plusieurs constantes, vous pouvez regrouper ces déclarations :
const (
maConstante1 = 42
maConstante2 = 3.14
)
• Rappel : comme une constante doit forcément recevoir une valeur lorsqu'on la
déclare, il n'est pas nécessaire de préciser son type car il sera déduit de la valeur.
10
Déclarations de variables
• Pour l'instant, nous placerons les déclarations de variables à la suite des déclarations
de constantes, dans une section var.
• Comme pour les constantes, les déclarations de variables peuvent être regroupées.
• Si vous ne fournissez pas de valeur initiale à une variable lors de sa déclaration, vous
devez indiquez son type. Vous pouvez regrouper les déclarations de variables de
même type. Si vous fournissez une valeur initiale, le type sera déduit (comme pour
les constantes)
var (
cptCotes, cptCarres int
reponse = 42 // type int déduit...
tauxTva, prixHT, prixTTC oat64
)
11
fl
Paquetages Go
• Un paquetage Go est un ensemble de fonctions déjà dé nies. Ce mécanisme
permet de regrouper des fonctions apparentées (par exemple, fmt regroupe les
fonctions de formatage et d'entrées/sorties, math les fonctions mathématiques,
traceur les fonctions du traceur, etc.)
• Certains paquetages sont fournis avec le langage (voir ce lien), d'autres sont écrits
par d'autres programmeurs (traceur, par exemple).
• Un programme Go est constitué d'au moins un paquetage : main, qui contient la
fonction principale du programme, qui doit s'appeler main (cf. exemples).
• Un programme Go peut utiliser d'autres paquetages à condition de les importer
dans sa clause import (cf. exemples).
12
fi
Conventions de nommage et autres habitudes de Go
• En Go (le langage utilisé par le traceur et pour ce cours), les identi cateurs de constantes et
de variables suivent la convention du camelCase (comme le langage Java). Cette convention
précise que le nom doit commencer par une minuscule et les différents mots sont collés et
commencent par une majuscule. Exemples : nbPas, cpteurCarres, cpteurDemiRect.
• D'autres langages utilisent d'autres conventions… Python utilise le snake_case. Exemples :
nb_pas, cpteur_carres, cpteur_demi_rect.
• Dans tous les cas : pas d'espaces, pas d'accents dans les identi cateurs (même si les
caractères accentués sont autorisés par le langage).
• Go (comme la plupart des langages) fait la différence entre minuscules et majuscules !
Exemple : nbPas n'est pas la même constante que nbpas (la convention camelCase permet
de résoudre le problème).
13
fi
fi
Conventions de nommage et autres habitudes de Go
• Tous les mots-clés sont en minuscules (if, for, switch, func, return, etc.) et toutes les fonctions
dé nies dans un paquetage importé commencent par une majuscule et sont pré xées par le nom
de leur paquetage : [Link](…), [Link](…), [Link](…).
• Si le nom d'un paquetage est pré xé par . (point) dans la liste des imports, il n'est plus nécessaire
de pré xer ses fonctions par son nom. C'est ce que nous avons fait pour traceur a n de
simpli er le code que vous devrez écrire, mais c'est une pratique généralement déconseillée.
• Les fonctions dé nies dans votre paquetage main commenceront généralement par une
minuscule, ce qui permettra de les distinguer des autres.
• Il existe une notation permettant de simpli er l'écriture de la mise à jour d'un compteur : au lieu
d'écrire cpteur = cpteur + 1, vous pouvez écrire cpteur += 1 ou même cpteur++ et vous
pouvez aussi écrire cpteur -= 1 et cpteur-- à la place de cpteur = cpteur - 1
14
fi
fi
fi
fi
fi
fi
fi
fi
Exercice sur papier
Écrire l'algorithme pour tracer un carré noir de 4 x 4 pas. Le
traduire dans le langage du traceur (programme).
15
Exercice sur papier
Écrire l'algorithme pour tracer un rectangle vert de 2 x 5 pas. Le
traduire dans le langage du traceur.
16
Exercice sur papier
Écrire l'algorithme pour tracer la gure suivante. Le traduire dans le
langage du traceur.
17
fi
Bilan de la première séance
• Vous connaissez les notions d'algorithme, de processeur et de programme
• vous avez compris comment on ra ne un algorithme
• jusqu'à obtenir un algorithme nal au niveau de détail des compétences du processeur
• et sa traduction dans le langage du processeur.
• Vous connaissez et vous avez utilisé les concepts
• d'instruction et de séquence d'instructions,
• de constantes et de variables pour stocker des valeurs que vous pouvez relire ensuite,
• de boucles avec des compteurs.
• Vous connaissez le langage et les compétences d'un processeur particulier : le traceur.
18
fi
ffi
Le traceur : résumé des fonctionnalités
Compétences Exemples dans le langage du traceur
Baisser / relever le stylet Down() / Up()
Tourner vers la droite / vers la gauche de 90° Right(), Left()
Pivoter d'un certain angle vers la droite Pivote(45)
Avancer de nbPas dans la direction courante Forward(6)
Changer la couleur Color("pink")
Af cher un message Say("Yessss !!!")
Déclarer une constante ou une variable const nbPas = 5 ou var cpteurPas int
Relire la valeur d'une constante ou d'une variable nbPas
Modi er le contenu d'une variable cpteurPas += 1 ou cpteurPas++
Répéter un certain nombre de fois une suite d'opérations for cpteurPas <= nbPas {…} 19
fi
fi