La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

1 CSI 1500 Lab #8 – 4 novembre 2004 Daniel Amyot et Alan Williams.

Présentations similaires


Présentation au sujet: "1 CSI 1500 Lab #8 – 4 novembre 2004 Daniel Amyot et Alan Williams."— Transcription de la présentation:

1 1 CSI 1500 Lab #8 – 4 novembre 2004 Daniel Amyot et Alan Williams

2 2 Objectifs Solutions de lexamen de mi-session Tableaux en paramètres Récursivité (premier exemple)

3 3 Question 1a) Quest-ce qui sera affiché par le programme Java suivant? int s; int r; int i; int [] x = {4, 8, 2, -9, 6}; s = 1; r = 0; i = x.length - 1; while (i > 0) { s = s * -1; i = i - 1; r = r + s * x[i]; } System.out.println(r); a) -13 b) 20 c) -9 d) -21 e) 11 f) 7 r = -(-9) + 2 – 8 + 4

4 4 Question 1b) Le tableau d'entiers "a" (type int) contient initialement {1, 3, 8}. Une seule des expressions Booléennes suivantes sera évaluée à fausse (faux). Encerclez la lettre correspondant à lexpression qui sera évaluée à fausse. a)(a[1] < 3) || ( (a[1] / 2) == 1) b)!( (a[0] % a[2]) == (a[0] % a[1]) ) c)!(!(fausse) && (a[2] < a[1]) ) d)Math.pow(a[1],2) > a[2] e)Math.abs(a[0] - a[1] + 2) <= 0

5 5 Question 1c) Supposons que X et Y soient les données (entiers), C et D des intermédiaires, et A et B les résultats. Quelles seront les valeurs de A et B si initialement X = 8 et Y = 3? C 0 D X Y D ? faux vrai D D - Y C C + 1 A C B D Cet algorithme calcule A = X/Y et B = X%Y A = 2, B = 2

6 6 Question 2a) while ( x < length ) { y = 0; if ( y < length ) { y = y + 1; } else { x = x + 1; } z = z + 1; Y < Length Y Y + 1X X + 1 X < Length Z Z + 1 Y 0 vrai faux Très brièvement, quest-ce qui est incorrect avec cette traduction dalgorithme? La boucle a été traduite par un if..else!

7 7 Question 2b) X > 0 ? A < X? A A + 1 A A + 5 R A X X - 1 vrai faux vrai faux Ce diagramme est incorrect parce que… Note: le problème est dans la structure, rien à voir avec le contenu! Structure invalide! On doir boucler à un test.

8 8 Question 3) Traduction en Java DONNÉES: X(tableau dentiers) N (nombre déléments dans le tableau X) V(une valeur limite) INTERMÉDIAIRES: Index(index du tableau X allant de 0 à N-1) Somme(somme des valeurs du tableau) RÉSULTAT: Excède (Booléen: Vrai si Somme > V et faux sinon) EN-TÊTE: Excède SommeExcèdeV(X,N,V)

9 9 Question 3 (suite) import java.io.* ; class exam2004Q3 { public static void main( String[] args ) throws IOException { // DÉCLARATIONS DES VARIABLES ET DICTIONNAIRE DE DONNÉES int [] x; // DONNÉE: tableau d'entiers int n; // DONNÉE: nombre d'éléments dans le tableau x int v; // DONNÉE: une valeur limite int index;// INTERMÉDIAIRE: index pour x int somme;// INTERMÉDIAIRE: somme des valeurs du tableau x boolean excède; // RÉSULTAT: vrai si somme > v // LECTURE DES VALEURS DONNÉES System.out.print( "Entrez un tableau de nombres: " ); x = CSI1500.readIntLigne( ); n = x.length; System.out.print( "Entrez une valeur limite: " ); v = CSI1500.readInt( );

10 10 Question 3 (suite) vrai faux Index < N ET SOMME V? Somme Somme + X[Index] Index Index + 1 Index 0 Somme 0 Excède (Somme > V) MODULE:

11 11 Question 3 (suite) // MODULE DE LALGORITHME index = 0; somme = 0; while( index < n && somme <= v ) { somme = somme + x[index]; index = index + 1; } excède = (somme > v); // AFFICHAGE DES RÉSULTATS ET MODIFIÉES À L'ÉCRAN System.out.println( "Le résultat est: " + excède ); } }

12 12 Question 3 (suite) Erreurs fréquentes: –Commentaires manquants – au lieu de <= –N, V, X au lieu de n, v, x (déjà utilisés dans le code) –Points-virgules manquants –Utilisation de if..else pour traduire Excède (Somme > V) –Boolean ou booléen au lieu de boolean –int x []; au lieu de int [] x; –x.length() au lieu de x.length –double v; au lieu de int v; Oui, Java supporte les accents sur les variables (excède). Aucun point enlevé ici.

13 13 Question 4: Algorithme Le système dimpôt canadien a des tranches dimposition (tax brackets en anglais) telles que si le revenu dune personne est plus grand ou égal à la limite inférieure de la tranche, et quil est plus petit que la limite supérieure de la tranche, alors la personne est contenue dans cette tranche dimposition. Supposez que lon vous donne la limite supérieure et la limite inférieure dune tranche dimposition simple pour une année particulière, de même quun tableau « Revenu » de longueur « NbPersonnes » où chaque valeur du tableau représente le revenu annuel dune personne quelconque. Écrivez un algorithme pour déterminer le pourcentage ([0%-100%]) de personnes qui ont un revenu à lintérieur de cette tranche.

14 14 Question 4) (suite) DONNÉES: LimInf(Limite inférieure de la tranche) LimSup (Limite supérieure de la tranche) Revenu(Tableau de revenus) NbPersonnes(Taille du tableau Revenu) INTERMÉDIAIRES: Index (Index pour tableau Revenu) Compte (Nombre de personnes dans la tranche) RÉSULTAT: Pourcentage(Pourcentage de personnes dans la tranche dimposition, [0-100]) EN-TÊTE: Pourcentage PourcentageDansTranche (LimInf, LimSup, Revenu, NbPersonnes)

15 15 Question 4) (suite) Index 0 Compte 0 Index < NbPersonnes ? (Revenu[Index] LimInf) ET (Revenu[Index] < LimSup) ? NbPersonnes NbPersonnes + 1 vrai faux MODULE: Index Index + 1 Pourcentage Compte / NbPersonnes x 100

16 16 Question 4 (suite) Erreurs fréquentes: – au lieu de < pour la limite supérieure –NbPersonnes oublié dans len-tête –Noms de variables obscures… –= au lieu de pour lassignation – oublié pour la branche fausse –Branches vraie et fausse mal jointes –x 100 pour le pourcentage –Flèches entre les boîtes de lalgorithme

17 17 Fin de la correction du midterm String vs Char[] Tableaux en paramètres Récursivité (premier exemple)

18 18 String vs. char[] Ressemblances: –Tout deux sont des collections de caractères –Tout deux indexés de 0 jusquà length - 1 –Tout deux sont des variables de référence Pas de comparaison ==

19 19 String vs. char[] Differences: –Acces a un seul caractere: str.charAt(i) vs array[i] –Strings ne peut pas être modifié internement apres quils soient crees Pad dequivalent de array[i] = x –Les variables String peuvent être assigné a des strings constant ou lutilisation de new is optionelle String str; str = "abc"; str = new String("def" ); –La plupart des operations sur les Strings sont faites avec des methodes. array.length // pas de ( ); non appel dune methode str.length( ) //() obligatoire; appel dune methode

20 20 Conversions: String char[] char[] tableau; char[] tableau2;... // Creer un String venant dun tableau String str = new String( tableau ); // Create array from String tableau2 = str.toCharArray( );

21 21 Methodes usuelles de String Informez-vous des méthodes comprises dans la classe String: g/String.html charAt(…), indexOf(…), length(…) toCharArray(…) equals(…), compareTo(…) concat(…), subString(…), toLowerCase(…), toUpperCase(…) …

22 22 Exercices sur les String et char[] Onglet Interactions dans Dr Java –Utiliser des constantes String de votre choix et essayer dinvoquer les fonctions usuelles de la classe String Exemples: length() charAt(4) puis indexOf(4) minuscule.toUpperCase() A.compareTo(a) (et linverse?) joyeuses.concat( ).concat(fetes) String s1=ab; String s2=ab; s1.equals(s2) (et s1==s2 ?) String s3=merci; char[] tabS3= s3.toCharArray() ; tabS3[0] … Ecrire une methode compteMinuscule qui compte le nombre de caracteres minuscules dans un string. Tester le avec longlet Interaction. (Plus avancé)Ecrire une methode qui prend un String en parametre et qui change les caracteres minuscules en majuscules et reciproquement.

23 23 Recursion – Probleme pratique #1 Ecrire un algorithme recursif qui compte le nombre de digits (chiffres) dans un entier non negatif N

24 24 Recursion – Probleme pratique #1- Solution DONNEES: N INTERMEDIAIRES: ResteDeDigits RESULTAT: Compteur (le nombre de digits dans N) ENTETE:Compteur NombreDeDigits(N)

25 25 Recursion – Probleme pratique #1 - solution – cont. MODULE: ResteDeDigits = N / 10 ResteDeDigits = 0 ? vraie Compteur 1 fausse Compteur NombreDeDigits(ResteDeDigits) Compteur Compteur + 1

26 26 Trace for N = 254 Ligne NResteDeDigi ts Compt eur Valeurs initiales 254?? (1) ResteDeDigits = N / (2) ResteDeDigits = 0 ? fausse (3) Appel Compteur NombreDeDigits(ResteDeDigits) (4) Compteur Compteur + 1

27 27 Trace, page 2 Ligne NResteDeDigi ts Compt eur Valeurs initiales 25?? (1) ResteDeDigits = N / 10 2 (2) ResteDeDigits = 0 ? fausse (3) Appel Compteur NombreDeDigits(ResteDeDigits) (4) Compteur Compteur + 1 Compteur NombreDeDigits(ResteDeDigits) Compteur NombreDeDigits(N) 25

28 28 Trace, page 3 Ligne NResteDeDigitsCompteur Valeurs initiales 2?? (1) ResteDeDigits = N / 10 0 (2) ResteDeDigits = 0 ? vraie (5) Compteur 1 1 Compteur NombreDeDigits(ResteDeDigits) Compteur NombreDeDigits(N) 21

29 29 Trace, page 2 Ligne NResteDeDigit s Compt eur Valeurs initiales 25?? (1) ResteDeDigits = N / 10 2 (2) ResteDeDigits = 0 ? fausse (3) Appel Compteur NombreDeDigits(ResteDeDigits) 1 (4) Compteur Compteur Compteur NombreDeDigits(ResteDeDigits) Compteur NombreDeDigits(N) 252

30 30 Trace, page 1 Ligne NResteDeDigi ts Compt eur Valeurs initiales 254?? (1) ResteDeDigits = N / (2) ResteDeDigits = 0 ? fausse (3) Appel Compteur NombreDeDigits(ResteDeDigits) 2 (4) Compteur Compteur + 1 3

31 31 Implementer cet algorithm en Java

32 32 Regardons comment le code roule Dans votre méthode recursive: Mettez System.out.println() aux endroits suivants (affiche la valeur actuelle of n ): –Immediatement apres la variable locale des declarations 1: Entrant la methode avec n = 254 –Juste avant lappel de la methode recursive: 2: Appel Recursif venant de n = 254 –Juste apres lappel de la methode recursive: 3: Revenant dune recursion avec n = 254 –Juste avant la commande return 4: Returning from method with n = 254, Compteur = 3 –Dans le cas de base 5: Cas de base avec n = 2


Télécharger ppt "1 CSI 1500 Lab #8 – 4 novembre 2004 Daniel Amyot et Alan Williams."

Présentations similaires


Annonces Google