Beruflich Dokumente
Kultur Dokumente
18 dcembre 2012
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.
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
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.
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
dbut
pour i 0 2 faire
r[i ] p[i ] + q[i ]
fin
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.
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.
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 ;
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.
i nt main ( )
{
i nt tableau [ 1 0 0 ] ;
i nt i , j , x ;
bool trouve ;
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
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.
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|.
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.
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 ?
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.
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