Cours Variables

publicité
Initiation à la programmation impérative et algorithmique Cours 2 – Variables et types de données Largement inspiré des cours : Vercouter, Del Mondo & Delestre, Hérault, Mainguenaud (INSA de Rouen) E. Laine– 02.09.2016 Plan •  AssignaLon de variable •  Types de variable standard • 
• 
• 
• 
• 
Booléen Numérique Texte Liste Ensembles •  Périphériques d’entrée / sorLe standard •  IntroducLon des principes en Python E. Laine– 02.09.2016 Paradigme de la programmation impérative •  Un algorithme décrit une manière de fournir une soluLon à un problème : •  Problème = ensemble d’informaLons données en entrée du programme, on parle d’état ini'al •  SoluLon = ensemble d’informaLons calculées comme sorLes du programme, on parle d’état final •  L’algorithme ne comprend pas la solu'on, il applique la rece9e •  L’état d’un programme est consLtué de variables dont chacune conLent une parLe d’informaLon. •  un programme passe d’un état iniLal à un état final via des états intermédiaires •  pour la progammaLon impéraLve : on passe d’un état à un autre par une instrucLon E. Laine– 02.09.2016 Exécution séquentielle Début InstrucLon 1 InstrucLon 2 InstrucLon 3 … Fin E. Laine– 02.09.2016 2 types d’informations •  Types “données" : •  stockées dans le programme par des variables. •  Types “instrucLons/programme” •  la descripLon de l’algorithme pour l’ordinateur •  dans le cas de langages compilés, plusieurs formes. •  code source : descripLon textuelle du programme •  exécutable : suite d’instrucLons machines. Généré par un compilateur (par exemple en C). E. Laine– 02.09.2016 La variable •  Une variable fait référence à un emplacement mémoire (un conteneur) où est stockée une valeur •  3 composantes la définissent •  un identifiant (le nom de la variable) •  un type de données •  une valeur courante, dans le domaine des valeurs du type En,er age
caractère 26 Initiale
A Chaine de caractère Nom
Turing E. Laine– 02.09.2016 Déclaration d’une variable •  Associe à un idenLfiant son type de données •  Syntaxe (en pseudo code) •  <identifiant> : <type de données>
•  exemples •  age : EnLer •  nom : Chaine de caracteres •  AeenLon ! •  une variable ne peut pas changer de type de données •  sa valeur peut par contre changer (en accord avec le type) •  la valeur d’iniLalisaLon est aléatoire. E. Laine– 02.09.2016 L’instruction d’affectation •  aeribue une valeur à une variable : <variable> ß <valeur>
•  La valeur peut être au choix : •  une constante •  une autre variable •  une expression •  La valeur doit être du même type que la variable. Comment interpréter nomß 12 ? E. Laine– 02.09.2016 Exemple : conversion Declara'on: valeurFranc , valeurEnEuro, tauxConversion : Reel debut tauxConversion ß 6.55957 valeurEnEuro ß 10 valeurEnFranc ß valeurEnEuros * tauxConversion ecrire(‘Vos euros valent ‘, valeurEnFranc, ‘ francs’) fin On peut aussi le représenter avec un ordinogramme E. Laine– 02.09.2016 IdentiBiant •  Désigne de manière unique un élément du programme variable, type de données, programme •  Il doit être composé de caractère valides càd alphanumériques, ou ‘_’, et ne pas commencer par un chiffre •  ConvenLons de nommage courantes: •  idenLfiant de variable commence par une minuscule •  idenLfiant de type de données par une majuscule •  Faites aeenLon à la lisibilité ! •  nom explicite (évitez x, xx, xx2, z…) •  uLliser les majuscules ou le symbole ‘_’ pour séparer les mots E. Laine– 02.09.2016 Types de données •  Rappel : caractérise l’ensemble des valeurs possibles •  Types classiques • 
• 
• 
• 
booleen, binaire
textuel
numérique
ensembliste
•  Certains langages de plus bas niveau ne proposent pas beaucoup de types ensemblistes (uniquement les énuméraLons par exemple) E. Laine– 02.09.2016 Opérateurs •  Pour chaque type de données un ensemble d’opérateurs est autorisé •  chaque opérateur est représenté par un symbole •  un opérateur est uLlisé au sein d’une expression avec un ou deux opérandes •  Expression •  combine un opérateur et des opérandes du type de donnée aeendu par l’opérateur •  une expression est équivalente à une valeur du type de donnée définie par l’opérateur. E. Laine– 02.09.2016 Exemple opérateur •  Expression monAge + 1
•  la variable monAge est l’opérande de gauche •  + est l’opérateur d’addiLon (ici pour le type de donnée EnLer) •  constante 1 est l’opérande droite. •  monAge + 1 est appelée une opéraLon et une expression •  si monAge vaut 21… •  si monAge est enLer (1 est enLer) alors le résultat aussi (En python on différencie les float avec ‘1.’ ou ‘1.0’) •  Le type des opérandes change le type du résultat TD1** exos 1&2 E. Laine– 02.09.2016 Type booléen •  Domaine de valeurs •  seulement deux valeurs possibles, Vrai ou Faux. •  True ou False en Python (notez la majuscule) •  Exemple •  estMajeur : Booleen •  estMajeur ß Vrai •  4 opérateurs de calcul •  non •  et, ou, ouExclusif E. Laine– 02.09.2016 Opérateur booléen : et •  renvoie vrai si les deux opérandes sont vrais •  Syntaxe : <valeur booléenne> et <valeur booléenne> •  Table de vérité E. Laine– 02.09.2016 Opérateur booléen : non •  un seul opérande •  Renvoie la valeur inverse •  Syntaxe : non <valeur booléenne> •  Table de vérité E. Laine– 02.09.2016 Opérateur booléen : ou •  renvoie vrai si un des deux opérandes est vrai •  Syntaxe : <valeur booléenne> ou <valeur booléenne> •  Table de vérité E. Laine– 02.09.2016 Opérateur ouExclusif •  renvoie vrai si un seul des deux opérandes est vrai (XOR en anglais) •  Syntaxe : <valeur booléenne> ouExclusif <valeur booléenne> •  Table de vérité E. Laine– 02.09.2016 Exercice : affectations booléennes instruc'on a b c a, b, c : Booleen a ß Vrai b ß non a c ß a ou b b ß b et a a ß (c et b) ou (a ouExclusif c) c ß c ouExclusif a ou Vrai Remplir la table pour l’ordinateur après chaque instrucLon E. Laine– 02.09.2016 Types Naturel et Entiers •  Le type naturel correspond aux enLers posiLfs ou nuls, i.e. N. Le type enLer y ajoute les enLers négaLfs, i.e. Z. •  Valeurs autorisées : •  [0 ; 2* MAXINT] pour les naturels •  [-­‐MAXINT ; MAXINT] pour les enLers •  MAXINT est déterminé par l’architecture (216, 232 ou 264) •  Exemple : age : Naturel ; age ß 26 •  6 Opérateurs de calculs: •  +, -­‐, *, / , div, mod •  Le type renvoyé n’est pas toujours EnLer (e.g. operateur ‘/’ renvoie un Reel) E. Laine– 02.09.2016 Type Réel •  Correspond aux nombres réels. On uLlise un ‘.’ pour séparer parLes enLères et décimales. •  les réels peuvent être encodés avec différentes précisions. •  Exemple: temp : Reel, temp = 10.3 •  4 opérateurs de calcul : •  +, -­‐, *, / E. Laine– 02.09.2016 Opérations sur des types différents •  De manière générale un opérateur peut uniquement être uLlisé avec les types qui sont définis pour lui. 10.0 div 3 est interdit •  On parle de transtypage quand le langage fait implicitement une conversion de type. Transtypages autorisés : •  Naturel vers EnLer •  EnLer vers Réel E. Laine– 02.09.2016 Exercice affectations numériques instruc'on n e1 e2 r1 r2 n : Naturel e1, e2 : EnLer r1, r2 : Reel e1 ß 5 e2 ß e1 * 3 n ß e2 / e1 r1 ß -­‐7 + 10 / e1 r2 ß e2 div e1 e1 ß 100 mod (e2 + r1) E. Laine– 02.09.2016 Exercice affectations numériques instruc'on n e1 e2 r1 r2 n : Naturel e1, e2 : EnLer r1, r2 : Reel ? ? ? ? ? e1 ß 5 ? 5 ? ? ? 5 15 e2 ß e1 * 3 n ß e2 / e1 r1 ß -­‐7 + 10 / e1 r2 ß e2 div e1 e1 ß 100 mod (e2 + r1) impossible, transtypage de Reel vers Naturel pas défini -­‐5. 3. impossible car mod pas défini pour les reels E. Laine– 02.09.2016 Type Caractère •  Permet de représenter un seul caractère. •  Les valeurs autorisées sont tous les caractères existant dans la table ASCII. •  Représenté entre quotes ‘. •  Exemple: Groupe : Caractere Groupe ß ‘B’ •  A9en'on ! Les quotes sont nécessaires pour que le caractère ne soit pas confondu avec une variable a ß ‘A’ A ß 22 ‘A’
‘a’
A ß ‘a’ E. Laine– 02.09.2016 Rappel table ASCII E. Laine– 02.09.2016 Opérateurs sur les caractères •  ord, car, succ, pred s’appliquent à un opérande et s’appuient sur la table ASCII •  ord <Caractere> renvoie l’indice du caractère dans la table ASCII •  char <Naturel> renvoie le caractère à la posiLon indiquée dans la table ASCII •  succ <Caractere> renvoie le caractère suivant dans la table ASCII •  prec <Caractere> renvoie le caractère précédent dans la table ASCII E. Laine– 02.09.2016 Type chaîne de caractères •  Permet de représenter une suite de caractères •  Exemple : nomComplet : Chaine de caracteres nomComplet ß ‘Alan Turing’ •  1 opérateur de calcul •  + (la concaténaLon de chaînes) •  * (la répéLLon + concaténaLon de chaînes) •  En praLque les encodages actuels permeeent un plus grand spectre de caractères : 日本語で書て下さい! •  Le standard est UTF-­‐8 (spécifiable en Python) •  Peut poser des problèmes entre architectures (surtout pour les système à acccents) E. Laine– 02.09.2016 Opérateur de concaténation •  l’opérateur + s’applique à deux opérandes de type chaîne de caractères et renvoie la concaténaLon des chaînes •  Exemple : ‘Bienvenue’ + ‘à Roscoff’ vaut ‘Bienvenueà Roscoff’ •  Transtypage : Le transtypage du type Caractere vers Chaine de Caractere est autorisé. E. Laine– 02.09.2016 Type Enumeration •  Une énuméraLon n’est pas un type de données concret mais permet au programmeur de définir son propre type de données en énumérant l’ensemble des valeurs possibles Valeurs autorisées sont définies par le programmeur. •  Type <idenLfiant du type> = {Valeurs autorisées} •  Exemple : Type Jour = {"Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi" ,"Samedi", "Dimanche"} •  Opérateurs : succ, pred et ord
(il n’y a pas d’équivalent direct en Python)
E. Laine– 02.09.2016 Type liste/tableau 1D •  Le type liste décrit un tableau d’éléments •  en général tous les éléments sont de même type •  Par exemple une chaîne de caractère est équivalent à un tableau de caractère : v ß ‘Montre’ v est aussi un tableau/une liste à 6 éléments : [ ‘M’, ‘o’, ‘n’, ‘t’, ‘r’, ‘e’] •  On accède aux éléments du tableau avec le crochet: []
•  v[2] renvoie le caractère ‘n’
•  v[0] ß ‘C’ ensuite v vaut ‘Contre’
•  définit en Python par les crochets [] •  Plus de détails en deuxième session ! E. Laine– 02.09.2016 Les opérateurs de comparaison •  Permet de comparer n’importe quel type de données •  renvoie un élément de type Booléen •  Opérateur d’égalité == et d’inégalité != •  18 == 22 conLent la valeur Faux •  Pour les types ordonnés on a aussi les opérateurs de comparaisons : <, <=, >, >= TD1** exo 3 E. Laine– 02.09.2016 Exemple d’opérations •  ULlisaLon d’une variable dans un algorithme Déclara'on : ent1, ent2, reste : En'er ; resultat : Reel ent1 ß 45 ent2 ß 7 reste ß ent1 mod ent2 resultat ß (ent1-­‐reste)/ent2 ecrire(’Le resultat est :’,resultat) ecrire(’Le reste est : ’,reste) E. Laine– 02.09.2016 Exemple d’opérations •  Changement d’une valeur au cours du temps Déclara'on : nombreAAfficher , ent1, ent2 : En'er ent1 ß 45 ent2 ß 7 nombreAAfficher ß ent1+ent2 ecrire(nombreAAfficher) nombreAAfficher ß ent1-­‐ent2 ecrire(nombreAAfficher) E. Laine– 02.09.2016 Les périphériques d’entrée/sortie standards •  Les algorithmes ont besoin d’interacLon avec les périphériques pour •  obtenir des informaLons : périphérique d’entrée standard (stdin) en géneral il s’agit du clavier l’instrucLon lire affecte des valeurs à des variables ex: lire(Nom) •  fournir des informaLons : périphérique de sorLe standard (stdout) en général l’écran L’ instrucLon ecrire affiche les valeurs à l’écran ex : ecrire(“Bonjour, “, Nom) E. Laine– 02.09.2016 Exemple avec les périphériques Declara'on: valeurFranc , valeurEnEuro, tauxConversion : Reel debut tauxConversion ß 6.55957 lire(valeurEnEuro) valeurEnFranc ß valeurEnEuros * tauxConversion ecrire(‘Vos euros valent ‘, valeurEnFranc, ‘ francs’) fin E. Laine– 02.09.2016 Exemple, différence entre dates Declara'on: Type Mois = {"janvier", "février"...,"décembre"} Declara'on: mois1, mois2 : Mois ; an1, an2, difference : EnLer debut lire(mois1, an1) lire(mois2, an2) difference ß an2 –an1 difference ß difference * 12 difference ß difference + (ord mois2) – (ord mois1) ecrire(‘il y a ‘ , difference, ‘ mois entre les 2 dates’) fin E. Laine– 02.09.2016 Constante •  Une constante est une valeur qui ne change jamais durant l’execuLon de l’algorithme •  Deux types de constantes: •  implicites (par exemple 2 ou 3.1415) Declara'on : nbEleves, nbElevesParPoste : En'er ecrire(‘Entrez le nombre d’élèves svp :’) lire(nbEleves) nbElevesParPoste ß nbEleves div (10 * 10) ecrire(‘il y a ‘, nbElevesParPoste, ‘ eleves par poste’) •  explicites, définies par le programmeur. Dans ce cas on associe un idenLfiant en majuscule (MAX =12) Declara'on : NBPOSTES=10, NBSALLES = 10 Declara'on : nbEleves, nbElevesParPoste : En'er ecrire(‘Entrez le nombre d’élèves svp :’) lire(nbEleves) nbElevesParPoste ß nbEleves div (NBPOSTES * NBSALLES) ecrire(‘il y a ‘, nbElevesParPoste, ‘ eleves par poste’) E. Laine– 02.09.2016 Types et variables en Python •  Types • 
• 
• 
• 
booleen, binaire
Textuel
Numérique
ensemblistes
en python bool
char,
string
int, uint, float, double
[], set, tuple, dict
•  Opérateurs •  et, ou, non
•  +,-­‐, *, /
•  mod, div
and,
or, not
+,-,*,/ %, //
•  Entrée/sorLe standard (stdin/stdout) •  lire
•  ecrire
input
print E. Laine– 02.09.2016 Conclusions/résumé •  les informaLons d’un programme sont stockées dans des variables •  Une variable est caractérisée par un idenLfiant, un type de données et une valeur •  la valeur d’une variable est modifiée par l’instrucLon d’affectaLon •  les opérateurs des types de données permeeent d’exprimer des calculs simples. E. Laine– 02.09.2016 
Téléchargement