Vous êtes sur la page 1sur 35

Algorithmique, module I2

SMP/SMC

Universit Mohammed V-Agdal Facult des Sciences Rabat Dpartement Mathmatiques et Informatique Le module I2 : SMP-SMC
Facult des Sciences

Algorithmique

Par Pr. Mohamed El Marraki


2005/2006

M. El Marraki

15/02/2007

Algorithmique, module I2

SMP/SMC

Sommaire
1. Gnralits sur lAlgorithmique
Introduction Lalgorithmique Principe Les caractristiques dun Algorithme Analyse descendante Lalgorithmique et la programmation Le but de la programmation Langages de programmation Pseudo langage

2. Les variables
Dclaration des variables Noms de variables Types de variables

3. Les Primitives
Affectation Dfinition et notation Utilisations Lire et crire
Donnes et rsultats Les objets manipuls par lalgorithme

Les tests si .. alors .., si .. alors .. sinon .. Conditions composes Organigramme Tests imbriqus Les Boucles La boucle TantQue La boucle Rpter jusqu La boucle Pour jusqu Les boucles imbriques Une mthodologie pour l'criture d'une boucle

4. Les structures de donnes statiques


Tableaux une dimension Introduction Notation et utilisation algorithmique M. El Marraki 2 15/02/2007

Algorithmique, module I2 Types pour les tableaux Quelques algorithmes utilisant les tableaux une dimension Tableaux deux dimensions Notation et dfinitions Algorithmes sur les matrices

SMP/SMC

5. Les fonctions et les procdures


Introduction Les fonctions Introduction Les fonctions prdfinies Dclaration dune fonction Passage darguments Utilisation des fonctions Les fonctions rcursives Les Procdures

M. El Marraki

15/02/2007

Algorithmique, module I2

SMP/SMC

1. Gnralits sur lAlgorithmique


1.1 Introduction
Lalgorithmique est 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 srie d'oprations effectuer. La mise en uvre de l'algorithme consiste en l'criture de ces oprations dans un langage de programmation et constitue alors la brique de base d'un programme informatique. 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 il voulait aller. 2 Si lalgorithme est faux, le rsultat est, disons, alatoire, et dcidment, ce magntoscope ne marche pas! Pour fonctionner, un algorithme doit donc contenir uniquement des instructions comprhensibles par celui qui devra lexcuter (lordinateur). LADN, qui est en quelque sorte le programme gntique, lalgorithme la base de construction des tres vivants, est une chane construite partir de quatre lments invariables. Ce nest que le nombre de ces lments, et lordre dans lequel ils sont arrangs, qui vont dterminer si on obtient une puce ou un lphant. Les ordinateurs eux-mmes ne sont fondamentalement capables dexcuter que quatre oprations logiques : 1 laffectation de variables 2 la lecture / criture 3 les tests 4 les boucles Un algorithme informatique se ramne donc toujours au bout du compte la combinaison de ces quatre petites briques de base. Il peut y en avoir quelques unes, quelques dizaines, et jusqu plusieurs centaines de milliers dans certains programmes. La taille dun algorithme ne conditionne pas en soi sa complexit : de longs algorithmes peuvent tre 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 que lon nomme la programmation.

M. El Marraki

15/02/2007

Algorithmique, module I2

SMP/SMC

Lcriture dun programme consiste gnralement implanter une mthode de rsolution dj connue et souvent conue indpendamment dune machine pour fonctionner aussi bien sur toutes les machines ou presque. Ainsi, ce nest pas le programme mais la mthode quil faut tudier pour comprendre comment traiter le problme. Le terme algorithme est employ en informatique pour 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 la totalit, des domaines de cette science.

1.2 Lalgorithmique
Principe
Dfinition : Un algorithme est une squence bien dfinie doprations (calcul, manipulation de donnes, etc.) permettant daccomplir une tache en un nombre fini de pas. En principe un algorithme est indpendant de toute implantation. Cependant dans la pratique de la programmation il savre indispensable de tenir compte des capacits du langage de programmation utilis. La conception dun algorithme passe par plusieurs tapes : Analyse : dfinition du problme en terme de squences doprations de calcul de stockage 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 la peine de trouver limplantation la plus efficace dun algorithme, mois que ce dernier ne soit susceptible dtre utilis pour une tche trs rptitive. Dans les autres cas, une mise en uvre simple conviendra souvent : on pourra tre sr que le programme fonctionnera, peut-tre cinq ou dix fois moins vite que la version la plus optimise, ce qui se traduira ventuellement par quelques secondes supplmentaires lexcution. En revanche, un mauvais choix dalgorithme peut entraner une diffrence dun facteur cent, mille ou plus, ce qui se traduira en minutes, en heures 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 programme est la traduction dun algorithme dans un certain langage de programmation. Il faut savoir qu chaque instruction dun programme correspond une action du processeur.

M. El Marraki

15/02/2007

Algorithmique, module I2

SMP/SMC

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 il est plus pratique de trouver un langage intermdiaire, comprhensible par l'homme, qui sera ensuite transform en langage machine pour tre exploitable par le processeur. L'assembleur est le premier langage informatique qui ait t utilis. Celui-ci est encore trs proche du langage machine mais il permet dj d'tre plus comprhensible. Toutefois un tel langage est tellement proche du langage machine qu'il dpend troitement du type de processeur utilis (chaque type de processeur peut avoir son propre langage machine). Ainsi un programme dvelopp pour une machine 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 pouvoir l'utiliser sur une autre machine il faudra alors parfois rcrire entirement le programme! Il y a trois catgories de langage de programmations : les langages interprts et les langages intermdiaires et les langages compils.

Langage interprt
Un langage de programmation est par dfinition diffrent du langage machine. Il faut donc le traduire 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 (calcul mathmatique), Prolog (Intelligence artificielle), etc.

Langage compil :
Un programme crit dans un langage dit "compil" va tre traduit une fois pour toutes par un programme 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 que ce fichier est excutable). Un programme crit dans un langage compil a comme avantage de ne plus avoir besoin, une fois compil, de programme annexe pour s'excuter. De plus, la traduction tant faite une fois pour toute, il est plus rapide l'excution. Toutefois il est moins souple qu'un programme crit avec un langage interprt car chaque modification du fichier source il faudra recompiler le programme pour que les modifications prennent effet. D'autre part, un programme compil a pour avantage de garantir la scurit du code source. En effet, un langage interprt, tant directement intelligible (lisible), permet n'importe qui de connatre les secrets de fabrication d'un programme et donc de copier le code voire de le M. El Marraki 6 15/02/2007

Algorithmique, module I2

SMP/SMC

modifier. Il y a donc risque de non-respect des droits d'auteur. D'autre part, certaines applications scurises 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 une phase 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 applets Java, petits programmes insrs parfois dans les pages Web, sont des fichiers qui sont compils mais que l'on ne peut excuter qu' partir d'un navigateur Internet (ce sont des fichiers dont l'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-ci excute les instructions au fur et mesure qu'elle lit le fichier (donc de haut en bas) jusqu' ce qu'elle rencontre une instruction (appele parfois instruction de branchement) qui lui indique d'aller un endroit prcis du programme. Il s'agit donc d'une sorte de jeu de piste dans lequel la machine doit suivre le fil conducteur et excuter les instructions qu'elle rencontre jusqu' ce qu'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++,

M. El Marraki

15/02/2007

Algorithmique, module I2

SMP/SMC

1.3.3 La notion de fichier


Dans un programme les instructions et donnes rsident en mmoire centrale pour tre excutes, Les programmes et les donnes sont sauvegardes dans des fichiers qui portent des extensions spcifiques du langage : o Les donnes et les programmes sont stocks dans des fichiers o 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 systme dexploitation 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 ou des 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

M. El Marraki

15/02/2007

Algorithmique, module I2

SMP/SMC

Enonc dun problme

Analyse du problme

Programmation laide dun langage de programmation

Algorithme

Programme source

Compilation

Excution du programme

Programme binaire excutable

Rsultats

Le travail est ici surtout bas sur l'analyse du problme et 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 de suite, jusqu descendre au niveau des primitives. Les tapes successives donnent lieu des sousalgorithmes 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 du Discours de la mthode de Descartes.

M. El Marraki

15/02/2007

Algorithmique, module I2

SMP/SMC

Lordre des instructions est essentiel : la machine ne peut excuter quune action la fois et dans lordre 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 dclencher en 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

Ordinateur Programme

Excution du programme Transformation des donnes en rsultats

Rsultats

1.3.6 Pseudo langage


Un algorithme doit tre lisible et comprhensible par plusieurs personnes. Il doit donc suivre des rgles prcises, il est compos dune entte et 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 :

M. El Marraki

10

15/02/2007

Algorithmique, module I2 o du mot clef dbut o dune suite dinstructions indentes o du mot clef fin

SMP/SMC

Le plus important pour un algorithme sont les dclarations ainsi que les instructions qui constituent le corps de lalgorithme. Il existe des instructions qui ne servent qu la clart de lalgorithme (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 Rle Entre Sortie : : : : le nom de lalgorithme que fait cet algorithme les donnes ncessaires les rsultats produits par lalgorithme Facultatifs

Variables : la dclaration des variables Debut Instruction 1 Instruction 2 /* les commentaires explicatives des instructions */ Instruction k Fin

M. El Marraki

11

15/02/2007

Algorithmique, module I2

SMP/SMC

2. Variables
Dans un programme informatique, on va avoir en permanence besoin de stocker provisoirement des valeurs. Il peut sagir de donnes issues du disque dur, fournies par lutilisateur (frappes au clavier). 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 une variable.

2.1 Dclaration des variables


La premire chose faire avant de pouvoir utiliser une variable est de crer la bote et de lui coller une tiquette. Ceci se fait tout au dbut de lalgorithme, avant mme les instructions proprement 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 du nom de la variable et du type de la variable.

2.1.1 Noms de variables


Le nom de la variable (ltiquette de la bote) obit des rgles qui changent selon le langage utiliser. 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 emplacement mmoire) ; il faut prciser ce que lon voudra mettre dedans, car de cela dpendent la taille de la bote (lemplacement mmoire) et le type de codage utilis. - Types numriques classiques Commenons 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 = 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 2 =65 536 valeurs ; avec trois octets, 2 =16 777 216, etc.
16 24 8

M. El Marraki

12

15/02/2007

Algorithmique, module I2

SMP/SMC

Type Numrique Octet Entier simple Entier double

Plage

de 0 255 de -32768 32767 de -2147483648 2147483647

Rel simple

de -3.40x1038 -1.40x10-45 pour les ngatives de 1,40x10-45 3.40x1038 pour les positives de -1.79x10308 -4.94x10-324 les ngatives de 4.94x10-324 1.79x10308 les positives

Rel double

La syntaxe dune dclaration de variable numrique en pseudo-langage aura la forme : Variable g : Numrique Variables PrixHT, TauxTVA, PrixTTC : Numrique - Type alphanumrique On dispose donc galement du type alphanumrique (galement appel type caractre, type chane ou en anglais, le type string). Dans une variable de ce type, on stocke des caractres, quil sagisse 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 chane de 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, 423 peut 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 la forme : Variable nom : chane Variables x, y : caractre. - Type boolen Le dernier type de variables est le type boolen : on y stocke uniquement les valeurs logiques VRAI et FAUX. On peut reprsenter ces notions abstraites de VRAI et de FAUX par tout ce qu'on veut : de l'anglais (TRUE et FALSE) ou des nombres (0 et 1). Le type boolen est trs conomique en termes de place mmoire occupe, un seul bit suffit.

M. El Marraki

13

15/02/2007

Algorithmique, module I2 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.

SMP/SMC

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 (ranger une 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 capable de 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 une valeur constante une variable (A 4), mais on ne peut pas affecter quoi que ce soit une valeur constante - elle ne peut pas tre une lvalue (on ne peut pas crire 4 A). Exemple : X 3 Signifie mettre la valeur 3 dans la case identifie par X. A lexcution de cette instruction, la valeur 3 est range en X (nom de la variable). La valeur correspond au contenu : 3 La variable correspond au contenant : X On peut reprsenter la variable X par une boite ou case, et quand elle prend la valeur 3, la valeur 3 est dans la case X : X X 3 On remarque quune variable ne peut contenir un instant donn quune seule valeur. Utilisations : Voici quelques effets dclenches par lutilisation de laffectation ( ) : Instructions X 3 X 2 Y X X X Y 3 actions 3 2 X 2 effets X X Y 3 2 2 plus de 3 ! X 2

M. El Marraki

14

15/02/2007

Algorithmique, module I2 La dernire instruction (Y X) signifie : copier dans Y la valeur actuelle de X.

SMP/SMC

Un petit exercice instructif : Quelles sont les valeurs successives prises par les variables X et Y suit aux instructions suivantes : X 1 ; Y -4 ; X X+3 ; X Y-5 ; Y X+2 ; Y Y-6 ; Rponses : X Y 1 1 -4 4 -4 -9 -4 -9 -7 -9 -13

Remarque : noter aussi que laffectation est une expression comme une autre, cest--dire quelle retourne une 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 laffectation Y Z+2, cest--dire la valeur quon a donne Y. Remarquez lordre dvaluation de la droite vers la gauche. L'affectation des types primitifs est trs simple. Puisque les donnes de type primitif contiennent une valeur relle et non une rfrence un objet, en affectant une valeur une variable de type primitif on copie le contenu d'un endroit un autre. Par exemple, si on crit A B pour des types primitifs, alors le contenu de B est copi dans A. Si alors on modifie A, bien entendu B n'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) x et y ayant respectivement comme valeur a et b ; quelles sont les affectations qui donneront x la valeur b et y la valeur a? Analyse : la premire ide est dcrire : x y ; y x. Mais a ne marche pas, les deux variables se retrouvent avec la mme valeur b ! Il faut mettre la valeur de x de cot pour ne pas la perdre : on utilise une variable auxiliaire z et on crit les instructions suivantes : z x ; x y ; y z ; Le programme complet avec notre pseudo-langage est : Nom Rle Entre Sortie Variables Debut x y z x y Fin : change : changer deux valeurs : x et y : x et y x, y, z : quelconques 3 -6 x y z /* initialisation de x et y */ /* on stocke la valeur de x dans z */ /* on peut maintenant crire dans x */ /* on remet lancien contenu de x dans y */

M. El Marraki

15

15/02/2007

Algorithmique, module I2

SMP/SMC

Vrification : il sagit de vrifier que lalgorithme donne bien la solution voulu. Ecrivant aprs chaque instruction les valeurs des variables X, Y et 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 variable auxiliaire, 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 Rle Entre Sortie Variables Debut x y x y x Fin : change_entiers : changer deux valeurs entires : x et y : x et y x, y : nombres 3 /* initialisation de x et y */ -6 x + y x - y x - y

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 valeur o 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 incapable dexcuter laffectation, et dclenchera une erreur.

M. El Marraki

16

15/02/2007

Algorithmique, module I2 Oprateurs : Un oprateur est un signe qui relie deux valeurs, pour produire un rsultat. o Oprateurs numriques : Ce sont les quatre oprations arithmtiques :

SMP/SMC

+ addition soustraction * multiplication / division Mentionnons galement le ^ qui signifie puissance". 45 au carr scrira donc 45^2. La multiplication et la division sont prioritaires sur laddition et la soustraction. 12*3+5 et (12*3)+5 valent strictement la mme chose, savoir 41. En revanche, 12*(3+5) vaut 12*8 soit 96. o Oprateur alphanumrique : & Cet oprateur permet de concatner deux chanes de caractres. Exemple : Nom : concatner Rle : concatner deux chanes de caractres Entre : A et B Sortie : C Variables A, B, C : caractre Dbut A "Bonjour" B " Tous le monde" C A & B Fin 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 Dbut A 12^2 Fin Ce programme nous donne le carr de 12 soit 144. On remarque que : o si lon veut le carr dun autre nombre que 12, il faut rcrire le programme.

M. El Marraki

17

15/02/2007

Algorithmique, module I2

SMP/SMC

o Le rsultat est calcul par la machine elle le garde pour elle, et lutilisateur qui excute ce programme, ne saura jamais quel est le carr de 12. Cest pourquoi, il faut utiliser des instructions qui permettent lutilisateur de dialoguer avec la machine.

3.2.2 Donnes et rsultat


Pour pouvoir effectuer un calcul sur une variable, la machine doit connatre la valeur de cette variable. Si cette valeur na pas t dtermine par des initiations ou des calculs prcdents, il faut que lutilisateur lui fournisse, cest une donne. Il sagit alors dintroduire une valeur partir de lextrieur de la machine et pour cela lalgorithme doit contenir linstruction qui commande la machine de lire la donne. Si un algorithme contenant linstruction X A^2 la machine ne peut excuter cette instruction que si elle connat la valeur de A, en supposant que la valeur de A en ce moment nest pas 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, attendant larriver dune valeur par lintermdiaire du clavier. Ds que la touche Entre (Enter) a t frappe, lexcution reprend. Si on veut connatre le rsultat dun calcul ou le contenu dune variable X, lalgorithme doit contenir linstruction qui commande la machine de fournir ce rsultat. Cette instruction est crire(X) qui signifie : mettre sur lcran (organe de sortie de la machine) le contenu de la case X. Cette action ne modifie pas le contenu de X. Exemple : soit le morceau dalgorithme suivant : A tant une donne, X un rsultat lire (A) X A^2 crire(X) Schma des actions effectues par lutilisateur et la machine : Utilisateur Machine A lecture 12 calcul 12 criture X

Lutilisateur donne 12

144

Lutilisateur lit !

144

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

M. El Marraki

18

15/02/2007

Algorithmique, module I2

SMP/SMC

3.2.3 Les libells


Avant de lire une variable, il est trs fortement conseill dcrire des libells lcran, afin de prvenir 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 ? Variables val, 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) Fin Excution : donner un entier : 234 le double est : 468 2me amlioration : Nom : double Rle : demande un nombre et affiche sont double Entre : 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 M. El Marraki 19 15/02/2007

Algorithmique, module I2 Excution : donner un entier : 234 le double de : 234 est : 468

SMP/SMC

Exemple 2 :
Problme : Multiplier deux nombres entiers. En utilisant les primitives suivantes : lire(), crire(), affecter ( ), multiplier (*). Solution : Algorithme : Nom : multiplication Rle : demander deux nombres et afficher leur multiplication Entre : A et B Sortie : C variables A, B, C : entiers Dbut crire(" entrer la valeur de A : ") lire(A) crire(" entrer la valeur de B : ") lire(B) C A * B crire(" le produit de ",A," et ",B," est : ",C) Fin Excution : entrer la valeur de A : 12 entrer la valeur de B : -11 le produit de 12 est de 11 est : -132

3.2.5 Exercices : Exercice 1 :


Quelles seront les valeurs des variables A, B et C aprs excution des instructions suivantes ? Variables A, B, C : Entier Dbut A 8 B -2 C A + B A 4 C B A Fin

M. El Marraki

20

15/02/2007

Algorithmique, module I2

SMP/SMC

Exercice 2 :
Quelles seront les valeurs des variables A et B aprs excution des instructions suivantes ? Variables A, Dbut A 2 B A + A A + B B + A B Fin B : Entier

5 B 2 A

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 ces variables).

Exercice 6 :

Ecrivez un algorithme qui calcule et affiche la surface et la circonfrence dun cercle (2 r et r 2 ). Lalgorithme demandera lutilisateur dentrer la valeur du rayon. M. El Marraki 21 15/02/2007

Algorithmique, module I2

SMP/SMC

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

Exercice 8 :

Ecrivez un algorithme qui calcule et affiche la surface et la circonfrence dun cercle (2 r et r 2 ). Lalgorithme demandera lutilisateur dentrer la valeur du rayon.

Exercice 9 :
crire un algorithme qui effectue la lecture du temps t en seconde, et il affiche le temps t en jours, heure, minutes, secondes. Exemple : si t=21020 secondes lalgorithme affichera 0 jours 5 heures 50 minutes et 20 secondes.

M. El Marraki

22

15/02/2007

Algorithmique, module I2

SMP/SMC

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


Les primitives que nous allons prsenter maintenant vont permettre la machine de "choisir" les excutions suivant les valeurs des donnes. Lors de lexcution lalgorithme, la primitive :
si C alors A finsi

O C est une condition (on prcisera plus loin la nature de cette condition) et A une instruction ou 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 condition est une comparaison. Cest--dire quelle est compose de trois lments une valeur un oprateur de comparaison une autre valeur Les valeurs peuvent tre a priori de nimporte quel type (numriques, caractres) Les oprateurs de comparaison sont : = != < > =< >= Lensemble constitue donc si lon veut une affirmation, qui a un moment donn est VRAIE ou FAUSSE. A noter que ces oprateurs de comparaison semploient tout fait avec des caractres. Ceux-ci sont cods par la machine dans lordre alphabtique, les majuscules tant systmatiquement places avant les minuscules. Ainsi on a :
"t" < "w" "Maman" > "Papa" "maman" > "Papa" VRAI FAUX VRAI.

Conditions composes
Certains problmes exigent parfois de formuler des conditions qui ne peuvent pas tre exprimes sous la forme simple expose ci-dessus. Prenons le cas " n est compris entre 5 et 8 ". En fait cette phrase cache non une, mais deux conditions. Car elle revient dire que " n est suprieur 5 et n est infrieur 8 ". Il y a donc bien l deux conditions, relies par ce quon appelle un oprateur logique, 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 C1 ET C2 soit VRAI, il faut imprativement que C1 soit VRAIE et que C2 soit VRAIE.

M. El Marraki

23

15/02/2007

Algorithmique, module I2

SMP/SMC

Il faut se mfier un peu plus du OU. Pour que C1 OU C2 soit VRAI, il suffit que C1 soit VRAIE ou que C2 soit VRAIE. Le point important est que si C1 est VRAIE et C2 est VRAIE, alors C1 OU C2 est VRAIE. Le OU informatique ne veut donc pas dire " ou bien ". VRAI NON FAUX On reprsente tout ceci dans des tables de vrit :

ET

V V F

F F F
OU

V F

V V V

F V F

V F

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

Solution :
Analyse : si A>B alors le plus grand est A sinon le plus grand est B. Conception : Algorithme variables A, 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

M. El Marraki

24

15/02/2007

Algorithmique, module I2

SMP/SMC

Organigramme
crire(" Entrer le premier nombre :")

lire(A)

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

non si A>B

oui

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

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

Tests imbriqus
Graphiquement, on peut trs facilement reprsenter un si comme un aiguillage de chemin de fer. Un si ouvre donc deux voies, correspondant deux traitements diffrents. Mais il y a des tas de situations o deux voies ne suffisent pas. Par exemple, un programme devant donner ltat de leau selon sa temprature doit pouvoir choisir entre trois rponses possibles (solide, liquide ou gazeuse).

Exemple :
Variable Temp : entier Dbut crire("Entrez la temprature de leau :") lire(Temp) si Temp =< 0 Alors crire("Cest de la glace") finsi si Temp > 0 Et Temp < 100 Alors crire("Cest du liquide") finsi si Temp > 100 Alors crire("Cest de la vapeur") finsi Fin

M. El Marraki

25

15/02/2007

Algorithmique, module I2

SMP/SMC

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

Exemple :
Variable Temp en Entier Dbut crire("Entrez la temprature de leau :" ) lire(Temp) si Temp =< 0 Alors crire("Cest de la glace") sinon si Temp < 100 Alors 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 taper trois 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 la temprature est infrieure zro, celui-ci crit dornavant " Cest de la glace " et passe directement la fin, sans tre ralenti par lexamen dautres possibilits (qui sont forcment fausses). Cette deuxime version nest donc pas seulement plus simple crire et plus lisible, elle est galement 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 des tests pour : 2 5 8 3 1 3 8 -6 1

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

Exercice 12 :
crivez un algorithme qui permet de discerner une mention un tudiant selon la moyenne de ses notes : - "Trs bien" pour une moyenne comprise entre 16 et 20 (16<= moyenne <=20)

M. El Marraki

26

15/02/2007

Algorithmique, module I2 - "Bien" pour une moyenne comprise entre 14 et 16 (14<= moyenne <16) - "Assez bien" pour une moyenne comprise entre 12 et 14 (12<= moyenne <14) - "Passable" pour une moyenne comprise entre 10 et 12 (10<= moyenne <12)

SMP/SMC

Exercice 13 :
crivez un algorithme qui permet de rsoudre une quation du second degr ( a x 2 + b x + c = 0 avec a 0 )

Exercice 14 : Les tudiants ayant pass l'examen dalgorithmique en session de Juin ont t classs selon leurs notes 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 la situation de l'tudiant selon sa note (on suppose que l'utilisateur entre une note valide entre 0 et 20).

3.5.5 Les Boucles


La notion ditration (boucle) est une des notions fondamentales de lalgorithmique. On lutilise souvent quand on doit exercer plusieurs fois le mme traitement sur un mme objet, ou plusieurs objets de mme nature. Mais son rel intrt rside dans le fait que lon peut modifier, chaque rptition, 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 laquelle lutilisateur doit rpondre par O (Oui) ou N (Non). Mais lutilisateur maladroit risque de taper autre 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 drouler normalement jusquau bout, mais en produisant des rsultats faux. Alors, dans tout programme, on met en place ce quon appelle un contrle de saisie (pour vrifier que les donnes entres au clavier correspondent bien celles attendues par lalgorithme). On pourrait essayer avec un si. Voyons voir ce que a donne : Variable Rep Caractre crire("Voulez vous un caf ? (O/N)") lire(Rep) si Rep != "O" et Rep != "N" alors crire("Saisie erronne. Recommencez") Lire(Rep) finsi

M. El Marraki

27

15/02/2007

Algorithmique, module I2

SMP/SMC

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 un SI. Et ainsi de suite, on peut rajouter des centaines de SI. Mais cela ne rsout pas le problme. La seule issue est lutilisation dune boucle. 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 valeur de 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 la valeur FAUX. Illustration avec notre problme de contrle de saisie : Variable Rep en 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 ... jusqu conditions

M. El Marraki

28

15/02/2007

Algorithmique, module I2

SMP/SMC

Le principe est simple : toutes les instructions crites entre Rpter et jusqu sont excutes au moins une fois et leur excution est rpte jusqu ce que la condition place derrire jusqu soit satisfaite. Illustration avec notre problme de contrle de saisie : Variable Rep en 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 dbut jusqu 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 :
variable i entire Pour i allant de 1 100 faire crire("Bonjour tous") finpour

On peut amliorer ce programme par :

M. El Marraki

29

15/02/2007

Algorithmique, module I2

SMP/SMC

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.
variable n, i entires crire("entrer le nombre n :") lire(n) Pour i allant de 1 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 :
variable n, i entires crire("entrer le nombre n :") lire(n) i 1 TantQue(i<=n) faire crire("Bonjour tous la ",i," fois") i i + 1 FinTantQue

Des boucles imbriques


De mme quune structure SI ALORS peut contenir dautres structures SI ALORS, une boucle peut contenir dautres boucles.
Variables i, j entier Pour i allant de 1 10 crire("Premire boucle") ; Pour j allant de 1 6 crire("Deuxime boucle") ; Finpour ; Finpour ;

Dans cet exemple, le programme crira une fois "Premire boucle" puis six fois de suite "Deuxime boucle", et ceci dix fois en tout. A la fin, il y aura donc eu 10 x 6 = 60 passages dans la deuxime boucle (celle du milieu). Notez la diffrence marquante avec cette structure :
Variables i, j entier Pour i allant de 1 10 crire("Premire boucle") ; Finpour ; Pour j allant de 1 6 crire("Deuxime boucle") ; Finpour ;

M. El Marraki

30

15/02/2007

Algorithmique, module I2 Ici, il y aura dix critures conscutives de "Premire boucle", puis six critures conscutives de "Deuxime boucle" , et ce sera tout.
Examinons lalgorithme suivant : Variable i entier Pour i allant de 1 10 i i * 2 crire("Passage numro : ",i) ; Finpour

SMP/SMC

On remarque que la variable i est gre "en double", ces deux gestions tant contradictoires. Dune part, la ligne " Pour " augmente la valeur de i de 1 chaque passage. Dautre part la ligne " i i * 2" double la valeur de i chaque passage. Il va sans dire que de telles manipulations 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 N 2. Calculer la somme des N premiers entiers positifs 3. Afficher le rsultat 2me tapes : Conceptions 1. dclaration des variables N, i, somme : entiers crire(donner la valeur de N) lire(N) si N<0 alors erreur initialiser somme et i Rpter somme somme + i i i+1 jusqu i>=N crire("la somme est ",somme) 2.
dclaration des variables N, i, somme : entiers crire(donner la valeur de N) lire(N) si N<0 alors erreur initialiser somme et i TantQue i<= N somme somme + i i i+1

M. El Marraki

31

15/02/2007

Algorithmique, module I2
FinTantque Ecrire("la somme est ",somme)

SMP/SMC

3.
dclaration des variables N, i, somme : entiers crire(donner la valeur de N) lire(N) si N<0 alors erreur initialiser somme et i Pour i allant de 1 N somme somme + i FinPour Ecrire("la somme est ",somme)

3me tape : Test Somme_N_entiers Donner N : -1 N doit etre >0 ! Somme_N_entiers Donner N : 7845 La somme est : 30775935 Somme_N_entiers Donner N : 10 La somme est : 55

Remarque : Pour cet exemple on peut faire une vrification plus complte en calculant une
autre 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 choisie Question ? 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".

M. El Marraki

32

15/02/2007

Algorithmique, module I2

SMP/SMC

3.6 Exemple
Ecrire lalgorithme qui compte le nombre de bits ncessaires pour coder en binaire un entier n. - Le nombre de bits ncessaire pour coder lentier n est [lg(n)] (lentier juste au dessus du logarithme base 2 de lentier n). - Analyse : on initialise une variable nb 0 et chaque fois que lon divise n par 2 on augment de 1 la valeur de nb, on rpte ce procd jusqu ce que le quotient obtenu est nul. - Lalgorithme :
Variables i,n,nb : entiers Debut Ecrire(" Entrer la valeur de n :") lire(n) i n nb 0 TantQue(i<>0) 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 : 13 Pour coder 13 en binaire il faut 4 bits =========================== Entrer la valeur de n : 1750 Pour coder 1750 en binaire il faut 11 bits ============================ Entrer la valeur de n : 0 Pour coder 0 en binaire il faut 0 bits Erreur !!!!! - Amlioration :
Variables i,n,nb : entiers Debut Ecrire(" Entrer la valeur de n :") lire(n) i n/2 /* Pour le cas de zro */ nb 1 TantQue(i<>0) faire i i/2 nb nb+1 FinTantQue Ecrire("Pour coder ",n," en binaire il faut ",nb,"bits") Fin

- Une autre solution :


Variables i,n,n : entiers Debut Ecrire(" Entrer la valeur de n :")

M. El Marraki

33

15/02/2007

Algorithmique, module I2

SMP/SMC

lire(n) i n nb 0 Rpter i i/2 nb nb + 1 jusqu (i=0) Ecrire("Pour coder ",n," en binaire il faut ",nb, "bits") Fin

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 positifs paires. Lalgorithme demandera lutilisateur dentrer la valeur de n.

Exercice 17 :
1. Excuter le programme suivant : Variable i, j : Entier debut Pour i 1 jusqu 5 Ecrire(" i= ", i) Pour j 1 jusqu 3 Ecrire("le produit de",i," et ",j," est:",i*j) FinPour FinPour Fin 2. Excuter le programme suivant : Variable i, j : Entier debut Pour i 1 jusqu 5 Ecrire(" i= ", i) FinPour Pour j 1 jusqu 3 Ecrire("le produit de",i," et ",j," est:",i*j) FinPour Fin

Exercice 18 :
M. El Marraki 34 15/02/2007

Algorithmique, module I2 1. crivez un algorithme qui calcule la somme S suivante : S = 1 + 2 + 3 + + (n-1) + n. Lalgorithme demandera lutilisateur dentrer la valeur de n. 2. crivez un algorithme qui calcule le factoriel de n : n ! = 123 (n-1) n. Lalgorithme demandera lutilisateur dentrer la valeur de n.

SMP/SMC

Exercice 19 :
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 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 = 45 b. a = 21 et b = 13 c. 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 p et dtermine si cet entier est premier ou non. 2. 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 nombre lui mme et 1). Exemple : les nombres 48 et 75 sont deux nombres amis puisque : 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 n et m sont amis ou non.

M. El Marraki

35

15/02/2007

Vous aimerez peut-être aussi