Priorités des opérateurs arithmétiques et parenthèses

Documents pareils
Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

ALGORITHMIQUE ET PROGRAMMATION ORIENTEE OBJET

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INF 321 : mémento de la syntaxe de Java

Java Licence Professionnelle CISII,

TP, première séquence d exercices.

Claude Delannoy. 3 e édition C++

Plan du cours. Historique du langage Nouveautés de Java 7

Solutions du chapitre 4

TD3: tableaux avancées, première classe et chaînes

Programme Compte bancaire (code)

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

t 100. = 8 ; le pourcentage de réduction est : 8 % 1 t Le pourcentage d'évolution (appelé aussi taux d'évolution) est le nombre :

Utilisation d objets : String et ArrayList

Package Java.util Classe générique

Programmer en JAVA. par Tama

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Représentation d un entier en base b

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Informatique Générale

Cours 1: Java et les objets


UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Chapitre 10. Les interfaces Comparable et Comparator 1

Logiciel de Base. I. Représentation des nombres

Architecture de l ordinateur

Factorisation Factoriser en utilisant un facteur commun Fiche méthode

Chapitre 10 Arithmétique réelle

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Premiers Pas en Programmation Objet : les Classes et les Objets

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

as Architecture des Systèmes d Information

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Corrigé des exercices sur les références

Programmation en Java IUT GEII (MC-II1) 1

TP1 : Initiation à Java et Eclipse

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

INITIATION AU LANGAGE JAVA

Tp 1 correction. Structures de données (IF2)

Informatique / Programmation

Flux de données Lecture/Ecriture Fichiers

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Introduction à l algorithmique et à la programmation M1102 CM n 3

Algorithmique et Programmation, IMA

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

PROGRAMMATION PAR OBJETS

ACTIVITÉ DE PROGRAMMATION

STAGE IREM 0- Premiers pas en Python

Une introduction à Java

Anne Tasso. Java. Le livre de. premier langage. 6 e édition. Groupe Eyrolles, 2000, 2002, 2005, 2006, 2008, 2010, ISBN :

Exercices sur les interfaces

Les bases de l informatique et de la programmation. École polytechnique

Introduction à la Programmation Parallèle: MPI

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

1. Langage de programmation Java

UE C avancé cours 1: introduction et révisions

Programmation par les Objets en Java

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Présentation du langage et premières fonctions

a) b)

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Algorithmique et programmation : les bases (VBA) Corrigé

Recherche dans un tableau

Généralités sur le Langage Java et éléments syntaxiques.

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Programmation avec des objets : Cours 7. Menu du jour

Notions fondamentales du langage C# Version 1.0

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Java Licence Professionnelle CISII,

V- Manipulations de nombres en binaire

Licence Sciences et Technologies Examen janvier 2010

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Plan Pédagogique du cours

Examen Médian - 1 heure 30

Les structures de données. Rajae El Ouazzani

Langage C. Patrick Corde. 22 juin Patrick Corde ( Patrick.Corde@idris.fr ) Langage C 22 juin / 289

Exercices - Polynômes : corrigé. Opérations sur les polynômes

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

Programmation en langage C

TD/TP PAC - Programmation n 3

ALGORITHMIQUE ET PROGRAMMATION En C

Objets et Programmation. origine des langages orientés-objet

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Définition 0,752 = 0,7 + 0,05 + 0,002 SYSTÈMES DE NUMÉRATION POSITIONNELS =

I. Introduction aux fonctions : les fonctions standards

Programmation C. J.-F. Lalande. 15 novembre 2012

Le langage C. Introduction, guide de reference

Corrigés des premiers exercices sur les classes

Programmation Orientée Objet Java

Arithmétique binaire. Chapitre. 5.1 Notions Bit Mot

avec des nombres entiers

Introduction au Langage de Programmation C

Introduction. Introduction au langage Java. Un livre de Wikilivres.

Langage Java. Classe de première SI

Pour l épreuve d algèbre, les calculatrices sont interdites.

Transcription:

1 Priorités des opérateurs arithmétiques et parenthèses Éliminer les parenthèses superflues dans les expressions suivantes (l ordre des calculs devant rester le même) : (a + b) - (2 * c) // expression 1 (2 * x) / (y * z) // expression 2 (x + 3) * (n%p) // expression 3 (-a) / (-(b + c)) // expression 4 (x/y)%(-z) // expression 5 x/(y%(-z)) // expression 6 a + b - 2 * c // expression 1 2 * x / (y * z) // expression 2 On pourrait aussi écrire cette expression 2*x/y/z mais l ordre des calculs sera différent, ce qui peut avoir une légère incidence sur le résultat. (x + 3) * (n%p) // expression 3 Ici aucune parenthèse ne peut être supprimée car * et % sont de même priorité ; la suppression de la seconde paire de parenthèses conduirait à une expression équivalent à : ((x+3)*n)%p. -a / -(b + c) // expression 4 Ne pas oublier que l opérateur unaire - est prioritaire sur tous les opérateurs arithmétiques à deux opérandes. x/y%-z // expression 5 x/(y%-z) // expression 6 2 Conversions implicites Soit ces déclarations : byte b1 = 10, b2 = 20 ; short p = 200 ; int n = 500 ; long q = 100 ; float x = 2.5f ; double y = 5.25 ; 2 Éditions Eyrolles

Exercice 2 Conversions implicites Donner le type et la valeur des expressions arithmétiques suivantes : b1+b2 // 1 p+b1 // 2 b1*b2 // 3 q+p*(b1+b2); // 4 x+q*n // 5 b1*q/x // 6 b1*q*2./x // 7 b1*q*2.f/x // 8 b1+b2 = 30 // 1 L opérateur + soumet les valeurs de b1 et b2 à la promotion numérique de byte en int. Le résutat est de type int. p+b1 = 210 // 2 L opérateur + soumet ses opérandes à des promotions numériques : de short en int pour p et de byte en int pour b1. Le résultat est de type int. b1*b2 = 200 // 3 Là encore, avant d effectuer le produit, les valeurs de b1 et de b2 sont soumises à la promotion numérique de byte en int. Le résultat est de type int. q+p*(b1+b2) = 6100 // 4 On évalue tout d abord la somme s=b1+b2, en soumettant les valeurs des deux opérandes aux promotions numériques de byte en int. La valeur de s est de type int. Puis on effectue la somme q+p en soumettant le second opérande à une conversion d ajustement de type de short en long (type de q). Le résultat est de type long. Il faut maintenant le multiplier par s, ce qui se fait en soumettant la valeur de s à une conversion d ajustement de type de int en long. Le résultat final est de type long. x+q*n =50002.5 // 5 On évalue tout d abord le produit q*n en soumettant la valeur de n à une conversion d ajustement de type de int en long. Le résultat est de type long. Pour pouvoir l ajouter à la valeur de x, on le soumet à une conversion d ajustement de type de long en float. Le résultat est de type float. b1*q/x=400.0 // 6 On évalue tout d abord le quotient q/x en soumettant la valeur de q à une conversion d ajustement de type de long en float. Le résultat est de type float. Pour pouvoir lui ajouter la valeur de b1, on soumet cette dernière à une conversion d ajustement de type de byte en float (ou, ce qui revient au même, d abord à une promotion numérique de byte en int, puis à une conversion d ajustement de type de int en float). Le résultat est de type float. b1*q*2./x=800.0 // 7 Éditions Eyrolles 3

On évalue tout d abord le produit q*2., en soumettant la valeur de q à une conversion d ajustement de type de long en double (attention, la constante 2. est de type double et non de type float). Le résultat est de type double. Il est divisé par la valeur obtenue par conversion d ajustement de type de x de float en double. Le résultat, de type double est alors multiplié par la valeur obtenue par conversion d ajustement de type de b1 en double. Le résultat est de type double. b1*q*2.f/x=800.0 // 8 Il s agit de l expression précédente, dans laquelle la constante 2. (de type double) est remplacée par 2.f de type float. La même démarche s applique, en substituant le type float au type double. Le résultat final est de type float. 3 Exceptions flottantes et conventions IEEE 754 Quels résultats fournit ce programme? public class Excep { public static void main (String args[]) { double x1 = 1e200, x2 = 1e210 ; double y, z ; y = x1*x2 ; System.out.println ("valeur de y " + y) ; x2 = x1 ; z = y/(x2-x1) ; System.out.println (y + " divise par " + (x2-x1) + " = " + z) ; y = 15 ; z = y/(x2-x1) ; System.out.println (y + " divise par " + (x2-x1) + " = " + z) ; z = (x2-x1)/(x2-x1) ; System.out.println ((x2-x1) + " divise par " + (x2-x1) + " = " + z) ; System.out.println (z + "+1 = " + (z+1)) ; x1 = Float.POSITIVE_INFINITY ; x2 = Double.NEGATIVE_INFINITY ; z = x1/x2 ; System.out.println (x1 + "/" + x2 + " = " + z) ; 4 Éditions Eyrolles

Exercice 4 Le type char Infinity divise par 0.0 = Infinity 15.0 divise par 0.0 = Infinity 0.0 divise par 0.0 = NaN NaN+1 = NaN Infinity/-Infinity = NaN Rappelons qu en Java aucune opération sur les flottants ne conduit à un arrêt de l exécution. En revanche, les nombres flottants respectent les conventions IEEE 754 qui imposent l existence d un motif particulier représentant les valeurs infinies, lequel s imprime sous la forme Infinity ou -Infinity. Les constantes correspondantes se notent Float.Infinity ou Double.Infinity. De même, il existe un motif particulier représentant une valeur non calculable ; il peut s obtenir par Float.NaN ou Double.NaN et il s imprime sous la forme NaN. 4 Le type char Soit ces déclarations : char c = 60, ce = 'e', cg = 'g' ; byte b = 10 ; Donner le type et la valeur des expressions suivantes : c + 1 2 * c cg - ce b * c c + 1 = 61 L opérateur + soumet ici son premier opérande à la promotion numérique de char en int, ce qui fournit la valeur 60 1. Le résultat est de type int. 2 * c = 120 L opérateur * soumet ici son second opérande à la promotion numérique de char en int, ce qui fournit la valeur 60 2. Le résultat est de type int. cg - ce = 2 L opérateur - soumet ici ses deux opérandes à la promotion numérique de char en int. On obtient un résultat de type int qui représente l écart entre les codes des caractères g et e (dans le code Unicode, les lettres consécutives d une même casse ont des codes consécutifs). 1. En toute rigueur, la valeur de la variable c est non pas 60, mais l entier dont le code (Unicode) est égal à 60. 2. Même remarque que précédemment. Éditions Eyrolles 5

b * c = 600 L opérateur * soumet ici ses deux opérandes aux promotions numériques : de byte en int pour le premier, de char en int pour le second. On notera qu aucun problème de dépassement de capacité n apparaît puisque le produit est bien effectué dans le type int (il en irait différemment s il était effectué dans le type byte puisque 600 n est pas représentable dans ce type). 5 Opérateurs logiques à "court circuit" Quels résultats fournit ce programme? public class CourCir { public static void main (String args[]) { int i=10, j=5 ; if (i<5 && j++<10) System.out.println ("&&1 vrai") ; else System.out.println ("&&1 faux") ; if (i<5 & j++<10) System.out.println ("& vrai") ; else System.out.println ("& faux") ; if (i<15 && j++<10) System.out.println ("&&2 vrai") ; else System.out.println ("&&2 faux") ; if (i<15 j++<10) System.out.println (" vrai") ; else System.out.println (" faux") ; &&1 faux i = 10 j = 5 & faux i = 10 j = 6 &&2 vrai i = 10 j = 7 vrai i = 10 j = 7 Il faut simplement tenir compte de la proprité particulière dont bénéficient les opérateurs && et dits à court-circuit. Ils n évaluent leur second opérande que lorsque cela est nécessaire. 6 Éditions Eyrolles