Poly_Algo_2013_ch1-4_5.pdf

download Poly_Algo_2013_ch1-4_5.pdf

of 59

Transcript of Poly_Algo_2013_ch1-4_5.pdf

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    1/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 1 31/03/2013

    Algorithmique

    Par

    Pr. Mohamed El [email protected]

    2012/2013

    Universit Mohammed V-Agdal Facult des Sciences Rabat

    Dpartement dInformatique

    Le module M5E2: SMIA

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    2/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 2 31/03/2013

    Sommaire

    1. Gnralits sur lAlgorithmiqueIntroductionLalgorithmique

    PrincipeLes caractristiques dun AlgorithmeAnalyse descendante

    Lalgorithmique et la programmationLe but de la programmationLangages de programmationPseudo langage

    2. Les variablesDclaration des variablesNoms de variablesTypes de variables

    3. Les PrimitivesAffectation

    Dfinition et notationUtilisations

    Lire et crireDonnes et rsultatsLes objets manipuls par lalgorithme

    Les testssi .. alors .., si .. alors .. sinon ..Conditions composesOrganigrammeTests imbriqus

    Les BouclesLa boucle TantQueLa boucle Rpter jusqu La boucle Pour jusqu Les boucles imbriquesUne mthodologie pour l'criture d'une boucle

    4. Les structures de donnes statiquesTableaux une dimension

    IntroductionNotation et utilisation algorithmiqueTypes pour les tableauxQuelques algorithmes utilisant les tableaux une dimension

    Tableaux deux dimensionsNotation et dfinitionsAlgorithmes sur les matrices

    5. Exercices et Problmes dexamens

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    3/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 3 31/03/2013

    1. Gnralits sur lAlgorithmique

    1.1 Introduction

    Lalgorithmiqueest un terme dorigine arabe, hommage Al Khawarizmi(780-850) auteur dun

    ouvrage dcrivant des mthodes de calculs algbriques.Un algorithme est une mthode de rsolution de problme nonce sous la forme d'une sried'oprations effectuer. La mise en uvre de l'algorithme consiste en l'criture de ces oprationsdans un langage de programmation et constitue alors la brique de base d'un programmeinformatique.

    1 Une recette de cuisine est un algorithme!2 Le mode demploi dun magntoscope est aussi un algorithme!3 Indiqu un chemin un touriste gar ou faire chercher un objet quelquun par

    tlphone cest fabriquer - et faire excuter - des algorithmes.

    Un algorithme, cest une suite dinstructions, qui une fois excute correctement, conduit un

    rsultat donn.1 Si lalgorithme est juste, le rsultat est le rsultat voulu, et le touriste se retrouve l o ilvoulait aller.

    2 Si lalgorithme est faux, le rsultat est, disons, alatoire, et dcidment, ce magntoscopene marche pas!

    Pour fonctionner, un algorithme doit donc contenir uniquement des instructions comprhensiblespar celui qui devra lexcuter (lordinateur).LADN, qui est en quelque sorte le programme gntique, lalgorithme la base de constructiondes tres vivants, est une chane construite partir de quatre lments invariables. Ce nest que lenombre de ces lments, et lordre dans lequel ils sont arrangs, qui vont dterminer si on obtientune puce ou un lphant.Les ordinateurs eux-mmes ne sont fondamentalement capables dexcuter que quatre oprationslogiques :

    1 laffectation de variables2 la lecture / criture3 les tests4 les boucles

    Un algorithme informatique se ramne donc toujours au bout du compte la combinaison de cesquatre petites briques de base. Il peut y en avoir quelques unes, quelques dizaines, et jusquplusieurs centaines de milliers dans certains programmes.La taille dun algorithme ne conditionne pas en soi sa complexit : de longs algorithmes peuventtre finalement assez simples, et de petits algorithmes peuvent tre trs compliqus.Linformatique est la science du traitement automatique de linformation. Pour cela il faut:

    1 modliser cette information,2 dfinir laide dun formalisme strict les traitements dont elle fera lobjet.3 et enfin traduire ces traitements dans un langage comprhensible par un ordinateur.

    Les deux premiers points concernent lalgorithmique, alors que le dernier point relve de ce quelon nomme la programmation.

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    4/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 4 31/03/2013

    Lcriture dun programme consiste gnralement implanter une mthode de rsolution djconnue et souvent conue indpendamment dune machine pour fonctionner aussi bien sur toutesles machines ou presque. Ainsi, ce nest pas le programme mais la mthode quil faut tudierpour comprendre comment traiter le problme. Le terme algorithme est employ en informatiquepour dcrire une mthode de rsolution de problme programmable sur machine. Les algorithmes

    sont la matire de linformatique et sont lun des centres dintrt de la plupart, sinon latotalit, des domaines de cette science.

    1.2 Lalgorithmique

    PrincipeDfinition : Un algorithme est une squence bien dfinie doprations (calcul, manipulation dedonnes, etc.) permettant daccomplir une tache en un nombre fini de pas.

    En principe un algorithme est indpendant de toute implantation. Cependant dans la pratiquede la programmation il savre indispensable de tenir compte des capacits du langage deprogrammation utilis.

    La conception dun algorithme passe par plusieurs tapes :Analyse : dfinition du problme en terme de squences doprations de calcul destockage de donnes, etc. ;

    Conception: dfinition prcise des donnes, des traitements et de leur squencement ;Implantation: traduction et ralisation de lalgorithme dans un langage prcis ;Test: Vrification du bon fonctionnement de lalgorithme.

    Remarque:Les programmes sont souvent sur-optimiss. Il nest pas toujours indispensable de se donner lapeine de trouver limplantation la plus efficace dun algorithme, mois que ce dernier ne soitsusceptible dtre utilis pour une tche trs rptitive. Dans les autres cas, une mise en uvresimple conviendra souvent : on pourra tre sr que le programme fonctionnera, peut-tre cinq oudix fois moins vite que la version la plus optimise, ce qui se traduira ventuellement parquelques secondes supplmentaires lexcution. En revanche, un mauvais choix dalgorithmepeut entraner une diffrence dun facteur cent, mille ou plus, ce qui se traduira en minutes, enheures voir en jours au niveau des temps dexcution.

    Les caractristiques dun Algorithme

    Un algorithme est une marche suivre :1 dont les oprations sont toutes dfinies et portent sur des objets appels informations,2 dont lordre dexcution des oprations est dfini sans ambigut,3 qui est rpute rsoudre de manire certaine un problme ou une classe de problmes,

    4 sexprime dans un langage indpendant des langages de programmation,

    1.3 Lalgorithmique et la programmation

    Un programmeest la traduction dun algorithme dans un certain langage de programmation. Ilfaut savoir qu chaque instruction dun programme correspond une action du processeur.

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    5/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 5 31/03/2013

    1.3.1 Le but de la programmation :

    Utiliser lordinateur pour traiter des donnes afin dobtenir des rsultats. Abstraction par rapport au matriel (indpendance application / plate forme matrielle).

    Intermdiaire entre le langage machine (binaire) et le langage humain

    1.3.2 Langages de programmation

    Le langage utilis par le processeur, est appel langage machine. Il s'agit d'une suite de 0 et de 1(du binaire). Toutefois le langage machine est difficilement comprhensible par l'humain. Ainsi ilest plus pratique de trouver un langage intermdiaire, comprhensible par l'homme, qui seraensuite transform en langage machine pour tre exploitable par le processeur. L'assembleur estle premier langage informatique qui ait t utilis. Celui-ci est encore trs proche du langagemachine mais il permet dj d'tre plus comprhensible. Toutefois un tel langage est tellementproche du langage machine qu'il dpend troitement du type de processeur utilis (chaque type deprocesseur peut avoir son propre langage machine). Ainsi un programme dvelopp pour unemachine ne pourra pas tre port sur un autre type de machine (on dsigne par le terme"portable" un programme qui peut tre utilis sur un grand nombre de machines). Pour pouvoirl'utiliser sur une autre machine il faudra alors parfois rcrire entirement le programme!

    Il y a trois catgories de langage de programmations : les langages interprtset les langagesintermdiaireset les langages compils.

    Langage interprt

    Un langage de programmation est par dfinition diffrent du langage machine. Il faut donc letraduire pour le rendre intelligible du point de vue du processeur. Un programme crit dans un

    langage interprt a besoin d'un programme auxiliaire (l'interprteur) pour traduire au fur et mesure les instructions du programme.Exemples de langages interprts : Le langage HTML (les pages web), le langage Maple (calculmathmatique), Prolog (Intelligence artificielle), etc.

    Langage compil :

    Un programme crit dans un langage dit "compil" va tre traduit une fois pour toutes par unprogramme annexe (le compilateur) afin de gnrer un nouveau fichier qui sera autonome, c'est--dire qui n'aura plus besoin d'un programme autre que lui pour s'excuter (on dit d'ailleurs quece fichier est excutable).Un programme crit dans un langage compil a comme avantage de ne plus avoir besoin, une foiscompil, de programme annexe pour s'excuter. De plus, la traduction tant faite une fois pourtoute, il est plus rapide l'excution.Toutefois il est moins souple qu'un programme crit avec un langage interprt car chaquemodification du fichier source il faudra recompiler le programme pour que les modificationsprennent effet.D'autre part, un programme compil a pour avantage de garantir la scurit du code source. Eneffet, un langage interprt, tant directement intelligible (lisible), permet n'importe qui deconnatre les secrets de fabrication d'un programme et donc de copier le code voire de le

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    6/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 6 31/03/2013

    modifier. Il y a donc risque de non-respect des droits d'auteur. D'autre part, certaines applicationsscurises ncessitent la confidentialit du code pour viter le piratage (transaction bancaire,paiement en ligne, communications scurises, ...).Exemples de langages compils : Le langage C (Programmation systme), le langage C++(Programmation systme objet), le Cobol (Gestion) etc.

    Langages intermdiaires :

    Certains langages appartiennent en quelque sorte aux deux catgories prcdentes (LISP, Java,Python, ..) car le programme crit avec ces langages peut dans certaines conditions subir unephase de compilation intermdiaire vers un fichier crit dans un langage qui n'est pas intelligible(donc diffrent du fichier source) et non excutable (ncessit d'un interprteur). Les appletsJava, petits programmes insrs parfois dans les pages Web, sont des fichiers qui sont compilsmais que l'on ne peut excuter qu' partir d'un navigateur Internet (ce sont des fichiers dontl'extension est .class).

    Toutefois, peu prs tous les langages de programmation sont bass sur le mme principe:Le programme est constitu d'une suite d'instructions que la machine doit excuter. Celle-ciexcute les instructions au fur et mesure qu'elle lit le fichier (donc de haut en bas) jusqu' cequ'elle rencontre une instruction (appele parfois instruction de branchement) qui lui indiqued'aller un endroit prcis du programme. Il s'agit donc d'une sorte de jeu de piste dans lequel lamachine doit suivre le fil conducteur et excuter les instructions qu'elle rencontre jusqu' cequ'elle arrive la fin du programme et celui-ci s'arrte.

    Historique des langages

    Langage de bas niveau (proche du langage machine):

    - Jusquen 1945 : langage binaire- 1950 : langage assembleur

    Langage de haut niveau (proche des langages naturels):Depuis 1955:- Programmation procdurale : Fortran, Cobol, Basic, Pascal, C, Ada- Programmation orient objet : SmallTalk, C++, Delphi, Java- Programmation logique : Prolog- Et beaucoup dautres

    Evolution:

    o Programmation imprative (fonction):- Exemples : Pascal, C,

    o Programmation oriente objet (POO) :- Exemples : SmallTalk, Java, C++,

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    7/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 7 31/03/2013

    1.3.3 La notion de fichier

    Dans un programme les instructions et donnes rsident en mmoire centrale pour treexcutes, Les programmes et les donnes sont sauvegardes dans des fichiers qui portent desextensions spcifiques du langage :

    o Les donnes et les programmes sont stocks dans des fichierso Un fichier est identifi par un nom et une extension (fichier.doc, pgcd.c, texte.tex, etc.)o Un fichier est caractris par des attributs:! taille, date de cration, date de modification, etc.

    o Lexploitation dun fichier par une application se fait par lintermdiaire du systmedexploitation qui accomplit les oprations logiques de base suivantes:! ouvrir, fermer un fichier! lire, crire dans un fichier

    o Lutilisateur peut crer, dtruire, organiser, lire, crire, modifier et copier des fichiers oudes enregistrements qui les composent

    1.3.4 La dmarche de programmation et analyse descendante

    La rsolution d'un problme passe par toute une suite d'tapes :

    Phase d'analyse et de rflexion (algorithmique) Phase de programmation

    - choisir un langage de programmation- traduction de l'algorithme en programme- programme (ou code) source- compilation : traduction du code source en code objet- traduction du code objet en code machine excutable, comprhensible par l'ordinateur

    Phase de test Phase dexcution

    Programme source Compilation

    Programme binaire

    Enonc dun problme Analyse du problme

    Programmation laide dunAlgorithme

    Rsultats

    Excution du programme

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    8/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 8 31/03/2013

    Le travail est ici surtout bas sur l'analyse du problmeet l'criture de l'algorithme.La ralisation d'un programme passe par l'analyse descendante du problme : il faut russir trouver les actions lmentaires qui, en partant d'un environnement initial, nous conduisent l'tat final.

    Lanalyse descendante consiste dcomposer le problme donn en sous-problmes, et ainsi desuite, jusqu descendre au niveau des primitives. Les tapes successives donnent lieu des sous-algorithmes qui peuvent tre considrs comme les primitives de machine intermdiaires(procdures en Pascal, fonction en C).

    Le travail de lanalyse est termin lorsquon a obtenu un algorithme ne comportant que : Des primitives de la machine initiale, Des algorithmes dj connus.

    Lanalyse descendante est la mise en pratique duDiscours de la mthode de Descartes.Lordre des instructions est essentiel : la machine ne peut excuter quune action la fois et danslordre donn; cest la proprit de squentialit.

    Une fois ces actions dtermines, il suffit de les traduire dans le langage de programmation.Durant l'criture d'un programme, on peut tre confront 2 types d'erreur :o les erreurs syntaxiques : elles se remarquent la compilation et sont le rsultat d'une

    mauvaise criture dans le langage de programmation.o les erreurs smantiques : elles se remarquent l'excution et sont le rsultat d'une

    mauvaise analyse. Ces erreurs sont beaucoup plus graves car elles peuvent se dclencheren cours d'exploitation du programme.

    1.3.5 Excuter un programme

    La mise au point d'un programme informatique se fait en plusieurs tapes.

    Donnes

    Programme

    Rsultats

    Ordinateur

    Excution du programmeTransformation des donnesen rsultats

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    9/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 9 31/03/2013

    1.3.6 Pseudo langage

    Un algorithme doit tre lisible et comprhensible par plusieurs personnes. Il doit donc suivre desrgles prcises, il est compos dune entteet dun corps:

    - lentte, qui spcifie :o le nom de lalgorithme (Nom :)

    o son utilit (Rle :)o les donnes en entre, cest--dire les lments qui sont indispensables son

    bon fonctionnement (Entre :)o les donnes en sortie, cest--dire les lments calculs, produits, par

    lalgorithme (Sortie :)o les donnes locales lalgorithmique qui lui sont indispensables (Dclaration :)

    - le corps, qui est compos :o du mot clef dbuto dune suite dinstructionsindentes

    o du mot clef finLe plus important pour un algorithme sont les dclarations ainsi que les instructions quiconstituent le corps de lalgorithme. Il existe des instructions qui ne servent qu la clart delalgorithme (lordinateur les ignore compltement), ce sont les commentaires.Un commentaire a la syntaxe suivante :

    /* ceci est un commentaire */

    Exemple: voici le schma dun algorithme crit en notre pseudo langage:

    Nom : le nom de lalgorithmeRle : que fait cet algorithme FacultatifsEntre : les donnes ncessairesSortie : les rsultats produits par lalgorithme

    Variables: la dclaration des variablesDebut

    Instruction 1Instruction 2 /* les commentaires explicatives des instructions */Instruction k

    Fin

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    10/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 10 31/03/2013

    2. Variables

    Dans un programme informatique, on va avoir en permanence besoin de stocker provisoirementdes valeurs. Il peut sagir de donnes issues du disque dur, fournies par lutilisateur (frappes auclavier). Ces donnes peuvent tre de plusieurs types : elles peuvent tre des nombres, du texte,

    etc. Ds que lon a besoin de stocker une information au cours dun programme, on utilise unevariable.

    2.1 Dclaration des variables

    La premire chose faire avant de pouvoir utiliser une variable est de crer la bote et de luicoller une tiquette. Ceci se fait tout au dbut de lalgorithme, avant mme les instructionsproprement dites. Cest ce quon appelle la dclaration des variables.Une variable ne peut tre utilise que selle est dclare. La dclaration se fait par la donne dunomde la variable et du typede la variable.

    2.1.1 Noms de variables

    Le nom de la variable (ltiquette de la bote) obit des rgles qui changent selon le langageutiliser. Les principales rgles respecter sont :

    Le nom de variable peut comporter des lettres et des chiffres, On exclut la plupart des signes de ponctuation, en particulier les espaces. Un nom de variable doit commencer par une lettre. Le nombre maximal de caractres qui composent le nom dune variable dpend du

    langage utilis. Ne pas utiliser les mots cls du langage de programmation.

    2.1.2 Types de variables

    Lorsquon dclare une variable, il ne suffit pas de crer une bote (rserver un emplacementmmoire) ; il faut prciser ce que lon voudra mettre dedans, car de cela dpendent la taillede labote (lemplacement mmoire) et le typede codageutilis.

    - Types numriques classiquesCommenons par le cas trs frquent, celui dune variable destine recevoir des nombres.

    " Si lon rserve un octet pour coder un nombre, on ne pourra coder que 2 8 = 256 valeurs

    diffrentes. Cela peut signifier par exemple les nombres entiers de 1 256, ou de 0 255,ou de 127 +128.

    " Si lon rserve deux octets, on a droit 216 =65 536 valeurs ; avec trois octets, 224 =16777 216, etc.

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    11/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 11 31/03/2013

    Type Numrique Plage

    Octet de 0 255

    Entier simple de -32768 32767

    Entier double de -2147483648 2147483647

    Rel simplede -3.40x1038 -1.40x10-45pour les ngativesde 1,40x10-45 3.40x1038 pour les positives

    Rel double de -1.79x10308 -4.94x10-324 les ngatives

    de 4.94x10-324 1.79x10308 les positives

    La syntaxe dune dclaration de variable numrique en pseudo-langage aura la forme :

    Variable g : Numrique

    Variables PrixHT, TauxTVA, PrixTTC : Numrique

    - Type alphanumriqueOn dispose donc galement du type alphanumrique (galement appel type caractre, typechane ou en anglais, le type string).Dans une variable de ce type, on stocke des caractres, quilsagisse de lettres, de signes de ponctuation, despaces, ou mme de chiffres. Le nombre maximal

    de caractres pouvant tre stocks dans une seule variable string dpend du langage utilis. Un groupe de caractres est appel chanede caractres. En pseudo-code, une chane de caractres est toujours note entre guillemets" ", car, il

    peut y avoir une confusion entre des nombres et des suites de chiffres. Par exemple, 423peut reprsenter :

    le nombre 423(quatre cent vingt-trois), ou la suite de caractres 4, 2, et 3 note : "423"

    La syntaxe dune dclaration de variable de type alphanumrique en pseudo-langage aura laforme :

    Variable nom : chane

    Variables x, y : caractre.

    - Type boolenLe dernier type de variables est le type boolen : on y stocke uniquement les valeurs logiquesVRAI et FAUX. On peut reprsenter ces notions abstraites de VRAI et de FAUX par tout cequ'on veut : de l'anglais (TRUE et FALSE) ou des nombres (0 et 1). Le type boolen est trsconomique en termes de place mmoire occupe, un seul bit suffit.

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    12/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 12 31/03/2013

    En gnral dans un algorithme on trouve des dclarations de variables de la forme :

    Variables a,b,c,delta,x,y : nombres

    nom,prenom : chaines de caractres

    ok : booleen.

    3. Primitives

    3.1 Affectation, expression et oprateurs

    3.1.1 Affectation

    Dfinition et notation :Laffectation est laction lmentaire dont leffet est de donner une valeur une variable (rangerune valeur une place).L'affectation est ralise au moyen de l'oprateur #(ou =en C et :=en Pascal). Elle signifie

    " prendre la valeur se trouvant du ct droit (souvent appele rvalue) et la copier du ct gauche(souvent appele lvalue) ". Une rvalue reprsente toute constante, variable ou expression capablede produire une valeur, mais une lvalue doit tre une variable distincte et nomme (autrement dit,il existe un emplacement physique pour ranger le rsultat). Par exemple, on peut affecter unevaleur constante une variable (A #4), mais on ne peut pas affecter quoi que ce soit unevaleur constante - elle ne peut pas tre une lvalue (on ne peut pas crire 4 #A).

    Exemple:X#3

    Signifie mettre la valeur 3dans la case identifie par X. A lexcution de cette instruction, lavaleur 3est range en X(nom de la variable).

    La valeur correspond au contenu : 3La variable correspond au contenant : X

    On peut reprsenter la variable Xpar une boite ou case, et quand elle prend la valeur 3, la valeur3est dans la case X:

    X X

    On remarque quune variable ne peut contenir un instant donn quune seule valeur.

    Utilisations :Voici quelques effets dclenches par lutilisation de laffectation () :

    Instructions actions effets

    X#3 X 3 X

    X#2 X 2 X plus de 3!

    Y#X Y X Y X

    3

    3

    3 2

    22 2

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    13/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 13 31/03/2013

    La dernire instruction (Y#X) signifie : copier dans Yla valeur actuelle de X.

    Un petit exercice instructif:Quelles sont les valeurs successives prises par les variables Xet Ysuit aux instructions suivantes :X #1 ; Y #-4 ; X #X+3 ; X #Y-5 ; Y #X+2 ; Y #Y-6 ;

    Rponses :X 1 1 4 -9 -9 -9

    Y -4 -4 -4 -7 -13

    Remarque: noter aussi que laffectation est une expression comme une autre, cest--dire quelle retourneune valeur. Il est donc possible dcrire:

    X #Y #Z+2 ;

    ceci revenant affecter Y le rsultat de lvaluation de Z+2, puis X le rsultat de laffectationY#Z+2, cest--dire la valeur quon a donne Y. Remarquez lordre dvaluation de la droitevers la gauche.

    L'affectation des types primitifs est trs simple. Puisque les donnes de type primitif contiennentune valeur relle et non une rfrence un objet, en affectant une valeur une variable de typeprimitif on copie le contenu d'un endroit un autre. Par exemple, si on crit A #B pour destypes primitifs, alors le contenu de B est copi dans A. Si alors on modifie A, bien entendu Bn'est pas affect par cette modification. C'est ce qu'on rencontre gnralement en programmation.

    Echanger deux valeurs :

    Problme: soit 2 variables quelconques (nombres ou caractres) xet yayant respectivementcomme valeur aet b; quelles sont les affectations qui donneront xla valeur bet yla valeura?

    Analyse: la premire ide est dcrire : x #y ; y #x. Mais a ne marche pas, les deuxvariables se retrouvent avec la mme valeur b! Il faut mettre la valeur de xde cot pour ne pas laperdre : on utilise une variable auxiliaire zet on crit les instructions suivantes :

    z #x ; x #y ; y # z ;

    Le programme complet avec notre pseudo-langage est :

    Nom : changeRle : changer deux valeursEntre : x etySortie : x ety

    Variablesx, y, z : quelconquesDebut

    x #3 /* initialisation de x et y */

    y #-6

    z #x /* on stocke la valeur de x dans z */

    x #y /* on peut maintenant crire dans x */

    y #z /* on remet lancien contenu de x dans y */

    Fin

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    14/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 14 31/03/2013

    Vrification : il sagit de vrifier que lalgorithme donne bien la solution voulu. Ecrivant aprschaque instruction les valeurs des variables X, Yet Z:

    x #3 " x = 3, y = , z = "

    y #-6 " x = 3, y = -6, z = "

    z#x " x = 3, y = -6, z = 3 "

    x #y " x = -6, y = -6, z = 3 "

    y #z " x = -6, y = 3, z = 3 " donc tout va bien.

    Autre mthode: sil sagit de nombres entiers, nous pouvons nous passer dune variableauxiliaire, mais en utilisant les primitives additionner et soustraire :

    x #a " x = a, y = "

    y #b " x = a, y = b "x # x + y " x = a + b, y = b "

    y # x y " x = a + b, y = a + b b = a "

    x # x y " x = a + b a =b, y = a" donc tout va bien.

    Le programme complet avec notre pseudo-langage est :

    Nom : change_entiersRle : changer deux valeurs entiresEntre : x etySortie : x etyVariablesx, y : nombres

    Debut

    x #3 /* initialisation de x et y */

    y #-6

    x #x + y

    y #x - y

    x #x - y

    Fin

    3.1.2 Expression et oprateurs

    Expression :Dans une instruction daffectation, on trouve :

    o gauche de la flche, un nom de variable,o droite de la flche, ce quon appelle une expression: un ensemble de valeurs, relies

    par des oprateurs, et quivalent une seule valeuro Lexpression situe droite de la flche doit tre du mme type que la variable situe

    gauche.

    Si lun des trois points numrs ci-dessus nest pas respect, la machine sera incapabledexcuter laffectation, et dclenchera une erreur.

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    15/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 15 31/03/2013

    Oprateurs :

    Un oprateur est un signe qui relie deux valeurs, pour produire un rsultat.o Oprateurs numriques:

    Ce sont les quatre oprations arithmtiques :

    + addition- soustraction* multiplication/ division

    Mentionnons galement le ^qui signifie puissance". 45au carr scrira donc 45^2.La multiplication et la division sont prioritaires sur laddition et la soustraction.

    12*3+5et (12*3)+5valent strictement la mme chose, savoir 41. En revanche, 12*(3+5)vaut 12*8soit 96.

    o Oprateur alphanumrique : &

    Cet oprateur permet de concatner deux chanes de caractres.

    Exemple :Nom : concatnerRle : concatner deux chanes de caractresEntre : A etBSortie : C

    Variables A, B, C: caractre

    Dbut

    A #"Bonjour"

    B #" Tous le monde"

    C #A &BFin

    La valeur de C la fin de lalgorithme est "Bonjour Tous le monde".

    3.2 Lire et crire

    3.2.1 Introduction

    Soit le programme suivant :

    Variable A : entire

    DbutA #12^2

    Fin

    Ce programme nous donne le carr de 12soit 144.

    On remarque que :o si lon veut le carr dun autre nombre que 12, il faut rcrire le programme.

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    16/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 16 31/03/2013

    o Le rsultat est calcul par la machine elle le garde pour elle, et lutilisateur qui excute ceprogramme, ne saura jamais quel est le carr de 12.

    Cest pourquoi, il faut utiliser des instructions qui permettent lutilisateur de dialoguer avecla machine.

    3.2.2 Donnes et rsultat

    Pour pouvoir effectuer un calcul sur une variable, la machine doit connatre la valeur de cettevariable. Si cette valeur na pas t dtermine par des initiations ou des calculs prcdents, ilfaut que lutilisateur lui fournisse, cest une donne. Il sagit alors dintroduire une valeur partirde lextrieur de la machine et pour cela lalgorithme doit contenir linstruction qui commande la machine de lirela donne.

    Si un algorithme contenant linstruction X #A^2 la machine ne peut excuter cetteinstruction que si elle connat la valeur de A, en supposant que la valeur de Aen ce moment nestpas connu, alors lalgorithme doit contenir linstruction lire(A) qui signifie : mettre dans la

    case A, la valeur donne par le clavier(organe dentre de la machine).Ds que le programme rencontre une instruction lire(), lexcution sinterrompt, attendantlarriver dune valeur par lintermdiaire du clavier. Ds que la touche Entre (Enter) a tfrappe, lexcution reprend.

    Si on veut connatre le rsultatdun calcul ou le contenu dune variable X, lalgorithme doitcontenir linstruction qui commande la machine de fournir ce rsultat. Cette instruction estcrire(X) qui signifie : mettre sur lcran(organe de sortie de la machine) le contenu de lacase X. Cette action ne modifie pas le contenu de X.

    Exemple: soit le morceau dalgorithme suivant :

    Atant une donne, Xun rsultatlire (A)

    X #A^2crire(X)

    Schma des actions effectues par lutilisateur et la machine :

    Utilisateur MachineA X

    lecture

    Lutilisateur donne 12 12calcul

    12 144criture

    Lutilisateur lit ! 144

    La machine lit sur le clavier et crit sur lcran, lutilisateur crit sur le clavier et lit sur lcran.

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    17/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 17 31/03/2013

    3.2.3 Les libells

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

    crire("Entrez votre nom : ")

    lire(NomFamille)

    3.2.4 Exemples

    Exemple 1 :Quel est le rsultat produit par le programme suivant ?

    Variablesval, dval : entiers

    Dbut

    val #234

    dval #val * 2

    crire(val)

    crire(dval)

    Fin

    Rponses: 234 468

    1re

    amlioration :Variables val, dval: entiers

    Dbut

    crire("donner un entier: ") /* un libell */lire(val)

    dval #val * 2

    crire("le double est :" )crire(dval)

    FinExcution :

    donner un entier:234le double est:468

    2meamlioration :Nom : doubleRle: demande un nombre et affiche sont doubleEntre : val

    Sortie : dval

    Variables val, dval: entiers

    Dbut

    crire("donner un entier :")lire(val)

    dval #val * 2

    crire(" le double de : ",val," est :", dval )Fin

    Excution :

    donner un entier:234le double de :234 est :468

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    18/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 18 31/03/2013

    Exemple 2 :Problme :Multiplier deux nombres entiers.En utilisant les primitives suivantes :

    lire(), crire(), affecter ( ), multiplier (*).

    Solution :Algorithme :Nom :multiplicationRle:demander deux nombres et afficher leur multiplicationEntre :A et BSortie :CvariablesA, B, C : entiersDbut

    crire(" entrer la valeur de A : ")lire(A)crire(" entrer la valeur de B : ")lire(B)

    C A * Bcrire(" le produit de ",A," et ",B," est : ",C)

    Fin

    Excution :entrer la valeur de A : 12entrer la valeur de B : -11le produit de 12est de 11est : -132

    3.2.5 Exercices :

    Exercice 1:

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

    A #8

    B #-2

    C #A + B

    A #4

    C #B A

    Fin

    Exercice 2:Quelles seront les valeurs des variables A et B aprs excution des instructions suivantes ?VariablesA, B : Entier

    Dbut

    A #2

    B #A + 5

    A #A + B

    B #B + 2

    A #B A

    Fin

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    19/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 19 31/03/2013

    Exercice 3:Que produit lalgorithme suivant ?Variables A, B :Entier

    Dbut

    crire("entrer la valeur de A :") lire(A)crire("entrer la valeur de B :") lire(B)A #A + B

    B #A - B

    A #A B

    crire(" A = ",A) crire(" B = ",B)

    Fin

    Exercice 4:Que produit lalgorithme suivant ?Variables A, B, C: chane de caractres

    Dbut

    A #"423"

    B #"12"

    C #A &B

    crire(" C = ",C)

    Fin

    Exercice 5:1. Ecrire un algorithme permettant dchanger les valeurs de deux variables A et B, et ce quel

    que soit leur contenu pralable.2. On dispose de trois variables A, B et C. Ecrivez un algorithme transfrant A la valeur de B,

    B la valeur de C et C la valeur de A (quels que soient les contenus pralables de cesvariables).

    Exercice 6:Ecrivez un algorithme qui calcule et affiche la surface et la circonfrence dun cercle (2 !r et2

    r! ). Lalgorithme demandera lutilisateur dentrer la valeur du rayon.

    Exercice 7:Comment calculer le plus rapidement possible x16?Calculer x25avec le minimum de multiplication.

    Exercice 8:Ecrivez un algorithme qui calcule et affiche la surface et la circonfrence dun cercle (2 !r et

    2r! ). Lalgorithme demandera lutilisateur dentrer la valeur du rayon.

    Exercice 9 :

    crire un algorithme qui effectue la lecture du temps ten seconde, et il affiche le temps tenjours, heure, minutes, secondes.

    Exemple : si t=21020 secondes lalgorithme affichera 0 jours 5 heures 50 minutes et 20secondes.

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    20/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 20 31/03/2013

    3.5.4 si .. alors .., si .. alors .. sinon ..

    Les primitives que nous allons prsenter maintenant vont permettre la machine de "choisir" lesexcutions suivant les valeurs des donnes. Lors de lexcution lalgorithme, la primitive :

    si C alors

    Afinsi

    O C est une condition (on prcisera plus loin la nature de cette condition) et A une instructionou une suite dinstructions, a pour effet de faire excuter A si et seulement si C est satisfaite.La primitive

    si C alors

    A

    sinon B

    finsi

    A pour effet de faire excuter A si C est satisfaite ou bien B dans la cas contraire (C non

    satisfaite).

    Une conditionest une comparaison. Cest--dire quelle est compose de trois lments$ une valeur$ un oprateur de comparaison$ une autre valeur

    Les valeurspeuvent tre a priori de nimporte quel type (numriques, caractres)Les oprateurs de comparaisonsont : = != < > =< >=Lensemble constitue donc si lon veut une affirmation, qui a un moment donn est VRAIEouFAUSSE.

    A noter que ces oprateurs de comparaison semploient tout fait avec des caractres. Ceux-cisont cods par la machine dans lordre alphabtique, les majuscules tant systmatiquementplaces avant les minuscules. Ainsi on a :

    "t" < "w" VRAI

    "Maman" > "Papa" FAUX

    "maman" > "Papa" VRAI.

    Conditions composes

    Certains problmes exigent parfois de formuler des conditions qui ne peuvent pas tre exprimessous la forme simple expose ci-dessus. Prenons le cas " n est compris entre 5 et 8 ". En fait cettephrase cache non une, mais deux conditions. Car elle revient dire que " n est suprieur 5 et nest infrieur 8 ". Il y a donc bien l deux conditions, relies par ce quon appelle un oprateurlogique, le mot ET.Comme on la voqu plus haut, linformatique met notre disposition trois oprateurs logiques :ET, OU, et NON.Le ET a le mme sens en informatique que dans le langage courant. Pour que C 1ET C2soitVRAI, il faut imprativement que C1soit VRAIE et que C2soit VRAIE.

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    21/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 21 31/03/2013

    Il faut se mfier un peu plus du OU. Pour que C1OU C2soit VRAI, il suffit que C1soit VRAIEou que C2soit VRAIE.Le point important est que si C1est VRAIE et C2 est VRAIE, alors C1OU C2est VRAIE. Le OUinformatique ne veut donc pas dire " ou bien ".VRAI!NON FAUX

    On reprsente tout ceci dans des tables de vrit :

    Exemple :Problme :

    tant donns deux nombres entiers positifs, identifier le plus grand des deux nombres.

    Solution :Analyse :si A>Balors le plus grand est Asinon le plus grand est B.

    Conception :AlgorithmevariablesA, B : entiers

    dbut

    crire("Programme permettant de dterminer le plus grand de deux entiers positifs)crire(Entrer le premier nombre : )lire(A)

    crire(Entrer le second nombre : )lire(B)

    si (A>B) alors

    crire(Le nombre le plus grand est : ,A)sinon

    crire(Le nombre le plus grand est : , B)finsi

    fin

    Organigramme

    ET V F

    V V F

    F F F

    OU V F

    V V V

    F V F

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    22/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 22 31/03/2013

    Tests imbriqusGraphiquement, on peut trs facilement reprsenter un sicomme un aiguillage de chemin de fer.Un siouvre donc deux voies, correspondant deux traitements diffrents. Mais il y a des tas desituations o deux voies ne suffisent pas. Par exemple, un programme devant donner ltat deleau selon sa temprature doit pouvoir choisir entre trois rponses possibles (solide, liquide ougazeuse).

    Exemple :

    VariableTemp : entier

    Dbut

    crire("Entrez la temprature de leau :")

    lire(Temp)

    siTemp =< 0Alors

    crire("Cest de la glace")

    finsi

    siTemp > 0 EtTemp < 100Alorscrire("Cest du liquide")

    finsisiTemp > 100Alors

    crire("Cest de la vapeur")

    finsi

    Fin

    Les tests successifs portent sur une la mme chose, la temprature (la valeur de la variableTemp). Il serait ainsi bien plus rationnel dimbriquerles tests de cette manire :

    crire(" Entrer le premier nombre :")

    " "

    si A>B

    crire(Le nombre le plus grand est : ,A)crire(Le nombre le plus grand est : ,B)

    ouinon

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    23/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 23 31/03/2013

    Exemple:VariableTemp en Entier

    Dbut

    crire("Entrez la temprature de leau :" )

    lire(Temp)

    siTemp =< 0Alors

    crire("Cest de la glace")sinon

    siTemp < 100Alors

    crire("Cest du liquide")

    sinon

    crire("Cest de la vapeur")

    finsi

    finsi

    Fin

    Nous avons fait des conomies au niveau de la frappe du programme : au lieu de devoir tapertrois conditions, dont une compose, nous navons plus que deux conditions simples. Mais aussi,

    et surtout, nous avons fait des conomies sur le temps dexcution de lordinateur. Si latemprature est infrieure zro, celui-ci crit dornavant " Cest de la glace " et passedirectement la fin, sans tre ralenti par lexamen dautres possibilits (qui sont forcmentfausses).Cette deuxime version nest donc pas seulement plus simple crire et plus lisible, elle estgalement plus performante lexcution.Les structures de tests imbriqus sont donc un outil indispensable la simplification et loptimisation des algorithmes.

    Exercices :

    Exercice 10:Ecrivez un algorithme qui donne le maximum de trois nombres saisis au clavier. Effectuez destests pour : 2 5 8

    3 1 38 -6 1

    Exercice 11:Ecrivez un algorithme qui demande deux nombres lutilisateur et linforme ensuite si leurproduit est ngatif, positif ou nul (attention :on ne doit pas calculer le produit des deuxnombres).

    Exercice 12:

    crivez un algorithme qui permet de discerner une mention un tudiant selon la moyenne de sesnotes :- "Trs bien" pour une moyenne comprise entre 16 et 20 (16

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    24/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 24 31/03/2013

    Exercice 13:crivez un algorithme qui permet de rsoudre une quation du second degr( 0aavec0cxbxa 2 !=++ )

    Exercice 14:

    Les tudiants ayant pass l'examen dalgorithmique en session de Juin ont t classs selon leursnotes en trois catgories :

    - pour une note infrieure strictement 5, l'tudiant est limin,

    - pour une note suprieure ou gale 5 et infrieur strictement 10, l'tudiant passe lasession de rattrapage,

    - pour une note suprieure ou gale 10, l'tudiant valide le module

    Ecrivez un algorithme qui demande lutilisateur dentrer la note du module, puis affiche lasituation de l'tudiant selon sa note (on suppose que l'utilisateur entre une note valide entre 0 et20).

    3.5.5 Les Boucles

    La notion ditration (boucle) est une des notions fondamentales de lalgorithmique. On lutilisesouvent quand on doit exercer plusieurs fois le mme traitement sur un mme objet, ou plusieursobjets de mme nature. Mais son rel intrt rside dans le fait que lon peut modifier, chaquerptition, les objets sur lesquels sexerce laction rpte.

    Pour comprendre lintrt des boucles, on se place dans un cas bien prcis :Prenons le cas dune saisie au clavier (une lecture), par exemple, on pose une question laquellelutilisateur doit rpondre par O (Oui) ou N (Non). Mais lutilisateur maladroit risque de taperautre chose que O ou N. Ds lors, le programme peut soit planter par une erreur dexcution

    (parce que le type de rponse ne correspond pas au type de la variable attendu) soit se droulernormalement jusquau bout, mais en produisant des rsultats faux.Alors, dans tout programme, on met en place ce quon appelle un contrle de saisie (pourvrifier que les donnes entres au clavier correspondent bien celles attendues parlalgorithme).On pourrait essayer avec un si. Voyons voir ce que a donne :

    Variable RepCaractre

    crire("Voulez vous un caf ? (O/N)")

    lire(Rep)

    si Rep != "O"et Rep != "N"alors

    crire("Saisie erronne. Recommencez")

    Lire(Rep)finsi

    a marche tant que lutilisateur ne se tromper quune seule fois, et il rentre une valeur correcte la deuxime demande. Si lon veut galement viter une deuxime erreur, il faudrait rajouter unSI. Et ainsi de suite, on peut rajouter des centaines de SI. Mais cela ne rsout pas le problme. Laseule issue est lutilisation dune boucle.

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    25/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 25 31/03/2013

    Il existe trois faons dexprimer algorithmiquement litration :

    $ TantQue

    $ Rpter jusqu$ Pour jusqu

    La boucle TantQue

    Le schma de la boucle TantQue est :

    TantQue conditions...Instructions...

    FinTantQue

    Le principe est simple : le programme arrive sur la ligne du TantQue. Il examine alors la valeurde la condition. Si cette valeur est VRAI, le programme excute les instructions qui suivent,jusqu ce quil rencontre la ligne FinTantQue. Il retourne ensuite sur la ligne du TantQue,procde au mme examen, et ainsi de suite. On ne sarrte que lorsque la condition prend lavaleur FAUX.Illustration avec notre problme de contrle de saisie :

    Variable Repen Caractre

    Ecrire "Voulez vous un caf ? (O/N)"

    TantQue Rep != "O"ET Rep != "N"

    Lire Rep

    Si Rep != "O"ET Rep != "N"Alors

    Ecrire "Saisie errone. Recommencez"

    FinSi

    FinTantQue

    La boucle Rpter jusqu

    Le schma de la boucle rpter est :

    Rpter...Instructions

    ...jusquconditions

    Le principe est simple : toutes les instructions crites entre Rpteret jusqusontexcutes au moins une fois et leur excution est rpte jusqu ce que la condition placederrire jusqu soit satisfaite.Illustration avec notre problme de contrle de saisie :

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    26/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 26 31/03/2013

    Variable Repen Caractre

    Ecrire "Voulez vous un caf ? (O/N)"

    Rpter

    Lire Rep

    Si Rep != "O"ET Rep != "N"Alors

    Ecrire "Saisie errone. Recommencez"

    FinSi

    Jusqu Rep = "O"OU Rep = "N"

    La boucle Pour jusqu

    Cette boucle est utile surtout quand on connat le nombre ditrations effectuer.

    Le schma de la boucle Pour est :

    Pour i allant de dbutjusqu fin...

    Instructions...

    FinPour

    Le principe est simple :$ on initialise i par dbut$ on test si on a pas dpass fin$ on excute les instructions$ on incrmente i (i#i + 1)$ on test si on a pas dpass fin$ etc.

    Exemple :Problme :On veut crire un algorithme qui affiche le message "Bonjour tous" 100 fois.

    Rsolution:Au lieu dcrire linstruction :

    crire("Bonjour tous") ;

    100 fois. On utilise plutt une boucle :

    variablei entire

    Pouri allant de1 100 faire

    crire("Bonjour tous")finpour

    On peut amliorer ce programme par :$ ajouter un entier n : le nombre de fois que le message safficher lcran,$ afficher la variable i dans la boucle : pour numroter les passages dans la boucle.

    variablen, i entires

    crire("entrer le nombre n :")

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    27/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 27 31/03/2013

    lire(n)

    Pouri allantde1 n faire

    crire("Bonjour tous la ",i," fois")

    finpour

    Dans la boucle prcdente le i est incrment automatiquement. Si on dsire utiliser la boucle

    TantQue, il faut incrmenter le i soit mme :

    variablen, i entires

    crire("entrer le nombre n :")lire(n)

    i#1TantQue(i

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    28/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 28 31/03/2013

    Variable i entier

    Pour i allant de1 10

    i #i * 2

    crire("Passage numro : ",i) ;

    Finpour

    On remarque que la variable iest gre "en double", ces deux gestions tant contradictoires.Dune part, la ligne " Pour " augmente la valeur de ide 1 chaque passage. Dautre part laligne " i #i * 2" double la valeur de i chaque passage. Il va sans dire que de tellesmanipulations perturbent compltement le droulement normal de la boucle.

    Exemple :Problme :

    On veut crire un algorithme qui calcul la somme des entiers positifs infrieurs ou gaux N.

    Rsolution:1re tape : Analyse

    1. Entrer la valeur de N2. Calculer la somme des N premiers entiers positifs3. Afficher le rsultat

    2metapes : Conceptions1.

    dclaration des variables N, i, somme : entiers

    crire(donner la valeur de N)

    lire(N)

    si N=N

    crire("la somme est ",somme)

    2.dclaration des variables N, i, somme : entiers

    crire(donner la valeur de N)

    lire(N)

    si N

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    29/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 29 31/03/2013

    crire(donner la valeur de N)

    lire(N)

    si N0 !Somme_N_entiersDonner N : 7845La somme est : 30775935Somme_N_entiers

    Donner N : 10La somme est : 55

    Remarque: Pour cet exemple on peut faire une vrification plus complte en calculant uneautre variable somme1 = N(N+1)/2 , qui est la somme 1+2+3+ +N, et la compare somme ensuite afficher le rsultat de la comparaison.

    Mthodologie pour l'criture d'une boucle :

    % reprer une action rptitive, donc une boucle% choix entre boucle avec compteur ou sans

    Question ? Peut-on prvoir/dterminer le nombre d'itrations ?$ si oui, boucle avec compteur : la boucle pour $ si non, boucle sans compteur

    Est ce que il faut commencer l'action avant de tester ou l'inverse ?! si tester d'abord, alors boucle TantQue! si action puis tester, alors Rpter jusqu

    % crire l'action rptitive et l'instruction de boucle choisieQuestion ? Faut-il prparer les donnes l'itration suivante ?! si oui, complter le corps de boucle

    % initialiser les variables utilises (si ncessaires)% crire les conditions d'arrt, voire l'incrmentation de la variable de contrle.% excuter pour les cas extrmes et au moins un cas "normal".

    3.6 ExempleEcrire lalgorithme qui compte le nombre de bits ncessaires pour coder en binaire un entiern.- Le nombre de bits ncessaire pour coder lentier n est [lg(n)] (lentier juste au dessus du

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    30/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 30 31/03/2013

    logarithme base 2 de lentier n).- Analyse: on initialise une variable nb 0 et chaque fois que lon divise n par 2 onaugment de 1 la valeur de nb, on rpte ce procd jusqu ce que le quotient obtenu est nul.- Lalgorithme:

    Variablesi,n,nb : entiers

    Debut

    Ecrire(" Entrer la valeur de n :")

    lire(n)

    i #n

    nb #0

    TantQue(i0) faire

    i #i/2

    nb #nb+1

    FinTantQue

    Ecrire("Pour coder ",n," en binaire il faut ",nb,"bits")

    Fin

    - Excution:

    Entrer la valeur de n : 13Pour coder 13 en binaire il faut 4 bits===========================Entrer la valeur de n : 1750Pour coder 1750 en binaire il faut 11 bits============================Entrer la valeur de n : 0Pour coder 0 en binaire il faut 0 bitsErreur !!!!!

    - Amlioration :Variablesi,n,nb : entiers

    Debut

    Ecrire(" Entrer la valeur de n :")

    lire(n)

    i #n/2 /* Pour le cas de zro */

    nb # 1

    TantQue(i0) faire

    i #i/2

    nb #nb+1

    FinTantQue

    Ecrire("Pour coder ",n," en binaire il faut ",nb,"bits")

    Fin

    - Implmentation en langage C:#include

    void main(){

    int i,n,nb ;

    printf(" Entrer la valeur de n :") ;

    scanf("%d",&n) ;

    i = n ;

    nb = 0 ;

    while(i!=0){

    i = i/2 ;

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    31/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 31 31/03/2013

    nb = nb + 1;

    }

    printf("Pour coder %d en binaire il faut %d bits\n",n,nb) ;

    }

    3.6 Exercices

    Exercice 15 :1. crivez un algorithme qui affiche 100 fois la phrase : "je ne dois pas arriver en retard en

    classe".2. crivez un algorithme qui affiche les entiers de 1 100.3. crivez un algorithme qui affiche les entiers pairs de 1 100.

    Exercice 16 :1. crivez un algorithme qui calcule la somme des n premiers nombres entiers positifs.

    Lalgorithme demandera lutilisateur dentrer la valeur de n.

    2. crivez un algorithme qui calcule la somme des n premiers nombres entiers positifspaires. Lalgorithme demandera lutilisateur dentrer la valeur de n.

    Exercice 17:1. Excuter le programme suivant :Variablei, j : Entier

    debut

    Pouri#1 jusqu5

    Ecrire(" i= ", i)

    Pourj#1 jusqu 3

    Ecrire("le produit de",i," et ",j," est:",i*j)

    FinPourFinPour

    Fin

    2. Excuter le programme suivant :Variablei, j : Entier

    debut

    Pouri#1 jusqu5

    Ecrire(" i= ", i)

    FinPour

    Pourj#1 jusqu3

    Ecrire("le produit de",i," et ",j," est:",i*j)

    FinPourFin

    Exercice 18 :1. crivez un algorithme qui calcule la somme Ssuivante :

    S = 1!+ 2!+ 3!+ + (n-1)!+ n!.

    Lalgorithme demandera lutilisateur dentrer la valeur de n.

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    32/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 32 31/03/2013

    2. crivez un algorithme qui calcule le factoriel de n :n ! = 1"2"3" "(n-1)"n.

    Lalgorithme demandera lutilisateur dentrer la valeur de n.

    Exercice 19 :

    Soit lalgorithme suivant :variables a,b,r : entiersdbut

    crire("donner les valeurs de a et b : ")

    lire(a,b)

    TantQue b>0 faire

    r #a%b /* a%b :reste de la division de a par b */

    a #b

    b #r

    FinTanQue

    crire(a)

    Fin

    1. Excuter lalgorithme (afficher dans un tableau les valeurs de a, b et r) pour :a. a = 50 et b = 45b. a = 21 et b = 13c. a = 96 et b = 81

    2. Que fait lalgorithme prcdant.

    Exercice 20:1. Un nombre entier p (diffrent de 1) est dit premier si ses seuls diviseurs positifs sont 1 et

    p. Ecrivez un algorithme qui effectue la lecture dun entier pet dtermine si cet entier estpremier ou non.

    2. Deux nombres entiers n et m sont qualifis damis, si la somme des diviseurs de n estgale m et la somme des diviseurs de m est gale n (on ne compte pas comme diviseurle nombre lui mme et 1).Exemple : les nombres 48 et 75 sont deux nombres amispuisque :

    Les diviseurs de 48 sont : 2, 3, 4, 6, 8, 12, 16, 24 et2 + 3 + 4 + 6 + 8 + 12 + 16 + 24 = 75

    Les diviseurs de 75 sont : 3, 5, 15, 25 et3 + 5 + 15 + 25 = 48.

    Ecrire un algorithme qui permet de dterminer si deux entiers n et m sont amis ou non.

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    33/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 33 31/03/2013

    4. Les structures de donnes statiques

    4.1 Tableaux une dimension

    4.1.1 Introduction

    Imaginons que dans un programme, nous ayons besoin simultanment de 25 valeurs (parexemple, des notes pour calculer une moyenne). La solution consiste dclarer 25 variablesrelles, appeles par exemple n1,n2,n3,,n25et la variable moyennerelle.

    moyenne = (n1+n2+n3++n25) / 25

    En programmation (exemple langage C) : lordinateur va rserver 25*4=100octets pour lesvaleurs relles des 25 variables et 25*4=100octets pour les adresses de ces 25 variables.La programmation nous permet de rassembler toutes ces variables en une seule : " la note numro1 ", " la note numro 2 ", , " la note numro 25 ".Un ensemble de valeurs portant ainsi le mme nom de variable et repres par un nombre,sappelle un tableau, et le nombre qui sert reprer chaque valeur sappelle un indice.Un tableau de taille nest une structure trs simple constitue de nemplacements conscutifs enmmoire. Il est donc possible d'accder un lment d'un tableau en temps constant pourvu quel'on connaisse sa position (ou indice). Un tableau est donc une structure trs simple et trsefficace. Il n'est cependant pas possible de modifier la taille d'un tableau, ce qui est gnant pourun certain nombre d'algorithmes. On dit cette structure est statique. Le nombre d'lments qu'ellecontient ne peut pas varier.Dans notre exemple, nous crerons donc un tableau appel Note[]. Et chaque note individuellesera dsigne par : Note[i](llment qui se trouve la position i).Pour dclarer un tableau il faut prciser le nombre et le type de valeurs quil contiendra.

    Tableau Note[25] : rels

    Cette dclaration rserve lemplacement de 25 lments de type rels. Chaque lment estrepr par son indice (position de llment dans le tableau). Dans la plus part des langages deprogrammation (en particulier en langage C), la premire position porte le numro 0. Dans notreexemple, les indices vont de 0 24. Le premier lment du tableau sera dsign par Note[0],le deuxime par Note[1], le dernier par Note[24]. Lutilisation de Note[25]dclancheraune erreur.

    On peut crer des tableaux contenant des variables de tous types : tableaux de numriques,tableaux de caractres, tableaux de boolens, tableaux de tout ce qui existe dans un langagedonn comme type de variables. Par contre, on ne peut pas faire un mixage de types diffrents devaleurs au sein dun mme tableau.

    Lnorme avantage des tableaux, cest quon va pouvoir les traiter en faisant des boucles. Parexemple, pour effectuer notre calcul de moyenne, cela donnera par exemple :

    4.1.2 Exemple

    Voici un programme qui comporte la dclaration dun tableau de 25 rels (les notes dune classe),on commence par effectuer la saisie des notes, et en suite on calcul la moyenne des 25 notes et onaffiche la moyenne :

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    34/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 34 31/03/2013

    variables tableauNote[25],i,somme :entier

    moyenne : rel

    dbut

    /* saisir les notes*/pouri allant de0 24 faire

    ecrire("entrer une note :")

    lire(Note[i])finpour

    /* effectuer la moyenne des notes*/somme #0

    pour i allant de0 24 faire

    somme #somme + Note[i]

    finPour

    moyenne = somme / 25

    /* affichage de la moyenne*/ecrire("la moyenne des notes est :",moyenne)

    fin

    Excution :entrer une note : 12

    entrer une note : 10.5

    entrer une note : 14

    entrer une note : 08

    la moyenne des notes est :11.75

    Une amlioration :ConstanteMax 200

    variables tableauNote[Max],i,somme,n :entier

    moyenne: rel

    dbut crire("entrer le nombre de notes :")

    lire(n)

    /* saisir les notes*/ecrire("entrer les ",n," notes :")

    pouri allant de0 n-1 faire

    lire(Note[i]

    finpour

    /* effectuer la moyenne des notes*/somme #0

    pour i allant de0 n-1 faire

    somme #somme + Note[i]

    finPourmoyenne = somme / 25

    /* affichage de la moyenne*/ecrire("la moyenne des ",n," notes est :",moyenne)

    fin

    Remarque :

    - A la compilation la constante Maxsera remplace par le nombre 200.- Ici le nombre de note nest pas fix 25, mais il est seulement infrieur 200.

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    35/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 35 31/03/2013

    - Mme si on donne nla valeur 10, lordinateur rserver quand mme la place pour200variables de types rels.

    - La saisie des notes est aussi amliore, puisque on rentre sur la mme ligne toutes lesnotes. Attention : si n=10, il faut rentrer 10valeurs relles sparer par un espace, si vousrentrez moins de dix valeurs, lordinateur restera bloquer, et attend que vous rentrer les

    dix valeurs attendues. Si au contraire vous rentrez 11 valeurs au lieu de 10, lordinateuraffectera les10 premires valeurs au tableau Noteet gardera la 11-ime valeur pour uneprochaine lecture, ce qui provoquera peut tre une erreur !!

    4.1.3 Les caractristiques de lindice dun tableau

    Lindice qui sert parcourir les lments dun tableau peut tre exprim directement comme unnombre ou une variable.

    La valeur dun indice doit toujours :- tre gale au moins 0 (dans le langage Pascal, le premier lment dun tableau porte

    lindice 1). Mais, nous avons choisi ici de commencer la numrotation des indices zro,comme cest le cas en langage C. Donc attention, Tab[2]est le troisime lment dutableau Tab !

    - tre un nombre entier. Quel que soit le langage, llment Tab[3,1416]nexistejamais.

    - tre infrieure ou gale au nombre dlments du tableau moins 1. Si le tableau Tab a tdclar comme ayant 10 lments, la prsence dans une ligne, sous une forme ou sous uneautre, de Tab[10] dclenchera automatiquement une erreur.

    Remarques :

    1. La dclaration :tableau Tab[10] : entier

    crera un tableau Tab de 10 lments, le plus petit indice tant 0 et le plus grand indiceest 9.

    2. Ne pas confondre lindicedun lment dun tableau avec le contenude cet lment. Lapremire maison de la rue na pas forcment un habitant, et la dixime maison na pasdix habitants. En notation algorithmique, il ny a aucun rapport entre iet Tab[i].

    Exercice 21 :1. Ecrivez un algorithme qui lit la taille ndun tableau T, il saisi les nlments du

    tableau T, il effectue la somme des nlments du tableau et il affiche cette somme.

    2. Ecrivez un algorithme qui lit la taille nde deux tableaux T1 et T2, il effectue la lecture

    de ces deux tableaux, ensuite il effectue la somme des tableaux T1 et T2 dans untableau T et il affiche le tableau T.Exemple:pour n=8 T1=[4,5,8,-2,5,6,0,-5], T2=[1,-5,-7,0,-1, 3,-8,9],le tableau T obtenu est : T=[5,0,1,-2,4,9,-8,4],

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    36/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 36 31/03/2013

    Exercice 22 :1. Ecrivez un algorithme qui permet lutilisateur de saisir les notes d'une classe, ensuite il

    renvoie le nombre de ces notes suprieures la moyenne de la classe.

    2. Ecrivez un algorithme qui permet lutilisateur de saisir un tableau de taille n etdafficher le plus grand et le plus petit lment du tableau.

    Exercice 23 :Que produit lalgorithme suivant ?

    Variable Tableau F[10], i : entier

    dbut

    F[0]#1

    F[1]#1

    crire(F[0],F[1])

    pour i allant de 2 10 faire

    F[i]#F[i-1]+F[i-2]

    crire(F[i])

    finpour

    fin

    4.1.4 Les tableaux dynamiques

    Il arrive frquemment que lon ne connaisse pas lavance le nombre dlments que devracomporter un tableau. Bien sr, une solution consisterait dclarer un tableau gigantesque (10000 lments) pour tre sr que "a rentre". Mais dune part, on nen sera jamais parfaitement sr(si le nombre ndes lments du tableau dpasse 10 000, a provoquera une erreur), dautre part,en raison de limmensit de la place mmoire rserve (la plupart du temps non utilise), cest ungchis qui affectera la taille de notre algorithme, ainsi que sa rapidit.

    Pour rsoudre ce problme, on a la possibilit de dclarer le tableau sans prciser au dpart sonnombre dlments. Ce nest que dans un second temps, au cours du programme, que lon vafixer ce nombre via une instruction dallocation :Allocation(nom,nombre,type), Dansla quelle il faut prciser le nomdu tableau, le nombredlments et le typedes lments allouer. Notez quetant quon na pas prcis le nombre dlments dun tableau, dunemanire ou dune autre, ce tableau est inutilisable. Il ne faut pas oublier de librer le tableau la fin de son utilisation avec linstruction : libre(nom).

    Exemple :on veut faire saisir des notes pour un calcul de moyenne, mais on ne sait pas combienil y aura de notes saisir. Lalgorithme sera :

    variables tableau Note[], moyenne, somme : rels

    i, n : entiersdbut

    crire("entrer le nombre de notes saisir : ")

    lire(n)

    /* allouer n nombres de types rels*/allocation(Notes,n,rels)

    /* saisir les notes*/crire("entrer les ",n," notes :")

    pour i allant de 0 n-1 faire

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    37/59

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    38/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 38 31/03/2013

    T1 T2 T3 T4

    1 2 3 1 2 3 1 2 3 0 1 2 3 4

    4 5 6 4 5 6 4 5 6 0 5 6 7 8

    7 8 9 7 8 9 7 8 9 0 9 0 0 0

    0 0 0 0 0 0 0 0

    Remarque: Rappelons que ces reprsentations rectangulaires sont trs conventionnelles. Dans lammoire de lordinateur ces quatre tableaux sont plutt arrangs en lignes :T1 1 2 3 4 5 6 7 8 9

    T2 1 2 3 4 5 6 7 8 9

    T3 1 2 3 0 4 5 6 0 7 8 9 0 0 0 0 0

    T4 1 2 3 4 5 6 7 8 9 0 0 0 0 0 0 0

    4.2.3 Lecture et criture dune matrice

    Lecture dune matrice :

    variable Tableau matrice[10][10],i,j,n,k : entiersdbut

    crire("donner le nombre de ligne de la matrice :")

    lire(n)

    crire("donner le nombre de colonne de la matrice :")

    lire(k)

    pour i allant de 1 n faire

    crire("donner les lments de la ",i," ligne:")

    pour j allant de 1 k faire

    lire(matrice[i][j])

    finpour

    fipour

    fin

    Ecriture dune matrice :variables Tableau Mat[10][10],i,j,n,k : entier

    dbut

    pour i allant de 1 n faire

    pour j allant de 1 k faire

    crire(Mat[i][j]," ")

    finpour

    crire("\n") /* retour la ligne */

    finpour

    fin

    4.2.4 Exemples dutilisation dune matrice

    Somme de deux matrices :constante N 20

    variables Tableau A[N][N],B[N][N],C[N][N],i,j,n : entier

    dbut

    crire("donner la taille des matrices(

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    39/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 39 31/03/2013

    lire(n)

    /* lecture de la matrice A */

    pour i allant de 1 n faire

    crire("donner les lments de la ",i," ligne:")

    pour j allant de 1 n faire

    lire(A[i][j])

    finpourfipour

    /* lecture de la matrice B */

    pour i allant de 1 n faire

    crire("donner les lments de la ",i," ligne:")

    pour j allant de 1 n faire

    lire(B[i][j])

    finpour

    fipour

    /* la somme de C = A + B */

    pour i allant de 1 n faire

    pour j allant de 1 n faire

    C[i][j]#A[i][j]+B[i][j]finpour

    fipour

    /* affichage de la matrice de C */

    pour i allant de 1 n faire

    pour j allant de 1 n faire

    crire(C[i][j]," ")

    finpour

    crire("\n") /* retour la ligne */

    finpour

    fin

    Produit de deux matrices :constante N 20variables Tableau A[N][N],B[N][N],C[N][N],i,j,k,n,S : entier

    dbut

    crire("donner la taille des matrices(

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    40/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 40 31/03/2013

    pour i allant de 1 n faire

    pour j allant de 1 n faire

    S #0

    pour k allant de 1 n faire

    S #S + A[i][k]*B[k][j]

    finpour

    C[i][j] #Sfinpour

    fipour

    /* affichage de la matrice de C */

    pour i allant de 1 n faire

    pour j allant de 1 n faire

    crire(C[i][j]," ")

    finpour

    crire("\n") /* retour la ligne */

    finpour

    fin

    Exercice 25 :1. Ecrire un algorithme qui effectue la lecture dune matrice carre Aainsi que sa taille net

    affiche la trace de A(pour une matrice A(ai,j), Trace(A)="ai,ila somme deslments sur la diagonale).

    2. Ecrire un algorithme qui effectue la lecture dune matrice carre A ainsi que sa taille netaffiche la matrice transpos tAde A(Pour une matrice A(ai,j), tA(aj,i) ).

    Exercice 26 :1. crivez un algorithme qui effectue la lecture de :

    - nun entier.- vect[]un tableau de nnombre rels,- mat[][]une matrice carre de n"nnombre rels,il calcule et affiche le produit de la matrice matpar le vecteur vect.

    2. crivez un algorithme qui effectue la lecture de deux matrices alloues dynamiquementet affiche le produit de ces deux matrices.

    4.3 Applications

    4.3.1Les algorithmes de recherche dans un tableau

    Problme: recherche dun lment dans un tableau.

    Recherche squentielleAnalyse:

    Parcours squentiel du tableauArrt lorsque la valeur est trouve

    Retour lindice correspondantLa valeur nest pas trouve

    Retour dune valeur spciale

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    41/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 41 31/03/2013

    Conception:Un programme qui demande la taille du tableau T, les lments du tableau T, la valeur de x(lavaleur cherche), le programme donne la premire position de x dans le tableau T, si x est dans letableau T et donne la valeur -1 si x nest pas dans le tableau T.

    variables n,i : entier

    tableau T : rel

    x : rel

    dbut

    crire("donner la taille de T :")

    lire(n)

    crire("donner les ",n," lments de T :")

    pour i allant de 0 jusqu n-1 faire

    lire(T[i])

    finpour

    crire("donner la valeur de x :")

    lire(x)

    i #0Tant que ( i < n et T[i] != x) faire

    i #i + 1

    fintantque

    si (i

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    42/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 42 31/03/2013

    finsi

    crire(" llment x nest pas dans T ")

    Conception:variables n, i, d, f, mil : entier

    tableau T : rel

    x : rel

    dbutcrire("donner la taille de T :")

    lire(n)

    crire("donner les ",n," lments de T :")

    pour i allant de 0 jusqu n-1 faire

    lire(T[i])

    finpour

    crire("donner la valeur de x :")

    lire(x)

    dbut

    d #0f #n 1

    Tantque (d

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    43/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 43 31/03/2013

    Exercice 32: Soit le tableau T[0..10] (ordonn et sans rptition) suivant :

    -2 3 5 7 10 17 19 23 50 62 70

    1. Chercher llment 3 dans le tableau T, par dichotomie.2. Chercher llment 19 dans le tableau T, par dichotomie.3. Chercher llment 56 dans le tableau T, par dichotomie.

    5. Exercices et Problmes dexamens

    5.1 Examen dinformatique (I2)session de Juin 2004

    Enoncs des exercices :

    Exercice 1 :

    Ecrivez un algorithme qui demande lutilisateur dentrer la temprature de leau, et afficheensuite ltat de leau selon la temprature (on rappelle que ltat de leau est glace pour unetemprature infrieure ou gale 0, est vapeur pour une temprature suprieure ou gale 100et liquide pour une temprature comprise strictement entre 0 et 100).

    Exercice 2 :1. Ecrivez un algorithme qui lit un entier n et compte le nombre de 1 dans la reprsentation

    binaire de cet entier.2. crivez un algorithme qui lit un tableau dentiers de n lments et donne la plus grande et

    la plus petite valeur de ce tableau.

    Exercice 3:Soit la fonction mystere crite en Maple suivante :mystere := proc(n)

    local liste,x,i ;

    x := n ;

    liste := NULL ;

    i :=2 ;

    while (i

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    44/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 44 31/03/2013

    3. Que se passera-t-il si on remplace linstruction i:=2; par i:=1;?

    N.B : la fonction Maple irem(x,y)retourne le reste de la division de xpar y etx/ydsigne la division entire dex pary.

    Exercice 4 :Deux nombres entiers net msont qualifis damis, si la somme des diviseurs de nest gale metla somme des diviseurs de mest gale n(on ne compte pas comme diviseur le nombre lui mmeet 1).Exemple : les nombres 48 et 75 sont deux nombres amispuisque :! Les diviseurs de 48 sont : 2, 3, 4, 6, 8, 12, 16, 24 et

    2 + 3 + 4 + 6 + 8 + 12 + 16 + 24 = 75

    ! Les diviseurs de 75 sont : 3, 5, 15, 25 et 3 + 5 + 15 + 25 = 48.Ecrire un algorithme qui permet de dterminer si deux entiers net msont amis ou non.

    5.2 Correction de lexamen dinformatique (I2 )session Juin 2004

    Exercice 1 : sur 4pointsVariableTemp : Entier

    Dbut

    Ecrire("Entrez la temprature de leau :" )

    Lire(Temp)

    SiTemp =< 0 Alors Ecrire("Cest de la glace" )

    Sinon SiTemp < 100Alors Ecrire("Cest du liquide")

    Sinon Ecrire("Cest de la vapeur")

    finsi

    finsi

    Fin

    2me

    solution (mauvaise):VariableTemp : Entier

    Dbut

    Ecrire("Entrez la temprature de leau : ")

    Lire(Temp)

    SiTemp =< 0Alors Ecrire("Cest de la glace") finsi

    SiTemp > 0 EtTemp < 100Alors

    Ecrire("Cest du liquide") finsi

    SiTemp > 100Alors Ecrire("Cest de la vapeur")finsi

    Fin

    Exercice 2 : sur 7points

    1. Variablesi,n,poids : entiersDebut

    Ecrire(" Entrer la valeur de n :")

    lire(n)

    i #n

    poids # 0

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    45/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 45 31/03/2013

    TantQue(i0) faire

    si(i mod 2 = 1) alors

    poids #poids + 1

    finsi

    i #i/2

    FinTantQue

    Ecrire(poids)Fin

    2. variablesTableauTab[100],i, n, min, max: Entierdebut

    ecrire("donner la taille du tableau :")

    lire(n)

    ecrire("donner les lments du tableaux :")

    Pour i allant de1 n faire

    lire(Tab(i))

    FinPour

    min #Tab[1]

    max #Tab[1]

    Pour i allant de2 n fairesi(min > Tab[i]) alors

    min #Tab[i] finsi

    si(max < Tab[i]) alors

    max #Tab[i] finsi

    FinPour

    Ecrire("le minimum est ",min)

    Ecrire("le maximum est ",max)

    fin

    Exercice 3 : sur 6.5points1.mystere(8) :

    x 8 4 2 1

    i 2 2 2 2

    liste 2 2,2 2,2,2

    mystere(90) :

    x 90 45 45 15 5 5 5 1

    i 2 2 3 3 3 4 5 5

    liste 2 2 2,3 2,3,3 2,3,3 2,3,3 2,3,3,5

    mystere(210) :

    x 210 105 105 35 35 35 7 7 7 1

    i 2 2 3 3 4 5 5 6 7 7

    liste 2 2 2,3 2,3 2,3 2,3,5 2,3,5 2,3,5 2,3,5,7

    2. Ce programme donne la liste des diviseurs (premiers) dun entier n.

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    46/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 46 31/03/2013

    3. En remplaant linstruction i:=2par linstruction i:=1 le teste irem(x,i)=0esttoujours vrai, xprend toujours la mme valeur et la liste contiendra une infinit de 1(on obtientune boucle infini) !

    Exercice 4 : sur 3points

    1

    re

    Solution:variablesn, m, d, p, S1, S2: Entierdebut

    ecrire(" entrer lentier n :")

    lire(n)

    ecrire(" entrer lentier m :")

    lire(m)

    S1 #0

    S2 #0

    d #2

    TantQued*d

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    47/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 47 31/03/2013

    Siirem(m,i)=0 alors

    S2 #S2 + i

    finsi

    FinPour

    Si(S1=S2) alors

    Ecrire("n et m sont amis")

    SinonEcrire("n et m ne sont pas amis")

    finsi

    fin

    5.3 Examen dinformatique (I2 ) session de Juillet 2004

    Exercice 1: (4 points)Les tudiants ayant pass l'examen du module I2 en session de Juin ont t classs selon leursnotes en trois catgories :

    - pour une note infrieure strictement 5, l'tudiant est limin,- pour une note suprieure ou gale 5 et infrieur strictement 10, l'tudiant passe la

    session de rattrapage,

    - pour une note suprieure ou gale 10, l'tudiant valide le module

    Ecrivez un algorithme qui demande lutilisateur dentrer la note du module, puis affiche lasituation de l'tudiant selon sa note (on suppose que l'utilisateur entre une note valide entre 0 et 20).

    Exercice 2: (4 points)Un nombre parfaitest un entier positif suprieur 1, gal la somme de ses diviseurs ; on necompte pas comme diviseur le nombre lui-mme.

    Exemple : 6 est un nombre parfait puisque : 6 = 3 + 2 + 1.1. Donner un nombre parfait diffrent de 6.2. Ecrire la conception de lalgorithme qui nous dit si un entier n est parfait ou non.

    Exercice 3: (5 points)Soit la fonction mystere crite en Maple suivante :

    mystere := proc(a,b)

    local r ;

    while ( b > 0 ) do

    r := irem(a,b);

    a := b;

    b := r;od;

    a;

    end;

    1. Que valent mystere(35,12), mystere(96,81)etmystere(34,21)(donnerles valeurs que prennent les variables a, b et r dans chacun des cas) ?

    2. Que fait ce programme ?

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    48/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 48 31/03/2013

    N.B : la fonction Maple irem(x,y)retourne le reste de la division de xpar y.

    Exercice 4 : (7 points)1. crivez un algorithme qui lit la taille dun tableau n, le tableau T, une valeur x, et il

    indique ensuite si llment x appartient ou non au tableau T.2. crivez un algorithme qui permet de dterminer si les lments d'un tableau d'entiers sont

    tous conscutifs ou non. (Par exemple, si le tableau est : 7; 8; 9; 10, ses lments sonttous conscutifs. Si le tableau est : 7; 9 ; 10; 11, ses lments ne sont pas tousconscutifs).

    5.4 Correctionde lexamen dinformatique (I2 ) sessionjuillet 2004

    Exercice 1:1

    reversion :

    Variables note : rel

    Dbut

    Ecrire("Entrez la note du module :")

    Lire(note)

    Si (note < 5) alors Ecrire("l'tudiant est limin")

    Sinon Si note = 5 etnote < 10) alors

    Ecrire(" l'tudiant passe en rattrapage")

    Finsi

    Si (note > 10) alors Ecrire("l'tudiant a valid le module")

    Finsi

    Fin

    Exercice 2:1. Le nombre 28est parfait puisque 28 = 14+4+7+2+1.2. solution:Variables n, d, S : entier

    Dbut

    Ecrire("Entrez la valeur de n : ")

    Lire(n)

    S #1

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    49/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 49 31/03/2013

    d #2

    TantQue (d*d

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    50/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 50 31/03/2013

    2. Dans cette question, on suppose que les variables net Tsont connues.1reversion:

    Variablei: entier

    Dbut

    i #1

    TantQue(i

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    51/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 51 31/03/2013

    3. Ecrivez une procdure qui prend pour arguments un entier n (la taille du tableau), letableau de rels T et affiche le plus grand lment du tableau T ainsi que sa position dansle tableau. (On suppose que le tableau T est form dlments tous distincts)

    Exercice 3:Soit la fonction mystere crite en Maple suivante :

    > mystere :=proc(L,t)

    localu, i;

    u :=0;

    fori from1 tonops(L) do

    u := u*t + L[i];

    od;

    u;

    end;

    1. Que valent mystere([1,-1,0,2],3), mystere([1,0,1,1,1],2)etmystere([a,b,c],x)(donner la valeur de u chaque tapes de la boucle) ?

    2. Que fait ce programme ?

    3. Que calcule la procdure mystere(L,t)si les lments de la liste Lsont tousstrictement infrieur t?

    Exercice 4 :Soit T un tableau qui contient n valeurs relles tris dans lordre croissant. Ecrire une procdurequi prend comme paramtre le Tableau T, lentier n (la taille de T) et un nombre rel x, et elleeffectue linsertion de x dans le tableau T, de telle manire que le tableau T reste tri.

    Exemple : Soit le tableau T de 8 nombres tris dans lequel on dsire insrer le nombre 40 :

    4 7 8 12 23 56 89 112

    Le rsultat est un tableau T de 9 nombres toujours tris :

    4 7 8 12 23 40 56 89 112

    5.6 Examen dinformatique (I2 ) session de Juin 2006Exercice 1 : 3 pointsDans le championnat de foot marocain (qui comporte 16 quipes) les deux premires quipessont qualifies pour la ligue des champions africaine, les deux suivants (le troisime et lequatrime) sont qualifis pour la ligue des champions arabes, les trois dernires quipesdescendent en deuxime division, et les autres restent en premire division.Ecrire un algorithme qui demande le classement dune quipe du championnat de foot marocain.Ensuite, il nous informe de sa situation pour lanne prochaine.

    Correction :Nom : Foot

    Role : donne la situation dune quipe en fonction de son classement

    Entre : n un entier compris entre 1 et 16

    Sortie : un message

    Variables : n entier

    Debut

    crire("donner votre classement (entre 1 et 16) :")

    lire(n)

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    52/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 52 31/03/2013

    si n

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    53/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 53 31/03/2013

    S#0

    i#1

    tanque(i mystere := proc(n)

    local s, i;

    s := 0, 1;i:=3;

    while(i

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    54/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 54 31/03/2013

    2. Que fait ce programme ?3. On remarque que pour calculer s[i] on besoin que de s[i-1] et s[i-2], comment amliorer cette

    fonction (crire une fonction qui nutilise pas de liste s) ?Correction :

    1. sur 1 point: mystere(10) : 0, 1, 1, 2, 3, 5, 8, 13, 21, 342. sur 0.5 point: cette procdure calcule les termes de la suite de Fibonacci.3. fonction Fibo(n :entier)

    variables i, n, u, v, w : entiers

    dbut

    si (n=1) alors crire(0," ")

    si (n=2) alors crire(1," ")

    i #3

    TantQue(i

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    55/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 55 31/03/2013

    Exercice 1 :1. crivez un algorithme qui effectue la lecture de trois nombres et affiche le plus grands de

    ces trois nombres.2. crivez un algorithme qui effectue la lecture de n nombres, ensuite affiche le plus grands

    de ces n nombres (n saisie au clavier).

    Correction :1.1resolution(chercher une solution avec le minimum de tests) :

    Nom : maximum

    Rle : donne le maximum de trois nombres

    Entre : a, b, c : nombres

    Sortie : message

    Variables a, b, c : nombres

    Dbut

    ecrire("donner trois nombres :")

    lire(a,b,c)

    si(a>=b) alors

    si(a>=c) alors

    ecrire("le maximum est ",a)

    sinon

    ecrire("le maximum est ",c)

    finsi

    sinon si (b>=c)alors

    ecrire("le maximum est ",b)

    sinon

    ecrire("le maximum est ",c)

    finsi

    fin

    2mesolution:Nom : maximum

    Rle : donne le maximum de trois nombres

    Entre : a, b, c : nombres

    Sortie : max : nombre

    Variables a, b, c, max : nombres

    Dbut

    ecrire("donner trois nombres :")

    lire(a,b,c)

    max a

    si(b>max) alorsmax #b finsi

    si(c>max) alorsmax #c finsi

    ecrire("le maximum est ",max)

    fin

    2.Nom : maximumRle : donne le maximum de trois nombres

    Entre : a: nombre

    Sortie : max : nombre

    Variables a, max : nombres

    Dbut

    ecrire("donner lentier n :")

    lire(n)

    ecrire("donner le premier nombre :")

    lire(max)

    pour i allant de 2 n faire

    ecrire("donner le ",i," nombre :")

    lire(a)

    si(a>max) alorsmax #a finsi

    finpour

    ecrire("le maximum est ",max)

    fin

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    56/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 56 31/03/2013

    Exercice 2 : Soit lalgorithme suivant :variables a,b,r : entiers

    dbut

    crire("donner les valeurs de a et b : ")

    lire(a,b)

    TantQue (b>0) faire

    r #a%b /* a%b :reste de la division de a par b */

    a #bb #r

    FinTanQue

    crire(a)

    Fin

    1. Excuter le programme prcdent (afficher dans un tableau les valeurs de a, b et r) pour :a. a = 35 et b = 12b. a = 96 et b = 81c. a = 34 et b = 21

    2. Implmenter ce programme en langage C ;3. Que fait ce programme.

    Correction :1. mystere(35,12) :a 35 12 11 1

    b 12 11 1 0

    r 11 1 0

    La valeur affiche est1mystere(96,81) :

    a 96 81 15 6 3

    b 81 15 6 3 0

    r 15 6 3 0

    La valeur affiche est3

    mystere(34,21) :a 34 21 13 8 5 3 2 1

    b 21 13 8 5 3 2 1 0

    r 13 8 5 3 2 1 0

    La valeur affiche est1

    2. #include#include

    void main(){

    int a,b,r ;

    printf("donner a et b :") ;

    scanf("%d %d",&a,&b) ;

    while(b !=0){

    r = a%b /* a%b :reste de la division de a par b */a = b

    b = r

    }

    printf("le pgcd est %d\n",a) ;

    getch() ;

    }

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    57/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 57 31/03/2013

    Exercice 3 :Deux nombres entiers n et m sont qualifis damis, si la somme des diviseurs de n est gale m et la somme des diviseurs de m est gale n (on ne compte pas comme diviseur le nombrelui mme et 1).

    Exemple : les nombres 48 et 75 sont deux nombres amispuisque :

    Les diviseurs de 48 sont : 2, 3, 4, 6, 8, 12, 16, 24 et2 + 3 + 4 + 6 + 8 + 12 + 16 + 24 = 75Les diviseurs de 75 sont : 3, 5, 15, 25 et

    3 + 5 + 15 + 25 = 48.Ecrire un programme qui permet de dterminer si deux entiers n et m sont amis ou non.

    Correction :variablesn, m, d, p, S1, S2: Entier

    debut

    ecrire(" entrer les entiers n et m :")

    lire(n,m)

    S1 #0

    S2 #0d #2

    TantQue(d*d

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    58/59

    Algorithmique SMIA, module M5E2

    M. El Marraki 58 31/03/2013

    s #1

    d #2

    tant que (d*d < n) faire

    si (n%d=0) alors s #s + d + n/d finsi

    d #d + 1

    finTantque

    si (s=n) alors ecrire("n est parfait")sinon ecrire("n nest pas parfait")

    finsi

    4.6 Examen dInformatique (juin 2011)Exercice 1 :(6.5 points)I. QCM (2.5 points): Cocher labonne rponse :

    1. Le nombre dcimal 432110est cod en base 16 par :

    114116 A10E116 B

    1E0116 C

    2. le nombre de bits ncessaire pour coder en binaire le nombre dcimal 3000 est :

    13bits A12bits B11bits C

    3. Lentendu du codage sur 6 bits en binaire sign est compris entre :

    0 et 63 A

    -32 et 31 B-31 et 31 C

    4. Quelle est la valeur dcimale du nombre 10010110c1crits en complment 1:

    -105 A-104 B-103 C

    5. Le plus grand nombre entier quon peut coder (en complment 2) sur 10 bits est :

    1023 A

    512 B511 C

    II. Codage (4 points)1. Coder les nombres entiers relatifs du tableau suivant sur 1 octet:

    Nombre Binaire sign Complment 2

    62(10)-76(10)

  • 7/25/2019 Poly_Algo_2013_ch1-4_5.pdf

    59/59

    Algorithmique SMIA, module M5E2

    2. valuer le nombre rel en format IEEE 754 simple prcision : 1 1000010000011100000000000000000

    Exercice 2 : (4 points) Soit le fragment de programme suivant :variables u,v : entiers

    dbut

    crire("donner les valeurs de u et v : ")

    lire(u,v)

    TantQue(u != v) faire

    Si(u > v) alorsu #u v Sinonv #v u finsi

    FinTanQue

    crire(u)

    Fin

    1. Donner les valeurs de uet vaprs chaque itration dans le cas suivant :u 24

    v 14

    2. Donner les valeurs de uet vaprs chaque itration dans le cas suivant :u 96v 81

    3. Que fait ce programme ?

    Exercice 3 :(4.5 points)Soit T un tableau qui contient n valeurs relles. Ecrire un programme qui lit lentier n (la taille deT), le tableau T, ensuite le programme affiche si les lments du tableau T sont tous conscutifsou non.

    Exemples :

    1. Soit le tableau T1 de 8 lments :9 10 11 12 13 14 15 16

    Le programme affiche : les lments du tableau T1 sont conscutifs.

    2. Soit le tableau T2 de 6 nombres :

    5 10 40 66 99 112

    Le programme affiche : les lments du tableau T2ne sont pas conscutifs.

    Exercice 4 : (5 points)

    Un nombre parfaitest un entier positif suprieur 1, gal la somme de ses diviseurs ; on necompte pas comme diviseur le nombre lui-mme.Exemple : 6 est un nombre parfait puisque : 6 = 3 + 2 + 1.4 Donner un nombre parfait diffrent de 6