• Aucun résultat trouvé

IFT 1015 - Art de programmer

N/A
N/A
Protected

Academic year: 2022

Partager "IFT 1015 - Art de programmer"

Copied!
15
0
0

Texte intégral

(1)

IFT 1015 - Art de programmer

Professeur:

Stefan Monnier

B. K ´egl, S. Roy, F. Duranleau, S. Monnier

D ´epartement d’informatique et de recherche op ´erationnelle Universit ´e de Montr ´eal

hiver 2006

IFT-1015 Stefan Monnier 1

(2)

Au programme

Premier d’une s ´erie sur l’art de bien programmer.

Arrondir les nombres

Les commentaires

V ´erification et traces d’ex ´ecution

(3)

Types d’arrondi

On arrondit le nombre r ´eel

r

vers l’entier

e

plancher: plus grand entier

e

qui satisfait

e ≤ r

exemples:

1.1 → 1

,

1.8 → 1

arrondi: entier

e

le plus pr `es de

r

exemples:

1.1 → 1

,

1.8 → 2

,

1.5 → 2

plafond: plus petit entier

e

qui satisfait

e ≥ r

. exemples:

1.1 → 2

,

1.8 → 2 1 → 1

IFT-1015 Stefan Monnier 3

(4)

Types d’arrondi

Plancher

e = (int)Math.floor(r);

e = (int)r;

Arrondi

e = Math.round(r);

Plafond

e = (int)Math.ceil(r);

si r est rationnel:

r = n/d

,

n

et

d

sont entiers

e = (n+d-1)/d;

(5)

Exemples

Combien d’avions de 135 places faut-il pour transporter 505 personnes?

Plafond de

505/135

e = (int)(505+135-1)/135; // = 4

Combien faut-il d’aquarium de 100 litres pour conserver 234 litres d’eau?

Plafond de

234/100

e = (int)(234+100-1)/100; // = 3

IFT-1015 Stefan Monnier 5

(6)

Les commentaires

Quand commenter?:

Lorsque quelqu’un pourrait ne pas comprendre le sens d’une instruction.

– doit d ´ecrire le sens, pas l’instruction – ne pas commenter l’ ´evidence

(7)

Les commentaires

Exemples (s ´eparez le bon du mauvais)

• i = i + 10; // Passe au prochain pixel de l’image

• i = i + 10; // Ajoute dix `a la position dans l’image

• i = i + 10; // Ajoute dix `a la variable i

• i = i + 10; // Modifie la position dans l’image

IFT-1015 Stefan Monnier 7

(8)

Les commentaires

Quoi commenter

les d ´eclarations (de variables, de fonctions, ...)

les op ´erations du programme

les algorithmes

Exemples

• int i; // Position horizontale du pixel dans l’image ...

i = i + 10; // Passe au prochain pixel

• double c; // Cout d’un colis (en sous) ...

c = c * 1.07; // Ajoute la TPS au cout du produit

(9)

Les commentaires

Self-commenting code

• int posX

;

final int PIXEL STEP SIZE = 10;

...

posX += PIXEL STEP SIZE;

• double coutColis;

final double TAUX TPS = 0.07;

...

coutColis += coutColis * TAUX TPS;

IFT-1015 Stefan Monnier 9

(10)

V ´erification et traces d’ex ´ecution

Comment savoir si mon programme fonctionne?

imprimer des informations sur le d ´eroulement du programme

v ´erifier chaque ´el ´ement du programme s ´epar ´ement double cout = 31.45;

double tvq

= Math.round ((cout

+ Math.round(0.07 * cout * 100) / 100.0)

* 0.08 * 100) / 100.0;

(11)

V ´erification et traces d’ex ´ecution

double cout = 31.45;

final double TAUX_TPS = 0.07;

final double TAUX_TVQ = 0.08;

System.out.println("cout = " + cout);

sortie au terminal

cout = 31.45

IFT-1015 Stefan Monnier 11

(12)

V ´erification et traces d’ex ´ecution

double tps = TAUX_TPS * cout;

System.out.println("avant arrondi: tps = cout * "

+ TAUX_TPS + " = " + tps);

tps = Math.round(tps * 100) / 100.0; // arrondi System.out.println("apres arrondi: tps = cout * "

+ TAUX_TPS + " = " + tps);

sortie au terminal

avant arrondi: tps = cout * 0.07 = 2.2015000000000002

apres arrondi: tps = cout * 0.07 = 2.2

(13)

V ´erification et traces d’ex ´ecution

double tvq = TAUX_TVQ * (cout + tps);

System.out.println("avant arrondi: tvq = (cout + tps) * "

+ TAUX_TVQ + " = " + tvq);

tvq = Math.round(tvq * 100) / 100.0; // arrondi

System.out.println("apres arrondi: tvq = (cout + tps) * "

+ TAUX_TVQ + " = " + tvq);

sortie au terminal

avant arrondi: tvq = (cout + tps) * 0.08 = 2.6919999999999997 apres arrondi: tvq = (cout + tps) * 0.08 = 2.69

IFT-1015 Stefan Monnier 13

(14)

V ´erification et traces d’ex ´ecution

Apr `es le test: effacer ou “comment out”

double tvq = TAUX_TVQ * (cout + tps);

//System.out.println("avant arrondi: tvq = (cout + tps) * "

// + TAUX_TVQ + " = " + tvq);

tvq = Math.round(tvq * 100) / 100.0; // arrondi

//System.out.println("apres arrondi: tvq = (cout + tps) * "

// + TAUX_TVQ + " = " + tvq);

Emacs

comment out du code: marquer le code et M-;

indentation correcte: TAB

(15)

R ´efl ´echir avant coder

Ne pas tout coder d’un seul coup

Nombre d’erreurs

= (Nombre de lignes de code)

+ (Nombre de lignes de code non test ´ees)2

Nombre d’erreurs restantes = Nombre d’erreurs corrig ´ees

IFT-1015 Stefan Monnier 15

Références

Documents relatifs

• Pour ce cours, on fait usage de notre propre biblioth `eque de m ´ethodes pour la lecture de donn ´ees au clavier. IFT-1015 Stefan

si elle est ´egale `a n’importe quelle <constante> , l’ex ´ecution se poursuit `a partir de l’ ´etiquette <constant>:. sinon, l’ex ´ecution se poursuit `a partir

Objectif: r ´ep ´eter un groupe d’instructions tant qu’une condition est satisfaite, mais au moins une

• initialis ´e par le param `etre actuel quand la m ´ethode est invoqu ´ee.. Invocation des

• en principe, elles peuvent ˆetre red ´eclar ´ees dans les m ´ethodes, mais c’est fortement d ´econseill ´e. • normalement, elles sont final es, les variables

Pour tester les m ´ethodes, ´ecrire une classe `a part qui les appelle public class TestTriangle. public static void main(String[]

• les valeurs sorties de ces op ´erateurs sont utilis ´ees rarement Deux types d’op ´erandes: r ´ef ´erence et valeur. IFT-1015 Stefan

Une classe repr ´esente un ensemble d’objets qui partagent les m ˆeme propri ´et ´es, r ´epondent aux m ˆeme requ ˆetes et commandes.. Chaque objet est une instance