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

Badr Benmammar Introduction à la programmation en Java.

Présentations similaires


Présentation au sujet: "Badr Benmammar Introduction à la programmation en Java."— Transcription de la présentation:

1 Badr Benmammar Introduction à la programmation en Java

2 Plan Introduction générale Langages compilés Langages interprétés Langages intermédiaires Introduction au JAVA Environnement de programmation JVM, JRE, JDK et SDK Quelques packages Package de base : java.lang Historique des versions J2SE, J2EE et J2ME Terminologie JAR, JCP et JSR JAVA, interprété ou compilé ?

3 Plan Syntaxe et éléments de bases de Java Types primitifs Variables Constantes Conversion de type de données Conversion explicite Conversion implicite Lire les entrées clavier Opérateurs Fonctions mathématiques Structures de contrôles des instructions Tableaux Fonctions Procédures

4 Langages de programmation Les langages de programmation actuels sont majoritairement de deux sortes : Langages compilés. Langages interprétés. Lors du choix dun langage pour un projet, cet aspect fondamental peut faire pencher la balance.

5 Langage machine Le langage machine, ou code machine, cest le langage natif d'un processeur, c'est-à- dire le seul qu'il puisse traiter. Cest la suite de bits qui est interprétée par le processeur d'un ordinateur exécutant un programme informatique. Il est composé d'instructions et de données à traiter codées en binaire. Le code machine est généré, généralement par la compilation d'un langage de programmation.

6 Langage compilé Un programme écrit dans un langage compilé va être traduit une fois pour toutes par un compilateur, afin de générer un fichier exécutable. Exemple : C, C++, Pascal, Fortran, Cobol, ADA. Le langage C : gcc -o essai.o -c essai.c gcc -o essai essai.o Ou gcc –o essai essai.c Avantage : rapide. Inconvénient : fermé si on na pas le source, besoin de loutil de développement pour modifier.

7 Langage interprété Un langage informatique se dit interprété lorsque les instructions qui le composent sont décodées les unes après les autres et exécutées aussitôt. Son fonctionnement est le suivant : Lire linstruction ; Exécuter linstruction ; Passer à linstruction suivante et recommencer.

8 Langage interprété Un langage interprété a besoin dun interpréteur. BASIC, MATLAB, PHP, Prolog, Perl. Le QBasic se lançait avec la commande : qbasic /run prog.bas Avantage : le programme prog.bas est un fichier texte, facilement modifiable. Inconvénient : cest forcément plus lent que quand cest compilé.

9 Quelques langages

10 Langages intermédiaires Certains langages appartiennent en quelque sorte aux deux catégories : LISP, Python, … Le programme écrit avec ces langages peut dans certaines conditions subir une phase de compilation intermédiaire vers un fichier écrit dans un langage différent du fichier source et non exécutable (nécessité dun interpréteur).

11 JAVA : portabilité et fiabilité JAVA a été développé par Sun au début des années 90 dans une filiation avec le langage C et surtout le langage objet C++ mais dans une optique de plus grande portabilité dune machine à une autre et dune plus grande fiabilité. Les programmes JAVA sont compilés en "bytecode", un langage intermédiaire indépendant de la plateforme. Ce "bytecode" est interprété par une machine virtuelle sur des machines différentes : Mac, Pc, Windows, Linux, Unix,... Exemple : applets Java, petits programmes insérés parfois dans les pages Web, sont des fichiers qui sont compilés mais que lon ne peut exécuter qu'à partir dun navigateur internet.

12 JAVA : compilé ou interprété ? Un langage compilé est un langage pour lequel le compilateur va traduire le code écrit par les développeurs en code exécutable directement par la machine. Un langage interprété est un langage pour lequel la traduction en code machine n'est fait quà l'exécution. Pour le java, on à une étape de compilation qui produit du code qui sera exécuté par une machine virtuelle, cest une solution intermédiaire qui permet de rester indépendant du type de machine qui exécutera le code tout en ayant un code déjà optimisé pour l'exécution.

13 JAVA : compilé ou interprété ? Compilateur (javac) Fichier source (*.java) Bytecode (*.class) Interpréteur (java)

14 JAVA : environnement de programmation JAVA est un environnement de programmation objet composé de : Langage orienté objet JAVA. JVM (machine virtuelle Java) : permettant dinterpréter et dexécuter le bytecode Java. API (application programming interface) : un ensemble de classes standards (bibliothèque). JRE (Java Runtime Environment) : lenvironnement dexécution Java désigne un ensemble doutils permettant lexécution de programmes Java sur toutes les plates- formes supportées. JRE est constitué de la JVM et dune bibliothèque standard à partir de laquelle doivent être développés tous les programmes en Java. java.lang est le package de base qui contient les classes qui seraient toujours utilisées (System, Thread, Math, String, …). Toutes les classes et interfaces de java.lang sont automatiquement importées par le compilateur.

15 JAVA : environnement de programmation Java Development Kit (JDK) : le nouveau terme cest SDK (Standard Development Kit) qui est lenvironnement dans lequel le code Java est compilé pour être transformé en bytecode afin que la machine virtuelle Java (JVM) puisse l'interpréter. Les composants primaires du JDK sont une sélection doutils de programmation, incluant : javac : le compilateur, qui convertit le code source en fichier.class (contenant le bytecode Java). javadoc : le générateur de documentation, qui génère automatiquement de la documentation à partir des commentaires du code source. jar : larchiveur, qui met sous forme dun paquetage unique lensemble des fichiers class en un fichier JAR. jdb : le débogueur. JRE : environnement dexécution Java.

16 Quelques packages Package de base : java.lang Toutes les classes et interfaces de java.lang sont automatiquement importées par le compilateur. Gestion de données et utilitaires : java.util Rassemble des classes d'utilitaires (gestion des collections de données, génération de nombres aléatoires, énumération, date,...). Définit les classes d'exceptions : EmptyStackException. NoSuchElementException. Gestion des applets : java.applet La classe Applet et les interfaces de ce package permettent de programmer une applet Java et d'intégrer une applet dans un navigateur. Manipulation d'images : java.awt.image Les classes de ce package permettent de manipuler les images (gestion du chargement des images, filtres, gestion des couleurs,...).

17 Quelques packages Entrées-sorties : java.io Rassemble les classes permettant de gérer les entrées-sorties (accès fichiers, gestion de répertoires,...). Définit les classes d'exceptions : IOException. EOFException. FileNotFoundException. InterruptedIOException. UTFDataFormatException. Accès réseau : java.net Rassemble les classes permettant de gérer les accès réseau. Définit les classes d'exceptions : MalformedURLException. ProtocolException. SocketException. UnknownHostException. UnknownServiceException.

18 Quelques packages Interface utilisateur : java.awt : utilise les composant graphiques natifs (peers). Définit les classes d'exceptions : AWTException. AWTError. Interface utilisateur : javax.swing : librairie très puissante, composants très évolués (arbres, tables, …). Définit lexception : UnsupportedLookAndFeelException Java 3D : javax.media.j3d Rassemble les classes de lAPI Java 3D (interface de programmation pour la plateforme Java visant la synthèse d'image 3D).

19 Historique des versions Le langage Java a connu plusieurs évolutions depuis le JDK 1.0 (Java Development Kit) avec lajout de nombreuses classes et packages à la bibliothèque standard. JDK 1.0 (23 janvier classes et interfaces) : version initiale. JDK 1.1 (19 février classes et interfaces) : de nombreux ajouts avec notamment : Une refonte complète du modèle événementiel AWT. Les classes internes sont ajoutées au langage. JavaBeans. JDBC. Java Remote Invocation (RMI).

20 J2SE 1.2 (9 décembre classes et interfaces) : cette version et les suivantes jusque J2SE 5.0 sont rebaptisées Java 2 et lédition nommée J2SE remplace JDK pour distinguer la plate-forme de base de lédition J2EE et de lédition J2ME. J2SE : (Java 2 Standard Edition) comprenant les API et bibliothèques de bases, ainsi que les API destinés au poste client (comme par exemple Java Foundation Classes (JFC) qui est un framework graphique pour Java composé de AWT, Swing et Java2D). J2EE : (Java 2 Enterprise Edition) destinée aux développements des applications dentreprises. Sun propose en plus des spécifications, des mises en œuvre illustratives. J2ME : (Java 2 Micro Edition) destinée aux systèmes mobiles tel que par exemple, les assistants personnels ou les téléphones portables. Plusieurs ajouts par rapport à la version précédente dont : Le framework Collections. LAPI graphique Swing est intégrée. Historique des versions

21 J2SE 1.3 (8 mai classes et interfaces) : changements principaux : Changement pour les RMI pour être basé sur CORBA. JavaSound. JNDI (Java Naming and Directory Interface) inclus de base (disponible auparavant comme extension) pour utiliser différents services de nommages ou d'annuaires. JPDA (Java Platform Debugger Architecture) pour les outils de type débogueur. Historique des versions

22 J2SE 1.4 (6 février classes et interfaces) : les principaux changements sont : Mot-clé assert. Expressions rationnelles modélisées en sinspirant du langage Perl. Chaînage dexception. API de journalisation. API Image I/O pour lire et écrire des images dans des formats comme JPEG et PNG. Intégration dun parser XML (pour extraire les données dun document XML et pour vérifier sa validité) et du moteur XSLT nommé JAXP. JAXP (Java API for XML Processing) est une API permettant la création, la manipulation et le traitement de fichiers XML à bas niveau. Intégration des extensions de sécurité JCE (Java Cryptography Extension), JSSE et JAAS. Java Web Start (introduit pour la première fois en mars 2001 pour J2SE 1.3). Historique des versions

23 J2SE 5.0 (30 septembre classes et interfaces) : (initialement numérotée 1.5, qui est toujours utilisé comme numéro de version interne), ajoute un nombre significatif de nouveautés au langage : Programmation générique. Metadata, également appelées annotations, permet au langage de construire des classes et des méthodes étiquetées avec des données additionnelles qui peuvent être utilisées en tant que méta-données. Autoboxing/unboxing, conversion automatique entre des types primitifs (comme le type int) et le Wrapper de classe correspondant (comme la classe Integer). Énumérations : le mot-clé enum permet de créer une liste ordonnée de valeurs sans type. Extension du for pour les boucles, la syntaxe du for est étendue avec une syntaxe spéciale pour itérer sur nimporte quel objet itérable comme un tableau, ou une collection. Historique des versions

24 Java SE 6 (11 décembre classes et interfaces) : avec cette version, Sun remplace le nom J2SE par Java SE et supprime le.0 au numéro de version. Java SE 7 : Une des nouveautés majeures de cette version sera lajout des closures (en cours de spécifications). Il sagira de la première version sous la licence GPL. closure est un bloc de code référençable, manipulant optionnellement des variables dites "libres", libres en ce sens qu'elles sont définies non dans le bloc de code, ni de façon globale, mais par le contexte dans lequel le bloc est exécuté. Historique des versions

25 Caractéristiques du JAVA Simple : plus simple que le C ou le C++ car on lui a retiré les caractéristiques peu utilisées ou difficile à utiliser : Pointeurs. Surcharge d'opérateurs. Héritage multiple. Le mécanisme de libération de la mémoire (garbage collection) est transparent contrairement au C++. Le ramasse-miettes qui est une fonctionnalité de la JVM est appelé régulièrement et automatiquement pendant l'exécution du programme. L'espace mémoire nécessaire à chaque objet créé est alloué dans un tas de mémoire réservé à cet usage. Le programme peut ensuite accéder à chaque objet grâce à sa référence dans le tas. Quand il n'existe plus aucune référence permettant d'atteindre un objet, le ramasse-miettes le détruit automatiquement puisque qu'il est devenu inaccessible libérant la mémoire et prévenant ainsi toute fuite de mémoire.

26 Exemple de pointeurs en C #include echanger (int *a, int *b) { int c; c=*a; *a=*b; *b=c; } void main() { int x=5; int y =10; printf("avant\n"); printf("%d\n",x); printf("%d\n",y); echanger (&x,&y); printf("apres\n"); printf("%d\n",x); printf("%d\n",y); } Une procédure echanger pour échanger les deux valeurs contenues dans les variables x et y. Mots-clés du C/C++ absent en Java

27 Orienté objet : lensemble des instructions de base a été réduit pour augmenter sa fiabilité mais donne accès à de nombreuses classes permettant de définir et de manipuler des objets. Une classe contient des données et du code. Le code est sous forme de fonctions ou procédures appelées méthodes. Principe de l'encapsulation. Distribué : les fonctions d'accès au réseau et les protocoles Internet les plus courants (HTTP, FTP, Telnet) font partie de Java. Il est donc facile de mettre en place une architecture Client-Serveur pour travailler avec des fichiers situés sur un ordinateur distant. Caractéristiques du JAVA

28 Robuste : le typage des données est très strict, tant à la compilation qu'à l'exécution. Les pointeurs utilisés dans Java ne sont pas accessibles au programmeur. Sûr : L'interpréteur de java vérifie que le byte code n'a pas été altéré depuis sa compilation. Sun travaille sur un système qui permettra à terme la transmission codée des informations sur le réseau. Dynamique : contrairement au C++, les classes de Java peuvent être modifiées sans modification du programme qui les utilise. Indépendant des architectures matérielles : Le compilateur java fabrique du byte code "universel". Pour l'exécuter sur une machine quelconque, il faut qu'un interpréteur java (machine virtuelle) existe pour cette machine.

29 Caractéristiques du JAVA Portable : les types de données sont indépendants de la plate-forme. Une variable int sera toujours définie dans un entier 32 bits en complément à 2 aussi bien sur un PC 486 que sur un Power Macintosh. Les float, double et long se conforment à la spécification IEEE754. Les char relèvent du standard Unicode. Les boolean prennent toujours les valeurs true et false. Multithread : pour l'exécution simultanée de plusieurs processus. Java est fourni avec un jeu de primitives qui facilitent l'écriture de ce genre de programmes. Haute performance : bien que java soit un langage interprété, le compilateur java génère du byte code optimisé en incluant des instructions qui permettront à chaque interpréteur de tirer la meilleure performance possible du code. La vitesse d'exécution du code peut être semblable à celle de C ou C++.

30 Terminologie : fichier JAR Un fichier JAR (Java ARchive) est utilisé pour distribuer un ensemble de classes Java. Ce format est utilisé pour stocker des classes compilées, ainsi que des métadonnées constituant lensemble dun programme (images, sons, des fichiers de paramétrages, …). Créer un fichier Jar : jar cfv fichier.jar fichier1.class fichier2.class Visualiser le contenu dun fichier Jar : jar tf fichier.jar Extraire le contenu dun fichier Jar : jar xfv fichier.jar Modifier un fichier Jar : jar uf fichier.jar fichier3.class Loption c indique quil faut créer une archive Jar. Loption f indique que le résultat sera redirigé dans un fichier. Loption v fait afficher les commentaires associés à lexécution de la commande, en particulier, les noms des éléments ajoutés au fichier darchive au fur et à mesure quils y sont ajoutés. Loption t fait afficher le contenu de larchive Jar. Loption u indique quil faut mettre à jour une archive Jar. Loption x indique quil faut extraire le contenu d'une archive Jar.

31 Terminologie : JCP et JSR Java Community Process (JCP) est une organisation créée par Sun en Son but est de coordonner l'évolution du langage Java et des technologies qui lui sont associées. Le JCP s'est doté d'un processus formalisé permettant aux différentes parties intéressées d'être impliquées dans la définition des futures versions et fonctionnalités de la plateforme Java. Le JCP émet des Java Specification Requests (JSR), qui décrivent les spécifications et technologies proposées pour un ajout à la plateforme Java. Des revues publiques formelles des JSRs sont menées avant qu'une JSR ne devienne finale et qu'elle ne soit votée par le comité exécutif du JCP.

32 JCP et JSR Une JSR finale fournit une implémentation de référence qui offre : Une implémentation gratuite de la technologie sous la forme de code source. Un ensemble de tests TCK (Technology Compatibility Kit) pour vérifier la compatibilité d'une implémentation avec la spécification. Le JCP est composé d'entreprises du domaine Java, comme Sun, IBM, Oracle, Borland, BEA, Nokia, Sony, mais aussi de fondations du monde du logiciel libre, comme la fondation Apache ou OW2 qui regroupe des entreprises et des organismes de recherche tels que lINRIA, Bull, France Télécom, Thales Group ou Red Hat, ainsi que de particuliers, pour lesquels l'adhésion est libre.

33 Premier programme JAVA // mon premier programme java class Prog1 { public static void main(String args[]) { System.out.println ("bonjour tous le monde"); } Un programme JAVA est une classe qui doit être enregistrée dans un fichier de même nom et d'extension.java.

34 Lignes du programme // introduit un commentaire. Le programme Java comporte au moins 1 classe qui contient elle-même au moins la méthode main. La méthode main est toujours celle qui est "lancée" à l'exécution du programme. La seule instruction de la méthode est l'affichage d'une chaîne de caractères sur la sortie standard (l'écran) avec ajout d'un passage à la ligne : appel à la méthode println de la classe System. Compilation puis exécution : javac Prog1.java java Prog1 bonjour tous le monde

35 Types primitifs en JAVA

36 Variables Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage Java sont typées, c'est-à-dire que les données contenues dans celles-ci possèdent un type, ainsi elles sont donc stockées à une adresse mémoire et occupent un nombre d'octets dépendant du type de donnée stockée. La déclaration de variables : int nb; nb=8; int x=nb+2; float toto = f; System.out.println("Le nombre entier vaut : " + x + "\n"+"Le nombre reel vaut : " +toto );

37 Constantes Une constante est une variable dont la valeur est inchangeable lors de l'exécution d'un programme. Le mot clé final permet de définir une variable dont la valeur ne peut pas être modifiée après son initialisation. final int d = 12; final double b = 12.6; b=b*2;

38 Conversion de type de données Conversions implicites : Une conversion de type implicite sans perte d'informations est réalisée d'un type primitif vers un type plus grand (élargissement) : byte short int long float double char int Exemple: int i=7; double x=i;

39 Conversion de type de données Conversion explicite : Une conversion explicite consiste en une modification du type de donnée forcée. Cela signifie que l'on utilise un opérateur dit de cast pour spécifier la conversion. L'opérateur de cast est tout simplement le type de donnée, dans lequel on désire convertir une variable, entre des parenthèses précédant la variable. Une conversion de type explicite se fait avec perte d'informations est réalisée d'un type primitif vers un type plus petit. Exemple : double x=4.667; int i= (int) x;

40 Lire les entrées clavier import java.util.Scanner; class Prog1 { public static void main(String args[]) { Scanner sc = new Scanner (System.in); System.out.println("Veuillez saisir un mot :"); String str = sc.nextLine(); System.out.println("Vous avez saisi : " + str); System.out.println("Veuillez saisir un caractere :"); char carac = sc.nextLine().charAt(0); System.out.println("Vous avez saisi le caractère : " + carac); System.out.println("Veuillez saisir un entier :"); int x = sc.nextInt(); System.out.println("Vous avez saisi le nombre : " + x); System.out.println("Veuillez saisir un reel :"); double d = sc.nextDouble(); System.out.println("Vous avez saisi le nombre : " + d); System.out.println("Veuillez saisir un boolean :"); boolean bool=sc.nextBoolean(); System.out.println("Vous avez saisi : " + bool); }

41 Chaînes de caractères La classe String permet de gérer les chaînes de caractères. La méthode length() retourne le nombre de caractères de la chaîne concernée. String s = "java" ; System.out.println (s.length ( ) ) ; // affiche 4 La méthode charAt (int i) retourne le caractère dindice i de la chaîne. String s = "java" ; System.out.println (s.charAt ( 2 ) ) ; // affiche v La méthode equals (String c) retourne true si la chaîne concernée est identique à la chaîne c et false sinon. String s = "java" ; String t = "lundi" ; String u = "ja" + "va" ; // Concaténation de 2 chaine s System.out.println (s.equals ( t ) ) ; // Affiche false System.out.println (s.equals (u ) ) ; // Affiche true

42 Chaînes de caractères public String concat (String str) Renvoie la chaîne, résultat de la concaténation de str à la fin d'une chaîne de caractères. public String replace (char oldChar, char newChar) Renvoie une chaîne où tous les caractères oldChar sont convertis en newChar. public String toLowerCase ( ) public String toUpperCase ( ) Renvoie une chaîne où tous les caractères majuscules sont convertis en minuscules, et inversement. public String trim ( ) Renvoie une chaîne où tous espaces en tête et en queue d'une chaîne de caractères sont supprimés.

43 Opérateurs Les opérateurs sont des symboles qui permettent de manipuler des variables. On distingue plusieurs types dopérateurs : Opérateurs de calcul. Opérateurs dassignation. Opérateurs dincrémentation. Opérateurs de comparaison. Opérateurs logiques. Opérateurs bit-à-bit. Opérateurs de rotation de bit.

44 Opérateurs de calcul Permettent de modifier mathématiquement la valeur dune variable

45 Opérateurs dassignation Ces opérateurs permettent de simplifier des opérations telles que ajouter une valeur dans une variable et stocker le résultat dans la variable. Exemple : x=x+2 x+=2 Les autres opérateurs du même type sont les suivants : OpérateurEffet +=Addition deux valeurs et stocke le résultat dans la variable à gauche -=Soustrait deux valeurs et stocke le résultat dans la variable *=Multiplie deux valeurs et stocke le résultat dans la variable /=Divise deux valeurs et stocke le résultat dans la variable

46 Opérateurs dincrémentation Ce type dopérateur permet de facilement augmenter ou diminuer dune unité une variable. Ces opérateurs sont très utiles pour des structures telles que des boucles qui ont besoin dun compteur (variable qui augmente de un en un).

47 i++ et ++i int i=1; int j=i++; System.out.println (j); System.out.println (i); int i=1; int j=++i; System.out.println (j); System.out.println (i); i++ : on retourne la valeur de i et après on lincrémente i : on incrémente la valeur de i et on la retourne. 2 2

48 Opérateurs de comparaison

49 Opérateurs logiques (booléens) Ce type dopérateur permet de vérifier si plusieurs conditions sont vraies :

50 Opérateurs bit-à-bit Ce type dopérateur traite ses opérandes comme des données binaires, plutôt que des données décimales, hexadécimales ou octales. Ces opérateurs traitent ces données selon leur représentation binaire mais retournent des valeurs numériques standards dans leur format dorigine. Les opérateurs suivants effectuent des opérations bit-à-bit, cest-à-dire avec des bits de même poids.

51 Opérateurs de rotation de bit Ce type dopérateur traite ses opérandes comme des données binaires dune longueur de 32 bits, plutôt que des données décimales, hexadécimales ou octales. Ces opérateurs traitent ces données selon leur représentation binaire mais retournent des valeurs numériques standards dans leur format dorigine. Les opérateurs suivants effectuent des rotation sur les bits, cest-à-dire quil décale chacun des bits dun nombre de bits vers la gauche ou vers la droite. La première opérande désigne la donnée sur laquelle on va faire le décalage, la seconde désigne le nombre de bits duquel elle va être décalée.

52 Priorités

53 Fonctions mathématiques double r; r=Math.random(); System.out.println("valeur aléatoire = " +r); r=Math.random(); System.out.println("encore : " +r); double d=5.4; System.out.println("valeur = "+d+" son arrondi = "+Math.round(d)); int i=11, j=32, k=13, m; m = Math.max (i,Math.max(j,k)); System.out.println("max de 3 entiers = " +m); Pas besoin dimporter la classe Math : elle fait partie du "package" java.lang de classes directement intégrées.

54 Structures de contrôles des instructions Les instructions alternatives (de choix) if-else if (condition) instruction à exécuter quand la condition est vrai; else instruction à exécuter quand la condition est fausse;

55 Exemple Écrire un programme qui affiche "vous êtes majeur" ou "vous êtes mineur" en fonction dune variable age.

56 Solution int age ; age=17; if ( age>=18) { System.out.println ("Vous êtes majeur" ) ; } else { System.out.println ( "Vous êtes mineur") ; }

57 Imbrication de structure de contrôle alternative if (condition1) bloc_1 else if (condition2) bloc_2 else if (condition3) bloc_3. else bloc_n

58 Exemple Écrire un programme qui affiche létat dun liquide composé deau pure en fonction dune variable température t. Bien évidemment nous sommes sur terre, au niveau de la mer, avec une pression normale.

59 Solution int t ; t=-10; if ( t<=0) { System.out.println ("solide") ; } else if (t<=100) { System.out.println ("liquide") ; } else { System.out.println ( "gaz") ; }

60 Opérateur ternaire Il est possible de faire un test avec une structure beaucoup moins lourde grâce à la structure suivante, appelée opérateur ternaire : (condition) ? instruction si vrai : instruction si faux Lorsque la condition est vraie, l'instruction de gauche est exécutée. Lorsque la condition est fausse, l'instruction de droite est exécutée. Exemple: int a=12; int b=9; int max = (a>b) ? a : b; System.out.println(max);

61 Switch L'instruction switch permet de faire plusieurs tests de valeurs sur le contenu d'une même variable. Ce branchement conditionnel simplifie beaucoup le test de plusieurs valeurs d'une variable. Cette opération aurait été compliquée (mais possible) avec des if imbriqués. Sa syntaxe est la suivante : switch (Variable) { case Valeur1 : Liste d'instructions; break; case Valeur2 : Liste d'instructions; break; case Valeurs... : Liste d'instructions; break; default: Liste d'instructions; break; }

62 Exemple import java.util.Scanner; class Jour { public static void main (String args[]) { Scanner sc = new Scanner(System.in); String res; System.out.println("donner un numero"); int x = sc.nextInt(); switch (x) { case 0 : res = "lundi"; break; case 1 : res = "mardi"; break; case 2 : res = "mercredi"; break; case 3 : res = "jeudi"; break; case 4 : res = "vendredi"; break; case 5 : res = "samedi"; break; case 6 : res = "dimanche"; break; default : res = "erreur"; break; } System.out.print("c'est un "+res); }

63 Boucles : instructions répétitives La boucle for : permet de répéter un nombre de fois prédéfini une instruction ou un bloc dinstructions. int i ; int x ; for (i =1; i <5; i=i+1) { x=2*i ; System.out.println (x) ; }

64 Double boucle for (int i=0; i<10; i=i+1) { for (int j =0; j

65 Boucle while int x ; x=32; while ( x!=1) { System.out.println (x) ; x=x / 2 ; }

66 Boucle do while import java.util.Scanner; class nombre { public static void main (String args[]) { Scanner sc = new Scanner(System.in); int nombre; do { System.out.println ("donnez une valeur entiere entre 5 et 9"); nombre= sc.nextInt(); } while ((5 > nombre) || (nombre > 9)) ; System.out.println("la valeur est : " + nombre); } Exemple : Obliger lutilisateur à saisir une valeur entre 5 et 9. //

67 Math.random( ) La fonction Math.random ( ) permet de générer aléatoirement un nombre réel dans lintervalle [0; 1[. Pour générer un nombre entier aléatoire compris entre 0 et 100 nous devons multiplier le résultat de la fonction Math.random(), puis convertir le résultat en entier. int x ; x=(int) (Math.random( ) *101 ) ; x aura pour valeur un nombre aléatoire compris entre 0 et 100. Exercice : Proposer un programme permettant dafficher : 15 valeurs aléatoires comprises entre 56 et valeurs aléatoires comprises entre -5 et 5.

68 Exercices Écrire un programme affichant les multiples de 3 de 1 à 10. Écrire un programme affichant la somme des 20 premiers entiers. Écrire deux programme différents qui affichent les 20 premiers chiffres entiers, du plus grand au plus petit. Écrire un programme permettant de lire au clavier un entier, tant que celui-ci nest pas pair. Écrire un programme qui lit des entiers tant que leur somme est inférieure à 100. Écrire un programme qui lit un nombre entier, qui affiche son carré et qui se termine quand le chiffre 0 est lu.

69 Exercices Écrire un programme, en utilisant une boucle adaptée, pour chacune des tâches suivantes : Afficher les 20 premiers termes de la suite 1/2^i. Lire un entier x et afficher les nombres pairs, à partir de 2, tant que leur somme est inférieure à x. Lire 10 nombres et calculer le minimum de ceux-ci. Lire un entier x et afficher les 5 premiers termes de la suite 1/x^i, tant que lentier x lu nest pas 0.

70 Tableaux class TabMax { public static void main (String args[]) { int [] tab; tab = new int[5]; tab[0]= 3; tab[1]= 45; tab[2]= 5; tab[3]= 412; tab[4]= 0; //int tab[] = {3,45,5,412,0}; int nbre, i, max; System.out.println("le nombre d'element"+ " du tableau = " + tab.length); i=1; max=tab[0]; while (i < tab.length) { if (tab[i]>max) max = tab[i] ; i = i+1; } System.out.println("le maximun est " + max); } Stocker plusieurs éléments de même type

71 Tableau à 2 dimensions class IDENT { public static void main (String args[]) { double ident[][]; int i,j; ident = new double[10][10]; for (i=0; i<10 ; ++i) for (j=0; j<10 ; ++j) if (i ==j ) ident[i][j]=1.0; else ident[i][j]=0.0; System.out.println("matrice identité :"); for (i=0; i

72 Tableau : arguments de la méthode main Il est possible de passer des paramètres au programme par l'argument de la méthode main : String args[] est un tableau de chaînes de caractères, autant de paramètres passés. Le passage se fait en tapant la commande : java programme parametre1 parametre2 …. Exemple : class ARG { public static void main (String args[]) { int i; System.out.println("les arguments :"); for (i=0; i

73 Exercice Proposer un programme permettant de définir un tableau de 20 entiers de valeurs initiales 1. Proposer un programme permettant de définir un tableau de 20 entiers correspondant aux 20 premières valeurs de la suite u i = 2*i; i > 0. Proposer un programme permettant de définir un tableau de 2000 entiers de la suite 2000, 1999, 1998, 1997, 1996, 1995, 1994,...,..., 3, 2, 1. Proposer un programme permettant de remplir, par des lectures au clavier, un tableau de 10 entiers.

74 Tableau de caractères vs String char [] tab ={'a','b','c','d'}; String s =new String (tab); System.out.println (s); // affiche abcd char [ ] tab2 = new char [2] ; tab2 [0] = 'h'; tab2 [1] = 'i'; s = new String (tab2); System.out.println (s); // affiche hi

75 Pointeurs C vs JAVA class Echange { public static void echanger (int [] a) { int tmp; tmp=a[0]; a[0]=a[1]; a[1]=tmp; } public static void main (String args[]) { int []x=new int [2]; x[0]=5; x[1]=10; System.out.println("avant : "+x[0]+" "+x[1]) ; echanger (x); System.out.println("apres : "+x[0]+" "+x[1]) ; } #include echanger (int *a, int *b) { int c; c=*a; *a=*b; *b=c; } void main() { int x=5; int y =10; printf("avant\n"); printf("%d\n",x); printf("%d\n",y); echanger (&x,&y); printf("apres\n"); printf("%d\n",x); printf("%d\n",y); }

76 Fonctions et procédures Un algorithme a souvent besoin de répéter des séries dinstructions, identiques ou similaires, qui aboutissent à un résultat dépendant des valeurs dentrée. Il va donc déporter ces tâches de calcul dans un sous-algorithme. Un algorithme peut appeler un sous-algorithme : lalgorithme principal passe ainsi temporairement le contrôle de lexécution du traitement au sous-algorithme. Un sous-algorithme est conçu pour faire un traitement bien défini, bien délimité, si possible indépendamment du contexte particulier de lalgorithme appelant.

77 Procédure avec paramètres public class carre { public static void affichagecarre (int i) { System.out.println (i*i) ; } public static void main ( String [ ] Argv ) { int y ; y = 8 ; affichagecarre (3) ; affichagecarre (5) ; affichagecarre (y) ; affichagecarre (10) ; }

78 Procédure sans paramètres public class affichage { public static void affichage5 ( ) { int i ; for ( i =1; i <6; i=i+1) { System.out.println ( i ) ; } public static void main ( String [ ] Argv ) { affichage5 ( ); }

79 Fonctions public class PROD { public static int produit ( int i, int j ) { int k ; k=i*j ; return k ; } public static void main ( String [ ] Argv ) { int x ; x= produit (5, 6) ; System.out.println (x) ; x= produit (15, 3) ; System.out.println (x) ; }

80 Fonctions public class MAXI { public static double maximun( double x, double y ) { double z ; if (x

81 Instruction dinterruption break Une instruction break ne peut se situer qu'à l'intérieur du corps d'instruction d'un bloc switch ou de l'une des trois itérations while, do..while, for. Lorsque break est présente dans l'une des trois itérations while, do..while, for : Si break n'est pas suivi d'une étiquette, elle interrompt l'exécution de la boucle dans laquelle elle se trouve, l'exécution se poursuit après le corps d'instruction. Si break est suivi d'une étiquette, elle fonctionne comme un goto : utilisation déconseillée en programmation moderne sauf pour le switch. public static void afficher (int n) { for (int i=1; i<=n;i++) { System.out.print(i+" "); if (i%10==0) break; } System.out.println("bonjour"); } public static void main (String args[]) { afficher(17); } bonjour

82 Instruction de rebouclage continue Une instruction continue ne peut se situer qu'à l'intérieur du corps d'instruction de l'une des trois itérations while, do..while, for. Lorsque continue est présente dans l'une des trois itérations while, do..while, for : Si continue n'est pas suivi d'une étiquette elle interrompt l'exécution de la séquence des instructions situées après elle, l'exécution par rebouclage de la boucle. Si continue est suivi d'une étiquette elle fonctionne comme un goto : utilisation déconseillée en programmation moderne. public static void afficher(int n){ for (int i=1; i<=n;i++) { if (i%10==0) continue; System.out.print(i+" "); } public static void main (String args[]) { afficher(17); }

83 Exercice Le palindrome est un mot dont l'ordre des symboles reste le même qu'on le lise de gauche à droite ou de droite à gauche (radar, elle, rever, Engage le jeu que je le gagne,...). Écrire une fonction inverseChaine qui retourne une chaine de caractères représentant linverse de la chaîne passée en paramètre. Écrire une fonction estIdentique qui retourne vrai si les 2 chaînes de caractères passées en paramètres sont identiques, faux sinon. Écrire un programme principal qui utilise intelligemment toutes les fonctions et procédures écrites précédemment. Reprendre les questions précédentes en gérant les espaces et la casse.

84 Exercice En utilisant des procédures, proposez les algorithmes suivants : Lire un nombre entier et afficher son cube. Lire un entier et afficher "Vrai" si lentier est pair. Lire un nombre réel x et afficher tous les entiers positifs plus petit que x, ceci tant que x est supérieur à 0.

85 Exercice En utilisant des fonctions, proposez les algorithmes suivants. A noter quil est préférable déviter les instructions daffichage à lintérieur dune fonction. Lire un nombre réel et calculer le cube de celui-ci. Lire un nombre entier n et calculer la somme des n premiers entiers (en utilisant une boucle). Lire deux nombres entiers hauteur et largeur puis calculer laire du rectangle correspondant. Calculer le maximum de trois nombres. Lire un nombre entre 1 et 7 et afficher le jour de la semaine correspondant. Lire un nombre réel x puis calculer larrondi inférieur de x.

86 Exercice Proposez une fonction lire_entier_pair permettant de lire un entier et dassurer sa parité. Proposez un jeu permettant de retrouver au clavier un nombre préalablement défini. Tant que le nombre lu nest pas le bon, le jeu affichera plus petit ou plus grand. La victoire sera marquée par gagné. On affichera au final le nombre de coups nécessaires pour trouver le nombre.

87 Exercice Proposer une procédure affiche_tableau_entiers (tab : tableau dentiers) permettant dafficher un tableau dentiers. Écrire une fonction créer_tableau qui permet de définir un tableau de 20 entiers correspondant aux 20 premières valeurs de la suite u 0 = 1; u i = 3*u i-1 +4; i > 0. La fonction Math.random ( ) permet de générer aléatoirement un nombre réel dans lintervalle [0; 1[. Pour générer un nombre entier aléatoire compris entre 0 et 100 nous devons multiplier le résultat de la fonction Math.random(), puis convertir le résultat en entier. int x ; x=(int) (Math.random( ) *101 ) ; x aura pour valeur un nombre aléatoire compris entre 0 e t 100. Proposer un programme permettant de définir un tableau de 50 entiers rempli avec des valeurs aléatoires comprises entre 0 et 1000.

88 Écrire une fonction somme qui permet de calculer la somme des éléments dun tableau. Écrire une fonction au_dessus qui prend en paramètre un tableau dentiers et un entier n. Cette fonction retourne le nombre déléments strictement supérieurs à la valeur n. Écrire une fonction moyenne qui permet de calculer la moyenne des éléments dun tableau. Écrire une fonction maximum qui retourne le maximum des éléments dun tableau. Écrire une fonction minimum qui retourne le minimum des éléments dun tableau. Écrire une fonction occurrence qui retourne le nombre doccurrences dun entier x parmi les éléments dun tableau. La valeur de x sera passée en paramètre de la fonction. Écrire une procédure affichage_inverse qui affiche un tableau dans lordre inverse. Exercice

89 Écrire une fonction autreSens qui retourne le tableau dentiers passé en paramètre dans lordre inverse. La première valeur de lun est donc la dernière valeur de lautre. Écrire une fonction sousTab qui prend un tableau dentiers tab, une valeur de départ, une valeur de fin et qui retourne le sous tableau compris entre les indices départ et fin du tableau tab. On prendra soin de vérifier que les valeurs départ et fin sont valides (par exemple fin doit être supérieur à départ). Écrire une fonction compareTab qui retourne vrai si les deux tableaux dentiers passés en paramètres sont égaux. Écrire une fonction concatTab qui retourne la concaténation de deux tableaux dentiers passés en paramètres. Ecrire une fonction qui teste si un tableau d'entiers passé en paramètre est trié ou non (la fonction retourne un booléen).

90 Exercice Écrire la procédure public static void remplissagealeatoire(int [] tableau) qui remplit un tableau de nombres aléatoires compris entre 0 et Écrire la procédure public static void remplissageordrecroissant(int [] tableau) qui remplit un tableau avec des valeurs classées par ordre croissant. Écrire la procédure public static void remplissageordredecroissant(int [] tableau) qui remplit un tableau avec des valeurs classées par ordre décroissant. Écrire la procédure public static void triSelection(int[] tableau) permettant de trier le tableau par selection. La fonction System.currentTimeMillis() ; retourne une valeur de type long égale au nombre de millisecondes écoulées depuis le 1er janvier H00 UTC. En comparant les valeurs retournées avant et après lexécution dune fonction nous pouvons en déduire le temps approximatif dexécution de la fonction.

91 Exercice long start ; long stop ; start=System.currentTimeMillis ( ) ; triSelection (tab) ; stop=System.currentTimeMillis ( ) ; System.out.println ( "Temps tri du tableau : "+(stops-start ) ) ; Modifier la procédure main de la classe précédente pour afficher : Le temps pour trier un tableau rempli de nombres aléatoires. Le temps pour trier un tableau rempli de nombres trier par ordre croissant. Le temps pour trier un tableau rempli de nombres trier par ordre décroissant. Créer une nouvelle classe TriBulle et répéter les questions précédentes mais appliquées au tri bulle. Compléter le fichier TriRapide.java afin de comparer les temps dexécution du tri par sélection et du tri bulle avec le tri rapide. Attention : Pour exécuter TriRapide, utilisez la syntaxe suivante : java -Xss4m TriRapide


Télécharger ppt "Badr Benmammar Introduction à la programmation en Java."

Présentations similaires


Annonces Google