226
Initiation à la programmation algorithmique Année Académique 2007-2008

initiation à la programmationfinal2012final (1)

Embed Size (px)

Citation preview

  • Initiation la programmationalgorithmique

    Anne Acadmique 2007-2008

  • ENSA Safi 2

    Plan du cours

    Introduction linformatique Architecture dun ordinateur Dcomposition fonctionnelleConcepts cls

  • Introduction

  • 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 ?

  • ENSA Safi 5

    Quest-ce quun ordinateur ?

    Machine automatique de traitement de linformation obissant des programmes forms par des suites doprations arithmtiques et logiques (Larousse 2002)

    Diffrents niveaux dapproche : utilisateur, programmeur machine, concepteur de circuits logiques

  • ENSA Safi 6

    Des 0 et des 1

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

    Lordinateur excute la cadence de son horloge des instructions (de niveau machine ) contenue en mmoire et utilisant des donnes contenue dans une autre partie de la mmoire.

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

    Ces 0 et ces 1 correspondent des tensions des circuits lectroniques. Le cadencement est essentiellement fonction du temps de stabilisation des circuits et de leur chauffement.

  • ENSA Safi 7

    Codage binaire

    Le langage des ordinateurs

    Toutes communications l'intrieur de l'ordinateur sont faites avec des signaux lectriques 0: teint (absence de signal lectrique) 1: allum (prsence de signal lectrique)

  • 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)

  • ENSA Safi 9

  • ENSA Safi 10

    Codage et adressage

    On peut exprimer autant avec une suite de 0 et de 1, qu laide dun alphabet complet (a,b,c,d,e ). Il suffit de saccorder 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 en mmoire. Cette adresse en mmoire est elle-mme code sous forme de 0 et de 1.

  • ENSA Safi 11

    Quest-ce quun langage de programmation ?

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

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

  • 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

  • ENSA Safi 13

    Que signifie faire de linformatique ?

    Passer du temps proximit dun ordinateur ?

    Il est essentiel de prciser le niveau auquel cet outil complexe est 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 types de donnes

  • ENSA Safi 14

    A quoi sert la programmation ?

    A faire excuter par lordinateur une squence dinstructions

    Habituellement , cette squence dinstructions ralise effectivement un algorithme

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

    La programmation sert rsoudre des catgories de problmes de faon systmatique

  • ENSA Safi 15

    Mais encore

    Tous les problmes nont pas de solutions algorithmiques

    La programmation permet dadapter le comportement de logiciels des catgories spcifiques de problmes. Elle savre souvent indispensable.

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

  • 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

  • ENSA Safi 17

    Complexit algorithmique

    Donne une estimation du nombre doprations lmentaires ncessaires lexcution de lalgorithme, et ce en fonction de la 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)

  • ENSA Safi 18

    Exemples

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

    Tri dune liste dlments

    Problmes NP-complets

  • ENSA Safi 19

    Graphique : complexit algorithmique

    Nbre dinstructions

    Taille des donnes (N)

    linaire

    logarithmique

  • ENSA Safi 20

    Bon ou mauvais programme ?

    Aisment lisible donc bien spcifi, bien documentClair, donc bien structurAisment modifiableFacile tester, dbugger Robuste (erreurs de lutilisateur)

    CorrectEfficace

  • ENSA Safi 21

    Vrai ou faux ?

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

    Lordinateur fait ce quon lui dit de faire

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

  • Architecture dun ordinateur

  • ENSA Safi 23

    Architecture dun ordinateur

    La mmoire centraleLunit centrale de traitement (Central Processing Unit)

    Les units dentre/sortiesLes units priphriques

    Illustrations

  • ENSA Safi 24

    Diagramme fonctionnel dune architecture de Von Neumann

    Data Memory

    Arithmetic Unit

    ControlUnit

    Program Memory

    Program Interface

    Inpu

    t Int

    erfa

    ce

    Out

    put I

    nter

    face

    Illustration reprise de Tib[2002]

  • ENSA Safi 25

    Ordres de grandeur

    K =Kilo 2^10 = 1 024M= Mga 2^20 =1 048 576G= Giga 2^30 =1 073 741 824T=Tra 2^40 =1 099 511 627 776

  • 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

  • ENSA Safi 27

    Schma de principe

    Memoire centrale

    Registre donnes

    Registre adresseL/E

    Connecteurs adresse

    Connecteurs donnes

  • ENSA Safi 28

    Lunit centrale de traitement (CPU)

    Les instructions

    Les adresses

    Unit de contrle / unit arithmtique et logique

    Les registres

  • ENSA Safi 29

    Les instructions

    Trois informations ncessaires la CPU en contact avec la mmoire RAM.

    1. Quelle information traiter ?2. Quel traitement effectuer ?3. O ranger le rsultat ?

    Architecture RISC et CISC

  • ENSA Safi 30

    Les adresses

    La suite des instructions excuter est elle-mme range en mmoire.

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

  • ENSA Safi 31

    Unit de contrle et ALU

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

    Lunit de contrle met en place les donnes et positionne les circuits lectroniques pour que lALU excute effectivement lopration

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

    Oprations binaires : ET, OU, XOR

  • ENSA Safi 32

    Circuit additionneur

    OU

    ET

    ET

    Additionneur 2 bits

  • 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, )

  • ENSA Safi 34

    Ordres de grandeurs (2005)

    Processeur 32 - 64 bitsMmoire RAM = 1 GoMmoire dure = 200 GoVitesse du processeur = 3 GHz

    + Loi de Moore : cf article du Pour La Science

  • Illustrations des composants

  • ENSA Safi 36

    Carte mre (mother board)

  • ENSA Safi 37

    CPU

  • ENSA Safi 38

    Carte Graphique

  • ENSA Safi 39

    Carte Son

  • ENSA Safi 40

    Carte rseau

  • ENSA Safi 41

    Les Bus

  • ENSA Safi 42

    Connecteurs dentre/sortie

  • 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.

  • Programmation Procdurale

  • ENSA Safi 45

    Bien distinguer !

    Spcification d un algorithme :ce que fait lalgorithmecahier 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 prcdentdans un langage de programmation rel

  • 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

  • ENSA Safi 47

    Notion didentificateur et de type

    Identificateur : symbole sans signification universelle permettant de dsigner des objets qui nont pas dexistence en dehors du programme.

    Dclaration : fixe la signification dun identificateur

    Porte dun identificateur : bloc dinstructions pour lequel la dclaration est valable.

    Les langages de programmation peuvent tre typs ou non

  • 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 laquelle

    lidentificateur est reconnu; en gnral, le bloc dinstructions dans lequel 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 ;-) )

  • ENSA Safi 49

    dclaration et assignation dune variable

    Variables i : integer ;

    type entier (entier : type prdifini integer : mot cl du langage)

    identificateur

    i:=4;

  • ENSA Safi 50

    Notion de fonction

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

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

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

  • ENSA Safi 51

    Notion de fonction

  • ENSA Safi 52

    Dclaration dune fonction Comprend essentiellement trois lments:

    1. Le nom de la fonction2. La liste des types darguments3. Le type de retour de la fonction

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

  • 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 ;

  • ENSA Safi 54

    Exemple : un pseudo-code

    Programme Principal // Ce programme permet de lire deux entiers lcran et dafficher ensuite leur somme

    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

  • 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

  • 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

  • ENSA Safi 57

    Solution 1

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

    Begin

    somme := i+j ;

    End ;

  • ENSA Safi 58

    Solution 2

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

    Begin

    somme := i+j ;

    If somme

  • ENSA Safi 59

    Comment concevoir un programme ?

    Identifier prcisment le problme que le programme se doit de rsoudre

    Dcomposer le problme en sous-problme

    Dfinir les fonctions correspondantes

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

    Implmenter, compiler, excuter sur diffrents cas dutilisation, dbugger

  • 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, tendance cartsienne analytique

    Danger du Code spaghetti

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

  • Premiers algorithmes

    Anne Acadmique 2007-2008

  • Plan :Premiers algorithmesLes Variables Instruction daffectation Les instructions de lecture et dcritureLes TestsLes Boucles Les TableauxProcdures et Fonctions Les Fichiers

  • ENSA Safi 63

    algorithmique ?

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

    finie doprations lmentaires obissant un enchanement dtermin.

    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)

  • 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'y prendre

    Mais... comment le lui dire ? Comment le lui apprendre ? Comment s'assurer qu'elle fait ce travail aussi bien que nous ? Mieux que nous?

  • ENSA Safi 65

    Pourquoi un cours dalgorithmique ? concevoir une solution

    rflchir

  • ENSA Safi 66

    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 quelles

    instructions permettront dobtenir le rsultat voulu. Cest l, si lon y tient, quintervient la forme dintelligence requise pour lalgorithmique. Alors, cest certain, il y a des gens qui possdent au dpart davantage cette intuition que les autres. Cependant, et jinsiste sur ce point, les rflexes, cela sacquiert. Et ce quon appelle lintuition nest finalement que de lexprience tellement rpte que le raisonnement, au dpart laborieux, finit par devenir spontan .

    il faut tre mthodique et rigoureux. En effet, chaque fois quon crit une srie dinstructions 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 vrifier si le rsultat obtenu est bien celui que lon voulait. Cette opration ne requiert pas la moindre once dintelligence. Mais elle reste nanmoins indispensable, si lon ne veut pas crire laveuglette.

    Et petit petit, force de pratique, vous verrez que vous pourrez faire de plus en plus souvent lconomie de cette dernire tape : lexprience fera que vous verrez le rsultat produit par vos instructions, au fur et mesure que vous les crirez. Naturellement, cet apprentissage est long, et demande des heures de travail patient. Aussi, dans un premier temps, 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.

  • ENSA Safi 67

    se mettre mentalement la place de la machine qui va les excuter ? les ordinateurs, quels quils soient, ne sont fondamentalement

    capables de comprendre que quatre catgories d'ordres (en programmation, on n'emploiera pas le terme d'ordre, mais plutt celui d'instructions). Ces quatre familles d'instructions sont : 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 de base.

  • ENSA Safi 68

    Avec quelles conventions crit-on un algorithme ?

    Historiquement, plusieurs types de notations ont reprsent des algorithmes.

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

    Cest pourquoi on utilise gnralement une srie de conventions appele pseudo-code , qui ressemble un langage de programmation authentique dont on aurait vacu la plupart des problmes de syntaxe. Ce pseudo-code est susceptible de varier lgrement dun livre (ou dun enseignant) un autre.

  • Structure de base dun programme

    Dclaration de variables et fonctionsProgramme principale

    Dbut..

    fin

  • ENSA Safi 70

    Variables

    La premire chose faire avant de pouvoir utiliser une variable est de crer la bote et de luicoller 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

  • ENSA Safi 71

    Type variable

    Type Numrique Type caractreType chaneType boolen

  • ENSA Safi 72

    Type variable numrique

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

    type nom_type

    caractres autoriss

    ensemble de valeurs

    exemplesde valeurs

    entier ententier

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

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

  • ENSA Safi 73

    Instruction daffectation

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

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

  • ENSA Safi 74

    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

  • ENSA Safi 75

    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 valant automatiquement zro). Mais ce qui est important, cest que cette valeur justement, ne varie pas proprement parler. Du moins ne varie-t-elle que lorsquelle est lobjet dune instruction daffectation.

    La deuxime remarque concerne le signe de laffectation. En algorithmique, comme on 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 est galement facile. En maths, A = B et B = A sont deux propositions strictement quivalentes. En informatique, absolument pas, puisque cela revient crire A B et B A, deux choses bien diffrentes. De mme, A = A + 1, qui en mathmatiques, constitue une quation sans solution, reprsente en programmation 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 naurez plus aucune difficult passer au = des langages de programmation.

  • ENSA Safi 76

    Exercice 1

    Quelles seront les valeurs des variables A et B aprs excution des instructions suivantes ?variables A, B : EntiersDbut

    A 1B A + 3A 3

    Fin

  • ENSA Safi 77

    Solution

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

  • ENSA Safi 78

    Exercice 2

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

    Variables A, B, C : EntierDbut

    A 5B 3C A + BA 2C B A

    Fin

  • ENSA Safi 79

    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 = 8A 2 A = 2 B = 3 C = 8C B A A = 2 B = 3 C = 1

  • ENSA Safi 80

    Exercice 3

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

    Variables A, B : EntierDbut

    A 5B A + 4A A + 1B A 4

    Fin

  • ENSA Safi 81

    Solution

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

  • ENSA Safi 82

    Exercice 4

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

    Variables A, B, C :EntierDbut

    A 3B 10C A + BB A + BA C

    Fin

  • ENSA Safi 83

    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 = 13A C A = 13 B = 13 C = 13

  • ENSA Safi 84

    Exercice 5

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

    variablesA, B, C :EntierDbut

    A 3B 10C A + BB A + BA C

    Fin

  • ENSA Safi 85

    Solution

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

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

  • ENSA Safi 86

    Exercice 6

    Plus difficile, mais cest un classique absolu, quil faut absolument matriser : crire un algorithme permettant dchanger les valeurs de deux variables A et B, et ce quel que soit leur contenu pralable.

  • ENSA Safi 87

    Solution

    Dbut

    C AA BB C

    FinOn est oblig de passer par une variable dite temporaire (la

    variable C).

  • ENSA Safi 88

    Exercice 7

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

  • ENSA Safi 89

    Solution

    DbutD CC BB AA D

    FinEn fait, quel que soit le nombre de variables, une seule

    variable temporaire suffit

  • ENSA Safi 90

    Exercice 8

    Que produit lalgorithme suivant ?Variables A, B, C : Caractre

    DbutA "423"B "12"C A + B

    Fin

  • ENSA Safi 91

    Solution

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

  • ENSA Safi 92

    Exercice 9

    Que produit lalgorithme suivant ?Variables A, B, C :Caractre

    DbutA "423"B "12"C A & B

    Fin

  • ENSA Safi 93

    Solution

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

  • ENSA Safi 94

    Les instructions de lecture et dcriture(I/O standard: clavier/ecran) Dans un sens, ces instructions permettent lutilisateur de

    rentrer des valeurs au clavier pour quelles soient utilises par le programme. Cette opration est la lecture.

    Dans lautre sens, dautres instructions permettent au programme de communiquer des valeurs lutilisateur en les affichant lcran. Cette opration est lcriture.

  • ENSA Safi 95

    Les instructions de lecture et dcriture: Syntaxe

    lire_clavier Titi ou Lire TitiDs que le programme rencontre une instruction Lire, lexcution sinterrompt, attendant la frappe dune valeur au clavier. Ds lors, aussitt que la touche Entre (Enter) a t frappe, lexcution reprend

    ecrire_ecran Toto ou Ecrire TotoDans le sens inverse, pour crire quelque chose lcran.

    Important:Avant de lire_clavier une variable, il est trs fortement conseill dcrire des libells lcran, afin de prvenir lutilisateur de ce quil doit frapper

  • ENSA Safi 96

    Exercice 1

    Quel rsultat produit le programme suivant ?Variables v, double: entier

    DbutV 231Double V * 2ecrire_ecran Vecrire_ecran le double est ,Double

    Fin

  • ENSA Safi 97

    Solution

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

  • ENSA Safi 98

    Exercice 2

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

  • ENSA Safi 99

    Solution

    variables nb, carr : EntierDbut

    ecrire_ecran "Entrez un nombre :"lire_clavier nbcarr nb * nbecrire_ecran "Son carr est : ", carr

    Fin En fait, on pourrait tout aussi bien conomiser la variable carr en

    remplaant les deux avant-dernires lignes par :ecrire_ecran "Son carr est : ", nb*nbC'est une question de style ; dans un cas, on privilgie la lisibilit de l'algorithme, dans l'autre, on privilgie l'conomie d'une variable.

  • ENSA Safi 100

    Exercice 3

    Ecrire un programme qui lit le prix HT dun article, le nombre darticles et le taux de TVA, et qui fournit le prix total TTC correspondant. Faire en sorte que des libells apparaissent clairement.

  • ENSA Safi 101

    Solution

    variables nb, pht, ttva, pttc : entierDbut

    ecrire_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 : ", pttc

    Fin 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 !)

  • ENSA Safi 102

    Les Tests

    Si boolen AlorsInstructions

    Finsi Si boolen Alors

    Instructions 1SinonInstructions 2

    Finsi Si boolen1 Alors

    Instructions 1Sinon si boolen2 AlorsInstructions 2Instructions 3

    SinonInstructions 4

    Finsi

    Boolen 1

    Instruction 1

    Instruction 2

    Boolen 2

    Instruction 3

    Instruction 4

    Instruction suivant

    oui

    non

    non

    oui

  • ENSA Safi 103

    Les Tests

    Boolen est une condition : gal = diffrent de != strictement plus petit que < strictement plus grand que > plus petit ou gal =

    Conditions composes oprateur logique ET, OU, NON, et XOR

  • ENSA Safi 104

    Exercice 1

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

  • ENSA Safi 105

    Solution

    variables n : EntierDbut

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

    ecrire_ecran "Ce nombre est positif "Sinon

    ecrire_ecran "Ce nombre est ngatif"Finsi

    Fin

  • ENSA Safi 106

    Exercice 2

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

  • ENSA Safi 107

    Solution

    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"Sinon

    ecrire_ecran "Leur produit est ngatif"Finsi

    Fin

  • ENSA Safi 108

    Exercice 3

    Ecrire un algorithme qui demande trois noms lutilisateur et linforme ensuite sils sont rangs ou non dans lordre alphabtique.

  • ENSA Safi 109

    Solution

    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"

    Sinonecrire_ecran "Ces noms ne sont pas classs"

    FinsiFin

  • ENSA Safi 110

    Exercice 4

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

  • ENSA Safi 111

    Solution

    variables n : EntierDbut

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

    ecrire_ecran "Ce nombre est ngatif"Sinon si n = 0 Alors

    ecrire_ecran "Ce nombre est nul"Sinon

    ecrire_ecran "Ce nombre est positif"Finsi

    Fin

  • ENSA Safi 112

    Exercice 5

    Ecrire un algorithme qui demande deux nombres lutilisateur et linforme ensuite si le produit est ngatif ou positif (on inclut cette fois le traitement du cas o le produit peut tre nul). Attention toutefois, on ne doit pas calculer le produit !

  • ENSA Safi 113

    Solution

    variables m, n : EntierDbut

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

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

    ecrire_ecran "Le produit est positif"Sinon

    ecrire_ecran "Le produit est ngatif"Finsi

    Fin Si on souhaite simplifier 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'un des rares cas dans lesquels il est pertinent)

  • ENSA Safi 114

    Exercice 5

    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 ?

  • ENSA Safi 115

    Solution

    variables age : EntierDbut

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

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

    ecrire_ecran "Catgorie Minime"Sinon si age >= 8 Alors

    ecrire_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.

  • ENSA Safi 116

    Linstruction selonexemple

    selon abrviationcas "M" :

    ecrire_ecran " Monsieur " cas "Mme" :

    ecrire_ecran " Madame " cas "Mlle" :

    ecrire_ecran " Mademoiselle " Autres :

    ecrire_ecran " Monsieur, Madame "

    finselon

    Comparer: si abrviation = "M alors

    ecrire_ecran "Monsieur" sinon si abrviation = "Mme alors

    ecrire_ecran "Madame"sinon si abrviation = "Mlle" alors

    ecrire_ecran "Mademoiselle" sinon

    ecrire_ecran "Monsieur,Madame " finsi

  • Organigrame selon

    v=1

    Instruction 1

    Instruction 2

    V=2

    Instruction 3

    Instruction suivant

    oui

    non

    non

    oui

    selon vcas 1:

    instruction 1cas 2:

    instruction 2Autres :

    instruction 3iselle Madame " finselon

  • ENSA Safi 118

    Exercice 6

    Ecrire un algorithme qui demande loperation et 2 numero lutilisateur. Ensuite, il affiche le resultat :

    Peut-on concevoir plusieurs algorithmes quivalents menant ce rsultat ?

  • ENSA Safi 119

    Solution variables nbr1,nbr2: Entier o:charactere

    Dbutecrire_ecran "Entrez 1er nbr et nbr2"lire_clavier nbr1, nbr2ecrire_ecran "Entrez operation"lire_clavier oselon ocas "+" :

    res

  • ENSA Safi 120

    Conditions composes

    Si A ET B AlorsInstructions 1

    SinonInstructions 2

    Finsi

    quivaut :

    Si NON A OU NON B AlorsInstructions 2

    SinonInstructions 1

    Finsi

  • ENSA Safi 121

    Exercice 1

    Formulez un algorithme quivalent lalgorithme suivant :Si Tutu > Toto + 4 OU Tata = "OK" Alors

    Tutu Tutu + 1SinonTutu Tutu 1

    Finsi

  • ENSA Safi 122

    Solution

    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 des conditions en leur contraire...

    Si Tutu

  • ENSA Safi 123

    Exercice 2

    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'utilisateur tape 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.

  • ENSA Safi 124

    Solution

    variables h, m : entierDbut

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

    m 0h h + 1

    FinSiSi h = 24 Alors

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

    Fin

  • ENSA Safi 125

    Exercice 3

    De mme que le prcdent, cet algorithme doit demander une heure et en afficher une autre. Mais cette fois, il doit grer galement les secondes, et afficher l'heure qu'il sera une seconde plus tard.

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

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

  • ENSA Safi 126

    Solution

    variables h, m, s : entierDbut

    ecrire_ecran "Entrez les heures, puis les minutes, puis les secondes : "

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

    s 0m m + 1

    FinSiSi m = 60 Alors

    m 0h h + 1

    FinSiSi h = 24 Alors

    h 0FinSiecrire_ecran "Dans une seconde il sera ", h, "h", m, "m et ", s, "s"

    Fin

  • ENSA Safi 127

    Exercice 4

    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 de photocopies effectues et qui affiche la facture correspondante.

  • ENSA Safi 128

    Solution

    variables n : entier p : reel

    Dbutecrire_ecran "Nombre de photocopies : "lire_clavier nSi n

  • ENSA Safi 129

    Exercice 5

    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 dimptLe programme demandera donc lge et le sexe du

    Zorglubien, et se prononcera donc ensuite sur le fait que lhabitant est imposable.

  • ENSA Safi 130

    Solution

    variables sex : Caractreage : entierC1, C2 : Boolen

    Dbutecrire_ecran "Entrez le sexe (M/F) : "lire_clavier sexecrire_ecran "Entrez lge: "lire_clavier ageC1 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

  • ENSA Safi 131

    Exercice 6

    Une compagnie d'assurance automobile propose ses clients quatre familles de tarifs identifiables 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, la compagnie refuse de l'assurer.

    un conducteur de moins de 25 ans et titulaire du permis depuis plus de deux ans, ou de plus de 25 ans mais titulaire du permis depuis moins de deux ans a le droit au tarif orange s'il n'a jamais 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 rouge pour 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'un an.

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

  • variables Age,Dperm, NbrACC, Niv : entier

    AncCI C1,C2,C3 : Booleen

    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=1 Alors

    Niv3

    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=

  • ENSA Safi 133

    Solution 2

    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 juste aprs l'affectation des trois variables boolennes C1, C2, et C3. On crit :

    P 0Si Non(C1) AlorsP P + 1

    FinSiSi Non(C2) AlorsP P + 1

    FinSiP P + accSi P < 3 et C3 AlorsP P - 1

    FinSiSi P = -1 Alorssitu "Bleu"

    Sinon si P = 0 Alorssitu "Vert"

    Sinon si P = 1 Alorssitu "Orange"

    Sinon si P = 2 Alorssitu "Rouge"

    Sinonsitu "Refus"

    FinSiecrire_ecran "Votre situation : ", situFin

  • ENSA Safi 134

    Exercice 7

    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 candidats ayant obtenu au moins 12,5% des voix au premier tour.

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

  • ENSA Safi 135

    Solution

    Cet exercice, du pur point de vue algorithmique, n'est pas trs mchant. En revanche, il reprsente dignement 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 de 12,5 %, il est au deuxime tour, sinon il est limin. H h h... mais il ne faut pas oublier que le candidat peut trs bien avoir eu 20 % mais tre tout de mme limin, tout simplement parce que l'un des autres a fait plus de 50 % et donc qu'il n'y a pas de deuxime tour !...

    Moralit : ne jamais se jeter sur la programmation avant d'avoir soigneusement men l'analyse du problme 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"Sinon

    ecrire_ecran "Ballotage dfavorable"FinSi

    Fin

  • ENSA Safi 136

    Les Boucles TantQue boolen(vrai) faire

    Instructions

    FinTantQue Pour Compteur Initial Final par ValeurDuPas

    Instructions

    finpourOuPour Compteur Initial Final par ValeurDuPas

    Instructions

    Compteur suivant

  • ENSA Safi 137

    Les Boucles

    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

  • ENSA Safi 138

    Les Boucles 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 sens logique, et de plus, bien peu de langages vous autoriseraient ne serait-ce qu crire cette structure aberrante. variables Truc, Trac : Entier

    Pour Truc instructions Pour Trac instructions

    finpour (Truc Suivant)instructionsfinpour (Trac Suivant)

    2- Vrification de condition d'arrt variables Truc : Entier

    DbutPour Truc 1 15 faireTruc Truc * 2ecrire_ecran "Passage numro : ", Truc

    finpourFin

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

  • ENSA Safi 139

    Les Boucles La boucle tant que faire

    amorage {initialisation de la (des) variable(s) de condition}tantque faire

    traitement {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 sarrtera jamais .

  • Organigramme tantque

    Boolen(vraie)

    Instruction 1

    relance

    Instruction 2

    oui

    non

    Tantque boolen(vraie) faireinstruction1relance

    FinTantQue

  • ENSA Safi 141

    Exercice 1

    Ecrire un algorithme qui demande lutilisateur un nombre compris entre 1 et 3 jusqu ce que la rponse convienne.

  • ENSA Safi 142

    Solution

    variables N : EntierDebut

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

    lire_clavier NSi N < 1 ou N > 3 Alors

    ecrire_ecran "Saisie errone. RecommencezFinSi

    FinTantQueFin

  • ENSA Safi 143

    Exercice 2

    Ecrire un algorithme qui demande un nombre compris entre 10 et 20, jusqu ce que la rponse convienne. En cas de rponse suprieure 20, on fera apparatre un message : Plus petit ! , et inversement, Plus grand ! si le nombre est infrieur 10.

  • ENSA Safi 144

    Solution

    variables N : EntierDebut

    N 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

    FinTantQueFin

  • ENSA Safi 145

    Les Boucles

    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 suprieure

    Attention : -le traitement ne doit pas modifier le compteur de boucle

  • Interprtation boucle pour

    Compteur1

    compteur

  • ENSA Safi 147

    Exercice 3

    Ecrire un algorithme qui demande un nombre de dpart, et qui ensuite affiche les dix nombres suivants. Par exemple, si l'utilisateur entre le nombre 17, le programme affichera les nombres de 18 27.

  • ENSA Safi 148

    Solution

    variables N, i : EntierDebut

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

    ecrire_ecran ifinpour

    Fin

  • ENSA Safi 149

    Exercice 4

    Ecrire un algorithme qui demande un nombre de dpart, et qui ensuite crit la table de multiplication de ce nombre, prsente comme suit (cas o l'utilisateur entre le nombre 7) :Table de 7 :7 x 1 = 77 x 2 = 147 x 3 = 217 x 10 = 70

  • ENSA Safi 150

    Solution

    variables N, i : EntierDebut

    ecrire_ecran "Entrez un nombre : "lire_clavier Necrire_ecran "La table de multiplication de ce nombre

    est : "Pour i 1 10 faire

    ecrire_ecran N, " x ", i, " = ", n*ifinpour

    Fin

  • ENSA Safi 151

    Exercice 5

    Ecrire un algorithme qui demande un nombre de dpart, et qui calcule la somme des entiers jusqu ce nombre. Par exemple, si lon entre 5, le programme doit calculer :

    1 + 2 + 3 + 4 + 5 = 15NB : on souhaite afficher uniquement le rsultat, pas la

    dcomposition du calcul.

  • ENSA Safi 152

    Solution

    variables N, i, Som : EntierDebut

    ecrire_ecran "Entrez un nombre : "lire_clavier NSom 0Pour i 1 N faire

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

    Fin

  • ENSA Safi 153

    Exercice 6

    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

  • ENSA Safi 154

    Solution

    variables N, i, F : EntierDebut

    ecrire_ecran "Entrez un nombre : "lire_clavier NF 1Pour i 2 N faire

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

    Fin

  • ENSA Safi 155

    Exercice 7

    Ecrire un algorithme qui demande successivement 20 nombres lutilisateur, et qui lui dise ensuite quel tait le plus grand 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 affiche de surcrot en quelle position avait t saisie ce nombre :

    Ctait le nombre numro 2

  • ENSA Safi 156

    Solution

    variables N, i, PG : EntierDebut

    PG -32768Pour i 1 20 faire

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

    PG NFinSi

    finpourecrire_ecran "Le nombre le plus grand tait : ", PGFin

    En ligne 3, on peut mettre nimporte quoi dans PG, il suffit que cette variable soit affecte pour que le premier passage en ligne 7 ne provoque pas d'erreur.

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

    DebutPG -32768Pour i 1 20 faire

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

    FinSifinpourecrire_ecran "Le nbre le plus grand tait : ", PGecrire_ecran "Il a t saisi en position ", IPGFin

  • ENSA Safi 157

    Exercice 8

    Rcrire lalgorithme prcdent, mais cette fois-ci on ne connat pas davance combien lutilisateur souhaite saisir de nombres. La saisie des nombres sarrte lorsque lutilisateur entre un zro.

  • ENSA Safi 158

    Solution

    variables N, i, PG, IPG : EntierDebut

    N 1i 0PG -32766TantQue N 0 faire

    ecrire_ecran "Entrez un nombre : "lire_clavier Ni i + 1Si i = 1 ou N > PG Alors

    PG NIPG i

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

    Fin

  • ENSA Safi 159

    Exercice 9

    lire la suite des prix (en euros entiers et termine par zro) des achats dun client. Calculer la somme quil doit, lire la somme quil paye, et simuler la remise de la monnaie en affichant les textes "10 Euros", "5 Euros" et "1 Euro" autant de fois quil y a de coupures de chaque sorte rendre.

  • ENSA Safi 160

    Solution

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

    PE

  • ENSA Safi 161

    Exercice 10

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

    On demande lutilisateur le nombre de chevaux partants, et le nombre de chevaux 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 de chevaux 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 singulirement augmentes par une petite astuce. Vous commencerez par crire la manire la plus simple, puis vous identifierez le problme, et crirez une deuxime version permettant de le rsoudre..

  • ENSA Safi 162

    Solution

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

    Debut ecrire_ecran "Entrez le nombre de chevaux partants : "lire_clavier Necrire_ecran "Entrez le nombre de chevaux jous : "lire_clavier PNum 1Pour i 2 N faireNum Num * i

    finpourDno1 1Pour i 2 N-P faireDno1 Dno1 * i

    finpourDno2 1Pour i 2 P faireDno2 Dno2 * i

    finpourecrire_ecran "Dans lordre, une chance sur ", Num / Dno1ecrire_ecran "Dans le dsordre, une sur ", Num / (Dno1 * Dno2)Fin

    Cette version, formellement juste, comporte tout de mme deux faiblesses.

    La premire, et la plus grave, concerne la manire dont elle calcule le rsultat final. Celui-ci est le quotient d'un nombre par un autre ; or, ces nombres auront rapidement tendance tre trs grands. En calculant, comme on le fait ici, d'abord le numrateur, puis ensuite le dnominateur, on prend le risque de demander la machine de stocker des nombres trop grands pour qu'elle soit capable de les coder (cf. le prambule). C'est d'autant plus bte que rien ne nous oblige procder ainsi : on n'est pas oblig de passer par la division de deux trs grands nombres pour obtenir le rsultat voulu.

    La deuxime remarque est qu'on a programm ici trois boucles successives. Or, en y regardant bien, on peut voir qu'aprs simplification de la formule, ces trois boucles comportent le mme nombre de tours ! (si vous ne me croyez pas, crivez un exemple de calcul et biffez les nombres identiques au numrateur et au dnominateur). Ce triple calcul (ces trois boucles) peut donc tre ramen(es) un(e) seul(e). Et voil le travail, qui est non seulement bien plus court, mais aussi plus performant :

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

    finpour ecrire_ecran "Dans lordre, une chance sur ", A ecrire_ecran "Dans le dsordre, une chance sur ", A / B Fin

  • ENSA Safi 163

    Comparaison boucles pour et tant que

    pour cpt 1 nbVal faireecrire_ecran "Donnez une valeur :"lire_clavier valeur

    totalValeurstotalValeurs+ valeur {cumul}Finpour. quivaut cpt 0tant que cpt

  • ENSA Safi 164

    Les Boucles rpterjusqu (suit)

    La boucle rpter ... jusquRpter

    (r)affectation de la (des) variable(s) de conditiontraitement {suite dinstructions}

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

  • ENSA Safi 165

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

    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 valeur

    tantque (valeur < 1 ou (valeur > 3) ) faireecrire_ecran "Donnez une valeur positive paire:"lire_clavier valeur

    FinTantQue

  • ENSA Safi 166

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

    boucle tantque-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 nouvelles variables (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 avec vrification.

  • Organigramme rpterjusqu

    Boolen(vraie)

    Instruction 1

    relance

    Instruction 2

    ouinon

    rpterinstruction1relance

    Jusqu boolen (faux)

  • ENSA Safi 168

    Choisir pour... tant que rpter

    Nombre ditrations

    connu ?

    Traitement excut au moins une

    fois ?

    Boucle tant que

    Boucle rpter

    Boucle pour

    OUI

    NON

    NONOUI

  • ENSA Safi 169

    Les Tableaux

    Un ensemble de valeurs portant le mme nom de variable et repres par un nombre, sappelle un tableau, ou encore une variable indice.Le nombre qui, au sein dun tableau, sert reprer chaque valeur sappelle lindice.Chaque fois que lon doit dsigner un lment du tableau, on fait figurer le nom 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 4T[i] 0

  • ENSA Safi 170

    Les Tableaux

    Dfinition du type

    1 2 3 4 5 6tab

    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 Null est un flag de fin de chaine de caractre

    12 5 -78 2 -21 8

    nom du tableau Indice

    Contenu du tableau

    t e s t e null

  • ENSA Safi 171

    Exercice 1

    Ecrire un algorithme qui dclare et remplisse un tableau de 7 valeurs numriques en les mettant toutes zro.

  • ENSA Safi 172

    Solution

    variables Truc [1:7] : tableau de reli : entier

    DebutPour i 1 7 faire

    Truc[i] 0finpour

    Fin

  • ENSA Safi 173

    Exercice 2

    Ecrire un algorithme qui dclare et remplisse un tableau contenant les six voyelles de lalphabet latin.

  • ENSA Safi 174

    Solution

    variables Truc [1:6] : Tableau de CaractreDebut

    Truc[1] "a"Truc[2] "e"Truc[3] "i"Truc[4] "o"Truc[5] "u"Truc[6] "y"

    Fin

  • ENSA Safi 175

    Exercice 3

    Ecrire un algorithme qui dclare un tableau de 9 notes, dont on fait ensuite saisir les valeurs par lutilisateur.

  • ENSA Safi 176

    Solution

    variables Notes [1:4] : Tableau de entieri : entier

    DebutPour i 1 4 faireecrire_ecran "Entrez la note numro ", i lire_clavier Notes[i]

    finpourFin

  • ENSA Safi 177

    Exercice 4

    Que produit lalgorithme suivant ?variables Nb [1:6] : tableau de Entier

    i : EntierDbut

    Pour i 1 6 faireNb[i] i * i

    finpourPour i 1 6 faire

    ecrire_ecran Nb[i]finpour

    FinPeut-on simplifier cet algorithme avec le mme rsultat ?

  • ENSA Safi 178

    Solution

    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 Entier i : Entier

    DbutPour i 1 6 faire

    Nb[i] i * iecrire_ecran Nb[i]

    finpourFin

  • ENSA Safi 179

    Exercice 5

    Que produit lalgorithme suivant ?variables N[1:7]: tableau de Entier

    i, k : EntierDbut

    N[1] 1Pour k 2 7 faire

    N[k] N[k-1] + 2finpourPour i 1 7 faire

    ecrire_ecran N[i]finpour

    FinPeut-on simplifier cet algorithme avec le mme rsultat ?

  • ENSA Safi 180

    Solution

    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 Entier k : Entier

    DbutN[1] 1ecrire_ecran N[1] Pour k 2 7 faire

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

    finpourFin

  • ENSA Safi 181

    Exercice 6

    Que produit lalgorithme suivant ?variables Suite [1:8]: tableau de Entier

    i : EntierDbut

    Suite[1] 1Suite[2] 1Pour i 3 8 faire

    Suite[i] Suite[i-1] + Suite[i-2] finpourPour i 1 8 faire

    ecrire_ecran Suite[i] finpour

    Fin

  • ENSA Safi 182

    Solution

    Cet algorithme remplit un tableau de 8 valeurs : 1, 1, 2, 3, 5, 8, 13, 21

  • ENSA Safi 183

    Exercice 7

    Ecrivez la fin de lalgorithme 3 afin que le calcul de la moyenne des notes soit effectu et affich lcran.

  • ENSA Safi 184

    Solution

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

    Debuts 0Pour i 1 9 faire

    ecrire_ecran "Entrez la note n ", i lire_clavier Notes[i]s s + Notes[i]

    finpourecrire_ecran "Moyenne :", s/9

    Fin

  • ENSA Safi 185

    Test crire un algorithme qui trie 4 valeur saisie par lutilisateur par ordre

    croissant ? crire un algorithme qui affiche les 100 nombres premiers? fonction Mod permet de rcuprer le reste de la division dun nombre par

    un deuxime nombre. Par exemple : A Mod(10,3) A vaut 1 car 10 = 3*3 + 1

    crire un algorithme qui demande lutilisateur les coordonnes dun point X, et affich lcran la couleur de la zone o il est situ.

    CHERCHE NUMERO DOUBLE DANS UN TABLEAU CHERCHE LE NUMERO MANQUANT DANS UN TABLEAU

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

    variables premier : booleen Debut

    N1

    S1

    Tantque N

  • ENSA Safi 187

    Tableaux Multidimensionnels

    Tableaux deux dimensions Exemple tableau 2 lignes et 7 colonnes

    1 2 3 4 5 6 712

    Dclarationtableau[1:2, 1:7] dentiers

    10 3 20 5 25 2 4229 132 1 0 124 7 9

    indices min et max des lignes

    indices min et max des colonnes

  • ENSA Safi 188

    Tableaux Multidimensionnels

    REMARQUE ESSENTIELLE :Il ny a aucune diffrence qualitative entre un tableau deux dimensions ( i, j ) et un tableau une dimension ( i * j ). De mme que le jeu de dames quon vient dvoquer, tout problme qui peut tre modlis 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 complique, si on a choisi la mauvaise option) lcriture et la lisibilit de lalgorithme.

    Syntaxevariables Notes [1:9,1:9] : tableau de EntierNotes[1, 8] 0

  • ENSA Safi 189

    Exercice 1

    crivez un algorithme remplissant un tableau de 6 sur 13, avec des zros.

  • ENSA Safi 190

    Solution

    variables Notes [1:6,1:13] :tableau de Entieri, j :entier

    DebutPour i 1 6 fairePour j 1 13 faireTruc[i, j] 0

    finpourfinpourFin

  • ENSA Safi 191

    Exercice 2

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

    i, j, val : EntierDbut

    Val 1Pour i 1 2 faire

    Pour j 1 3 faireX[i, j] ValVal Val + 1

    finpourfinpourPour i 1 2 faire

    Pour j 1 3 faireecrire_ecran X[i, j]

    finpourfinpour

    Fin

  • ENSA Safi 192

    Solution

    Cet algorithme remplit un tableau de la manire suivante:X[1, 1]= 1

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

    Il crit ensuite ces valeurs lcran, dans cet ordre.

  • ENSA Safi 193

    Exercice 3

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

    i, j, val : EntierDbut

    Val 1Pour i 1 2 fairePour j 1 3 faireX[i, j] ValVal Val + 1

    finpourfinpourPour j 1 3 fairePour i 1 2 faireecrire_ecran X[i, j]

    finpourfinpour

    Fin

  • ENSA Safi 194

    Solution

    Cet algorithme remplit un tableau de la manire suivante:1

    42536

    Il crit ensuite ces valeurs lcran, dans cet ordre.

  • ENSA Safi 195

    Exercice 4

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

    k, m : EntierDbutPour k 1 4 fairePour m 1 2 faire

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

    finpourfinpourPour k 1 4 fairePour m 1 2 faireecrire_ecran T[k, m]

    finpourfinpourFin

  • ENSA Safi 196

    Solution

    Cet algorithme remplit un tableau de la manire suivante:T[1, 1] = 6

    T[1, 2] = 10T[2, 1] = 7T[2, 2] = 11T[3, 1] = 8T[3, 2] = 12T[4, 1] = 9T[4, 2] = 13

    Il crit ensuite ces valeurs lcran, dans cet ordre.

  • ENSA Safi 197

    Exercice 5

    Ecrire algorithme quivalent a exercice 4 en utilisant un tableau unidimensionnel

  • variables T[1:8] : tableau de Entierk, m,i : Entier

    DbutPour k 1 4 fairePour m 1 2 faire/////T[k, m] k + mi (2*(k-1))+m/////T[k, m] (k + 1) + 4 * m

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

    finpourPour k 1 4 fairePour m 1 2 fairei (2*(k-1))+mecrire_ecran T[i]

    finpourfinpourFin

  • ENSA Safi 199

    Exercice 6

    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.

  • ENSA Safi 200

    Solution

    variables i, j, iMax, jMax : entiervariables T[1:12,1:8] : tableau de Entier

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

    Debut...iMax 1jMax 1Pour i 1 12 faire

    Pour j 1 8 faireSi 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

  • ENSA Safi 201

    Procdures et Fonctions Avantages:

    Les procdures ou fonctions permettent de ne pas rpter plusieurs fois une mme squence dinstructions au sein du programme.

    La mise au point du programme est plus rapide en utilisant des procdures et des fonctions. En effet, elle peut tre ralise en dehors du contexte du programme.

    Une procdure peut tre intgre un autre programme, ou elle pourra tre range dans une bibliothque doutils ou elle pourra tre utilise par nimporte 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 fonction de paramtres formels utiliss dans la conception de celle-ci.

    Par contre au moment de lutilisation de la procdure ou fonction, on associera de vritables valeurs ces paramtres grce des paramtres dappel ou paramtres effectifs.

  • ENSA Safi 202

    Notion de fonction

  • ENSA Safi 203

    Les Fonctions Prdfinies: Math

    A Sin(35) Une fonction est donc constitue de trois parties :

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

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

    une liste de valeurs, indispensables la bonne excution de la fonction. Ces valeurs sappellent des arguments, ou des paramtres. Certaines fonctions exigent un seul argument, dautres deux, etc. et dautres encore aucun. A noter que mme dans le cas de ces fonctions nexigeant aucun argument, les parenthses restent obligatoires. Le nombre darguments ncessaire pour une fonction donne ne sinvente pas : il est fix par le langage. Par exemple, la fonction sinus a besoin dun argument (ce nest pas surprenant, cet argument est la valeur de langle). Si vous essayez de lexcuter en lui donnant deux arguments, ou aucun, cela dclenchera une erreur lexcution. Notez galement que les arguments doivent tre dun certain type, et quil faut respecter ces types.

  • ENSA Safi 204

    Les Fonctions Prdfinies: Math

    Rsultat p1

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

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

    sin(p1) sinus de p1 entier, rel entier, reltan(p1) tangente de p1 entier, rel entier, relexp(p1) exponentielle de p1 entie r, rel entie r, rel

    rac2(p1) racine carre de p1 entier, rel entier, relcar(p1) caractre ayant pour

    code ansi la valeur de p1car, chane entier

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

  • ENSA Safi 205

    Les Fonctions Prdfinies: numriques classiquesUne fonction extrmement rpandue est celle qui permet de

    rcuprer la partie entire dun 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 + 1B 12 Mod 2 B vaut 0 car 12 = 6*2 Cette 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

  • ENSA Safi 206

    Les Fonctions Prdfinies: texte

    Tous les langages, je dis bien tous, proposent les fonctions suivantes, 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 langages proposent 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 pas comprise dans chane1, la fonction renvoie zro.

  • long("Bonjour, a va ?") vaut 16long("") 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", "ur",1) vaut 5rang("Un pur bonheur", "techno",1) vaut 0

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

  • Exercice 1

    crivez une fonction qui renvoie le nombre de voyelles contenues dans une chane de caractres passe en argument. Au passage, notez qu'une fonction a tout fait le droit d'appeler une autre fonction.

  • ENSA Safi 209

    Solution

    Fonction NbVoyelles (e Mot : chaine):entiervariables i, nb : entierdebut

    nb

  • ENSA Safi 210

    Exercice 2

    Rcrivez la fonction rang, vue prcdemment, laide des fonctions millieu et Long (comme quoi, rang, la diffrence de millieu et Long , nest pas une fonction indispensable dans un langage).

  • ENSA Safi 211

    Solutionfonction foncrang(e aa,b:chaine ;e p:entier):entiervariables i , r :entierdbut

    i

  • ENSA Safi 212

    Procdures et Fonctions

    Le corps du programme sappelle alors la procdure principale, et ces groupes 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 jamais dfinir une autre fonction.

    Diffrence entre fonction et procdure Les fonctions ne sont qu'un cas particulier des sous-procdures : celui

    o 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 dire un nombre, un caractre ou une chane de caractr, boolean.

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

  • ENSA Safi 213

    Procdures et Fonctions :Syntaxe

    Declaration Fonction RepOuiNon(e Msg : Caractre) : Caractre

    arguments formelles resultat

    variables rsultat : caractre

    debut

    .

    valeur_retour rsultat qui indique quelle valeur doit prendre la fonction lorsqu'elle est utilise par le programme. Valeur_retour ou renvoyer

    finfonction

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

    ecrire_ecran RepOuiNon("oui")

    argument rel

    .

    fin

  • ENSA Safi 214

    Procdures et Fonctions :Syntaxe

    Declaration procedureProcedure RepOuiNon(e Msg : Caractre)

    arguments formelles

    variables rsultat : caractre

    debut

    .

    finProcedure

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

    RepOuiNon("oui")

    .

    fin

  • Procdures et Fonctions : passage par valeur

    Paramtre formel : variable utilise dans le corps du sous-programme qui reoit une valeur de lextrieur (ils font parti de la description de la fonction)

    Paramtre effectif : Il s'agit de la variable (ou valeur) fournie lors de l'appel du sous programme (valeurs fournies pour utiliser la fonction et valeurs renvoyes)

    Copie de la valeur du paramtre effectif vers le paramtre formel correspondant lors de l'appel

    Paramtres formel et effectif ont des noms diffrents

  • ENSA Safi 216

    Procdures et Fonctions : passage par valeur

    variables X : Entier

    DbutX 25afficheecran(X)Fin

    Procedure afficheecran(e k : entier)Debutecrire_ecran kfinprocedure

    X=25

    k=25

    Passage par valeur

    Remarque: avec algoexe il faut ajouter le mot e avant les argument Exemple :afficheecran(e k : entier)

  • ENSA Safi 217

    Fonctions:Porte des variables

    Dans P1 on dispose de X,Y et Z

    Dans P2 on dispose de A,B et X

    Dans P3 on dispose de U,V,X et Y

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

    variables X : Entier P1

    variables Y : Entier

    variables Z : EntierDebutFin

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

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

    Remarque: avec algoexe il faut ajouter le mot globaleExemple :variables globale x : entier

  • ENSA Safi 218

    Exemple de fonction

    Mauvaise Structure :

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

    ecrire_ecran "Tapez Oui ou Non"lire_clavier Rep1

    FinTantQue...ecrire_ecran "Avez-vous des enfants ?"lire_clavier Rep2 TantQue Rep2 "Oui" et Rep2 "Non" faireecrire_ecran "Tapez Oui ou Non"lire_clavier Rep2

    FinTantQue...

    Bonne structure :

    Fonction RepOuiNon() : caractrevariables truc : car

    debutlire_clavier Truc TantQue Truc "Oui" et Truc "Non" faire

    ecrire_ecran "Tapez Oui ou Non"lire_clavier Truc

    FinTantQuevalretTruc

    finfonctionDebut

    ...ecrire_ecran "Etes-vous mari ?"Rep1 RepOuiNon()...ecrire_ecran "Avez-vous des enfants ?"Rep2 RepOuiNon()...

    Fin

  • ENSA Safi 219

    Exercice 1 Quel rsultat produira cet algorithme ?

    procedure echange (e a,b : rel) variables c : reldebut

    c aabbc

    finprocedurevariables x, y : relDebut

    x2y5echange(x,y)ecrire_ecran x,y

    Fin

  • ENSA Safi 220

    solution1

    Quel rsultat produira cet algorithme ?

    variables x, y : entierProcedure echange ()

    variables c : entierdebut

    c

  • ENSA Safi 221

    Exercice 2

    crivez une fonction qui renvoie la somme de cinq nombres fournis en argument.

  • SolutionFonction Sum(e a1,b,c,d,e1: entier) : entiervariables result :entierdebut

    result a1+b+c+d+e1valeur_retour result

    Finfonctionvariables aa, bb, cc, dd, ee,res: entierDebut

    ecrire_ecran "entrer 5 nbrs"lire_clavier aa,bb,cc,dd,eeRes

  • ENSA Safi 223

    Exercice 3

    crivez lalgorithme dune procdure permettant deffectuer la division euclidienne de deux entiers a et b. On appellera q le quotient et r le reste de cette division. On rappelle la formule de la division : a=b*q + r avec r < b.

  • ENSA Safi 224

    solution1

    variables globale q, r : rels Procedure division_euclidienne (e a,b :

    entier)Prcondition : aucuneDonnes : a et bDonnes / Rsultats : q et rDescription : effectue la division

    euclidienne de a par bVariable locale : aucuneDbut

    q0r aTantque r>=b faire

    q q+1r r-b

    FinTantquefinprocedure

    variables v1, v2 : relsDbut

    ecrire_ecran " premire valeur "lire_clavier v1ecrire_ecran "euxime valeur"lire_clavier v2Division_euclidienne (v1,v2)ecrire_ecran q, r

    Fin

  • ENSA Safi 225

    solution2 variables r : rels Fonction division_euclidienne (e a,b :

    entier)Prcondition : aucuneDonnes : a et bDonnes / Rsultats : q et rDescription : effectue la division

    euclidienne de a par bvariables q: relsDbut

    q0r aTantque r>=b faire

    q q+1r r-b

    FinTantqueValeur_retour q

    finfonction

    variables v1, v2,qq : relsDbut

    ecrire_ecran " premire valeur "lire_clavier v1ecrire_ecran "deuxime valeur"lire_clavier v2qqDivision_euclidienne (v1,v2)ecrire_ecran qq, r

    Fin

  • ENSA Safi 226

    Exercice 4

    crivez lalgorithme dune fonction perimetre_ rayon _cercle permettant de retourner le rayon dun cercle en fonction de son primtre (pass en paramtre).

    crivez ensuite une fonction rayon_aire_cercle permettant de retourner le aire dun cercle en fonction de son rayon (pass en paramtre).

    crivez ensuite une fonction perimetre_aire_cercle qui retourne laire dun cercle en utilisant la fonction perimetre_ rayon _cercle susmentionnes.

    On souhaite maintenant crire un sous-programme (qui utilise les deux fonctions prcdentes) permettant partir du primtre dun cercle de calculer sa surface. crivez lentte de ce sous programme de deux manires diffrentes.