iti1520 lab #6 – les tableaux traduit et adapté de versions antérieures créées par sylvia...

22
ITI1520 Lab #6 – Les tableaux Traduit et adapté de versions antérieures créées par Sylvia Boyd, Romelia Plesa, Alan Williams, et Daniel Amyot

Upload: ambrosine-weber

Post on 04-Apr-2015

103 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: ITI1520 Lab #6 – Les tableaux Traduit et adapté de versions antérieures créées par Sylvia Boyd, Romelia Plesa, Alan Williams, et Daniel Amyot

ITI1520Lab #6 – Les tableaux

Traduit et adapté de versions antérieures créées par Sylvia Boyd,

Romelia Plesa, Alan Williams, et Daniel Amyot

Page 2: ITI1520 Lab #6 – Les tableaux Traduit et adapté de versions antérieures créées par Sylvia Boyd, Romelia Plesa, Alan Williams, et Daniel Amyot

Objectifs de ce laboratoire

• Tableaux– Déclaration de la variable de

référence à un tableau– Création des tableaux– Exercices

• Formatage de résultats numériques

Page 3: ITI1520 Lab #6 – Les tableaux Traduit et adapté de versions antérieures créées par Sylvia Boyd, Romelia Plesa, Alan Williams, et Daniel Amyot

Tableaux Java

• Déclaration d’une variable de référence à un tableau:DONNÉE: UnTableau (Référence à un tableau de

nombres réels)

double [] unTableau; // Référence

• Création: unTableau aura la valeur spéciale null jusqu’à ce qu’il soit vraiment créé:UnTableau CréerTableau( 5 )

unTableau = new double[5]; // Taille 5

Page 4: ITI1520 Lab #6 – Les tableaux Traduit et adapté de versions antérieures créées par Sylvia Boyd, Romelia Plesa, Alan Williams, et Daniel Amyot

La création de tableau

• À la déclaration de la variable de référence au tableau, elle contiendra la valeur spécial null (en fait est l’adresse 0).– L’utilisation de la variable de référence ayant

cette valeur (par exemple, unTableau[0]) crée une erreur “null pointer exception” qui plante le programme.

• Après la création d’un tableau (avec new), les éléments du tableau n’ont pas été affecté des valeurs (en Java, les éléments contiennent normalement la valeur 0).– Tenter d’accéder à un élément hors de ce qui est

permis (par exemple, unTableau[5]) va faire planter le programme (Array index out of bounds exception).

Page 5: ITI1520 Lab #6 – Les tableaux Traduit et adapté de versions antérieures créées par Sylvia Boyd, Romelia Plesa, Alan Williams, et Daniel Amyot

Tableaux et “length” (taille)• Vous pouvez demander sa taille à un tableau:

double[] d;int taille;d = new double[4];taille = d.length;// taille vaut maintenant 4

• Notes:– N’utilisez pas de parenthèses () ou de crochets [] pour

demander la taille.– Demander la longueur avant de créer le tableau va

produire une erreur d’exécution. – La taille n’est PAS l’index maximal (Taille-1) mais le

nombre d’éléments (Taille)

Page 6: ITI1520 Lab #6 – Les tableaux Traduit et adapté de versions antérieures créées par Sylvia Boyd, Romelia Plesa, Alan Williams, et Daniel Amyot

Classe ITI1520 et tableaux

• Voir la documentation de cette clase à http://www.site.uottawa.ca/~damyot/iti1520/doc/ITI1520.html

• ITI1520.readIntLine( )– Retourne un tableau de int– Résultat de type int[]– Vous pouvez vérifier sa taille (length) si

nécessaire!• ITI1520.readDoubleLine( )

– Semblable, mais retourne un tableau de double• ITI1520.readCharLine( )

– Semblable, mais retourne un tableau de char– Les espaces sont aussi inclus!

Page 7: ITI1520 Lab #6 – Les tableaux Traduit et adapté de versions antérieures créées par Sylvia Boyd, Romelia Plesa, Alan Williams, et Daniel Amyot

Exemples d’utilisation de ITI1520

int x = ITI1520.readInt( );• Si vous entres 123 et appuyez ENTER, x sera affecter la

valeur 123.

int[] x; // Déclare une variable de référencex = ITI1520.readIntLine( );• Si vous entrez 12 3 0 -546 (nombres séparés par des

espaces) et appuyez ENTER, x sera affecter un référence à un tableau avec 4 éléments, où x[0] contient 12, x[1] contient 3, x[2] contient 0, x[3] contient -546 .

• Le tableau est créé par readIntLine (avec new), alors pas besoin de créer le tableau explicitement auparavant (mais la variable de référence doit être déclaré pour recevoir la référence).

• Les méthodes readDouble et readDoubleLine fonctionnent de la même façon.

• La méthode readCharLine place TOUS les caractères (incluant les espaces) dans un tableau de chars.

Page 8: ITI1520 Lab #6 – Les tableaux Traduit et adapté de versions antérieures créées par Sylvia Boyd, Romelia Plesa, Alan Williams, et Daniel Amyot

Exercice 1: Calculer la moyenne

• Écrivez un algorithme qui va calculer la moyenne des éléments d’un tableau X de taille N.

• Implémentez votre algorithme en Java comme un méthode.– Développez un algorithme

principal/méthode main pour obtenir un tableau de valeurs de l’utilisateur, appelez l’algorithme/méthode pour calculer la moyenne et imprimer les résultats.

Page 9: ITI1520 Lab #6 – Les tableaux Traduit et adapté de versions antérieures créées par Sylvia Boyd, Romelia Plesa, Alan Williams, et Daniel Amyot

Exercice 2 – Le calcule de statistiques

• Développez un logiciel qui obtient un tableau de notes d’étudiants et trouve: la moyenne des notes, la note maximale, et la note minimale. – Développez vos algorithmes avec Visio et Word – commencez avec

le fichier Lab5Ex2.doc.– Traduisez les algorithmes au Java. Commencez avec Gabarit.java.

(vous pouvez aussi commencer avec Lab5Ex1.java.)– L’algorithme principale (méthode main) obtient des notes

d’étudiants de l’utilisateur (stockées dans un tableau) et appelle statistique pour calculer la moyenne, le maximum, et le minimum. Il affiche aussi les résultats à l’utilisateur.

– L’algorithme/méthode statistique recevra une référence au tableau et le nombre d’éléments du tableau comme DONNÉES/paramètres et calcule la moyenne, le minimum, et le maximum.

• Notez que dans le cas de l’algorithme, une référence au tableau et le nombre d’éléments sont les résultats de l’algorithme. Dans le cas de Java, seulement une seule valeur est retournée par la méthode – la référence au tableau.

Page 10: ITI1520 Lab #6 – Les tableaux Traduit et adapté de versions antérieures créées par Sylvia Boyd, Romelia Plesa, Alan Williams, et Daniel Amyot

Exercice 3: Lancer de balle• Écrivez un algorithme qui va calculer la distance

(horizontale, en mètres) parcourue par une balle lancée à v mètres par seconde, tout dépendant de l’angle (en degrés) du lancer.

• Retourne une référence à un tableau de valeurs où:Distance[0]: balle lancée à 0 degrés au-dessus de l’horizontale.Distance[1]: balle lancée à 10 degrés au-dessus de l’horizontale.…Distance[9]: balle lancée à 90 degrés au-dessus de l’horizontale.

(directement vers le haut).

• Complétez votre programme avec un algorithme principale: appelle l’algorithme pour créer le tableau décrit ci-dessus et imprimer son contenu

• Développez vos algorithmes avec Visio et Word – commencez avec le fichier Lab5Ex3.doc.

Page 11: ITI1520 Lab #6 – Les tableaux Traduit et adapté de versions antérieures créées par Sylvia Boyd, Romelia Plesa, Alan Williams, et Daniel Amyot

Exercice 3: Lancer de balle

distance

0 m

Page 12: ITI1520 Lab #6 – Les tableaux Traduit et adapté de versions antérieures créées par Sylvia Boyd, Romelia Plesa, Alan Williams, et Daniel Amyot

Exercice 3: Lancer de balle

• Formule:

distance

r = angle en radians

où:

g = 9.8, constante de gravité universelle.

180

r

g

v rr sincos2 2

Page 13: ITI1520 Lab #6 – Les tableaux Traduit et adapté de versions antérieures créées par Sylvia Boyd, Romelia Plesa, Alan Williams, et Daniel Amyot

Exercice 3: Lancer de balle

• Implémentez vos algorithmes en Java. Commencez avec Gabarit.java

• Notez bien:– Math.PI: valeur de .– Math.sin(x): sinus de x, où x est en

radians– Math.cos(x): cosinus de x, où x est en

radians

Page 14: ITI1520 Lab #6 – Les tableaux Traduit et adapté de versions antérieures créées par Sylvia Boyd, Romelia Plesa, Alan Williams, et Daniel Amyot

Formatage de sorties• Java offre certaines fonctionnalités pour formater des

valeurs numériques.

• Les résultats spécifiques vont dépendre des “préférences régionales” dans le panneau de contrôle de votre ordinateur– Choisir “English(Canada)” va faire que:

• Les devises auront le $ au début (à la fin en français)

• Il y aura des virgules au lieu d’espaces pour séparer les milliers, et un point au lieu de la virgule pour la partie décimale

– Exemple:• $45,567.89 (anglais)• 45 567,89 (français)

Page 15: ITI1520 Lab #6 – Les tableaux Traduit et adapté de versions antérieures créées par Sylvia Boyd, Romelia Plesa, Alan Williams, et Daniel Amyot

Formateur de nombres décimaux

• Utilise une “chaîne de formatage” pour identifier les endroits où placer les divers types de caractères.

# Endroit pour un chiffre optionnel; si aucun chiffre alors rien n’est affiché.

0 Endroit pour un chiffre non-optionnel; si aucun chiffre alors zéro est affiché.

. Endroit pour un point décimal

, Endroit pour un séparateur de milliers

E Endroit pour indicateur d’exposant (puissance de 10)

$ Endroit pour un symbole de devise

Page 16: ITI1520 Lab #6 – Les tableaux Traduit et adapté de versions antérieures créées par Sylvia Boyd, Romelia Plesa, Alan Williams, et Daniel Amyot

Exemple• Résultats pour une valeur double de 12345.6

######## 12346 Arrondissement, justification à gauche

00000000 00012346 Zéros supplémentaires à gauche

######.## 12345.6 Premier et dernier # inutilisés

######.00 12345.60 Force 2 chiffres décimaux

###,###.00 12,345.60 Utilise des virgules comme séparateurs

$###,###.00 $12,345.60 $ est collé sur le premier vrai chiffre

#.###E00 1.235E04 Arrondissement, 2 chiffres pour l’exposant

Page 17: ITI1520 Lab #6 – Les tableaux Traduit et adapté de versions antérieures créées par Sylvia Boyd, Romelia Plesa, Alan Williams, et Daniel Amyot

Utilisation en Java (1)1. Création d’un nouveau formateur décimal et emmagasinage

dans une variable de type DecimalFormat

DecimalFormat df = new DecimalFormat("#####.##");

2. Utilisez-le pour chaque valeur à afficher avec ce format.

System.out.println("Valeur1 = " + df.format( valeur1 ) );

Page 18: ITI1520 Lab #6 – Les tableaux Traduit et adapté de versions antérieures créées par Sylvia Boyd, Romelia Plesa, Alan Williams, et Daniel Amyot

Utilisation en Javaimport java.text.DecimalFormat; // nécessaire pour dire où trouver DecimalFormat

public class FormatTest{ public static void main(String[] args) { DecimalFormat df = new DecimalFormat("#####.##");

double value1; double value2;

value1 = 12345.6; value2 = 34.5678; System.out.println("Value1 = " + df.format( value1 ) ); System.out.println("Value1 = " + df.format( value2 ) ); }}

Page 19: ITI1520 Lab #6 – Les tableaux Traduit et adapté de versions antérieures créées par Sylvia Boyd, Romelia Plesa, Alan Williams, et Daniel Amyot

Expérimentez!• Qu’arrive-t-il si vous essayez de formater un entier qui a plus

de chiffres que ce qui se trouve dans le format?– Exemple: formatez 1234 avec ###.

• Qu’arrive-t-il si vous incluez un symbole % à la fin du format?

• Comment afficheriez-vous un ensemble de valeurs double afin que les points décimaux soient alignés?

– Exemple:1234.56 1234.560234.56 234.560034.56 34.56(facile) (difficile)

Page 20: ITI1520 Lab #6 – Les tableaux Traduit et adapté de versions antérieures créées par Sylvia Boyd, Romelia Plesa, Alan Williams, et Daniel Amyot

Exercice supplémentaire: Écart type

• Essayer cette exercice chez vous

• L’écart type d’un ensemble de valeurs est une mesure utilisée en statistiques pour indiquer par combien ces valeurs divergent de leur moyenne.

• Par exemple, la moyennes des notes pour un cours peut être de 73 sur 100. Si tout le monde a reçu 73 (ce qui est peu probable), alors l’écart type est de zéro. Un écart type plus typique pourrait être de 13,75.

Page 21: ITI1520 Lab #6 – Les tableaux Traduit et adapté de versions antérieures créées par Sylvia Boyd, Romelia Plesa, Alan Williams, et Daniel Amyot

Écart type• Supposons un ensemble de n valeurs représentées par

{xi} où: 0 ≤ i < n.• L’écart type s est calculé avec la formule:

est la moyenne des valeurs.

1

21

21

20

n

axaxaxs n

n

xxxa n 110

Page 22: ITI1520 Lab #6 – Les tableaux Traduit et adapté de versions antérieures créées par Sylvia Boyd, Romelia Plesa, Alan Williams, et Daniel Amyot

Logiciel: Écart type

• Écrivez un algorithme qui va calculer l’écart type des nombres d’un tableau X de taille N.

• Développez un algorithme principale qui obtient de l’utilisateur un tableau de valeurs, appel l’algorithme pour calculer l’écart type des valeurs, et affiche le résultat.

• Implémentez vos algorithmes en Java.