Algorithmique et langages



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

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

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

Initiation à la programmation en Python

Programmation Objet - Cours II

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:

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

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.

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

Algorithmique avec Algobox

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

2 Grad Info Soir Langage C++ Juin Projet BANQUE

Recherche dans un tableau

I. Introduction aux fonctions : les fonctions standards

MS PROJECT Prise en main. Date: Mars Anère MSI. 12, rue Chabanais PARIS E mail : jcrussier@anere.com Site :

Cours d Informatique

Initiation à la comptabilité Hellodoc Niveau : normal à confirmé

Chapitre 2 Devine mon nombre!

Installation de Windows 2003 Serveur

LE PROBLEME DU PLUS COURT CHEMIN

Correction TD algorithmique

Application 1- VBA : Test de comportements d'investissements

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

LECON 2 : PROPRIETES DE L'AFFICHAGE Version aout 2011

EXCEL PERFECTIONNEMENT CALCULS AVANCES

Algorithme. Table des matières

LibreOffice Calc : introduction aux tableaux croisés dynamiques

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

Calculateur quantique: factorisation des entiers

Cours Informatique Master STEP

Premiers pas sur e-lyco

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES

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

Traitement de texte : Quelques rappels de quelques notions de base

Rapidolect Les Productions de la Columelle ( ) Page 1

IV- Comment fonctionne un ordinateur?

Une version javascript sera disponible directement dans le cours prochainement.

Algorithmique avec Algobox

avec des nombres entiers

La valeur actuelle d'un élément de parc informatique

Création d'un questionnaire (sondage)

TP 1. Prise en main du langage Python

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

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

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

RapidMiner. Data Mining. 1 Introduction. 2 Prise en main. Master Maths Finances 2010/ Présentation. 1.2 Ressources

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP


Manuel d'utilisation du client VPN Édition 1

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

Navigation dans Windows

Guide de l'utilisateur

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

Utiliser Access ou Excel pour gérer vos données

Comment bien démarrer avec. NetAirClub GUIDE ADMINISTRATEUR V1.5. Table des matières

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

PARCOURS COMPLET AU COURS MOYEN

Manuel utilisateur logiciel Salles. Version 1.1

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

CHAPITRE VIII : Les circuits avec résistances ohmiques

STAGE IREM 0- Premiers pas en Python

CRÉER UN COURS EN LIGNE

PRÉPARER LA PREMIÈRE ÉPREUVE ORALE D ADMISSION OPTION EPS. DEVOIRS SUPPLÉMENTAIRES 1 et 2

Installation de Windows 2000 Serveur

PREINSCRIPTION EN LIGNE

Chapitre 1 I:\ Soyez courageux!

Baccalauréat L spécialité, Métropole et Réunion, 19 juin 2009 Corrigé.

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

Installation et Réinstallation de Windows XP

Notice Générale - MODULE CLIENTS. I. Description générale du module. II. La liste des clients a. Accès

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

D'UN THÉORÈME NOUVEAU

Mon Compte Epargne Temps (CET) : manuel utilisateur

La responsabilité civile et l'entreprise

YAPBA M. Logiciel libre de suivi de vos comptes

1. Utilisation du logiciel Keepass

CORRECTION EXERCICES ALGORITHME 1

Cours 1 : Qu est-ce que la programmation?

KeePass - Mise en œuvre et utilisation

L informatique en BCPST

IMPORTATION, CRÉATION, MANIPULATION, EXPORTATION DE DONNÉES STATISTIQUES

Fiche animateur : module écriture collaborative

COPIER, COUPER, COLLER, SELECTIONNER, ENREGISTRER.

Votre appareil est configuré en usine pour permettre d'envoyer immédiatement des SMS.

LES NOMBRES DECIMAUX. I. Les programmes

VM Card. Manuel des paramètres des fonctions étendues pour le Web. Manuel utilisateur

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

La sauvegarde (backup) de votre comptabilité a pour but de vous permettre de retrouver vos données si un incident est survenu.

2. RAPPEL DES TECHNIQUES DE CALCUL DANS R

TRUECRYPT SUR CLEF USB ( Par Sébastien Maisse 09/12/2007 )

Projet de traitement d'image - SI 381 reconstitution 3D d'intérieur à partir de photographies

Cryptologie à clé publique

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

Guide de démarrage rapide

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

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Messages d'erreurs. Redémarrez votre PC en cliquant sur Démarrer, en sélectionnant ensuite Arrêter puis en cochant Redémarrer

Le générateur d'activités

Transcription:

BTS Informatique de gestion 1 re année Frédérique Parisot Algorithmique et langages Autocorrection 1 Directrice de publication : Valérie Brard-Trigo Les cours du Cned sont strictement réservés à l usage privé de leurs destinataires et ne sont pas destinés à une utilisation collective. Les personnes qui s en serviraient pour d autres usages, qui en feraient une reproduction intégrale ou partielle, une traduction sans le consentement du Cned, s exposeraient à des poursuites judiciaires et aux sanctions pénales prévues par le Code de la propriété intellectuelle. Les reproductions par reprographie de livres et de périodiques protégés contenues dans cet ouvrage sont effectuées par le Cned avec l autorisation du Centre français d exploitation du droit de copie (20, rue des Grands Augustins, 75006 Paris).

Sommaire Séquence 2 : Les différents types de données et leurs opérations de base 5 Séquence 3 : Les structures conditionnelles 29 Séquence 4 : Les structures itératives 53

Séquence 2 Les différents types de données et leurs opérations de base Exercice 1 Partie 1 Les trois familles de données et l opération d affectation Observer les opérations d'affectations suivantes. Lorsqu'une opération est correcte, donner son résultat, lorsqu'elle n'est pas correcte, expliquer pourquoi. nb1 (entier) nb2 (entier) nb3 (réel) bool1 (booléen) ch1 (chaîne[6]) ch2 (chaîne[4]) N de ligne Algo Résultat et explication 1 Saisir (nb1) Correct. Si l'utilisateur saisit bien un nombre entier, nb1 vaudra ce que l'utilisateur a saisi, sinon, le programme s'arrêtera, pour cause d'erreur. On apprendra plus tard en TP à gérer les erreurs de saisie et les erreurs de calcul. 2 nb3! nb2 + 1 Incorrect car nb2 n'a pas été initialisée, on essaie donc d'affecter à nb3 une valeur indéterminée à laquelle on rajoute 2. 3 nb2! nb1 Correct. nb2, suite à cette instruction, a la même valeur que nb1, qui est la valeur saisie par l'utilisateur en ligne 1. 4 nb1! 45 Correct. Suite à cette instruction, nb1 vaut 45. 5 nb2! 67.5 Incorrect car nb2 est de type entier et que 67.5 n'est pas un entier. Selon le langage de programmation utilisé pour traduire l'algorithme, soit le programme s'arrête en signalant une erreur, soit c'est seulement la partie entière de 67.5 (donc 67) qui est affectée à nb2, il y a dans ce cas perte d'information. 6 nb3! nb1 * 0.2 Correct. Un entier (nb1) multiplié par un réel (0.3) donne un réel et nb3 est un réel. 7 nb1! nb3 Incorrect. On peut ranger un entier dans un réel, mais pas l'inverse. Comme lors de l'instruction de la ligne 5, selon le langage de programmation utilisé, soit le programme s'arrête en signalant une erreur, soit c'est seulement la partie entière de nb3 qui est affectée à nb1. 8 3989 TG PA 01 5

Séquence 2 8 ch1! "maison" Correct. Suite à cette instruction, la chaîne ch1 contient "maison". 9 ch2! bool1 Incorrect. Ici l'erreur est double : on essaie de ranger un booléen dans une chaîne de caractères et en plus le booléen bool1 que l'on veut affecter à ch2 n'a pas été initialisé. 10 ch2! ch1 Cette affectation est algorithmiquement incorrecte. ch1 contient 6 caractères alors que ch2 ne peut en contenir que 4. Selon le langage de programmation utilisé, soit un message d'erreur s'affichera lors de l'exécution de cette instruction, indiquant un problème de taille, soit ch1 sera tronquée et ch2 contiendra alors "mais". 11 ch1! "Olé" Correct. ch1 vaut "olé" et les 3 caractères suivants de ch1 contiennent du vide. 12 ch2! ch1 Algorithmiquement incorrect. Ce n'est pas parce que ch1 ne contient que 3 caractères que ça n'est plus une chaîne de 6 caractères! À titre d'exemple, pour mieux illustrer les lignes 10 et 12 de l'algorithme précédent, je les ai écrites avec Windev et voici ce que cela donne : Le programme // Déclaration des données ch1 est une chaîne fixe sur 6 ch2 est une chaîne fixe sur 4 // Affectation ch1 = "maison" ch2 = ch1 // Affichage du résultat info (ch2) // Déclaration des données ch1 est une chaîne fixe sur 6 ch2 est une chaîne fixe sur 4 // Affectation ch1 = "olé" ch2 = ch1 // Affichage du résultat info (ch2) Son résultat Donc ça marche, bien que ça soit algorithmiquement incorrect. Moralité, quand on utilise des chaînes de caractères, mieux vaut bien réfléchir avant de préciser la longueur et dans le doute s'abstenir en déclarant par exemple ch1 (chaîne), ch2 (chaîne) sans préciser la longueur si ça n'est pas indispensable. 6

Les différents types de données et leurs opérations de base Ce qui, une fois programmé, donne : Le programme Son résultat ch1 est une chaîne ch2 est une chaîne ch1 = "maison" ch2 = ch1 info (ch2) ch1 est une chaîne ch2 est une chaîne ch1 = "olé" ch2 = ch1 info (ch2) 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 et les retenues représentent 1/10 du salaire brut. La règle de calcul du salaire net est la suivante : salaire net = (indice * valeur du point) (1 taux de retenue). Ici, 1- taux de retenue a pour valeur 0.9. Dans cet algo, on peut considérer que la valeur du point est une constante ainsi que les retenues. Il y a plusieurs façons plus ou moins élaborées de gérer le fait que certaines données soient des constantes. La façon la plus sommaire consiste à les utiliser tel quel dans les calculs, ce qui donne la version suivante. indice (entier, saisi) : indice du fonctionnaire en nombre de points. Algo exercice 2 Calcul de salaire Afficher ("Saisissez l'indice de l'employé :") Saisir (indice) Afficher ("Indice =", indice) Afficher ("Prix du point = 10.5") Afficher ("Taux de retenue = 0.1") Afficher ("Salaire brut = ", indice * 10.5) Afficher ("Salaire net = ", indice * 10.5 * 0.9) 7

Séquence 2 L'inconvénient de cette façon de faire est le suivant : imaginez que dans sa grande bonté, le patron décide de faire passer le prix du point de 10.5 à 12, et que le taux de retenue passe à 0,12. Il vous en avertit, vous, l'informaticien(ne) chargé(e) de la maintenance des programmes, afin que vous fassiez la modification adéquate. Avec cette façon sommaire de faire, vous vous retrouvez avec 4 lignes d'instructions à modifier. Imaginez alors avec un programme plus volumineux! Pour éviter cet inconvénient, il est préconisé de faire plutôt comme suit : indice (entier, saisi) : indice du fonctionnaire en nombre de points. valpoint(réel, constante) = 10.5 : valeur du point. retenue (réel, constante) = 0.1 : taux de retenue. Algo exo 2 Version plus évoluée Afficher ("Saisissez l'indice de l'employé :") Saisir (indice) Afficher ("Indice =", indice) Afficher ("Prix du point =", valpoint) Afficher ("Taux de retenue =", retenue) Afficher ("Salaire brut = ", indice * valpoint) Afficher ("Salaire net = ", indice * valpoint * (1 - retenue) De cette manière, en cas de modification de la valeur d'une des 2 constantes, il n'y a qu'une seule modification à faire, lors de la déclaration de la constante. Maintenant, cet algo comporte un autre défaut. Vous pourrez remarquer en effet que l'on calcule 2 fois le salaire brut : la première fois, lors de l'instruction Afficher ("Salaire brut = ", indice * ValPoint), et la deuxième fois, dans le calcul du salaire net : indice * ValPoint * (1 - Retenue). En fait, le salaire net vaut le salaire brut * (1 - retenue). Faire plusieurs fois le même calcul qui utilise les mêmes valeurs est un défaut car cela sollicite plusieurs fois le processeur pour rien. Ce qu'il faut faire : c'est effectuer une seule fois le calcul et ranger son résultat dans une variable que l'on utilise chaque fois qu'on en a besoin. Ce qui, dans notre algo, donne : indice (entier, saisi) : indice du fonctionnaire en nombre de points. valpoint(réel, constante) = 10.5 : valeur du point. retenue (réel, constante) = 0.1 : taux de retenue. salairebrut (réel, calculé) : salaire brut de l'employé, calculé en fonction du nombre de points et de la valeur du point. Algo exo 2 Promis, c'est la dernière version Afficher ("Saisissez l'indice de l'employé :") Saisir (indice) salairebrut indice * valpoint Afficher ("Indice =", indice) Afficher ("Prix du point =", valpoint) Afficher ("Taux de retenue =", retenue) Afficher ("Salaire brut = ", salairebrut) Afficher ("Salaire net = ", salairebrut * (1 - retenue) fin Voilà. Là, on ne sollicite pas 2 fois le processeur pour le même calcul. Il est tout beau notre algo. 8

Les différents types de données et leurs opérations de base Je voudrais profiter de la place qui reste sur cette page blanche pour attirer votre attention sur la façon dont on nomme les variables dans nos algos. Dans l'exo précédent, vous avez peut-être remarqué que certaines variables n'ont pas de majuscule (comme par exemple la variable indice), et que d'autres variables comportent une ou plusieurs majuscules (comme par exemple valpoint). Je vous explique les deux principes que j'utilise pour créer les noms des variables : les noms des variables commencent par une minuscule ; quand le nom de la variable est composé de plusieurs mots ou plusieurs morceaux de mots, je mets une majuscule au début de chaque mot ou début de mot afin qu'on puisse rapidement les repérer, sauf pour le premier mot ou morceau de mot constituant le nom de la variable. Par exemple, le nom de variable valpoint est composé d'un bout de mot (val pour dire valeur) et d'un mot (Point, pour dire point). Cela nous permet de nous rappeler que cette variable valpoint contient la valeur du point. Vous n'êtes pas obligés d'appliquer ce principe, mais je vous conseille, si ce principe là ne vous convient pas, d'en trouver un qui vous permette de vous y retrouver. Mais surtout, évitez au maximum d'appeler vos variables avec des noms comme x, y ou z, car cela enlève beaucoup de lisibilité aux algorithmes et aux programmes. 9

Séquence 2 Exercice 3 Partie 2 Les données de type numérique et leurs opérations de base 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. Alors là, vous devez vous dire : «alors elle nous dit de ne pas appeler nos variables x, y ou z et dans le premier exo qui suit, elle appelle ses variables x, y et z.» Oui, c'est vrai. Mais cet exercice ne vous renseigne en rien sur le rôle des variables. C'est seulement un exo qui a pour but de vous faire manipuler les opérations de base. Avant l'opération Opération Après l'opération x =? (x a été uniquement déclarée, mais pas encore initialisée.) x = 2 y = 5 x = 5 y = 5 z = 3 x = 7 y = 5 x! 2 x! y x! y + z -1 x! x DIV y x = 2 (fastoche!) x = 5, y = 5. Oui, y écrase la valeur de x avec sa propre valeur; donc, maintenant, x = y. x = 7, y = 5, z = 3. Seule x est modifiée par cette instruction. Les 2 autres variables conservent leur valeur initiale. x = 1, y = 5. Seule x est modifiée par cette instruction. x est remplacée par elle-même divisée par 5 (7 DIV 5 = 1). Exercice 4 Donnez la valeur de toutes les variables à chaque instruction. 1. X 27 MOD 4 X = 3 (car 27 div 4 = 6 et il reste 3) Y X * 2 Y = 6 Z 301 DIV X Z = 100 Y ENT(Z / Y) Y = 16 (100/6 = 16,66, partie entière de 100/6 = 16) 2. X 3 ^ 2 X = 9 Z 3 Z = 3 Y X ^ (10 DIV Z) Y = 9 3 = 729 (10 div 3 = 3) 10

Les différents types de données et leurs opérations de base Exercice 5 Soient 2 variables réelles x et y, saisies au clavier par l'utilisateur. Écrire l'algorithme permettant de permuter les valeurs de x et y, et d'afficher ces nouvelles valeurs. nb1(entier, saisi) : premier nombre à échanger. nb2 (entier, saisi) : second nombre à échanger. nbtemp (entier, calculé) : variable temporaire utilisée pour l'échange. Algo exo 5 Permutation Afficher ("Saisir premier nombre") Saisir (nb1) Afficher ("Saisir second nombre") Saisir (nb2) // Avant d'effectuer l'échange, on stocke nb1 dans // une variable temporaire pour ne pas le perdre nbtemp! nb1 // On effectue la première étape de l'échange : on "écrase" nb1 // avec nb2 nb1! nb2 // Deuxième étpae de l'échange : on redonne à nb2 l'ancienne // valeur de nb1, qui est dans nbtemp nb2! nbtemp Afficher ("Après échange, le premier nombre vaut", nb1) Afficher ("et le second nombre vaut", nb2) Remarque : Pour l'échange, on aurait très bien pu utiliser la séquence d'instructions suivante : nbtemp! nb2 nb2! nb1 nb1! nbtemp, Quelle que soit la façon choisie, on effectue réellement l'échange. Pour écrire cet algo, il y a une autre solution qui consiste à uniquement simuler l'échange, juste au moment de l'affichage. nb1(entier, saisi) : premier nombre à échanger. nb2 (entier, saisi) : second nombre à échanger. Algo exo 5 Version où on simule l'échange des valeurs Afficher ("Saisir premier nombre") Saisir (nb1) Afficher ("Saisir second nombre") Saisir (nb2) // On simule l'échange lors de l'affichage Afficher ("Après échange, le premier nombre vaut", nb2) Afficher ("et le second nombre vaut", nb1) 11

Séquence 2 On aurait pu faire aussi : nb1(entier, saisi) : premier nombre à échanger. nb2 (entier, saisi) : second nombre à échanger. Algo exo 5 Une autre version où l'échange est simulé // On prépare la simulation de l'échange dès la saisie Afficher ("Saisir premier nombre") Saisir (nb2) Afficher ("Saisir second nombre") Saisir (nb1) // Et il ne reste plus qu'à afficher Afficher ("Après échange, le premier nombre vaut", nb1) Afficher ("et le second nombre vaut", nb2) Remarque : faire réellement l'échange ou le simuler est un choix à faire en fonction des besoins que l'on a dans notre programme. Si on a effectivement besoin que les valeurs saisies soient échangées, alors il faut écrire ces instructions d'échange, sinon, une simple simulation suffit. Exercice 6 Même consigne que l'exercice 5, mais sans utiliser de variable intermédiaire, uniquement par calcul entre les 2 variables. nb1(entier, saisi) : premier nombre à échanger. nb2 (entier, saisi) : second nombre à échanger. Algo exo 6 Échange casse-tête chinois Afficher ("Saisir premier nombre") Saisir (nb1) Afficher ("Saisir second nombre") Saisir (nb2) // Echange par calcul nb1! nb2 + nb1 nb2! nb1 nb2 nb1! nb1 nb2 Afficher ("Après échange, le premier nombre vaut", nb1) Afficher ("Après échange, le second nombre vaut", nb2) Quelle salade, hein! 12

Les différents types de données et leurs opérations de base Décomposons ce qui se passe. Instruction nb1 nb2 + nb1 Explication Après cette instruction, on a à notre disposition pour l'échange deux valeurs : nb2 + nb1 et nb2 Pour plus de clarté, appelons nb1 par 2 noms : nouveaunb1 et anciennb1. Ici, on a : nouveaunb1 = nb2 + anciennb1 nb2 nb1 nb2 nouveaunb1 nb2 = nb2 + anciennb1 nb2, puisque nouveaunb1 = nb2 + anciennb1 Donc, maintenant, nouveaunb2 = anciennb1, on vient de faire une partie de l'échange. nb1 nb1 nb2 Ça va? nouveaunb1 = nouveaunb1 nouveaunb2 Or, nouveaunb2 = anciennb1 Donc, nouveaunb1 = nouveaunb1 anciennb1 = anciennb2 + anciennb1 anciennb1 = anciennb2, on vient d'effectuer l'autre partie de l'échange. Pour mieux comprendre que ça marche effectivement, faisons tourner l'algo précédent à la main avec un exemple : on suppose que l'utilisateur saisit 4 pour nb1 et 9 pour nb2. Algo Nb1 Nb2 Résultat à l'affichage?? Afficher ("Saisir premier nombre") Saisir (nb1) 4? Saisir premier nombre Afficher ("Saisir second nombre") 4 Saisir second nombre Saisir (nb2) 4 9 nb1! nb2 + nb1 13 9 nb2! nb1 nb2 13 4 nb1! nb1 nb2 9 4 Afficher ("Après échange, le premier nombre vaut", nb1) Afficher ("Après échange, le second nombre vaut", nb2) Après échange, le premier nombre vaut 9 Après échange, le second nombre vaut 4 Magique! Ça marche aussi même si les nombres saisis sont négatifs, vous pouvez essayer si vous n'êtes pas convaincus. 13

Séquence 2 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. Cet algo calcule et affiche la moyenne pondérée des 3 notes saisies. 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 Afficher ("Donner la note obtenue à l'épreuve 1 : ") Saisir (note1) Afficher ("Donner la note obtenue à l'épreuve 2 : ") Saisir (note2) Afficher ("Donner la note obtenue à l'épreuve 3 : ") Saisir (note3) total! (note1 * coef1 + note2 * coef2 + note3 * coef3) / coef 1 + coef 2 + coef 3 Afficher ("Epreuve 1 ", note1," ",coef1) Afficher ('Epreuve 2 ', note2,' ',coef2) Afficher ('Epreuve 3 ', note3,' ',coef3) Afficher ("Le total est de :", total) 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. Cet informaticien a mal décomposé les différentes instructions. Trouvez la ou les instructions manquantes et insérez-la ou insérez-les au bon endroit. Ce qui manquait, bien sûr, c'est l'instruction qui calcule le prix TTC. Voici l'algo corrigé (j'ai indiqué en caractères gras l'instruction manquante) : Algo Comptabilité Afficher("Entrer le prix hors taxe ") Saisir (PrixHT) TVA PrixHT * TAUX PrixTTC! PrixHT + TVA Afficher ("La TVA est de :", TVA) Afficher ("Le prix T.T.C. est de :", PrixTTC) 14

Les différents types de données et leurs opérations de base Exercice 9 Écrire 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é. nom (chaîne, saisie) : nom de l'employé. salhor (réel, saisi) : salaire horaire. nbh (entier, saisi) : nombre d'heures travaillées. tauxret (réel, saisi) : Taux de retenue. prime (réel, saisi) : prime. Algo exo 9 Calcul du salaire net Afficher ("Saisissez le nom de l'employé") Saisir (nom) Afficher ("Saisissez le salaire horaire") Saisir (salhor) Afficher ("Saisissez le nombre d'heures travaillées") Saisir (nbh) Afficher ("Saisissez le taux de retenue") Saisir (tauxret) Afficher ("Saisissez le montant de la prime") Saisir (prime) Afficher ("L'employé (e) ", nom, " doit percevoir un salaire net de ", (nbh * salhor + prime)*(1 tauxret), "euros.") Nous reprendrons cet exercice dans la séquence 4, afin de le généraliser à plusieurs employés. 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. 15

Séquence 2 Il fallait, pour obtenir le résultat escompté, diviser le nombre saisi par 3600, ce qui donnait le nombre d'heures, et diviser ensuite le reste par 60 pour obtenir le nombre de minutes. temps (entier, saisi) : temps à convertir. nbh (entier, calculé) : nombre d'heures. nbmin (entier, calculé) : nombre de minutes. nbsec(entier, calculé) : nombre de secondes. Algo exo 10 Traduction temps Afficher ("Saisissez le temps à convertir") Saisir (temps) // Calcul du nombre d'heures nbh! temps div 3600 // Calcul du nombre de minutes nbmin! (temps mod 3600) div 60 // Calcul du nombre de secondes nbsec! (temps mod 3600) mod 60 Afficher ("Nombre d'heures, de minutes et de secondes contenues dans ", temps, "secondes :", nbh, " heure(s) ", nbmin, " minute(s) ", nbsec, " secondes.") Cette version de corrigé n'est pas très optimisée, car on peut constater qu'on effectue 2 fois le même calcul : temps mod 3600. Pour améliorer notre algo, on va créer une nouvelle variable qu'on appellera par exemple reste, dans laquelle on rangera une fois pour toutes le résultat du calcul temps mod 3600. On aurait pu également ne pas créer de variable pour stocker le nombre d'heures, de minutes et de secondes puisqu'on ne les utilise qu'une fois, cela complique un peu l'instruction d'affichage mais elle reste encore tout à fait lisible. Algo exo 10 Traduction temps Version 2 temps (entier, saisi) : temps à convertir. reste (entier, calculé) : reste de la division entière de temps par 3600. Afficher ("Saisissez le temps à convertir") Saisir (temps) reste! temps mod 3600 Afficher ("Nombre d'heures, de minutes et de secondes contenues dans ", temps, "secondes :", temps div 3600, " heure(s) ", reste div 60, " minute(s) ", reste mod 60, " secondes.") Exercice 11 Écrire l algorithme qui permet d effectuer des permutations suivant l'exemple ci-dessous : AVANT : X = 1 Y = 2 Z = 3 APRÈS : X = 3 Y = 1 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. Dans notre algorithme, on va donc avoir les 3 instructions suivantes : x! z, y! x et z! y. 16

Les différents types de données et leurs opérations de base Mais attention, on ne peut pas faire ces permutations comme ça, sans respecter un ordre précis et sans sauvegarder les valeurs. x, y, z (entiers, saisis) : nombres à permuter. temp (entier, calculé) : variable temporaire utilisée pour la permutation. Algo exo 11 Permutation Afficher ("Saisissez les 3 nombres à permuter") Saisir (x, y, z) temp! x x! z z! y y! temp On peut aussi résoudre ce problème de permutation par calcul. Voici ci-dessous la solution. Algo exo 11 Permutation Version par calcul x, y, z (entiers, saisis) : nombres à permuter. Afficher ("Saisissez les 3 nombres à permuter") Saisir (x, y, z) x! x + y + z y! x y z z! x y z x! x y 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 18. Le moyen d'obtenir le nombre pair égal ou immédiatement inférieur au nombre saisi est la division entière par 2. En effet, seuls les nombres divisibles par 2 sont pairs. Exemple : soit 17 le nombre saisi, si je lui applique la division entière par 2, cela me donne 8 et il me suffit de re-multiplier ce nombre par 2 pour obtenir le nombre pair immédiatement inférieur au nombre initialement saisi. 17

Séquence 2 nombre (entier, saisi) : nombre à manipuler. Algo exo 12 Astuce du jour Afficher ("Saisissez le nombre") Saisir (nombre) Afficher ("Le nombre pair immédiatement inférieur au nombre que vous avez saisi est ", (nombre div 2) * 2) On pouvait utiliser une autre formule pour calculer le bon nombre : nombre (nombre mod 2). 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. Pour obtenir le résultat escompté, il faut effectuer des divisions successives de la somme par 100, puis 50 sans oublier, entre chaque division, de déduire le montant que l'on vient de décomposer. Exemple : soit 745, la somme à décomposer. 745 div 100 donne le nombre de billets de 100, soit 7 billets. Il reste ensuite 45 euros à décomposer, soit 745 700 qui s'obtient par l'expression 745 mod 100 (le reste de la division entière par 100). 45 div 50 donne le nombre de billets de 50, qui ici est 0, 45 mod 50 donne la somme restant à décomposer, à savoir 45. 45 div 10 = 4 (c'est le nombre de pièces de 10), 45 mod 10 = 5. 5 div 5 = 1 (nombre de pièces de 5), 5 mod 5 = 0 (nombre de pièces de 1). Après chaque division entière, il faut récupérer le reste de la division pour pouvoir faire la division entière suivante : on peut, pour ce faire, modifier la valeur de la somme après chaque division (par exemple, l'instruction somme! somme mod 100 nous permet de récupérer dans somme la somme restant à décomposer après avoir calculé le nombre de billets de 100). 18

Les différents types de données et leurs opérations de base somme (entier, saisi) : somme à décomposer. nb100 (entier, calculé) : nombre de billets de 100. nb50 (entier, calculé) : nombre de billets de 50. nb10 (entier, calculé) : nombre de pièces de 10. nb5 (entier, calculé) : nombre de pièces de 5. nb1 (entier, calculé) : nombre de pièces de 1. Algo décompo Afficher ("Saisir la somme à décomposer") Saisir (somme) nb100! somme div 100 // Ici, on remplace la somme par le montant // restant à décomposer 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 Afficher (nb100, " billet(s) de 100") Afficher (nb50, " billet(s) de 50") Afficher (nb10, " pièce(s) de 10") Afficher (nb5, " pièce(s) de 5") Afficher (nb1, " pièce(s) de 1") Une remarque concernant l'affichage : afficher "billet(s) de 50" et "pièce(s) de 5" est inutile, on aurait dû écrire "billet de 50" et "pièce de 5" car on ne peut jamais avoir plus d'un billet de 50, ni plus d'une pièce de 5. Une autre remarque : au lieu de créer une variable pour chaque nombre de pièces et de billets, on pourrait afficher les résultats au fur et à mesure, comme ci-dessous. Algo décompo version 2 somme (entier, saisi) : somme à décomposer. Afficher ("Saisir la somme à décomposer") Saisir (somme) Afficher (somme div 100, " billet(s) de 100") somme! somme mod 100 Afficher (somme div 50, " billet de 50") somme! somme mod 50 Afficher (somme div 10, " pièce(s) de 10") somme! somme mod 10 Afficher (somme div 5, " pièce de 5") Afficher (somme mod 5, " pièce(s) de 1") Une dernière remarque : quelle que soit la version de corrigé, cet algo n'est absolument pas optimisé car pour le moment vous n'avez pas les connaissances requises. Nous le reprendrons dans un chapitre ultérieur et vous verrez qu'il prendra seulement quelques lignes. 19

Séquence 2 Exercice 14 Partie 3 Les chaînes de caractères et leurs opérations Traduction des mots en code secret. On l'a tous fait quand on était petit! Écrire 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 106 111 117 114. Remarque : Les nombres 106, 111, 117 et 114 sont respectivement les codes ascii des caractères j, o, u, et r. La difficulté de cet algo réside dans le découpage caractère par caractère de la chaîne de caractères saisie par l'utilisateur. On doit en effet découper cette chaîne de caractères pour pouvoir ensuite appliquer la fonction ascii à chacun d'entre eux. Le plus simple pour effectuer ce découpage est d'utiliser la notation mot[1], mot[2], mot[3], mot[4], qui isole respectivement le premier, le second, le troisième et le quatrième caractère du mot à coder. Il suffit ensuite d'appliquer la fonction ascii à chacun des caractères du mot. Par exemple, le code numérique du premier caractère du mot s'obtient à l'aide de la notation ascii (mot[1]). Ce qui donne le petit algo suivant : mot (chaîne[4], saisie) : mot à coder. ascii (fonction, résultat : entier) : retourne le code ascii du caractère passé en paramètre. Algo exo 14 Code secret Afficher ("Saisissez le mot de 4 lettres à coder") Saisir (mot) Afficher ("Le code secret du mot ", mot, " est ", ascii (mot[1]) + " " + ascii (mot[2]) + " " + ascii (mot[3]) + " " + ascii(mot[4]) On aurait pu remplacer la notation mot[1], mot[2] etc. par l'utilisation de la fonction souschaine, ce qui, par exemple, pour le 3 e caractère du mot, aurait donné ascii (souschaine(mot,3,1)), mais cela alourdit la notation et ne présente aucun intérêt, cependant, cela reste juste. 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). 20

Les différents types de données et leurs opérations de base 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. Ecrivez 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. mot (chaîne[3], saisie) : mot à crypter. chr (fonction, résultat : caractère) : retourne le caractère correspondant au code ascii passé en paramètre. ascii (fonction, résultat : entier) : retourne le code ascii du caractère passé en paramètre. Algo exo 15 Cryptage Afficher ("Saisir le mot de 3 lettres à crypter") Saisir (mot) Afficher ("Le mot ", mot, "une fois crypté devient :", mot[3]+chr (219 ascii (mot[3])) + mot[2]+ chr (219 ascii (mot[2])) + mot[1] + chr (219 ascii (mot[1])) Remarque : nous reprendrons l'exercice 14 et l'exercice 15 dans des séquences ultérieures, pour les généraliser à des mots ou des phrases de n'importe quelle longueur. 21

Séquence 2 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)? 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. nom (chaîne, saisie) : nom de la personne. prenom (chaîne, saisie) : prénom de la personne. datenais (chaîne, saisie) : date de naissance de la personne. journais (entier, calculé) : jour de naissance de la personne. moisnais (entier, calculé) : mois de naissance de la personne. annnais (entier, calculé) : année de naissance de la personne. age (entier, calculé) : age de la personne. val (fonction, résultat : entier) : convertit en numérique la chaîne de caractères passée en paramètre. souschaine (fonction, résultat : chaîne) : retourne une partie de la chaîne passée en paramètre, à partir de la position passée en paramètre et de la longueur passée en paramètre. joursysteme (fonction, résultat : entier) : renvoie le jour de la date du jour. moissysteme (fonction, résultat : entier) : renvoie le mois de la date du jour. anneesysteme (fonction, résultat : entier) : renvoie l'année de la date du jour. Algo exo 16 Calcul de l'âge Afficher ("Quel est votre nom?") Saisir (nom) Afficher ("Quel est votre prénom?") Saisir (prenom) Afficher ("Quel est votre date de naissance (jj/mm/ aaaa)?") Saisir (datenais) // Découpage de la date de naissance journais! val (souschaine (datenais,1,2)). moisnais! val (souschaine (datenais,4,2)) annnais! (souschaine (datenais,7,4)). // Calcul de l'âge age! ent ((joursystème - journais + (moissystème moisnais) * 365,25/12 + (annéesystème annnais) *365,25) / 365,25) // Affichage Afficher ("Vous vous appelez ", prenom[1], ".", nom, " et vous avez", age, "ans.") Vous avez remarqué que pour l'initiale du prénom, au lieu de s'embêter à utiliser la fonction sous- Chaine, on s'est contenté d'utiliser la notation prenom[1], cette donnée représentant le premier caractère de la chaîne prenom. Dans cet algo, on a également supposé que l'utilisateur ne faisait pas d'erreur de saisie concernant le format de la date. Ce type de contrôle de validité des informations saisies est très important mais grandement facilité avec des produits comme Windev, vous le verrez en TP. 22

Les différents types de données et leurs opérations de base Pour que l'algo fasse moins de lignes, on aurait pu l'écrire comme suit, en n'utilisant pas les variables intermédiaires journais, moisnais, annnais. Algo exo 16 Calcul de l'âge Version 2 nom (chaîne, saisie) : nom de la personne. prenom (chaîne, saisie) : prénom de la personne. datenais (chaîne, saisie) : date de naissance de la personne. age (entier, calculé) : âge de la personne. val (fonction, résultat : entier) : convertit en numérique la chaîne de caractères passée en paramètre. souschaine (fonction, résultat : chaîne) : retourne une partie de la chaîne passée en paramètre, à partir de la position passée en paramètre et de la longueur passée en paramètre. joursysteme (fonction, résultat : entier) : renvoie le jour de la date du jour. moissysteme (fonction, résultat : entier) : renvoie le mois de la date du jour. anneesysteme (fonction, résultat : entier) : renvoie l'année de la date du jour. Afficher ("Quel est votre nom?") Saisir (nom) Afficher ("Quel est votre prénom?") Saisir (prénom) Afficher ("Quel est votre date de naissance (jj/mm/aaaa)?") Saisir (datenais) // Calcul de l'âge age! ent ((JourSysteme val (souschaine (datenais,1,2)) + (moissysteme val (souschaine (datenais,4,2))) * 365,25/12 + (anneesysteme val (souschaine (datenais,7,4))) * 365,25)) / 365,25) // Affichage Afficher ("Vous vous appelez ", prenom[1], ".", nom, " et vous avez", age, "ans.") Pour économiser encore plus de lignes d'instructions, on aurait carrément pu écrire l'algo comme suit, en n'utilisant pas de variable intermédiaire pour l'âge, et en mettant le calcul de l'âge directement dans l'instruction d'affichage. Algo exo 16 Calcul de l'âge Version 3 nom (chaîne, saisie) : Nom de la personne. prenom (chaîne, saisie) : Prénom de la personne. datenais (chaîne, saisie) : Date de naissance de la personne. val (fonction, résultat : entier) : convertit en numérique la chaîne de caractères passée en paramètre. souschaine (fonction, résultat : chaîne) : retourne une partie de la chaîne passée en paramètre, à partir de la position passée en paramètre et de la longueur passée en paramètre. joursysteme (fonction, résultat : entier) : renvoie le jour de la date du jour. moissysteme (fonction, résultat : entier) : renvoie le mois de la date du jour. anneesysteme (fonction, résultat : entier) : renvoie l'année de la date du jour. Afficher ("Quel est votre nom?") Saisir (nom) Afficher ("Quel est votre prénom?") Saisir (prenom) Afficher ("Quel est votre date de naissance (jj/mm/aaaa)?") Saisir (datenais) // Calcul de l'âge et Affichage Afficher ("Vous vous appelez", prenom[1], ".", nom, " et vous avez", ent ((joursysteme val (souschaine (datenais,1,2)) + (moissysteme val (souschaine (datenais,4,2))) * 365,25/12 + (anneesysteme val (souschaine (datenais,7,4))) * 365,25)) / 365,25),"ans.") 23

Séquence 2 Mais attention, à force de vouloir concentrer les algorithmes et les programmes qui en découlent, ceux-ci finissent par perdre de la lisibilité et deviennent donc difficile à relire pour modification ou correction. Il vaut donc mieux parfois introduire des variables intermédiaires qui feront en sorte que les algos et les programmes restent clairs lors d'une relecture. Bon, il ne reste plus qu'à programmer tout ça. On va se régaler! Exercice 17 Partie 4 Les boléens et leurs opérations de base, NON, ET, OU 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 : Rappel : a = je suis blonde b = j'ai les yeux bleus c = je m'appelle Gudule Dans la réalité, je suis brune, donc a est faux (je ne suis pas blonde), j'ai les yeux bleus, donc b est vrai et je m'appelle Frédérique (donc c est faux car je ne m'appelle pas Gudule) : non(a ou b) c'est-à-dire non a et non 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 a b c non a non b non c a ou b a et b F V F V F V V F F V F 24

Les différents types de données et leurs opérations de base Exercice 18 Soient 4 booléens a, b, c, d. Calculez la négation des expressions booléennes suivantes. Il n'y a bien entendu pas qu'une seule façon de calculer la négation d'une expression booléenne, par contre, il n'y a qu'un seul résultat possible. Si vous ne trouvez pas le même résultat que moi, c'est soit que vous avez fait une erreur de calcul, soit que vous n'avez pas suffisamment simplifié le résultat que vous avez trouvé. non (a ou b) non (a et b) Expression non (non (a ou b)) c'est-à-dire a ou b non (non (a et b)) c'est-à-dire a et b non a ou non b non (non a ou non b ) c'est-à-dire non non a et non non b c'est-à-dire a et b Négation de l'expression non a et non b non (non a et non b) c'est-à-dire non non a ou non non b c'est-à-dire a ou b a ou a a et (a ou b) non (a ou a) c'est-à-dire non a non (a et (a ou b)) c'est-à-dire non a ou non (a ou b) c'est-à-dire non a ou non a et non b c'est-à-dire enfin non a On pouvait utiliser tout de suite la loi d'absorption pour arriver au résultat, cet exemple vous montre que même si on ne voit pas tout de suite les règles de simplification, on peut parvenir au résultat. (a et a) ou (a et b) non ((a et a) ou (a et b)) c'est-à-dire non a et non (a et b) c'est-à-dire non a et (non a ou non b) c'est-à-dire non a et non a ou non a et non b c'est-à-dire non a ou non a et non b c'est-à-dire enfin non a Même remarque que ci-dessus. a ou (a et b) non (a ou (a et b)) c'est-à-dire non a (a ou a) et (a ou b) non ((a ou a) et (a ou b)) c'est-à-dire non a (a ou b) et (c ou d) non ((a ou b) et (c ou d)) c'est-à-dire non (a ou b) ou non (c ou d) c'est-à-dire non a et non b ou non c et non d 25

Séquence 2 (a et c) ou (a et d) ou (b et c) ou (b et d) non ((a et c) ou (a et d) ou (b et c) ou (b et d)) c'est-à-dire non ((a ou b) et (c ou d)) c'est-à-dire non (a ou b) ou non (c ou d) c'est-à-dire non a et non b ou non c et non d (a et b) ou (c et d) non((a et b) ou (c et d)) c'est-à-dire non(a et b) et non(c et d) c'est-à-dire non a ou non b et non c ou non d (a ou c) et (a ou d) et (b ou c) et (b ou d) Même résultat que ci-dessus. 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) a ou (x < y) Expression non(a ou (x < y)) c'est-à-dire non a et non x < x c'est-à-dire non a et x >= y Négation de l'expression c ou (x > y ou x = y) non(c ou (x > y ou x = y) c'est-à-dire non c et non(x > y ou x = y) c'est-à-dire non c et non x > y et non x = y c'est-à-dire non c et x <= y et x <> y c'est-à-dire non c et x < y. Ici, on peut enlever x <> y car il est contenu dans x > y qui signifie que x est supérieur à y et différent de y. c ou (z > y ou z = y) non(c ou (z > y ou z = y)) c'est-à-dire non c et non(z > y ou z = y) c'est-à-dire non c et non z > y et non z = y c'est-à-dire non c et z <= y et z <> y c'est-à-dire non c et z < y x > y et z <> 0 non (x > y et z <> 0) c'est-à-dire non (x > y) ou non (z <> 0) c'est-à-dire (x <= y ou z = 0) y = 4 ou (y + 2 = x et z <> 5) non (y = 4 ou (y + 2 = x et z <> 5)) c'est-à-dire non (y = 4) et non (y + 2 = x et z <> 5) c'est-à-dire non (y = 4) et (non y + 2 = x ou non z <> 5) c'est-à-dire y <> 4 et (y + 2 <> x ou z =5) 26

Les différents types de données et leurs opérations de base 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. Expression non (a ou b) non (a et b) non a ou non b non a et non b a ou a a et (a ou b) Valeur vrai vrai vrai Rappel : non a ou non b = non (a et b) vrai Rappel : non a et non b = non (a ou b) faux Rappel : a ou a = a faux Rappel : selon une des lois d'absorption, a et (a ou b) = a (a et a) ou (a et b) (a et a) ou (a et b) = a ou (a et b) et selon une loi d'absorption, a ou (a et b) = a Donc, (a et a) ou (a et b) = a Cette expression est donc fausse, puisque a est faux. a ou (a et b) a ou (a et b) = a (loi d'absorption). Cette expression est donc fausse. (a ou a) et (a ou b) (a ou a) et (a ou b) = a et (a ou b) = a = faux (a ou b) et (c ou d) (a ou b) et (c ou d) = faux et vrai = faux (a et c) ou (a et d) ou (b et c) ou (b et d) faux ou faux ou faux ou faux = faux (a et b) ou (c et d) (a et b) ou (c et d) = faux ou vrai = vrai (a ou c) et (a ou d) et (b ou c) et (b ou d) On peut factoriser cette expression : (a ou c) et (a ou d) et (b ou c) et (b ou d) = (a ou (c et d) ) et (b ou (c et d)) = (a et b) ou (c et d) = vrai a ou (x < y) x < y est vrai. Donc a ou (x < y) = faux ou vrai = vrai c ou (x > y ou x = y) c est vrai donc cette expression est vraie. c ou (z > y ou z = y) c est vrai donc cette expression est vraie. x > y et z <> 0 x > y est faux, z <> 0 est vrai, Donc x > y et z <> 0 = faux et vrai = faux y = 4 ou (y + 2 = x et z <> 5) faux ou (faux et vrai) = faux ou faux = faux Voilà, fini. On se retrouve plus tard. Le TP de cette séquence vous aidera à appliquer de manière pratique toutes les notions vues dans cette séquence. 27