Algorithmique Instructions de base et Variables Cours de BTS/CPI 1ère année Algo – Prog CPI/BTS1 – M. Dravet – 10/09/2003 Dernière modification: 17/09/2003
Instructions de base Dans le chapitre précédent nous avons vu qu’un programme (et donc un algo) utilise des données en entrée et en sortie. Données en entréeProgrammeDonnées en sortie ProcesseurMémoire
Instructions de base La question qui se pose à nous, outre le fait de savoir avec quels outils traiter les données, c’est d’abord de savoir comment les lire, et comment les écrire. Pour cela, rien de plus simple, deux instructions élémentaires: –La primitive (ou fonction) lire –La primitive (ou fonction) écrire (ou afficher)
Instructions de base Ces deux primitives permettent de lire une donnée (chiffre, lettre, phrase, signe quelconque) saisie au clavier, ou bien d’afficher un texte créé dans l’algorithme Il faut cependant stocker la donnée lue dans la mémoire de l’ordinateur. Le plus simple pour le moment, est de réserver une place dans la mémoire vive. Nous verrons précisément comment un peu plus tard, l’important ici étant de montrer l’emploi de lire et écrire dans un algo
Instructions de base Programme SaisieAffichage Début écrire(‘Veuillez saisir un texte: ’) lire(texte) écrire(‘voici le texte que vous avez entré: ‘, texte) Fin Note: l’instruction lire(texte) peut aussi s’écrire: texte lire() c’est selon vos préférences personnelles …
Instructions de base La fonction lire() associe donc un contenu (la donnée saisie au clavier) dans un emplacement mémoire: une variable. Dans l’exemple précédent, l’algo lit le texte que l’utilisateur a entré au clavier, puis le « range » dans une case mémoire de l’ordinateur. Cette case a un nom: texte. Elle aurait pu s’appeler TOTO, dans ce cas on aurait utilisé: lire(TOTO). Mais on aurait aussi du écrire: écrire(‘voici le texte que vous avez entré: ‘, TOTO) La fonction écrire permet d’alterner l’affichage entre du texte prédéfini (celui entre quotes ‘ ‘) et une variable, quelle qu’elle soit. L’important est de toujours marquer la différence entre texte prédéfini et variables par des quotes et des virgules
Instructions de base Exemple : écrire(‘Toto habite au ‘, num_rue, ‘rue ‘, nom_rue, ‘de la ville ‘, nom_ville) Dans cette instruction, « num_rue », « nom_rue » et « nom_ville » sont des variables. On ne peut pas les mettre entre quotes comme le reste du texte prédéfini Donc on les sépare par des virgules du reste du texte En prenant soin d’encadrer chaque morceau de texte par une quote de chaque côté.
Instructions de base Exercice: écrire un algorithme qui demande à l’utilisateur de saisir successivement le statut (M. Mme, Mlle), le nom d’une personne, son âge, et sa profession, puis qui affiche le tout sous la forme: M. Toto a 37 ans. Sa profession est : chauffeur de taxi Indication: ne vous souciez pas des variables, utilisez les comme vous voulez.
Instructions de base Correction: Programme SaisieAffichage Début écrire(‘Veuillez saisir le statut de l’individu: ‘) lire(statut) écrire(‘Veuillez saisir le nom de l’individu: ‘) lire(nom) écrire(‘Veuillez maintenant saisir son age: ‘) lire(age) écrire(‘ … et enfin sa profession: ‘) lire(profession) écrire(statut, nom, ‘ a ‘, age, ‘ ans.’) écrire(‘Sa profession est: ‘, profession) Fin
Les variables Nous savons maintenant lire et écrire des données, mais il nous reste à définir précisément la manière de les stocker dans un algo. Nous avons vu que tout traitement de donnée utilise la mémoire de l’ordinateur, Sur un ordinateur, 2 principaux types de mémoire: –Mémoire vive (RAM), volatile –Mémoire de masse (disque dur), permanente Pour le moment nous n’allons nous intéresser qu’à la mémoire vive, pour des raisons de simplicité.
Les variables La mémoire vive est un espace global disponible pour le stockage d’informations, Dans cet espace global, chaque donnée se voit réserver un espace particulier, d’une certaine taille, La taille du bloc mémoire alloué (réservé) pour une donnée est directement déterminé par le programmeur. On ne peut pas réserver un bloc quelconque, et mettre ensuite n’importe quel type de donnée dedans.
Les variables Pourquoi ne peut-on pas mettre n’importe quel type de données dans un bloc mémoire ? Car les données sont stockées en binaire en mémoire. Or, une séquence de bits peut définir énormément d’informations différentes suivant l’utilisation que l’on en fait. Un bloc de bits est donc totalement abstrait si l’on ne sait pas comment le lire ! C’est là qu’interviennent les types de variables : ils conditionnent la manière de réserver un espace mémoire, d’écrire dedans, et d’interpréter ensuite leur contenu.
Les variables Question: quels types de variables pouvez vous imaginer ?
Les variables Les types « de base » sont: –Les entiers, pour manipuler des entiers, –Les réels, pour manipuler des réels, –Les booléens, pour manipuler des valeurs booléennes vrai ou faux –Les caractères, pour manipuler des caractères alphabétiques ou numériques –Les chaînes, pour manipuler des chaînes de caractères représentant des mots ou des phrases. Il faut noter qu'à un type donné, correspond un ensemble d'opérations définies pour ce type, que nous allons voir. Une variable est l'association d'un nom de variable avec un type, permettant de mémoriser une valeur de ce type.
Les variables Le type entier Les opérations utilisables sur les entiers sont : –les opérateurs arithmétiques classiques : + (addition), - (soustraction), * (produit) –la division entière, notée ÷, telle que n ÷ p donne la partie entière du quotient de la division entière de n par p –le modulo, noté mod, telle que n mod p donne le reste de la division entière de n par p –Les opérateurs de comparaison classiques :, =, <> Un entier est codé sur 2 octets, soit 2*8 = 16 bits D’où un intervalle de valeur : à 32767
Les variables Le type entier Fonctions utiles: –abs(-3) renvois 3 (valeur absolue) –sqr(7) renvois 49 (carré)
Les variables Le type réel Les opérations utilisables sur les réels sont : –les opérations arithmétiques classiques : + (addition), - (soustraction), * (produit), / (division) –Les opérateurs de comparaison classiques :, =,... –A noter que la division / marche aussi sur les entiers mais résultat de type réel.
Les variables Le type réel Fonctions utiles: –Abs() –Sqr() –Sqrt()(racine carré) –frac() (partie fractionnaire. Ex: frac(1.35) renvoie 0.35) –int()(partie entière. Ex: int(1.35) renvoie 1.) –ln, exp, sin, cos, etc. Ces fonctions renvoient un réel. D’autres renvoient un entier: –round()(arrondi. Ex: round(2.85) renvoie 3) –trunc()(tronquage. Ex: trunc(2.85) renvoie 2)
Les variables Le type booléen Il s'agit du domaine dont les seules valeurs sont vrai ou faux. Les opérations utilisables sur les booléens sont réalisées à l'aide des connecteurs logiques : et (pour le et logique), ou (pour le ou logique), non (pour le non logique). Rappel des opérateurs logiques NON VraiFaux Vrai ETVraifaux Vrai Faux OUVraifaux Vrai FauxVraiFaux
Les variables Le type caractère Il s'agit du domaine constitué des caractères alphabétiques et numériques. Une variable de ce type ne peut contenir qu'un seul et unique caractère. Les opérations élémentaires réalisables sont les comparaisons : >, <, =,... Code ASCII étendu de 256 caractères Fonctions utiles: –ord(caractere)(valeur numérique du code de caractère, ex. ord(‘A’) retourne l’entier 65) –chr(entier)(cherche le caractère correspondand à l’entier, dans la table ASCII. Ex. chr(65) == ‘A’.)
Les variables Le type chaîne Une chaîne est une séquence de plusieurs caractères. Les opérations élémentaires réalisables sont les comparaisons :, =,... selon l'ordre lexicographique. Fonctions utiles: –fonction concat (chaîne1, chaîne2) retourne une chaîne formée de la concaténation de chaîne1 et chaîne2 –fonction longueur (chaîne) retourne un entier: la longueur de la chaîne –fonction sousChaîne (chaîne, entier, entier) retourne un extrait de la chaîne Le premier entier représente l’indice de départ de la sous chaîne, et le deuxième la longueur à partir de l’indice. exemple : sousChaîne("informatique", 6, 2) retourne la chaîne "ma". –fonction ième (chaîne, entier) retourne le caractère placé à l’indice indiqué par la valeur de l’entier. Il faut donc le stocker dans une var de type caractère
Instruction d’Affectation Une instruction est la spécification d'une ou de plusieurs actions portant sur une ou des variables. L'instruction la plus commune est l'affectation. Elle consiste à doter une variable d'une valeur appartenant à son domaine, c'est à dire à lui donner une première valeur ou à changer sa valeur courante. Elle se note Exemple: nom “Toto”{chaîne de caractères} numéro 6544{entier} num_reel 56.34{réel} lettre ‘c’{caractère} test vrai{booléen}
Instruction d’Affectation Exemple d’algorithme Algorithme affectation Début x 12 y x + 4 x 3 fin Cet algorithme est constitué de trois instructions successives qui seront effectuées les unes après les autres. Les variables x et y sont entières. La première instruction consiste à affecter à la variable x la valeur 12. A la fin de cette instruction, la variable x vaut 12.
Instruction d’Affectation Exemple d’algorithme Algorithme affectation Début x 12 y x + 4 x 3 fin 2ème instruction: affectation d'une expression non réduite à une valeur, à une variable (y). L'expression x + 4 est d'abord reconnue comme une somme à effectuer portant sur deux valeurs. La première valeur est celle de la variable x, qui existe, puisque l'instruction précédente a affecté 12 à x.
Instruction d’Affectation Exemple d’algorithme Algorithme affectation Début x 12 y x + 4 x 3 fin La troisième instruction modifie la valeur de la variable x, qui devient 3. L'ancienne valeur de x, qui était 12, est définitivement perdue.
Instruction d’Affectation Conclusion: –Le déroulement séquentiel fait naturellement oublier les instructions effectuées en ne conservant que les valeurs courantes des variables. Ex: la première valeur de x (12) a été complètement perdue lors de la 3ème instruction. –La plupart du temps on ne peut faire des opérations que sur des variables de type identiques. Dans l’algo précédent, elles sont toutes de type Entier. –Toujours penser à initialiser les variables en début de programme. Pourquoi ? Car effectuer des opérations sur une variable ne contenant « rien » n’est pas autorisé. Ex: Dans notre algo précédent, les deux premières instructions ne sont pas permutables car x n'aurait alors pas eu de valeur au moment du calcul.
Déclaration de variables Jusqu’à présent nous avons utilisé des variables: –sans nous soucier de leur type, –puis en évoquant leur type mais sans trop en subir les contraintes Avant d’utiliser une variable comme nous l’avons fait, il faut la « déclarer » au début de l’algorithme La déclaration sert à faire connaître cette variable au reste de l’algorithme. La déclaration associe le nom d’une variable à un type particulier de données. L’association { nom, type de données } ne changera plus tout au long du déroulement de l’algo.
Déclaration de variables Comment déclarer les variables ? Très simple: rajout d’un bloc nommé « Déclarations » en début de programme. Exemple: Algorithme affectation Déclarations Variable x : entier{ commentaire sur le rôle de x } y : entier{ commentaire sur le rôle de y } Début x 12 y x + 4 x 3 fin
Déclaration de variables Note: on peut aussi écrire: Variable x : entier y : entier Sous la forme: Variable x, y : entier
Déclaration de variables Déclaration des autres types de données: Programme ExempleDeclaration Déclarations Variables x, y : entier{ commentaires sur x et y } z : réel{ commentaires sur z } nom : chaîne[30]{ commentaire sur nom } tmp : caractère{ commentaire sur tmp } test : booléen{commentaire sur booléen} Début …. Fin
Déclaration de variables Règles de nommage des variables: –Toutes les variables sont uniques –Le premier caractère de la variable est une lettre, minuscule ou majuscule, ou un underscore (caractère souligné _, touche 8) –Les autres caractères suivent la même règle sauf qu’on peut ajouter des chiffres –Pas de caractères ‘espace’ ou de caractères spéciaux –Exemples: Variable x : entier{ OK } user1 : entier{ OK } 1b : entier{ IMPOSSIBLE } : entier{ IMPOSSIBLE }
Exercices Exercice: écrire un algorithme qui demande à l’utilisateur de saisir successivement le statut (M. Mme, Mlle), le nom d’une personne, son âge, et sa profession, puis qui affiche le tout sous la forme: M. Toto a 37 ans. Sa profession est : chauffeur de taxi Indication: faites attention aux types de variables !
Exercices Programme SaisieAffichage Déclarations Variable statut: chaîne[4] { statut de la personne } nom:chaîne[30] { nom de la personne } age: entier { age de la personne } profession: chaîne[30] { profession de la personne } Début écrire(‘Veuillez saisir le statut de l’individu: ‘) lire(statut) écrire(‘Veuillez saisir le nom de l’individu: ‘) lire(nom) écrire(‘Veuillez maintenant saisir son age: ‘) lire(age) écrire(‘ … et enfin sa profession: ‘) lire(profession) écrire(statut, nom, ‘ a ‘, age, ‘ ans.’) écrire(‘Sa profession est: ‘, profession) Fin
Exercices Exercice: écrire un algorithme qui demande deux nombres à l’utilisateur. L’algorithme les additionne et informe l’utilisateur du résultat de l’addition. Exemple: Veuillez entrer le premier nombre: 56 Veuillez entrer le nombre à additionner: 5 Résultat: = 61
Exercices Programme Addition Déclarations Variable x: entier { premier nombre lu } y:entier { deuxième nombre lu } resultat: entier { résultat de l’addition } Début écrire(‘Veuillez entrer le premier nombre: ‘) lire(x) écrire(‘Veuillez entrer le nombre à additionner: ‘) lire(y) resultat x + y{ on affecte x+y à la var. resultat } écrire(‘Résultat: ‘, x, ‘ + ‘, y, ‘ = ‘, resultat) Fin
Exercices Programme Addition Déclarations Variable x: entier { premier nombre lu } y:entier { deuxième nombre lu } Début écrire(‘Veuillez entrer le premier nombre: ‘) lire(x) écrire(‘Veuillez entrer le nombre à additionner: ‘) lire(y) écrire(‘Résultat: ‘, x, ‘ + ‘, y, ‘ = ‘, x+y) Fin
Exercices Exercice: écrire un algorithme qui demande un nombre réel à l’utilisateur. L’algorithme affiche alors un encadrement de ce nombre entre les deux entiers les plus proches. Exemple: Veuillez entrer un nombre réel: Ce nombre est compris entre 3 et 4
Exercices Programme Encadrement Déclarations Variable x: réel { nombre lu } nb_inf, nb_sup: entier { nombres qui encadrent } Début écrire(‘Veuillez entrer un nombre réel: ‘) lire(x) nb_inf trunc(x){ on calcule l’arrondi inférieur } nb_sup trunc(x) + 1{ on calcule l’arrondi supérieur } écrire(‘Ce nombre est compris entre ‘, nb_inf, ‘ et ‘,nb_sup) Fin
Exercices Programme Encadrement Déclarations Variable x: réel { nombre lu } Début écrire(‘Veuillez entrer un nombre réel: ‘) lire(x) écrire(‘Ce nombre est compris entre ‘, trunc(x), ‘ et ‘, trunc(x) + 1) Fin
Exercices Exercice: écrire un algorithme qui demande trois phrases à l’utilisateur. L’algorithme concatène alors ces trois phrases, écrit le résultat de la concaténation, ainsi que la longueur de la nouvelle phrase ainsi formée. Exemple: Veuillez entrer une phrase: toto est Veuillez entrer une phrase: pas beau Veuillez entrer une phrase: mais alors vraiment pas Résultat: toto est pas beau mais alors vraiment pas Longueur: 41 caractères
Exercices Programme concat Déclarations Variable ch1, ch2, ch3: chaîne[25] { phrases lues } ch_concat: chaîne[75] { concaténation } ch_long : entier{ longueur finale } Début écrire(‘Veuillez entrer une phrase: ‘) lire(ch1) écrire(‘Veuillez entrer une phrase: ‘) lire(ch2) écrire(‘Veuillez entrer une phrase: ‘) lire(ch3) {on concatène ch2 à la suite de ch1 dans ch_concat} ch_concat concat(ch1, ch2) {on concatène ch3 à la suite de ch_concat dans ch_concat} ch_concat concat(ch_concat, ch3) écrire(‘Résultat: ‘, ch_concat) ch_long longueur(ch_concat) écrire(‘Longueur: ‘, ch_long) Fin
Exercices Programme concat Déclarations Variable ch1, ch2, ch3: chaîne[25] { phrases lues } ch_concat: chaîne[75] { concaténation } Début écrire(‘Veuillez entrer une phrase: ‘) lire(ch1) écrire(‘Veuillez entrer une phrase: ‘) lire(ch2) écrire(‘Veuillez entrer une phrase: ‘) lire(ch3) {on concatène ch3 à la suite de ch2 puis le tout à la suite de ch1 dans ch_concat} ch_concat concat(ch1, concat(ch2,ch3) ) écrire(‘Résultat: ‘, ch_concat) écrire(‘Longueur: ‘, longueur(ch_concat)) Fin
Exercices Programme concat Déclarations Variable ch : chaîne[25] { phrases lues } ch_concat: chaîne[75] { concaténation } Début écrire(‘Veuillez entrer une phrase: ‘) lire(ch_concat) écrire(‘Veuillez entrer une phrase: ‘) lire(ch) ch_concat concat(ch_concat, ch) écrire(‘Veuillez entrer une phrase: ‘) lire(ch) ch_concat concat(ch_concat, ch) écrire(‘Résultat: ‘, ch_concat) écrire(‘Longueur: ‘, longueur(ch_concat)) Fin
En conclusion … Dans ce chapitre nous avons appris: –Ce qu’était une variable, –Ce qu’est un type de variable, –Comment les déclarer, –Comment les nommer, –Comment les utiliser dans un programme, –Et comment économiser leur nombre.