Poly_Algo_2013_ch1-4_5.pdf
-
Upload
maissa-zini -
Category
Documents
-
view
217 -
download
0
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