Vous êtes sur la page 1sur 27

Cours et Exercices Corrigs en Algorithmes

INTRODUCTION GENERALE

Khalidwamer

I : ANALYSE, ALGORITHME, PROGRAMMATION :

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)
Problme : un tel langage nexiste pas, on dfinit son propre langage.

khalidwamer

Cours et Exercices Corrigs en Algorithmes


III MTHODOLOGIE DE CONCEPTION DUN ALGORITHME :

Khalidwamer

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)

2-LES RELS (NOMBRES A VIRGULES FLOTTANTES)


Domaine : un sous ensemble fini, dun intervalle de la forme : [-N, -]U[0]U[, N]
Primitives : idem que les entiers, plus les fonctions mathmatiques.
ATTENTION : les calculs sont toujours faux : ils sont approchs. Exemple : AB*(A/B)
En pratique : on utilise des bibliothques implmentant, par exemple, les dcimaux 1000000 de dcimales en assurant,
par exemple, une prcision exacte jusqua la nme . dcimale

3-LE TYPE BOOLEN


Domaine : Vrai, Faux
Primitives : oprateur boolenne, comparaisons
Remarque : se familiariser avec les critures :
Tant que non fini tant que fini = faux
Si correct alors si correct = vrai alors
Retourner (tri) Si tri = vrai alors retourner (vrai) sinon retourner (faux)
4-TYPE CARACTRES
Domaine : cods sur un octet (ASCII) voire deux octets.
Quelque soit le codage :

khalidwamer

Cours et Exercices Corrigs en Algorithmes


a, b,,z : sont conscutifs
A, B,,Z : sont conscutifs
0,,9 : sont conscutifs
lespace _ prcde les caractres alphabtiques.

Khalidwamer

Primitives :
ORD : 1 entier => le caractre ayant ce code
CHR : 1 caractre => son code
A savoir :
- Si (car0) et (car9) : 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.

LES CHANES DE CARACTRES


En ASD :
Var :
ch1 : chane [30] : longueur 30
Ch2 : chane : longueur quelconque
Codage en C/C++
B o n j
o u r
1 octet = 1 caractre
Primitives :
- accs au ime car : ch(i-1)
- concatnation : +
- fonction longueur
- fonction spcifiques (cf doc)
- comparaison =, <,

II-Elments de base de lalgorithme


Notion dobjet
Un algorithme ou une action manipule des donnes pour obtenir un rsultat.
Pour cela on manipule des objets simples ou structurs.

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

khalidwamer

Cours et Exercices Corrigs en Algorithmes

Khalidwamer

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.

2-LES OPRATIONS EN ENTRE SORTIE


Elles permettent de rcuprer une valeur venant de lextrieur (lecture) ou de transmettre une valeur lextrieur
(criture) :
var A, B, C : entiers
plus rapide :
lire (A, B)
Lire (A, B)
crire (A+B)
C<=A+B
Ecrire C

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)

Les structures de contrle conditionnelles :


Une action dcrit un enchanement dactions lmentaires. Lenchanement est dcrit par les structures de contrle.
Une structure de contrle dj vue : lenchanement squentiel
lire (A, B)
C <= 2*A + B
La plupart des autres structures de contrle utilise la notion de condition (expression boolenne) :
Une condition a une valeur qui est, soit vrai, soit fausse.
Pour dterminer la ralit de cette valeur on utilise :
- les oprateurs de comparaisons =, , ,
- les oprateurs boolens (logique) : ET, OU, NON

LALTERNATIVE SI-ALORS-SINON
Elle permet deffectuer tel ou tel traitement en fonction de la valeur dune condition.
Syntaxe :
Exemple :
Lire (note)
Si <condition>
Si note 10
Alors < action _alors>
Alors crire Bravo
Sinon < action _sinon>
Sinon crire Dsol
Remarque, la ligne Sinon <action_sinon> est facultative.

khalidwamer

Cours et Exercices Corrigs en Algorithmes

Khalidwamer

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 A10
Alors dbut
Si A10
Alors crire (oui)
Fin
Sinon crire (non)

STRUCTURE CHOIX MULTIPLES SELON-QUE :


Exemple :
Selon que
Note 16 : crire (TB)
Note 14 : crire (B)
Note 12 : crire (AB)
Note 16 : crire (Passable)
Sinon : crire (ajourn)
Fin selon
Fonctionnement :
1 : la condition 1 est value :
Si la condition 1 est vraie, alors on excute laction correspondante et on quitte la structure selon-que
Si la condition 1 est fausse , on value la condition 2et ainsi de suite.
Si aucune nest vraie on effectue laction sinon.
Syntaxe :
Selon que
<condition 1> : <action 1>
<condition 2> : <action 2>

<condition n> : <action n>


sinon : <action_sinon>
fin selon
Remarque : en programmation, cette structure peut exister mais avec une forme ou un fonctionnement ventuellement
diffrent. Si elle nexiste pas, il faut se souvenir que, en fait, SELON QUE est un raccourci dcriture pour des SI
imbriqus.

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

khalidwamer

Cours et Exercices Corrigs en Algorithmes


SYNTAXE DUNE FONCTION :

Khalidwamer

Fonction <nom_fonction> ( <liste des paramtres> ) : <type de rsultat>


< dclaration des objets locaux la fonction>
dbut
{ corps de la fonction}
retourner rsultat (en gnral vers une fonction ou action principale)
fin

SYNTAXE DUNE ACTION :


Action <nom_action>
< dclaration des objets locaux laction>
dbut
{corps de laction}
fin

EXEMPLE DE FONCTION :
Fonction primtre rectangle (largeur, longueur : entiers) : entier
Dbut
Retourner [ 2*(largeur+longueur)]
Fin

UN EXEMPLE DE FONCTION ET DACTION QUI FAIT APPEL UNE FONCTION :


Soit la fonction max3 qui donne le maximum de trois entiers :
Fontion max3 (x, y, z : entiers) : entier
{cette fonction dtermine le max de trois entier}
var : max :entier
dbut
si x < y
alors
dbut
si z<y alors max <= y
sinon max <=z
fin
sinon dbut
si x < z alors max <= z
sinon max <= x
fin
retourner (max)
fin

<= Remarque : on peut insrer des commentaires entre {}

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

khalidwamer

Cours et Exercices Corrigs en Algorithmes


Khalidwamer
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

LA STRUCTURE TANT QUE :


Syntaxe :
Tant que <condition>
Faire <action>
Cette action peut tre simple ou compose
Exemple :
I<=5
Tant que i5
Faire dbut
Ecrire (i*i)
I<=i+1
Fin
Fonctionnement :
1 : la condition est valu
2 : si la condition est fausse : cest fini, on quitte le tant que
3 : si la condition est vraie, on excute le contenu du tant que puis on remonte ltape 1 tester de nouveau la condition.
Remarque :
Le contenu de la structure tant que peut ne jamais tre excut. Donc cette structure permet en ralit de rpter un
traitement, 0, 1 ou plusieurs fois.
La condition tant value au dbut, les variables tant utilise dans la condition doivent avoir t initialises.
On doit sassurer de la terminaison (sinon le programme ne se termine jamais)
Pour cela, il faut ncessairement que dans le corps de la structure, la condition soit modifi quelque part.
Faisons lanalyse dun programme crit avec une structure tant que :
Action Division entire
{dtermine et affiche le quotient et le reste de la division de 2 entiers}
Var : a, b, q, r : entiers
Dbut : Lire (a, b)
r<=a
q<=0
tant que rb
faire
dbut
q<=q+1
r<=r-b
fin
crire (q, r)
fin
Faire tourner la main pour vrifier si le programme fonctionne. Par exemple vrifions quil marche pour la division de
15 par 6 :
Instructions
Lire (a,b)
r<=a
rb vrai
q<=q+1
r<=r-b

a b
15 6

khalidwamer

15

1
9

Cours et Exercices Corrigs en Algorithmes


rb vrai
q<=q+1
2
r<=r-b
3
rb faux
crire
2 3

Khalidwamer

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

khalidwamer

Cours et Exercices Corrigs en Algorithmes

Khalidwamer

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

Structures de donnes : les tableaux :


Exemple de tableau de 5 entiers :

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

12

15

Le nombre nest pas toujours fix donc pas de structure POUR.

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

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

khalidwamer

10

Cours et Exercices Corrigs en Algorithmes


Khalidwamer
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

khalidwamer

11

Cours et Exercices Corrigs en Algorithmes

Khalidwamer

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)
Si note <10 alors crire ( ajourn )
Sinon crire ( reu )
Fin

khalidwamer

12

Cours et Exercices Corrigs en Algorithmes

Khalidwamer

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

khalidwamer

13

Cours et Exercices Corrigs en Algorithmes


Sinon crire ( la solution est x= , -b/a)
Fin

Khalidwamer

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
. 24 -3
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
Ecrire ( dure de vol : , hr, mr)
Fin
Remarque : lopration % (modulo) permet de calculer le reste de la division entire.

khalidwamer

14

Cours et Exercices Corrigs en Algorithmes

Khalidwamer

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
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))
Fin
3)
Fonction : max2 (a, b : entier) : entier

khalidwamer

15

Cours et Exercices Corrigs en Algorithmes


Var : max2 : entier
Dbut : Si a<b alors max2 <= b
Sinon max2 <= a
Retourner (max2)
Fin

Khalidwamer

4)
Fonction : max3 (a, b, c : entier) : entier :
Var : max3 : entier
Dbut : max3 <= max2 [max2 (a, b), c)
Retourner (max3)
Fin
Exercice 10
Ecrire avec des Si Alors Sinon une action permettant la saisie dune note n (0n20) et qui affiche la mention (n16 :
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 Note16 alors crire ( TB )
Sinon
Si Note14 alors crire ( B )
Sinon
Si Note12 alors crire ( AB )
Sinon
Si Note10 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
1) Ecrire larbre des conditionnelles
2) Corriger les tests pour que tous les cas soient couvert de manire cohrente

khalidwamer

16

Cours et Exercices Corrigs en Algorithmes


3) Faites correspondre les actions et les tests correctement
4) Si possible, crire cet algorithme avec des selon que.
Permis et voiture
Gare
Conduisez moi la gare

Permis
Vive le vlo
Voiture pas chre

voiture
Conduisez moi la gare
Hors la loi

Khalidwamer

Ni permis ni voiture
Voiture pas chre
Vive le vlo

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 : +, -, * , /

Algorithme :
Action : calcul
Var : a, b : rel op : boolen

khalidwamer

17

Cours et Exercices Corrigs en Algorithmes


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

Khalidwamer

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 a0 faire
Dbut
s<=s+a
Lire (a)
Fin
Ecrire (s)
Fin

Attention : dans une structure tant que ne pas oublier dinitialiser!!!

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)
2)
3)
4)

donner les spcifications


donner la solution en langage naturel
indiquer les structures de donnes
faites lalgorithme

Spcification :
- donnes : suite dentier se terminant par zro
- rsultat : la moyenne de ces entiers (zro exclu)

khalidwamer

18

Cours et Exercices Corrigs en Algorithmes

Khalidwamer

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 n0 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 nc0 et np nc faire
Dbut
np<=nc
lire (nc)
fin
Si nc0 alors crire ( oui )
Sinon crire ( non )
Fin
Refaire le mme algorithme en utilisant une structure rpter jusqu'

khalidwamer

19

Cours et Exercices Corrigs en Algorithmes

Khalidwamer

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
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 :
- donnes : nombre entier
- rsultat : nombre de tentatives
Solution en langage naturel : saisir un nombre entier par le premier joueur. Tant que le joueur 2 nsaisie, dire si n est >
ou < nombre cherch, incrmenter de 1 et continuer. Quand le rsultat est trouv, afficher le nombre de tentatives.

khalidwamer

20

Cours et Exercices Corrigs en Algorithmes

Khalidwamer

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 an 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 r0 faire
dbut
a<=b
b<=r
r<=a%b
fin
crire (b)
fin
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

khalidwamer

21

Cours et Exercices Corrigs en Algorithmes


b<=r
jusqu' r=0
crire (b)
fin

Khalidwamer

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
Jusqu k>nb
Fin
Exercice 21
Ecrire une fonction qui fait la somme des entiers compris dans un intervalle.

khalidwamer

22

Cours et Exercices Corrigs en Algorithmes

Khalidwamer

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

exercices sur les Tableaux


Exercice 23
Ecrire une action qui permette la saisie dun tableau croissant : si T[k]<T[k+1] on enregistre, si T[k]>T[k+1] on
redemande la saisie dun nombre plus grand
Const : MAX=100
Ttype : Ttab=tableau [max]dentier
Action : saisie_tableau_croissant
Var : tab : Ttab, i : entier
Dbut
Lire (Tab[0])
Pour i de 1 MAX-1 faire
Rpter lire (tab[i])
jusqu' tab[i] tab[i-1]
Fin
Exercice 24
Ecrire une fonction retournant le maximum dun tableau de taille n.
Faire le mme algorithme mais qui ne retourne que lindice de la case du tableau contenant le maximum du tableau.
Fonction : maximum (tab : Tableau dentier n :entier) : entier
Var : max, i : entiers
Dbut
Max <= tab[0]
Pour i de 1 n-1 faire
Si tab[i]>max alors max<=tab[i]
Retourner (max)
Fin
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

khalidwamer

23

Cours et Exercices Corrigs en Algorithmes


Si tab[i]>max alors
max<=tab[i]
indice<=i
Retourner (indice)
Fin

Khalidwamer

Exercices gnraux sur les actions paramtres

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
Saisie (toto, 10)
Afficher (toto, 10)
Fin
Ou afficher est la fonction de lexercice 1.

khalidwamer

24

Cours et Exercices Corrigs en Algorithmes

Khalidwamer

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
Action : inverser (ES : tab : tableau dentiers, E : n : entier)
Var : i :entier
Dbut
Pour i de 0 n/2 1 faire

khalidwamer

25

Cours et Exercices Corrigs en Algorithmes


Echanger (i, n-1-in tab, n)
{ou Echanger est la deuxime action de cet exercice}

Khalidwamer

Fin

Tableaux tris et dcoupages fonctionnels


Exercice 30
Le but de lexercice est de crer une action de saisie de tableau, qui trie, au fur et mesure des entres, les valeurs par
ordre croissant dans le tableau.
Exemple :
Soit le tableau suivant :
0

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

5
-

7
7
9
Insertion de llment

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 (itvt.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
Tvt.taille<=0
Rpter
Ecrire (Rentrer encore un entier ?)
Lire (rep)
Si rep non alors
Lire (nb)

khalidwamer

26

Cours et Exercices Corrigs en Algorithmes


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

Khalidwamer

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

khalidwamer

27

Vous aimerez peut-être aussi