9
Université Sidi Mohammed Ben Abdellah École Supérieure de Technologie de Fès Filière Génie Industriel et Maintenance TD Algorithmique (Série I) ( Correction) Mr KHATORY

140314_094452_p2X9w3

  • Upload
    samim71

  • View
    215

  • Download
    1

Embed Size (px)

DESCRIPTION

algo

Citation preview

  • Universit Sidi Mohammed Ben Abdellah cole Suprieure de Technologie de Fs Filire Gnie Industriel et Maintenance

    TTDD AAllggoorriitthhmmiiqquuee ((SSrriiee II))

    (( CCoorrrreeccttiioonn))

    Mr KHATORY

  • Correction TD1 Algorithme Mr KHATORY page 1/8

    EXERCICES UTILISANT LES STRUCTURES DE CONTROLE CONDITIONNELLES

    1. Ecrire un algorithme permettant de rsoudre une quation du second degr.

    a

    acbbxsolutioncbxax

    2

    4:;0

    22

    Solution1 : ALGORITHME seconddegre VAR a, b, c, delta: REEL DEBUT ECRIRE (" saisissez les valeurs a, b et c de lquation ax+bx+c=0 : ") LIRE (a, b, c) SI (a=0) ALORS ECRIRE (" quation du premier degr ") SI (b0) ALORS ECRIRE ("solution est ", -c/b) SINON ECRIRE (" Pas de solution") FINSI SINON delta b-4*a*c

    SI (delta > 0) ALORS

    ECRIRE (" les solutions sont ",a

    deltaracineb

    2

    )( , " et " , a

    deltaracineb

    2

    )( )

    SINON SI (delta =0) ALORS ECRIRE ( -b/(2a)) SINON ECRIRE (" pas de solutions relles ") FINSI FINSI

    FINSI FIN Solution2 : Avec selon que ALGORITHME seconddegre VAR a, b, c, delta: REEL DEBUT ECRIRE ("saisissez les valeurs de a, b et c de lquation ax+bx+c") LIRE (a, b, c) SI (a=0) ALORS ECRIRE ("quation du premier degr ")

    SI (b 0 ) ALORS ECRIRE ("solution est ", -c/b) SINON ECRIRE (" Pas de solution") FINSI SINON Delta b*b-4*a*c SELONQUE

    Delta = 0 : ECRIRE (( -b/(2a))

    Delta > 0 : ECRIRE (" les solutions sont ",a

    deltaracineb

    2

    )( , " et " , a

    deltaracineb

    2

    )( )

    SINON ECRIRE (" pas de solution relle ") FINSELONQUE FINSI FIN _______________________________________________________________________________________

    Racine(x) est une fonction standard

  • Correction TD1 Algorithme Mr KHATORY page 2/8

    2. Ecrire un algorithme qui donne la dure de vol en heure minute connaissant l'heure de dpart et l'heure d'arrive.

    a. On considre que le dpart et l'arriv ont lieu le mme jour b. On suppose que la dure de vol est infrieure 24 heures mais peut avoir lieu le lendemain.

    Solution n 1: ALGORITHME DureeVol1 VAR h1, h2, m1, m2: ENTIER hr, mr : ENTIER DEBUT ECRIRE (" Entrer horaire de dpart : h min ") LIRE (h1, m1) ECRIRE (" Entrer horaire darrive: h min ") LIRE (h2, m2) mr [h2*60+m2] [h1*60+m1] hr mr div 60 (* division entire*) mr mr mod 60 (*reste de la division entire *) ECRIRE (" La dure de vol est : ", hr , 'H : ', mr," Min") FIN solution n2: ALGORITHME DureeVol2 VAR h1, h2, m1, m2 :ENTIER hr, mr: ENTIER DEBUT ECRIRE (" Entrer horaire de dpart et darrive: ") LIRE (h1, m1, h2, m2) SI (h2 h1)

    ALORS SI (m2 m1) ALORS

    hr h2-h1 mr m2-m1 ECRIRE ("La dure de vol est :",hr," H ",mr," Min") SINON hr h2-h1-1 mr m2+60-m1 ECRIRE ("La dure de vol est :",hr," H ",mr," Min") FINSI SINON

    SI (m2 m1) ALORS

    hr h2-h1+24 mr m2-m1 ECRIRE ("La dure de vol est :",hr," H ",mr," Min") SINON hr h2-h1+24-1 mr m2+60-m1 ECRIRE ("La dure de vol est :",hr," H ",mr," Min") FINSI FINSI FIN

    _______________________________________________________________________________________

  • Correction TD1 Algorithme Mr KHATORY page 3/8

    3. Ecrire un algorithme qui lit trois valeurs entires ( A, B et C) et qui permet de les trier par changes

    successifs Et enfin les afficher dans l'ordre

    ALGORITHME TriSuccessif VAR A, B, C : ENTIER DEBUT ECRIRE (" Entrer Les valeurs A , B et C trier : ") LIRE(A,B,C) SI (A > B ) ALORS ECHANGE(A,B) SI (B > C)

    ALORS ECHANGE(B,C) SI (A > B)

    ALORS ECHANGE(A,B) FINSI

    FINSI SINON

    SI (B > C) ALORS

    ECHANGE(B,C) SI (A >B)

    ALORS ECHANGE(A,B) FINSI

    FINSI FINSI ECRIRE (" Les valeurs A , B et C sont (dans l'ordre): ",A,B,C) FIN

    PROCEDURE ECHANGE(VAR A,B :ENTIER) VAR AUX:ENTIER DEBUT

    AUX A A B B AUX

    FIN

  • Correction TD1 Algorithme Mr KHATORY page 4/8

    4. Ecrire un algorithme calculatrice permettant la saisie du premier entier (a) de l'opration ( + ou ou * ou / : sont des caractres) et du deuxime entier (b) et qui affiche le rsultat.

    ALGORITHME calcul VAR a, b : ENTIER op : CARACTERE DEBUT

    ECRIRE ("Entrer le premier oprande ") LIRE (a) ECRIRE ("Entrer loprateur ") LIRE (op) ECRIRE ("Entrer le deuxime oprande ") LIRE (b) SELONQUE Op = + : ECRIRE ("la somme de ",a, "et de ",b, "est gale",a+b) Op = * : ECRIRE ("le produit de ",a, "et de ",b, "est gale",a*b) Op = / : SI (b= 0) ALORS ECRIRE (" division impossible ") SINON ECRIRE ("la division de ",a, "par ",b, "est gale", a/b)

    FINSI Op = - : ECRIRE ("la soustraction de ",a, "et de ",b, "est gale", a-b)

    SINON ECRIRE (" Opration ",Op," non valide !!") FINSELONQUE

    FIN _______________________________________________________________________________________

    EXERCICES UTILISANT LES STRUCTURES REPETITIVES

    1. crire un algorithme qui demande un nombre de dpart, et qui calcule la somme des entiers jusqu' ce nombre. Par exemple si l'on tape 4 , lalgorithme doit calculer: 1 + 2 + 3+ 4 = 10

    Rcrire l'algorithme qui calcule cette fois la moyenne !

    ALGORITHME Somme_Nombres VAR i, S : ENTIER

    val : ENTIER DEBUT

    ECRIRE("Entrer un nombre (entier):") LIRE (val) S 0 POUR i DE 1 A val FAIRE S S+i FINPOUR ECRIRE (" La somme des nombres de 1

    ", val,"est gale ", S) FIN

    ALGORITHME Moyenne_Nombres VAR i, S : ENTIER val :ENTIER Moy: REEL DEBUT

    ECRIRE("Entrer un nombre (entier):") LIRE(val) S 0 ; i 1

    TANTQUE ( i val) FAIRE

    S S+i i i+1

    FINTANTQUE ECRIRE (" La somme des nombres de 1 ", val,"est ", S) Moy S / val ECRIRE (" La moyenne des nombres de 1 ", val,"est ", Moy)

    FIN

  • Correction TD1 Algorithme Mr KHATORY page 5/8

    2. Ecrire lalgorithme qui affiche la somme des prix d'une suite d'articles en DH (entiers) saisies par

    l'utilisateur et se terminant par zro.

    ALGORITHME Somme_Prix VAR p, S : ENTIER DEBUT ECRIRE("ENTRER Le prix du premier article ") LIRE (p) S 0

    TANTQUE ( p0 ) FAIRE S S+p

    ECRIRE("ENTRER Le PRIX de l'article suivant ( 0 si FIN)") LIRE (p) FINTANTQUE ECRIRE (" La somme des prix est ", S) FIN

    ALGORITHME Somme_Prix VAR p, S : ENTIER DEBUT ECRIRE("ENTRER Le prix du premier article ") LIRE(p) S 0 REPETER

    S S+p ECRIRE("ENTRER Le PRIX de l'article suivant ( 0 si FIN)") LIRE(p)

    JUSQU'A (p =0) ECRIRE (" La somme des prix est ", S) FIN

    Comparaison: Cas d'entre la boucle: Si au dpart p= 0 choisir la boucle TANTQUE Cas particulier (p=0): On change l'algorithme (Boucle REPETER): S 0 REPETER

    ECRIRE("ENTRER Le PRIX de l'article ( 0 si FIN)") LIRE(p) S S+p

    JUSQU'A (p =0) Choisir la boucle REPETER

    ( Problme si p < 0 !!)

    3. Ecrire un algorithme qui demande successivement 10 nombres l'utilisateur, et qui affiche la fin le

    plus grand de ces 10 nombres et son rang dans la liste saisie! Exemple : Entrez le nombre numro 1 : 13

    Entrez le nombre numro 2 : 17 .. Entrez le nombre numro 10 : 5

    Le plus grand de ces nombres est : 17

    C'tait le 2 me nombre saisi

  • Correction TD1 Algorithme Mr KHATORY page 6/8

    SOLUTION:

    ALGORITHME PlusGrand_10Nombres CONST NBRE=10 VAR indice , val : ENTIER

    Indice_grand : ENTIER PLUSGRAND:ENTIER

    DEBUT ECRIRE ("Entrez le nombre numro 1 :") LIRE (val) Indice_grand1 PLUSGRANDval indice 2 TANTQUE ( indice PLUSGRAND

    ALORS Indice_grand indice PLUSGRAND val

    FINSI Indice indice+1

    FINTANTQUE ECRIRE ("le plus grand de ces nombres est:", PLUSGRAND) ECRIRE (" c'tait le", indice_grand " me nombre saisi") FIN

    ALGORITHME PlusGrand _10Nombres CONST NBRE=10 VAR indice , val : ENTIER Indice_grand : ENTIER

    PLUSGRAND:ENTIER DEBUT

    ECRIRE ("Entrez le nombre numro 1: ") LIRE (val) Indice_grand1 PLUSGRANDval indice 2

    REPETER ECRIRE ("Entrez le nombre numro ", indice) LIRE (val) SI val > PLUSGRAND ALORS

    Indice_grand indice PLUSGRAND val

    FINSI Indiceindice+1

    JUSQU'A (indice >NBRE) ECRIRE ("le plus grand de ces nombres est:", PLUSGRAND) ECRIRE (" c'tait le", indice_grand, " me nombre saisi") FIN

    Le mme algorithme avec la boucle POUR : ALGORITHME PlusGrand _10Nombres CONST NBRE=10 VAR indice , val : ENTIER Indice_grand:ENTIER

    PLUSGRAND :ENTIER DEBUT

    ECRIRE("Entrez le nombre numro 1 :") LIRE (val) Indice_grand1 PLUSGRANDval indice 2 POUR indice DE 2 A NBRE ECRIRE("Entrez le nombre numro", indice) LIRE (val) SI val > PLUSGRAND ALORS

    Indice_grand indice PLUSGRAND val

    FINSI FINPOUR ECRIRE("le plus grand de ces nombres est:", PLUSGRAND) ECRIRE(" c'tait le nombre numro :",indice_grand)

    FIN

  • Correction TD1 Algorithme Mr KHATORY page 7/8

    4. Ecrire un algorithme mettant en uvre le jeu suivant entre deux joueurs :

    Le premier utilisateur saisi un entier que le second doit deviner. Pour cela, il a le droit autant de tentatives qu'il souhaite. A chaque chec, le programme lui indique si l'entier est plus grand ou plus petit que sa proposition. Un score est affich lorsque l'entier est trouv.

    ALGORITHME devinette VAR a, n, t : ENTIER DEBUT ECRIRE(" Entrez le nombre deviner :") LIRE (a) ECRIRE("entrez votre premier essai") LIRE (n) t1

    TANTQUE (an) FAIRE

    SI (n>a) ALORS ECRIRE (" Nombre cherch plus petit " ) SINON ECRIRE (" Nombre cherch plus grand ") FINSI t t+1 ECRIRE("Entrez un autre nombre (tentative N : ",t,")") LIRE (n) FINTANTQUE ECRIRE ("C'est Gagn !! Nombre de tentatives est" ,t) FIN Avec la boucle REPETER

    ALGORITHME devinette VAR a, n, t : ENTIER DEBUT ECRIRE(" Entrez le nombre deviner") LIRE (a) t1 REPETER ECRIRE("Entrez un nombre (tentative N : ",t,")") LIRE (n) SELONQUE n>a: ECRIRE (" nombre cherch plus petit que : ",n ) n

  • Correction TD1 Algorithme Mr KHATORY page 8/8

    EXERCICES PROCEDURES ET FONCTIONS

    1. crire une fonction MAXIMUM qui permet de donner le maximum de trois nombres rels. 2. crire une fonction MINIMUM qui permet de donner le minimum de trois nombres rels. 3. crire une procedure MAX_MIN qui permet de donner le maximum et le minimum de trois

    nombres rels (qui fait appel juste la fonction MAXIMUM). 4. crire une fonction PGCD qui retourne le PGCD de deux nombres en utilisant l'astuce suivante:

    soustrait le plus petit des deux entiers du plus grand jusqu' ce qu'ils soient gaux. Ecrire la mme fonction en utilisant l'algorithme d'Euclide: Utiliser les structures TANTQUE puis REPETER JUSQU'A

    Exercices 1 ,2 et 3 voir document cours ! Exercice 4 : FONCTION PGCD(a,b :ENTIER) :ENTIER DEBUT

    REPETER SELONQUE

    a>b : aa-b a