initiation à la programmationfinal2012

Upload: yassineyassine

Post on 24-Feb-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/25/2019 Initiation La Programmationfinal2012

    1/245

    Initiation la programmationalgorithmique

    Anne Acadmique 2007-2008

  • 7/25/2019 Initiation La Programmationfinal2012

    2/245

    ENSA Safi 2

    Plan du cours

    Introduction linformatiqueArchitecture dun ordinateur

    Dcomposition fonctionnelle

    Concepts cls

  • 7/25/2019 Initiation La Programmationfinal2012

    3/245

    Introduction

  • 7/25/2019 Initiation La Programmationfinal2012

    4/245

    ENSA Safi 4

    Introduction

    Quest-ce quun ordinateur ?

    Quest-ce quun langage de programmation ?

    Que signifie faire de linformatique ?

    A quoi sert la programmation ?

    Quest-ce que la complexit algorithmique ?

  • 7/25/2019 Initiation La Programmationfinal2012

    5/245

    ENSA Safi 5

    Quest-ce quun ordinateur ?

    Machine automatique de traitement de linformationobissant des programmes forms par des suitesdoprations arithmtiques et logiques (Larousse 2002)

    Diffrents niveaux dapproche : utilisateur, programmeurmachine, concepteur de circuits logiques

  • 7/25/2019 Initiation La Programmationfinal2012

    6/245

    ENSA Safi 6

    Des 0 et des 1

    Le hardware de lordinateur comprend essentiellement :diverses mmoires, un processeur, une horloge, des unitsdentre/sortie

    Lordinateur excute la cadence de son horloge desinstructions (de niveau machine ) contenue en mmoire etutilisant des donnes contenue dans une autre partie de lammoire.

    Les donnes et les instructions, sont codes, au plus basniveaux en une suite de 0 et de 1.

    Ces 0 et ces 1 correspondent des tensions des circuitslectroniques. Le cadencement est essentiellement fonctiondu temps de stabilisation des circuits et de leur chauffement.

  • 7/25/2019 Initiation La Programmationfinal2012

    7/245

    ENSA Safi 7

    Codage binaire

    Le langage des ordinateurs

    Toutes communications l'intrieur de l'ordinateur sont faitesavec des signaux lectriques

    0: teint (absence de signal lectrique)

    1: allum (prsence de signal lectrique)

  • 7/25/2019 Initiation La Programmationfinal2012

    8/245

    ENSA Safi 8

    Un mme nombre peut tre reprsent dans plusieurs bases 123 en base 10 (dcimal)

    1111011 en base 2 (binaire)

    173 en base 8 (octale)

    7B en base 16 (hexadcimale)

  • 7/25/2019 Initiation La Programmationfinal2012

    9/245

    ENSA Safi 9

  • 7/25/2019 Initiation La Programmationfinal2012

    10/245

    ENSA Safi 10

    Codage et adressage

    On peut exprimer autant avec une suite de 0 et de 1, qulaide dun alphabet complet (a,b,c,d,e ). Il suffit desaccorder sur la faon dont on code linformation.

    Certains codages peuvent tre plus efficaces que dautres (cf

    thorie de Shannon)

    Toute donne code se trouve une certaine adresse enmmoire. Cette adresse en mmoire est elle-mme codesous forme de 0 et de 1.

  • 7/25/2019 Initiation La Programmationfinal2012

    11/245

    ENSA Safi 11

    Quest-ce quun langage de programmation ?

    Langage cd ensemble de mots (vocabulaire) et syntaxe(grammaire) stricte (non ambigu) permettant dcrire unprogramme

    Ensemble de structures de donnes, doprations sur cesstructures & ensemble de structures de contrle :squencement, branchement conditionnel, itration

  • 7/25/2019 Initiation La Programmationfinal2012

    12/245

    ENSA Safi 12

    Niveau dun langage

    Haut niveau : proche de lhomme, instructions plus complexes,vocabulaire et syntaxe plus riches

    C++, Java

    Pascal

    C, Fortran

    Assembleur

    Langage machine

    Bas niveau : proche de la machine, instructions lmentaires

  • 7/25/2019 Initiation La Programmationfinal2012

    13/245

    ENSA Safi 13

    Que signifie faire de linformatique ?

    Passer du temps proximit dun ordinateur ?

    Il est essentiel de prciser le niveau auquel cet outil complexeest utilis

    Ces niveaux sont relativement indpendants

    Le plus souvent :

    Utiliser des fonctionnalits offertes par certains logiciels pour

    acclrer, rendre plus efficace, le traitement de certains typesde donnes

  • 7/25/2019 Initiation La Programmationfinal2012

    14/245

    ENSA Safi 14

    A quoi sert la programmation ?

    A faire excuter par lordinateur une squence dinstructions

    Habituellement , cette squence dinstructions raliseeffectivement un algorithme

    Un algorithme est une squence finie dinstructions qui permetdobtenir la solution dun problme en un temps fini.

    La programmation sert rsoudre des catgories deproblmes de faon systmatique

  • 7/25/2019 Initiation La Programmationfinal2012

    15/245

    ENSA Safi 15

    Mais encore

    Tous les problmes nont pas de solutions algorithmiques

    La programmation permet dadapter le comportement delogiciels des catgories spcifiques de problmes. Ellesavre souvent indispensable.

    Dans la description de Turing et Von Neumann, lordinateurest une machine universelle.

  • 7/25/2019 Initiation La Programmationfinal2012

    16/245

    ENSA Safi 16

    + + + +

    Lecture/criture

    Unit decommande

    tats internes:Etat0, Etat1, Etat2,...

    Ruban= entre,sortie etmmoire

    Etat de lamachine

    Contenu dela cellule

    Ecrit sur leruban

    Dplacementruban

    Etat suivant

    Etat0 vide D Etat0Etat0 + D Etat1

    Le Programme

    La machine de Turing

  • 7/25/2019 Initiation La Programmationfinal2012

    17/245

    ENSA Safi 17

    Complexit algorithmique

    Donne une estimation du nombre doprations lmentairesncessaires lexcution de lalgorithme, et ce en fonction dela taille des donnes.

    Lestimation ne tient pas compte de la vitesse dexcution.

    En gnral la complexit est value dans le pire des cas(worst case analysis)

  • 7/25/2019 Initiation La Programmationfinal2012

    18/245

    ENSA Safi 18

    Exemples

    Recherche dun mot dans un dictionnaire :parcours linaire VS parcours dichotomique

    Tri dune liste dlments

    Problmes NP-complets

  • 7/25/2019 Initiation La Programmationfinal2012

    19/245

    ENSA Safi 19

    Graphique : complexit algorithmique

    Nbredinstructions

    Taille des donnes (N)

    linaire

    logarithmique

  • 7/25/2019 Initiation La Programmationfinal2012

    20/245

    ENSA Safi 20

    Bon ou mauvais programme ?

    Aisment lisible donc bien spcifi, bien documentClair, donc bien structur

    Aisment modifiable

    Facile tester, dbugger

    Robuste (erreurs de lutilisateur)

    Correct

    Efficace

  • 7/25/2019 Initiation La Programmationfinal2012

    21/245

    ENSA Safi 21

    Vrai ou faux ?

    Lutilisation dun ordinateur permet de raliser un travail plusefficacement et plus rapidement

    Lordinateur fait ce quon lui dit de faire

    Le concepteur dun programme connat toujours le rsultat duprogramme quil a conu

  • 7/25/2019 Initiation La Programmationfinal2012

    22/245

    Architecture dun ordinateur

  • 7/25/2019 Initiation La Programmationfinal2012

    23/245

    ENSA Safi 23

    Architecture dun ordinateur

    La mmoire centraleLunit centrale de traitement (Central Processing Unit)

    Les units dentre/sorties

    Les units priphriques

    Illustrations

  • 7/25/2019 Initiation La Programmationfinal2012

    24/245

    ENSA Safi 24

    Diagramme fonctionnel dune architecture deVon Neumann

    Data Memory

    Arithmetic Unit

    ControlUnit

    Program Memory

    Program Interface

    InputInterface

    OutputInt

    erface

    Illustration reprise de Tib[2002]

  • 7/25/2019 Initiation La Programmationfinal2012

    25/245

    ENSA Safi 25

    Ordres de grandeur

    K =Kilo 2^10 = 1 024M= Mga 2^20 =1 048 576

    G= Giga 2^30 =1 073 741 824

    T=Tra 2^40 =1 099 511 627 776

  • 7/25/2019 Initiation La Programmationfinal2012

    26/245

    ENSA Safi 26

    La mmoire centrale

    Les bits (binary digits) / octets (bytes)

    Les cellules mmoire (mots) typiquement 32 ou 64 bits

    Registre dadresse et registre de donnes

    Lecture et criture

  • 7/25/2019 Initiation La Programmationfinal2012

    27/245

    ENSA Safi 27

    Schma de principe

    Memoirecentrale

    Registre donnes

    Registre adresseL/E

    Connecteurs adresse

    Connecteurs donnes

  • 7/25/2019 Initiation La Programmationfinal2012

    28/245

    ENSA Safi 28

    Lunit centrale de traitement (CPU)

    Les instructions

    Les adresses

    Unit de contrle / unit arithmtique et logique

    Les registres

  • 7/25/2019 Initiation La Programmationfinal2012

    29/245

    ENSA Safi 29

    Les instructions

    Trois informations ncessaires la CPU en contact avec lammoire RAM.

    1. Quelle information traiter ?

    2. Quel traitement effectuer ?

    3. O ranger le rsultat ?

    Architecture RISC et CISC

  • 7/25/2019 Initiation La Programmationfinal2012

    30/245

    ENSA Safi 30

    Les adresses

    La suite des instructions excuter est elle-mme range enmmoire.

    LA CPU ne communique avec lextrieur que via la mmoireet naccde aux informations que par leur adresse.

  • 7/25/2019 Initiation La Programmationfinal2012

    31/245

    ENSA Safi 31

    Unit de contrle et ALU

    Les circuits qui ralisent les oprations lmentaires(additions, multiplications, oprations logique ) sontregroups dans lALU.

    Lunit de contrle met en place les donnes et positionne les

    circuits lectroniques pour que lALU excute effectivementlopration

    Oprations unaires : mise zro, complmentation logique,dcalage, incrmentation

    Oprations binaires : ET, OU, XOR

  • 7/25/2019 Initiation La Programmationfinal2012

    32/245

    ENSA Safi 32

    Circuit additionneur

    OU

    ET

    ET

    Additionneur 2 bits

  • 7/25/2019 Initiation La Programmationfinal2012

    33/245

    ENSA Safi 33

    Les registres

    Cellules mmoires trs rapides et ddicaces dans la CPU

    Le compteur ordinal contient ladresse de la prochaine instruction excuter

    Le registre dinstruction contient linstruction en cours dexcution

    Laccumulateur

    Autres registres : gnraux, dindice, de base, dtat (PSW), registre de

    pile, registre spcialiss (dcalage, virgule flottante, )

  • 7/25/2019 Initiation La Programmationfinal2012

    34/245

    ENSA Safi 34

    Ordres de grandeurs (2005)

    Processeur 32 - 64 bitsMmoire RAM = 1 Go

    Mmoire dure = 200 Go

    Vitesse du processeur = 3 GHz

    + Loi de Moore : cf article du Pour La Science

  • 7/25/2019 Initiation La Programmationfinal2012

    35/245

    Illustrations des composants

  • 7/25/2019 Initiation La Programmationfinal2012

    36/245

    ENSA Safi 36

    Carte mre (mother board)

  • 7/25/2019 Initiation La Programmationfinal2012

    37/245

    ENSA Safi 37

    CPU

  • 7/25/2019 Initiation La Programmationfinal2012

    38/245

    ENSA Safi 38

    Carte Graphique

  • 7/25/2019 Initiation La Programmationfinal2012

    39/245

    ENSA Safi 39

    Carte Son

  • 7/25/2019 Initiation La Programmationfinal2012

    40/245

    ENSA Safi 40

    Carte rseau

  • 7/25/2019 Initiation La Programmationfinal2012

    41/245

    ENSA Safi 41

    Les Bus

  • 7/25/2019 Initiation La Programmationfinal2012

    42/245

    ENSA Safi 42

    Connecteurs dentre/sort ie

  • 7/25/2019 Initiation La Programmationfinal2012

    43/245

    ENSA Safi 43

    Hirarchie mmoire

    Dans un ordinateur, le processeur accde aux instructions du programme excuter ainsi qu'aux donnes ncessaires son excution depuis la mmoire.

  • 7/25/2019 Initiation La Programmationfinal2012

    44/245

    Programmation Procdurale

  • 7/25/2019 Initiation La Programmationfinal2012

    45/245

    ENSA Safi 45

    Bien distinguer !

    Spcification d un algorithme :ce que fait lalgorithme

    cahier des charges du problme rsoudre

    Expression d un algorithme :

    comment il le faittexte dans un langage de type Pascal / C

    Implmentation d un algorithme :

    traduction du texte prcdent

    dans un langage de programmation rel

  • 7/25/2019 Initiation La Programmationfinal2012

    46/245

    ENSA Safi 46

    Programmation Procdurale

    Notion didentificateur et de type Notion de fonction

    Instructions de contrle du flux dexcution

    Comment concevoir un programme ?

    Quelques exemples de code Le traitement des donnes avant tout

  • 7/25/2019 Initiation La Programmationfinal2012

    47/245

    ENSA Safi 47

    Notion didentificateur et de type

    Identificateur : symbole sans signification universellepermettant de dsigner des objets qui nont pas dexistence endehors du programme.

    Dclaration : fixe la signification dun identificateur

    Porte dun identificateur : bloc dinstructions pour lequel ladclaration est valable.

    Les langages de programmation peuvent tre typs ou non

  • 7/25/2019 Initiation La Programmationfinal2012

    48/245

    ENSA Safi 48

    Notion de variable

    Une variable est un lment de donne dsigne par un identificateur.

    Dans un langage typ ,

    chaque variable a un type (int, float, boolean, String, )

    chaque identificateur a une porte (portion du code dans laquellelidentificateur est reconnu; en gnral, le bloc dinstructions danslequel la variable est dclare).

    Une variable est un endroit de la mmoire laquelle on a donn un nomde sorte que lon puisse y faire facilement rfrence dans le programme.Une variable a une valeur, correspondant un certain type. La valeur

    dune variable peut changer au cours de lexcution du programme (do son nom ;-) )

  • 7/25/2019 Initiation La Programmationfinal2012

    49/245

    ENSA Safi 49

    dclaration et assignation dune variable

    Variables i : integer ;type entier (entier : type prdifini integer : mot cl du langage)

    identificateur

    i:=4;

  • 7/25/2019 Initiation La Programmationfinal2012

    50/245

    ENSA Safi 50

    Notion de fonction

    Une fonction est un morceau de code qui permet de rsoudreun sous-problme du problme trait

    La dcomposition du code en tches et sous- tches, le rendplus modulaire. Le programme est plus clair, plus lisible, plus

    aisment modifiable

    Les fonctions cachent les dtails dimplmentation : il suffit desavoir ce quelles font et non comment elles le font

  • 7/25/2019 Initiation La Programmationfinal2012

    51/245

    ENSA Safi 51

    Notion de fonction

  • 7/25/2019 Initiation La Programmationfinal2012

    52/245

    ENSA Safi 52

    Dclaration dune fonction

    Comprend essentiellement trois lments:

    1. Le nom de la fonction2. La liste des types darguments

    3. Le type de retour de la fonction

    Exemples :

    Function exposant ( i , j : integer ) : integer ;

  • 7/25/2019 Initiation La Programmationfinal2012

    53/245

    ENSA Safi 53

    Corps dune fonction

    Function exposant ( i , j : integer ) : integer ;variablesi2 , a : integer ;

    Begin

    i2 := 1 ;

    For a := 1 To j Do i2 := i2 * i ;exposant := i2 ;

    End ;

  • 7/25/2019 Initiation La Programmationfinal2012

    54/245

    ENSA Safi 54

    Exemple : un pseudo-code

    Programme Principal

    / / Ce programme permet de lire deux entiers lcran et dafficher ensuite leursomme

    BEGIN

    variablesunEntier , unAutreEntier : integer ;

    / / dclaration de variable entire

    unEntier=lisAlEcranUnEntier();unAutreEntier=lisAlEcranUnEntier();

    / / utilisation de la fonction lisAlEcranUnEntier()()

    ecrisAlEcran(calculeSomme(unEntier,unAutreEntier));

    / / utilisation des fonctions calculeSomme(int,int) et ecrisAlEcran(int)END

  • 7/25/2019 Initiation La Programmationfinal2012

    55/245

    ENSA Safi 55

    Instructions de Contrle

    Branchement conditionnel : if then else ( si alors aussinon)

    switch case

    Boucle conditionnelle :

    while do ou do while ( fait tant que )Boucle inconditionnelle

    For

  • 7/25/2019 Initiation La Programmationfinal2012

    56/245

    ENSA Safi 56

    Exemple de code

    Function calculeSomme( i , j : integer ) : integer ;/ / cette fonction donne la somme de deux entiers, si elle est positive,/ / et renvoie 0 aussinon.

    begin

    EXERCICE

    end

  • 7/25/2019 Initiation La Programmationfinal2012

    57/245

    ENSA Safi 57

    Solution 1

    Function calculeSomme ( i , j : integer ) : integer ;

    Begin

    somme := i+j ;

    End ;

  • 7/25/2019 Initiation La Programmationfinal2012

    58/245

    ENSA Safi 58

    Solution 2

    Function somme ( i , j : integer ) : integer ;

    Begin

    somme := i+j ;

    If somme

  • 7/25/2019 Initiation La Programmationfinal2012

    59/245

    ENSA Safi 59

    Comment concevoir un programme ?

    Identifier prcisment le problme que le programme se doitde rsoudre

    Dcomposer le problme en sous-problme

    Dfinir les fonctions correspondantes

    crire le programme principal en pseudo-code, en valuantles critres de qualit.

    Implmenter, compiler, excuter sur diffrents cas dutilisation,dbugger

  • 7/25/2019 Initiation La Programmationfinal2012

    60/245

    ENSA Safi 60

    Le traitement des donnes avant tout

    La conception du programme se fait essentiellement par abstraction procdurale , dcomposition en sous-problme

    Vision trs top-down de la programmation, tendancecartsienne analytique

    Danger du Code spaghetti

    Critres de qualit facilement viols : modularit, lisibilit,robustesse, exactitude

  • 7/25/2019 Initiation La Programmationfinal2012

    61/245

    Premiers algorithmes

    Anne Acadmique 2007-2008

  • 7/25/2019 Initiation La Programmationfinal2012

    62/245

    Plan :Premiers algorithmes

    Les Variables

    Instruction daffectation

    Les instructions de lecture et dcriture

    Les Tests

    Les Boucles

    Les Tableaux

    Procdures et Fonctions

    Les Fichiers

  • 7/25/2019 Initiation La Programmationfinal2012

    63/245

    ENSA Safi 63

    algorithmique ?

    Encyclopedia Universalis : Spcification dun schma de calcul sous forme dune suite

    finie doprations lmentaires obissant un enchanementdtermin.

    DONNES RSULTATS, ACTIONS

    Composition d un nombre fini doprations dont chacune est :

    dfinie de faon rigoureuse et non ambigu

    effective sur les donnes adquates

    (excution en temps fini)

  • 7/25/2019 Initiation La Programmationfinal2012

    64/245

    ENSA Safi 64

    Pourquoi un cours dalgorithmique ?

    Objectif: obtenir de la machine quelle effectue un travail notre place

    Problme: expliquer la machine comment elle doit s'yprendre

    Mais... comment le lui dire ?

    Comment le lui apprendre ?

    Comment s'assurer qu'elle fait ce travail aussi bien que nous ?

    Mieux que nous?

  • 7/25/2019 Initiation La Programmationfinal2012

    65/245

    ENSA Safi 65

    bon en algorithmique ?

    La matrise de lalgorithmique requiert deux qualits, trs complmentaires dailleurs :

    il faut avoir une certaine intuition, car aucune recette ne permet de savoir a priori quellesinstructions permettront dobtenir le rsultat voulu. Cest l, si lon y tient, quintervient laforme dintelligence requise pour lalgorithmique. Alors, cest certain, il y a des gensqui possdent au dpart davantage cette intuition que les autres. Cependant, et jinsistesur ce point, les rflexes, cela sacquiert. Et ce quon appelle lintuition nest finalementque de lexprience tellement rpte que le raisonnement, au dpart laborieux, finit pardevenir spontan .

    il faut tre mthodique et rigoureux. En effet, chaque fois quon crit une sriedinstructions quon croit justes, il faut systmatiquement se mettre mentalement la

    place de la machine qui va les excuter, arm d'un papier et d'un crayon, afin de vrifiersi le rsultat obtenu est bien celui que lon voulait. Cette opration ne requiert pas lamoindre once dintelligence. Mais elle reste nanmoins indispensable, si lon ne veut pascrire laveuglette.

    Et petit petit, force de pratique, vous verrez que vous pourrez faire de plus en plussouvent lconomie de cette dernire tape : lexprience fera que vous verrez le rsultatproduit par vos instructions, au fur et mesure que vous les crirez. Naturellement, cetapprentissage est long, et demande des heures de travail patient. Aussi, dans un premiertemps, vitez de sauter les tapes : la vrification mthodique, pas pas, de chacun de vos

    algorithmes reprsente plus de la moiti du travail accomplir... et le gage de vos progrs.

  • 7/25/2019 Initiation La Programmationfinal2012

    66/245

    ENSA Safi 66

    se mettre mentalement la place de la machine qui vales excuter ?

    les ordinateurs, quels quils soient, ne sont fondamentalementcapables de comprendre que quatre catgories d'ordres (enprogrammation, on n'emploiera pas le terme d'ordre, maisplutt celui d'instructions). Ces quatre familles d'instructionssont :

    laffectation de variables

    la lecture / criture les tests

    les boucles

    Un algorithme informatique se ramne donc toujours au bout

    du compte la combinaison de ces quatre petites briques debase.

  • 7/25/2019 Initiation La Programmationfinal2012

    67/245

    ENSA Safi 67

    Avec quelles conventions crit-on un algorithme ?

    Historiquement, plusieurs types de notations ont reprsentdes algorithmes.

    Il y a eu notamment une reprsentation graphique, avec descarrs, des losanges, etc. quon appelait des organigrammes.Aujourdhui, cette reprsentation est quasiment abandonne.

    Cest pourquoi on utilise gnralement une srie deconventions appele pseudo-code , qui ressemble unlangage de programmation authentique dont on aurait vacula plupart des problmes de syntaxe. Ce pseudo-code estsusceptible de varier lgrement dun livre (ou dun

    enseignant) un autre.

  • 7/25/2019 Initiation La Programmationfinal2012

    68/245

    Structure de base dun programme

    Dclaration de variables et fonctionsProgramme principale

    Dbut

    ..fin

    V i bl

  • 7/25/2019 Initiation La Programmationfinal2012

    69/245

    ENSA Safi 69

    Variables

    La premire chose faire avant de pouvoir utiliser une variable est de crer la bote et de lui

    coller une etiquette (identificateur). Ceci se fait tout au dbut de lalgorithme, avant mme les instructions proprement dites.

    Cest ce quon appelle la dclaration des variables

    Il y a trois type:

    Type Numrique

    Type alphanumrique

    Type boolen En pseudo-code, une dclaration de variables aura ainsi cette tte :

    variables g en entier

    identificateur

    En informatique, une variable possde un moment donn une valeur et une seulevaleur

    Dans un programme une variable a un identificateur unique un identificateur est un mot : - commenant obligatoirement par une lettre

    - ne comportant aucun espace

    T i bl

  • 7/25/2019 Initiation La Programmationfinal2012

    70/245

    ENSA Safi 70

    Type variable

    Type NumriqueType caractre

    Type chane

    Type boolen

    T i bl i

  • 7/25/2019 Initiation La Programmationfinal2012

    71/245

    ENSA Safi 71

    Type variable numrique

    Tous les langages, quels quils soient offrent un bouquet de typesnumriques, dont le dtail est susceptible de varier lgrement dunlangage lautre. On retrouve cependant les types suivants :

    type nom_typ

    e

    caractres

    autoriss

    ensemble

    de valeurs

    exemples

    de valeurs

    entier ent

    entier

    0 9 [-32768..+32767] -152

    +4560 ou 4560rel rel 0 9, . -12.3652

    +0.186 ou 0.186

    I t ti d ff t ti

  • 7/25/2019 Initiation La Programmationfinal2012

    72/245

    ENSA Safi 72

    Instruction daffectation

    Cette seule chose quon puisse faire avec une variable, cestlaffecter, cest--dire lui attribuer une valeur

    En pseudo-code, l'instruction d'affectation se note avec lesigne

    E i t t

  • 7/25/2019 Initiation La Programmationfinal2012

    73/245

    ENSA Safi 73

    Expressions et oprateurs

    Oprateurs numriques :

    + : addition

    - : soustraction

    * : multiplication

    / : division

    Parenthses * et / + et 12 * 3 + 5 et (12 * 3) + 5 valent strictement la mme chose.

    En revanche, 12 * (3 + 5) vaut 12 * 8 soit 96

    Oprateur alphanumrique : & concatner

    Oprateurs logiques (ou boolens) ET, du OU, du NON

    I t ti d ff t ti

  • 7/25/2019 Initiation La Programmationfinal2012

    74/245

    ENSA Safi 74

    Instruction daffectation

    A la rigueur, elle peut ne pas avoir de valeur du tout (une fois quelle a t

    dclare, et tant quon ne la pas affecte. A signaler que dans certains langages,les variables non encore affectes sont considres comme valantautomatiquement zro). Mais ce qui est important, cest que cette valeur justement,ne varie pas proprement parler. Du moins ne varie-t-elle que lorsquelle estlobjet dune instruction daffectation.

    La deuxime remarque concerne le signe de laffectation. En algorithmique, commeon la vu, cest le signe . Mais en pratique, la quasi totalit des langages

    emploient le signe gal. Et l, pour les dbutants, la confusion avec les maths estgalement facile. En maths, A = B et B = A sont deux propositions strictementquivalentes. En informatique, absolument pas, puisque cela revient crire A Bet B A, deux choses bien diffrentes. De mme, A = A + 1, qui enmathmatiques, constitue une quation sans solution, reprsente enprogrammation une action tout fait licite (et de surcrot extrmement courante).Donc, attention ! ! ! La meilleure des vaccinations contre cette confusion consiste bien employer le signe en pseudo-code, signe qui a le mrite de ne pas laisser

    place lambigut. Une fois acquis les bons rflexes avec ce signe, vous naurezplus aucune difficult passer au = des langages de programmation.

    E i 1

  • 7/25/2019 Initiation La Programmationfinal2012

    75/245

    ENSA Safi 75

    Exercice 1

    Quelles seront les valeurs des variables A et B aprs excutiondes instructions suivantes ?

    variables A, B : EntiersDbut

    A 1

    B A + 3A 3

    Fin

    S l ti

  • 7/25/2019 Initiation La Programmationfinal2012

    76/245

    ENSA Safi 76

    Solution

    Aprs La valeur des variables est :A 1 A = 1 B = ?B A + 3 A = 1 B = 4

    A 3 A = 3 B = 4

    Exercice 2

  • 7/25/2019 Initiation La Programmationfinal2012

    77/245

    ENSA Safi 77

    Exercice 2

    Quelles seront les valeurs des variables A, B et C aprsexcution des instructions suivantes ?

    Variables A, B, C : EntierDbut

    A 5

    B 3C A + B

    A 2

    C B AFin

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    78/245

    ENSA Safi 78

    Solution

    Aprs La valeur des variables est :A 5 A = 5 B = ? C = ?B 3 A = 5 B = 3 C = ?C A + B A = 5 B = 3 C = 8

    A 2 A = 2 B = 3 C = 8C B A A = 2 B = 3 C = 1

    Exercice 3

  • 7/25/2019 Initiation La Programmationfinal2012

    79/245

    ENSA Safi 79

    Exercice 3

    Quelles seront les valeurs des variables A et B aprsexcution des instructions suivantes ?

    Variables A, B : EntierDbut

    A 5

    B A + 4A A + 1

    B A 4Fin

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    80/245

    ENSA Safi 80

    Solution

    Aprs La valeur des variables est :A 5 A = 5 B = ?B A + 4 A = 5 B = 9

    A A + 1 A = 6 B = 9B A 4 A = 6 B = 2

    Exercice 4

  • 7/25/2019 Initiation La Programmationfinal2012

    81/245

    ENSA Safi 81

    Exercice 4

    Quelles seront les valeurs des variables A, B et C aprsexcution des instructions suivantes ?

    Variables A, B, C :EntierDbut

    A 3

    B 10C A + B

    B A + B

    A C

    Fin

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    82/245

    ENSA Safi 82

    Solution

    Aprs La valeur des variables est :A 3 A = 3 B = ? C = ?B 10 A = 3 B = 10 C = ?C A + B A = 3 B = 10 C = 13B A + B A = 3 B = 13 C = 13

    A C A = 13 B = 13 C = 13

    Exercice 5

  • 7/25/2019 Initiation La Programmationfinal2012

    83/245

    ENSA Safi 83

    Exercice 5

    Quelles seront les valeurs des variables A, B et C aprsexcution des instructions suivantes ?

    variablesA, B, C :EntierDbut

    A 3

    B 10C A + B

    B A + B

    A C

    Fin

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    84/245

    ENSA Safi 84

    Solution

    Aprs La valeur des variables est :A 5 A = 5 B = ?B 2 A = 5 B = 2

    A B A = 2 B = 2B A A = 2 B = 2

    Les deux dernires instructions ne permettent donc pasdchanger les deux valeurs de B et A, puisque lune des deuxvaleurs (celle de A) est ici crase.Si lon inverse les deux dernires instructions, cela nechangera rien du tout, hormis le fait que cette fois cest lavaleur de B qui sera crase.

    Exercice 6

  • 7/25/2019 Initiation La Programmationfinal2012

    85/245

    ENSA Safi 85

    Exercice 6

    Plus difficile, mais cest un classique absolu, quil fautabsolument matriser : crire un algorithme permettantdchanger les valeurs de deux variables A et B, et ce quelque soit leur contenu pralable.

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    86/245

    ENSA Safi 86

    Solution

    Dbut

    C A

    A B

    B C

    Fin

    On est oblig de passer par une variable dite temporaire (lavariable C).

    Exercice 7

  • 7/25/2019 Initiation La Programmationfinal2012

    87/245

    ENSA Safi 87

    Exercice 7

    Une variante du prcdent : on dispose de trois variables A, Bet C. crivez un algorithme transfrant B la valeur de A, Cla valeur de B et A la valeur de C (toujours quels que soientles contenus pralables de ces variables).

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    88/245

    ENSA Safi 88

    Solution

    DbutD C

    C B

    B A

    A D

    Fin

    En fait, quel que soit le nombre de variables, une seulevariable temporaire suffit

    Exercice 8

  • 7/25/2019 Initiation La Programmationfinal2012

    89/245

    ENSA Safi 89

    Exercice 8

    Que produit lalgorithme suivant ?

    Variables A, B, C : CaractreDbut

    A "423"

    B "12"

    C A + BFin

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    90/245

    ENSA Safi 90

    Solution

    Il ne peut produire quune erreur dexcution, puisquon nepeut pas additionner des caractres.

    Exercice 9

  • 7/25/2019 Initiation La Programmationfinal2012

    91/245

    ENSA Safi 91

    Exercice 9

    Que produit lalgorithme suivant ?

    Variables A, B, C :CaractreDbut

    A "423"

    B "12"

    C A & BFin

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    92/245

    ENSA Safi 92

    Solution

    En revanche, on peut les concatner. A la fin delalgorithme, C vaudra donc "42312".

    Les instructions de lecture et dcriture

  • 7/25/2019 Initiation La Programmationfinal2012

    93/245

    ENSA Safi 93

    Les instructions de lecture et d criture(I/O standard: clavier/ecran)

    Dans un sens, ces instructions permettent lutilisateur derentrer des valeurs au clavier pour quelles soient utilises parle programme. Cette opration est la lecture.

    Dans lautre sens, dautres instructions permettent auprogramme de communiquer des valeurs lutilisateur en les

    affichant lcran. Cette opration est lcriture.

    Les instructions de lecture et dcriture: Syntaxe

  • 7/25/2019 Initiation La Programmationfinal2012

    94/245

    ENSA Safi 94

    Les instructions de lecture et d criture: Syntaxe

    lire_clavier Titi ou Lire Titi

    Ds que le programme rencontre une instruction Lire,lexcution sinterrompt, attendant la frappe dune valeur auclavier. Ds lors, aussitt que la touche Entre (Enter) a tfrappe, lexcution reprend

    ecrire_ecran Toto ou Ecrire Toto

    Dans le sens inverse, pour crire quelque chose lcran.

    Important:

    Avant de lire_clavier une variable, il est trs fortementconseill dcrire des libells lcran, afin de prvenir

    lutilisateur de ce quil doit frapper

    Exercice 1

  • 7/25/2019 Initiation La Programmationfinal2012

    95/245

    ENSA Safi 95

    Exercice 1

    Quel rsultat produit le programme suivant ?

    Variables v, double: entierDbut

    V 231

    Double V * 2

    ecrire_ecran Vecrire_ecran DoubleFin

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    96/245

    ENSA Safi 96

    Solution

    On verra apparatre lcran 231, puis 462 (qui vaut 231 * 2)

    Exercice 2

  • 7/25/2019 Initiation La Programmationfinal2012

    97/245

    ENSA Safi 97

    Exercice 2

    Ecrire un programme qui demande un nombre lutilisateur, puis qui calcule et affiche le carr de cenombre.

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    98/245

    ENSA Safi 98

    Solution

    variables nb, carr : Entier

    Dbutecrire_ecran "Entrez un nombre :"lire_clavier nbcarr nb * nb

    ecrire_ecran "Son carr est : ", carrFin

    En fait, on pourrait tout aussi bien conomiser la variable carr enremplaant les deux avant-dernires lignes par :

    ecrire_ecran "Son carr est : ", nb*nb

    C'est une question de style ; dans un cas, on privilgie la lisibilit del'algorithme, dans l'autre, on privilgie l'conomie d'une variable.

    Exercice 3

  • 7/25/2019 Initiation La Programmationfinal2012

    99/245

    ENSA Safi 99

    e c ce 3

    Ecrire un programme qui l it le prix HT dun article, lenombre darticles et le taux de TVA, et qui fourni t le prixtotal TTC correspondant. Faire en sorte que des libellsapparaissent clairement.

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    100/245

    ENSA Safi 100

    variables nb, pht, ttva, pttc : entier

    Dbutecrire_ecran "Entrez le prix hors taxes :"lire_clavier phtecrire_ecran "Entrez le nombre darticles :"lire_clavier nbecrire_ecran "Entrez le taux de TVA ( %):"lire_clavier ttvapttc nb * pht * (1 + (ttva/100))

    ecrire_ecran "Le prix toutes taxes est : ", pttcFin L aussi, on pourrait squeezer une variable et une ligne en crivant

    directement. :ecrire_ecran "Le prix toutes taxes est : ", nb * pht * (1 + ttva)

    C'est plus rapide, plus lger en mmoire, mais un peu plus difficile relire

    (et crire !)

    Les Tests

  • 7/25/2019 Initiation La Programmationfinal2012

    101/245

    ENSA Safi 101

    Si boolenAlors

    InstructionsFinsi

    Si boolenAlorsInstructions 1

    SinonInstructions 2

    Finsi

    Si boolen1AlorsInstructions 1

    Sinon si boolen2AlorsInstructions 2

    Instructions 3

    SinonInstructions 4

    Finsi

    Les Tests

  • 7/25/2019 Initiation La Programmationfinal2012

    102/245

    ENSA Safi 102

    Boolen est une condition :

    gal =

    diffrent de !=

    strictement plus petit que

    plus petit ou gal =

    Conditions composes oprateur logique ET, OU, NON, etXOR

    Exercice 1

  • 7/25/2019 Initiation La Programmationfinal2012

    103/245

    ENSA Safi 103

    crire un algorithme qui demande un nombre lutilisateur, etlinforme ensuite si ce nombre est positif ou ngatif (on laissede ct le cas o le nombre vaut zro).

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    104/245

    ENSA Safi 104

    variables n : EntierDbut

    ecrire_ecran "Entrez un nombre : "lire_clavier nSi n > 0Alors

    ecrire_ecran "Ce nombre est positif "

    Sinonecrire_ecran "Ce nombre est ngatif"

    FinsiFin

    Exercice 2

  • 7/25/2019 Initiation La Programmationfinal2012

    105/245

    ENSA Safi 105

    Ecrire un algorithme qui demande deux nombres lutilisateuret linforme ensuite si leur produit est ngatif ou positif (onlaisse de ct le cas o le produit est nul). Attention toutefois :on ne doit pas calculer le produit des deux nombres.

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    106/245

    ENSA Safi 106

    variables m, n : EntierDbut

    ecrire_ecran "Entrez deux nombres diff de 0"lire_clavier m, nSi ((m > 0 ET n > 0) OU (m < 0 ET n < 0))Alors

    ecrire_ecran "Leur produit est positif"

    Sinonecrire_ecran "Leur produit est ngatif"

    FinsiFin

    Exercice 3

  • 7/25/2019 Initiation La Programmationfinal2012

    107/245

    ENSA Safi 107

    Ecrire un algorithme qui demande trois noms lutilisateur etlinforme ensuite sils sont rangs ou non dans lordrealphabtique.

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    108/245

    ENSA Safi 108

    variables a, b, c : CaractreDbut

    ecrire_ecran "Entrez successivement trois noms : "lire_clavier a, b, cSi ((a < b) ET (b < c)) Alors

    ecrire_ecran "Ces noms sont classs

    alphabtiquement"Sinon

    ecrire_ecran "Ces noms ne sont pas classs"Finsi

    Fin

    Exercice 4

  • 7/25/2019 Initiation La Programmationfinal2012

    109/245

    ENSA Safi 109

    Ecrire un algorithme qui demande un nombre lutilisateur, etlinforme ensuite si ce nombre est positif ou ngatif (on inclutcette fois le traitement du cas o le nombre vaut zro).

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    110/245

    ENSA Safi 110

    variables n : EntierDbut

    ecrire_ecran "Entrez un nombre : "lire_clavier nSi n < 0 Alors

    ecrire_ecran "Ce nombre est ngatif"

    Sinon si n = 0 Alorsecrire_ecran "Ce nombre est nul"

    Sinonecrire_ecran "Ce nombre est posit if"

    Finsi

    Fin

    Exercice 5

  • 7/25/2019 Initiation La Programmationfinal2012

    111/245

    ENSA Safi 111

    Ecrire un algorithme qui demande deux nombres lutilisateur

    et linforme ensuite si le produit est ngatif ou positif (on inclutcette fois le traitement du cas o le produit peut tre nul).Attention toutefois, on ne doit pas calculer le produit !

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    112/245

    ENSA Safi 112

    variables m, n : Entier

    Dbutecrire_ecran "Entrez deux nombres : "lire_clavier m, nSi m = 0 OU n = 0 Alors

    ecrire_ecran " Le produit est nul"Sinon s i (m < 0 ET n < 0) OU (m > 0 ET n > 0) Alors

    ecrire_ecran "Le produit est positi f"

    Sinonecrire_ecran " Le produit est ngatif"Finsi

    Fin

    Si on souhaite simpli fier lcriture de la condition lourde du SinonSi,on peut toujours passer par des variables boolennes intermdiaires.

    Une astuce de sioux consiste galement employer un Xor (c'est l'undes rares cas dans lesquels i l est pertinent)

    Exercice 5

  • 7/25/2019 Initiation La Programmationfinal2012

    113/245

    ENSA Safi 113

    Ecrire un algorithme qui demande lge dun enfant

    lutilisateur. Ensuite, il linforme de sa catgorie : "Poussin" de 6 7 ans

    "Pupille" de 8 9 ans

    "Minime" de 10 11 ans

    "Cadet" aprs 12 ans

    Peut-on concevoir plusieurs algorithmes quivalents menant ce rsultat ?

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    114/245

    ENSA Safi 114

    variables age : Entier

    Dbutecrire_ecran "Entrez lge de lenfant : "lire_clavier ageSi age >= 12Alors

    ecrire_ecran "Catgorie Cadet"Sinon si age >= 10 Alors

    ecrire_ecran "Catgorie Minime"

    Sinon si age >= 8 Alorsecrire_ecran "Catgorie Pupille"Sinon si age >= 6 Alors

    ecrire_ecran "Catgorie Poussin"Finsi

    Fin

    On peut videmment crire cet algorithme de diffrentes faons, ne serait-ce quen commenant par la catgorie la plus jeune.

    Linstruction selonexemple Comparer:

  • 7/25/2019 Initiation La Programmationfinal2012

    115/245

    ENSA Safi 115

    p

    selon abrviation

    cas "M" :

    ecrire_ecran " Monsieur "cas "Mme" :

    ecrire_ecran " Madame "

    cas "Mlle" :

    ecrire_ecran " Mademoiselle "

    Autres :ecrire_ecran " Monsieur, Madame"

    finselon

    p

    si abrviation = "M alors

    ecrire_ecran "Monsieur"

    sinon si abrviation = "Mme alorsecrire_ecran "Madame"

    sinon si abrviation = "Mlle" alors

    ecrire_ecran "Mademoiselle"

    sinon

    ecrire_ecran "Monsieur,Madame "finsi

    Exercice 6

  • 7/25/2019 Initiation La Programmationfinal2012

    116/245

    ENSA Safi 116

    Ecrire un algorithme qui demande loperation et 2 numero

    lutilisateur. Ensuite, il affiche le resultat :

    Peut-on concevoir plusieurs algorithmes quivalents menant ce rsultat ?

    Solutionvariables nbr1 nbr2: Entier

  • 7/25/2019 Initiation La Programmationfinal2012

    117/245

    ENSA Safi 117

    variables nbr1,nbr2: Entier

    o:charactereDbut

    ecrire_ecran "Entrez 1er nbr et nbr2"

    lire_clavier nbr1, nbr2ecrire_ecran "Entrez operation"lire_clavier o

    selon o

    cas "+" :

    res

  • 7/25/2019 Initiation La Programmationfinal2012

    118/245

    ENSA Safi 118

    Si A ET BAlors

    Instructions 1SinonInstructions 2

    Finsi

    quivaut :

    Si NON A OU NON BAlorsInstructions 2

    SinonInstructions 1

    Finsi

    Exercice 1

  • 7/25/2019 Initiation La Programmationfinal2012

    119/245

    ENSA Safi 119

    Formulez un algorithme quivalent lalgorithme suivant :

    Si Tutu > Toto + 4 OU Tata = "OK"AlorsTutu Tutu + 1

    SinonTutu Tutu 1

    Finsi

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    120/245

    ENSA Safi 120

    Aucune difficult, il suffit dappliquer la rgle de la

    transformation du OU en ET vue en cours (loi de Morgan).Attention toutefois la rigueur dans la transformation desconditions en leur contraire...

    Si Tutu

  • 7/25/2019 Initiation La Programmationfinal2012

    121/245

    ENSA Safi 121

    Cet algorithme est destin prdire l'avenir, et il doit tre

    infaillible ! Il lira au clavier lheure et les minutes, et il affichera lheure

    quil sera une minute plus tard. Par exemple, si l'utilisateurtape 21 puis 32, l'algorithme doit rpondre :

    "Dans une minute, il sera 21 heure(s) 33".NB : on suppose que l'utilisateur entre une heure valide. Pas

    besoin donc de la vrifier.

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    122/245

    ENSA Safi 122

    variables h, m : entier

    Dbutecrire_ecran "Entrez les heures, puis les minutes : "lire_clavier h, mm m + 1Si m = 60 Alors

    m 0h h + 1

    FinSi

    Si h = 24 Alorsh 0

    FinSiecrire_ecran "Dans une minute il sera ", h, "heure(s) " , m, "minute(s)"

    Fin

    Exercice 3

  • 7/25/2019 Initiation La Programmationfinal2012

    123/245

    ENSA Safi 123

    De mme que le prcdent, cet algorithme doit demander une

    heure et en afficher une autre. Mais cette fois, il doit grergalement les secondes, et afficher l'heure qu'il sera uneseconde plus tard.

    Par exemple, si l'utilisateur tape 21, puis 32, puis 8,l'algorithme doit rpondre : "Dans une seconde, il sera 21heure(s), 32 minute(s) et 9 seconde(s)".

    NB : l encore, on suppose que l'utilisateur entre une datevalide.

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    124/245

    ENSA Safi 124

    variables h, m, s : entier

    Dbutecrire_ecran "Entrez les heures, puis les minutes, puis lessecondes : "

    lire_clavier h, m, ss s + 1Si s = 60 Alors

    s 0m m + 1

    FinSiSi m = 60 Alorsm 0h h + 1

    FinSiSi h = 24 Alors

    h 0FinSi

    ecrire_ecran " Dans une seconde il sera " , h, "h" , m, "m et ", s, "s"Fin

    Exercice 4

  • 7/25/2019 Initiation La Programmationfinal2012

    125/245

    ENSA Safi 125

    Un magasin de reprographie facture 0,10 E les dix premires

    photocopies, 0,09 E les vingt suivantes et 0,08 E au-del.Ecrivez un algorithme qui demande lutilisateur le nombre dephotocopies effectues et qui affiche la facturecorrespondante.

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    126/245

    ENSA Safi 126

    variables n : entier

    p : reelDbut

    ecrire_ecran "Nombre de photocopies : "lire_clavier nSi n

  • 7/25/2019 Initiation La Programmationfinal2012

    127/245

    ENSA Safi 127

    Les habitants de Zorglub paient limpt selon les rgles

    suivantes : les hommes de plus de 20 ans paient limpt

    les femmes paient limpt si elles ont entre 18 et 35 ans

    les autres ne paient pas dimpt

    Le programme demandera donc lge et le sexe duZorglubien, et se prononcera donc ensuite sur le fait quelhabitant est imposable.

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    128/245

    ENSA Safi 128

    variables sex : Caractre

    age : entierC1, C2 : BoolenDbut

    ecrire_ecran "Entrez le sexe (M/F) : "lire_clavier sexecrire_ecran "Entrez lge: "lire_clavier age

    C1 sex = "M" ET age > 20C2 sex = "F" ET (age > 18 ET age < 35)Si C1 ou C2 Alors

    ecrire_ecran " Imposable"Sinon

    ecrire_ecran "Non Imposable"FinSi

    Fin

    Exercice 6

  • 7/25/2019 Initiation La Programmationfinal2012

    129/245

    ENSA Safi 129

    Une compagnie d'assurance automobile propose ses clients quatre familles de tarifsidentifiables par une couleur, du moins au plus onreux : tarifs bleu, vert, orange et rouge. Le

    tarif dpend de la situation du conducteur : un conducteur de moins de 25 ans et titulaire du permis depuis moins de deux ans, se voit

    attribuer le tarif rouge, si toutefois il n'a jamais t responsable d'accident. Sinon, lacompagnie refuse de l'assurer.

    un conducteur de moins de 25 ans et titulaire du permis depuis plus de deux ans, ou de plusde 25 ans mais titulaire du permis depuis moins de deux ans a le droit au tarif orange s'il n'ajamais provoqu d'accident, au tarif rouge pour un accident, sinon il est refus.

    un conducteur de plus de 25 ans titulaire du permis depuis plus de deux ans bnficie du tarif

    vert s'il n'est l'origine d'aucun accident et du tarif orange pour un accident, du tarif rougepour deux accidents, et refus au-del De plus, pour encourager la fidlit des clients accepts, la compagnie propose un contrat de

    la couleur immdiatement la plus avantageuse s'il est entr dans la maison depuis plus d'unan.

    Ecrire l'algorithme permettant de saisir les donnes ncessaires (sans contrle de saisie) etde traiter ce problme. Avant de se lancer corps perdu dans cet exercice, on pourrarflchir un peu et s'apercevoir qu'il est plus simple qu'il n'en a l'air (cela s'appelle faire uneanalyse !)

    variables Age,Dperm, NbrACC, Niv : entier

    AncCI C1,C2,C3 : Booleen

    DEBUT

    Sinon si C3 ET NbrACC=1 Alors

    Niv3

    Sinon si C3 ET NbrACC=2 Alors

  • 7/25/2019 Initiation La Programmationfinal2012

    130/245

    DEBUT

    ecrire_ecran " votre age, Durer permi, NbrACC,AncCI

    lire_clavier Age,Dperm,NbrACC, AncCl

    C1 age2

    Si C1 ET NbrACC!=0 Alors

    Niv5

    Sinon si C1 ET NbrACC=0 alors

    Niv 4

    Finsi

    si C2 ET NbrACC=0 Alors

    Niv3

    Sinon si C2 ET NbrACC=1 Alors

    Niv4

    Sinon si C2 ET NbrACC>1 alors

    Niv5

    finsi

    si C3 ET NbrACC=0 Alors

    Niv2

    Sinon si C3 ET NbrACC=2 Alors

    Niv4

    Sinon si C3 ET NbrACC>2 alors

    Niv5

    finsi

    si AncCl Alors

    NivNiv-1

    finsi

    si NIV=

  • 7/25/2019 Initiation La Programmationfinal2012

    131/245

    ENSA Safi 131

    Vous trouvez cela compliqu ? Oh, certes oui, a l'est ! Et d'autant plus qu'en lisant entre les lignes,on pouvait s'apercevoir que ce galimatias de tarifs recouvre en fait une logique trs simple : un

    systme points. Et il suffit de comptabiliser les points pour que tout s'claire... Reprenons justeaprs l'affectation des troi s variables boolennes C1, C2, et C3. On cri t : P 0

    Si Non(C1) AlorsP P + 1

    FinSiSi Non(C2) AlorsP P + 1

    FinSiP P + accSi P < 3 et C3 Alors

    P P - 1FinSiSi P = -1 Alorssitu "Bleu"

    Sinon si P = 0 Alorssitu "Vert"

    Sinon si P = 1 Alorssitu "Orange"

    Sinon si P = 2 Alorssitu "Rouge"

    Sinon

    situ "Refus"FinSiecrire_ecran "Votre situation : " , situFin

    Exercice 7

  • 7/25/2019 Initiation La Programmationfinal2012

    132/245

    ENSA Safi 132

    Les lections lgislatives, en Guignolerie Septentrionale, obissent la

    rgle suivante : lorsque l'un des candidats obtient plus de 50% des suffrages, il est lu ds

    le premier tour.

    en cas de deuxime tour, peuvent participer uniquement les candidatsayant obtenu au moins 12,5% des voix au premier tour.

    Vous devez crire un algorithme qui permette la saisie des scores dequatre candidats au premier tour. Cet algorithme traitera ensuite lecandidat numro 1 (et uniquement lui) : il dira s'il est lu, battu, s'il setrouve en ballottage favorable (il participe au second tour en tant arriv entte l'issue du premier tour) ou dfavorable (il participe au second toursans avoir t en tte au premier tour).

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    133/245

    ENSA Safi 133

    Cet exercice, du pur point de vue algorithmique, n'est pas trs mchant. En revanche, il reprsentedignement la catgorie des noncs pigs.

    En effet, rien de plus facile que d'crire : si le candidat a plus de 50%, il est lu, sinon s'il a plus de12,5 %, il est au deuxime tour, s inon il est limin. H h h... mais i l ne faut pas oublier que lecandidat peut trs bien avoir eu 20 % mais tre tout de mme limin, tout simplement parce quel'un des autres a fait plus de 50 % et donc qu'i l n'y a pas de deuxime tour !...

    Moralit : ne jamais se jeter sur la programmation avant d'avoir soigneusement men l'analyse duproblme traiter.

    variables A, B, C, D : entier C1,C2,C3,C4 : Boolen

    Dbutecrire_ecran "Entrez les scores des quatre prtendants :"

    lire_clavier A, B, C, DC1 A > 50C2 B > 50 ou C > 50 ou D > 50C3 A >= B et A >= C et A >= DC4 A >= 12,5Si C1 Alors

    ecrire_ecran "Elu au premier tour"Sinon si C2 ou Non(C4) Alors

    ecrire_ecran "Battu, limin, sorti !!!Sinon si C3 Alors

    ecrire_ecran "Ballotage favorable"

    Sinonecrire_ecran "Ballotage dfavorable"FinSi

    Fin

    Les Boucles

  • 7/25/2019 Initiation La Programmationfinal2012

    134/245

    ENSA Safi 134

    TantQue boolen(vrai) faire

    InstructionsFinTantQue

    Pour Compteur := Init ial Final par ValeurDuPasInstructions

    finpourOu

    Pour Compteur

    Initial Final par ValeurDuPasInstructions

    Compteur suivant

    Les Boucles

  • 7/25/2019 Initiation La Programmationfinal2012

    135/245

    ENSA Safi 135

    Choisir pour... Choisir tant que...

    si le nombre ditrations est connu lavance,

    choisir la boucle pour

    si la boucle doit s'arrter quand survient un vnement ,choisir la boucle tant que

    Les Boucles A ne pas faire

  • 7/25/2019 Initiation La Programmationfinal2012

    136/245

    ENSA Safi 136

    A ne pas faire1- Des boucles peuvent donc tre imbriques ou successives Cependant, elles

    ne peuvent jamais, au grand jamais, tre croises. Cela naurait aucun senslogique, et de plus, bien peu de langages vous autoriseraient ne serait-ce

    qu crire cette structure aberrante. variables Truc, Trac : Entier

    PourTruc := instructionsPourTrac :=instructions

    finpour (Truc Suivant)

    instructionsfinpour (Trac Suivant)

    2- Vrification de condit ion d'arrt variables Truc : Entier

    DbutPourTruc :=1 15 faireTruc Truc * 2

    ecrire_ecran "Passage numro : ", TrucfinpourFin

    Truc=2,6,14,30,62,126,254,510,,1022,2046,4094,8190,16382,32766,-2,-2,-2,,,,,,,,,,,,

    Les BouclesLa boucle tant que faire

  • 7/25/2019 Initiation La Programmationfinal2012

    137/245

    ENSA Safi 137

    a bouc e ta t que a eamorage {initialisation de la (des) variable(s) de condition}

    tant que fairetraitement {suite dinstructions}relance {r-affectation de la (des) variable(s) de condition}

    FinTantQueFonction:-rpter une suite dinstructions tant quune condition

    est remplie remarque: si la condition est fausse ds le dpart, le traitement nest

    jamais excut si vous oubliez la r-affectation de la (des) variable(s) de

    condition la condition, le traitement ne sarrterajamais .

    Exercice 1

  • 7/25/2019 Initiation La Programmationfinal2012

    138/245

    ENSA Safi 138

    Ecrire un algorithme qui demande lutilisateur un nombre

    compris entre 1 et 3 jusqu ce que la rponse convienne.

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    139/245

    ENSA Safi 139

    variables N : Entier

    DebutN 0

    ecrire_ecran "Entrez un nombre entre 1 et 3"TantQue N < 1 ou N > 3 faire

    lire_clavier N

    Si N < 1 ou N > 3 Alorsecrire_ecran "Saisie errone. Recommencez

    FinSiFinTantQue

    Fin

    Exercice 2

  • 7/25/2019 Initiation La Programmationfinal2012

    140/245

    ENSA Safi 140

    Ecrire un algorithme qui demande un nombre compris entre

    10 et 20, jusqu ce que la rponse convienne. En cas derponse suprieure 20, on fera apparatre un message : Plus petit ! , et inversement, Plus grand ! si le nombreest infrieur 10.

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    141/245

    ENSA Safi 141

    variables N : Entier

    DebutN 0ecrire_ecran "Entrez un nombre entre 10 et 20"TantQue N < 10 ou N > 20 faire

    lire_clavier NSi N < 10 Alors

    ecrire_ecran " Plus grand !"Sinon si N > 20 Alors

    ecrire_ecran " Plus petit !"FinSi

    FinTantQue

    Fin

    Les Boucles

  • 7/25/2019 Initiation La Programmationfinal2012

    142/245

    ENSA Safi 142

    Smantique de la boucle pour Implicitement, linstruction pour:

    -initialise une variable de boucle (le compteur)

    -incrmente cette variable chaque pas-vrifie que cette variable ne dpasse pas la borne

    suprieureAttention : -le traitement ne doit pas modifier le compteur de

    boucle

    Exercice 3

  • 7/25/2019 Initiation La Programmationfinal2012

    143/245

    ENSA Safi 143

    Ecrire un algorithme qui demande un nombre de dpart, et qui

    ensuite affiche les dix nombres suivants. Par exemple, sil'utilisateur entre le nombre 17, le programme affichera lesnombres de 18 27.

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    144/245

    ENSA Safi 144

    variables N, i : Entier

    Debutecrire_ecran "Entrez un nombre : "lire_clavier Necrire_ecran "Les 10 nombres suivants sont : "Pour i := N + 1 N + 10

    ecrire_ecran ifinpour

    Fin

    Exercice 4

  • 7/25/2019 Initiation La Programmationfinal2012

    145/245

    ENSA Safi 145

    Ecrire un algorithme qui demande un nombre de dpart, et qui

    ensuite crit la table de multiplication de ce nombre, prsentecomme suit (cas o l'utilisateur entre le nombre 7) :Table de 7 :7 x 1 = 77 x 2 = 14

    7 x 3 = 217 x 10 = 70

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    146/245

    ENSA Safi 146

    variables N, i : Entier

    Debutecrire_ecran "Entrez un nombre : "lire_clavier Necrire_ecran "La table de mult iplication de ce nombre

    est : "

    Pour i := 1 10ecrire_ecran N, " x " , i, " = ", n*i

    finpourFin

    Exercice 5

  • 7/25/2019 Initiation La Programmationfinal2012

    147/245

    ENSA Safi 147

    Ecrire un algorithme qui demande un nombre de dpart, et qui

    calcule la somme des entiers jusqu ce nombre. Parexemple, si lon entre 5, le programme doit calculer :

    1 + 2 + 3 + 4 + 5 = 15

    NB : on souhaite afficher uniquement le rsultat, pas la

    dcomposition du calcul.

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    148/245

    ENSA Safi 148

    variables N, i, Som : Entier

    Debutecrire_ecran "Entrez un nombre : "lire_clavier NSom 0

    Pour i := 1 N

    Som Som + ifinpourecrire_ecran "La somme est : " , Som

    Fin

    Exercice 6

  • 7/25/2019 Initiation La Programmationfinal2012

    149/245

    ENSA Safi 149

    Ecrire un algorithme qui demande un nombre de dpart, et qui

    calcule sa factorielle.NB : la factorielle de 8, note 8 !, vaut

    1 x 2 x 3 x 4 x 5 x 6 x 7 x 8

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    150/245

    ENSA Safi 150

    variables N, i, F : Entier

    Debutecrire_ecran "Entrez un nombre : "lire_clavier NF 1

    Pour i := 2 N

    F F * ifinpourecrire_ecran "La factorielle est : " , F

    Fin

    Exercice 7

  • 7/25/2019 Initiation La Programmationfinal2012

    151/245

    ENSA Safi 151

    Ecrire un algorithme qui demande successivement 20

    nombres lutilisateur, et qui lui dise ensuite quel tait le plusgrand parmi ces 20 nombres :

    Entrez le nombre numro 1 : 12Entrez le nombre numro 2 : 14etc.

    Entrez le nombre numro 20 : 6Le plus grand de ces nombres est : 14

    Modifiez ensuite lalgorithme pour que le programme affichede surcrot en quelle position avait t saisie ce nombre :

    Ctait le nombre numro 2

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    152/245

    ENSA Safi 152

    variables N, i, PG : EntierDebut

    PG 0Pour i := 1 20ecrire_ecran "Entrez un nombre : "lire_clavier NSi i = 1 ou N > PG Alors

    PG NFinSi

    finpourecrire_ecran "Le nombre le plus grandtait : ", PG

    Fin

    En ligne 3, on peut mettre nimporte quoidans PG, il suffit que cette variable soit

    affecte pour que le premier passage enligne 7 ne provoque pas d'erreur.

    Pour la version amliore, cela donne : variables N, i, PG, IPG : Entier

    DebutPG -32768Pour i := 1 20

    ecrire_ecran "Entrez un nombre : "l ire_clavier NSi i = 1 ou N > PG AlorsPG NIPG i

    FinSifinpourecrire_ecran "Le nbre le plus grandtait : ", PGecrire_ecran "Il a t saisi en position ",IPG

    Fin

    Exercice 8

  • 7/25/2019 Initiation La Programmationfinal2012

    153/245

    ENSA Safi 153

    Rcrire lalgorithme prcdent, mais cette fois-ci on ne

    connat pas davance combien lutilisateur souhaite saisir denombres. La saisie des nombres sarrte lorsque lutilisateurentre un zro.

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    154/245

    ENSA Safi 154

    variables N, i, PG, IPG : EntierDebut

    N 1i 0PG -32766TantQue N 0

    ecrire_ecran "Entrez un nombre : "l ire_clavier Ni i + 1

    Si i = 1 ou N > PG AlorsPG NIPG i

    FinSiFinTantQueecrire_ecran "Le nombre le plus grand tait : ", PGecrire_ecran " Il a t saisi en position numro " , IPG

    Fin

    Exercice 9

  • 7/25/2019 Initiation La Programmationfinal2012

    155/245

    ENSA Safi 155

    lire la suite des prix (en euros entiers et termine par zro)

    des achats dun client. Calculer la somme quil doit, lire lasomme quil paye, et simuler la remise de la monnaie enaffichant les textes "10 Euros", "5 Euros" et "1 Euro" autant defois quil y a de coupures de chaque sorte rendre.

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    156/245

    ENSA Safi 156

    variables somdue, M,PE, res, Nb10PE,Nb5PE : Entier

    Debut

    PE

  • 7/25/2019 Initiation La Programmationfinal2012

    157/245

    ENSA Safi 157

    crire un algorithme qui permette de connatre ses chances de gagner autierc, quart, quint et autres impts volontaires.

    On demande lutilisateur le nombre de chevaux partants, et le nombre dechevaux jous. Les deux messages affichs devront tre :

    Dans lordre : une chance sur X de gagnerDans le dsordre : une chance sur Y de gagner

    X et Y nous sont donns par la formule suivante, si n est le nombre dechevaux partants et p le nombre de chevaux jous (on rappelle que le

    signe ! signifie "factorielle", comme dans l'exercice 5.6 ci-dessus) : X = n ! / (n - p) !

    Y = n ! / (p ! * (n p) !) NB : cet algorithme peut tre crit dune manire simple, mais relativement

    peu performante. Ses performances peuvent tre singulirementaugmentes par une petite astuce. Vous commencerez par crire lamanire la plus simple, puis vous identifierez le problme, et crirez une

    deuxime version permettant de le rsoudre..

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    158/245

    ENSA Safi 158

    Spontanment, on est tent d'crire l'algor ithme suivant : variables N, P, i, Num, Dno1, Dno2 : Entier

    Debut ecrire_ecran "Entr ez le nombre de chevaux partants : "lire_clavier Necrire_ecran "Entr ez le nombre de chevaux jous : "lire_clavier PNum 1Pour i := 2 NNum Num * i

    finpourDno1 1Pour i := 2 N-PDno1 Dno1 * i

    finpourDno2 1Pour i := 2 PDno2 Dno2 * i

    finpourecrire_ecran "Dans l ordre, une chance sur " , Num / Dno1

    ecrire_ecran " Dans le dsordre, une sur ", Num / (Dno1 *Dno2)Fin

    Cette version, formellement juste, comporte tou t de mme deuxfaiblesses.

    La premire, et la plus g rave, concerne la manire dont elle

    calcule le rsultat final. Celui-ci est le quo tient d'un no mbre parun autre ; o r, ces nombres auront rapidement tendance tre trsgrands. En calculant, comme on le fait ici, d'abord le num rateur,puis ensui te le dnominateur, on prend le risq ue de demander la machine de stocker des nombr es trop grands pour qu 'elle soitcapable de les coder (cf. le p rambule). C'est d'autant p lus bteque rien ne nous ob lige procder ainsi : on n'est pas obl ig depasser par la divisi on de deux trs grands nomb res pour obtenirle rsultat voulu.

    La deuxime remarque est qu'on a progr amm ici trois bou clessuccessives. Or, en y regardant bien, on peut voir q u'aprssimpli fication de la formul e, ces trois boucl es compo rtent lemme nombre de tours ! (si vo us ne me croyez pas, crivez unexemple de calcul et biffez les nombres id entiques au numrateur

    et au dnominateur). Ce tripl e calcul (ces trois bo ucles) peutdonc tre ramen(es) un(e) seul(e). Et voi l le travail, qui estnon seulement bien plus court, mais aussi plus perform ant :

    variables N, P, i, O, F : EntierDebutecrire_ecran "Entr ez le nombre de chevaux partants : "lire_clavier Necrire_ecran "Entrez le nombre de chevaux jous : "lire_clavier PA 1B 1Pour i : = 1 PA A * (i + N - P)B B * i

    finpour

    ecrire_ecran "Dans l ordre, une chance sur " , Aecrire_ecran "Dans le dsord re, une chance sur ", A / BFin

    Comparaison boucles pour et tant que

    1 bV l f i

  • 7/25/2019 Initiation La Programmationfinal2012

    159/245

    ENSA Safi 159

    pourcpt 1 nbVal faireecrire_ecran "Donnez une valeur :"lire_clavier valeur

    totalValeurstotalValeurs+ valeur {cumul}

    Finpour. quivaut

    cpt 0tant que cpt

  • 7/25/2019 Initiation La Programmationfinal2012

    160/245

    ENSA Safi 160

    La boucle rpter ... jusquRpter

    (r)affectation de la (des) variable(s) de condition

    traitement {suite dinstructions}jusqu

    Fonction:-excuter une suite dinstructions au moins une fois et larpter tant quune condition est pas remplieRemarque: le traitement dans lexemple prcdent se limite lar-affectation de la variable de condition

    Les Boucles rpterjusqu (suit)Comparaison boucles rpter et tant que (exemple exercice1)

    R t

  • 7/25/2019 Initiation La Programmationfinal2012

    161/245

    ENSA Safi 161

    Rpterecrire_ecran "Donnez une valeur positive paire :"lire_clavier valeur

    jusqu (valeur > 1 ET (valeur < 3) )

    quivaut :

    ecrire_ecran "Donnez une valeur positive paire :"

    lire_clavier valeurtantque (valeur < 1 ou (valeur > 3) ) faire

    ecrire_ecran "Donnez une valeur positive paire:"lire_clavier valeur

    FinTantQue

    Les Boucles rpterjusqu (suit)Comparaison boucles rpter et tant que (suite)

  • 7/25/2019 Initiation La Programmationfinal2012

    162/245

    ENSA Safi 162

    boucle tant que-condition vrifie avant chaque excution du traitement-le traitement peut donc ne pas tre excut

    -de plus : la condition porte surtout sur la saisie de nouvellesvariables (relance)

    boucle rpter-condition vrifie aprs chaque excution du traitement-le traitement est excut au moins une fois-de plus : la condition porte surtout sur le rsultat du traitement

    Remarque: la boucle rpter est typique pour les saisies avecvrification.

    Choisir pour... tant que rpter

  • 7/25/2019 Initiation La Programmationfinal2012

    163/245

    ENSA Safi 163

    Nombreditrations

    connu ?

    Traitementexcut aumoins une

    fois ?

    Boucle tant que

    Boucle rpter

    Boucle pour

    OUI

    NON

    NONOUI

    Les Tableaux

  • 7/25/2019 Initiation La Programmationfinal2012

    164/245

    ENSA Safi 164

    Un ensemble de valeurs portant le mme nom de variable et repres parun nombre, sappelle un tableau, ou encore une variable indice.Le nombre qui, au sein dun tableau, sert reprer chaque valeur sappellelindice.Chaque fois que lon doit dsigner un lment du tableau, on fait figurer lenom du tableau, suivi de lindice de llment, entre [].

    Syntaxe

    variables T[1:4] : tableau de rel T[2] 0

    T[4] 0 est quivalent

    i 4

    T[i] 0

    Les Tableaux

    Dfi iti d t

  • 7/25/2019 Initiation La Programmationfinal2012

    165/245

    ENSA Safi 165

    Dfinition du type

    1 2 3 4 5 6

    tab

    1 2 3 4 5untab

    Remarques :

    Indices : en gnral, dmarrage 1, mais en C++, dmarrage 0

    Nombre doctets occups : dpend du type des valeurs enregistres

    12 5 -78 2 -21 8

    nom du tableau

    Indice

    Contenu du tableau

    t e s t e

    Exercice 1

  • 7/25/2019 Initiation La Programmationfinal2012

    166/245

    ENSA Safi 166

    Ecrire un algorithme qui dclare et remplisse un tableau de 7

    valeurs numriques en les mettant toutes zro.

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    167/245

    ENSA Safi 167

    variables Truc [1:7] : tableau de rel

    i : entierDebut

    Pour i := 1 7Truc[i] 0

    finpourFin

    Exercice 2

  • 7/25/2019 Initiation La Programmationfinal2012

    168/245

    ENSA Safi 168

    Ecrire un algorithme qui dclare et remplisse un tableau

    contenant les six voyelles de lalphabet latin.

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    169/245

    ENSA Safi 169

    variables Truc [1:6] : Tableau de Caractre

    DebutTruc[1] "a"

    Truc[2] "e"

    Truc[3] "i"

    Truc[4] "o"

    Truc[5] "u"Truc[6] "y"

    Fin

    Exercice 3

  • 7/25/2019 Initiation La Programmationfinal2012

    170/245

    ENSA Safi 170

    Ecrire un algorithme qui dclare un tableau de 9 notes, dont

    on fait ensuite saisir les valeurs par lutilisateur.

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    171/245

    ENSA Safi 171

    variables Notes [1:4] : Tableau de entier

    i : entier

    Debut

    Pour i := 1 4ecrire_ecran "Entrez la note numro " , ilire_clavier Notes[i]

    finpour

    Fin

    Exercice 4

  • 7/25/2019 Initiation La Programmationfinal2012

    172/245

    ENSA Safi 172

    Que produit lalgorithme suivant ?

    variables Nb [1:6] : tableau de Entieri : EntierDbut

    Pour i := 1 6

    Nb[i] i * i

    finpourPour i := 1 6ecrire_ecran Nb[i]

    finpourFin

    Peut-on simplifier cet algorithme avec le mme rsultat ?

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    173/245

    ENSA Safi 173

    Cet algorithme remplit un tableau avec six valeurs : 1, 4,

    9, 16, 25,36.Il les crit ensuite lcran. Simplification :

    variables T[1:6] : tableau de Entieri : Entier

    DbutPour i := 1 6

    Nb[i] i * i

    ecrire_ecran Nb[i ]finpour

    Fin

    Exercice 5

  • 7/25/2019 Initiation La Programmationfinal2012

    174/245

    ENSA Safi 174

    Que produit lalgorithme suivant ?

    variables N[1:7]: tableau de Entieri, k : EntierDbut

    N[1] 1Pour k := 2 7

    N[k] N[k-1] + 2finpourPour i := 1 7

    ecrire_ecran N[i]finpour

    Fin

    Peut-on simpl ifier cet algorithme avec le mme rsultat ?

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    175/245

    ENSA Safi 175

    Cet algorithme remplit un tableau avec les sept valeurs :

    1, 3, 5, 7, 9, 11, 13.Il les crit ensuite lcran. Simplification :

    variables N[1:7]: tableau de Entierk : Entier

    Dbut

    N[1] 1ecrire_ecran N[1]Pour k := 2 7

    N[k] N[k-1] + 2ecrire_ecran N[k]

    finpour

    Fin

    Exercice 6

  • 7/25/2019 Initiation La Programmationfinal2012

    176/245

    ENSA Safi 176

    Que produit lalgorithme suivant ?

    variables Suite [1:8]: tableau de Entieri : Entier

    DbutSuite[1] 1Suite[2] 1

    Pour i :=3 8Suite[i] Suite[i-1] + Suite[i-2]finpourPour i := 1 8

    ecrire_ecran Suite[i]finpour

    Fin

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    177/245

    ENSA Safi 177

    Cet algorithme rempli t un tableau de 8 valeurs : 1, 1, 2, 3,

    5, 8, 13, 21

    Exercice 7

  • 7/25/2019 Initiation La Programmationfinal2012

    178/245

    ENSA Safi 178

    Ecrivez la fin de lalgorithme 3 afin que le calcul de la

    moyenne des notes soi t effectu et affich lcran.

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    179/245

    ENSA Safi 179

    variables Notes [1:9]: tableau de EntierS,i : Entier

    Debuts 0

    Pour i := 1 9ecrire_ecran " Entrez la note n " , ilire_clavier Notes[i]s s + Notes[i]

    finpourecrire_ecran "Moyenne :" , s/9

    Fin

  • 7/25/2019 Initiation La Programmationfinal2012

    180/245

    variables Num [1:10] : tableau de Entiervariables i,S,N : Entier

    variables premier : booleen

  • 7/25/2019 Initiation La Programmationfinal2012

    181/245

    pDebut

    N1

    S1

    Tantque N

  • 7/25/2019 Initiation La Programmationfinal2012

    182/245

    ENSA Safi 182

    Tableaux deux dimensions

    Exemple tableau 2 lignes et 7 colonnes

    1 2 3 4 5 6 7

    1

    2

    Dclaration

    tableau[1:2, 1:7] dentiers

    10 3 20 5 25 2 422

    9 132 1 0 124 7 9

    indices minet max des

    lignes

    indices minet max descolonnes

    Tableaux Multidimensionnels

  • 7/25/2019 Initiation La Programmationfinal2012

    183/245

    ENSA Safi 183

    REMARQUE ESSENTIELLE :Il ny a aucune diffrence qualitative entre un tableau deuxdimensions ( i, j ) et un tableau une dimension ( i * j ). De mme quele jeu de dames quon vient dvoquer, tout problme qui peut tremodlis dune manire peut aussi tre modlis de lautre.Simplement, lune ou lautre de ces techniques correspond plus

    spontanment tel ou tel problme, et facilite donc (ou compl ique, sion a choisi la mauvaise option) lcriture et la lisibilit de lalgori thme.

    Syntaxe

    variables Notes [1:9,1:9] : tableau de Entier

    Notes[1, 8] 0

    Exercice 1

  • 7/25/2019 Initiation La Programmationfinal2012

    184/245

    ENSA Safi 184

    crivez un algorithme remplissant un tableau de 6 sur 13,

    avec des zros.

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    185/245

    ENSA Safi 185

    variables Notes [1:6,1:13] :tableau de Entier

    i, j :entier

    DebutPour i := 1 6Pour j := 1 13

    Truc[i, j] 0finpour

    finpourFin

    Exercice 2

    Quel rsultat produira cet algorithme ?

  • 7/25/2019 Initiation La Programmationfinal2012

    186/245

    ENSA Safi 186

    Quel rsultat produira cet algorithme ?variables X[1:2,1:3] : tableau de Entier

    i, j, val : EntierDbut

    Val 1Pour i := 1 2

    Pour j := 1 3X[i, j] ValVal Val + 1

    finpourfinpourPour i := 1 2

    Pour j := 1 3ecrire_ecran X[i, j]

    finpourfinpour

    Fin

    Solution

  • 7/25/2019 Initiation La Programmationfinal2012

    187/245

    ENSA Safi 187

    Cet algorithme rempli t un tableau de la manire suivante:

    X[1, 1]= 1X[1, 2] = 2X[1, 3]= 3X[2, 1]= 4X[2, 2] = 5

    X[2, 3]= 6 Il cri t ensuite ces valeurs l cran, dans cet ordre.

    Exercice 3

    Quel rsultat produira cet algorithme ?

  • 7/25/2019 Initiation La Programmationfinal2012

    188/245

    ENSA Safi 188

    Quel rsultat produira cet algorithme ?variables X[1:2,1:3] : tableau de Entier

    i, j, val : EntierDbut

    Val 1Pour i := 1 2Pour j := 1 3X[i, j] ValVal Val + 1

    finpourfinpourPour j := 1 3Pour i := 1 2ecrire_ecran X[i, j]

    finpourfinpour

    Fin

    Solution

    C t l ith li t t bl d l i i t

  • 7/25/2019 Initiation La Programmationfinal2012

    189/245

    ENSA Safi 189

    Cet algorithme rempli t un tableau de la manire suivante:

    X[1, 1]= 1X[1, 2] = 4X[1, 3]= 2X[2, 1]= 5X[2, 2] = 3

    X[2, 3]= 6 Il cri t ensuite ces valeurs l cran, dans cet ordre.

    Exercice 4

    Quel rsultat produira cet algorithme ?

  • 7/25/2019 Initiation La Programmationfinal2012

    190/245

    ENSA Safi 190

    Quel rsultat produira cet algorithme ?

    variables T[1:4,1:2] : tableau de Entierk, m : EntierDbutPour k := 1 4Pour m := 1 2

    ////T[k, m] (k + 1) + 4 * m

    T[k, m] (2*(k-1))+mfinpourfinpourPour k := 1 4Pour m := 1 2ecrire_ecran T[k, m]

    finpour

    finpourFin

    Solution

    C t l ith li t t bl d l i i t

  • 7/25/2019 Initiation La Programmationfinal2012

    191/245

    ENSA Safi 191

    Cet algorithme rempli t un tableau de la manire suivante:

    T[1, 1] = 6T[1, 2] = 10T[2, 1] = 7T[2, 2] = 11T[3, 1] = 8

    T[3, 2] = 12T[4, 1] = 9T[4, 2] = 13

    Il cri t ensuite ces valeurs l cran, dans cet ordre.

    Exercice 5

    Ecrire algorithme quivalent a exercice 4 en ut ilisant un tableau

  • 7/25/2019 Initiation La Programmationfinal2012

    192/245

    ENSA Safi 192

    Ecrire algorithme quivalent a exercice 4 en ut ilisant un tableauunidimensionnel

    variables T[1:8] : tableau de Entier

    k, m,i : EntierDbutPour k := 1 4

  • 7/25/2019 Initiation La Programmationfinal2012

    193/245

    Pour k := 1 4Pour m := 1 2/////T[k, m] k + m

    i (2*(k-1))+m

    /////T[k, m] (k + 1) + 4 * m

    T[i] (k + 1) + 4 * m

    finpourfinpourPour k := 1 4Pour m := 1 2

    i (2*(k-1))+mecrire_ecran T[i]

    finpourfinpourFin

    Exercice 6

    Soit n tablea T de dimensions (12 8) pralablement

  • 7/25/2019 Initiation La Programmationfinal2012

    194/245

    ENSA Safi 194

    Soit un tableau T deux dimensions (12, 8) pralablement

    rempli de valeurs numriques.crire un algorithme qui recherche la plus grande valeur

    au sein de ce tableau.

    Solution

    variables i, j, iMax, jMax : entier

  • 7/25/2019 Initiation La Programmationfinal2012

    195/245

    ENSA Safi 195

    variables i, j, iMax, jMax : entiervariables T[1:13,1:9] : tableau de Entier

    Le principe de la recherche dans un tableau deux dimensions est strictement le mme quedans un tableau une dimension, ce qui ne doit pas nous tonner. La seule chose quichange, c'est qu'ici le balayage requiert deux boucles imbriques, au lieu d'une seule.

    Debut...iMax 0

    jMax 0Pour i := 1 13Pour j := 1 9Si T[i,j] > T[iMax,jMax]Alors

    iMax ijMax j

    FinSifinpour

    finpourecrire_ecran "Le plus grand lment est ", T[iMax,jMax]ecrire_ecran " Il se trouve aux indices ", iMax, "; ", jMax

    Fin

    Procdures et Fonctions

    Avantages:

    Les procdures ou fonctions permettent de ne pas rpter plusieurs fois

  • 7/25/2019 Initiation La Programmationfinal2012

    196/245

    ENSA Safi 196

    une mme squence dinstructions au sein du programme.

    La mise au point du programme est plus rapide en uti lisant desprocdures et des fonctions. En effet, elle peut tre ralise en dehors ducontexte du programme.

    Une procdure peut tre intgre un autre programme, ou elle pourratre range dans une biblio thque doutils ou elle pourra tre utilise parnimporte quel programme.

    Utilisation :

    Lors de la conception dun programme deux aspects apparaissent :

    - La dfinition de la procdure ou fonction.

    - Lappel de la procdure ou fonction au sein du programme.

    Lcriture de la procdure ou fonction seffectue en fonct ion deparamtres formels uti liss dans la conception de celle-ci.

    Par contre au moment de luti lisation de la procdure ou fonction, onassoc iera de vritables valeurs ces paramtres grce des paramtresdappel ou paramtres effectifs.

    Notion de fonction

  • 7/25/2019 Initiation La Programmationfinal2012

    197/245

    ENSA Safi 197

    Les Fonctions Prdfinies: Math

    A Sin(35)

  • 7/25/2019 Initiation La Programmationfinal2012

    198/245

    ENSA Safi 198

    ( )

    Une fonction est donc constitue de trois parties :

    le nom proprement dit de la fonction. Ce nom ne sinvente pas ! Il doitimprativement correspondre une fonction propose par le langage. Dansnotre exemple, ce nom est SIN.

    deux parenthses, une ouvrante, une fermante. Ces parenthses sont toujoursobligatoires, mme lorsqu'on n'crit rien l'intrieur.

    une liste de valeurs, indispensables la bonne excution de la fonction. Cesvaleurs sappellent des arguments, ou des paramtres. Certaines fonctions

    exigent un seul argument, dautres deux, etc. et dautres encore aucun. Anoter que mme dans le cas de ces fonctions nexigeant aucun argument, lesparenthses restent obligatoires. Le nombre darguments ncessaire pour unefonction donne ne sinvente pas : il est fix par le langage. Par exemple, lafonction sinus a besoin dun argument (ce nest pas surprenant, cet argumentest la valeur de langle). Si vous essayez de lexcuter en lui donnant deuxarguments, ou aucun, cela dclenchera une erreur lexcution. Notezgalement que les arguments doivent tre dun certain type, et quil fautrespecter ces types.

    Les Fonctions Prdfinies: Math

    atn(p1) arc tangente de p1 entier, rel entier, rel

  • 7/25/2019 Initiation La Programmationfinal2012

    199/245

    ENSA Safi 199

    cos(p1) cosinus de p1 entie r, rel entier, rel

    sin(p1) sinus de p1 entier, rel entier, rel

    tan(p1) tangente de p1 entier, rel entier, rel

    exp(p1) exponentielle de p1 entie r, rel entie r, rel

    rac2(p1) racine carre de p1 entier, rel entier, rel

    car(p1) caractre ayant pourcode ansi la valeur de p1

    car, chane entier

    chnombre(p1) convertit p1 en nombre entier,rel chane

    Les Fonctions Prdfinies: numriques classiques

    Une fonction extrmement rpandue est celle qui permet dercuprer la partie entire dun nombre :

  • 7/25/2019 Initiation La Programmationfinal2012

    200/245

    ENSA Safi 200

    rcuprer la partie entire d un nombre :

    Aprs : A Ent(3,228) A vaut 3Cette fonction permet de rcuprer le reste de la division dun

    nombre par un deuxime nombre. Par exemple :

    A 10 Mod 3 A vaut 1 car 10 = 3*3 + 1

    B 12 Mod 2 B vaut 0 car 12 = 6*2Cette fonction permet de rcuprer le quotion de la division

    dun nombre par un deuxime nombre. Par exemple :

    B 12 div 2 B vaut 6 car 12 = 6*2

    Gnration de nombres alatoiresAprs : Toto Alea() On a : 0 =< Toto < 1

    Les Fonctions Prdfinies: texte

    Tous les langages, je dis bien tous, proposent les fonctions suivantes,

  • 7/25/2019 Initiation La Programmationfinal2012

    201/245

    ENSA Safi 201

    g g , j , p p ,mme si le nom et la syntaxe peuvent varier dun langage lautre :

    long(chane) : renvoie le nombre de caractres dune chane milieu(chane,n1,n2) : renvoie un extrait de la chane, commenant au

    caractre n1 et faisant n2 caractres de long. Ce sont les deux seules fonctions de chanes rellement indispensables.

    Cependant, pour nous pargner des algorithmes fastidieux, les langagesproposent galement :

    gauche(chane,n) : renvoie les n caractres les plus gauche dans chane. droite(chane,n) : renvoie les n caractres les plus droite dans chane rang(chane1,chane2,p) : renvoie un nombre correspondant la position

    de chane2 dans chane1 partir de la position p. Si chane2 nest pascomprise dans chane1, la fonction renvoie zro.

  • 7/25/2019 Initiation La Programmationfinal2012

    202/245

    long("Bonjour, a va ?") vaut 16

    long("") vaut 0milieu("Zorro is back", 4, 7) vaut "ro is b"milieu("Zorro is back", 12, 1) vaut "c"gauche("Et pourtant", 8) vaut "Et pourt"droite("Et pourtant", 4) vaut "t"rang("Un pur bonheur", "pur",1) vaut 4

    rang("Un pur bonheur", "techno",1) vaut 0 rang("Un pur bonheur", "ur",8) vaut 13

    Exercice 1

  • 7/25/2019 Initiation La Programmationfinal2012

    203/245

    crivez une fonction qui renvoie le nombre de voyelles

    contenues dans une chane de caractres passe enargument. Au passage, notez qu'une fonction a tout faitle droit d'appeler une autre fonction.

    Solution

    Fonction NbVoyelles (e Mot : chaine):entier

  • 7/25/2019 Initiation La Programmationfinal2012

    204/245

    ENSA Safi 204

    Fonction NbVoyelles (e Mot : chaine):entier

    variables i, nb : entierdebutnb

  • 7/25/2019 Initiation La Programmationfinal2012

    205/245

    ENSA Safi 205

    Rcrivez la fonction Trouve, vue prcdemment, l aide des

    fonctions Mid et Len (comme quoi, Trouve, la diffrence deMid et Len, nest pas une fonction indispensable dans unlangage).

    Solutionfonction foncrang(e aa,b:chaine ;e p:entier):entier

    variables i , r :entier

    db t

  • 7/25/2019 Initiation La Programmationfinal2012

    206/245

    ENSA Safi 206

    dbut

    i

  • 7/25/2019 Initiation La Programmationfinal2012

    207/245

    ENSA Safi 207

    p p g pp p p pgroupes dinstructions auxquels on a recours sappellent des fonctions et

    des sous-procdures Fonction s 'crit toujours en-dehors au debut de la procdure principale( au

    niveau declaration).

    Dans une fonction ont peut appel une autre fonction mais on ne peut jamaisdfinir une autre fonction.

    Diffrence entre fonction et procdure

    Les fonctions ne sont qu'un cas particulier des sous-procdures : celuio doit tre renvoy vers la procdure appelante une valeur et une seule.et celle-ci doit appartenir un type de base du Pascal. C est di re unnombre, un caractre ou une chane de caractr, boolean.

    Les procdures dans tous les autres cas (celui o on ne renvoie aucunevaleur, comme celui ou en en renvoie plusieurs.

    Procdures et Fonctions :Syntaxe

    Declaration

  • 7/25/2019 Initiation La Programmationfinal2012

    208/245

    ENSA Safi 208

    Fonction RepOuiNon(e Msg : Caractre) : Caractre

    arguments formelles resultat

    variables rsultat : caractre

    .

    valeur_retour rsultat qui indique quelle valeur doit prendre la fonction lorsqu'elle est utilise parle programme.

    finfonction

    Utilisation : il suffit de citer son nom en lui indiquant le paramtre qu'elle demande.

    Debut

    ecrire_ecran RepOuiNon("oui")

    argument rel

    .

    finfonction

    Procdures et Fonctions :Syntaxe

    Declaration procedure

  • 7/25/2019 Initiation La Programmationfinal2012

    209/245

    ENSA Safi 209

    Procedure RepOuiNon(e Msg : Caractre)

    arguments formelles

    variables rsultat : caractre

    .

    finfonction

    Utilisation : il suffit de citer son nom en lui indiquant le paramtre qu'elle demande.

    Debut

    RepOuiNon("oui")

    .

    finfonction

    Procdures et Fonctions : passage par valeur

    P t f l i bl tili d l d

  • 7/25/2019 Initiation La Programmationfinal2012

    210/245

    Paramtre formel : variable utilise dans le corps du sous-

    programme qui reoit une valeur de lextrieur (ils font partide la description de la fonction)Paramtre effectif : Il s'agit de la variable (ou valeur)

    fournie lors de l'appel du sous programme (valeurs fourniespour utiliser la fonction et valeurs renvoyes)

    Copie de la valeur du paramtre effectif vers le paramtreformel correspondant lors de l'appelParamtres formel et effectif ont des noms diffrents

    Procdures et Fonctions : passage par valeur

    variables X : Entier

  • 7/25/2019 Initiation La Programmationfinal2012

    211/245

    ENSA Safi 211

    DbutX 25afficheecran(X)

    Finfonction

    Fonction afficheecran(e k : entier)ecrire_ecran kfin

    X=25

    k=25

    Passage par valeur

    Remarque: avec algoexe il fautajouter le mot e avant les argumentExemple :afficheecran(e k : entier)

    Fonctions:Porte des variables

    Si P1 reprsente le programme principal et P2, P3 deuxfonctions, le schma qui suit illustre le propos prcdent.

  • 7/25/2019 Initiation La Programmationfinal2012

    212/245

    ENSA Safi 212

    Dans P1 on dispose deX,Y et Z

    Dans P2 on dispose deA,B et X

    Dans P3 on dispose de

    U,V,X et Y

    variables X : Entier P1

    variables Y : Entier

    variables Z : Entier

    Debut

    Fin

    Fonction P2(e A, B :entier)..finfonction

    Fonction P3(e U, V :entier)..finfonction

    Remarque: avec algoexe il fautajouter le mot globaleExemple :

    variables globale x : entier

    Exemple de fonction

    Mauvaise Structure : Bonne structure :

    F ti R O iN () t

  • 7/25/2019 Initiation La Programmationfinal2012

    213/245

    ENSA Safi 213

    ...ecrire_ecran "Etes-vous mari ?"lire_clavier Rep1TantQue Rep1 "Oui" et Rep1 "Non"

    ecrire_ecran "Tapez Oui ou Non"lire_clavier Rep1

    FinTantQue...ecrire_ecran "Avez-vous des

    enfants ?"lire_clavier Rep2TantQue Rep2 "Oui" et Rep2 "Non"ecrire_ecran "Tapez Oui ou Non"lire_clavier Rep2

    FinTantQue...

    Fonction RepOuiNon() : caractre

    variables truc : carlire_clavier TrucTantQue Truc "Oui" et Truc "Non"

    ecrire_ecran "Tapez Oui ou Non"lire_clavier Truc

    FinTantQuevalretTruc