• Aucun résultat trouvé

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=&#34

N/A
N/A
Protected

Academic year: 2022

Partager "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=&#34"

Copied!
7
0
0

Texte intégral

(1)

1/7 Correction du TD3

Exercice1

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 lintervalle [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 lintervalle [1..n] avec lindice i Pour i  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

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

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 3

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

3/7 Ecrire("Mauvaise note = ", min) ;

Ecrire("Moyenne des notes = ", s/n) ; Fin

Exercice 4

Calculer ab avec a réel et b entier par multiplication successives.

Corrigé :

Algorithme Puissance ;

Variables a, c : Réel ; // va contenir le résultat de la puissance b, i: Entier ;

Début

Ecrire("Entrer la valeur de a=") ; Lire(a) ; Ecrire("Entrer la valeur de b=") ; Lire(b) ;

c  1 ; /* initialisation du résultat du produit */

Pour i  1 à Abs(b) faire // abs() fonction qui retourne la valeur absolue c  c * a ; /*produit de axa… b fois */

Fin Pour

Si ( b < 0 ) Alors /* si b est négative alors le résultat sera 1/c */

c 1 / c;

Fin Si

Ecrire(a," à la puissance ", b, "=", c) ; Fin

Exercice 5

Ecrire un algorithme qui lit un entier positif et vérifie si ce nombre est premier ou non.

Remarque : un nombre premier n'est divisible que par 1 et par lui-même.

Corrigé :

Exemple : soit n==19 ?

Diviseurs de n==19 (à part 1 et 19) :

2, 3, 4, 5, 6, 7, 8, 9 : on vérifie si ses nombres sont des diviseurs de 19

C-à-d : soit i allant de 2 à (n div 2) : à chaque étape tester si i est diviseur de n (c-à-d : si ( n mod i==0) alors i est diviseur 19.

Pour savoir si on a trouvé au moins un diviseur, on doit ajouter une variable nb_div qui permet de compter combien de diviseurs, on a trouvé pour n.

Pour voir si n est premier ou non il suffit de comparer nb_div à 0 Algorithme Premier ;

Variables n, i, nb_div: Entier ; Début

Ecrire("Entrer un entier possitif=") ; Lire(n) ;

nb_div  0 ; /* initialisation du nombre de diviseurs*/

i 2 ;

Tant que (i <= ndiv2) Faire Si ( n Mod i == 0 ) Alors

nb_div nb_div + 1 ; /* incrémentation du nombre de diviseurs */

FinSi i  i +1 ; Fin Tant que

(4)

4/7 nb  0 ;

Pour i 2 à n div 2 faire

Si ( n Mod i == 0 ) Alors

nb 1 ; /* incrémentation du nombre de diviseurs */

FinSi fPour

Si (nb == 0) Alors

Ecrire("C'est un nombre premier") ;

Sinon Ecrire("Ce n'est pas un nombre premier") ; FinSi

Fin Exercice6

Ecrire un algorithme qui lit deux entiers positifs A et B puis calcule et affiche leur PGCD en utilisant la méthode suivante:

• Si A = B; PGCD(A, B) = A

• Si A>B; PGCD(A, B) = PGCD(A-B, B)

• Si A<B; PGCD(A, B) = PGCD(A, B-A)

Exemple : PGCD(18, 45) = PGCD(18, 27) = (PGCD(18, 9) = PGCD(9, 9) = 9 Corrigé :

On a une boucle de type soit Tantque soit Repeter.

Test d’arrêt : lorsque a==b

A chaque étape soit on modifie la valeur de A ou bien celle de B.

Algorithme PGCD ; Variables a, b: Entier ; Début

Ecrire("Entrer la valeur de a =") ; Lire(a) ; Ecrire("Entrer la valeur de b =") ;Lire(b) ; Répéter

Si ( a > b ) Alors a a - b ; FinSi

Si ( a < b ) Alors b b - a ; FinSi

Tantque ( a !=b ) Ecrire("Le PGCD =", a) ; Fin

Exercice7

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

(5)

5/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 8

Ecrire un algorithme qui calcule et affiche les 100 premiers termes de la suite de Fibonacci.

La suite de Fibonacci est définie par :

• F0 = 1

• F1 = 1

• Fn = Fn -2 + Fn -1 pour n > 1.

Corrigé :

On choisit 3 variables qui représentent les termes Fn, Fn-1 et Fn-2 : Fn est représentée par une variable notée Fc (courant)

Fn-1 est représentée par une variable notée Fd (dernier)

Fn-2 est représentée par une variable notée Fad (avant dernier) Itération Fad Fd Fc

i 2 1 1 2

i 3 1 2 3

i 4 2 3 5

i 5 3 5 8

Pour chaque étape de la boucle : 1. On clacule d’abord par Fc Fad+Fd ; 2. Ensuite FadFd ;

3. Et enfin FdFc ;

(6)

6/7 Algorithme Fibo ;

Variables

Fad, Fd, Fc, i: Entier; // Fad pour stocker Fn-2, Fd pour stocker Fn-1 et Fc pour //stocker le Fn Début

Fad  1; Ecrire("F0 = ", Fad) ; Fd  1 ; Ecrire("F1 = ", Fd) ; Pour i de 2 à 99 Faire

Fc  Fad+ Fd ;

Ecrire("F",i," = ", Fc);

Fad  Fd; // préparation de la valeur pour la prochaine itération //Fn-2 prendra Fn-1

Fd  Fc; // Fn-1 prendra Fn Fin Pour

Fin

Exercice 9

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1 à 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  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

Exercice 10

Parmi tous les entiers supérieurs à 1, seuls quatre peuvent être représentés par la somme des cubes de leurs chiffres.

A titre d'exemple, 153 = 13+ 53+ 33 est un nombre cubique.

Ecrire un algorithme permettant de déterminer les trois autres.

Note : les 4 nombres sont compris entre 150 et 410.

(7)

7/7 Corrigé :

Pour des nombres de 3 chiffres entre 150 et 410 :

Comment trouver les chiffres des unités, des dizaines et des centaines ? Pour n 150 à 410 faire

centaine n div 100; comment obtenir dans centaine 1 si n==152 dizaine (n mod100) div 10 ; comment obtenir dans dizaine 5 si n==152 unite  (n mod100) mod 10; comment obtenir dans unite 2 si n==152 fPour

Algorithme cubique ;

Variables n, centaine, dizaine, unite : Entier ; Début

Pour n  150 à 410 faire

centaine  n div 100 ; /* ex : n=150, centaine = 1 */

dizaine  ( n mod 100) div 10 ; /* ex : n=150, dizaine = 5 */

unite  (n mod 100) mod 10 ; /* ex : n=150, unite = 0 */

Si (( centaine^3 + dizaine^3+unite^3) == n) Alors Ecrire(n," est un nombre cubique") ; Fin Si

Fin Pour Fin

Remarque : les nombres cubiques sont : 153, 370, 371 et 407 Exercice 11

Un nombre parfait est un nombre présentant la particularité d'être égal à la somme de tous ses diviseurs, excepté lui-même.

Le premier nombre parfait est 6 = 3 + 2 + 1.

Ecrire un algorithme qui affiche tous les nombres parfais inférieurs à 1000.

Corrigé :

Soit n un entier de 6 à 1000 est représenté par : boucle Pour n6 à 1000 faire Tester si n est parfait ?

Parcourir ses diviseurs, les sommer et comparer cette somme à n pour passer sur tous les entiers compris entre 6 et 1000

s0 ;

Pour i 1 à n div 2 faire

Si ( n mod i==0) alors ss+i;fsi fPour

si(s==n) alors ecrire(n,) ;fsi Algorithme parfaits ; Variables n, s, i: Entier;

Début

//pas de données

Pour n  6 à 1000 faire // parcourir tous les entiers de 6 à 1000 pour chercher les parfaits s 0 ;// pour sommer les diviseurs de n

Pour i  1 à ( n div 2 ) faire

Si (n mod i == 0) alors s  s + i; // si i est un diviseur de n, on l’ajoute à s Finsi

FinPour

Si ( s== n) Alors Ecrire(n, " est un nombre parfait") ; Fin Si

FinPour Fin

Références

Documents relatifs

Soient premier et dernier les extrémités gauche et droite de l'intervalle dans lequel on cherche la valeur x, on calcule m, l'indice de l'élément médian :. m(premier + dernier) div

* Pour son anniversaire Nicolas a distribué 6 cartes d'invitation dans sa classe, 7 cartes dans la classe voisine et 3 cartes dans une autre carte.. Combien de cartes

a) Ecrire une fonction en langage python permettant de savoir si un nombre est parfait ou non (on pourra utiliser la fonction précédente). b) Programmer cet algorithme

Effectue la division euclidienne de 183 par

Effectue la division euclidienne de 183 par

On teste comme dans l’algorithme précédent pour savoir si un entier en divise un autre.?.

— Le produit de deux sommes étant égal à la somme des produits de toutes les parties de la première par chacune des parties de la seconde, le pro- duit de la somme des m diviseurs de

Nos deux premiers résultats traitent, dans ce cadre, des deux problèmes essentiels de la Théorie des fonctions arithmétiques : mesure de répartition et valeur moyenne..