Algorithmique – Travaux Dirigés Master “Technologie et Handicap” : Intensifs 1

Algorithmique – Travaux Dirigés Master “Technologie et Handicap” : Intensifs 1 Corrigé Exercice 1 – Affectations 1. Considérons les algorithmes ci-dessous. (a) Quel sera le contenu des variables a, b et éventuellement c après leur exécution ? (b) Dans chacun des cas ci-dessus, y a-t-il des lignes inutiles, et si oui lesquelles ? 1 // algo 1.1 2 var a, b, c : entier 3 debut 4 a ←1 5 b ←a + 2 6 c ←b - 3 7 fin Solution // a = 1 // b = 3 // c = 0 1 // algo 1.2 2 var a, b : entier 3 debut 4 a ←1 5 b ←a + 2 6 a ←3 7 fin Solution // a = 3 // b = 3 1 // algo 1.3 2 var a, b : entier 3 debut 4 a ←2 5 b ←a + 2 6 a ←a + 2 7 b ←a - 2 8 fin Solution // a = 4 // b = 2 // ligne 5 inutile 1 // algo 1.4 2 var a, b, c : entier 3 debut 4 a ←2 5 b ←4 6 c ←a + b 7 a ←1 8 c ←b - a 9 fin Solution // a = 1 // b = 4 // c = 3 // lignes 6 et 4 inutile // (la 4 parce que la 6 est inutile) 1 // algo 1.5 2 var a, b, c : entier 3 debut 4 a ←1 5 b ←2 6 b ←a + b 7 c ←a + b 8 fin Solution // a = 1 // b = 3 // c = 4 1 // algo 1.6 2 var a, b : car 3 debut 4 a ←’1’ 5 b ←’2’ 6 a ←a + b 7 fin Solution Ne marche pas. On ne peut pas additionner des caractères. Solution (Complément) Dans la plupart des langages de programmation le dernier exemple (1.6) ne générera pas d’erreur mais le résultat ne sera pas souvent ’3’. Selon le langage, ce sera la concaténation de ces caractères en une chaîne de caractères “ab” (cas des langages Python ou javascript), voire “a+b” (cas du shell) ou bien la somme des codes ASCII correspondant aux caractères ’1’ et ’2’, soit 49 + 50 = 99 : le caractère ’c’ (cas des langages C, C++ ou java). Dans très peu de langages, comme PHP ou perl, en revanche, le résultat sera bien 3. Enfin dans d’autres langages comme pascal, qui est un langage fortement typé, la compilation générera une erreur. Master Handi – Université Paris 8 Algo – Corrigé TD – 1 2. Considérons l’algorithme ci-contre (a) Permet-il de permuter les valeurs des valeurs des variables a et b ? (b) Proposer des solutions pour permuter les valeurs de 2 variables numériques ? Chacune des solutions proposées marche-t-elle dans le cas de variables non numériques. (c) Étant données 3 variables a, b et c, proposer un algorithme pour les permuter circulairement, en transférant les valeurs initiales de a à b, de b à c, et de c à a. 1 var a, b : entier 2 debut 3 a ←1 4 b ←2 5 a ←b 6 b ←a 7 fin Solutions (a) Bien sûr que non ! Le résultat est //a = 2, b = 2 (b) var a, b, c : entier debut a ←1 b ←2 c ←a a ←b b ←c fin // Fonctionne avec // n’importe quel // type de données var a, b, c : entier debut a ←1 b ←2 a ←a + b b ←a - b a ←a - b fin // Ne fonctionne // qu’avec des nombres ! (c) Permutation de 3 variables var a, b, c, t : entier debut a ←1 b ←2 c ←3 t ←a a ←c c ←b b ←t fin Exercice 2 1. Quels sont les affichages provoqués par les algo- rithmes ci-contre. Solutions algo 2.1 4.21 8.42 16.84 16 algo 2.2 5 2 2 2.0 Pour l’algo 2.2, si on veut que le résultat soit bien la moyenne de 5 et de 2, c’est à dire 2.5 et non 2.0, il faut forcer la conversion en réel avant la divi- sion, soit en faisant successivement, à la place de la ligne 9, c ←a et c ←c / b, ou bien directe- ment : c ←(1.0 * a) / 2. 2. Écrire un algorithme qui demande un entier à l’uti- lisateur, puis affiche son carré. Solution var a : entier debut lire "Saisissez un entier ", a ecrire a * a fin 1 // algo 2.1 2 var a, b : reel 3 var c : entier 4 debut 5 a ←4.21 6 b ←a * 2 7 ecrire a, b 8 ecrire b * 2 9 c ←b * 2 10 ecrire c 11 fin 1 // algo 2.2 2 var a, b : entier 3 var c : reel 4 debut 5 a ←5 6 b ←2 7 ecrire a, b 8 ecrire a / b 9 c ←a / b 10 ecrire c 11 fin Master Handi – Université Paris 8 Algo – Corrigé TD – 2 Exercice 3 – Conditionnelles 1. Écrire un algorithme qui demande un entier à l’utilisateur, teste si ce nombre est positif (≥0) ou non, et affiche “positif” ou “négatif”. 2. Écrire un algorithme qui demande un entier à l’utilisateur, teste si ce nombre est strictement positif, nul ou stricte- ment négatif, et affiche ce résultat. 3. Écrire un algorithme qui demande un réel à l’utilisateur et affiche sa valeur absolue (sans utiliser de fonction prédéfinie évidemment). 4. Écrire un algorithme qui demande un réel à l’utilisateur et l’arrondit à l’entier le plus proche (les x,5 seront arrondis à l’entier supérieur). 5. Écrire un algorithme qui demande le numéro d’un mois et affiche le nombre jours que comporte ce mois (sans tenir compte des années bissextiles). 6. Écrire un algorithme qui vérifie si une année est bissextile. On rappelle qu’il y a des années bissextiles tous les 4 ans, mais la première année d’un siècle ne l’est pas (1800, 1900 n’étaient pas bissextiles) sauf tous les 400 ans (2000 était une année bissextile). 7. Écrire un algorithme qui demande une date sous la forme de 2 nombres entiers (numéro du jour et numéro du mois) et affiche la saison (ex : 12/02 ; hiver). On supposera que le premier jour de la saison est toujours le 21. 8. Écrire un programme qui demande les coordonnées (x, y) des sommets A, B et C d’un triangle et affiche la nature du triangle (isocèle, équilatéral, rectangle ou quelconque). Solutions 1. Entier positif var a : entier debut lire "tapez un entier",a si a ≥0 alors ecrire a, "est positif" sinon ecrire a, "est négatif" finsi fin 2. Signe d’un entier var a : entier debut lire "tapez un entier",a écrire "ce nombre est :" si a > 0 alors ecrire a, "est strict. positif" sinon si a < 0 alors ecrire a, "est strict. négatif" sinon ecrire a, "est nul" finsi finsi fin 3. Valeur absolue var a : reel debut lire "tapez un réel",a si a>0 alors ecrire "|",a,"|=",a sinon ecrire "|",a,"|=",-a finsi fin 4. Arrondi var a, d : reel var b : entier debut lire "tapez un réel",a b ←a d ←a-b si d < .5 alors b ←b+1 finsi ecrire a, "arrondi à", b fin 5. Nombre de jours du mois var mois : entier debut lire "tapez un numéro de mois (entre 1 et 12)",mois si mois = 2 alors ecrire "28 ou 29 jours" sinon si mois = 4 ou mois = 6 ou mois = 9 ou mois = 11 alors ecrire "30 jours" sinon ecrire "31 jours" finsi finsi fin Master Handi – Université Paris 8 Algo – Corrigé TD – 3 6. Années bissextiles var annee : entier debut lire "tapez une année", annee si annee%4 = 0 et annee%100 ̸= 0 alors ecrire annee, "est bissextile" sinon si annee%400 = 0 alors ecrire annee, "est bissextile" sinon ecrire annee, "n’est pas bissextile" finsi finsi fin ou encore var annee : entier debut lire "tapez une année", annee si ( annee%4 = 0 et annee%100 ̸= 0 ) ou annee%400 = 0 alors ecrire annee, "est bissextile" sinon ecrire annee, "n’est pas bissextile" finsi fin 7. Saisons var jour, mois : entier debut lire "Quel est le jour ?",jour lire "Quel est le mois (entre 1 et 12)",mois si (mois=12 et jour≥21) ou mois=1 ou mois=2 ou (mois=3 et jour<21) alors ecrire "C’est l’hiver !" sinon si (mois=3 et jour≥21) ou mois=4 ou mois=5 ou (mois=6 et jour<21) alors ecrire "Vive le printemps !" sinon si (mois=6 et jour≥21) ou mois=7 ou mois=8 ou (mois=9 et jour<21) alors ecrire "Enfin l’été !" sinon ecrire "Déjà l’automne !" finsi finsi finsi fin Master Handi – Université Paris 8 Algo – Corrigé TD – 4 8. Triangles var xA, yA, uploads/Litterature/ td1-corrige 20 .pdf

  • 13
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager