Daniel Amyot et Alan Williams

Slides:



Advertisements
Présentations similaires
Hiver 2010JGA Beaulieu GEF 243B Programmation informatique appliquée Structure de base des programmes en C.
Advertisements

GEF 243B Programmation informatique appliquée
Premier programme en C :
Tris.
Algorithmique (suite)
Portée des variables VBA & Excel
Fonctions & procédures
Le mécanisme des exceptions
Calculs de complexité d'algorithmes
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
Cours MIAGE « Architectures Orientées Services » Henry Boccon-Gibod 1 Architectures Orientées Services Composants de Service Exemple pratique de développement.
(Classes prédéfinies – API Java)
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
Exercices Algorithmiques
LICENCE MIAGE Introduction Programmation Orientée Objet JAVA philippe
et évaluation des compétences
Activités Vocabulaire
Chap. 1 Structures séquentielles : listes linéaires
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Introduction à la programmation (420-PK2-SL) cours 15 Gestion des applications Technologie de linformation (LEA.BW)
Les requêtes La Requête est une méthode pour afficher les enregistrements qui répondent à des conditions spécifiques. La requête est donc un filtre.
Langage C Révision.
Introduction à la programmation (420-PK2-SL) cours 12 Gestion des applications Technologie de linformation (LEA.BW)
44 Contrôle du déroulement du programme. 4-2 Objectifs A la fin de ce cours, vous serez capables de : Utiliser les constructions de prise de décision.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Les éléments de base de l’algorithmique
Analyse lexicale Généralités Expressions rationnelles Automates finis
88 Utilisation des arrays, des chaînes et des classes conteneurs.
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Python La programmation objet
Introduction à la programmation (Java)
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
Base de programmation Script unity en c#.
La Saint-Valentin Par Matt Maxwell.
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Une nouvelle structure de données : les tableaux
1. 2 PLAN DE LA PRÉSENTATION - SECTION 1 : Code HTML - SECTION 2.1. : CSS (Méthode 1) - SECTION 2.2. : CSS (Méthode 2) - SECTION 3 : JavaScript - SECTION.
Contrôle de types Les types en programmation Expressions de types Un contrôleur de types Equivalence de types Conversions de types Généricité.
Notre calendrier français MARS 2014
IFT 6800 Atelier en Technologies d’information
LIFI-Java 2004 Séance du Jeudi 9 sept. Cours 1. La notion de langage Décrire une tâche à effectuer –programme Écrire à un haut niveau –facile pour lutilisateur.
COURS DE PROGRAMMATION ORIENTEE OBJET :
COURS DE PROGRAMMATION ORIENTEE OBJET :
CSI 1502 Principes fondamentaux de conception de logiciels
CSI 1502 Principes fondamentaux de conception de logiciels
ITI1520 Lab #6 – Les tableaux Traduit et adapté de versions antérieures créées par Sylvia Boyd, Romelia Plesa, Alan Williams, et Daniel Amyot.
Java, les objets : tout de suite ! Rassembler, grouper les objets
C'est pour bientôt.....
Veuillez trouver ci-joint
SUJET D’ENTRAINEMENT n°4
Les méthodes en java • Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. • Une méthode pour être utilisée.
Structures des données
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
CALENDRIER-PLAYBOY 2020.
Algorithmique Les structures Rappel L'enchaînement séquentiel
4 Introduction des objets. Les chaînes et tableaux
Septembre Semaines du 2 au 13 septembre DATECOURSEXERCICESEXERCICES à fairePOUR le Jeudi 5 Vendredi 6 Lundi 9 Prise de contacts. Programme ISN. Déroulement.
LES PILES ET FILES.
Notions de pointeurs en C
ITI1520 Lab #8: Récursivité Gilbert Arbez, Mohamad Eid, Daniel Amyot, Sylvia Boyd, Diana Inkpen et Alan Williams.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
Tutorat en bio-informatique
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 3 – Classes et objets en Java Master 1 SIGLIS1 Java Lecteur - Chapitre 3 Classes et objets en Java.
Strings et Tableaux en Java
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
ITI1520 Lab #7 Classes librairies et Testing avec JUnit Daniel Amyot, Diana Inkpen, Alan Williams.
ITI1520 Lab #9 - Matrices Adapté de versions antérieures créées par Romelia Plesa, Sylvia Boyd, Alan Williams, Diana Inkpen, Daniel Amyot, Gilbert Arbez,
Philippe Gandy - 22 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Transcription de la présentation:

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

Objectifs Solutions de l’examen de mi-session Tableaux en paramètres Récursivité (premier exemple)

Question 1a) Qu’est-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

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 à l’expression 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

Cet algorithme calcule A = X/Y et B = X%Y 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

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

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

Question 3) Traduction en Java DONNÉES: X (tableau d’entiers) 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)

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( );

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

Question 3 (suite) // MODULE DE L’ALGORITHME 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 );

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.

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

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 d’imposition, [0-100]) EN-TÊTE: Pourcentage  PourcentageDansTranche (LimInf, LimSup, Revenu, NbPersonnes)

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

Question 4 (suite) Erreurs fréquentes:  au lieu de < pour la limite supérieure NbPersonnes oublié dans l’en-tête Noms de variables obscures… = au lieu de  pour l’assignation  oublié pour la branche fausse Branches vraie et fausse mal jointes x 100 pour le pourcentage Flèches entre les boîtes de l’algorithme

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

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 ==

String vs. char[] Differences: Acces a un seul caractere: str.charAt(i) vs array[i] Strings ne peut pas être modifié internement apres qu’ils soient crees Pad d’equivalent de array[i] = ‘x’ Les variables String peuvent être assigné a des strings constant ou l’utilisation 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 d’une methode str.length( ) //() obligatoire; appel d’une methode

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

Methodes usuelles de String Informez-vous des méthodes comprises dans la classe String: http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html charAt(…), indexOf(…), length(…) toCharArray(…) equals(…), compareTo(…) concat(…), subString(…), toLowerCase(…), toUpperCase(…) …

Exercices sur les String et char[] Onglet Interactions dans Dr Java Utiliser des constantes String de votre choix et essayer d’invoquer les fonctions usuelles de la classe String Exemples: “012345678”.length() “12345”.charAt(4) puis “12345”.indexOf(‘4’) “minuscule”.toUpperCase() “A”.compareTo(“a”) (et l’inverse?) “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 l’onglet Interaction. (Plus avancé)Ecrire une methode qui prend un String en parametre et qui change les caracteres minuscules en majuscules et reciproquement.

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

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

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

Trace for N = 254 Ligne N ResteDeDigits Compteur Valeurs initiales 254 ? (1) ResteDeDigits = N / 10 25 (2) ResteDeDigits = 0 ? fausse (3) Appel Compteur  NombreDeDigits(ResteDeDigits) (4) Compteur  Compteur + 1

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

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

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

Trace, page 1 Ligne N ResteDeDigits Compteur Valeurs initiales 254 ? (1) ResteDeDigits = N / 10 25 (2) ResteDeDigits = 0 ? fausse (3) Appel Compteur  NombreDeDigits(ResteDeDigits) 2 (4) Compteur  Compteur + 1 3

Implementer cet algorithm en Java

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 l’appel de la methode recursive: 2: Appel Recursif venant de n = 254 Juste apres l’appel de la methode recursive: 3: Revenant d’une 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