Vous êtes sur la page 1sur 8

Algorithmique - Correction du TD3

IUT 1re Anne

18 dcembre 2012

1 Les boucles (suite)


Exercice 1. Ecrire un algorithme qui reoit en entre un nombre entier de 1 10 et affiche en sortie la table de
multiplication de ce nombre. Par exemple, si lalgorithme reoit le nombre 7, il affichera la table :
17 = 7
2 7 = 14
...
10 7 = 70

Algorithme 1: Table de Multiplication


variables
entier i ,n

dbut
lire n
pour i de 1 10 faire
afficher i " fois " n " est gal " i n
fin

Exercice 2. A la naissance de Marie, son grand-pre Nestor, lui ouvre un compte bancaire. Ensuite, chaque anniversaire, le
grand pre de Marie verse sur son compte 100 e, auxquels il ajoute le double de lge de Marie. Par exemple, lorsquelle a deux ans,
il lui verse 104 e. Ecrire un algorithme qui permette de determiner quelle somme aura Marie lors de son n-ime anniversaire.

Algorithme 2: Compte de Marie


variables
entier compte,age

dbut
compte 0
pour age de 1 n faire
compte compte + 100 + (2 age)
afficher "Le compte de Marie au n-ime aniversaire est " compte
fin

Exercice 3. La population des Sims Alpha est de 10, 000, 000 dhabitants et elle augmente de 500, 000 habitants par an. Celle des
Sims Beta est de 5, 000, 000 habitants et elle augmente de 3% par an. Ecrire un algorithme permettant de dterminer dans combien
dannes la population de Sims Beta dpassera celle des Sims Alpha.

1
Algorithme 3: Populations alpha et beta
variables
entier annes,alpha,beta

dbut
alpha 10 000 000
beta 5 000 000
annes 0
tant que beta alpha faire
annes annes + 1
alpha alpha + 500 000
beta beta 1.03
afficher "Il faut " annes " annes pour que la population de beta dpasse celle de alpha"
fin

Exercice 4. Corriger le programme C++ suivant afin de rsoudre le problme suivant :


Donnes : un nombre entier positif n
1
Rsultat : le rsultat de la suite harmonique : n
P
i =1 i

Algorithme 4 Suite Harmonique


#include <iostream >
using namespace std ;

i nt main ( )
{
i nt i , n ;
f l o a t somme = 0 ;
cout << " Entrer l e nombre e n t i e r : " ;
cin >> n ;
for ( i = 1 ; i <= n ; i ++)
somme = somme + 1 . 0 / i ;
cout << "Le r s u l t a t e s t : " << somme << endl ;
return 0 ;
}

Exercice 5. Construire un algorithme permettant dvaluer vos chances de gagner dans lordre ou dans le dsordre
au tierc, quart ou quint. De manire formelle, le problme est le suivant :
Donnes : un nombre p de chevaux partants et un nombre j {3, 4, 5} de chevaux jous
Rsultat : la probabilit de gagner au jeu dans lordre, et la probabilit de gagner au jeu dans le dsordre

2
Rappel : les formules habituelles de comptage sont donnes dans la table ci-jointe.

Nombre de possibilits de construire une liste ordonne, avec rptitions, de j lments pj


parmi p
p!
Nombre de possibilits de construire une liste ordonne, sans rptition, de j lments (p j )!
parmi p
p!
Nombre de possibilits de construire un ensemble non ordonn, sans rptition, de j l- (p j )! j !
ments parmi p

Note : dans la correction on utilise la fonction factorielle dj dfinie en cours et en TD. Nhsitez pas rutiliser les
fonctions ou procdures que vous avez dj construites.

Algorithme 5: Tierc
variables
entier p, j

dbut
afficher "Chevaux partants : "
lire p
afficher "Chevaux jous : "
lire j
afficher "Probabilit de gagner dans lordre : " fact(p j )/fact(p)
afficher "Probabilit de gagner dans le dsordre : " fact(p j ) fact( j )/fact(p)
fin

2 Les tableaux
Exercice 6. Corriger lalgorithme en pseudo-code suivant afin de rsoudre le problme suivant :
Donnes : deux vecteurs p et q dans un espace (Euclidien) 3 dimensions
Rsultat : la somme des vecteurs p + q

Algorithme 6: Somme De Vecteurs


variables
rel p[3]
rel q[3]
rel r[3]

dbut
pour i 0 2 faire
r[i ] p[i ] + q[i ]
fin

Exercice 7. Ecrire un algorithme permettant de rsoudre le problme suivant :


Donnes : deux vecteurs p et q dans un espace (Euclidien) 3 dimensions
Rsultat : le produit scalaire de p et q

3
Algorithme 7: Produit Scalaire
variables
rel p[3]
rel q[3]
rel v

dbut
v 0
pour i 0 2 faire
v v + (p[i ]*q[i ])
afficher v
fin

Exercice 8. Pour sa naissance, la grand-mre de Gabriel place une somme de 1000 e sur son compte pargne r-
munr au taux de 2.25% (chaque anne le compte est augment de 2.25%). Dvelopper un algorithme permettant
dafficher un tableau sur 20 ans associant chaque anniversaire de Gabriel la somme acquise sur son compte.

Algorithme 8: Compte de Gabriel


variables
rel compte[21], i

dbut
compte[0] 1000
pour i 1 20 faire
compte[i ] compte[i ] 1.0225
fin

Exercice 9. Felix est un fermier qui dispose dun couple de shadoks capables de se reproduire vitesse phnomnale.
Un couple de shadocks met deux mois pour grandir ; partir du troisime mois, le couple de shadocks engendre une
paire de nouveaux shadocks (qui mettront deux mois pour grandir et donc trois mois pour engendrer une nouvelle
paire, etc.). Et surtout, les shadoks ne meurent jamais !
Daprs cet exercice le nombre de couples de shadoks F n chaque mois n obit la loi :
F1 = 1
F2 = 1
F n = F n1 + F n2
Dvelopper un algorithme permettant de construire le tableau des couples depuis le premier jusquau 20me mois.

Algorithme 9: Suite de Fibonacci


variables
rel couples[20]

dbut
couples[0] 1
couples[1] 1
pour i 2 19 faire
couples[i ] couples[i 1] + couples[i 2]
fin

Exercice 10. Corriger le programme C++ suivant afin de rsoudre le problme suivant :
Donnes : un tableau de 100 entiers, une valeur entire x
Rsultat : le nombre doccurrences de x dans le tableau

4
Algorithme 10 Nombre dccurrences
#include <iostream >
using namespace std ;

i nt main ( )
{
i nt tableau [ 1 0 0 ] ;
i nt i , x , occurrences ;

cout << " Entrer votre valeur : " ;


cin >> x ;
i = 0;
occurrences = 0 ;
for ( i = 0 ; i < 100; i ++)
occurrences = occurrences + ( x == tableau [ i ] ) ;
cout << occurrences << endl ;
return 0 ;
}

Exercice 11. Nous souhaitons dvelopper un algorithme permettant de rechercher un lment dans un tableau de
100 entiers en partant des deux extrmits. Dans cette perspective, corriger le programme C++ suivant.

Algorithme 11 Recherche Bipolaire


#include <iostream >
using namespace std ;

i nt main ( )
{
i nt tableau [ 1 0 0 ] ;
i nt i , j , x ;
bool trouve ;

cout << " Entrer votre valeur : " ;


cin >> x ;
i = 0;
j = 99 ;
trouve = 0 ;
do
{
trouve = ( tableau [ i ] == x ) | | ( tableau [ j ] == x ) ;
i ++;
j ;
}
while ( ! trouve && i <= j ) ;
cout << trouve << endl ;
return 0 ;
}

Exercice 12. Ecrire un algorithme permettant de rsoudre le problme suivant :


Donnes : un tableau tableau contenant 100 entiers
Rsultat : vrai si les entiers sont conscutifs et faux sinon
Rappel : deux entiers x et y sont conscutifs si et seulement si y = x + 1.

5
Algorithme 12: Elments conscutifs
variables
entier tableau[100], i
boolen conscutifs

dbut
conscutifs vrai
i 0
tant que (conscutifs = vrai) et (i < 99) faire
conscutifs tableau[i + 1] = tableau[i ] + 1
i i +1
afficher conscutifs
fin

Exercice 13. Ecrire un algorithme permettant de rsoudre le problme suivant :


Donnes : un tableau tableau contenant 100 entiers
Rsultat : vrai si le tableau est tri du plus petit au plus grand et faux sinon

Algorithme 13: Test du tri


variables
entier tableau[100], i
boolen tri

dbut
tri vrai
i 0
tant que (tri = vrai) et (i < 99) faire
tri tableau[i ] tableau[i + 1]
i i +1
afficher tri
fin

Exercice 14. Ecrire un algorithme permettant de saisir 100 valeurs et qui les range au fur et mesure dans un tableau.

Algorithme 14: Tri la vole (qui est une forme de tri par insertion)
variables
entier tableau[100], i , j , x
boolen positionn

dbut
pour i de 0 100 faire
afficher "Entrez votre valeur : "
lire x
j i
tant que ( j > 0) et (tableau[ j 1] > x) faire
tableau[ j ] tableau[ j 1]
j j 1
tableau[ j ] x
fin

Exercice 15. Ecrire un algorithme qui inverse lordre dun tableau des 100 entiers tris. En dautres termes, si le tableau est tri
du plus petit au plus grand, alors lalgorithme retourne le tableau tri du plus grand au plus petit ; rciproquement, si le tableau est
tri du plus grand au plus petit, alors lalgorithme retourne le tableau tri du plus petit au plus grand.

6
Note : dans la correction on utilise la fonction permuter dj dfinie en cours et en TD. Rappelons quil ne faut pas hsiter
rutiliser les fonctions ou procdures que vous avez dj construites.

Algorithme 15: Inversion de lordre dun tableau


variables
entier tableau[n], i

dbut
pour i de 0 n/2 faire
permuter(tableau[i ],tableau[n i 1])
fin

Exercice 16. Ecrire un algorithme qui calcule le plus grand cart dans un tableau dentiers.
Rappel : lcart entre deux entiers x et y est la valeur absolue de leur diffrence |x y|.

Algorithme 16: Plus grand cart


variables
entier tableau[n], i , min, max

dbut
min +
max
pour i de 0 n 1 faire
si tableau[i ] < min alors min tableau[i ]
si tableau[i ] > max alors max tableau[i ]
afficher max min
fin

Exercice 17 (*). Ecrire un algorithme de recherche dichotomique permettant de rsoudre le problme suivant :
Donnes : un tableau tableau contenant 1000 entiers (avec rptitions possibles) tris du plus petit au plus grand, ainsi quun
entier x
Rsultat : lindex de la premire occurrence de x dans le tableau sil est prsent, et 1 sinon.

Algorithme 17: Recherche dichotomique avec multiples occurrences


variables
entier tableau[1000], gauche, droite, milieu,x

dbut
lire x
gauche 0
droite 999
rpter
milieu (gauche + droite)/2
si x > tableau[milieu] alors gauche milieu + 1
si x < tableau[milieu] alors droite milieu 1
si x = tableau[milieu] alors droite milieu
jusqu gauche droite
si gauche = droite alors
afficher gauche
sinon
afficher 1
fin

7
Exercice 18 (*). Lalgorithme suivant prtend trier un tableau. Pensez-vous quil termine ? Sil termine effectivement, pensez-
vous que le tableau final est bien tri ?

Algorithme 18: tri Bizzaroide


variables
entier tableau[100]
entier i , t
boolen permut

dbut
rpter
permut faux
pour i 1 99 faire
si tableau[i 1] > tableau[i ] alors
permuter(tableau[i 1], tableau[i ])
permut vrai
fin
fin
jusqu permut = faux
fin

Lalgorithme termine effectivement : la boucle "rpter" sarrte ds lors quil nexiste plus aucune paire (i 1, i )
telle que tableau[i 1] > tableau[i ]. Le tableau final est bien tri car, si ce ntait pas le cas, il existerait au moins une
paire (i 1, i ) telle que tableau[i 1] > tableau[i ]. Pour information, il sagit de lalgorithme du tri bulles qui, en
pratique, est moins efficace que le tri par insertion ou le tri par selection.

Exercice 19 (*). Ecrire un algorithme permettant de rsoudre le problme suivant :


Donnes : un tableau f reprsentant une courbe : chaque couple (x, f [x]) du tableau correspond labscisse et
lordonne de la courbe.
Rsultat : la surface de la courbe par la mthode des rectangles
La mthode des rectangles est illustre dans la figure ci-dessous. Pour chaque entier impair t , les coordonnes du
t me rectangle sont donnes par (t 1, 0), (t + 1, 0), (t 1, f [t ]), (t + 1, f [t ]).

Algorithme 19: Surface dune courbe (la fonction abs retourne la valeur absolue dun rel)
variables
entier f [n], t
rel surfaceTotale, surfaceRectangle

dbut
surfaceTotale 0
pour t de 1 n 2 faire
surfaceRectangle 2.0 abs( f [t ])
surfaceTotale surfaceTotale + surfaceRectangle
fin
afficher surfaceTotale
fin