Structure conditionnelle

Documents pareils
Recherche dans un tableau

Cours Informatique Master STEP

Pourquoi l apprentissage?

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Factorisation Factoriser en utilisant un facteur commun Fiche méthode

Propagation sur réseau statique et dynamique

Cours de Génie Logiciel

Algorithmique et programmation : les bases (VBA) Corrigé

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

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

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Examen Médian - 1 heure 30

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

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

Application 1- VBA : Test de comportements d'investissements

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

LE PROBLEME DU PLUS COURT CHEMIN

PROBLEMES D'ORDONNANCEMENT AVEC RESSOURCES

I. Introduction aux fonctions : les fonctions standards

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Comment congurer WinEdt pour L A TEX?

Analyse hiérarchique de tâches (AHT)


Conventions d écriture et outils de mise au point

Date : Tangram en carré page

Compte-rendu de projet de Système de gestion de base de données

RÉSOLUTION DE SYSTÈMES À DEUX INCONNUES

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

Introduction a l'algorithmique des objets partages. Robert Cori. Antoine Petit. Lifac, ENS Cachan, Cachan Cedex. Resume

Licence Sciences et Technologies Examen janvier 2010

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

1. Structure d'un programme FORTRAN 95

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

Groupe symétrique. Chapitre II. 1 Définitions et généralités

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Plan du cours. Historique du langage Nouveautés de Java 7

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

FctsAffines.nb 1. Mathématiques, 1-ère année Edition Fonctions affines

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Chapitre 2. Eléments pour comprendre un énoncé

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Organigramme / Algorigramme Dossier élève 1 SI

Présentation du PL/SQL

Probabilités Loi binomiale Exercices corrigés

Algorithmique & programmation

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

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

Les diagrammes de modélisation

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

Raisonnement par récurrence Suites numériques

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

Bien lire l énoncé 2 fois avant de continuer - Méthodes et/ou Explications Réponses. Antécédents d un nombre par une fonction

Exercices de dénombrement

CNAM UE MVA 210 Ph. Durand Algèbre et analyse tensorielle Cours 4: Calcul dierentiel 2

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.

Chapitre 1 : Introduction aux bases de données

Cours 02 : Problème général de la programmation linéaire

Ordonnancement. N: nains de jardin. X: peinture extérieure. E: électricité T: toit. M: murs. F: fondations CHAPTER 1

Coefficients binomiaux

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

USTL - Licence ST-A 1ère année Initiation à la programmation TP 1

Une version javascript sera disponible directement dans le cours prochainement.

CHAPITRE VI ALEAS. 6.1.Généralités.

length : A N add : Z Z Z (n 1, n 2 ) n 1 + n 2

Cours d algorithmique pour la classe de 2nde

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

Les chaînes de caractères

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

Résolution de systèmes linéaires par des méthodes directes

Java Licence Professionnelle CISII,

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

TD3: tableaux avancées, première classe et chaînes

Problème : Calcul d'échéanciers de prêt bancaire (15 pt)

Fonctions homographiques

Conception de circuits numériques et architecture des ordinateurs

Arbres binaires de recherche

«Dire et écrire» pour réaliser une composition en travail collaboratif en géographie. Agnès Dullin, lycée J. Racine 20 rue du Rocher, Paris

Algorithmes de recherche

Cours d initiation à la programmation en C++ Johann Cuenin

Les arbres binaires de recherche

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

Initiation à la programmation en Python

Emporter Windows XP sur une clé USB

Initiation à l algorithmique

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

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

OPTIMISATION À UNE VARIABLE

STAGE IREM 0- Premiers pas en Python

Aide - mémoire gnuplot 4.0

Vers l'ordinateur quantique

Quelques algorithmes simples dont l analyse n est pas si simple

Cours d Informatique

C f tracée ci- contre est la représentation graphique d une

Le bridge c'est quoi? Laval Du Breuil École de bridge Picatou, Québec

Calculateur quantique: factorisation des entiers

Transcription:

USTL - Licence ST-A 1ère année 2008-2009 1 Le problème Initiation à la programmation Structure conditionnelle État initial : Tas 1 un trèe ou un pique les autres tas vides. État nal : tas 1 et 4 vides et le tas 2 contient au plus un trèe, et le tas 3 contient au plus un pique. 1.1 Algorithme La résolution du problème nécessite une étude de cas : si la carte au sommet du tas 1 est un trèfle alors mettre la carte sur le tas 2 sinon mettre la carte sur le tas 3 finsi 2 Expressions booléennes 2.1 Booléens On appelle booléen 1 l'une des deux valeurs de vérité vrai ou faux. On désigne en abrégé ces deux valeurs par les deux lettres V et F. Une expression booléenne est une expression qui prend une valeur booléenne, autrement dit l'une ou l'autre des deux valeurs V ou F. Les expressions booléennes servent à exprimer des conditions. Elles peuvent être simples ou composées 2.2 Expressions simples Les expressions booléennes simples la carte au sommet du tas 1 est un trèfle 2.3 Expressions composées 2.3.1 L'opérateur ou L'expression E ="la carte au sommet du tas 1 est un trèe ou un carreau" peut se décomposer en deux expressions simples 1. E 1 ="la carte au sommet du tas 1 est un trèe", 2. E 2 ="la carte au sommet du tas 1 est un carreau" le lien les unissant étant le connecteur ou opérateur logique ou E = E 1 ou E 2 L'expression E est donc composée. L'expression E ne prend la valeur V que si au moins l'une des deux expressions E 1, E 2 est vraie. On résume cette dénition de l'opérateur ou par la table de vérité représentée par le tableau 1 1 du nom du mathématicien anglais du XIXème siècle George Boole 1

E 1 E 2 E 1 ou E 2 V V V V F V F V V F F F Tab. 1 Table de vérité de l'opérateur ou 2.3.2 L'opérateur et L'expression E ="la carte au sommet du tas 1 est un trèe et sa valeur est supérieure à celle de la carte située au sommet du tas 2" peut se décomposer en deux expressions simples 1. E 1 ="la carte au sommet du tas 1 est un trèe", 2. E 2 ="la carte au sommet du tas 1 a une valeur supérieure ou égale à celle du tas 2" le lien les unissant étant le connecteur ou opérateur logique et E = E 1 et E 2 L'expression E est donc composée. L'expression E ne prend la valeur V que si les deux expressions E 1, E 2 sont vraies. On résume cette dénition de l'opérateur et par la table de vérité représentée par le tableau 2. E 1 E 2 E 1 et E 2 V V V V F F F V F F F F Tab. 2 Table de vérité de l'opérateur et 2.3.3 L'opérateur non L'expression E ="la carte au sommet du tas 1 n'est pas un trèe'" peut se décomposer en une expressions plus simple 1. E 1 ="la carte au sommet du tas 1 est un trèe", que l'on nie. logique et E = non(e 1 ) L'expression E est donc composée. La valeur de l'expression E est opposée à celle de E 1. On résume cette dénition de l'opérateur non par la table de vérité représentée par le tableau 3. E 1 non(e 1 ) V F Tab. 3 Table de vérité de l'opérateur non F V 2.4 Propriétés des opérateurs a, b et c sont trois expressions booléennes. 2

Double négation non(non(a)) = a Élément neutre du ou a ou F = a Élément neutre du et a et V = a Élément absorbant du ou a ou V = V Élément absorbant du et a et F = F Idempotence du ou a ou a = a Idempotence du et a et a = a Tautologie a ou non(a) = V Contradiction a et non(a) = F Commutativité du ou a ou b = b ou a Commutativité du et a et b = b et a Associativité du ou (a ou b) ou c = a ou (b ou c) Associativité du et (a et b) et c = a et (b et c) Distributivité du et par rapport au ou a et (b ou c) = (a et b) ou (a et c) Distributivité du ou par rapport au et a ou (b et c) = (a ou b) et (a ou c) Loi de Morgan (1) non(a ou b) = non(a) et non(b) Loi de Morgan (2) non(a et b) = non(a) ou non(b) 3 En Pascal 3.1 Booléens En Pascal, les deux valeurs booléennes dénissent le type Boolean. vrai faux true false Tab. 4 Booléens en Pascal 3.2 Expressions booléennes Les expressions booléennes simples peuvent s'exprimer en Pascal par des valeurs littérales true ou false, une variable booléenne, une expression décrivant une relation, un appel à une fonction à valeurs booléennes. Exemples TasVide(1), CouleurSommet(1)=PIQUE Les expressions composées se traduisent avec les opérateurs logiques and, or et not. Opérateur logique et ou non En Pascal and or not Tab. 5 Opérateurs logiques en Pascal Exemples SommetTrefle(1) or SommetCarreau(1), TasNonVide(1) and TasNonVide(2) not (CouleurSommet(1)=PIQUE) 3.3 Instructions conditionnelles Instruction conditionnelle complète ou alternative 3

if <condition> then (*bloc d instruction*) else (*bloc d instruction*) Exemple traduction en Pascal de l'algorithme décrit à la section 1.1. if SommetTrefle(1) then begin end else begin DeplacerSommet(1,3); end {if} La condition est ici exprimée par l'expression booléenne (simple) SommetTrefle(1), le premier bloc d'instructions (celui qui suit le mot réservé then) est begin end et le second bloc (qui suit le mot réservé else) begin end Notez qu'il n'y a pas de ; après le end qui précède le else. En revanche, si cette instruction conditionnelle est suivie d'une autre, il faudra ajouter un ; après le end du second bloc (end {if};). if <condition> then (*bloc d instruction*) Exemple déplacer la carte située au sommet du tas 1 si c'est un trèe sinon ne rien faire. if SommetTrefle(1) then begin end {if} 3.4 Attention! Les opérateurs and et or agissent sur des booléens! On pourrait être tenté, pour exprimer que la carte au sommet du tas 1 est un trèe ou un carreau, d'écrire CouleurSommet(1) = TREFLE or CARREAU Mais cela est incorrecte car TREFLE et CARREAU ne sont pas des booléens, mais des couleurs. Il faut donc écrire (CouleurSommet(1) = TREFLE) or (CouleurSommet(1) = CARREAU) (même si cela semble bien lourd) 3.5 Remarque sur les priorités d'opérateurs En Pascal, si on écrit l'expression CouleurSommet(1) = PIQUE or CouleurSommet(1) = TREFLE on obtient le message d'erreur suivant lors de la compilation erreur1.pas(7,30) Error: Operation "or" not supported for types "Couleurs" and "Couleurs" 4

Cela provient du fait que l'opérateur or est prioritaire sur l'opérateur = (et oui, = est un opérateur!). Par conséquent, le compilateur comprend l'expression précédente comme signiant CouleurSommet(1) = (PIQUE or CouleurSommet(1)) = TREFLE et se rend compte que le programmeur a appliqué le or sur des valeurs non booléennes (des couleurs). D'où le message d'erreur. Pour remédier à ce problème, il faut parenthéser de la façon suivante (CouleurSommet(1) = PIQUE) or (CouleurSommet(1) = TREFLE) 3.6 Remarque sur les opérateurs and et or En logique booléenne, les opérateurs et et ou sont commutatifs a et b = b et a a ou b = b ou a Avec Free Pascal, ces opérateurs ne sont pas commutatifs : les arguments des opérateurs logiques sont évalués séquentiellement de gauche à droite. Par exemple, les expressions TasNonVide(1) and SommetTrefle(1) et SommetTrefle(1) and TasNonVide(1) ne sont pas équivalentes : l'évaluation de la première expression ne déclenche jamais d'exception, car si le tas 1 est vide, SommetTrefle(1) n'est pas évalué, puisque la valeur de l'expression complète est alors déterminée en revanche l'évaluation de la seconde expression déclenche une exception si le tas 1 est vide. 4 Méthodologie Voici quelques principes méthodologiques concernant la conception d'instructions conditionnelles. 1. Etude des cas intervenant dans le problème commencer par distinguer les diérents cas, vérier que ces cas sont bien exhaustifs (on n'oublie aucune situation) vérier que ces cas ne sont pas redondants (cas exclusifs) donner un exemple de comportement attendu de l'instruction pour chacun des cas 2. Pour chacun des cas établir un test (expression booléenne) permettant de distinguer le cas déterminer la séquence d'instructions à exécuter dans ce cas 3. Construire un jeu de tests qui permet de s'assurer de la validité du programme : ce jeu doit comprendre au moins un test pour chacun des cas envisagés. Exemple Considérons une situation initiale où les tas numérotés de 1 à 3 contiennent un nombre quelconque non nul de cartes, et le tas 4 est vide. InitTas(1, (T+K+C+P)[T+K+C+P] ); InitTas(2, (T+K+C+P)[T+K+C+P] ); InitTas(3, (T+K+C+P)[T+K+C+P] ); InitTas(4, ); L'objectif à atteindre est de déplacer la carte de plus grande valeur au sommet d'un des trois tas vers le tas 4. Résoudre ce problème revient à repérer quel tas possède en son sommet la carte de plus grande valeur. Étude des cas Il y a évidemment trois possibilités : c'est le tas 1 ou le tas 2 ou le tas 3. Comment les distinguer? c'est le tas 1, si la carte au sommet du tas 1 est supérieure ou égale à celle du tas 2, et est supérieure ou égale à celle du tas 3. c'est le tas 2, si la carte au sommet du tas 2 est supérieure ou égale à celle du tas 1, et est supérieure ou égale à celle du tas 3. 5

c'est le tas 3, si la carte au sommet du tas 3 est supérieure ou égale à celle du tas 1, et est supérieure ou égale à celle du tas 2. Autrement dit c'est le tas i si la condition Superieur(i,j) and Superieur(i,k) (dans laquelle j et k désignent les dux numéros de tas autres que i) est satisfaite. Les conditions distinguant les trois cas ne sont pas exclusives (penser aux cas d'égalité). 5 Exercices Exercice 1. En utilisant les tables de vérité, prouvez quelques propriétés des opérateurs logiques et, ou et non. Exercice 2. Ou exclusif Si a et b sont deux expressions booléennes, le ou-exclusif de ces deux expressions, noté a b, est une nouvelle expression booléenne qui est vraie si et seulement si une seule des deux expressions a ou b est vraie. La table de vérité du ou-exclusif est donnée a b a b V V F V F V F V V F F F Tab. 6 Table de vérité de l'opérateur ou-exclusif Question 1. Écrire l'expression a b à l'aide des opérateurs et, ou et non. Exercice 3. Question 1. Exprimer le fait que [a, b] et [c, d] sont des intervalles disjoints, attention au cas des intervalles vides, par exemple si a = 15 et b = 5. Question 2. Exprimer le fait que [a, b] et [c, d] sont des intervalles qui se recouvrent partiellement de deux manières : 1. en utilisant la solution de la question précédente (c'est très simple). 2. directement (c'est compliqué!). Exercice 4. Écrire l'instruction ci-dessous sans utiliser l'opérateur non si non(a) alors instr1 sinon instr2 finsi; Exercice 5. Écrire l'instruction cidessous sans utiliser l'opérateur et si a et b alors instr1 finsi; Exercice 6. Expliquez pourquoi le programme if Superieur(1,2) and Superieur(1,3) then begin DeplacerSommet(1,4); end; if Superieur(2,1) and Superieur(2,3) then begin DeplacerSommet(2,4); end; if Superieur(3,1) and Superieur(3,2) then begin DeplacerSommet(3,4); end; 6

n'est pas correct pour le problème posé dans la section 4 Exercice 7. Reprenez le problème de la section 4 en admettant qu'un ou plusieurs des trois premiers tas peut être vide. Si les trois tas sont vides, on ne déplace aucune carte. Exercice 8. Les exercices de manipulation de cartes 7