Exercice1 2PTS
Ecrire un algorithme qui lit un entier positif n puis affiche tous ses diviseurs.
Corrigé :
Algorithme Diviseurs ;
Variables n, i : Entier ;// n la donnée à lire
//et i un indice pour parcourir l’intervalle [1..n] à la recherche des diviseurs de n
Début
//lecture des données
Ecrire("Entrer un entier positif=") ; Lire(n) ;
// Traitement c-à-d parcourir l’intervalle [1..n] avec l’indice i
Pour i de 1 à n Faire
Si ( n Mod i == 0 ) Alors /* Si le reste de la division de n par i est égal à 0 */
Ecrire (i, "Est un diviseur de", n) ;
Finsi
Fin Pour
Fin.
Exercice 2 : 2pts
Ecrire un algorithme avec trois versions qui lit un entier positif n puis calcule et affiche
son factoriel selon la formule n! = 1 x 2 x ... x n.
• Pour...Faire
• Tant que ... Faire
• Répéter ... TantQue...
Corrigé :
• Version Pour... Faire
Algorithme Facto ;
Variables n, i, f : Entier ; // n la donnée, i l’indice de boucle et f pour calculer le factoriel
Début
Ecrire ("Entrer un entier positif=") ; Lire(n) ;
f <- 1 ; /* initialisation du factoriel à 1 puisque 1!=1 */
Pour i de 2 à n Faire
f <- f * i ; /* Pour chaque parcours on multiplie l'ancienne valeur de f par i*/
Fin Pour
Ecrire (n,"!=", f) ;
Fin.2/7
• VersionTantque...Faire
Algorithme Facto ;
Variables n, i, f : Entier ;
Début
Ecrire ("Entrer un entier positif=") ; Lire(n) ;
f <- 1 ; /* initialisation du factoriel à 1 puisque 1!=1 */
i <-2 ; /* initialisation du compteur i */
Tant que (i<= n) Faire
f <- f * i ;/* Pour chaque parcours on multiplie l'ancienne valeur de f par i*/
i <- i + 1 ; /* incrémentation du compteur i */
Fin Pour
Ecrire (n,"!=",f) ;
Fin.
• VersionRépéter...TantQue
Algorithme Facto ;
Variables n, i, f : Entier ;
Début
Ecrire("Entrer un entier positif="), Lire(n) ;
f <- 1 ; /* initialisation de la factorielle à 1 puisque 1!=1 */
i <- 2 ;/* initialisation du compteur i */
Répéter
f<-f * i ; /* Pour chaque parcours on multiplie l'ancienne valeur de f par i*/
i <- i + 1 ;/* incrémentation du compteur i */
TantQue (i<=n)
Ecrire(n,"!=",f) ;
Fin.
Exercice 03 : 2pts
Ecrire un algorithme permettant de :
• Lire un nombre fini de notes comprises entre 0 et 20.
• Afficher la meilleure note, la mauvaise note et la moyenne de toutes les notes.
Corrigé :
Algorithme Notes ;
Variables n, i: Entier ; //n le nombre de notes et i indice de parcours de la boucle note, min, max, s : Réel ; //note entrée à chaque étape, min, max et s sont les notes
//minimale, maximale et la somme des notes
Début
Ecrire("Entrer le nombre de notes=") ;
Lire(n) ; /* On suppose que n est toujours supérieur à zéro */
s<- 0 ; min<- 20 ; max<- 0 ;// min ne peut pas être initialiser par 0 car il risque de garder
//cette valeur comme étant la note minimale même si elle ne figure pas parmi les notes
//entrées.
Pour i de 1 à n Faire
Ecrire("Entrer une note=") ; Lire(note) ;
s <- s + note /* additionner la nouvelle note */
Si ( note < min ) Alors
min <- note ; /* mémorisation de la nouvelle valeur minimale jusqu’ici*/
Fin Si
Si ( note > max ) Alors
max<- note ; /* mémorisation de la nouvelle valeur maximale jusqu’ici */
Finsi
Fin Pour
Ecrire("Meilleur note = ", max) ;3/7
Ecrire("Mauvaise note = ", min) ;
Ecrire("Moyenne des notes = ", s/n) ;
Fin
Exercice 4 : 3pts
Ecrire un algorithme qui calcule le PPCM (Plus Petit Commun Multiple) de deux entiers positifs A et B en utilisant la méthode suivante :
• Permuter, si nécessaire, les données de façon à ranger dans A le plus grand des deux entiers A et B;
• Chercher le plus petit multiple de A qui est aussi multiple de B. Exemple : PPCM(6, 8) = PPCM(8, 6) = est ce que 8 est un multiple de 6 sinon On teste si 16, qui est 8+8, est multiple de 6 si oui on s’arrête sinon on continue Ensuite 24, qui est 16+8, et puisque 24 est multiple de 6 on s’arrête 24.
Corrigé :
1- Lecture de a et b les données5/7
2- Si (a<b) alors permuter a et b ( c<-a ; a<-b ;b<-c ;)
3- Soit ppcm<-a ;
Boucle par exemple tant que ppcm n’est pas multiple de a faire
ppcm<- ppcm+a ;
ppcm<- a ;
tant que (ppcm mod b !=0)faire
ppcm<- ppcm+a ;
fTque
Algorithme PPCM ;
Variables a, b, pp, c: Entier;
Début
Ecrire("Entrer la valeur de a =") ; Lire(a) ;
Ecrire("Entrer la valeur de b =") ; Lire(b) ;
Si ( a < b ) Alors
c <- a ; /*-------------------*/
a <- b ; /* Permutation */
b <- c ; /*------------------*/
Finsi
pp <- a ;
Tant que (((pp) Mod b) !=0) Faire
pp <- pp +a ;
Fin Tant que
Ecrire ("PPCM =", pp) ;
Fin
Exercice 5 : 3pts
Ecrire un algorithme qui calcule la somme harmonique S= 1/1+1/2+...1/N avec N un entier
positif lu à partir du clavier. Exemple : Pour N=3, S=1+1/2+1/3= 1.83
Corrigé : On utilise le même principe du calcul de la somme : s=1+2+...+n s<-0 ;
Pour i de1 à n faire
s<- s+i ;
fPour
Algorithme Somme;
Variables N ,i: Entier ;
s : Réel ;
Début
Ecrire("entrer la valeur de n = ") ; Lire(n) ;
s <- 0 ; /* initialisation de la somme */
Pour i de 1 à n faire
s<- s + 1.0/i ; /* incrémenter la somme avec la nouvelle valeur de 1.0/i */
Fin Pour
Ecrire("somme=",s) ;
Fin.
Probleme :
1) L'algorithme principal du tri par insertion est un algorithme qui insère un élément dans une liste d'éléments déjà triés (par exemple, par ordre croissant).Soit T le tableau de nombres à trier. Le tri par insertion consiste à prendre les éléments de T un par un, dans l'ordre de rangement dans le tableau , et à les insérer dans un tableau au bon emplacement. Supposons que l'on ait déjà trié les n nombres d'indices i=0 à i=n-1 de T. Ces nombres se trouvent dans le tableau T1 dans l'ordre croissant. Le nombre T[n] doit être inséré dans le tableau T1 juste après le nombre de T1 le plus grand qui lui est inférieur ou égal, ou bien juste avant le nombre le plus petit qui lui est supérieur.
2-c) Fonction :
procedure tri_insertion( var T : tableau [1..7] de entier ) ;
Debut
x,j : entier;
Pour i de 1 a n - 1 faire
x = T[i];
j = i;
tantque ( j > 0 et T[j-1] > x ) faire
T[j] = T[j-1];
j = j - 1;
ftque
T[j] = x;
fpr
Fin;