Les différents types de données et leurs opérations de base

Dimension: px
Commencer à balayer dès la page:

Download "Les différents types de données et leurs opérations de base"

Transcription

1 Séquence 2 Les différents types de données et leurs opérations de base Contenu Présentation générale Partie 1 Les 3 familles de données et l'opération d'affectation Les trois familles de données A. La famille des données qui contiennent des nombres B. La famille des données qui contiennent des caractères C. La famille des booléens D. Remarque : comment choisir le type d'une donnée? Arrêtons-nous sur l'opération d'affectation (ç) avant d'aller plus loin A. Les différents modes d'affectation B. La compatibilité entre types Partie 2 Les données de type numérique et leurs opérations de base Exemples de déclarations de données de type numérique Les opérations sur les données de type numérique A. L'affectation B. Les opérations arithmétiques C. Les opérations de comparaison D. Une opération de conversion : la fonction fchaîne Partie 3 Les chaînes de caractères et leurs opérations Exemples de déclarations de données de type caractère et chaîne de caractères TGPA0107-seq02.indd 19 6/09/07 11:05:58

2 Séquence 2 2. Les opérations sur les caractères et les chaînes de caractères A. L'affectation d'une valeur à une chaîne de caractères B. Les opérations de comparaisons sur les caractères et les chaînes de caractères 2C. Longueur d'une chaîne de caractères D. La concaténation de chaînes de caractères E. Le découpage de chaînes de caractères F. La conversion d'une chaîne de caractères en donnée de type numérique G. La fonction chr et la fonction ascii Partie 4 Les booléens et leurs opérations de base NON, ET, OU Exemple de déclaration Les opérations de base sur les données de type booléen A. L'affectation B. Les opérations booléennes non, et et ou TGPA0107-seq02.indd 20 6/09/07 11:05:59

3 Les différents types de données et leurs opérations de base Présentation générale Les données sont les variables ou les constantes que l'on utilise dans nos algorithmes. Déclaration des données On les déclare dans le lexique et on leur donne des valeurs dans l'algorithme. On les utilise ensuite pour écrire les traitements dans notre algorithme (calculs, affichage, tests, etc.). Quand on déclare une donnée, cela a pour effet de lui réserver un emplacement de taille suffisante dans la mémoire vive de l'ordinateur. Mais ce n'est pas parce qu'on a déclaré une donnée qu'elle a une valeur. En fait, quand on déclare une donnée, un emplacement lui est réservé en mémoire vive. Dans cet emplacement, il y a quelque chose, mais on ne sait pas quoi, ce qui fait que si on utilise la donnée sans lui avoir au préalable donné la valeur que l'on souhaite, on risque de faire, par exemple, des calculs dont les résultats ne seront pas ceux attendus. Rappelons-nous qu'une donnée, c'est comme une boîte. Le nom de la donnée, c'est comme une étiquette sur la boîte ce nom n'a rien à voir avec le contenu de la donnée. Déclarer une donnée revient à prendre une boîte vide et à coller une étiquette dessus ; pour l'instant, la boîte est toujours vide. Après avoir déclaré une donnée et avant de l'utiliser, il faut toujours lui donner une valeur, c'est-à-dire mettre quelque chose dans la boîte. Constante On peut choisir de donner une valeur à une donnée une fois pour toute, c'est le cas si la donnée est une constante (dans ce cas, la donnée aura toujours la même valeur chaque fois qu'on exécutera le programme correspondant à l'algorithme). Dans les algorithmes, on indique qu'une donnée est une constante par le mot réservé constante (à la place de saisie ou calculé), et on peut même indiquer la valeur de cette constante dans le lexique. Selon les langages de programmation, il peut y avoir nécessité lors de la déclaration de préciser par un mot réservé du genre const que la donnée est une constante. Variable Mais on peut aussi décider que cette donnée doit pouvoir changer de valeur au cours de l'exécution du programme correspondant à notre algorithme, et dans ce cas, la donnée est une variable (la notion de variable, en algorithmique, est exactement la même que la notion de variable en mathématiques). Affectation L'opération qui a pour effet de donner une valeur à une donnée s'appelle l'affectation (symbole de cette opération en algorithmique : ç). L'opération d'affectation peut prendre des formes très diverses selon les données et la façon dont on veut leur affecter une valeur. Nous allons découvrir ces différentes façons au fil de ce cours et pour chaque type de données étudié. Type Le type d'une donnée, c'est le fait que ça soit plutôt un nombre, plutôt un mot ou plutôt autre chose encore. Grosso modo, il existe 3 grandes familles de types de données de base TGPA0107-seq02.indd 21 6/09/07 11:05:59

4 Séquence 2 Partie 1 Les 3 familles de données et l'opération d'affectation 1. Les trois familles de données En programmation, il existe 3 familles de types de base pour les données. une famille de données à caractère numérique ; une famille concernant les caractères ; une troisième famille concernant les booléens. 1A. La famille des données qui contiennent des nombres Les données sont dites de type numérique. En algorithmique et programmation, on utilise soit des nombres entiers (la donnée est alors de type entier), soit des nombres à virgule (la donnée est alors de type réel). 1B. La famille des données qui contiennent des caractères Ces données contiennent une ou plusieurs lettres, chiffres, éléments de ponctuation, c'est-à-dire tout ce qui peut s'afficher à l'écran en tapant sur un clavier. Une donnée qui contient un seul caractère est de type caractère. Une donnée qui contient plusieurs caractères s'appelle une chaîne de caractères et est de type chaîne. Les chaînes de caractères peuvent être de différentes longueurs. La longueur maximale d'une chaîne de caractères s'indique lors de la déclaration, dans le lexique de l'algorithme. Si on déclare, par exemple, unechaîne (chaîne[14], saisie), cela indique que la donnée unechaîne pourra contenir au maximum 14 caractères. Si on déclare uneautrechaîne (chaîne, saisie), sans préciser la longueur maximale de la chaîne uneautrechaîne, cela signifie que la donnée uneautrechaîne pourra contenir la longueur par défaut d'une chaîne de caractères, qui dépend du langage de programmation (l'expression par défaut signifie quand on ne précise pas). 1C. La famille des booléens Ce sont des données ne pouvant valoir que vrai ou faux. Les booléens sont utilisés pour faire des tests dans nos programmes. 1D. Remarque : comment choisir le type d'une donnée? Tout dépend de ce que doit contenir la donnée (c'est-à-dire que tout dépend de ce qu'on veut mettre dans la boîte). Exemples Si la donnée doit contenir un mot, alors, il faut lui donner le type chaîne. Si elle doit contenir juste une lettre, alors, on peut choisir le type caractère ou le type chaîne[1] TGPA0107-seq02.indd 22 6/09/07 11:05:59

5 Les différents types de données et leurs opérations de base Si on veut faire des calculs arithmétiques sur la donnée, alors il faut choisir un type numérique (entier ou réel). Si la donnée est amenée à contenir à la fois des lettres et des chiffres, alors il faut choisir un type caractère ou chaîne. etc. Ce qui est important, c'est d'affecter à la donnée des valeurs correspondant bien à son type, sinon, le programme «plante» (on testera ça dans le TP accompagnant cette séquence). 2. Arrêtons-nous sur l'opération d'affectation (ç) avant d'aller plus loin Rappel : affecter une valeur à une variable signifie lui donner une valeur. Un autre mot peut désigner l'opération d'affectation, ce mot est initialisation. L'initialisation est une affectation particulière. Initialiser, c'est affecter une valeur, pour la première fois depuis sa déclaration, à une variable qui est amenée à prendre une suite de valeurs successives au cours du déroulement de l'algorithme, ou bien qui est amenée à changer ou non de valeur selon les situations. 2A. Les différents modes d'affectation On peut affecter une valeur à une donnée (c'est-à-dire qu'on peut mettre quelque chose dans la boîte) soit : par saisie. Dans ce cas, quel que soit le type de la donnée madonnée, l'instruction saisir (madonnée) signifie : «Récupère ce qui est saisi au clavier et quand l'utilisateur appuie sur la touche Entrée, range ce qui a été saisi dans la donnée madonnée» ; par affectation à l'aide d'une valeur constante ; par affectation avec une autre variable ; par calcul ; par lecture de la valeur dans un fichier (ceci ne sera pas étudié dans cette séquence, mais lorsque nous aurons abordé les fichiers). Le tableau suivant donne quelques exemples pour chaque façon d'affecter une valeur à une donnée (sauf pour l'affectation par lecture de la valeur dans un fichier, qui sera étudiée au chapitre sur les fichiers) TGPA0107-seq02.indd 23 6/09/07 11:05:59

6 Séquence 2 Suite à cette instruction, notre programme attend que l'utilisateur saisisse quelque chose et lorsque l'utilisateur valide sa saisie, le programme range ce qui a été saisi dans la donnée lenombre. Si ce qui a été saisi contient des lettres ou une virgule, le programme ne peut pas ranger ce qui a été saisi dans la donnée lenombre (qui est de type entier) et s'arrête en signalant une erreur. Exemples d'affectations correctes Affectation Lexique de l'exemple Algo par saisie par affectation à l'aide d'une valeur constante par affectation avec une autre variable par calcul lenombre (entier, saisi) lemot (chaîne, saisi) lenombre (entier, calculé) lemot (chaîne, calculé) lenombre (entier, saisi) lemot (chaîne[5], saisi) leréel (réel, calculé) lautremot (chaîne[6], calculé) lenombre (entier, saisi) lemot (chaîne[5], saisi) leréel (réel, calculé) lautremot (chaîne[6], calculé) Début Saisir (lenombre) Saisir (lemot) Début lenombre ç 4 lemot ç "Toto52" Début Saisir (lenombre) Saisir (lemot) leréel ç lenombre lautremot ç lemot Début Saisir (lenombre) leréel ç lenombre + 5 lenombre ç 7 Ici, la variable lenombre avait déjà une valeur, saisie par l'utilisateur et l'opération lenombre ç 7 a pour effet de remplacer (on dit "écraser") l'ancienne valeur de lenombre par la valeur 7. Vous remarquerez que quand on affecte une valeur à une chaîne de caractères par une chaîne constante, la chaîne constante en question est entre "" (quotes). Si on n'encadre pas cette chaîne par des quotes, alors l'ordinateur croit que le programme veut affecter le contenu de la donnée s'appelant toto à la donnée lemot. Suite à ces 2 opérations d'affectation, lenombre vaut 4 et lemot vaut Toto52 Pour pouvoir affecter la valeur de lenombre à leréel, lenombre doit lui-même contenir une valeur, sinon on affecte à leréel une valeur indéfinie. Nous n'avons bien sûr vu que des affectations très simples, elles se compliqueront plus tard et nous reviendrons, dans cette séquence, à l'opération d'affectation lors de la présentation de chaque type (numérique, chaîne, booléen) et des opérations qu'on peut lui appliquer TGPA0107-seq02.indd 24 6/09/07 11:06:00

7 Les différents types de données et leurs opérations de base 2B. La compatibilité entre types On ne peut pas affecter n'importe quel type de valeur à n'importe quel type de données pour la simple et bonne raison qu'une donnée, selon son type, n'est pas codée de la même façon en machine (je vous renvoie à votre cours d'amsi pour découvrir la différence de codage en machine existant par exemple entre la chaîne de caractères «23» et le nombre entier 23). De plus, même lorsqu'on affecte à une donnée une valeur du bon type, l'affectation peut être impossible ou incorrecte si la valeur que l'on veut ranger dans la donnée est trop grande. Voici les 4 règles simples que nous utiliserons : on peut affecter un entier à un réel, mais pas l'inverse (sinon, on perd de l'information : ce qui est derrière la virgule) ; on ne peut pas affecter un numérique à une chaîne de caractères, ni une chaîne de caractère à un numériques. Si on veut faire ça, il faut convertir le nombre en chaîne ou la chaîne en nombre à l'aide de fonctions de conversions que nous allons voir plus bas dans la présentation détaillée de chaque type de données ; on doit également s'astreindre à n'affecter à un booléen qu'un autre booléen ; si on range une chaîne plus grande dans une chaîne plus petite, on perd la fin de la plus grande des 2 chaînes. Le tableau suivant vous présente quelques exemples d'affectations incorrectes, en vous expliquant pourquoi ces opérations d'affectations ne sont pas acceptables. Exemples d'affectations incorrectes Lexique Algo Explication lenombre (entier, saisi) Début lachaine (chaîne[5], saisie) lenombre (entier,calculé) Afficher(«Saisissez un nombre entier») Saisir(leNombre) Début Afficher(«Saisissez un mot») Saisir(laChaine) Début lenombre "4" Si l'utilisateur saisit par exemple 54J, lorsqu'il valide sa saisie, un message d'erreur s'affichera car le caractère J fait que 54J n'est pas un nombre. S'il saisit 12,45, l'opération d'affectation est également incorrecte car la donnée lenombre a été déclarée comme étant de type entier et ne sait pas stocker les nombres à virgule. L'utilisateur peut ici saisir n'importe quoi (toto, 652 ou même rien) à partir du moment où ce qu'il saisit ne dépasse pas 5 caractères, on peut ranger n'importe quoi dans la donnée lachaine. Par contre, tout ce que l'utilisateur saisit qui dépasse 5 caractères sera ignoré lors de l'opération d'affectation car la variable lachaine est limitée à 5 caractères. Ici, on tente d'affecter à une variable de type entier la constante chaîne de caractères 4 (ce sont les " " qui indiquent qu'il s'agit d'une constante chaîne). Si on veut affecter la valeur 4 à la variable lenombre, il faut écrire : lenombre 4 (sans quotes) TGPA0107-seq02.indd 25 6/09/07 11:06:00

8 Séquence 2 lachaine (chaîne[5], calculée) lenombre (entier, calculé) lachaine (chaîne[5], calculée) Début lachaine toto Début lenombre 14 lachaîne lenombre Ici, on essaie d'affecter à la variable lachaine la valeur de la variable toto. Or, comme toto n'a pas été déclarée et encore moins initialisée à l'aide d'une valeur, notre programme ne pourra pas fonctionner. Si on veut que la variable lachaine contienne la valeur toto (c'est-à-dire la chaîne de caractères toto, alors il faut écrire : lachaîne "toto" Il y a une erreur dans l'instruction lachaîne lenombre, car ces 2 variables sont de 2 types incompatibles. Si on veut ranger 14 dans la variable lachaine, on a 2 solutions ici : soit on écrit lachaîne "14", soit on utilise une fonction de conversion qui va convertir la variable lenombre en chaîne de caractères, ce qui donne : lachaîne fchaine(lenombre). Nous reviendrons en détail sur ces instructions d'affectation dans chaque partie traitant de chaque famille de données. Pour le moment, nous allons faire deux exercices, puis nous passerons à la deuxième partie du cours, qui traite des données numériques. Remarques : la correction des exercices se trouve dans le fascicule «autocorrection» ; les numéros d'exercices se suivent d'une séquence à l'autre. Un conseil important : efforcez-vous de chercher un certain temps les solutions des exercices. Insistez, ne vous découragez pas. Si au bout d'une bonne vingtaine de minutes, vous ne trouvez pas l'ombre d'une solution, alors seulement à ce moment là, allez consulter le corrigé. Je conseille également à ceux et celles qui trouvent la solution d'aller vérifier qu'elle est satisfaisante. Exercice 1 Observer les opérations d'affectation suivantes. Lorsqu'une opération est correcte, donner son résultat, lorsqu'elle n'est pas correcte, expliquer pourquoi. Lexique N de ligne Algo nb1 (entier) Début nb2 (entier) 1 Saisir (nb1) 2 nb3 nb2 + 1 nb3 (réel) 3 nb2 nb1 bool1 (booléen) 4 nb1 45 ch1 (chaîne[6]) 5 nb ch2 (chaîne[4]) 6 nb3 nb1 * nb1 nb3 8 ch1 "maison" 9 ch2 bool1 10 ch2 ch1 11 ch1 "Olé" 12 ch2 ch TGPA0107-seq02.indd 26 6/09/07 11:06:00

9 Les différents types de données et leurs opérations de base Exercice 2 Écrire un algorithme qui calcule le salaire brut et le salaire net d'un fonctionnaire dont l'indice en nombre de points est saisi, et qui affiche ensuite un résultat semblable à l'exemple suivant : Indice = 500 Prix du point = 10.5 Taux de retenue = 0.1 Salaire brut = 5250 Salaire net = 4725 La valeur d'un point est une constante valant 10,50 salaire brut. et les retenues représentent 1/10 du Une fois que vous avez fait et vérifié ces deux exercices, passez à la suite du cours. Il s'agit de la partie 2, sur les données de type numérique TGPA0107-seq02.indd 27 6/09/07 11:06:00

10 Séquence 2 Partie 2 Les données de type numérique et leurs opérations de base On vient de le voir, dans la famille des numériques, il y a principalement le type entier et le type réel. Un nombre entier, c'est un nombre sans virgule et qui peut être positif ou négatif, et un nombre réel, c'est un nombre à virgules, positif ou négatif. Remarque : selon le langage de programmation utilisé, on peut trouver des variantes autour du type entier ainsi qu'autour du type réel. Ces variantes concernent souvent la taille du nombre et le fait qu'il possède un signe ou non. Lorsque, dans un certain langage de programmation, on choisit par exemple entre entier court et entier long pour un nombre entier, il faut faire attention, car si on choisit une taille trop petite (c'est-à-dire une boîte trop petite), on n'aura peut-être pas la place d'y ranger ce que l'on veut et les calculs ne se feront pas correctement. Ces variantes ne sont pas à préciser lors de l'écriture de l'algorithme, mais lors de l'écriture du programme correspondant. Exemple : un entier court peut avoir une valeur comprise entre et 32767, si on veut pouvoir ranger une donnée de plus grande valeur absolue dans notre variable de type entier, alors il faut, dans notre programme, déclarer un entier long. 1. Exemples de déclarations de données de type numérique monnombre (entier, saisi) : cette déclaration signifie que la donnée qui s'appelle mon- Nombre est de type entier et que son contenu est obtenu par saisie au clavier. compteur (entier, calculé) : cette déclaration signifie que la donnée qui s'appelle compteur est de type entier et que son contenu est obtenu par calcul. nbkm (réel, saisi) : ici, nbkm est un réel dont la valeur est saisie au clavier. Passons maintenant aux différentes opérations applicables à des données de type numérique, à commencer par l'opération d'affectation. 2. Les opérations sur les données de type numérique 2A. L'affectation Exemples Lexique de l'exemple lenombre (entier, saisi) lautrenombre (réel, calculé) Algo Début Saisir (lenombre) lautrenombre ç lenombre lenombre ç TGPA0107-seq02.indd 28 6/09/07 11:06:01

11 Les différents types de données et leurs opérations de base Outre l'opération d'affectation, il existe tout un tas d'opérations applicables aux nombres. Ce sont les opérations arithmétiques. 2B. Les opérations arithmétiques 2B1. Le changement de signe : Cette opération revient à multiplier par 1. Elle s'appelle le moins-unaire (unaire car n'utilisant qu'un seule opérande, par opposition aux opérations binaires comme par exemple l'addition, la soustraction, qui, pour un opérateur, utilisent 2 opérandes). Exemple Lexique lenombre (entier, saisi) : nombre dont on veut changer le signe. Algo Début Saisir (lenombre) Afficher ("Vous avez saisi", lenombre) lenombre ç lenombre Afficher ("Maintenant, votre nombre vaut", lenombre) Dans cet exemple, quel que soit le nombre saisi par l'utilisateur, l'instruction lenombre lenombre prend la valeur saisie, inverse son signe, et range le résultat dans la variable lenombre. Remarque : au lieu de ces 2 instructions : lenombre lenombre Afficher ("Maintenant, votre nombre vaut", lenombre), on aurait pu directement écrire : Afficher ("Maintenant, votre nombre vaut", lenombre). 2B2. L'addition : +, la soustraction :, la multiplication : *, la division : / et l'élévation à la puissance : ^ Exemples Lexique nb1 (entier, calculé) nb2 (réel, calculé) Début nb1 ç -14 nb2 ç nb nb1 ç nb1 + 4 Afficher ("Somme = ", nb1 + nb2) Afficher ("Différence = ", nb1 nb2) Afficher ("Produit = ", nb1 * nb2) Afficher ("Nb1/2 = ", nb1 / 2) Afficher ("Nb1 2 = ", nb1 ^ 2) Algo TGPA0107-seq02.indd 29 6/09/07 11:06:01

12 Séquence 2 Lors de l'exécution du programme correspondant à cet algorithme, il y a affichage à l'écran des informations suivantes : Somme = 11.5 Différence = 8.5 Produit = 15 Nb1/2 = -5 Nb1 2 = 100 Remarque : cet exemple est très sommaire et inutile (à part pédagogiquement) dans la mesure où nb1 et nb2 ne peuvent pas prendre des valeurs différentes au cours des différentes exécutions du programme. 2B3. La division entière : div et le reste de la division entière : mod L'opération div de division entière est la division euclidienne telle qu'on l'apprend à l'école primaire : on ne va pas «derrière la virgule». Le reste de la division entière (mod, qui signifie modulo) est l'opération complémentaire de la division entière. Elle récupère le reste de la division entière. Exemples : 7 div 4 = 1 7 mod 4 = 3 car 7 divisé par 4 égal 1 et il reste 3 12 div 2 = 6 12 mod 6 = 0 car 12 divisé par 2 égal 6 et il reste 0 2B4. Partie entière d'un nombre : ent et partie décimale d'un nombre : dec Ces 2 opérations sont également complémentaires l'une de l'autre. Exemples : ent(12.5) = 12 dec(12.5) = 0.5 ent( 6) = -6 dec( 6) = 0 Ces deux opérations sont des opérations unaires, ou plutôt ce sont des fonctions, c'est-à-dire qu'elles s'utilisent sous la forme : nomdelafonction (valeurquel'onveutfairetraiterparlafonction). Dans un programme, et donc dans un algorithme, le résultat d'une fonction s'utilise comme une variable, c'est-à-dire qu'on peut écrire des choses du genre : Lexique nb2 (réel, saisi) parent (entier, calculé) pardec (réel, calculé) ent (fonction) : retourne la partie entière du nombre passé en paramètre. dec (fonction) : retourne la partie décimale du nombre passé en paramètre. Algo Début Saisir(nb2) parent ç ent (nb2) pardec ç dec (nb2) Afficher ("Partie entière du nombre saisi : ", parent) Afficher ("Partie décimale du nombre saisi : ", pardec) Remarque : vous pouvez constater, en observant le lexique ci-dessus, que j'y ai décrit les fonctions ent et dec. C'est ce qu'il faut toujours faire lorsqu'on utilise des sousprogrammes «non soulignés», c'est-à-dire ne faisant pas partie des mots réservés TGPA0107-seq02.indd 30 6/09/07 11:06:01

13 Les différents types de données et leurs opérations de base 2B5. Remarque : ordre de priorité entre opérations arithmétiques Pour toutes ces opérations arithmétiques, lorsque, dans un programme, on effectue des calculs à l'aide d'expressions arithmétiques, l'ordre de priorité entre opérations différentes est le même qu'en mathématiques. Voici les opérations classées de la plus prioritaire à la moins prioritaire : ^ unaire *, / +, À priorité égale, l'évaluation se fait de gauche à droite. Exemple : * 8 4 / 2 = 76 Pour modifier l'ordre de priorité entre opérations arithmétiques, il faut utiliser des parenthèses. Exemple : (6 + 9) * (8 4) / 2 = 30 2C. Les opérations de comparaison < (inférieur à), <= (inférieur ou égal à), > (supérieur à), >= (supérieur ou égal à), = (égal), <> (différent). Ces opérations servent à comparer deux valeurs numériques entre elles (ces deux valeurs pouvant être des constantes, des variables ou des expressions arithmétiques) afin de faire un traitement plutôt qu'un autre selon le résultat de la comparaison. Dans un algo ou un programme, on peut trouver des expressions de comparaison de formes très variées comme par exemple a < b, a <= b + 4, 2 (a b) > b, a <> b.(dans ces exemples, on suppose que a et b sont 2 variables numériques auxquelles on a au préalable affecté une valeur, c'est-à-dire que l'on a initialisées). Le résultat d'une opération de comparaison est de type booléen : en effet, l'expression a < b est vraie si a est strictement inférieur à b, sinon (c'est à dire si a >= b) elle est fausse. 2D. Une opération de conversion : la fonction fchaîne Cette fonction transforme le numérique passé en paramètre en une chaîne de caractères, c'est-à-dire que le résultat d'application de la fonction fchaîne est une chaîne de caractères. Exemple : l'expression fchaîne (452) a pour valeur la constante chaîne de caractères "452". Exemple d'utilisation Lexique nb2 (réel, saisi) nbconv (chaîne, calculé) fchaîne(fonction) : convertit en chaîne de caractères le nombre passé en paramètre. Algo Début Saisir(nb2) nbconv ç fchaîne (nb2) Le nombre une fois converti, on peut lui appliquer toutes les opérations applicables aux chaînes de caractères TGPA0107-seq02.indd 31 6/09/07 11:06:01

14 Séquence 2 Bon, avant d'aborder la troisième partie, qui traite des chaînes de caractères, nous allons rôder les notions abordées ci-dessus en faisant quelques exercices. Exercice 3 Dans cet exercice, on vous donne une opération d'affectation ainsi que l'état des variables avant exécution de l'opération d'affectation. Vous devez trouver l'état des variables après exécution de l'opération d'affectation. x, y et z sont des variables de type numérique. Avant l'opération Opération Après x =? (x a été uniquement déclarée, mais pas encore initialisée.) x ç 2 x = x = 2 y = 5 x ç y x = y = x = 5 y = 5 z = 3 x ç y + z -1 x = y = z = x = 7 y = 5 x ç x div y x = y = Exercice 4 Donnez la valeur de toutes les variables à chaque instruction. On suppose que ces instructions se suivent dans un algorithme. 1. X 27 mod 4 4. X 3 ^ 2 2. Y X * 2 5. Y X ^ (10 div Z) 3. Z 301 div X 6. Y ent(z / Y) Exercice 5 Soient 2 variables réelles nb1 et nb2, saisies au clavier par l'utilisateur. Écrire l'algorithme permettant de permuter les valeurs de nb1 et nb2, et d'afficher ces nouvelles valeurs. Pour ce faire, utiliser une troisième variable (dite variable temporaire) dans laquelle on range temporairement une des 2 valeurs à échanger. Exemple : lors de la saisie : nb1 = 3 et nb2 = 2, Après application de l'algorithme d'échange : nb1 = 2 et nb2 = 3 Exercice 6 Même consigne que l'exercice 5, mais sans utiliser de variable intermédiaire, uniquement par calcul entre les 2 variables. Un peu casse-tête, mais rigolo! TGPA0107-seq02.indd 32 6/09/07 11:06:01

15 Les différents types de données et leurs opérations de base Exercice 7 L'ordre des instructions dans un algo et un programme a une grande importance. Le cancre de service, à la dernière interro, a tout pompé sur sa voisine, mais dans le désordre. Remettez en ordre les instructions de son algo et indiquez quel traitement fait cet algo. Lexique coef1 = 3 (entier, constante) : coefficient de la première note. coef 2 = 4 (entier, constante) : coefficient de la deuxième note. coef 3 = 2 (entier, constante) : coefficient de la troisième note. note1, note2, note3 (entiers, saisis) : notes de l'élève. total (entier, calculé) : total. Algo concours Début Afficher ("Le total est de :", total) Saisir (note3) Afficher ("Donner la note obtenue à l'épreuve 1 :") Afficher ("Epreuve 2 ", note2," ", coef 2) Saisir (note1) Afficher ("Epreuve 3 ", note3," ", coef 3) total ç ( note1 * coef 1 + note2 * coef 2 + note3 * coef 3)/ coef 1 + coef 2 + coef 3 Saisir (note2) Afficher ("Donner la note obtenue à l'épreuve 3 : ") Afficher ("Epreuve 1 ", note1," ", coef 1) Afficher ("Donner la note obtenue à l'épreuve 2 : ") Exercice 8 Pour écrire un algo et qu'il soit exact, cela suppose que l'on a bien décomposé toutes les étapes des traitements à faire effectuer à notre futur programme. Un informaticien mal réveillé doit écrire, pour le service comptabilité de son entreprise, un programme qui permette de calculer la TVA ainsi que le prix TTC d'un prix HT saisi au clavier, et il a écrit l'algorithme suivant : Laixyk de l'algau contabillité // il est vraiment mal réveillé. Vous avez vu les fautes qu'il fait? taux = , constante, montant du taux de TVA. prixht : réel, saisi, prix hors taxe. tva : réel, calculé, montant de la TVA. prixttc : réel, calculé, prix TTC. Algau Contabillité Début Afficher ("Entrer le prix hors taxe ") Saisir (prixht) tva! prixht * taux Afficher ("La TVA est de :", tva) Afficher ("Le prix T.T.C. est de :", prixttc) Cet informaticien a mal décomposé les différentes instructions. Trouvez la ou les instruction(s) manquante(s) et insérez-la ou insérez-les au bon endroit TGPA0107-seq02.indd 33 6/09/07 11:06:02

16 Séquence 2 Exercice 9 Écrivez l'algorithme qui calcule et affiche le nom et le salaire net d'un employé d'une entreprise. Le salaire horaire, le nombre d'heures travaillées, le taux de retenue, le montant de la prime et le nom de l'employé sont saisis au clavier. Dans cette entreprise, les employés sont payés à l'heure et bénéficient d'une prime d'ancienneté. Pour information, la règle de calcul d'un salaire net est la suivante : Salaire Net = ((nombre d'heures travaillées * salaire horaire) + prime) * (1 taux de retenue). Exercice 10 Écrire l'algo qui calcule et affiche en heures, minutes et secondes, un temps saisi en secondes. Exemple : Temps saisi : 3824 Résultat : 1 H 3 M 44 S Vous avez besoin d'utiliser la division entière et le reste de la division entière. Exercice 11 Écrire l algorithme qui permet d effectuer des permutations suivant l'exemple ci-dessous : AVANT APRÈS X = 1 X = 3 Y = 2 Y = 1 Z = 3 Z = 2 Cet exemple vous montre qu'après le traitement de permutation, on retrouve z dans x, x dans y et y dans z. Exercice 12 Écrire l algorithme qui transforme et affiche un nombre saisi en nombre pair immédiatement inférieur. Exemple : L'utilisateur saisit 7, affichage de 6. L'utilisateur saisit 10, affichage de 10. L'utilisateur saisit 19, affichage de TGPA0107-seq02.indd 34 6/09/07 11:06:02

17 Les différents types de données et leurs opérations de base Exercice 13 Écrire l'algorithme qui affiche à l'écran, en le minimum de pièces et de billets, la décomposition d'une somme d'argent saisie au clavier par l'utilisateur. Pièces et billets autorisés : 100, 50, 10, 5 et 1 euros. Vous avez, pour faire cela, besoin d'utiliser la division entière et le reste de la division entière. Exemple : si l'utilisateur saisit la somme d'argent 124, le résultat de l'algorithme affichera un résultat du genre : 1 billet(s) de 100, 0 billet(s) de 50, 2 pièce(s) de 10, 0 pièce(s) de 5, 4 pièce(s) de 1 Bien, maintenant, passons à la partie suivante de cette séquence, qui traite des données contenant des caractères TGPA0107-seq02.indd 35 6/09/07 11:06:02

18 Séquence 2 Partie 3 Les chaînes de caractères et leurs opérations On l'a déjà vu plus haut, le type caractère et le type chaîne de caractères sont des types que l'on donne à des données appelées à contenir des lettres, des chiffres, des caractères de ponctuation et tout autre signe disponible sur un clavier d'ordinateur. En machine, les caractères, comme toute autre information, sont codés sous forme numérique. Exemples Le caractère 0 (zéro) a en machine la valeur 48 Le caractère 1 a en machine la valeur 49 Le caractère 2 a en machine la valeur 50 etc. Jusqu'au caractère 9 qui a en machine la valeur 57 Les caractères ayant leurs valeurs numériques entre 58 et 64 sont des caractères de ponctuation. Le caractère A a en machine la valeur 65 Le caractère B a en machine la valeur 66 etc. Jusqu'au caractère Z qui a en machine la valeur 90 Les caractères ayant leurs valeurs numériques entre 91 et 96 sont des caractères utilisés dans les expressions arithmétiques (\, [, ] etc ) Le caractère a a en machine la valeur 97 Le caractère b a en machine la valeur 98 etc. Jusqu'au caractère z qui a en machine la valeur 122 Une chaîne de caractères est donc codée sous forme d'une suite de codes numériques, chaque code représentant un caractère de la chaîne. Un truc : pour faire apparaître à l'écran un caractère sans le taper au clavier, appuyer sur la touche «alt» du clavier et taper en même temps le code numérique du caractère. Ce qu'il faut retenir, c'est que l'ensemble des caractères est un ensemble complètement ordonné (comme l'ensemble des nombres) et que l'on peut donc comparer des caractères ou des chaînes de caractères à l'aide des opérateurs de comparaison. Ceci peut servir par exemple pour ranger des mots dans l'ordre alphabétique (c'est-à-dire dans l'ordre lexicographique). 1. Exemples de déclarations de données de type caractère et chaîne de caractères MonCar (caractère, saisi) MaCh (chaîne[1], saisie) Ces 2 déclarations sont équivalentes car une chaîne de longueur 1 est une chaîne comportant un seul caractère. MaChaîne (chaîne[4], calculée) : la variable MaChaîne peut contenir jusqu'à 4 caractères TGPA0107-seq02.indd 36 6/09/07 11:06:02

19 Les différents types de données et leurs opérations de base EncoreUneAutreChaîne (chaîne, saisie) : ici, la taille maxi de cette chaîne n'est pas précisée. Selon le langage de programmation utilisé, elle pourra contenir un certain nombre de caractères (jusqu'à 255 en langage pascal, jusqu'à en Windev). Cela ne signifie pas que la chaîne doit contenir systématiquement 255 ou caractères, cela ne signifie pas non plus qu'elle a 255 ou pour longueur. Cela signifie simplement qu'on ne pourra pas y ranger plus que 255 ou caractères. En algo, on ne se pose pas la question de la capacité. À partir du moment où on n'a pas précisé la taille maxi, cela signifie qu'on n'a pas besoin de limiter cette taille, cela ne change rien à la longueur effective de la chaîne, c'est-à-dire au nombre de caractères qu'elle contient réellement. 2. Les opérations sur les caractères et les chaînes de caractères Nous allons aborder 5 opérations de base sur les chaînes de caractères : l'affectation, la comparaison, la longueur (fonction longueur), la concaténation, le découpage (fonction sous-chaîne), la conversion d'une chaîne de caractères en donnée de type numérique (fonction val). 2A. L'affectation d'une valeur à une chaîne de caractères On l'a déjà vu au paragraphe traitant de l'opération d'affectation, on peut affecter une valeur à une variable de type caractère ou chaîne de caractères par saisie, par affectation à l'aide d'une valeur constante, par affectation avec une autre variable, par calcul, par lecture de la valeur dans un fichier. Une règle est commune à tous les modes d'affectation. Si l'opération d'affectation affecte à la donnée de type caractère ou chaîne de caractères plus de caractères qu'elle ne peut en contenir, la fin de ce qui est affecté est coupée. À l'inverse, si l'opération d'affectation affecte moins de caractères que la chaîne ne peut en contenir alors, en algo comme en programmation, il n'y a aucun problème (mis à part avec quelques langages de programmation comme par exemple le langage C). Pour les modes d'affectation par saisie, par affectation à l'aide d'une valeur constante, par affectation avec une autre variable, je vous renvoie au paragraphe 2A. Les différents modes d'affectation de la partie 1 de cette séquence, qui comporte des exemples. L'affectation par lecture de la valeur dans un fichier sera étudiée lorsque nous aborderons les fichiers, en séquence 8. L'affectation d'une valeur à une chaîne de caractères par le calcul peut se faire à l'aide d'opérations spécifiques aux chaînes de caractères. Les opérations sur les chaînes de caractères existent en moins grand nombre que les opérations sur les nombres. Il existe principalement 3 opérations de base permettant d'obtenir par calcul des chaînes de caractères : la conversion de nombres en chaînes, le découpage de chaînes, le collage de chaînes (cette opération s'appelle la concaténation) TGPA0107-seq02.indd 37 6/09/07 11:06:02

20 Séquence 2 Nous allons aborder le découpage et la concaténation dans les paragraphes 2D et 2E cidessous, mais je voudrais ici revenir sur la conversion d'un nombre en chaîne. On l'a vu dans le paragraphe précédent, l'opération qui convertit un nombre en chaîne est la fonction fchaîne en algo. Voici un exemple simple d'utilisation de cette fonction : Lexique nb2 (réel, saisi) nbconv(chaîne, calculé) Algo Début Saisir(nb2) nbconv ç fchaîne(nb2) 2B. Les opérations de comparaisons sur les caractères et les chaînes de caractères Elles se font à l'aide des mêmes opérateurs de comparaison que ceux utilisés pour les nombres : < (inférieur à), <= (inférieur ou égal à), > (supérieur à), >= (supérieur ou égal à), = (égal), <> (différent). Il y a égalité entre deux données de type caractère ou chaîne de caractères si elles sont absolument identiques. Exemples : "bebe" = "bebe" "bebe" <> "bébé" "bebe" <> "BEBE" "bebe" <> "bebe " (car il y a un espace à la fin du deuxième "bebe" qu'il n'y a pas à la fin du premier "bebe".) Nous allons traiter les autres opérateurs de comparaison (<, <=, >, >=, <>) à l'aide d'exemples. Ce qui est essentiel à comprendre, c'est que le fait qu'une chaîne de caractères soit supérieure à une autre n'a rien à voir avec sa longueur mais a à voir avec les caractères qu'elle contient. L'ordre sur les chaîne de caractères respecte les même règles que l'ordre dans lequel sont rangés les mots dans un dictionnaire. Exemple Résultat de la comparaison Explication "1" < "a" Vrai Car le code numérique du caractère 1 est inférieur au code numérique du caractère a. "abaa" >= "abb" faux Comme dans un dictionnaire, la comparaison se fait rang de caractère par rang de caractère. Dans cet exemple, les 2 premiers caractères de chaque chaîne sont identiques, c'est donc le troisième caractère qui détermine laquelle des 2 chaînes est "la plus grande". Le troisième caractère de la première chaîne est un "a" alors que le troisième caractère de la deuxième chaîne est un "b", le code numérique du caractère "a" étant inférieur au code numérique du caractère "b", c'est la chaîne "abb" la "plus grande", bien qu'étant de plus petite longueur que la chaîne "abaa" TGPA0107-seq02.indd 38 6/09/07 11:06:03

21 Les différents types de données et leurs opérations de base 2C. Longueur d'une chaîne de caractères La longueur d'une chaîne de caractères, c'est le nombre effectif de caractères qu'elle contient. Pour calculer cette valeur, il existe une fonction que l'on retrouve sous des noms différents dans tous les langages de programmation. En algorithme, nous appellerons cette fonction la fonction longueur. Cette fonction retourne comme résultat la longueur de la chaîne de caractères passée en paramètre. Je vous ai mis quelques exemples ci-après. Exemples Lexique nb2 (entier, calculé) lemot (chaîne[7], calculé) lach (chaîne, calculé) longueur (fonction) résultat : entier : retourne le nombre de caractères contenus dans la chaîne passée en paramètre. Résultat après exécution Algo de l'instruction Début nb2 ç 4750 lemot ç fchaîne (nb2) lemot = "4750" lach ç "" lach contient une chaîne de caractères vide, c'est à dire que lach ne contient aucun caractère. Afficher ("Longueur de la variable Affichage à l'écran du message : lemot : ", longueur (lemot)) Longueur de la variable lemot : 4 nb2 ç longueur (lach) (par cette nb2 = 0 instruction, on range dans la variable nb2 le résultat d'appel de la fonction longueur) Afficher ("Longueur de la variable lach : ", Affichage à l'écran du message : nb2) Longueur de la variable lach : 0 2D. La concaténation de chaînes de caractères L'opération de concaténation est une opération de collage de chaînes de caractères entre elles. Le signe utilisé pour indiquer que l'on procède à une opération de concaténation est le signe +. Exemples Lexique Algo Résultat après exécution de l'instruction nb2 (entier, calculé) lemot (chaîne[7], calculé) Début nb2 ç 4750 lemot ç fchaîne (nb2) + "123" lemot = " " lach (chaîne, calculé) lach ç lemot + "blabla" lach = " blabla" lemot ç "tralala" + "lalère" lemot = "tralala" (car la variable lemot peut contenir au maximum 7 caractères). Afficher ("La variable lach contient : ", lach) Affichage à l'écran du message : La variable lach contient : blabla Afficher ("La variable lemot contient : ", lemot) Affichage à l'écran du message : La variable lemot contient : tralala TGPA0107-seq02.indd 39 6/09/07 11:06:03

22 Séquence 2 2E. Le découpage de chaînes de caractères Le découpage à l'aide de la fonction souschaine est l'opération inverse de la concaténation. On peut en effet avoir parfois besoin de ne prélever qu'une partie d'une chaîne de caractères pour l'afficher ou pour faire tout autre traitement. La fonction souschaine prend en paramètre la chaîne à découper, la position à partir de laquelle on veut découper et le nombre de caractères que l'on veut prélever. Par exemple, l'instruction res ç souschaine (mot, x, y) effectuera la copie de y caractères de la chaîne mot à partir du x e caractère et rangera le résultat dans la variable res. Exemples Lexique Algo Résultat après exécution de l'instruction mot (chaîne[7], calculé) Début mot ç "Bonjour" mot = "Bonjour" lach(chaîne, lach ç souschaine (mot,2,5) lach = "onjou" calculé) Afficher ("La variable lach contient : ", lach) Affichage à l'écran du message : La variable lach contient : onjou Afficher ("Dind", souschaine(mot,2,2)) Affichage à l'écran de : Dindon mot ç souschaine (mot,1,3) + "soir" mot = "Bonsoir" lach ç mot + "je vais me coucher" lach = "Bonsoirje vais me coucher" Il faut prévoir les espaces entre les mots lach = "Bonsoir je vais me coucher" lors de ce type d'opération, sinon, on a de mauvaises surprises à l'affichage. lach ç mot + "je vais me coucher" Il faut prévoir les espaces entre les mots lors de ce type d'opération, sinon, on a de mauvaises surprises à l'affichage. Remarque : lorsqu'on découpe une chaîne de caractères, on peut aussi n'avoir besoin d'extraire qu'un seul caractère de cette chaîne. Dans ce cas, l'utilisation de la fonction souschaine n'est pas justifiée : si on veut extraire le x e caractère de la chaîne de caractères machaine, il faut simplement utiliser la notation machaine[x]. Exemple : soit la chaîne machaine. Supposons que je veuille afficher seulement la première lettre de cette chaîne à l'écran, alors, il me suffit d'écrire : Afficher (machaine[1]). 2F. La conversion d'une chaîne de caractères en donnée de type numérique Cette opération de conversion de chaîne en numérique se fait à l'aide de la fonction val. Cette opération est l'opération inverse de celle que l'on effectue à l'aide de la fonction fchaîne, qui convertit un nombre en chaîne de caractères. La fonction val convertit la chaîne de caractères passée en paramètre en un nombre TGPA0107-seq02.indd 40 6/09/07 11:06:03

23 Les différents types de données et leurs opérations de base O La chaîne de caractères passée en paramètre à la fonction val ne doit donc contenir que des chiffres. Elle peut éventuellement contenir le caractère ou + au début, ainsi qu'une virgule. Si la chaîne de caractères passée en paramètre à la fonction val contient autre chose que signe, chiffres et virgules, une erreur se produit. Exemples Lexique Algo Résultat mot (chaîne[7], calculé) lach (chaîne, calculé) res (réel, calculé) : résultat d'appel de la fonction val Début res ç val (" ") res ç val ("toto784") res = val(fonction) résultat réel : retourne la valeur numérique de la chaîne passée en paramètre Le programme s'arrête à l'exécution de cette instruction, indiquant qu'une erreur s'est produite dans l'utilisation de la fonction val res ç val (souschaine("toto784",5,2)) res = 78 Cette instruction d'affectation est complexe. Décortiquons-la : on appelle 2 fonctions, dont une sur le résultat de l'autre. Comme en mathématiques, quand on écrit f(g(x)), c'est d'abord g(x) qui est calculé, puis on applique la fonction f au résultat de g(x). Donc, dans cet exemple : c'est d'abord souschaîne("toto784",5,2) qui est calculé, ce qui donne la chaîne de caractères "78" comme résultat, puis la fonction val est appliquée à la chaîne "78", ce qui donne le nombre 78 comme résultat, résultat affecté à la variable res par l'opération ç. 2G. La fonction chr et la fonction ascii Ces 2 fonctions sont complémentaires l'une de l'autre. La fonction ascii renvoie le code numérique du caractère passé en paramètre (cette fonction s'appelle ainsi car le code qui associe une valeur numérique à chaque caractère s'appelle le code ASCII pour American Standard Code for Information Interchange). La fonction chr, quant à elle, renvoie le caractère correspondant au code numérique passé en paramètre. Exemples L'instruction Afficher(ascii("a")) aura pour effet d'afficher 97 à l'écran, car 97 est le code ascii du caractère a. L'instruction Afficher(chr(37)) aura pour effet d'afficher % à l'écran, car le code ascii du caractère % est 37. Nous allons maintenant faire une série d'exercices nous permettant de réinvestir les notions vues au cours de cette 3 e partie du cours TGPA0107-seq02.indd 41 6/09/07 11:06:04

24 Séquence 2 Exercice 14 Traduction des mots en code secret. On l'a tous fait quand on était petit! Écrivez l'algorithme qui traduit un mot saisi au clavier et comportant 4 lettres, en codes numériques ascii. Exemple : si l'utilisateur saisit le mot jour, alors le message suivant s'affiche : Le code secret du mot jour est Remarque : Les nombres 106, 111, 117 et 114 sont respectivement les codes ascii des caractères j, o, u, et r. Exercice 15 Il s'agit, dans cet exercice, d'écrire l'algorithme permettant le cryptage d'un mot. Votre client est agent secret et écrit ses messages en langage crypté. Il vous demande de lui écrire un programme qui crypte le mot qu'il saisit. Ce cryptage consiste à inverser le mot et à intercaler entre chacune de ses lettres la lettre qui a la position symétrique dans l'alphabet. Je vous explique : l'alphabet comporte 26 lettres (a b c d e f g h i j k l m n o p q r s t u v w x y z). Dans l'alphabet, a est la lettre symétrique de z, b est la symétrique de y, c est la symétrique de x,, et ainsi de suite jusqu'à m qui est la symétrique de n. Donc, si l'agent secret saisit par exemple : ole, ce mot crypté devient : evlool. Pour obtenir ce résultat, on a inversé le mot ole qui est devenu elo, puis on a intercalé v qui est le symétrique de e, o qui est le symétrique de l et l qui est le symétrique de o. Écrivez cet algorithme pour 1 mot de 3 lettres, ce mot étant saisi au clavier par l'utilisateur. Vous avez besoin de pas mal d'opérations différentes pour écrire cet algorithme. Je crois bien que vous avez besoin d'utiliser toutes les notions concernant les chaînes de caractères. Pour cet exercice, un accompagnement en ce qui concerne la démarche me paraît nécessaire, mais bien entendu, celles et ceux qui pensent pouvoir être autonomes pour écrire cet algo peuvent l'écrire sans lire ce qui suit. La difficulté réside ici dans le calcul du symétrique d'une lettre. Il faut pour cela récupérer le code ASCII de cette lettre. Ensuite, il faut en déduire par calcul le code ASCII du symétrique de cette lettre, en utilisant le fait que l'alphabet comporte 26 lettres. Enfin, il faut retraduire le code ASCII du symétrique de la lettre en caractère. Exemples : le caractère c est le 3 e caractère de l'alphabet, son symétrique est donc la 3 e lettre de l'alphabet en partant de la fin, c'est à dire la 24 e lettre de l'alphabet, c'est-à-dire la lettre x. Le caractère e est le 5 e caractère de l'alphabet, son symétrique est donc la 5 e lettre de l'alphabet en partant de la fin, c'est à dire la 22 e lettre de l'alphabet. Le caractère o est le 15 e caractère de l'alphabet, son symétrique est donc la 15 e lettre de l'alphabet en partant de la fin, c'est à dire la 12 e lettre de l'alphabet TGPA0107-seq02.indd 42 6/09/07 11:06:04

25 Les différents types de données et leurs opérations de base En y regardant de plus près, on peut constater que la somme de la position d'un caractère et de son symétrique fait toujours 27 : Pour c, = 27, Pour e, = 27, Pour o, = 27. Donc, position d'un caractère + position de son symétrique = 27 Donc, position d'un caractère = 27 - position de son symétrique Et position du symétrique d'un caractère = 27 - position du caractère. Seulement, ce n'est pas directement la position des caractères que l'on va utiliser, mais leur code ASCII. Il faut donc que l'on trouve une règle qui calcule le code ASCII du symétrique en fonction du code ASCII du caractère. Ce qu'il faut donc trouver, c'est quel est le lien entre la position d'un caractère dans l'alphabet et son code ASCII. Ce que l'on peut constater, par exemple, c'est que le code ASCII du caractère c est égal au code ASCII du caractère a + 2, puisque a est la première lettre et c la troisième (rappel : les caractères forment un ensemble complètement ordonné). On peut en déduire que la position de c dans l'alphabet = code ASCII de c code ASCII de a + 1 = = 3. Donc, quel que soit le caractère, sa position = code ascii du caractère code ascii de a + 1. Ça va jusque là? Alors maintenant, reprenons l'expression : position du symétrique d'un caractère = 27 position du caractère, et remplaçons, dans cette expression, tout ce qui concerne la position d'un caractère par les valeurs calculées en fonction des codes ASCII. Cela donne : Code ASCII du symétrique d'un caractère code ASCII de a + 1 = 27 (code ASCII du caractère code ASCII de a + 1), C'est-à-dire, en arrangeant cette expression : Code ASCII du symétrique d'un caractère = 27 (code ASCII du caractère code ASCII de a + 1) + code ASCII de a 1, On peut encore simplifier cette expression, ce qui donne : Code ASCII du symétrique d'un caractère = 27 code ASCII du caractère + code ASCII de a 1 + code ASCII de a 1 Soit encore : C'est-à-dire : Code ASCII du symétrique d'un caractère = *code ASCII de a code ASCII du caractère, Code ASCII du symétrique d'un caractère = *97 code ASCII du caractère, TGPA0107-seq02.indd 43 6/09/07 11:06:04

26 Séquence 2 On obtient finalement la formule de calcul suivante : Code ASCII du symétrique d'un caractère = 219 code ASCII du caractère. Notre démarche de réflexion nous a donc permis d'établir la formule de calcul du code ASCII du symétrique d'un caractère en fonction du code ASCII de ce même caractère. Cette formule est la suivante : Code ASCII du symétrique d'un caractère = 219 code ASCII du caractère. Autrement dit, on a trouvé la règle de calcul du symétrique d'un caractère. Vérifions sur des exemples que cette formule est correcte. Cherchons par calcul le symétrique de la lettre c. Si on utilise la formule qu'on a établie, cela donne : Code ASCII du symétrique de c = 219 code ASCII de c = = 120, 120 est le code ASCII de la lettre x, qui est bien la troisième lettre de l'alphabet en partant de la fin, c'est donc bien le symétrique de c. Cherchons maintenant par calcul le symétrique de la lettre z. Code ASCII du symétrique de z = 219 code ASCII de z = = 97, 97 est le code ASCII de a, qui est bien le symétrique de z. Donc, ça marche, notre super formule est correcte. Si maintenant, c'est le caractère symétrique que l'on veut et non plus son code ASCII, il faut utiliser la fonction chr, qui renvoie le caractère correspondant au code ASCII qui lui a été passé en paramètre, ce qui donne : Symétrique d'un caractère = chr (219 code ASCII du caractère). Et le tour est joué! Vous pouvez constater qu'il est nécessaire de bien réfléchir à la démarche que l'on adopte avant de se lancer dans l'écriture d'un algo, et que parfois, les solutions trouvées sont surprenantes. Ce que l'on vient de faire, c'est trouver des règles générales à partir de cas particuliers, et c'est le travail de tous les informaticiens, de savoir généraliser des règles afin qu'elles deviennent applicables à tous les cas. On peut maintenant écrire l'algo, je vous laisse le soin de le faire seul(e) et de vérifier dans la correction si vous avez réussi à l'écrire. Exercice 16 Écrire l'algorithme du programme dont le scénario est le suivant. Une première question s'affiche : Quel est votre nom? Une fois que l'utilisateur a saisi son nom et validé sa saisie, une seconde question s'affiche : Quel est votre prénom? Lorsque l'utilisateur a saisi son prénom et validé sa saisie, une troisième question s'affiche enfin : Quelle est votre date de naissance (jj/mm/aaaa)? TGPA0107-seq02.indd 44 6/09/07 11:06:04

27 Les différents types de données et leurs opérations de base Une fois que l'utilisateur a saisi sa date de naissance et validé sa saisie, un message s'affiche, indiquant l'initiale du prénom qui a été saisi, suivi d'un point, suivi du nom de famille qui a été saisi, puis de l'âge, calculé à partir de la date de naissance saisie. Exemple : si, suite à la question Quel est votre nom?, l'utilisateur a saisi Lancaster, que suite à la question Quel est votre prénom?, l'utilisateur a saisi Burt, et que suite à la question Quelle est votre date de naissance (jj/mm/aaaa)?, l'utilisateur a saisi 15/08/1923, alors, le message suivant s'affiche : Vous vous appelez B.Lancaster et vous avez 83 ans. Note : en supposant que nous sommes en janvier Une personne née le 15 Août 1923 a donc 83 ans. La difficulté, dans cet exercice, est le calcul de l'âge à partir de la date de naissance saisie. Voici ci-dessous quelques informations et remarques qui vous permettront d'établir la formule de calcul d'un âge à partir d'une date. Si une personne est née le 10 Septembre 1980 et qu'on est le 3 Août 2001, le calcul d'âge doit donner 20 ans, et pas 21, car cette personne n'a pas encore 21 ans. On ne peut donc pas se contenter de faire la différence entre l'année en cours et l'année de naissance. Pour calculer l'âge, on a besoin d'utiliser la fonction anneesysteme qui a pour valeur l'année courante, c'est-à-dire l'année de la date système. La date système est la date à laquelle le système d'exploitation de notre machine pense que l'on est. On utilisera aussi la fonction moissysteme et la fonction joursysteme, qui retournent respectivement le mois et le jour courants, c'est-à-dire le mois et le jour de la date système. Bien entendu, si la date de l'ordinateur sur lequel notre programme s'exécute est fausse, l'âge calculé sera faux. Pour calculer un âge à partir d'une date de naissance saisie, la méthode la plus simple est, en quelque sorte, de faire la différence entre la date courante et la date de naissance. Le problème est que la soustraction entre des dates n'existe pas, nous devons donc l'écrire. Une solution peut consister à : calculer le nombre de jours qui séparent une date repère de notre choix de la date courante ; calculer également le nombre de jours qui séparent cette même date repère de la date de naissance saisie ; effectuer la soustraction entre les deux quantités de jours obtenues. Ceci nous donne l'âge en jours ; convertir l'âge en jours en années. Travaillons sur un exemple. Supposons que la date du jour soit le 03/08/2001. Supposons ensuite que la date de naissance saisie soit 10/09/1980, supposons également que cette date de naissance saisie soit affectée à la variable datenais par l'instruction saisir(datenais). Il faut d'abord découper cette date de naissance afin de récupérer le jour, le mois et l'année de naissance sous forme de nombres et non sous forme de chaînes de caractères, puisque l'on doit effectuer des calculs arithmétiques utilisant le jour, le mois et l'année de la date saisie TGPA0107-seq02.indd 45 6/09/07 11:06:04

28 Séquence 2 Soit journais, un entier contenant le jour de la naissance. Pour obtenir cette valeur, il faut prendre les 2 premiers caractères de la date de naissance saisie (à l'aide de la fonction souschaine), puis convertir ces 2 caractères en leur valeur numérique à l'aide de la fonction val, ce qui donne l'instruction journais val (souschaine (datenais,1,2)). On fait de même pour le mois de naissance que l'on n'a qu'à appeler moisnais ainsi que pour l'année de naissance, qu'on appellera annnais : moisnais val (souschaine (datenais,4,2)) annnais val (souschaine (datenais,7,4)). Dans notre exemple, où DateNais = "10/09/0980", on affecte à journais la valeur de l'expression val(souschaine("10/09/1980",1,2)), c'est-à-dire la valeur de val ("10"), c'est-à-dire la valeur numérique 10. De même, on affecte à moisnais la valeur de l'expression val(souschaine("10/09/1980",4,2)), c'està-dire la valeur de val ("09"), c'est-à-dire la valeur numérique 9. Et enfin, on affecte à annnais la valeur de l'expression val(souschaine ("10/09/1980",7,4)), c'est-à-dire la valeur de val ("1980"), c'est-à-dire le nombre Ensuite, il faut calculer le nombre de jours que cette date de naissance représente à partir d'une date de départ et il faut effectuer le même calcul concernant le date du jour. Pour faire ces calculs, le plus simple est de prendre comme date de référence le 1 er janvier Ainsi, entre cette date, et le 10 Septembre 1980, il s'est écoulé 10 jours + 8 mois complets (8/12 e de 365 jours) années complètes, ce qui fait : /12 * * 365 = ,33 = jours environ. Entre le 1 er Janvier 0000 et la date du jour, que l'on a supposée être le 3/08/2001, il s'est écoulé : 3 + 7/12 * * 365 = ,92 = jours environ. Il faut ensuite faire la différence entre ces 2 grandeurs, ce qui donne l'âge en nombre de jours. Dans notre exemple, l'âge vaut = 7628 jours. Pour obtenir ensuite l'âge en année(s), il reste à diviser l'âge en nombre de jours par 365. Il faut utiliser la division entière, afin d'évacuer les jours ne formant pas une année complète. Dans notre exemple, l'âge vaut 7628 div 365 = 20 ans. Vérifions si notre méthode de calcul fonctionne pour une personne née le 3 Août 1980, en supposant qu'on est le 3 Août 2001 : l'âge en années de cette personne = ((3 + 7/12* *365) (3 + 7/12* *365)) div 365 = 21 ans. Ça marche. Et pour une personne née le 4 Août? Son âge en années = ((3 + 7/12* *365) (4 + 7/12* *365)) div 365 = 20. Ça marche aussi. Le jour, le mois et l'année de la date du jour s'obtiennent par appel des fonctions joursysteme, moissysteme et anneesysteme (qui existent sous des noms différents dans tous les langages de programmation). Comme ce ne sont pas des fonctions de base du langage algorithmique, il faut les décrire dans le lexique. Pour, à l'aide de ces 3 fonctions, calculer le nombre de jours séparant le 1 er Janvier 0000 de la date du jour, il faut utiliser la règle de calcul suivante : joursysteme + (moissysteme 1) * 365/12 + anneesysteme * TGPA0107-seq02.indd 46 6/09/07 11:06:04

29 Les différents types de données et leurs opérations de base Dans le calcul précédent, on utilise : (moissysteme 1) * 365/12 et pas moissysteme*365/12 car ce que l'on compte ici, ce sont les mois complètement écoulés. En Septembre, 8 mois se sont complètement écoulés (les mois de Janvier jusqu'à Août). En Janvier, 0 mois se sont complètement écoulés. Mais comme on a la même démarche pour la date système et la date de naissance, et qu'on fait la différence entre ces 2 grandeurs, les " 1" de la date système et de la date de naissance s'annulent. alement, le calcul de l'âge en années devient : age ç ((joursysteme + moissysteme * 365/12 + anneesysteme * 365) (journais + moisnais * 365/12 + annnais * 365)) div 365 C'est-à-dire, si on retravaille cette formule : age ç (joursysteme journais + (moissysteme moisnais) * 365/12 + (anneesysteme annnais) *365 ) div 365 Seulement il y a un petit problème : on ne peut pas utiliser div car cette opération n'accepte que des opérandes de type entier et le * 365/12 entraîne le fait que l'expression (joursysteme journais + (moissysteme moisnais) *365/12 + (anneesysteme annnais) *365 ) n'est pas de type entier mais de type réel. Qu'à cela ne tienne : on n'a qu'à remplacer div par la division normale et appliquer la fonction ent au résultat (rappel : ent est la fonction qui retourne la partie entière de la grandeur passée en paramètre). Cela nous donne : age ç ent ((joursysteme journais + (moissysteme moisnais) * 365/12 + (anneesysteme annnais) * 365 ) / 365). Mais j'y pense : et les années bissextiles alors? Si on n'en tient pas compte, notre programme ne marchera pas à tous les coups. Pour régler ce problème, on peut remplacer 365 par car la durée moyenne d'une année, années bissextiles comprises est de jours. Ce qui nous donne : age ç ent ((joursysteme journais + (moissysteme moisnais) * 365,25/12 + (anneesysteme annnais) *365,25) / 365,25). Eh bien il ne reste plus qu'à écrire l'algorithme et à aller vérifier ensuite notre solution dans le corrigé TGPA0107-seq02.indd 47 6/09/07 11:06:05

30 Séquence 2 Partie 4 Les booléens et leurs opérations de base NON, ET, OU Un booléen, on l'a déjà expliqué au début de ce cours, est une donnée pouvant prendre seulement 2 valeurs : vrai ou faux. Les booléens sont utilisés dans les algorithmes et les programmes pour faire un traitement plutôt qu'un autre selon leur valeur, ou bien encore pour faire un traitement un certain nombre de fois jusqu'à ce que le booléen change de valeur 1. Exemple de déclaration trouve (booléen, calculé) : un booléen n'est jamais saisi car c'est une donnée utilisée uniquement par le programmeur pour écrire son programme et dont la valeur n'a pas à être visible par l'utilisateur du programme. 2. Les opérations de base sur les données de type booléen 2A. L'affectation Affectation à l'aide d'une valeur constante La plupart du temps, on affecte un booléen à l'aide d'une constante quand on l'initialise. Exemple Lexique trouve (booléen, calculé) Algo Début //Initialisation trouve ç faux Rappel : ceci s'appelle un commentaire. On peut en mettre dans les algos et dans les programmes pour qu'ils soient plus lisibles par nous ou les autres programmeurs. Ce ne sont pas des instructions. Affectation avec une autre variable Exemple Lexique trouve (booléen, calculé) bool (booléen, calculé) Algo Début trouve ç vrai bool ç trouve // Suite à cette instruction, la variable bool // a la même valeur que la variable trouve, // c'est-à-dire que bool = vrai TGPA0107-seq02.indd 48 6/09/07 11:06:05

31 Les différents types de données et leurs opérations de base Affectation par une expression booléenne Une expression booléenne, c'est une expression dont la valeur ne peut être que vraie ou fausse et qui peut contenir des opérateurs de comparaison (<, >, =, <>, etc ) et des opérateurs booléens (non, et, ou). Exemples d'expressions booléennes (a,b et c étant des booléens, x et y étant 2 nombres) : y > z (cette expression est vraie si y est plus grand que z, elle est fausse si y n'est pas plus grand que z, c'est à dire si y est inférieur ou égal à z) ; non b (cette expression est vraie si b est faux) ; x + y <= 4 (cette expression est vraie si x + y est inférieur ou égal à 4) ; (a ou b) et c ; non (a et b) Maintenant qu'on sait ce qu'est une expression booléenne, occupons nous de l'affectation d'une valeur à un booléen à l'aide d'une expression booléenne. De même que l'on peut affecter à un nombre le résultat d'un calcul ou d'une expression arithmétique (par exemple x (y + 4) * 2), on peut affecter à un booléen le résultat d'un calcul ou d'une expression booléenne. Exemple : b (y > z), b est un booléen, y et z sont des nombres. Dans cet exemple d'affectation, si y est supérieur à z, alors, l'expression booléenne y > z est vraie. Dans le cas où y est supérieur à z, après exécution de l'instruction d'affectation b (y > z), b vaut vrai, sinon, il vaut faux. Voici d'autres exemples d'affectations que je vais expliquer dans les 3 paragraphes suivants, qui traitent des opérations booléennes non, et et ou : b non a, b a ou c, c a et b, a (x < y) ou b. 2B. Les opérations booléennes non, et et ou Tout d'abord, il faut préciser que ces 3 opérations sont spécifiques aux données de type booléen (on ne peut pas les utiliser sur des nombres ou des chaînes de caractères). Il faut également préciser qu'on ne peut pas utiliser d'opérateurs arithmétiques pour effectuer des calculs sur des booléens. Exemple : soit l'expression booléenne suivante non (a et (b ou c) ou ( (y + 4) = x), elle contient x et y qui sont des nombres, et pourtant, il s'agit bien d'une expression booléenne. Décortiquons-la. Résultat numérique } (a et (b ou c) ou ( (y + 4) = x)) } } } Résultat booléen Résultat booléen (vrai si (y + 4) = x) Résultat booléen TGPA0107-seq02.indd 49 6/09/07 11:06:05

32 Séquence 2 2B1. L'opération non Soit bool un booléen, Si bool est vrai, alors le booléen non bool est faux. Si bool est faux, alors le booléen non bool est vrai. C'est ce que traduit le tableau suivant, appelé table de vérité, a étant une variable de type booléen : Table du non Valeur de a Valeur de non a vrai faux faux vrai L'opération non inverse la valeur du booléen devant lequel elle est placée. Exemples : non b, non (a et b ou (non c)), etc. O Une règle importante : quelle que soit la valeur du booléen b, l'expression booléenne non (non b) a la même valeur que b lui-même. Cette règle sert, par exemple, à simplifier les calculs que l'on effectue sur des expressions booléennes dans le but de savoir si elles valent vrai ou faux. 2B2. L'opération ou Voici la table de vérité de l'opération ou, où a et b sont deux booléens. Table du ou a b a ou b vrai vrai vrai vrai faux vrai faux vrai vrai faux faux faux Pour exemple, la troisième ligne de ce tableau signifie que si a vaut faux et b vaut vrai, alors l'expression booléenne a ou b vaut vrai. O Règles importantes vrai est l'élément absorbant de cette opération, c'est-à-dire que quelle que soit la valeur d'un booléen b, l'expression booléenne b ou vrai vaut toujours vrai. faux est l'élément neutre de cette opération, c'est-à-dire que quelle que soit la valeur d'un booléen b, l'expression booléenne b ou faux a toujours la même valeur que b lui-même. Quel que soit le booléen b, l'expression booléenne b ou b a toujours la même valeur que b. Quel que soit le booléen b, l'expression booléenne b ou non b vaut toujours vrai. Ces règles nous permettent de simplifier certaines expressions booléennes, ou de calculer rapidement leur valeur de vérité TGPA0107-seq02.indd 50 6/09/07 11:06:05

33 Les différents types de données et leurs opérations de base Exemples soit le booléen b = aujourd'hui, on est mardi, b peut être vrai ou faux, c'est donc bien un booléen (si on est mardi, b est vrai, sinon, il est faux). b ou b = aujourd'hui on est mardi ou mardi = aujourd'hui on est mardi = b, si b est vrai, b ou b est vrai, si b est faux, b ou b est faux. b ou non b = aujourd'hui, on est mardi ou bien on n'est pas mardi = vrai, car il y en a forcément un des deux (soit b, soit non b) qui est vrai (soit on est mardi, soit on n'est pas mardi : ceci est toujours vrai). Étonnant, non? Pour résumer, on peut dire qu'une expression booléenne reliant deux booléens par l'opération ou est vraie si l'un, l'autre ou les deux booléens qu'elle relie sont vrais. 2B3. L'opération et Voici tout d'abord la table de vérité de l'opération booléenne et : O Table du et a b a et b vrai vrai vrai vrai faux faux faux vrai faux faux faux faux Règles importantes La valeur booléenne faux est l'élément absorbant de cette opération, c'est-à-dire que quelle que soit la valeur d'un booléen b, l'expression booléenne b et faux vaut faux, La valeur booléenne vrai est l'élément neutre de cette opération, c'est-à-dire que quelle que soit la valeur d'un booléen b, l'expression booléenne b et vrai a la même valeur que b (si b vaut vrai, alors l'expression booléenne b et vrai vaut vrai, sinon, elle vaut faux). Quel que soit le booléen b, l'expression booléenne b et b vaut b (c'est-à-dire quel'expression b et b a la même valeur de vérité que b). Quel que soit le booléen b, l'expression booléenne b et b vaut b. Quel que soit le booléen b, l'expression booléenne b et non b vaut toujours faux (en effet, il y a toujours soit b, soit non b qui est faux, par conséquent, l'expression est forcément fausse). Exemples : soit le booléen b = il fait beau, b peut être vrai ou faux(b sera vrai s'il fait beau, il sera faux s'il ne fait pas beau), c'est donc bien un booléen. b et b = il fait beau et il fait beau = il fait beau, si b est vrai, alors b et b est vrai, b et non b = il fait beau et il ne fait pas beau = faux, car il y en a forcément un des deux (soit b, soit non b) qui est faux. Stupéfiant, n'est-ce pas? Pour résumer, on peut dire qu'une expression booléenne reliant deux booléens par l'opération et est vraie si l'un et l'autre des deux booléens qu'elle relie sont vrais. 2B4. Le mélange des 3 opérations non, et et ou Tout comme on mélange les opérations arithmétiques, on peut mélanger les opérations booléennes dans une expression booléenne TGPA0107-seq02.indd 51 6/09/07 11:06:06

34 Séquence 2 Exemple : on peut trouver des expressions booléennes du type non (a ou b), (a ou b) et (b ou c) etc Comme dans tout système d'opérations, il existe un ordre de priorité entre ces 3 opérations booléennes : non est la plus prioritaire, ensuite c'est et puis ou. Comme pour les opérations arithmétiques, on peut, à l'aide de parenthèses, modifier cet ordre de priorités par défaut. Il existe également des règles qui régissent le mélange des 3 opérations : dans ces règles de calcul, le non peut se comparer au signe (le moins unaire), le ou peut se comparer à l'addition et le et peut se comparer à la multiplication. Voici les 4 principales règles (dans ces règles, a et b sont deux booléens) : non (a ou b) = non a et non b Cette égalité signifie que l'expression booléenne non (a ou b) est équivalente, c'est-à-dire a la même valeur de vérité que l'expression booléenne non a et non b. non (a et b) = non a ou non b a et (b ou c) = a et b ou a et c Il s'agit ici de la règle de distributivité de l'opération et sur l'opération ou. a ou (b et c) = a ou b et a ou c Il s'agit ici de la distributivité de ou sur et. Dans la table de vérité suivante, vous pourrez trouver un récapitulatif des valeurs de vérités des différentes expressions booléennes vues (dans les cases de ce tableau, j'ai inscrit V pour vrai et F pour faux). a b c non a non b non c a ou b non (a ou b) c'est-à-dire non a et non b a et b non (a et b) c'est-à-dire non a ou non b a et (b ou c) c'est-à-dire a et b ou a et c V V V F F F V F V F V V V F F F V V F V F V V F V F V F V F F V V V F F F V V V F F V F F V V V F F V F F V F F V F V F V V F F V F F F V V V F F V F V F F F F V V V F V F V F Exemple : soient les 3 booléens suivants a = je suis blonde, a peut être vrai ou faux. Il sera vrai si je suis effectivement blonde et faux sinon, c'est donc bien un booléen. b = j'ai les yeux bleus, de même que a, b peut être vrai ou faux. c = je m'appelle Gudule, c peut être vrai ou faux TGPA0107-seq02.indd 52 6/09/07 11:06:06

35 Les différents types de données et leurs opérations de base Pour mieux comprendre le sens de ces opérations booléennes, appliquons à ces 3 booléens les différentes règles de calcul vues dans ce paragraphe sur les booléens. Accrochezvous, ça peut paraître parfois un peu tiré par les cheveux (il paraît que maintenant, au lieu de «tiré par les cheveux», il faut dire «capillo-tracté») : non a = je ne suis pas blonde, non a sera vrai si je ne suis effectivement pas blonde non b = je n'ai pas les yeux bleus non c = je ne m'appelle pas Gudule a ou b = je suis blonde ou j'ai les yeux bleus, a ou b sera vrai si je suis effectivement blonde ou bien si j'ai effectivement les yeux bleus ou bien si je suis blonde aux yeux bleus. Bon, jusque-là, c'était assez simple, maintenant, ça se complique un peu non (a ou b) = je ne suis pas (blonde ou yeux bleus) = je n'ai pas l'une ou l'autre de ces caractéristiques = je n'ai ni l'une ni l'autre de ces caractéristiques = je ne suis ni blonde, ni aux yeux bleus = je ne suis pas blonde et je n'ai pas les yeux bleus = non a et non b. Magique! On continue a et b = je suis blonde et j'ai les yeux bleus, a et b sera vrai si je suis une blonde aux yeux bleus. non (a et b) = je ne suis pas une blonde aux yeux bleus = je n'ai pas ces 2 caractéristiques en même temps = il y a une des 2 caractéristiques (ou les 2) que je n'ai pas = ou bien je ne suis pas blonde, ou bien je n'ai pas les yeux bleus ou bien je ne suis ni blonde ni aux yeux bleus = non a ou non b. Celle qui suit est facile : a et (b ou c) = je suis blonde et (j'ai les yeux bleus ou je m'appelle Gudule) = je suis blonde et j'ai les yeux bleus ou bien je suis blonde et je m'appelle Gudule = a et b ou a et c. Voilà. Et maintenant on fait un petit exo. Exercice 17 Si je vous dis que je suis brune, que j'ai les yeux bleus et que je m'appelle Frédérique, essayez, en guise d'exercice, de trouver la valeur de vérité des expressions booléennes de la table de vérité suivante, sachant que : a = je suis blonde, b = j'ai les yeux bleus, c = je m'appelle Gudule. a b c non a non b non c a ou b non(a ou b) c'est-à-dire non a et non b a et b non(a et b) c'est-à-dire non a ou non b c et (b ou a) c'est-à-dire c et b ou c et a Exemple : ici, a est faux, car a signifie «je suis blonde» et que je ne suis pas blonde TGPA0107-seq02.indd 53 6/09/07 11:06:06

36 Séquence 2 2B5. Lois d'absorption Avec les booléens, il existe des règles qui permettent de simplifier les expressions booléennes, certains termes de l'expression en absorbant d'autres. Vous verrez cela plus en détail dans le cadre de votre cours de mathématiques, je vous fais donc grâce des démonstrations. Ces lois se retrouvent à l'aide des règles de calcul du paragraphe précédent. Retenez simplement qu'un facteur plus court absorbe un facteur plus long qui le contient. Si a et b sont 2 booléens, voici ces 4 lois d'absorption a ou (a et b) = a Ici a absorbe a et b. a et (a ou b) = a, a absorbe a ou b a ou (non a et b) = a ou b a et (non a ou b) = a et b. En guise d'entraînement, testez le sens de ces 4 lois à l'aide des booléens a = il pleut, b = il fait chaud. 2B6. Le mélange des opérations booléennes (non, et, ou) et des opérateurs de comparaison (<, >, =, <>, <=,>=) On peut également mélanger des opérations booléennes et des opérations de comparaison, et pour ce mélange là aussi, il y a des règles, que l'on va voir à l'aide d'exemples. Il est utile, dans les algos et les programmes, de bien maîtriser ces règles, afin notamment d'être bien au clair sur les conditions de lancement de certains traitements (on le verra au chapitre suivant dont le sujet est les traitements conditionnels). Soient nb1, nb2 et nb3, 3 nombres. On peut écrire par exemple : non (nb1 < nb2) = nb1 >= nb2 Cette expression booléenne signifie que l'expression booléenne non (nb1 < nb2) a la même valeur de vérité que l'expression booléenne nb1 >= nb2. On peut écrire cela car l'opération de comparaison >= est l'opération complémentaire de l'opération de comparaison <. Donc, dire que nb1 n'est pas strictement inférieur à nb2 est équivalent à dire que nb1 est supérieur ou égal à nb2. On peut écrire aussi : non (nb1 + nb2 = 4) = nb1 + nb2 <> 4, c'est-à-dire que si dans un algo on écrit "si non(nb1 + nb2) = 4 ", cela revient au même que si on avait écrit : "si nb1 + nb2 <> 4 ", Un autre exemple encore : non (nb2 < nb1 et nb2 < nb3) est équivalent à nb2 >= nb1 ou nb2 >= nb3, car quels que soient 2 booléens a et b, non (a et b) = non a ou non b, et aussi car non (nb2 < nb1) = nb2 >= nb1. Pour résumer, on peut dire que l'opérateur non placé devant une opération de comparaison donne pour résultat une opération de comparaison utilisant le complémentaire du signe de comparaison de l'opération initiale TGPA0107-seq02.indd 54 6/09/07 11:06:07

37 Les différents types de données et leurs opérations de base Nous allons rôder tout ça avec une petite série d'exercices. Ils seront très sommaires car l'utilisation de booléens ne prend toute sa dimension qu'à partir de la séquence suivante, qui traite des conditions permettant d'exécuter ou non des instructions. Exercice 18 Soient 4 booléens a, b, c, d. Calculez la négation des expressions booléennes suivantes : 1. non (a ou b) 8. a ou (a et b) 2. non (a et b) 9. (a ou a) et (a ou b) 3. non a et non b 10. (a ou b) et (c ou d) 4. non a ou non b 11. (a et c) ou (a et d) ou (b et c) ou (b et d) 5. a ou a 12. (a et b) ou (c et d) 6. a et (a ou b) 13. (a ou c) et (a ou d) et (b ou c) et (b ou d) 7. (a et a) ou (a et b) Exemple : la négation de a et (a ou b) est non a car non (a et (a ou b)) = non a ou non(a ou b) = non a ou non a et non b = non a. Exercice 19 Soient a et c deux booléens, soient également 3 nombres x, y et z. Calculez la négation des expressions booléennes suivantes : 1. a ou (x < y) 4. x > y et z <> 0 2. c ou (x > y ou x = y) 5. y = 4 ou (y + 2 = x et z <> 5) 3. c ou (z > y ou z = y) Exercice 20 Reprenez toutes les expressions booléennes des 2 exercices précédents et déterminez leur valeur de vérité en supposant que les 4 booléens et les 3 nombres ont les valeurs suivantes : a = faux, b = faux, c = vrai et d = vrai, x = 2, z = 3 et y = 3. Vous pourrez remarquer que l'on n'a pas forcément besoin de simplifier une expression booléenne pour calculer sa valeur de vérité mais qu'il est plus simple de manipuler des expressions courtes, dont on voit plus facilement la valeur de vérité. Bien entendu, la valeur de vérité des négations est l'inverse de la valeur de vérité des expressions (si l'expression est vraie, sa négation est fausse et inversement). Exemple : non (a ou b) = vrai car a étant faux et b étant faux, a ou b est faux, donc non(a ou b) est vrai. Bon, suite à cette séquence, il y a un TP, Alors à bientôt TGPA0107-seq02.indd 55 6/09/07 11:06:07

38 83989TGPA0107-seq02.indd 56 6/09/07 11:06:07

39 Travaux pratiques 2 Les différents types de données et leurs opérations de base Ce TP va tout simplement consister en la traduction à l'aide de Windev des algorithmes vus au cours de la séquence 2, avec une aide pour la traduction de chaque algorithme, bien sûr. Avant chaque série d'exercices, nous allons reprendre le plan de la séquence 2 et je vous donnerai des indications et des consignes au fur et à mesure du déroulement du plan du cours. Les consignes sont numérotées afin que vous n'en passiez aucune. Consigne 1 : commencez par créer un nouveau projet dans Windev, donnez lui un nom en lien avec la séquence 2, comme par exemple projseq2, ou bien TPSequence2 etc. Rappel : pour créer un nouveau projet, dans Windev, aller dans l'option de menu : Fichier Nouveau, puis choisissez de créer un nouveau projet. Il s'agit d'un exécutable. Pour vous faire plaisir et tester tous les styles graphiques proposés dans Windev, choisissez un thème de gabarit qui vous plaît. Indiquez que le projet ne contiendra pas d'analyse. Enfin, pour terminer la création du projet, indiquez que vous voulez créer une nouvelle fenêtre vierge. Nous allons ensuite aller vérifier à l'extérieur de Windev que notre nouveau dossier a bien été créé. Pour ma part, j'ai installé Windev 10 Express sur l'unité logique E : de ma machine. Windev a créé tout seul un répertoire (on dit aussi un dossier) sur E :, qu'il a appelé Mes Projets, et à chaque fois que je crée un nouveau projet, il m'est proposé de l'enregistrer dans ce répertoire (je pourrais tout à fait choisir un autre emplacement pour enregistrer mon projet, mais l'emplacement proposé me convient tout à fait). Pour voir ce qu'il en est de mon nouveau projet, je vais donc dans le dossier Mes Projets, regarder ce qui s'y trouve. Faites-le vous aussi. Je constate que j'ai effectivement un dossier par projet créé. J'ouvre le dossier EXPRESS_TP TGPA0107-seq02.indd 57 6/09/07 11:06:07

40 Travaux pratiques 2 On nous indique ici le rôle des différents fichiers générés dès la création du nouveau projet. Pour plus d'information sur chaque extension de fichier, vous pouvez consulter l'aide de Windev (en allant dans le menu?, en choisissant Rechercher et en tapant Extension des fichiers créés par Windev 10. Consigne 2 : je voudrais tout de suite aborder un point qui pose souvent problème aux débutants, c'est la déclaration des données dans un environnement de développement graphique comme Windev. Il faut bien comprendre que lorsque dans le lexique d'un algo on déclare une donnée, alors, lorsqu'on traduit notre algorithme en une fenêtre, on a deux solutions : soit on déclare la donnée dans le code source ; soit on crée, sur notre fenêtre, un objet graphique qui correspond à cette donnée. Mais en aucun cas, on ne fait les 2. Exemple : pour se persuader de cela, je vous propose d'écrire un programme tout simple, correspondant à l'algorithme suivant. Faites les manipulations que je vous indique cidessous. Lexique monnombre(entier, calculé : donné à afficher Algo Début monnombre 4 Afficher (monnombre) Dans Windev, j'utilise la fenêtre vierge créée lors de la création du projet. Je l'appelle fenconsigne TGPA0107-seq02.indd 58 6/09/07 11:06:08

41 Travaux pratiques 2 Sur cette fenêtre, posez un champ de saisie et appelez le saisienombre, choisissez son type Numérique et un masque de saisie sans virgule : Posez également un bouton que vous appellerez boutonafficher et auquel vous donnerez &Afficher comme libellé (ce qui donnera Afficher) : Notre fenêtre a donc l'allure suivante : Le rôle de cette fenêtre est d'afficher 4 dans la zone de saisie quand l'utilisateur clique sur le bouton Afficher. Il faut donc traduire notre algo dans l'événement clic sur boutonafficher. Je fais (et vous aussi) un clic droit le bouton Afficher, je choisis Code puis, en dessous de clic sur boutonafficher, je tape saisienombre = TGPA0107-seq02.indd 59 6/09/07 11:06:08

42 Travaux pratiques 2 Voilà. Il ne reste plus qu'à exécuter la fenêtre pour se rendre compte que ça marche : Avant le clic sur Afficher Après le clic sur Afficher Une petite manip au passage : maintenant, au lieu d'exécuter la fenêtre, exécutez le projet, en allant dans Projet, puis dans Mode test, et en choisissant Tester le projet, ou en cliquant sur l'icône (icône Lancer le test du projet) de la barre d'outils. Tiens, l'application ne se lance pas, on nous demande de choisir la première fenêtre du projet. Nous n'avons aucun mal à choisir la première fenêtre de notre projet, puisque nous n'en avons créé qu'une, je choisis donc la fenêtre de la consigne 2. Je vous explique rapidement : jusqu'à présent, nous avons testé la fenêtre, mais pas l'application (c'est-à-dire le programme exécutable). Pour créer correctement le programme exécutable, Windev a besoin de savoir laquelle, parmi les fenêtres du projet, doit être ouverte au lancement de l'application (les autres fenêtres du projet seront accessibles depuis cette première fenêtre). Cette manip, vous l'avez déjà effectuée en faisant le manuel d'autoformation. Maintenant, on va faire exprès de faire une erreur : je voudrais que vous déclariez saisienombre dans l'événement Clic sur boutonafficher, comme ci-dessous : Et maintenant, exécutez à nouveau votre fenêtre : vous avez vu? Vous pouvez cliquer 50 fois sur le bouton Afficher, il ne se passe rien. Enfin, rien en apparence. Ce qui se passe en fait, c'est que pour Windev, vous avez créé 2 objets portant le même nom : un nombre entier saisienombre et un champ de saisie saisienombre. Les instructions du w-langage (le langage de programmation de Windev) s'occupent en priorité des objets qui sont les plus proches d'elles. Notre instruction saisienombre = 4 affecte la valeur 4 à l'entier saisienombre que l'on a déclaré, car cet entier est plus proche d'elle que le champ de saisie saisienombre TGPA0107-seq02.indd 60 6/09/07 11:06:09

43 Travaux pratiques 2 Pour vous persuader que c'est bien l'entier saisienombre qui a pris la valeur 4, nous allons utiliser le debugger de Windev. Un debugger, c'est un outil qui aide à corriger les bugs, c'està-dire les erreurs de programmation (francisé, le terme bug s'écrit bogue). Pour ce faire allez dans le menu Projet, choisir Mode test puis Tracer le projet. Tracer un programme signifie l'exécuter instruction par instruction pour observer ses réactions. Quand on choisit cette commande, on voit ça (c'est la fenêtre du Débogueur de Windev) : Pour exécuter notre application instruction par instruction (on dit pas à pas), dans Windev, il faut cliquer sur cette icône. Cliquez sur l'icône avec la flèche que je vous ai indiquée dans la copie d'écran ci-dessus. Vous constatez que le debugger passe par les différentes fonctions qui sont exécutées au démarrage du projet (nous, on n'a pas mis d'instruction dans ces fonctions, qui sont donc vide). Cliquez sur cette flèche jusqu'à ce que la première fenêtre du projet s'ouvre (et là, ça tombe bien, car la première fenêtre du projet, c'est notre fenêtre). Si on clique sur le bouton Afficher de la fenêtre, la fenêtre qui figure à la page suivante s'affiche TGPA0107-seq02.indd 61 6/09/07 11:06:09

44 Travaux pratiques 2 Ici, comme on a cliqué sur le bouton, l'exécution pas à pas vient d'entrer dans la procédure événementielle Clic sur boutonajouter Ici, le debugger a repéré que dans la procédure Clic sur boutonajouter, une variable de type entier s'appelant saisienombre a été déclarée. Le debugger s'apprête donc à évaluer à tout instant la valeur de cette variable. Si vous cliquez à nouveau sur l'icône avec la flèche, vous voyez la flèche jaune descendre à chaque fois d'une ligne dans les instructions. Lorsque la flèche jaune quitte la ligne d'instruction saisienombre = 4, vou spouvez constater que le debugger indique bien 4 comme valeur pour saisienombre TGPA0107-seq02.indd 62 6/09/07 11:06:10

45 Travaux pratiques 2 J'ai cliqué sur cette flèche pour faire avancer cette flèche et La valeur de la variable saisienombre a été mise à jour. Pourtant, si vous réaffichez la fenêtre en cours d'exécution, la zone de saisie Mon nombre est toujours désespérément vide. Ceci prouve bien que ce qui a changé de valeur, c'est la variable saisienombre, et non la zone de saisie saisienombre. Si maintenant, vous enlevez cette déclaration saisienombre est un entier et que vous la mettez par exemple dans l'événement Initialisation de fenconsigne2 (En faisant un clic droit sur la fenêtre, puis en choisissant Code dans le menu contextuel) alors votre fenêtre fonctionne à nouveau car Windev considère que l'entier saisienombre que vous avez déclaré dans le code d'initialisation de la fenêtre est plus éloigné que le champ de saisie saisienombre que vous avez posé sur la fenêtre TGPA0107-seq02.indd 63 6/09/07 11:06:10

46 Travaux pratiques 2 Vous découvrirez petit à petit par expérience comment Windev gère ces histoires d'éloignement et de rapprochement, en programmation, cela s'appelle les règles de portée. Ce qu'il faut principalement retenir c'est : qu'on ne doit jamais donner le même nom à 2 objets différents ; que quand on traduit un algorithme en programme, les données du lexique deviennent soit une donnée que l'on déclare, soit un objet graphique que l'on pose sur une fenêtre, mais en aucun cas les 2 en même temps. Ce qu'on a fait là avec Windev, on ne peut pas le faire avec d'autres environnements de développement (Delphi, par exemple, ne permettrait jamais que l'on ait un entier déclaré et un champ de saisie portant le même nom). Cela signifie que Windev est plus permissif que d'autres produits, ce qui nécessite que l'on soit plus attentif. Consigne 3 : dans le dossier ".cpl", un nouveau fichier portant le nom de la fenêtre et l'extension ".wbw". Windows nous dit que c'est un fichier de compilation. Vous verrez plus tard ce qu'est la compilation. Retenez simplement que c'est une opération qui transforme les lignes d'instructions que l'on tape en commandes compréhensibles par le processeur, même si ça n'est pas tout à fait exact. Dans le dossier ".cpl", un nouveau fichier portant le nom de la fenêtre et l'extension ".wbw". Windows nous dit que c'est un fichier de compilation. Vous verrez plus tard ce qu'est la compilation. Retenez simplement que c'est une opération qui transforme les lignes d'instructions que l'on tape en commandes compréhensibles par le processeur, même si ça n'est pas tout à fait exact. Dans le dossier du projet, on a 2 nouveaux fichiers portant le nom de la fenêtre et l'extension.wdw. Celui sans le $ devant, c'est la fenêtre elle-même. Dans les autres répertoires, vous avez aussi d'autres fichiers associés à la fenêtres, portant le nom de la fenêtre mais portant d'autres extensions. Maintenant, on attaque la traduction des algorithmes du cours à l'aide de Windev TGPA0107-seq02.indd 64 6/09/07 11:06:11

47 Travaux pratiques 2 Partie 1 Les 3 familles de données et l'opération d'affectation 1. Les trois familles de données Selon les langages de programmation, il existe plus ou moins de types de données issus des 3 types de base que sont les nombres, les caractères et les booléens. Consigne 4 : pour connaître quels types de données sont proposés par Windev, allez consulter attentivement la rubrique d'aide Types de données simples. Servez-vous également du guide d'autoformation (à partir de la page 70). Dans cette rubrique d'aide, sont indiqués uniquement les types de variables que l'on déclare, et pas les types des objets graphiques que l'on pose sur les fenêtres. Voici quelques règles concernant la déclaration de données et les types dans Windev : Une variable se distingue par son nom et par son type. Le type de la variable détermine les valeurs que la variable peut prendre, son encombrement mémoire et les opérations dont elle peut faire l'objet. Les noms des types de données sont des mots réservés. Ca, c'est important : on ne peut pas appeler une variable réel ou booléen par exemple. Le type logique booléen peut prendre pour valeur vrai (différent de 0) ou faux (égal à 0). Pour tester un booléen, il faut le tester de la façon suivante : si varbooleen, plutôt que de la façon suivante si varbooleen = vrai. Le type booléen de Windev correspond tout à fait au type booléen que nous utilisons en algo. Tous les types différents d'entiers disponibles dans Windev correspondent au type entier de l'algo. Ce qui les différencie, c'est leur capacité et le fait qu'ils aient un signe ou non. À vous de choisir le bon type en fonction de l'utilisation que vous voulez faire de la variable. Pour les réels, c'est comme pour les entiers : les types différents de réels disponibles dans Windev correspondent au type réel de l'algo. Ce qui différencie ces types de réels, c'est leur capacité. À vous de choisir le bon type en fonction de l'utilisation que vous voulez faire de la variable. Les types monétaires de windev n'existent pas en algorithmique (parce qu'ils n'existent pas dans tous les langages et que l'algorithmique a vocation à être en quelque sorte universel). Ces types sont des variantes du type réel de l'algo. Les types suivants correspondent au type caractère et chaîne de l'algo. Type caractere : caractère codé sur un octet Type chaine fixe sur : chaîne de taille fixe. La chaîne est complétée avec des espaces si nécessaire. Ce type particulier de chaîne de caractère correspond à une déclaration de la forme chaîne[longueur de la chaîne] en algo. Type chaine : chaîne de taille dynamique. Ce type de chaîne est propre au WLangage. Avec ce type de chaîne, il n'est pas nécessaire de déclarer la longueur. Celle-ci peut varier de façon libre lors de l'utilisation de la variable TGPA0107-seq02.indd 65 6/09/07 11:06:11

48 Travaux pratiques 2 Remarque : les chaînes chaine fixe sur existent pour des raisons de compatibilité avec les langages de programmation tels que Turbo Pascal Windows, C, Visual Basic Windows. Il est conseillé d'utiliser le type chaine (pour lequel il n'est pas nécessaire de déclarer la taille de la chaîne) plutôt que les autres types. En w-langage, tous les types de données peuvent être mis au pluriel. Par exemple entier ou entiers, réel ou réels,... Ca c'est chouette : on peut par exemple écrire comme déclaration x est un entier mais on peut aussi écrire x, y sont des entiers. Avec le w-langage, après avoir été déclarée, si la variable n'est pas encore initialisée, elle est à "" (chaîne vide), si elle d'un des types chaîne vus ci-dessus. Cette variable est à 0 (zéro), si elle est d'un type numérique. Nous, comme on apprend seulement à programmer, on les fera nos initialisations, même si Windev le fait, histoire de ne pas prendre l'habitude d'oublier d'initialiser les variables (car certains autres langages n'initialisent pas les variables). Lors du test d'une fenêtre ou d'un projet, si une variable est affectée avec une valeur hors de ses bornes, un message d'erreur le signale. En exécution du programme, aucun message d'erreur ne signale le dépassement de capacité. Ca, ça veut dire qu'il faut bien faire attention aux fourchettes de valeurs que peut prendre une variable et que pour être sûr que ça passe à l'exécution, il vaut mieux prévoir trop grand (exemple : entier long) que trop petit (exemple : entier court). Une petite remarque au passage : prenez l'habitude (dans les autres logiciels de développements aussi, d'ailleurs) de ne pas mettre d'accents sur quoi que ce soit. De toute façon, dans la plupart des cas, les logiciels de programmation ne vous laissent pas le faire, alors Maintenant, en ce qui concerne le type des objets graphiques que l'on pose sur les fenêtres, vous avez déjà pu remarquer que seuls les objets pouvant contenir des valeurs sont concernés : champs de saisie, listes etc. et que Windev propose un choix lorsqu'on pose l'objet sur la fenêtre. On peut en effet choisir s'il va contenir des nombres, des caractères et s'il y aura des virgules, des signes. Exemple : choix possibles concernant le type de ce que contient un champ de saisie TGPA0107-seq02.indd 66 6/09/07 11:06:11

49 Travaux pratiques 2 2. Arrêtons-nous sur l'opération d'affectation (!) avant d'aller plus loin En Windev, l'opération d'affectation se traduit par le symbole =. 2A. Les différents modes d'affectation Je vous propose de reprendre les exemples d'affectations que j'avais donnés à cet endroit dans le cours et de les tester, de 2 manières : en déclarant les variables et en créant des objets graphiques. Les variables qui, dans les lexiques, ont été déclarées comme étant saisies (mot réservé saisi), deviennent forcément des champs de saisie. Les variables calculées peuvent devenir des objets graphiques s'il est utile que l'utilisateur les voit ou les modifie. Elles peuvent aussi devenir des données déclarées, invisibles à l'utilisateur, utilisées uniquement en interne pour notre programme. Pour l'instant, notre projet contient uniquement la fenêtre de la consigne 2. Consigne 5 : créez une fenêtre que vous appellerez par exemple fenaffec et sur laquelle vous poserez 2 champs de saisie : un que vous appellerez saisienombre, type : numérique, masque de saisie de la forme 9999 ; l'autre que vous appellerez saisiemot, type texte. Posez également un bouton OK sur la fenêtre, nous écrirons les instructions d'affectations dans l'événement clic de ce bouton. Voici, page suivante, les affectations que je souhaite vous faire tester et les consignes correspondantes TGPA0107-seq02.indd 67 6/09/07 11:06:12

50 Travaux pratiques 2 Affectations à tester Affectation par saisie par affectation à l'aide d'une valeur constante par affectation avec une autre variable par calcul Lexique de l'exemple Algo Consigne Windev correspondante saisienombre (entier, saisi) saisiemot (chaîne, saisi) saisienombre (entier, calculé) saisiemot (chaîne, calculé) saisienombre (entier, saisi) saisiemot (chaîne[5], saisi) leréel (réel, calculé) lautremot(chaîne[6], calculé) saisienombre (entier, saisi) saisiemot (chaîne[5], saisi) saisieréel (réel, calculé) saisieautremot (chaîne[6], calculé) Début Saisir (saisienombre) Saisir (saisiemot) Début saisienombre! 4 saisiemot! "Toto52" Début Saisir (saisienombre) Saisir (saisiemot) leréel! saisienombre lautremot! saisiemot fin Début Saisir (saisienombre) Saisir (saisiemot) saisieréel! saisienombre + 5 saisienombre! 7 saisieautremot! saisiemot fin En Windev, il n'y a aucune instruction à écrire à partir du moment où on a posé un champ de saisie pour saisienombre et un champ de saisie pour saisiemot. Dans l'événement clic du bouton, écrire : saisienombre = 4 saisiemot = "Toto52" Exécuter la fenêtre. Modifier la propriété "Taille maxi de saisie" du champ de saisie "saisiemot" : Mettez 5 comme taille maxi de saisie (voir explication ci-dessous si vous ne savez pas comment faire). Dans l'événement clic du bouton, écrire : //Déclaration : leréel est un réel lautremot est une chaîne //Instructions : saisiemot = "toto52" lereel = saisienombre lautremot = saisiemot //Affichage : Info("LeRéel vaut ", lereel) Info("LautreMot vaut ", lautremot) Exécuter la fenêtre, saisir des valeurs dans saisienombre et dans saisiemot et cliquer sur le bouton pour déclencher les traitements. Poser sur la fenêtre 2 nouveaux champs de saisie, un s'appelant saisiereel (sans accent), de type numérique, l'autre s'appelant saisieautremot de type texte, taille maxi de saisie = 6. Dans l'événement "clic" du bouton, écrire : saisiereel = saisienombre + 5 saisienombre = 7 saisieautremot = saisiemot Exécuter la fenêtre, saisir des valeurs dans saisienombre et dans saisiemot et cliquer sur le bouton TGPA0107-seq02.indd 68 6/09/07 11:06:12

51 Travaux pratiques 2 Rappel : pour modifier la taille maxi d'un champ de saisie texte, dans la description du champ, renseignez la zone Taille de saisie. Un autre rappel au passage : parfois, on veut utiliser les champs de saisie uniquement pour afficher des informations et il ne faut pas que l'utilisateur puisse saisir des informations dans ces champs, ni en modifier leur contenu. Pour faire ça, depuis la fenêtre Description du champ de saisie, il faut cliquer sur l'icône IHM, et dans la zone Etat initial, choisir l'option Affichage seul. 2B. La compatibilité entre types Nous allons tester ici les réactions de Windev lorsque nos instructions contiennent des affectations incorrectes. Nous reprenons donc les exemples d'affectations incorrectes du cours et nous faisons des manips de manière à ce qu'elles se produisent dans Windev. Consigne 6 : reprenez la fenêtre fenaffec et essayez déjà de saisir par exemple aaaa dans le champ saisienombre. Vous pouvez constater que c'est impossible car lorsqu'on crée des champs de saisie, les choix que nous faisons concernant le type du champ (numérique, texte ) empêchent l'utilisateur de faire de mauvaises saisies. Donc, s'il y a tentative d' affectation incorrecte à un champ de saisie, c'est forcément par des instructions. C'est donc ce que l'on va essayer de faire. Premier test Lexique Algo Consigne Windev correspondante saisienombre (entier,saisi) Début Afficher ("Saisissez un nombre entier") Saisir (saisienombre) Dans l'événement clic du bouton, écrire l'instruction : saisienombre = 54j Exécuter la fenêtre. Vous constatez que lorsqu'on veut exécuter la fenêtre, le message suivant s'affiche : Bon, moi, je décide d'insister lourdement et je clique sur Oui, alors là, une fenêtre s'affiche, m'indiquant que Ce code contient encore des erreurs de compilation et ne peut pas être exécuté. On me donne quelques détails, dont Erreur dans le traitement Clic sur boutonafficher. Cette fenêtre d'information me propose 3 boutons : un bouton Déboguer, qui permet, lors du clic, de lancer le debugger afin d'identifier l'erreur ; un bouton Copier qui permet de copier le texte du message d'erreur dans le presse papier, afin ensuite de le coller ailleurs (par exemple dans un mail pour demander de l'aide à quelqu'un) ; un bouton OK qui ferme la fenêtre d'information sur l'erreur. Comme nous connaissons notre erreur, nous cliquons sur OK et nous passons au second test TGPA0107-seq02.indd 69 6/09/07 11:06:12

52 Travaux pratiques 2 Second test Lexique Algo Consigne Windev correspondante saisienombre (entier,saisi) Début Afficher ("Saisissez un nombre entier") Saisir (saisienombre) Dans l'événement clic du bouton, écrire l'instruction : saisienombre = 321,42 Exécuter la fenêtre. Là, vous constatez que Windev s'est contenté d'arrondir le nombre de manière à en faire un entier. Autres tests Lexique Algo Consigne Windev correspondante saisiemot (chaîne[5], saisie) Début Afficher ("Saisissez un mot") Saisir (saisiemot) Dans le clic sur le bouton, écrire : saisiemot = "Aujourd'hui" Vous pouvez constater qu'il se passe ce que j'ai expliqué dans le cours. Le mot est coupé après le 5 e caractère. saisienombre (entier,calculé) Début saisienombre! "4" Dans le clic sur le bouton, écrire : saisienombre = "4" Algorithmiquement, c'est tout à fait incorrect, mais Windev est très permissif et ça marche, même si on écrit : lenombre est un entier lenombre = "4" saisienombre = lenombre saisienombre (entier,calculé) saisiemot (chaîne[5], calculée) Début saisienombre! 14 saisiemot! saisienombre Dans le "clic" sur le bouton, écrire : saisienombre = 14 saisiemot = saisienombre Là, évidemment, c'est algorithmiquement incorrect, mais comme Windev est très permissif, ça marche. Encore un petit dernier Lexique Algo Consigne Windev correspondante saisiemot (chaîne[5], calculée) Début saisiemot! toto Dans le "clic" sur le bouton, écrire : saisiemot = toto Vous constatez que là, on a à nouveau la boîte de dialogue indiquant une erreur. Si on répond Oui à à la question Voulez-vous continuer?, la fenêtre se lance et lors du clic sur le bouton, une fenêtre d'information s'affiche, nous indiquant : Erreur à la ligne 3 du traitement Clic sur boutonafficher TGPA0107-seq02.indd 70 6/09/07 11:06:13

53 Travaux pratiques 2 Ce code contient encore des erreurs de compilation et ne peut pas être exécuté. Si, parmi les boutons Déboguer, Copier et OK, je clique sur le bouton OK, je reviens à l'éditeur Windev, et je vois, en rouge, le message : Le fait qu'on n'aie pas encadré toto par des quotes (" ") fait croire à Windev que toto n'est pas une chaîne mais une variable. Or, comme on n'a pas déclaré cette variable toto, elle est inconnue de Windev, c'est ce qu'il nous indique dans ce message. Partie 1 Les 3 familles de données et l'opération d'affectation Exercices Je vous propose maintenant de traduire les algorithmes de la partie 1 de la séquence 2 du cours. On va laisser tomber l'exo 1 car on a fait tous les tests dans les manips précédentes. Consigne 7 : traduction de l'algorithme de l'exercice 2 (calcul du salaire brut et du salaire net d'un fonctionnaire dont l'indice en nombre de points est saisi). Créez une nouvelle fenêtre, appelez-la fenexo2. Sur cette fenêtre, prévoyez : un champ de saisie s'appelant saisieindice, de libellé Indice, type numérique, état initial En saisie. Choisissez également, dans la partie Détail de la description, la propriété Saisie obligatoire afin d'obliger l'utilisateur à ne pas oublier de saisir l'information (pour ce faire, il vous suffit de cocher la case Saisie obligatoire) ; un champ de saisie s'appelant saisiesalbrut pour afficher le salaire brut, de libellé Salaire brut, état initial En Affichage, type Numérique ; un champ de saisie saisiesalnet, de libellé Salaire net, pour afficher le salaire net, type Numérique, En Affichage également TGPA0107-seq02.indd 71 6/09/07 11:06:13

54 Travaux pratiques 2 En ce qui concerne la valeur du point et le taux de retenue : créez un champ de saisie pour chaque, saisievalpoint et saisietauxret, type Numérique, que vous mettez En Affichage et auxquels vous affectez leurs valeurs en les saisissant dans la partie Contenu de la description, comme le montre la copie d'écran ci-dessous. O Pour le taux de retenue, vous devez choisir le masque de saisie +9,99 et dans le contenu, vous devez taper 0.1, sinon, la valeur initiale ne s affiche pas dans la zone de saisie saisietauxret. Votre fenêtre doit maintenant avoir l'allure suivante : TGPA0107-seq02.indd 72 6/09/07 11:06:14

55 Travaux pratiques 2 Nous allons maintenant écrire les traitements de calcul de salaire. Pour varier les plaisirs, je vous propose de déclencher le calcul du salaire brut et du salaire net dans l'événement sortie de saisieindice (Rappel : pour accéder à l'éditeur de code source, sélectionnez le champ saisieindice, faites un clic droit et choisissez Code). Vous pourrez ensuite mettre ces instructions dans l'événement A chaque modification de saisieindice afin de comprendre la différence entre ces 2 événements en faisant des essais d'utilisation. alement, le fait d'utiliser un langage de programmation graphique et événementiel, fait que ce qui va rester de l'algo, ce sont simplement les lignes d'instructions suivantes : saisiesalbrut! saisieindice * saisievalpoint saisiesalnet! saisiesalbrut * (1 - saisietauxret) Traduisez ces lignes. Si vous avez des erreurs lorsque vous exécutez votre fenêtre, vérifiez bien que vous n'avez pas oublié de mettre le type des champs en numérique, sinon, Windev considère que c'est du texte et refuse de faire les calculs arithmétiques. Voici un exemple d'exécution (j'ai saisi 12 dans le champ Indice, et j'ai validé ma saisie) : Passons maintenant à la partie de TP correspondant à la partie 2 de la séquence TGPA0107-seq02.indd 73 6/09/07 11:06:14

56 Travaux pratiques 2 Partie 2 Les données de type numérique et leurs opérations de base Remarque : les numéros d'exercices se suivent d'une séquence à l'autre. Les numéros de consignes, eux, se suivent d'une partie à l'autre au sein d'une même séquence. Je passe les premiers paragraphes de cette séquence de cours car on a vu plus haut tout ce qu'on avait besoin de voir et j'attaque au paragraphe suivant du cours. 2B. Les opérations arithmétiques L'addition, la soustraction la multiplication et la division ont, dans Windev, les mêmes symboles qu'en algo. En outre, Windev propose quelques autres opérateurs arithmétiques intéressants et qui existent dans la plupart des langages de programmation (consultez, pour plus de détail, la page d'aide Opérateurs arithmétiques) : Opérateur Windev Explication ++ Il s'agit de l'opérateur d'incrémentation. Faire une incrémentation, c'est rajouter 1. Écrire par exemple monnombre++ revient au même que d'écrire monnombre = monnombre Il s'agit de l'opérateur de décrémentation. Écrire monnombre-- revient au même que d'écrire monnombre = monnombre 1. += Cet opérateur permet l' ajout d'une valeur à la variable ou au champ (numérique ou texte). Écrire monnombre+=3 revient au même que d'écrire monnombre = monnombre + 3 et est plus rapide. -= Cet opérateur permet d'effectuer la soustraction d'une valeur à la variable ou au champ (numérique). Écrire monnombre =3 revient au même que d'écrire monnombre = monnombre 3 et est plus rapide. Consigne 9 : dans l'index de l'aide de Windev, tapez Fonctions mathématiques. Dans la zone Résultats de la recherche, choisissez Fonctions mathématiques. Dans cette fenêtre d'aide, on vous indique les fonctions mathématiques utilisables avec des nombres et notamment les opérations suivantes. L'élévation à la puissance, qui se fait par l'utilisation de la fonction puissance Exemple : resultat = puissance (2,3). Cette ligne d'instruction range dans la variable resultat la valeur 2 3. La division entière : div et le reste de la division entière : mod La division entière n'existe pas dans Windev. Lorsqu'on a besoin de calculer par exemple resultat! x div 7, il faut écrire resultat = PartieEntière (x / 7) qui divise x par 7 et ne garde que la partie entière du résultat TGPA0107-seq02.indd 74 6/09/07 11:06:14

57 Travaux pratiques 2 Par contre, mod existe et s'appelle modulo. C'est une fonction qui s'utilise comme suit : resultat = modulo (x, 7), le reste de la division entière de x par 7 est rangé dans resultat. Partie entière d'un nombre : ent et partie décimale d'un nombre : dec Je viens de présenter ci-dessus la partie entière. La partie décimale est également une fonction, elle s'appelle PartieDécimale et retourne la partie décimale du nombre passé en paramètre. Consigne 10 : en guise d'entraînement, traduisez ce petit algo du cours en créant une nouvelle fenêtre, contenant 3 champs de saisie numériques et en mettant le calcul de parent et pardec dans l'événement sortie de nb2. Lexique Algo Traduction en Windev nb2 (réel, saisi) parent (entier, calculé) pardec (réel, calculé) Début Saisir(nb2) parent! ent(nb2) pardec! dec(nb2) Afficher ("Partie entière du nombre saisi : ", parent) Afficher ("Partie décimale du nombre saisi : ", pardec) parent = PartieEntière(nb2) pardec = partiedécimale(nb2) 2C. Les opérations de comparaison Les opérateurs de comparaison s'utilisent exactement de la même façon dans Windev qu'en algo. Une petite remarque supplémentaire cependant : on ne peut pas écrire des choses du genre 4<b<8, on est obligé d'écrire à la place : 4<b et b<8. 2D. Une opération de conversion : la fonction fchaîne En Windev, cette fonction s'appelle NumériqueVersChaine. Consigne 11 : pour voir ce que fait exactement cette fonction, allez dans l'index de l'aide de Windev, tapez NumériqueVersChaîne, dans la zone Résultats de la recherche, sélectionnez la rubrique NumériqueVersChaîne et allez consulter les exemples d'utilisation. Je vous propose maintenant de traduire les algos de la partie TGPA0107-seq02.indd 75 6/09/07 11:06:15

58 Travaux pratiques 2 Exercices Créez une fenêtre pour chaque algorithme, donnez-lui comme nom fenexo + le numéro de l'exercice. Lorsque c'est nécessaire, je vous donne des indications précédées du numéro de l'exercice concerné. Lorsque vous avez terminé une fenêtre, exécutez-la pour vérifier qu'elle fait bien ce que vous voulez. C'est ce qu'on appelle «tester». Souvent, quand on débute en programmation, à partir du moment où notre fenêtre ne «plante» pas et où on n'a pas de message d'erreur, on considère que notre fenêtre est bonne. Non, il faut aussi vérifier que les résultats sont bien ceux attendus. Appliquez vous aussi à faire des fenêtres ergonomiques (c'est-à-dire qui ont une apparence et un fonctionnement corrects) : n'obligez pas l'utilisateur à se livrer à des gymnastiques incroyables avec la souris pour réussir enfin à saisir une donnée dans une zone de saisie. Facilitez-lui la tâche. Exercice 5 Si vous choisissez la version où l'échange est effectif, déclarez une variable temporaire. Vous pouvez écrire le traitement d'échange au «clic» sur un bouton. Exercice 6 Cette fenêtre est la même que la précédente, mais vous n'avez plus besoin de déclarer de variable. Vous remarquerez que parfois, windev «plante» et qu'il n'y a aucune raison apparente pour cela. Effectivement, parfois, cela arrive quand on fait de la programmation. Pas de panique. Relancez windev. Si Windev re-plante immédiatement quand vous le relancez, redémarrez votre machine. Exercice 7 Vous pouvez mettre toutes les données du lexique de cet algo comme champs de saisie de type numérique, ou bien déclarer coef1, coef2 et coef3 comme des variables invisibles à l'utilisateur. Dans les 2 cas, initialisez ces 3 données dans le code d'ouverture de votre fenêtre. Exercice 8 Vous n'avez besoin d'aucune aide pour écrire cette fenêtre. Exercice 9 Même «aide» que pour l'exercice 8. Exercices 10, 11 et 12 Pas besoin d'aide non plus TGPA0107-seq02.indd 76 6/09/07 11:06:15

59 Travaux pratiques 2 Exercice 13 Pour cet exercice, il me paraît nécessaire de vous donner un coup de main. Il faut d'abord créer 6 champs de saisie de type numérique : saisienb100, saisienb50, saisienb10, saisienb5, saisienb1 et saisiesomme. Pour le champ saisiesomme, il faut prévoir un masque de saisie avec 2 chiffres derrière la virgule, pour les autres champs, il faut prévoir un masque de saisie de type entier. Pour déclencher le traitement de décomposition, je vous propose de mettre le code dans l'événement Sortie du champ de saisie saisiesomme. Nous gardons de l'algorithme initial les instructions suivantes : nb100 somme div 100 somme somme mod 100 nb50 somme div 50 somme somme mod 50 nb10 somme div 10 somme somme mod 10 nb5 somme div 5 nb1 somme mod 5 Étant donné que la division entière n'existe pas dans Windev, il faut remplacer toutes les expressions utilisant div par PartieEntière( / ), ce qui nous donne le code suivant : Et hop! On exécute la fenêtre. Ci dessous, je mets un exemple d'exécution de la fenêtre, j'ai saisi la somme TGPA0107-seq02.indd 77 6/09/07 11:06:16

60 Travaux pratiques 2 Ca ne marche pas tout à fait comme on veut, la décomposition se fait bien, mais la zone Somme à décomposer est modifiée, à cause des lignes d'instructions : saisiesomme = modulo(saisiesomme,100) saisiesomme = modulo(saisiesomme,50) saisiesomme = modulo(saisiesomme,10), Il faut, pour corriger ça, utiliser une variable dans laquelle on met la valeur de la somme juste après la saisie et c'est cette variable que l'on doit modifier après chaque division. Donc, le code devient : decompo est un entier decompo = saisiesomme nb100 = PartieEntière(decompo/ 100) decompo = modulo(decompo,100) nb50 = PartieEntière(decompo/50) decompo = modulo(decompo,50) nb10 = PartieEntière(decompo/10) decompo = modulo(decompo,10) nb5= PartieEntière(decompo/5) nb1 = modulo(decompo,5) Allez, on teste à nouveau, plusieurs fois, en saisissant des sommes différentes. Cette fois, ça marche mais cette fenêtre a un défaut : quand elle s'ouvre, elle ne positionne pas l'utilisateur sur le champ de saisie saisiesomme, mais sur le champ Nombre de billets de 100. C'est normal, le champ Nombre de billets de 100 est le champ qu'on a créé en premier sur la fenêtre. Pour visualiser dans quel ordre les champs de la fenêtre seront accédés automatiquement ou à l'aide de la touche tab de notre clavier, appuyez sur F5 et ça donne : TGPA0107-seq02.indd 78 6/09/07 11:06:16

61 Travaux pratiques 2 Ce qu'il faut, c'est faire en sorte que le champ Somme à décomposer soit le premier dans l'ordre d'accessibilité (on dit aussi ordre de navigation). On a ici 2 moyens de faire ça : Comme le champ saisiesomme est le seul à devoir être modifié par l'utilisateur, on peut mettre tous les autres champs En Affichage. Testez cette solution, ça marche : à l'ouverture de la fenêtre, c'est bien le champ saisiesomme qui est sélectionné (on dit «Qui a le focus»). Mais ça marche uniquement parce qu'on a un seul champ modifiable. L'autre solution est plus généralement utilisable. On peut l'utiliser aussi quand on a plusieurs champs de saisie pouvant être modifiés par l'utilisateur : il s'agit de changer l'ordre de saisie des champs. Pour modifier l'ordre de navigation, sélectionnez l'option Fenêtre Ordre de navigation. Éditer et utilisez les flèches situées sur la droite. Avant correction, on a ceci : Après correction, on a ceci : Le résultat doit être le suivant : Consigne 13 : voilà. On en a fini avec cette première partie du TP. Pour bien achever votre travail, créez un menu depuis lequel toutes vos fenêtres sont accessibles, comme vous l'avez fait dans le manuel d'autoformation TGPA0107-seq02.indd 79 6/09/07 11:06:16

62 Travaux pratiques 2 Partie 3 Les chaînes de caractères et leurs opérations de base D'abord, voici les types de données, dans Windev, qui correspondent aux types caractère et chaîne vus en algo (les informations encadrées sont issues de l'aide de Windev, j'ai choisi la rubrique chaîne dans l'index de l'aide) : Caractere : caractère codé sur un octet Ce type correspond au type «caractère» de l'algo. "codé sur un octet" : l'octet est l'unité de base de calcul de la place prise par une donnée (un octet, vous le verrez ou l'avez déjà vu en AMSI est 1 emplacement de 8 positions binaires et c'est la plus petite quantité d'espace pris par une donnée). Chaine Fixe sur : chaîne de taille fixe. La chaîne est complétée avec des espaces si nécessaire. La longueur d'une telle chaîne est limitée à 32 Ko. Ce type correspond à peu près au type chaîne dont on limite la taille (exemple : la déclaration "mot(chaîne[6])" deviendra en windev "mot est une chaîne fixe sur 6"), à une nuance près que je vous explique à l'aide d'un exemple. Soient les instructions windev suivantes : //déclaration d'une chaine de taille fixe dd est une chaine fixe sur 30 //affectation à cette chaîne d'un mot de 3 caractères dd = "bla" // Affichage de la longueur de cette chaîne à l'aide de la fonction "taille" qui est l'équivalent // Windev de la fonction "longueur" de l'algo info(taille(dd)) Lorsqu'on exécute ces instructions, voici le résultat (vous pouvez vous-même faire le test) : Vous pouvez constater qu'avec ce type «chaîne fixe sur», quel que soit le nombre effectif de caractères contenus dans la chaîne, la longueur de la chaîne est déterminée comme étant égale à la taille maxi de la chaîne, indiquée à la déclaration. Maintenant, que signifie l'information «La longueur d'une telle chaîne est limitée à 32 Ko» : cela signifie que les chaînes de tailles fixes sont limitées à 32 KiloOctets. 1 KiloOctet (en abrégé Ko) est égal à 1024 Octets(2 10 octets), donc 32 Ko = 32 * 1024 = octets et comme un caractère prend 1 octet, cela signifie finalement que les chaînes de taille fixe sont limitées à caractères TGPA0107-seq02.indd 80 6/09/07 11:06:17

63 Travaux pratiques 2 Chaine Chaîne de taille dynamique. Avec ce type de chaîne, il n'est pas nécessaire de déclarer la longueur. Celle-ci peut varier de façon libre lors de l'utilisation de la variable. La longueur d'une telle chaîne est limitée à 64 Ko. Ce type correspond au type chaîne de l'algo. La taille est limitée à 1024*64 = caractères. «Chaîne de taille dynamique» signifie tout simplement qu'elle n'est pas de taille fixe et que si on utilise la fonction «taille» sur une telle chaîne, on obtiendra le nombre effectif de caractères qu'elle contient. Exemple : si je reprends le petit programme précédent, en modifiant la déclaration de la chaîne, voilà ce que cela donne : Le programme dd est une chaine dd = "bla" info(taille(dd)) Son résultat L'aide de Windev indique d'autres types de chaînes de caractère dont nous n'avons absolument pas l'utilité. 1. Exemples de déclarations de données de type caractère et chaîne de caractères moncar (caractère, saisi) Déclaration en algo Equivalent en Windev moncar est un caractere mach (chaîne[1], saisie) mach est une chaine fixe sur 1 encoreuneautrechaine (chaîne, saisie) encoreuneautrechaine est une chaine Et quand on crée une zone de saisie au lieu de déclarer la variable. Vous avez déjà pu le tester à plusieurs reprises, au lieu de déclarer une variable de type chaîne, vous pouvez créer une zone de saisie, préciser qu'il s'agit d'un champ de type texte et limiter sa taille maxi de saisie à un certain nombre de caractères. Les zones de saisie de type texte se comportent comme le type «chaîne» de Windev mais en plus, on peut limiter le nombre de caractères saisis. Consigne 14 : pour tester cela, faites l'essai suivant. Posez un champ de saisie sur une fenêtre, choisissez son type : texte, et limitez sa taille maxi de saisie à, disons, 5 caractères. Posez également un bouton OK sur cette fenêtre. Dans l'événement clic de ce bouton, affectez au champ de saisie par exemple la valeur constante anticonstitutionnellement (en allant dans l'onglet Contenu de la description de l'objet et en saisissant ce mot dans la zone Contenu initial) et exécutez votre fenêtre : vous pouvez constater que seuls les 5 premiers caractères de anticonstitutionnellement apparaissent dans votre champ de saisie TGPA0107-seq02.indd 81 6/09/07 11:06:17

64 Travaux pratiques 2 2. Les opérations sur les caractères et les chaînes de caractères 2A. L'affectation d'une valeur à une chaîne de caractère Quelques exemples d'affectations pour se rafraîchir la mémoire Soit un champ de saisie monchamp, de type texte, taille maxi de saisie : 10, état En saisie. Voici en Windev des exemples sur les différentes façons dont on peut affecter une valeur à ce champ : par saisie : il suffit d'exécuter la fenêtre sur laquelle est posé monchamp. Le fait que l'utilisateur saisisse du texte dans monchamp équivaut à la commande saisir (monchamp) de nos algos ; par affectation à l'aide d'une valeur constante : monchamp ç "Cadeau" devient en Windev : monchamp = "cadeau" ; par affectation avec une autre variable : Soit la variable unmot, de type chaîne (saisie ou calculée, peu importe) et ayant préalablement été initialisée ; L'instruction monchamp ç unmot devient dans Windev : monchamp = unmot. par calcul : On l'a vu dans le paragraphe précédent, l'opération qui convertit un nombre en chaîne est la fonction fchaîne en algo et s'appelle NumériqueVersChaîne en Windev. Nous allons aborder le découpage et la concaténation dans les 2 paragraphes ci-dessous, mais je voudrais ici détailler l'utilisation de la fonction NumériqueVersChaîne de Windev. Nous allons utiliser le petit algo donné en exemple à cet endroit du cours pour faire quelques tests sur cette fonction. Lexique nb2 (réel, saisi) nbconv(chaîne, calculé) Algo Début Saisir(nb2) nbconv fchaîne(nb2) On n'a pas besoin d'utiliser la fonction NumériqueVersChaîne pour affecter à un champ de saisie texte le contenu d'un champ de saisie numérique. Ceci est dû au fait que Windev soit très permissif, et ce n'est pas le cas dans tous les langages de programmation. Consigne 15 : faites le test suivant. Posez un champ de saisie nb2, type Numérique et un champ de saisie nbconv, type Texte sur une fenêtre. Dans l'événement Sortie de nb2, tapez l'instruction nbconv = nb2, correspondant à l'instruction nbconv ç fchaîne (nb2) de l'algorithme. Exécutez votre fenêtre. Saisissez une valeur dans le champ nb2 et appuyez sur entrée (ce qui a pour effet de déclencher les traitements écrits dans l'événement Sortie de nb2, car appuyer sur entrée équivaut à sortir du champ). Vous voyez, ça marche sans utiliser la fonction NumériqueVersChaîne. Maintenant, on va refaire le même test avec des variables «non visibles» TGPA0107-seq02.indd 82 6/09/07 11:06:17

65 Travaux pratiques 2 Consigne 16 : supprimez sur votre fenêtre les champs nb2 et nbconv. Posez un champ saisienb sur la fenêtre, type numérique. Dans l'événement Sortie de saisienb, déclarez nb2 comme étant un réel et nbconv comme étant une chaîne. Puis tapez les instructions : nb2 = saisienb (correspondant à l'instruction saisir (Nb2) de l'algorithme), nbconv = nb2 (correspondant à l'instruction nbconv ç fchaîne (nb2) de l'algorithme), Info(nbConv) (Pour afficher le résultat de notre petit test). Testez votre fenêtre : saisissez un nombre dans saisienb et appuyez sur entrée. Votre fenêtre ne fonctionne pas? C'est normal : vous avez programmé l'événement de sortie du champ saisienb, mais comme le champ saisienb est le seul objet posé sur la fenêtre, l'événement de sortie du champ ne peut pas s'exécuter. Rajoutez alors un autre objet graphique, n'importe lequel, juste pour que l'événement sortie de saisienb puisse s'exécuter. Exécutez à nouveau votre fenêtre. Vous pouvez constater que la conversion automatique marche aussi pour les variables qui ne sont pas des objets graphiques. Remplacez maintenant l'instruction nbconv = nb2 par l'instruction nbconv = NumériqueVersChaine(nb2) et exécutez encore une fois votre fenêtre. La fenêtre fonctionne également quand on utilise la fonction NumériqueVersChaîne, mais pas mieux ou moins bien que quand on ne l'utilise pas. Si vous le souhaitez, vous pouvez tracer cette fenêtre en l'exécutant pas à pas : pour cela, indiquez que cette fenêtre est la première fenêtre du projet en allant dans Projet Description du projet et en choisissant votre fenêtre dans le liste déroulante Première fenêtre du projet. Ensuite, allez dans Projet Mode test Tracer le projet et utilisez la touche F7 de votre clavier pour que votre programme s'exécute pas à pas. Une fois que l'on a exécuté une instruction, il suffit de positionner le curseur de la souris sur une variable pour que sa valeur apparaisse. Vous pouvez encore une fois constater qu'il n'y a aucune différence quand on utilise la fonction NumériqueVersChaîne ou quand on ne l'utilise pas TGPA0107-seq02.indd 83 6/09/07 11:06:18

66 Travaux pratiques 2 Voici ce qui s'affiche une fois qu'on a fini de tracer les traitements de la fenêtre : En fait, on a absolument besoin de la fonction NumériqueVersChaine lorsqu'on veut, par exemple, recopier un nombre dans un fichier de chaînes de caractères. O Ceci est spécifique à Windev qui, je vous le rappelle est très (trop?) souple, et ne signifie absolument pas qu'on n'ait pas besoin d'utiliser la fonction fchaîne en algo pour convertir un nombre en chaîne de caractères. 2B. Les opérations de comparaisons sur les caractères et les chaînes de caractères Les opérateurs de comparaison dans Windev, sont, on l'a déjà vu, identiques à ceux utilisés en algo. Les règles de comparaison de chaînes de caractères sont également les mêmes que celles présentées dans le cours. Pour illustrer ce paragraphe du cours, je vous propose de programmer les petits exemples du cours et d'observer la réaction de Windev. Consigne 17 : pour ce faire, posez un bouton sur une fenêtre vide, et mettez les instructions suivantes dans l'événement «clic» de ce bouton TGPA0107-seq02.indd 84 6/09/07 11:06:18

67 Travaux pratiques 2 Exemple Info("1" < "a") Résultat de l'opération de comparaison Vrai Réaction de Windev La commande info affiche le résultat de l'opération de comparaison ("1" < "a") et ce résultat vaut 1, c'est à dire qu'il est vrai. Les booléens sont, dans Windev, des entiers qui ne peuvent prendre que 2 catégories de valeurs : 0 (pour faux) et différent de 0 (pour "vrai"). Là, le résultat de l'opération est différent de 0, donc, l'opération de comparaison est vraie. Info("abaa" >= "abb") Faux Le résultat est 0, ce qui est normal. 2C. Longueur d'une chaîne de caractères En Windev, la fonction longueur de l'algo s'appelle taille. Consigne 18 : dans l'index de l'aide de Windev, tapez Chaîne de caractères. Vous voyez sous ces mots une liste des traitements que l'on peut appliquer à des chaînes (Comparer 2 chaînes, compléter ). Au fur et à mesure de l'année, nous utiliserons tout ou partie de ces manipulations qui existent également en algorithmique (pour qu'une fonction existe en algo, il suffit de la déclarer dans le lexique). Descendez dans cette liste jusqu'à ce que vous trouviez la rubrique Taille et allez consulter cette rubrique. Vous pouvez constater que la fonction taille de Windev s'utilise exactement comme la fonction longueur de l'algo. Cette fonction peut s'utiliser aussi bien pour des champs de saisie que pour des chaînes de caractères déclarées. Consigne 19 : testez cette fonction comme bon vous semble. 2D. La concaténation de chaînes de caractères Dans Windev comme en algo, l'opérateur de concaténation est le signe +. Consigne 20 : si le cœur vous en dit, testez l'algo du cours ci-dessous. Dans l'événement clic d'un bouton que vous aurez posé sur une fenêtre vierge, tapez les déclarations suivantes : nb2 est un entier lemot est une chaîne fixe sur 7 lachaîne est une chaîne TGPA0107-seq02.indd 85 6/09/07 11:06:18

68 Travaux pratiques 2 Tapez également les instructions correspondant aux instructions de l'algo dans ce même événement clic (utiliser la commande Info pour les instructions Afficher). Lexique nb2(entier, calculé) lemot (chaîne[7], calculé) lach(chaîne, calculé) Début nb2! 4750 lemot! chaîne(nb2) + "123" lach! lemot + "blabla" Algo lemot! "tralala" + "lalère" Afficher ("La variable lach contient : ", lach) Afficher ("La variable lemot contient : ", lemot) 2E. Le découpage de chaînes de caractères Dans Windev, il existe plusieurs fonctions se rapprochant de la fonction SousChaîne de l'algo. Dans l'index de l'aide, si vous tapez Chaîne de caractères, vous pouvez trouver dans la liste les 4 rubriques suivantes : Extraire la partie droite, Extraire la partie gauche, Extraire un caractère, Extraire une partie Dans la rubrique Extraire la partie droite, on nous explique que la fonction Droite extrait le nombre de caractères spécifiés dans la chaîne spécifiée à partir de la fin de la chaîne et que la fonction s'utilise comme suit : resultat = Droite (Chaine [,Longueur]). Les crochets [ ] autour du mot Longueur signifient que ce paramètre n'est pas obligatoire. La rubrique Extraire la partie gauche nous explique que la fonction Gauche s'utilise comme la fonction Droite mais à partir du début de la chaîne. La syntaxe d'utilisation est en tout point semblable à la fonction précédente. Resultat = Gauche (Chaine [,Longueur]) La rubrique Extraire une partie : cette rubrique nous présente la fonction ExraitChaine qui elle, prélève dans une chaîne les caractères qui suivent le n ième séparateur indiqué en paramètres. Cette fonction est trop éloignée de notre fonction SousChaîne de l'algo. Mais également, dans cette rubrique, on découvre enfin la fonction qui se rapproche le plus de notre fonction SousChaîne. Bizarrement, elle s'appelle milieu, mais sa syntaxe d'utilisation est identique à celle de notre fonction SousChaîne, à cela près que la longueur est un paramètre optionnel : Resultat = Milieu(LaChaine,depart [,longueur]) correspond à l'instruction d'algo Résultat! souschaîne(chaîne, départ, longueur) Consigne 21 : vous pouvez tester cette fonction milieu mais également les fonctions droite et gauche en traduisant le petit algo de cette partie du cours TGPA0107-seq02.indd 86 6/09/07 11:06:19

69 Travaux pratiques 2 Lexique mot (chaîne[7], calculé) lach (chaîne, calculé) Algo Début mot! "Bonjour" lach! souschaîne(mot,2,5) Afficher ("La variable lach contient : ", lach) Afficher ("Dind", souschaîne(mot,2,2)) mot! souschaîne(mot,1,3) + "soir" lach! mot + "je vais me coucher" lach! mot + " je vais me coucher" Remarque : pour extraitre un seul caractère d'une chaîne, on peut également dans Windev utiliser la syntaxe machaîne[x] qui, en Windev, devient machaine[[x]]. 2F. La conversion d'une chaîne de caractères en donnée de type numérique Dans Windev comme en algo, la fonction qui effectue la conversion d'une chaîne de caractères en numérique s'appelle val. Syntaxe d'utilisation : resultat = Val(laChaine), où resultat est un entier ou un réel et lachaine est la chaîne de caractère à convertir en numérique. De même que la fonction NumériqueVersChaîne, cette fonction val n'est indispensable que lors de l'utilisation de fichiers contenant des types bien définis de données. Exemple : supposons que dans ce fichier, les numéros de téléphone soient stockés sous forme de nombres mais que la saisie d'un numéro à l'écran se fasse sous forme d'une chaîne de caractères. Là, on aura vraiment besoin d'utiliser la fonction val pour pouvoir écrire le numéro de téléphone dans le fichier. La différence avec la fonction NumériqueVersChaîne est que tous les caractères ne sont pas des chiffres et que parfois la conversion peut poser des problèmes. Je vous propose donc de tester les différents exemples de l'algo qui étaient dans le cours à cet endroit afin de connaître les réactions de Windev. Exemples Lexique Algo Résultat mot (chaîne[7], calculé) lach (chaîne, calculé) res (réel, calculé) : résultat d'appel de la fonction val Début res! val (" ") res! val ("toto784") res = val (fonction) résultat réel : retourne la valeur numérique de la chaîne passée en paramètre res! val (SousChaîne ("toto784",5,2)) res = 78 Vous pouvez constater qu'ici, Windev ne nous affiche pas de message d'erreur mais que res vaut 0, ce qui signifie que la conversion n'a pas eu lieu TGPA0107-seq02.indd 87 6/09/07 11:06:19

70 Travaux pratiques 2 2G. La fonction chr et la fonction ascii La fonction ascii s'appelle Asc en Windev, je vous laisse le soin d'aller consulter l'aide pour sa syntaxe d'utilisation, de même pour la fonction chr qui elle s'appelle caract. Voilà. On a fini la partie de TP correspondant au cours sur les chaînes de caractères. Il existe bien d'autres opérations intéressantes sur les chaînes de caractères, notamment les opérations de comparaison de chaînes, d'inversion majuscules/minuscules etc. Nous découvrirons ces fonctions au fur et à mesure des besoins. Vous avez maintenant tous les outils nécessaires pour traduire les exercices de cette partie 3. Exercices N'oubliez pas de tester votre travail : cela signifie que vous devez exécuter plusieurs fois chacune de vos fenêtres avec des données différentes afin de vérifier que les traitements que vous avez écrits font bien ce qu'ils doivent faire. Exercice 14 Traduction des mots en code secret. Je vous conseille d'écrire le traitement correspondant à l'algorithme dans l'événement «sortie» du champ où le mot à traduire a été saisi. Exercice 15 Cryptage d'un mot. Même conseil que précédemment. Exercice 16 Écrire l'algorithme du programme qui pose les questions suivantes : Quel est votre nom? Quel est votre prénom? Quelle est votre date de naissance (jj/mm/aaaa)? et qui affiche ensuite par exemple le message suivant : Vous vous appelez B.Lancaster et vous avez 83 ans. Pour calculer l'âge Pour obtenir l'équivalent des fonctions AnnéeSystème, MoisSystème et JourSystème de l'algo, vous disposez, dans Windev, de la fonction DateSystème dont vous devrez découper le résultat pour récupérer l'année, le mois et le jour. Dans Windev, pour convertir en jours la date actuelle et la date de naissance saisie, allez voir du côté de la fonction DateVersEntier qui nous mâche le travail concernant la conversion de la date en jours à partir d'une date de référence. Ceci dit, rien ne vous empêche de convertir à l'aide de vos propres instructions la date de naissance et la date système! Bon courage! TGPA0107-seq02.indd 88 6/09/07 11:06:19

71 Travaux pratiques 2 Partie 4 Les booléens et leurs opérations de base NON, ET, OU Un booléen peut prendre seulement 2 valeurs : vrai ou faux. Dans Windev, on l'a vu dernièrement, un booléen est vrai s'il est différent de 0 et faux sinon. Le type booléen dans Windev s'écrit booleen (sans accent). Une donnée de type booléen n'est jamais une donnée dont on affiche la valeur dans un objet graphique. L'utilisateur final de notre application n'a pas à savoir si le booléen monbool est vrai ou faux, par contre, la valeur de ce booléen peut venir d'une action produite par l'utilisateur final. Donc, un booléen est toujours une variable que l'on déclare. 1. Exemples de déclaration // Déclarations de booléens trouvé est un booléen monbool, trouvé sont des booléens 2. Les opérations de base sur les données de type booléen 2A. L'affectation Je reprends ici le déroulement du cours et je vous fournis l'équivalent en Windev ainsi que quelques remarques supplémentaires. K Affectation à l'aide d'une valeur constante On affecte un booléen à l'aide d'une constante la plupart du temps quand on l'initialise, en début de traitement. Exemple : // Dans Windev, déclaration d'un booléen trouvé est un booléen //Initialisation trouvé = faux //Dans Windev, on peut initialiser un booléen à faux en écrivant trouvé = TGPA0107-seq02.indd 89 6/09/07 11:06:20

72 Travaux pratiques 2 K Affectation avec une autre variable Exemple : trouvé, bool sont des booléens //On pourrait tout aussi bien écrire //Trouvé est un booléen //Bool est un booléen trouvé = vrai bool = trouvé Affectation par une expression booléenne Consigne 22 : testons l'exemple suivant b! (y>z) dans une fenêtre windev : Sur une fenêtre, posez deux champs de saisie y et z, dans l'événement de sortie de y, déclarez b est un booleen puis tapez les instructions : b = (y>z) info(b) Testez ensuite votre fenêtre en saisissant différentes valeurs pour y et z. 2B. Les opérations booléennes non, et et ou Opération en algo Traduction en Windev Et Et Ou Ou Non Pas On passe l'exercice 17 qui n'est pas intéressant à traduire en Windev 2B5. Lois d'absorption Ce qu'il faut retenir à propos de ces lois d'absorption, c'est qu'il vaut mieux utiliser par exemple a que a et(a ou b) car ces 2 expressions booléennes ont la même valeur et que la première est plus rapide à évaluer pour la machine que la seconde. 2B6. Le mélange des opérations booléennes (non, et, ou) et des opérateurs de comparaison (<, >, =, <>, <=,>=) Là, on va faire quelques tests. Soient nb1, nb2 et nb3, 3 champs de saisie de type numérique que vous posez sur une fenêtre. Consigne 23 : dans l'événement de sortie de nb3, déclarez expbool est un booleen. Tapez ensuite : expbool = pas (nb1 < nb2) Info(expBool) expbool = (nb1 >= nb2) Info(expBool) Puis testez votre fenêtre : vous pouvez constater que lors des 2 affichages, expbool a la même valeur, ce qui signifie bien que non (nb1 < nb2) = (nb1 >= nb2) TGPA0107-seq02.indd 90 6/09/07 11:06:20

73 Travaux pratiques 2 Si vous n'êtes pas encore complètement convaincu(e), faites la même chose avec les 2 expressions booléennes non(nb1 + nb2 = 4) et (nb1 + nb2 <> 4). Je vous fais grâce des exercices sur les booléens dont la traduction n'a guère d'intérêt en soi. De toute façon, nous manipulerons ces notions plus en détail dans la séquence 3 qui utilise des expressions booléennes. Voilà. C'est la fin du TP qui accompagnait cette grosse séquence 2. On est prêt pour la séquence suivante? TGPA0107-seq02.indd 91 6/09/07 11:06:20

74 83989TGPA0107-seq02.indd 92 6/09/07 11:06:20

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux. UEO11 COURS/TD 1 Contenu du semestre Cours et TDs sont intégrés L objectif de ce cours équivalent a 6h de cours, 10h de TD et 8h de TP est le suivant : - initiation à l algorithmique - notions de bases

Plus en détail

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions Cours d introduction à l informatique Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions Qu est-ce qu un Une recette de cuisine algorithme? Protocole expérimental

Plus en détail

Initiation à la programmation en Python

Initiation à la programmation en Python I-Conventions Initiation à la programmation en Python Nom : Prénom : Une commande Python sera écrite en caractère gras. Exemples : print 'Bonjour' max=input("nombre maximum autorisé :") Le résultat de

Plus en détail

Le chiffre est le signe, le nombre est la valeur.

Le chiffre est le signe, le nombre est la valeur. Extrait de cours de maths de 6e Chapitre 1 : Les nombres et les opérations I) Chiffre et nombre 1.1 La numération décimale En mathématique, un chiffre est un signe utilisé pour l'écriture des nombres.

Plus en détail

SOMMAIRE. Travailler avec les requêtes... 3

SOMMAIRE. Travailler avec les requêtes... 3 Access Les requêtes SOMMAIRE Travailler avec les requêtes... 3 A) Créer une requête sélection en mode QBE... 3 B) Exécuter une requête à partir du mode Modifier (QBE)... 3 C) Passer du mode Feuille de

Plus en détail

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface

Plus en détail

1. Introduction...2. 2. Création d'une requête...2

1. Introduction...2. 2. Création d'une requête...2 1. Introduction...2 2. Création d'une requête...2 3. Définition des critères de sélection...5 3.1 Opérateurs...5 3.2 Les Fonctions...6 3.3 Plusieurs critères portant sur des champs différents...7 3.4 Requête

Plus en détail

Programmation Objet - Cours II

Programmation Objet - Cours II Programmation Objet - Cours II - Exercices - Page 1 Programmation Objet - Cours II Exercices Auteur : E.Thirion - Dernière mise à jour : 05/07/2015 Les exercices suivants sont en majorité des projets à

Plus en détail

Traitement de texte : Quelques rappels de quelques notions de base

Traitement de texte : Quelques rappels de quelques notions de base Traitement de texte : Quelques rappels de quelques notions de base 1 Quelques rappels sur le fonctionnement du clavier Voici quelques rappels, ou quelques appels (selon un de mes profs, quelque chose qui

Plus en détail

Une version javascript sera disponible directement dans le cours prochainement.

Une version javascript sera disponible directement dans le cours prochainement. Author : Cédric Vanconingsloo Ce cours est principalement axé sur la compréhension du fonctionnement d'un ordinateur et l'étude du seul langage qu'il connaisse, le binaire. De ce fait, le cours est relativement

Plus en détail

I. Introduction aux fonctions : les fonctions standards

I. Introduction aux fonctions : les fonctions standards Chapitre 3 : Les fonctions en C++ I. Introduction aux fonctions : les fonctions standards A. Notion de Fonction Imaginons que dans un programme, vous ayez besoin de calculer une racine carrée. Rappelons

Plus en détail

Les opérations binaires

Les opérations binaires Les opérations binaires Compétences associées A2 : Analyser et interpréter une information numérique Objectifs Etre capable: - De coder les nombres entiers en code complément à 2. - De résoudre les opérations

Plus en détail

1. Introduction... 2. 2. Création d'une macro autonome... 2. 3. Exécuter la macro pas à pas... 5. 4. Modifier une macro... 5

1. Introduction... 2. 2. Création d'une macro autonome... 2. 3. Exécuter la macro pas à pas... 5. 4. Modifier une macro... 5 1. Introduction... 2 2. Création d'une macro autonome... 2 3. Exécuter la macro pas à pas... 5 4. Modifier une macro... 5 5. Création d'une macro associée à un formulaire... 6 6. Exécuter des actions en

Plus en détail

Date : 18.11.2013 Tangram en carré page

Date : 18.11.2013 Tangram en carré page Date : 18.11.2013 Tangram en carré page Titre : Tangram en carré Numéro de la dernière page : 14 Degrés : 1 e 4 e du Collège Durée : 90 minutes Résumé : Le jeu de Tangram (appelé en chinois les sept planches

Plus en détail

Chapitre 1 I:\ Soyez courageux!

Chapitre 1 I:\ Soyez courageux! Chapitre 1 I:\ Soyez courageux! Pour ne rien vous cacher, le langage d'assembleur (souvent désigné sous le terme "Assembleur", bien que ce soit un abus de langage, puisque "Assembleur" désigne le logiciel

Plus en détail

Représentation des Nombres

Représentation des Nombres Chapitre 5 Représentation des Nombres 5. Representation des entiers 5.. Principe des représentations en base b Base L entier écrit 344 correspond a 3 mille + 4 cent + dix + 4. Plus généralement a n a n...

Plus en détail

Algorithmique avec Algobox

Algorithmique avec Algobox Algorithmique avec Algobox 1. Algorithme: Un algorithme est une suite d instructions qui, une fois exécutée correctement, conduit à un résultat donné Un algorithme doit contenir uniquement des instructions

Plus en détail

Algorithme. Table des matières

Algorithme. Table des matières 1 Algorithme Table des matières 1 Codage 2 1.1 Système binaire.............................. 2 1.2 La numérotation de position en base décimale............ 2 1.3 La numérotation de position en base binaire..............

Plus en détail

Installation de Windows 2003 Serveur

Installation de Windows 2003 Serveur Installation de Windows 2003 Serveur Introduction Ce document n'explique pas les concepts, il se contente de décrire, avec copies d'écran, la méthode que j'utilise habituellement pour installer un Windows

Plus en détail

Conversion d un entier. Méthode par soustraction

Conversion d un entier. Méthode par soustraction Conversion entre bases Pour passer d un nombre en base b à un nombre en base 10, on utilise l écriture polynomiale décrite précédemment. Pour passer d un nombre en base 10 à un nombre en base b, on peut

Plus en détail

Cours d Informatique

Cours d Informatique Cours d Informatique 1ère année SM/SMI 2007/2008, Info 2 Département de Mathématiques et d Informatique, Université Mohammed V [email protected] [email protected] 2007/2008 Info2, 1ère année SM/SMI 1

Plus en détail

Série TD 3. Exercice 4.1. Exercice 4.2 Cet algorithme est destiné à prédire l'avenir, et il doit être infaillible! Exercice 4.3. Exercice 4.

Série TD 3. Exercice 4.1. Exercice 4.2 Cet algorithme est destiné à prédire l'avenir, et il doit être infaillible! Exercice 4.3. Exercice 4. Série TD 3 Exercice 4.1 Formulez un algorithme équivalent à l algorithme suivant : Si Tutu > Toto + 4 OU Tata = OK Alors Tutu Tutu + 1 Tutu Tutu 1 ; Exercice 4.2 Cet algorithme est destiné à prédire l'avenir,

Plus en détail

CHAPITRE VIII : Les circuits avec résistances ohmiques

CHAPITRE VIII : Les circuits avec résistances ohmiques CHAPITRE VIII : Les circuits avec résistances ohmiques VIII. 1 Ce chapitre porte sur les courants et les différences de potentiel dans les circuits. VIII.1 : Les résistances en série et en parallèle On

Plus en détail

Recherche dans un tableau

Recherche dans un tableau Chapitre 3 Recherche dans un tableau 3.1 Introduction 3.1.1 Tranche On appelle tranche de tableau, la donnée d'un tableau t et de deux indices a et b. On note cette tranche t.(a..b). Exemple 3.1 : 3 6

Plus en détail

TABLEAU CROISE DYNAMIQUE

TABLEAU CROISE DYNAMIQUE EXCEL NIVEAU III Mireille DUCELLIER MARS 2003 BASE DE DONNEES RAPPEL Une base de données est une plage de cellules contiguës située sur une la feuille 1. Elle commence en A1. On parle alors de champs,

Plus en détail

Vers l'ordinateur quantique

Vers l'ordinateur quantique Cours A&G Vers l'ordinateur quantique Données innies On a vu dans les chapîtres précédents qu'un automate permet de représenter de manière nie (et même compacte) une innité de données. En eet, un automate

Plus en détail

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts

TP : Shell Scripts. 1 Remarque générale. 2 Mise en jambe. 3 Avec des si. Systèmes et scripts E3FI ESIEE Paris Systèmes et scripts B. Perret TP : Shell Scripts 1 Remarque générale Lorsque vous cherchez des informations sur Internet, n'oubliez pas que langage de shell script que nous avons vu correspond

Plus en détail

Créer une base de données

Créer une base de données Access Créer une base de données SOMMAIRE Généralités sur les bases de données... 3 Création de la base de données... 4 A) Lancement d'access... 4 B) Enregistrement de la base de données vide... 4 Création

Plus en détail

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES Leçon 11 PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES Dans cette leçon, nous retrouvons le problème d ordonnancement déjà vu mais en ajoutant la prise en compte de contraintes portant sur les ressources.

Plus en détail

Les chaînes de caractères

Les chaînes de caractères Les chaînes de caractères Dans un programme informatique, les chaînes de caractères servent à stocker les informations non numériques comme par exemple une liste de nom de personne ou des adresses. Il

Plus en détail

Algorithmique avec Algobox

Algorithmique avec Algobox Algorithmique avec Algobox Fiche 2 Cette fiche est la suite directe de la première. 1. Instructions conditionnelles : 1.1. Reprise de la fiche 1 : Lecture d'un algorithme : ORDINATEUR INTERDIT : Après

Plus en détail

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère L'héritage et le polymorphisme en Java Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère En java, toutes les classes sont dérivée de la

Plus en détail

Arithmétique binaire. Chapitre. 5.1 Notions. 5.1.1 Bit. 5.1.2 Mot

Arithmétique binaire. Chapitre. 5.1 Notions. 5.1.1 Bit. 5.1.2 Mot Chapitre 5 Arithmétique binaire L es codes sont manipulés au quotidien sans qu on s en rende compte, et leur compréhension est quasi instinctive. Le seul fait de lire fait appel au codage alphabétique,

Plus en détail

Apprendre à manipuler le clavier Médiathèque de Bussy Saint-Georges APPRENDRE A MANIPULER LE CLAVIER

Apprendre à manipuler le clavier Médiathèque de Bussy Saint-Georges APPRENDRE A MANIPULER LE CLAVIER APPRENDRE A MANIPULER LE CLAVIER Apprendre à manipuler le clavier SOMMAIRE : I APPRENDRE A TAPER AU CLAVIER... PAGES 3-11 1.1 - Positionnement des touches d'un clavier... Page 3 1.2 - Les touches importantes

Plus en détail

Navigation dans Windows

Navigation dans Windows Cours 03 Navigation dans Windows Comme je le disais en introduction, notre souris se révèle plus maligne qu'elle n'en a l'air. À tel point qu'il faut apprendre à la dompter (mais c'est très simple, ce

Plus en détail

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE

CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE CRÉER UNE BASE DE DONNÉES AVEC OPEN OFFICE BASE 2 ème partie : REQUÊTES Sommaire 1. Les REQUÊTES...2 1.1 Créer une requête simple...2 1.1.1 Requête de création de listage ouvrages...2 1.1.2 Procédure de

Plus en détail

Chapitre 4 Pierre, papier, ciseaux

Chapitre 4 Pierre, papier, ciseaux Python 3 : objectif jeux Chapitre 4 Chapitre 4 Pierre, papier, ciseaux (version graphique) 4.1. Thèmes abordés dans ce chapitre Le module tkinter : Label, Button Fenêtre Événements Réceptionnaire d'événements

Plus en détail

Correction TD algorithmique

Correction TD algorithmique Affectation Correction TD algorithmique Exercice 1 algo affect1b b 5 a b+1 b 2 Il vaut faire passer la notion de variable et la notion de stockage mémoire. Une variable n a donc pas d historique et à un

Plus en détail

Programmation C++ (débutant)/instructions for, while et do...while

Programmation C++ (débutant)/instructions for, while et do...while Programmation C++ (débutant)/instructions for, while et do...while 1 Programmation C++ (débutant)/instructions for, while et do...while Le cours du chapitre 4 : le for, while et do...while La notion de

Plus en détail

LE PROBLEME DU PLUS COURT CHEMIN

LE PROBLEME DU PLUS COURT CHEMIN LE PROBLEME DU PLUS COURT CHEMIN Dans cette leçon nous définissons le modèle de plus court chemin, présentons des exemples d'application et proposons un algorithme de résolution dans le cas où les longueurs

Plus en détail

1 TD 2 : Construction d'une chier Acrobat et envoi par email

1 TD 2 : Construction d'une chier Acrobat et envoi par email 1 TD 2 : Construction d'une chier Acrobat et envoi par email (correction page??) Un professeur de maths a instauré une coutume lors de la dernière séance de la semaine. Le vendredi est consacré à la correction

Plus en détail

Algorithmique et Programmation, IMA

Algorithmique et Programmation, IMA Algorithmique et Programmation, IMA Cours 2 : C Premier Niveau / Algorithmique Université Lille 1 - Polytech Lille Notations, identificateurs Variables et Types de base Expressions Constantes Instructions

Plus en détail

Licence ST Université Claude Bernard Lyon I LIF1 : Algorithmique et Programmation C Bases du langage C 1 Conclusion de la dernière fois Introduction de l algorithmique générale pour permettre de traiter

Plus en détail

Chapitre 2 Devine mon nombre!

Chapitre 2 Devine mon nombre! Python 3 : objectif jeux Chapitre 2 Chapitre 2 Devine mon nombre! 2.1. Thèmes abordés dans ce chapitre commentaires modules externes, import variables boucle while condition : if... elif... else la fonction

Plus en détail

INSERER DES OBJETS - LE RUBAN INSERTION... 3 TABLEAUX

INSERER DES OBJETS - LE RUBAN INSERTION... 3 TABLEAUX TABLE DES MATIERES Livret Utilisateur Excel 2007 Niveau 2 INSERER DES OBJETS - LE RUBAN INSERTION... 3 TABLEAUX... 4 Les tableaux croisés dynamiques... 4 Création d un tableau croisé... 5 Comparer des

Plus en détail

Manuel d utilisation 26 juin 2011. 1 Tâche à effectuer : écrire un algorithme 2

Manuel d utilisation 26 juin 2011. 1 Tâche à effectuer : écrire un algorithme 2 éducalgo Manuel d utilisation 26 juin 2011 Table des matières 1 Tâche à effectuer : écrire un algorithme 2 2 Comment écrire un algorithme? 3 2.1 Avec quoi écrit-on? Avec les boutons d écriture........

Plus en détail

Définition : On obtient les nombres entiers en ajoutant ou retranchant des unités à zéro.

Définition : On obtient les nombres entiers en ajoutant ou retranchant des unités à zéro. Chapitre : Les nombres rationnels Programme officiel BO du 8/08/08 Connaissances : Diviseurs communs à deux entiers, PGCD. Fractions irréductibles. Opérations sur les nombres relatifs en écriture fractionnaire.

Plus en détail

1. Création d'un état... 2. 2. Création d'un état Instantané Colonnes... 3. 3. Création d'un état Instantané Tableau... 4

1. Création d'un état... 2. 2. Création d'un état Instantané Colonnes... 3. 3. Création d'un état Instantané Tableau... 4 1. Création d'un état... 2 2. Création d'un état Instantané Colonnes... 3 3. Création d'un état Instantané Tableau... 4 4. Création d'un état avec plusieurs tables... 9 5. Modifier la structure d'un état...11

Plus en détail

Créer un tableau avec LibreOffice / Calc

Créer un tableau avec LibreOffice / Calc Créer un tableau avec LibreOffice / Calc Réaliser des tableaux LibreOffice / Calc permet de créer des tableaux facilement en utilisant les cellules. En premier lieu, il faut prévoir le nombre de colonnes

Plus en détail

MEDIAplus elearning. version 6.6

MEDIAplus elearning. version 6.6 MEDIAplus elearning version 6.6 L'interface d administration MEDIAplus Sommaire 1. L'interface d administration MEDIAplus... 5 2. Principes de l administration MEDIAplus... 8 2.1. Organisations et administrateurs...

Plus en détail

EXCEL PERFECTIONNEMENT CALCULS AVANCES

EXCEL PERFECTIONNEMENT CALCULS AVANCES TABLE DES MATIÈRES FORMATS... 2 Formats personnalisés... 2 ADRESSAGE DE CELLULES... 3 relatif & absolu Rappel... 3 Adressage par nom... 4 Valider avec la touche Entrée... 4 FONCTIONS SI-ET-OU... 6 LA FONCTION

Plus en détail

2 Grad Info Soir Langage C++ Juin 2007. Projet BANQUE

2 Grad Info Soir Langage C++ Juin 2007. Projet BANQUE 2 Grad Info Soir Langage C++ Juin 2007 Projet BANQUE 1. Explications L'examen comprend un projet à réaliser à domicile et à documenter : - structure des données, - objets utilisés, - relations de dépendance

Plus en détail

l'ordinateur les bases

l'ordinateur les bases l'ordinateur les bases Démarrage de l'ordinateur - Le bureau, mon espace de travail - J'utilise la souris - Ouvertes ou fermées, les fenêtres - Dans l'ordinateur, tout est fichier - Le clavier : écrire,

Plus en détail

Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation

Travaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation Université de Savoie Module ETRS711 Travaux pratiques Compression en codage de Huffman 1. Organisation du projet 1.1. Objectifs Le but de ce projet est d'écrire un programme permettant de compresser des

Plus en détail

L'instruction if permet d'exécuter des instructions différentes selon qu'une condition est vraie ou fausse. Sa forme de base est la suivante:

L'instruction if permet d'exécuter des instructions différentes selon qu'une condition est vraie ou fausse. Sa forme de base est la suivante: 420-183 Programmation 1 8. Les structures conditionnelles Dans l'écriture de tout programme informatique, une des premières nécessités que nous rencontrons est de pouvoir faire des choix. Dans une application

Plus en détail

Automatisation d'une Facture 4. Liste Déroulante Remises Case à cocher Calculs

Automatisation d'une Facture 4. Liste Déroulante Remises Case à cocher Calculs Dans la série Les tutoriels libres présentés par le site FRAMASOFT Automatisation d'une Facture 4 Liste Déroulante Remises Case à cocher Calculs Logiciel: Version: Licence: Site: OpenOffice.org Calc :

Plus en détail

Codage d information. Codage d information : -Définition-

Codage d information. Codage d information : -Définition- Introduction Plan Systèmes de numération et Représentation des nombres Systèmes de numération Système de numération décimale Représentation dans une base b Représentation binaire, Octale et Hexadécimale

Plus en détail

6. Hachage. Accès aux données d'une table avec un temps constant Utilisation d'une fonction pour le calcul d'adresses

6. Hachage. Accès aux données d'une table avec un temps constant Utilisation d'une fonction pour le calcul d'adresses 6. Hachage Accès aux données d'une table avec un temps constant Utilisation d'une fonction pour le calcul d'adresses PLAN Définition Fonctions de Hachage Méthodes de résolution de collisions Estimation

Plus en détail

TP 10.3.5a Notions de base sur le découpage en sous-réseaux

TP 10.3.5a Notions de base sur le découpage en sous-réseaux TP 10.3.5a Notions de base sur le découpage en sous-réseaux Objectif Identifier les raisons pour lesquelles utiliser un masque de sous-réseau. Faire la distinction entre un masque de sous-réseau par défaut

Plus en détail

Le générateur d'activités

Le générateur d'activités Le générateur d'activités Tutoriel Mise à jour le 09/06/2015 Sommaire A. Mise en route du Générateur d'activité... 2 1. Installation de Page... 2 2. Création des bases du générateur d'activités... 3 3.

Plus en détail

EXCEL TUTORIEL 2012/2013

EXCEL TUTORIEL 2012/2013 EXCEL TUTORIEL 2012/2013 Excel est un tableur, c est-à-dire un logiciel de gestion de tableaux. Il permet de réaliser des calculs avec des valeurs numériques, mais aussi avec des dates et des textes. Ainsi

Plus en détail

Algorithmique & Langage C IUT GEII S1. Notes de cours (première partie) cours_algo_lgc1.17.odp. Licence

Algorithmique & Langage C IUT GEII S1. Notes de cours (première partie) cours_algo_lgc1.17.odp. Licence Licence Algorithmique & Langage C Paternité - Pas d'utilisation Commerciale Partage des Conditions Initiales à l'identique 2.0 France Vous êtes libres : * de reproduire, distribuer et communiquer cette

Plus en détail

1 Année LMD-STSM Algorithmique et Programmation. Série de TD 2

1 Année LMD-STSM Algorithmique et Programmation. Série de TD 2 Série de TD 2 Exercice 2.1 Quel résultat produit le programme suivant? Var val, double : entier ; Val := 231 ; Double := Val * 2 ; Ecrire (Val) ; Ecrire (Double) ;. Exercice 2.2 Ecrire un programme qui

Plus en détail

Comment Utiliser les Versions, les Modification, les Comparaisons, Dans les Documents

Comment Utiliser les Versions, les Modification, les Comparaisons, Dans les Documents Comment Utiliser les Versions, les Modification, les Comparaisons, Dans les Documents Diffusé par Le Projet Documentation OpenOffice.org Table des Matières 1. Les Versions...3 2. Les Modifications...5

Plus en détail

Raisonnement par récurrence Suites numériques

Raisonnement par récurrence Suites numériques Chapitre 1 Raisonnement par récurrence Suites numériques Terminale S Ce que dit le programme : CONTENUS CAPACITÉS ATTENDUES COMMENTAIRES Raisonnement par récurrence. Limite finie ou infinie d une suite.

Plus en détail

LibreOffice Calc : introduction aux tableaux croisés dynamiques

LibreOffice Calc : introduction aux tableaux croisés dynamiques Fiche logiciel LibreOffice Calc 3.x Tableur Niveau LibreOffice Calc : introduction aux tableaux croisés dynamiques Un tableau croisé dynamique (appelé Pilote de données dans LibreOffice) est un tableau

Plus en détail

Excel avancé. Frédéric Gava (MCF) [email protected]

Excel avancé. Frédéric Gava (MCF) gava@univ-paris12.fr Excel avancé Frédéric Gava (MCF) [email protected] LACL, bâtiment P2 du CMC, bureau 221 Université de Paris XII Val-de-Marne 61 avenue du Général de Gaulle 94010 Créteil cedex Rappels et compléments

Plus en détail

YAPBA M. Logiciel libre de suivi de vos comptes

YAPBA M. Logiciel libre de suivi de vos comptes YAPBA M Logiciel libre de suivi de vos comptes Premières opérations A l'ouverture la première fois, on obtient cet écran. La première opération va être la création d'un compte. Comme aucun compte n'est

Plus en détail

Exercices de dénombrement

Exercices de dénombrement Exercices de dénombrement Exercice En turbo Pascal, un entier relatif (type integer) est codé sur 6 bits. Cela signifie que l'on réserve 6 cases mémoires contenant des "0" ou des "" pour écrire un entier.

Plus en détail

MODE OPERATOIRE OPENOFFICE BASE

MODE OPERATOIRE OPENOFFICE BASE MODE OPERATOIRE OPENOFFICE BASE Openoffice Base est un SGBDR : Système de Gestion de Base de Données Relationnelle. L un des principaux atouts de ce logiciel est de pouvoir gérer de façon efficace et rapide

Plus en détail

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation Complexité Objectifs des calculs de complexité : - pouvoir prévoir le temps d'exécution d'un algorithme - pouvoir comparer deux algorithmes réalisant le même traitement Exemples : - si on lance le calcul

Plus en détail

Interface PC Vivago Ultra. Pro. Guide d'utilisation

Interface PC Vivago Ultra. Pro. Guide d'utilisation Interface PC Vivago Ultra Pro Guide d'utilisation Version 1.03 Configuration de l'interface PC Vivago Ultra Configuration requise Avant d'installer Vivago Ultra sur votre ordinateur assurez-vous que celui-ci

Plus en détail

www.systhag-online.cm PREINSCRIPTION EN LIGNE

www.systhag-online.cm PREINSCRIPTION EN LIGNE UNIVERSITE DE DOUALA THE UNIVERSITY OF DOUALA www.systhag-online.cm PREINSCRIPTION EN LIGNE Guide de l'utilisateur Part. 1 (Mise à jour: 26 septembre 2012) 1 TABLE DES MATIERES I- AVANT DE COMMENCER 3

Plus en détail

Nombres, mesures et incertitudes en sciences physiques et chimiques. Groupe des Sciences physiques et chimiques de l IGEN

Nombres, mesures et incertitudes en sciences physiques et chimiques. Groupe des Sciences physiques et chimiques de l IGEN Nombres, mesures et incertitudes en sciences physiques et chimiques. Groupe des Sciences physiques et chimiques de l IGEN Table des matières. Introduction....3 Mesures et incertitudes en sciences physiques

Plus en détail

Installation de Windows 2000 Serveur

Installation de Windows 2000 Serveur Installation de Windows 2000 Serveur Introduction Ce document n'explique pas les concepts, il se contente de décrire, avec copies d'écran, la méthode que j'utilise habituellement pour installer un Windows

Plus en détail

STAGE IREM 0- Premiers pas en Python

STAGE IREM 0- Premiers pas en Python Université de Bordeaux 16-18 Février 2014/2015 STAGE IREM 0- Premiers pas en Python IREM de Bordeaux Affectation et expressions Le langage python permet tout d abord de faire des calculs. On peut évaluer

Plus en détail

Introduction : Cadkey

Introduction : Cadkey Introduction Cadkey Cadkey est un logiciel de dessin assisté par ordinateur. La fenêtre du logiciel devrait ressembler à quelque chose comme suit: Le menu supérieur: Redraw Autoscale Efface Modifier les

Plus en détail

Algorithmique et programmation : les bases (VBA) Corrigé

Algorithmique et programmation : les bases (VBA) Corrigé PAD INPT ALGORITHMIQUE ET PROGRAMMATION 1 Cours VBA, Semaine 1 mai juin 2006 Corrigé Résumé Ce document décrit l écriture dans le langage VBA des éléments vus en algorithmique. Table des matières 1 Pourquoi

Plus en détail

V- Manipulations de nombres en binaire

V- Manipulations de nombres en binaire 1 V- Manipulations de nombres en binaire L ordinateur est constitué de milliards de transistors qui travaillent comme des interrupteurs électriques, soit ouverts soit fermés. Soit la ligne est activée,

Plus en détail

les Formulaires / Sous-Formulaires Présentation...2 1. Créer un formulaire à partir d une table...3

les Formulaires / Sous-Formulaires Présentation...2 1. Créer un formulaire à partir d une table...3 Présentation...2 1. Créer un formulaire à partir d une table...3 2. Les contrôles :...10 2.1 Le contrôle "Intitulé"...11 2.2 Le contrôle "Zone de Texte"...12 2.3 Le contrôle «Groupe d options»...14 2.4

Plus en détail

Dans la série. présentés par le site FRAMASOFT

Dans la série. présentés par le site FRAMASOFT Dans la série Les tutoriels libres présentés par le site FRAMASOFT CRÉER DES EXERCICES AVEC JCLIC-AUTHOR Logiciel: JClic-author Plate-forme(s): Linux, Windows, Mac OS X Version: 0.1.1.9 Licence: GNU General

Plus en détail

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par

Plus en détail

Calculateur quantique: factorisation des entiers

Calculateur quantique: factorisation des entiers Calculateur quantique: factorisation des entiers Plan Introduction Difficulté de la factorisation des entiers Cryptographie et la factorisation Exemple RSA L'informatique quantique L'algorithme quantique

Plus en détail

La mémoire. Un ordinateur. L'octet. Le bit

La mémoire. Un ordinateur. L'octet. Le bit Introduction à l informatique et à la programmation Un ordinateur Un ordinateur est une machine à calculer composée de : un processeur (ou unité centrale) qui effectue les calculs une mémoire qui conserve

Plus en détail

Utiliser les supports d'exemplaires

Utiliser les supports d'exemplaires Utiliser les supports d'exemplaires Fiche technique PMB n 2.4.1 Les supports d'exemplaires permettent de définir des groupes de documents et de moduler les durées de prêt (quotas) pour ces différents groupes

Plus en détail

Guide de fonctions du téléphone du système SCI Norstar

Guide de fonctions du téléphone du système SCI Norstar Guide de fonctions du téléphone du système SCI Norstar Renseignements généraux Cette fiche sert de référence rapide pour accéder aux fonctions de votre poste. Votre coordinateur de système vous avisera

Plus en détail

Informatique Générale

Informatique Générale Informatique Générale Guillaume Hutzler Laboratoire IBISC (Informatique Biologie Intégrative et Systèmes Complexes) [email protected] Cours Dokeos 625 http://www.ens.univ-evry.fr/modx/dokeos.html

Plus en détail

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits Architecture des ordinateurs TD1 - Portes logiques et premiers circuits 1 Rappel : un peu de logique Exercice 1.1 Remplir la table de vérité suivante : a b a + b ab a + b ab a b 0 0 0 1 1 0 1 1 Exercice

Plus en détail

Représentation d un entier en base b

Représentation d un entier en base b Représentation d un entier en base b 13 octobre 2012 1 Prérequis Les bases de la programmation en langage sont supposées avoir été travaillées L écriture en base b d un entier est ainsi défini à partir

Plus en détail

Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS = 7 10 1 + 5 10 2 + 2 10 3

Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS = 7 10 1 + 5 10 2 + 2 10 3 8 Systèmes de numération INTRODUCTION SYSTÈMES DE NUMÉRATION POSITIONNELS Dans un système positionnel, le nombre de symboles est fixe On représente par un symbole chaque chiffre inférieur à la base, incluant

Plus en détail

Présentation du langage et premières fonctions

Présentation du langage et premières fonctions 1 Présentation de l interface logicielle Si les langages de haut niveau sont nombreux, nous allons travaillé cette année avec le langage Python, un langage de programmation très en vue sur internet en

Plus en détail

PRODIGE V3. Manuel utilisateurs. Consultation des métadonnées

PRODIGE V3. Manuel utilisateurs. Consultation des métadonnées PRODIGE V3 Manuel utilisateurs Consultation des métadonnées Pour plus d'information sur le dispositif : à remplir par chaque site éventuellement 2 PRODIGE V3 : Consultation des métadonnées SOMMAIRE 1.

Plus en détail

Définitions. Numéro à préciser. (Durée : )

Définitions. Numéro à préciser. (Durée : ) Numéro à préciser (Durée : ) On étudie dans ce problème l ordre lexicographique pour les mots sur un alphabet fini et plusieurs constructions des cycles de De Bruijn. Les trois parties sont largement indépendantes.

Plus en détail

Installation et Réinstallation de Windows XP

Installation et Réinstallation de Windows XP Installation et Réinstallation de Windows XP Vous trouvez que votre PC n'est plus très stable ou n'est plus aussi rapide qu'avant? Un virus a tellement mis la pagaille dans votre système d'exploitation

Plus en détail

Traitement numérique de l'image. Raphaël Isdant - 2009

Traitement numérique de l'image. Raphaël Isdant - 2009 Traitement numérique de l'image 1/ L'IMAGE NUMÉRIQUE : COMPOSITION ET CARACTÉRISTIQUES 1.1 - Le pixel: Une image numérique est constituée d'un ensemble de points appelés pixels (abréviation de PICture

Plus en détail

Introduction. I Étude rapide du réseau - Apprentissage. II Application à la reconnaissance des notes.

Introduction. I Étude rapide du réseau - Apprentissage. II Application à la reconnaissance des notes. Introduction L'objectif de mon TIPE est la reconnaissance de sons ou de notes de musique à l'aide d'un réseau de neurones. Ce réseau doit être capable d'apprendre à distinguer les exemples présentés puis

Plus en détail