DEPARTEMENT DE GESTION
MODULE : INFORMATIQUE :
2005/2006
Dpartement de Gestion
INTRODUCTION GENERALE
But : acqurir une mthode, des outils : dmarche a suivre dun problme a rsoudre un programme informatique.
Domaines dapplications : Gestion (facturation, paye,) Informatique scientifique (mtorologie, astronomie,) Systmes industriels (commandes numriques, robotique,) Informatique ludique (informatique personnelle, jeux,) Etc Quelque soit le domaine, la dmarche de conception du programme reste identique. Dmarche Problme a rsoudre Etude Pralable Spcification des donnes et des rsultats Spcification de fonctionnalits Solution en langage naturel Donnes structures / Algorithme Programmation Programme excutable Test et valuation du travail ralis Documentation Comprhension du problme, modlisation du problme Recenser les informations et prciser leur nature Recenser et prciser Savoir rsoudre le problme avant dautomatiser la solution Mise en forme informatique des informations et des traitements raliser Choix du langage, traduction de la solution (algorithme) sous forme de programme Compilation du programme en programme excutable Test de la cohrence par rapport aux spcifications Manuel dutilisateur, aide en ligne, manuel de maintenance du logiciel
II LA NOTION DALGORITHME : Du mathmaticien persan Al-Khwa-Rizm (Bagdad, 780 850) Pour les notions de Al-Jabr (Algbre) thorie du calcul Plus ancien : Euclide (3eme sicle avant JC) Babyloniens (1800 avant JC)
Selon le LAROUSSE, la dfinition dalgorithme est un ensemble de rgles opratoires dont lenchanement permet de rsoudre un problme au moyen dun nombre fini doprations.
Quelques points importants :
Un algorithme dcrit un traitement sur un ensemble fini de donnes de nature simple (nombres ou caractres),
ou plus complexes (donnes structures) Un algorithme est constitu dun ensemble fini dactions composes doprations ou actions lmentaires. Ces actions lmentaires doivent tre effectives (ralisable par la machine), non ambigus. Un algorithme doit toujours se terminer aprs un nombre fini doprations. Lexpression dun algorithme ncessite un langage clair (comprhension) structur (enchanements doprations) non ambigu, universel (indpendants du langage de programmation choisi)
M.Rezig
Cours et Exercices Corrigs en Algorithmes Problme : un tel langage nexiste pas, on dfinit son propre langage.
Dpartement de Gestion
III MTHODOLOGIE DE CONCEPTION DUN ALGORITHME : Analyse descendante : (ou programmation structures) : on dcompose un problme complexe en sous problmes et ces sous problmes en dautres sous problmes jusqu' obtenir des problmes faciles a rsoudre c'est--dire connus. On rsout les sous problmes simples sous forme dalgorithme puis on recompose les algorithmes pour obtenir lalgorithme global du problme de dpart. Garder lesprit :
La modularit : un module rsout un petit problme donn. Un module doit tre rutilisable. Lisibilit de lalgorithme (mise en page, commentaires, spcification : dire quoi mais pas comment) Attention la complexit de lalgorithme : o Complexit en temps : mesure du temps dexcution en fonction de la taille des donnes o Complexit en espace : espace mmoire ncessaire pour effectuer les traitements. Ne pas rinventer la roue (c'est--dire ne pas refaire les programmes standard dont les solutions sont connues)
ce qui implique avoir une certaine culture et un outil technique standard
I-Introduction
Un type de donne dtermine : - un domaine : ensemble des valeurs possibles pour les objets de ce type. - primitives : ensembles des oprations permettant de manipuler les objets de ce type. On distingue : - les types lmentaires : simples (entiers, caractres,) prdfinis dans la plupart des langages de programmation - les types structurs : construits laide de constructeurs de types (exemple : tableaux) - les types abstraits : rservs des structures plus volues (listes, files, arbres,) Remarque : certains types peuvent ne pas exister (ou pas totalement). Dans ce cas, il est possible de les simuler : - coder les objets laide des constructeurs existants (coder une liste par un tableau) - crire les primitives sous forme dactions ou de fonctions
types lmentaires
1-LES ENTIERS
domaine [-N ; =N[ ou N dpend du nombre doctets primitives : - arithmtique : + - * div mod - comparaison = < - fonctions particulires (ValAbs,) ATTENTION : problmes de dbordements (sortir du domaine)
M.Rezig
Cours et Exercices Corrigs en Algorithmes Retourner (tri) Si tri = vrai alors retourner (vrai) sinon retourner (faux)
Dpartement de Gestion
4-TYPE CARACTRES
Domaine : cods sur un octet (ASCII) voire deux octets. Quelque soit le codage : a, b,,z : sont conscutifs A, B,,Z : sont conscutifs 0,,9 : sont conscutifs lespace _ prcde les caractres alphabtiques.
Primitives :
ORD : 1 entier => le caractre ayant ce code CHR : 1 caractre => son code A savoir : - Si (car 0) et (car 9) : tester un caractre chiffre - Car<=chr(ord(car)+ord(A)-ord(a)) : convertir une minuscule en majuscule sans avoir a connatre le codage des lettres car les lettres sont codes conscutivement. - Val<=ord(car)-ord(0) : rcupre la valeur dun chiffre.
Exemple : on calcule le quotient q et le reste r de la division entire de a par b par soustraction successives. 25-6=19
donc q=1 puis 19-6=13 donc q=2 puis 13-6=7 donc q=3 puis 7-6=1 donc q=4 puis 1-6 impossible donc q=4 et r=1. Un objet va tre caractris par :
un identificateur (son nom) : pour le dsigner cet identificateur doit tre parlant : q=quotient Un type (nature de lobjet : entier, caractre) simple ou structur. Un type dtermine en particulier les
valeurs possibles de lobjet et les oprations primitives applicable lobjet. Une valeur (contenu de lobjet) unique. Cette valeur peut varier au cours de lalgorithme ou dune excution lautre : ces objets sont des variables.
Dans les cas contraires (valeur fixe) ce sont des constantes. Tous les objets manipul par un algorithme doivent tre clairement dfinis : Mots clefs => const : PI=3.14 => var a, b : entiers x, y : caractres a, b, x, y sont des identificateurs
M.Rezig
Dpartement de Gestion
Actions lmentaires :
Actions lmentaires : oprations simple, directement utilisable.
1-AFFECTATION
Permet de donner une valeur une variable : A<=28 reoit Si A avait une valeur auparavant, cette valeur disparat : elle est cras par 28 Format gnral : <id_variable> <= <expression> A<=28+13 A lexcution : lexpression est value (calcule) et sa valeur est range dans la variable. Donc les types <id_variable> et <expression> doivent tre compatibles. Attention : A<=B+3 B doit avoir une valeur. Or au dbut dune action, les variables ont une valeur indtermine/ B doit avoir t initialis.
Remarques :
La notion de littral : A<=28 28 est un objet caractris par son type (entier [numrique]), son nom (sa valeur), et sa valeur (28) Le littral est lobjet constante , le nom est sa valeur On note les littraux de type caractre entre quotte A. On note les littraux de type chane de caractres entre double quotte : bonjour Autre remarque : Lors de lcriture dun algorithme, viter les dtails de programmation au niveau des entres sorties : par exemple on crira : crire (A, B, C) Et non crire (Le produit de, A, par, B, vaut, C)
LALTERNATIVE SI-ALORS-SINON
Elle permet deffectuer tel ou tel traitement en fonction de la valeur dune condition. Syntaxe : Exemple : Lire (note)
M.Rezig
Cours et Exercices Corrigs en Algorithmes Si <condition> Alors < action _alors> Sinon < action _sinon> Remarque, la ligne Sinon <action_sinon> est facultative. Principe de fonctionnement : 1 : la condition est value 2 : Si la condition a la valeur vrai on excute <action_alors> Si la condition a la valeur fausse on excute <action_sinon> Remarque : Les <action_alors> ou <action_sinon> peuvent tre soit : - des actions lmentaires - des composes (bloc) Dans ce cas on utilise les structures imbriques. Exemple de structure imbrique: Si A 10 Alors dbut Si A 10 Alors crire (oui) Fin Sinon crire (non)
Actions et fonctions : Un algorithme est compos dun ensemble fini dactions. En fait, on distingue : - les actions qui ralisent un traitement (lecture dun complexe, tri du fichier tudiant) - les fonctions qui effectuent un calcul et retournent un rsultat
M.Rezig
Cours et Exercices Corrigs en Algorithmes Dpartement de Gestion En programmation, on trouve parfois cette distinction de faon explicite. Comme en Pascal, ou lon a procedure et functions. En revanche, en C ou C++ cette distinction nexiste pas, il ny a que des fonctions. En algorithme, on savisera de faire cette distinction entre fonction et action, pour la simple raison que chacune ne fait pas intervenir le mme type de variable ou de paramtres :
EXEMPLE DE FONCTION :
Fonction primtre rectangle (largeur, longueur : entiers) : entier Dbut Retourner [ 2*(largeur+longueur)] Fin
Maintenant, on peut crer laction qui dtermine le maximum et le minimum de trois entiers, en faisant appel la fonction max3 : Action max&min Var : a, b, c, min, max : entiers Dbut Lire (a, b, c) Max <= max3 (a, b, c) Min <= -max3 (-a, -b, -c) Ecrire (min, max) Fin
M.Rezig
Cours et Exercices Corrigs en Algorithmes Dpartement de Gestion Remarques : X, y, z sont les paramtres formels de la fonction max3. Ce sont des paramtres dentrs : lors de lappel de la fonction max3, les valeurs des arguments dappel (ici : a, b, c) ou (-a, -b, -c)) sont transmises aux paramtres x, y, z en fonction de leur ordre. Les arguments sont des expressions (par exemple : max <= max3 (2*a+b, c-b, a*c)) qui sont values lappel. Leur valeur est transmise aux paramtres. Naturellement, le type des expressions doit tre compatible avec le type des paramtres.
Structures rptitives :
Ide : rpter un ensemble doprations, arrter la rptition en fonction dune condition
M.Rezig
Cours et Exercices Corrigs en Algorithmes r<=a 0 15 r b vrai q<=q+1 1 r<=r-b 9 r b vrai q<=q+1 2 r<=r-b 3 r b faux crire 2 3
Dpartement de Gestion
On peut se poser la question de la terminaison : En effet si b<0 alors problme : il faut rajouter des conditions. De plus, si b=0 la division nest pas dfinie. Donc cet algorithme ne marche que pour 2 entiers a et b lus au clavier tels que a 0 et b >0
STRUCTURE RPTER :
Syntaxe : Rpter <actions simples> jusqu' <condition> Fonctionnement : 1 : on excute le corps 2 : on value la condition 3 : si Vraie : on quitte le rpter 4 : si Fausse on recommence Remarques : Il y a toujours au moins une excution du corps. La structure rpter permet de rpter un traitement 1 ou plusieurs fois. Pour choisir entre rpter et tant que il faut se poser la question : faut-il ventuellement ne jamais faire le traitement ? Si oui : il faut utiliser tant que, sinon utiliser la structure rpter qui excute au moins une fois laction. Attention, en C++ : La structure est dowhile : cest dire Fairetant que. Alors que la structure algorithmique est rpterjusqu'. Cest dire quen C++ on excute laction tant que une condition est vrai alors quen algorithme on excute une action tant que le condition est fausse, cest dire jusqu' ce que la condition inverse soit vraie.
STRUCTURE POUR :
Elle permet de parcourir un intervalle en rptant un traitement pour chacune des valeurs de cet intervalle. Exemples : 1) Pour I de 1 5 faire Ecrire (I*I) 2) Pour I de 1 11 par pas de 3 faire Ecrire (I*I) Syntaxe : Pour <id_variable> DE <val_infrieure> A <val_suprieure> [ par pas de <val_pas>] <= facultatif Faire <actions> Les actions peuvent tre simples ou composes.
Fonctionnement :
1 : Automatiquement, on a id_variable <= val_infrieure Donc, on a pas besoin dinitialiser, la structure se charge de la faire 2 : id_variable > val_suprieure ? Si oui, alors STOP, on quitte la structure Sinon : - on excute le programme
M.Rezig
Cours et Exercices Corrigs en Algorithmes Dpartement de Gestion - automatiquement, lincrmentation se fait (+1 ou +pas si lon a dfinit un pas particulier, par dfaut, le pas est 1) - on remonte au dbut du 2 tester la condition id_variable > val_suprieure ?
Remarques :
Il est possible que laction ne soit jamais excute. Il est cependant possible davoir un intervalle invers condition davoir un pas ngatif. IMPORTANT : Il est absolument interdit de modifier <id_variable>, <val_infrieure>, <val_suprieure>, <val_pas> dans le corps de boucle. Parfois cette structure nest pas prsente dans un langage de programmation, il faut donc retenir que ce nest quun raccourci pour crire des tant que. Utilisation du POUR : On sen sert ds que lon connat au dbut de la boucle le nombre de rptitions effectuer. Dans les cas contraire, on utilisera des TANT QUE ou des REPETER
32
-8
19
-3
T signifie que cest un objet de type tableau. Les numros en indices 0, 1, 2, 3, 4 correspondent aux valeurs colonnes. Le contenu de T : les 5 entiers (dans un certain ordre) La premire valeur est T[0] ou 0 correspond donc lindice de la premire colonne. Dclaration dun tableau dans un algorithme : Ctaille est la constante qui indique le nombre de case du tableau. Const Ctaille=25 Var Tab : tableau [Ctaille] dentiers Pour I de 0 Ctaille 1 Faire Lire tab [I] {Cet algorithme permettra notamment de rentrer les variables dans le tableau.} Pour crer une fonction tableau : Fonction Mintableau (T :tableau dentiers, N entier) : entier {pour crer la fonction Mintableau qui retournera par exemple le minimum dun tableau, on dsigne le tableau par T et N par le nombre de colonnes, ainsi, mme si lon a dclar auparavant un tableau 50 colonnes et que lon nutilise en fait que 30 colonnes, N=30 permet de dfinir lordinateur le nombre de colonnes rellement utilises et limiter la dure du traitement. N est donc indpendant de Ctaille} Exemple : dterminer si un tableau est tri : 5 8 8 12 15 3 2 1
PREMIRE PROPOSITION
Fonction : est tri (T : Tableau [ ] dentiers, N : entier) : boolen Var : I : entier Dbut : I <= 0 Tant que (I < N-1) et (T[I] T[I+1]) faire I<=I+1 Retourner (I=N-1) Fin
M.Rezig
10
Dpartement de Gestion
Remarque :
Il y a un problme qaudn I atteint le niveau N-1 : on value la condition I<N-1 et (T[I] T[I+1]) or la case T[I+1] nexiste pas. Or la premire partie (I<N-1) renvoie faux : mais certains langages value quand mme la deuxime condition (ce nest pas le cas du C++) : ce langage nest pas universel, donc on ne peut pas lappliquer en algorithmique.
DEUXIME PROPOSITION :
On utilise une variable boolenne : Fonction : Est tri Var : I entier Tri : boolen Dbut I<=0 tri<=vrai Tant que (I<N-1) et tri Faire Si T[I] T[I+1] alors I<=I+1 Sinon tri<=faux Retourner tri Fin
M.Rezig
11
Dpartement de Gestion
Exercices Simples
Exercice 1 : Ecrire un algorithme dune action qui change deux variables A et B B A Action : Echange Var : A, B, C : rels Dbut : Ecrire ( Saisissez deux variables ) Lire (A, B) C <= A A <= B B <= C Ecrire ( les valeurs de , A, et de , B, ont t changes ) Fin Exercice 2 : Ecrire une fonction qui donne les carr dun rel Fonction : carr (x :rel) :rel Var : x_au_carr Dbut x_au_carr <= x*x retourner x_au_carr fin Remarques : Dans une fonction, la seule variable qui est dfinie est celle du rsultat, les autres sont dfinies dans la fonction mre, et apparaissent ici en temps quentres. Dans une fonction, ne pas oublier de retourner le rsultat.
exercice en utilisant les structures SIALORSSINON et SELONQUE Exercice 3 : Ecrire une action qui fournit les flicitations ou lajournement dun tudiant suivant sa note en utilisant Si-alors-sinon. Action : Jury Var : note : rel Dbut : lire (note)
M.Rezig
12
Cours et Exercices Corrigs en Algorithmes Si note <10 alors crire ( ajourn ) Sinon crire ( reu ) Fin
Dpartement de Gestion
Exercice 4 : Ecrire un programme qui donne la valeur absolue de 2 rels : Action : Valeur_absolue Var : a, b : rels Dbut : Ecrire ( saisissez 2 rels ) Lire (A, B) Ecrire les valeurs absolues de A et de B sont : ) Si A<0 alors crire (-A) Sinon crire (A) Ecrire ( et ) Si B<0 alors crire (-A) Sinon crire (A) Fin Remarque : on peut aller plus vite en crant une fonction valeur absolue et en faisant appel cette fonction dans une action : Fonction : valAbs (x :rel) :rel Var : absx : rel Dbut : si x <0 alors absx <= -x Sinon absx <= x Retourner absx Fin Et Action : Valeur_absolue2 Var : A, B rels Dbut : Ecrire ( saisissez 2 rels ) Lire (A, B) Ecrire ( les valeurs de A et B sont : , valAbs(A), et , valAbs(B)) Ecrire 5 : Faire un programme qui donne le volume dun cylindre en faisant appel une fonction aire dun cercle. Fonction : aire_cercle (rayon :rel) :rel Var : Aire : rel Const : PI=3.14 Dbut : Aire <= PI*rayon*rayon Retourner (Aire) Fin Fonction : volume_cercle (hauteur, rayon :rels) :rel Var : volume : rel Dbut : Volume <=aire_cercle (rayon)*hauteur Retourner volume Fin Exercice 6 : Ecrire un algorithme permettant de rsoudre une quation du premier degr Action : premierdegre
M.Rezig
13
Cours et Exercices Corrigs en Algorithmes Var : a, b, x rels Dbut : Ecrire ( saisissez les valeurs a et b de lquation ax+b=0 : ) Lire (a, b) Si a = 0 alors crire ( pas de solution ) Sinon crire ( la solution est x= , -b/a) Fin
Dpartement de Gestion
Exercice 7 : Ecrire un algorithme permettant de rsoudre une quation du second degr en utilisant des si alors.. Action : seconddegr Var : a, b, c, delta Dbut : Ecrire ( saisissez les valeurs a, b et c de lquation ax+bx+c=0 : ) Lire (a, b, c) Si a=0 alors crire ( quation du premier degr ) Sinon delta<=b-4*a*c Dbut Si delta>0 alors crire ( les solutions de lquation sont , (-b-sqrt(delta))/(2*a), et , (b+sqrt(delta))/(2*a)) Sinon Dbut Si d=0 alors crire ( -b/(2a)) Sinon crire ( pas de solutions relles ) Fin Fin Fin Ecrire le mme algorithme avec des selon-que : Action : seconddegr Var : a, b, c, delta Dbut : Ecrire (saisissez les valeurs de a, b et c de lquation ax+bx+c) Lire (a, b, c) Si a=0 alors crire ( rsoudre permier degr ) Sinon dbut Delta <= b-4*a*c Selon que Delta > 0 : crire ((-b-sqrt(delta))/(2*a), (-b+sqrt(delta))/(2*a)) Delta = 0 : crire (( -b/(2a)) Sinon crire ( pas de solution relle ) Fin selon Fin Exercice 8 Ecrire un algorithme qui donne la dure de vol en heure minute connaissant lheure de dpart et lheure darrive. 1) on considre que le dpart et larrive ont lieu mme jour 2) idem mais sans faire les conversions en minutes 3) on suppose que la dure de vol est infrieure 24 heures mais que larrive peut avoir lieu le lendemain. . 1-- 2- .3- 42 1) Action : DureVol1 Var : h1, h2, m1, m2, hr, mr : entiers Dbut : Ecrire ( entrer horaire de dpart et darrive ) Lire (h1, m1, h2, m2) mr <= [h2*60+m2] [h1*60+m1] hr <= mr/60 mr <= mr%60
M.Rezig
14
Cours et Exercices Corrigs en Algorithmes Ecrire ( dure de vol : , hr, mr) Fin Remarque : lopration % (modulo) permet de calculer le reste de la division entire. 2) Action : DureVol2 Var : h1, h2, hr, m1, m2, mr : entiers Dbut : Ecrire ( entrer horaire de dpart et darrive ) Lire (h1, m1, h2, m2) Si m2>m1 alors hr <= h2-h1 et mr <= m2-m1 Ecrire (hr, mr) Sinon hr <= h2-h1-1 et mr <= m2+60-m1 Ecrire (hr, mr) Fin 3) Action : DureVol3 Var : h1, h2, m1, m2, hr, mr : entiers Dbut : Ecrire ( entrer horaire de dpart et darrive ) Lire (h1, m1, h2, m2) Si h2>h1 alors Si m2>m1 alors hr <= h2-h1 et mr <= m2-m1 Ecrire (hr, mr) Sinon hr <= h2-h1-1 et mr <= m2+60-m1 Ecrire (hr, mr) Sinon Si m2>m1 alors hr <= h2-h1+24 et mr <= m2-m1 Ecrire (hr, mr) Sinon hr <= h2-h1+24-1 et mr <= m2+60-m1 Ecrire (hr, mr) Fin
Dpartement de Gestion
Exercice 9 1) Ecrire une fonction max3 qui retourne le maximum de trois entiers 2) Ecrire une fonction min3 qui retourne le minimum de trois entiers 3) Ecrire une fonction max2 qui retourne le maximum de deux entiers 4) Ecrire une fonction max3 qui retourne le maximum de trois entiers en faisant appel max2 1) Fonction : max3(a, b, c : entier) : entier : Var : max3 : entier Dbut : Si a>b alors Si a>c alors max3 <= a Sinon max3 <= c Sinon Si c>b alors max3 <= c Sinon max3 <= b Retourner (max3) Fin 2) Fonction : min3(a, b, c : entier ) : entier : Var min3 : entier Dbut Retourner (max3(-a, -b, -c))
M.Rezig
15
Cours et Exercices Corrigs en Algorithmes Fin 3) Fonction : max2 (a, b : entier) : entier Var : max2 : entier Dbut : Si a<b alors max2 <= b Sinon max2 <= a Retourner (max2) Fin 4) Fonction : max3 (a, b, c : entier) : entier : Var : max3 : entier Dbut : max3 <= max2 [max2 (a, b), c) Retourner (max3) Fin
Dpartement de Gestion
Exercice 10 Ecrire avec des Si Alors Sinon une action permettant la saisie dune note n (0 n 20) et qui affiche la mention (n 16 : Trs Bien, n 14 : Bien, n 12 : Assez Bien, n 10 : Passable, n 10 : Ajourn) . Action : Mention Var Note : rel Dbut : Ecrire ( saisissez une note ) Lire (Note) Si Note 16 alors crire ( TB ) Sinon Si Note 14 alors crire ( B ) Sinon Si Note 12 alors crire ( AB ) Sinon Si Note 10 alors crire ( Passable ) Sinon crire ( ajourn ) Fin Alternative : crire le mme Algorithme avec des Selon Que : Action : Note Var : Note : rel Selon que Note 16 crire ( TB ) Note 14 crire ( B ) Note 12 crire ( AB ) Note 10 crire ( Passable ) Sinon crire ( ajourn ) Exercice 11 Soit lalgorithme suivant : Action : Permis_voiture Var : permis, voiture : boolen Dbut : Ecrire ( avez-vous le permis ? (0/1) ) Lire (permis) Ecrire ( avez vous une voiture ? (0/1) ) Lire (voiture) Si non permis ou voiture alors Si voiture alors crire ( conduisez moi la gare ) Sinon crire ( jai une voiture pas chre ) Sinon Si voiture alors crire ( vous tes hors la loi ) Sinon crire ( vive le vlo ) fin
M.Rezig
16
Cours et Exercices Corrigs en Algorithmes 1) 2) 3) 4) Ecrire larbre des conditionnelles Corriger les tests pour que tous les cas soient couvert de manire cohrente Faites correspondre les actions et les tests correctement Si possible, crire cet algorithme avec des selon que. Permis Vive le vlo Voiture pas chre voiture Conduisez moi la gare Hors la loi
Dpartement de Gestion
En clair, selon lalgorithme propos : si lon a le permis et la voiture on peut amener quelquun la gare ; si lon a que le permis on dit vive le vlo, si lon na que la voiture on conduit aussi la gare, enfin si lon a ni permis ni voiture alors on achte une voiture pas chre. Le cas hors la loi nest pas voqu et les correspondance sont inexactes. Il faut videmment avoir : - permis et voiture : conduire la gare - permis : jai une voiture pas chre - voiture : vous tes hors la loi - ni voiture, ni permis : vive le vlo Correction de lalgorithme propos : Action : Permis_voiture Var : permis, voiture : boolen Dbut : Ecrire ( avez-vous le permis ? (0/1) ) Lire (permis) Ecrire ( avez vous une voiture ? (0/1) ) Lire (voiture) Si permis ou voiture alors Si voiture alors crire ( conduisez moi la gare ) Sinon crire ( jai une voiture pas chre ) Sinon Si voiture alors crire ( vous tes hors la loi ) Sinon crire ( vive le vlo ) On peut effectivement crire cet algorithme avec des selon-que : Action : permis_voiture Var : permis voiture : rel Dbut : Ecrire ( avez-vous le permis ? (0/1) ) Lire (permis) Ecrire ( avez vous une voiture ? (0/1) ) Lire (voiture) Selon que : Permis et voiture : crire ( conduisez moi la gare ) Permis et non voiture : crire ( jai une voiture pas chre ) Non permis et voiture : ( vous tes hors la loi ) Non permis et non voiture : ( vive le vlo ) Fin Exercice 12 Ecrire un Algorithme calculatrice permettant la saisie de deux entiers et une opration boolen- ( +, - , / , x ) et affichant le rsultat. Donner avant cela les spcifications, la solution en langage naturel, les structures de donnes. . Spcifications : Donnes : 2 oprandes et un oprateur Rsultat : rsultat de lopration choisie Solution en langage naturel : Saisie des donnes, envisager tous les cas : +, - , x, /. Attention la division par zro qui est impossible Structure de donnes : 2 oprandes : des entiers Un oprateur boolen : +, -, * , /
M.Rezig
17
Cours et Exercices Corrigs en Algorithmes Algorithme : Action : calcul Var : a, b : rel op : boolen Dbut Ecrire ( saisissez le premier entier ) Lire (a) Ecrire ( saisissez loprateur ) Lire (op) Ecrire ( saisissez la deuxime variable ) Lire (b) Selon que : Op = + : Ecrire (a+b) Op = * : Ecrire (a*b) Op = / : Si b= 0 alors crire ( division impossible ) Sinon crire (a/b) Op = - : Ecrire (a-b) Fin selon Fin
Dpartement de Gestion
Exercices en utilisant les structures rptitives TANT QUE et REPETER JUSQU'A et POUR
Exercice 13 Ecrire le Algorithme qui affiche la somme dune suite dentiers saisie par lutilisateur se terminant par zro. Exemple : lutilisateur entre 1, puis 5, puis 2, puis 0 : affiche : 8 1) donner les spcifications 2) donner la solution en langage naturel 3) indiquer les structures de donnes 4) faites lalgorithme Spcifications : - donnes : suite de nombre entiers se terminant par zro - rsultat : la somme de ces entiers Solution en langage naturel : tant que lentier saisi nest pas zro, lajouter la somme partielle et saisir lentier suivant. Structure de donnes : - entier : entier courant (saisi) - entier : somme partielle Algorithme : Action : Somme Suite Var : a, s : entiers Dbut s<=0 Lire (a) Tant que a 0 faire Dbut s<=s+a Lire (a) Fin Ecrire (s) Fin
Exercice 14 Ecrire un algorithme qui affiche la moyenne dune suite dentiers se terminant par zro (le zro nentrant pas en compte dans la moyenne : il est juste la pour indiquer la fin de saisie) 1) donner les spcifications 2) donner la solution en langage naturel 3) indiquer les structures de donnes
M.Rezig
18
Cours et Exercices Corrigs en Algorithmes 4) faites lalgorithme Spcification : - donnes : suite dentier se terminant par zro - rsultat : la moyenne de ces entiers (zro exclu)
Dpartement de Gestion
Solution en langage naturel : Tant que lentier saisi diffrent de 0 alors ajouter lentier aux entiers prcdents et faire la moyenne (cest dire diviser par le nombre dentiers Structures de donnes : - entier : entier saisi - entier : rsultat moyenne Algorithme : Action : Moyenne Var : n, moy, s : entiers Dbut : moy<=0 s<=0 Lire (n) Tant que n 0 faire Dbut Moy <= moy*s+n)/(s+1) s<=s+1 lire (n) fin Ecrire (moy) Fin Exercice 15 Ecrire un algorithme permettant la saisie dune suite dentiers se terminant par zro et vrifier si cette suite contient deux entiers conscutifs gaux en utilisant les structures tant que. 1) donner les spcifications 2) donner la solution en langage naturel 3) indiquer les structures de donnes 4) faites lalgorithme Spcifications : - donnes : suite dentier se terminant par zro - rsultat : vrai si deux entiers conscutifs, faux sinon. Solution en langage naturel : comparer lentier courant et le prcdent. Et tant que ils sont diffrents, on continu la lecture et tant que lentier courant est diffrent de zro. Structures de donnes : - entier : nombre courant - entier : nombre prcdent Algorithme : Action : Entiers conscutifs Var : nc, np : entier {on dsignera par nc le nombre courant et np le nombre prcdent} Dbut Lire (nc) np<=nc-1 {pour tre sur que le nombre courant ne sera pas le mme que le nombre prcdent ds le dpart on affecte la valeur nc1 au nombre prcdent. On aurait tout aussi bien pu lui donner la valeur zro) Tant que nc 0 et np nc faire Dbut np<=nc lire (nc) fin Si nc 0 alors crire ( oui )
M.Rezig
19
Cours et Exercices Corrigs en Algorithmes Sinon crire ( non ) Fin Refaire le mme algorithme en utilisant une structure rpter jusqu' Action : Entiers conscutifs Var : nc, np : entiers Dbut Lire (nc) Si nc 0 alors Rpter Dbut np <= nc lire (nc) jusqu' (nc=np ou nc=0) Si nc=0 alors crire ( oui ) Sinon crire ( non ) Fin Exercice 16 Ecrire un algorithme qui affiche le maximum dune suite se terminant par zro 1) donner les spcifications 2) donner la solution en langage naturel 3) indiquer les structures de donnes 4) faites lalgorithme Spcifications : - donnes : une suite dentiers se terminant par zro - rsultat : un entier : le maximum de cette suite
Dpartement de Gestion
Solution en langage naturel : comparer lentier courant avec le maximum et tant que nc<max on continue, sinon on affiche la rsultat et on continue, et tant que nc 0 Structures de donnes - n : entier courant (saisi) - max : entier max de la suite Algorithme : Action : max suite Var : n, max : entiers Dbut Lire (n) Max<=n Tant que n 0 faire Dbut Lire (n) Si max<n alors max<=n Fin Ecrire (max) Fin Exercice 17 Ecrire un programme mettant en uvre le jeu suivant : Le premier utilisateur saisi un entier que le second doit deviner. Pour cela, il a le droit autant de tentatives quil souhaite. A chaque chec, le programme lui indique si lentier cherch est plus grand ou plus petit que sa proposition. Un score indiquant le nombre de coups jous est mis jour et affich lorsque lentier est trouv. 1) donner les spcifications 2) donner la solution en langage naturel 3) indiquer les structures de donnes 4) faites lalgorithme Spcifications :
M.Rezig
20
Cours et Exercices Corrigs en Algorithmes - donnes : nombre entier - rsultat : nombre de tentatives
Dpartement de Gestion
Solution en langage naturel : saisir un nombre entier par le premier joueur. Tant que le joueur 2 n saisie, dire si n est > ou < nombre cherch, incrmenter de 1 et continuer. Quand le rsultat est trouv, afficher le nombre de tentatives. Structures de donnes : - a : nombre saisi par lutilisateur 1 - n : nombre saisi par lutilisateur 2 - t : tentatives Algorithme : Action : devinette Var : a, n, t : entiers Dbut : Lire (a) Lire (n) t=0 Tant que a n faire Dbut Si n>a alors crire ( nombre cherch plus petit ) Sinon crire ( nombre cherch plus grand ) t<=t+1 lire (n) fin crire (t+1) fin Exercice 18 Ecrire un algorithme permettant de calculer le PGCD de deux nombres en utilisant lastuce suivante : soustraite le plus petit des deux entiers du plus grand jusqu' ce quils soient gaux Ecrire le mme programme en utilisant lalgorithme dEuclide : dune part en utilisant uniquement les structures TANT QUE, dautre part en utilisant uniquement les structures REPETER JUSQU'A. Action : PGCD Var : a, b entiers Lire (a, b) Dbut a = ValAbs (a) b = ValAbs (b) Rpter Selon que a>b a<=a-b a<b b<=b-a jusqua a=b crire (a) Fin Mme programme avec Euclide et des TANT QUE : Action : PGCD Var : a, b, r entiers Lire (a, b) r<=a%b tant que r 0 faire dbut a<=b b<=r r<=a%b fin crire (b) fin
M.Rezig
21
Cours et Exercices Corrigs en Algorithmes Mme programme avec Euclide et des REPETER JUSQU'A : Action : PGCD Var : a, b, r entiers Lire (a, b) Rpter r<=a%b a<=b b<=r jusqu' r=0 crire (b) fin
Dpartement de Gestion
Exercice 19 Ecrire avec la commande POUR un algorithme qui permet de faire la somme dune suite de nombre entre par lutilisateur. Faire la mme chose en comptant par pas de 1. Action :somme_nombre Var : k, nb, n, somme : entier Dbut : Somme <= 0 Ecrire ( combien voulez-vous entrer de nombres ? ) Lire (nb) Pour k de 1 nb faire Dbut Lire (n) Somme<=somme + n Fin Ecrire (somme) Fin Mme programme par pas de 1 : Action : somme_entier Var : k, nb, n, somme : entiers Dbut : Somme<=0 Ecrire ( combien voulez-vous entrer de nombres ? Lire (nb) Pour k de nb 1 par pas de 1 faire Dbut Lire (n) Somme<=somme + n Fin Ecrire (somme) Fin Exercice 20 Traduire le POUR de lalgorithme suivant en REPETER JUSQU'A : Action : bidon Var : k, nb : entiers Dbut Lire (nb) Pour k de 1 nb faire Ecrire (k) Fin Action : Bidon Var : k, nb : entier Dbut Lire (nb) K<=1 Si nb>0 alors Rpter crire (k) K<=k+1
M.Rezig
22
Cours et Exercices Corrigs en Algorithmes Jusqu k>nb Fin Exercice 21 Ecrire une fonction qui fait la somme des entiers compris dans un intervalle. Fonction : intervalle (a, b ; entiers) : entier Var : k, somme : entier Dbut Somme <= 0 Pour k de a b faire Somme<=somme + k Retourner (somme) Fin Exercice 22 Ecrire une fonction multiplication de a et b par addition successives. Fonction : multiplication (a, b : entiers) : entier Var : k, produit : entiers Dbut produit<=0 Pour k de 1 a faire Produit<=produit + b Retourner (produit) Fin
Dpartement de Gestion
M.Rezig
23
Cours et Exercices Corrigs en Algorithmes Fonction : maximum (tab : Tableau dentier n :entier) : entier Var : indice, i, max : entiers Dbut Max<=tab[0] Indice <=0 Pour i de 1 n-1 faire Si tab[i]>max alors max<=tab[i] indice<=i Retourner (indice) Fin
Dpartement de Gestion
Exercice 25 Ecrire une fonction Afficher qui affiche a lcran le contenu dun tableau. Ecrire aussi laction principale qui permettra de comprendre comment fonctionne cette fonction afficher. {Ne pas oublier dindiquer les paramtres du tableau !} Const : MAX : entier=100 Type : Ttab : Tableau [MAX] dentier Fonction Afficher (tab : tableau dentiers, n entiers) Var : i entier Dbut : Pour i de 0 n-1 Ecrire (tab[i], ) Fin Action principale Var t1 t2 : Ttab Dbut T1[0]<=1 T1[1]<=3 T2[0]<=4 T2[1]<=5 T2[2]<=7 Afficher (T1, 2) Afficher (T2, 3) Fin Rsultat lcran : 13 457 Exercice 26 Ecrire une fonction qui permet la saisie dun tableau. Faite aussi laction principale qui permettra daccder a cette fonction saisie mais aussi dafficher dans un second temps le rsultat Fonction : saisie (Stab : tableau dentiers, N :entier) Var : i entier Dbut : Pour i de 0 n-1 faire Lire (tab[i]) Fin Action principale Var : tabl : Ttab Dbut
M.Rezig
24
Cours et Exercices Corrigs en Algorithmes Saisie (toto, 10) Afficher (toto, 10) Fin Ou afficher est la fonction de lexercice 1.
Dpartement de Gestion
Exercice 27 Ecrire une fonction qui calcule le nombre dinversion dun tableau de taille n (cest dire i<j et tab[i]>tab[j] pour tout i et j.) Fonction inversion (tab : tableau dentiers, N entier) Var : j, C, i entiers Dbut C<=0 Pour i de 0 n-2 faire Dbut Pour j de i+1 n-1 faire Si tab[i]>tab[j] alors C<=C+1 Fin Retourner ( C ) Fin Exercice 28 Ecrire une action qui affiche les n premiers lments de la suite dfinie par u0=1 et un+1=somme de k=0 jusqu' n de (uk*un-k) Aide : stocker les lments dans un tableau toto avec toto[0]=1. Puis on utilise une boucle imbrique pour calculer toto[n+1]=somme k=0 k=n de toto[k]*toto[n-k]. Action Suite (E : d :entier) Var : toto : Ttab, i, k : entiers Dbut : Toto[0]<=1 Pour I de 1 d-1 faire Toto[i]<=0 Pour k de 0 n-1 faire Toto[i]<=toto[i]+toto[k]+toto[i-1-k] Afficher (toto, d) Fin Exercice 29 Voyons maintenant quelques exercices rudimentaires de changements dans un tableau Ecrire une action permettant de remplacer toutes les occurrences de x par y dans un tableau de taille n. Ecrire un algorithme qui change les valeurs des cases i et j dans un tableau. Ecrire un programme qui inverse un tableau. (exemple : 1 5 6 7 3 devient 3 7 6 5 1) Action : Remplacer (E : x : entier, E : y : entier, ES tab : tableau dentiers, E : n : entier) Var : i :entier Dbut Pour i de 0 n-1 faire Si tab[i]=x alors tab[i]<=y Fin Action : Echanger (E : i : entier, E : j : entier, ES : tab : tableau dentier, E : n :entier) Var : temp Dbut Si i<n ET j<n alors Temp<=tab[i] Tab[I]<=tab[j] Tab[j]<=temp Fin
M.Rezig
25
Cours et Exercices Corrigs en Algorithmes Action : inverser (ES : tab : tableau dentiers, E : n : entier) Var : i :entier Dbut Pour i de 0 n/2 1 faire Echanger (i, n-1-in tab, n) {ou Echanger est la deuxime action de cet exercice} Fin
Dpartement de Gestion
2 5 7 9 Comment insrer 6 dans le tableau tri (en supposant quil ny a pas de doublon dans le tableau) ? - je cherche la bonne position (ici : la case dindice 2) - dcalage droite si ncessaire :
0 1 2 3 4
2 0
5
1
7 7 9 Insertion de llment
2 3 4
On a donc ici le dcoupage fonctionnel : On va donc crer une fonction IndiceEltSup qui cherche la bonne position, une action Insrer qui inclue le nombre entr dans la bonne case du tableau, et une action DcalageDroite qui dcale comme dans lexemple toutes les cases dun rang vers la droite si ncessaire. Const MAX=100 Type TtabVar = entit (tab : tableau[MAX] dentiers, taille : entier) Fonction IndiceEltSup (tvt : TtabVar, entier, n : entier) : entier Var : i : entier Dbut Tant que (i tvt.taille ET tvt.tab[i]<n) i<=i+1 retourner (i) Fin Action DcalageDroite (ES : tvt : TtabVar, E : i : entier) Var : j : entier Dbut Pour j de tvt.taille 1 i par pas de 1 faire Tvt.tab[j+1]<=tvt.tab[j] Tvt.taille++ Fin Action Insrer (ES : tvt : TtabVar, E : i : entier, E : i : entier) Dbut DcalageDroite (tvt, i) Tvt.tab[i]<=i Fin Action SaisieTri (S : tvt : TtabVar) Var : rep : chane, nb : entier, i : entier Dbut
M.Rezig
26
Cours et Exercices Corrigs en Algorithmes Tvt.taille<=0 Rpter Ecrire (Rentrer encore un entier ?) Lire (rep) Si rep non alors Lire (nb) I<=IndiceEltSup(tvt, nb) Si non(i<tvt.taille ET tvt.tab[i]=nb) Insrer (tvt, i, nb) Jusqu rep= non ou tvt.taille=MAX Fin
Dpartement de Gestion
Exercice 31 Faire un algorithme qui fait une recherche dichotomique dans un tableau tri. On pourra utiliser les fonctions de lexercice prcdent. Nous allons crer une action qui dfinie la zone de recherche, puis laction RechercheDicho qui oprera la recherche dichotomique dans lintervalle dfinie par la zone de recherche. Action ZoneRecherche (E : tvt : TtabVar, E : n : entier, ES : Binf : entier, ES : Bsup : entier) Var : milieu : entier Dbut Milieu <= (Binf + Bsup)/2 Si tvt.tab[milieu]=n alors Dbut Binf<=milieu Bsup<=milieu Fin Sinon Si tvt.tab[milieu]>n alors Bsup<=milieu 1 Sinon Binf<=milieu+1 Fin Fonction RechercheDicho (E : tvt : TtabVar, E : n : entier) Var : Binf, Bsup : entiers Dbut Binf<=0 Bsup<=tvt.taille 1 Tant que Bsup>Binf faire ZoneRecherche (tvt, n, Binf, Bsup) Si Bsup=Binf alors Retourner (Binf) Sinon retourner ( -1) Exercice 32 Faire un algorithme qui supprime une valeur dans un tableau tri. On pourra utiliser des fonctions des deux exercices prcdents. Le but est dutiliser la recherche dichotomique de lexercice prcdent pour trouver dans le tableau lindice de la valeur que lon veut supprimer puis faire un dcalage gauche pour remettre en place les valeurs (sans quil y ait de vide dans une case du tableau) Action Supprimer (ES : tvt : TtabVar, E : n : entier) Var : i : entier Dbut i<=RechercheDicho(tvt, n) Si i -1 alors DecalageGauche (tvt, i) Fin
M.Rezig
27
Cours et Exercices Corrigs en Algorithmes Action DecalageGauche (Es : tvt : TtabVar, E : i : entier) Var : j: entier Dbut Pour j de i+1 tvt.taille 1 faire Tvt.tab[j 1] <= tvt.tab[j] Tvt.taille <= tvt.taille 1 Fin
Dpartement de Gestion
M.Rezig
28