Université de Versailles Vanessa Vitse IUT de Vélizy - Algorithmique 2007/2008 TP n 5 (1.5 séances) Pour vous éviter d avoir à recopier les programmes, tous les listings se trouvent dans l archive listingstp5.zip sur e-campus. Tous les exercices doivent être traités, les réponses attendues doivent contenir des explications concises de vos résultats. La clarté de votre rédaction, ainsi que l orthographe seront pris en compte dans la note. Vous rédigerez votre compte rendu dans un fichier type Word (extension.doc ou.odt) que vous déposerez sur e-campus avant la date limite dans l espace prévu à cet effet. Aucun retard ne sera excusé. Variables et type Exercice 1. Considérer le programme suivant : public class Type public static void main ( S t r i n g [ ] args ) int x ; float y ; x = 1234; y = 3.14 f ; int z = 4 2 ; int i = ( int ) 3. 1 4 ; System. out. p r i n t l n ( i = + i ) ; Donner le nom et le type des variables utilisées dans le programme. Qu affiche le programme lors de l exécution? Expliquer. Que se passe-t-il à la compilation si l on modifie l affectation y = 3.14f ; en y = 3.14 ;? Que faire pour éviter l erreur? Pourquoi le programme original compile et s exécute lorsque l on remplace la déclaration float y ; par double y ;? Exercice 2. Ecrire un programme Typage qui déclare une variable x de type int et lui affecte la valeur 1234. Compiler. Recompiler après avoir affecté successivement x avec des valeurs -2, 3.14f, 4.5, "toto", false. Expliquer ce qu il se passe dans chacun des cas.
Opérateurs arithmétiques Exercice 3. Ecrire un programme Arithmetique qui évalue et affiche les expressions arithmétiques suivantes, en essayant de prédire les résultats : 1. 4 / 3 2. 4 / 3.0 3. 4-3 * 5 4. 4 - (3 * 5) 5. (4-3) * 5 6. 117 % 7 7. 0.3-0.2 8. 2-0.1 9. 1.3 / 0 10. (-1.3) / 0 11. 0 / 1.3 12. 0 / 0 Exercice 4. Que signifie l opérateur + dans les deux instructions suivantes? i = 45 + 2.2 System.out.println("Valeur de i :" + i) ; Exercice 5. Ecrire un programme Moyenne qui lit 4 notes (de type double), affiche leur somme et leur moyenne : en utilisant 1 tableau permettant de stocker 4 doubles en utilisant 1 seule variable pour la lecture des doubles (on exploitera chaque nombre après l avoir lu, et on réutilisera la même variable pour lire le double suivant) Dans les deux cas, on utilisera une boucle for pour éviter de réécrire plusieurs fois une même instruction. Pour la lecture d un double saisi au clavier par l utilisateur, on utilisera la méthode nextdouble de la classe Scanner présente dans le package java.util : /... / sc. uselocale ( Locale. US ) ; x = sc. nextdouble ( ) ; Calculer la moyenne de 12, 14.5, 13 et 18.5 des deux façons. Exercice 6. 1. Qu affiche le programme suivant? int i = 1 0 ; int n = i++ % 5 ; System. out. p r i n t l n ( i = + i ) ; System. out. p r i n t l n ( n = + n ) ; 2. Que se passerait-il si au lieu d utiliser l opérateur d incrémentation post-fixe i++, on avait utilisé l opérateur d incrémentation préfixe ++i? Expliquer. 3. Pourquoi l expression 5++ est-elle incorrecte? Opérateurs booléens Exercice 7. Ecrire un programme ExprBool qui évalue et affiche les expressions booléennes suivantes : 2
1. 10 > 5 2. 10 == 5 3. 5 == 5 4. 5 == (11-6) 5. false (5!= 4) 6. false && (5!= 4) 7.!(30 % 3 == 0) 8. (0.3-0.2) == (0.2-0.1) Que se passe-t-il si l on demande d évaluer les expressions suivantes? f a l s e && ( 0 / 0 ) ; (0/0) && f a l s e ; Exercice 8. Ecrire un programme Logique qui 1. demande à l utilisateur d entrer successivement 3 variables entières a puis b puis c 2. évalue les expressions booléennes correspondant aux conditions suivantes a est supérieur à 3 et le quotient entier de la somme de a et de b par c est un multiple de 4 a divise b et a divise c si a divise b alors a divise bc Tester ces expressions avec les valeurs a = 10, b = 22 et c = 2. Exercice 9. Voici un programme qui noie inutilement le poisson. class PoissonNoye1 public static void main ( S t r i n g [ ] argv ) System. out. p r i n t ( Taper 0 ou 1 : ) ; int x = sc. nextint ( ) ; boolean val, r e s ; i f ( x==0) i f ( val == true ) r e s = true ; r e s = f a l s e ; System. out. p r i n t l n ( r e s ) ; Que fait-il? Réécrire ce programme de telle sorte que le corps de la méthode main ne fasse plus que 4 lignes de code. Exercice 10. Dans le même esprit que celui de l exercice précédent améliorer les deux programmes suivants : class PoissonNoye2 3
public static void main ( S t r i n g [ ] argv ) boolean val ; System. out. p r i n t ( Taper 0 ou 1 : ) ; boolean b = ( sc. nextint ( ) == 1 ) ; System. out. p r i n t ( Taper 0 ou 1 : ) ; boolean c = ( sc. nextint ( ) == 1 ) ; i f ( b == true ) i f ( c == true ) i f ( c == true ) System. out. p r i n t l n ( val ) ; class PoissonNoye3 public static void main ( S t r i n g [ ] argv ) boolean val ; System. out. p r i n t ( Entrer un c h i f f r e e n t r e 1 et 9 : ) ; int x = sc. nextint ( ) ; System. out. p r i n t ( Entrer un c h i f f r e e n t r e 1 et 9 : ) ; int y = sc. nextint ( ) ; i f ( y > 1) i f ( y < 5) i f ( x > 2) i f ( x >2) i f ( y < 5) val = ( ( x > 2) && ( x < 2 ) ) ; System. out. p r i n t l n ( val ) ; 4
Manipulation de chaînes de caractères Exercice 11. Ecrire un programme ADemiMot qui extrait et affiche la première moitié d un mot donné par l utilisateur. On utilisera la méthode next() de la classe Scanner et les méthodes length et substring de la classe String. Tester le programme sur les mots ordinateur et programme. Exercice 12. Ecrire un programme TeteAQueue qui inverse la première et la dernière lettre d un mot donné par l utilisateur (indication : chercher dans la classe String une méthode permettant de récupérer un caractère de la chaîne). Tester le programme sur les mots informatique, laval, ko, x. Que se passe-t-il? Exercice 13. Ecrire un programme Prediction qui : demande à l utilisateur de taper un nombre entier strictement compris entre 50 et 100, ajoute ce nombre à 62 et affiche le résultat, supprime le premier chiffre de ce résultat et l ajoute au chiffre restant (ex : 113 1 + 13 = 14), puis affiche le résultat, enlève ce dernier nombre obtenu au premier nombre donné par l utilisateur et affiche ce résultat. Démontrer que le résultat final vaut bien 37. Blocs et Variables locales Exercice 14. Les codes suivants sont-ils corrects? class Code1 public static void main ( S t r i n g [ ] args ) int n = 4 ; int m = 5 ; System. out. p r i n t l n ( n ) ; System. out. p r i n t l n (m) ; class Code2 public static void main ( S t r i n g [ ] args ) int n = 1 0 ; int n = 5 ; System. out. p r i n t l n ( n ) ; Messages d erreur Exercice 15. Compiler le programme suivant. Analyser les différents messages d erreur en les identifiant dans le code. Corriger et recompiler jusqu à ce qu il n y ait plus d erreurs. 5
public class Erreur public static void main ( S t r i n g [ ] arguments ) System. out. P r i n t l n ( exo1 ) ; c h a r a c t e r a ; int a, bb char c = bonjour ; boolean t t = a=2; bb = x+3; t t=x+4; a = x +1; bb= 3 w; bb+1 = 3 ; bb==2; 6