• Aucun résultat trouvé

Td corrigé Algorithmique et initiation à la programmation Java - Examen corrige pdf

N/A
N/A
Protected

Academic year: 2022

Partager "Td corrigé Algorithmique et initiation à la programmation Java - Examen corrige pdf"

Copied!
29
0
0

Texte intégral

(1)

L3 Monnaie - Finance

Algorithmique et initiation à la programmation java

Première partie

Nicolas THIBAULT - nicolasvincentpierre@gmail.com

(2)
(3)

Modalités

Cours en amphithéâtre

Les lundis de 12h30 à 14h00 (amphi 3). Deux fascicules de cours (polycopiés à trous) sont distribués en cours.

Travaux dirigés

12 séances, les TD commençant la 2ème semaine du semestre. Un fascicule de TD est distribué lors du 1er TD

.

Pour les TD

avoir toujours les fascicules de cours et de TD avec soi disposer dès le premier TD d’une clé USB standard

Evaluation : une note de contrôle continu calculée de la manière suivante : 1 contrôle à la séance de TD 6 (C1)

1 contrôle à la séance de TD 12 (C2)

Note finale calculée de la façon suivante : (C1 + C2) / 2

ATTENTION : Il est strictement interdit de rattraper un contrôle en le passant dans un autre groupe que celui dans lequel vous êtes inscrit auprès de la scolarité. En cas d'absence à un des deux (ou aux deux) contrôles (TD 6 et/ou TD 12), voici les règles NON-NÉGOCIABLES qui s'appliqueront :

Cas n°1 : Vous êtes absent à un des deux contrôles et vous avez une justification médicale pour votre absence (ATTENTION : ne seront considérés comme valables que les certificats d'arrêt de travail, un simple certificat médical étant insuffisant). Vous devrez alors envoyer par mail votre certificat d'arrêt de travail à votre chargé de TD ainsi qu'à votre chargé de cours (nicolasvincentpierre@gmail.com). Vous serez alors dispensé de la note du contrôle que vous n'avez pas passé et votre note finale sera celle que vous aurez obtenue au seul contrôle que vous aurez passé.

Cas n°2 : Vous êtes absent à un des deux contrôles mais vous n'avez pas de justification médicale pour votre absence (ATTENTION : ne seront considérés comme valables que les certificats d'arrêt de travail, un simple certificat médical étant insuffisant). Vous aurez alors zéro au contrôle manqué. IL N'Y AURA AUCUN RATTRAPAGE POSSIBLE (MÊME EN SEPTEMBRE).

Cas n°3 : Vous êtes absent aux deux contrôles. Quelles que soient vos raisons, conformément aux règles en vigueur à Panthéon-Assas, vous serez notés défaillant pour cette matière (qui équivaut à la note zéro dans la matière). Étant donné que la matière n'est évaluée qu'au moyen d'un contrôle continu, IL N'Y AURA AUCUN RATTRAPAGE POSSIBLE (MÊME EN SEPTEMBRE).

(4)

ALGORITHMIQUE ET INITIATION À LA PROGRAMMATION JAVA...1

MODALITÉS...2

INTRODUCTION...5

Les langages de programmation...5

Java, compilé et interprété...6

Applications, applets et servlets...6

ELÉMENTS DE PROGRAMMATION JAVA...7

Notion de variable...7

Affectation...7

Egalité, inégalité...7

Conjonction, disjonction...8

Types de données...8

Notion d’application...9

Les tests...10

Tableaux...11

Les boucles...11

JAVA, LANGAGE À OBJETS...13

Classes et instances...13

Attributs et méthodes d’instances...17

Attributs et méthodes de classes...17

ALGORITHMIQUE...18

Permuter le contenu de deux variables...18

Pour les algorithmes sur tableaux suivants,...18

Insérer un élément x dans un tableau à la suite des éléments existants...19

Déterminer les éléments maximum et minimum d’un tableau...19

Déterminer l’indice du maximum ou du minimum d’un tableau...19

Somme des éléments d’un tableau...20

(5)

Comptages divers...20

Insérer un élément à sa place, le tableau étant déjà rangé...21

Les tris sur tableaux...22

LES PAQUETAGES JAVA...24

Qu’est-ce qu’un paquetage ?...24

La notion d’héritage...24

Protection des attributs et méthodes...24

Les interfaces...25

Les classes d’exceptions...25

Le paquetage java.lang...26

Le paquetage java.util...27

(6)

Introduction

Les langages de programmation

o Intermédiaires entre …

o Permettent de décrire les instructions élaborées de manière plus … pour former le … du programme

o Le code source doit ensuite être … en langage machine pour pouvoir être exécuté par le … o Il y a deux modes de traduction du code source :

* la … (langage dit … )

* l’ … (langage dit … )

Les langages compilés

Le compilateur

o est dédié à … et au …

o vérifie la … du code source ; si c’est correct, génère un fichier … en langage machine, exécutable sur toute machine …

Exemples de langages compilés : Cobol ( … ), C, C++ ( … )

Avantage des langages compilés : o Le code objet s’exécute … Inconvénient des langages compilés : o Le code objet est dédié à un seul …

Les langages interprétés

L’interpréteur

o lit le fichier source ligne à ligne, … la syntaxe de chaque instruction et ne l’exécute que si …

Exemples de langages interprétés : HTML, javaScript, PHP ( … ), SQL Avantage des langages interprétés

o On peut interpréter le fichier sur tout type d’ordinateur, à condition de disposer de l’ … adapté à cet ordinateur

Inconvénient des langages interprétés

o La vérification ligne à ligne cause une certaine … à l’exécution

(7)

Java, compilé et interprété

Langage développé par SUN depuis 1995.

Universellement …

Sur l’ordinateur sur lequel on écrit un programme Java, le fichier source est transformé par le compilateur javac en un … non exécutable, qui est … quel que soit le type de machine sur lequel on travaille.

Transféré sur un autre type d’ordinateur, le pseudo-code est interprété par un … appelé … L’interpréteur :

o ne vérifie plus la syntaxe des instructions (gain de temps) o exécute directement …

Le pseudo-code est donc indépendant du type d’ordinateur sur lequel … et de celui sur lequel …

Pour écrire un programme java sur un ordinateur, il suffit donc de disposer … Pour exécuter un programme java compilé, il suffit donc de disposer …

Le pseudo-code est de … , donc …

java est donc devenu le langage idéal …

Applications, applets et servlets

Java permet d’écrire :

o Des applications : programmes …

o Des applets : petits programmes appelés dans une page HTML par la balise … et interprétés par …

o Des servlets : programmes java stockés … permettant de générer

dynamiquement des pages html en réponse à …

(8)

Eléments de programmation Java

Notion de variable

La notion de variable en informatique est assez proche … En mathématiques, x = 5 veut dire …

En informatique, x est un dont la taille (nombre de … qui composent cet emplacement) dépend de ce qu’on veut y stocker : un entier, un réel…

Le contenu de cet emplacement-mémoire peut constamment être … On écrit donc (syntaxe java) :

int x ; (réservation de place … )

x = 2 ; (on y met la valeur 2)

x = 5 ; (on change, on y met … )

float y ; (réservation de place … )

y = 3.5 ; (on y met la valeur 3.5) ou bien directement :

int x = 8; (les deux opérations … )

float y = 3.5 ;

Affectation

Toute instruction complète se termine par …

Les deux instructions x = 5 ; x = 7 ; y = 3.5 ; donnent des valeurs ( … ) aux emplacements-mémoire x et y. Elles sont appelées des …

On dit qu’on … une valeur à une variable occupant une certaine place-mémoire.

Il serait plus naturel d’écrire : x  5 (x reçoit la valeur 5), y  3.5 (y reçoit la valeur 3.5), mais tous les langages de programmation actuels (C, C++, JavaScript, Java, PHP…) utilisent la notation a = b au lieu de a  b.

L’écriture a = b correspond donc en fait à a  b et doit se lire « a la valeur de b ».

A gauche : … A droite : …

On peut affecter à une variable :

o une … x = 3; y = 5 ; z = 4 ;

o la … d’une autre variable x = y; (x reçoit la VALEUR de y, donc 5) o le résultat du … d’une … x = y + z; (x reçoit la VALEUR de y + z)

o le résultat du calcul d’une … t = max(x, y, z) ;

Egalité, inégalité

Egalité

Le symbole = étant réservé à l’affectation, on teste l’égalité de deux variables a et b autrement. On écrit :

if qui se lit si (a = b) ...

Inégalité

On teste l’inégalité de deux variables a et b en écrivant :

if qui se lit si (a ¹ b) ...

(9)

Exemples

o si x = 4 alors y = 7 :

o si annee = 2012 alors nb_jours_fevrier = 29 : o si x ≠ 10 alors y = 8 :

o si annee > 4 alors taux = 3.5 :

Conjonction, disjonction

Conjonction

La conjonction ET s’écrit &&

si (a=b) et (c=d) s’écrit donc : Disjonction

La disjonction OU s’écrit | | si (a=b) ou (c=d) s’écrit donc : Exemples

o si x = 4 et y = 5 alors z = 7 : …

o si annee=2012 et mois=2 alors nb_jours=29 : … o si mois =1 ou mois=3 alors nb_jours =31 : …

Types de données Java est un langage typé

Toute variable utilisée doit nécessairement être … et son … doit être … Un nom de variable doit :

o être constitué …

o ne PAS comporter … ni de …

o ne pas être un … du langage (liste fournie en TD) Exemples : float revenu; int mois_annee;

Les types élémentaires sont appelés des …

Toute variable d’un type primitif est une variable simple, non composée (int, float…) Les types autres que primitifs sont des … (on verra plus tard)

Types de données primitifs en Java

Il y a 8 types de données primitifs (les plus utilisés sont soulignés) :

o boolean :

o char :

o byte :

o short :

o :int

o long :

o float :

o double :

L’instruction : boolean fini = false; définit une variable fini de type … et de valeur false.

L’instruction : int i = 254256; définit une variable i de type … , stockée sur 32 bits et de valeur 254256

L’instruction : float f = 156.256; définit une variable f de type … , stockée sur 32 bits et de valeur 156.256

(10)

Opérateurs de cast

Pour créer une variable d’un type à partir d’une variable d’un autre type semblable (nombre et nombre, par exemple), on utilise un …

Il est noté entre … Exemples

float f=156.256; int j=(int)f;

à j est alors un entier valant 156

double t=0.567833333; float d=(float)t;

à d est un flottant stocké sur 32 bits au lieu de 64 bits. On a donc perdu …

Notion d’application

Fichier Programme .java :

public class Programme {

public static void main(String[] args) { int a = 25 ;

int b = 76 ;

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

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

} }

Un programme java est contenu dans une …

La description d’une classe est faite entre une … { et une … }

S’il n’y a qu’une seule classe, elle est déclarée … afin d’être accessible à tout utilisateur

Le programme proprement dit figure dans une méthode appelée … déclarée sous la forme : public static void main(String[] args)

Toute méthode a un … compris entre { et }

Tout programme contenant une méthode appelée … est appelé … o public signale que tout le monde peut exécuter …

o static indique que la méthode main est une méthode … (on verra plus tard) o void dit que la méthode main …

o String[] args permet de passer … à la méthode main (ce qu’on ne fera pas)

o System.out.println(chaîne) fait afficher à l’écran une … Pour construire une chaîne à partir de plusieurs morceaux, on utilise … qui réalise leur …

Compilation

javac Programme.java o javac est …

o Il compile le fichier Programme.java et crée le fichier … Programme.class qui n’est pas

… exécutable

Exécution

java Programme o java est …

o Il charge le fichier … et …

Résultat à l’écran a vaut : 5 b vaut : 7

(11)

Les tests

Les tests permettent de faire des traitements …

Le test simple : if … else

Il s’écrit : if (test) {

instructions;

} else {

instructions;

}

La clause else est … On peut avoir simplement : if (test) {

instructions ; }

Exemple : fichier Programme1.java public class Programme1 {

public static void main(String[] args) { int a = 25 ; int b = 76 ;

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

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

int min ;

if (a < b) { min = a; } else { min = b; }

System.out.println("le minimum de a et b est " + min);

} }

Le test multiple : switch

Il s’écrit : switch (variable) { case 1: instructions;

case 2: instructions;

...

default : instructions;

}

La variable testée doit être de type …

Le cas sert si l’on veut prévoir un traitement par défaut.

... dans les instructions signale que le cas est traité et que l’on saute …

Exemple : fichier Programme1b.java public class Programme1b {

public static void main(String[] args) {

int num = 11 ; String mois = "" ; // type chaîne de caractères switch(num) {

case 1 : mois="janvier"; break ; case 2 : mois="fevrier"; break ; case 3 : mois="mars"; break ; case 4 : mois="avril"; break ; case 5 : mois="mai"; break ; case 6 : mois="juin"; break ; case 7 : mois="juillet"; break ; case 8 : mois="aout"; break ; case 9 : mois="septembre"; break ; default : mois="au dernier trimestre";

}

System.out.println("le mois est " + mois);

} }

(12)

Tableaux

Les tableaux sont des collections de variables … , en … .

On doit d’abord les … , puis faire … .

Une fois qu’un tableau est créé, sa taille … On accède à l’élément d’indice i de t par t[i], les indices … Exemples

int[] t ; // ou int t[]; // déclaration d’un tableau d’entiers t=new int[20]; // création de t en mémoire

String[] t1 ; // ou String t1[]; // déclaration d’un tableau de chaînes t1 = new String[10] ; // création de t1 en mémoire

Utilisation : fichier Tableau.java public class Tableau {

public static void main(String[] args) { String[] t = new String[12] ;

t[0]="janvier"; t[1]="fevrier"; t[2]="mars"; t[3]="avril";

t[4]="mai"; t[5]="juin";t[6]="juillet"; t[7]="aout";

t[8]="septembre"; t[9]="octobre"; t[10]="novembre";

t[11]="decembre";

System.out.println("Les mois de l'annee sont : ");

System.out.println(t[0]); System.out.println(t[1]);

System.out.println(t[2]); System.out.println(t[3]);

System.out.println(t[4]); System.out.println(t[5]);

System.out.println(t[6]); System.out.println(t[7]);

System.out.println(t[8]); System.out.println(t[9]);

System.out.println(t[10]); System.out.println(t[11]);

} }

Les boucles La boucle for

La boucle for permet de … un certain nombre de fois des instructions. Elle s’écrit : for (initialisation; test_continuation; incrémentation) {instructions;}

Exemple : répéter 10 fois des instructions

for (int i = 0 ; i < 10 ; i++) { instructions;

}

o L’initialisation précise … qui contrôle la boucle et …

int i=0

o Le test est un … ( test qui doit être vérifié pour que la boucle … )

i < 10

o L’incrémentation précise comment …

Généralement on écrit i++ qui veut dire i=i+1 (on passe de i à i+1, donc … )

(13)

Fichier Tableau1.java : une seule instruction … public class Tableau1 {

public static void main(String[] args) { String[] t = new String[12] ;

t[0]="janvier"; t[1]="fevrier"; t[2]="mars"; t[3]="avril";

t[4]="mai"; t[5]="juin"; t[6]="juillet"; t[7]="aout";

t[8]="septembre";t[9]="octobre";t[10]="novembre";

t[11]="decembre";

System.out.println("Les mois de l'annee sont : ");

for (int i = 0 ; i < 12; i++) { System.out.println(t[i]);

} }

}

Fichier Tableau2.java : on utilise deux boucles for : une pour … ,

l’autre pour faire …

public class Tableau2 {

public static void main(String[] args) { double[] t = new double[20] ; for (int i = 0 ; i < 20 ; i++) {

t[i] = i ; }

for (int i = 0; i < 20 ; i++) {

System.out.print(t[i] + " * ");

} }

}

o La variable i est déclarée … o Entre les deux boucles, i …

o On dit que la … se limite à la … en cours Fichier Tableau2b.java : la variable i est …

o La portée de i est alors … toute entière (i est connu dans … ).

public class Tableau2b {

public static void main(String[] args) { double[] t = new double[20] ; int i ;

for (i = 0 ; i < 20 ; i++) { t[i] = i ;

}

for (i = 0; i < 20 ; i++) {

System.out.print(t[i] + " * ");

}

System.out.println("\n ---> i vaut maintenant " + i) ; }

}

La boucle while

Elle permet de … des instructions tant …

Elle s’écrit : while (test) { instructions ; }

Les instructions doivent modifier … une variable intervenant dans le test, pour que la boucle while ne boucle …

(14)

Exemple : afficher les éléments d’un tableau de nombres t tant qu’ils sont inférieurs à 20.

int i = 0 ;

while (t[i] < 20) {

System.out.print(t[i] + " ") ; i++ ;

}

i est modifié dans les instructions, donc t[i] correspond à chaque passage à … du tableau t.

Attention cependant à ne pas dépasser !

Si le tableau est de taille n, il faut écrire : int i = 0 ;

while ((i < n) && (t[i] < 20)) { // && est la notation pour ET System.out.print(t[i] + " ") ;

i++ ; }

La boucle do … while

Elle permet de faire exécuter … des instructions puis de …

ces instructions tant qu’un test est vérifié.

Elle s’écrit : do {

instructions ; }

while (test);

Les instructions doivent modifier …

une variable du test, pour que le do … while ne boucle pas …

Exemple : afficher le premier élément du tableau t, puis les éléments suivants tant qu’ils sont inférieurs au premier :

int i = 0 ; do {

System.out.print(t[i]+ " ");

i++ ; }

while ((i<n)&&(t[i]<t[0]));

Java, langage à objets

Classes et instances

Un programme java peut ne contenir qu’une seule … , comme on l’a vu jusqu’à présent Cette classe, qui contient … , constitue à elle toute seule toute l’application Mais java est avant tout un « langage », ce qui veut dire qu’une classe peut aussi être un … à partir duquel on peut fabriquer des objets qu’on appelle des …

On souhaite créer des « objets » comportant :

o un entier n qui représente la … d’un tableau o un tableau t de n entiers comportant les entiers 1, 2, 3, … n-1 Exemple de deux tels objets :

(15)

La classe (encore embryonnaire) correspondant à ces objets est la suivante : class ObjetTableau { // début de la classe

int n ; // deux attributs : ...

int[] t ; // et t ...

} // fin de la classe

Cette description signifie que tout objet de la classe ObjetTableau, dès qu’il sera créé, comportera automatiquement deux variables (qu’on appellera des ) n et t.

Une classe correspond donc à la description d’un ensemble d’objets ayant … Les objets créés selon ce modèle sont appelés des de la classe.

Pour donner des valeurs aux attributs, donc remplir n et t, on doit ajouter dans la classe une méthode spécifique appelée …

Le … est … permettant de construire des objets

class ObjetTableau { // début de la classe

int n ; // deux attributs : n et t

int[] t ;

ObjetTableau(int a) { // le ...

n = a ; // n prend la valeur ...

t = new int[n] ; // on réserve la place pour ...

for (int i=0 ; i < n ; i++) {

t[i] = i+1 ; // remplissage de ...

} } // fin du ...

} // fin de ...

Créer des objets de la classe ObjetTableau se fait … , dans une autre classe qui sert de programme principal :

public class ProgObjet { // début de classe public static void main (String args[ ]) { // le main

ObjetTableau obj1 = new ObjetTableau(6);

ObjetTableau obj2 = new ObjetTableau(3);

} // fin ...

} // fin ...

Ce programme crée bien les deux objets, mais pour le moment n’affiche …

On ajoute donc à la classe ObjetTableau une méthode void affiche() permettant à un objet … (c’est-à-dire de s’afficher … ) :

(16)

int n ; // deux attributs : n et t int[] t ;

ObjetTableau(int a) { // le constructeur n = a; // n prend la valeur a

t = new int[n] ; // on réserve la place pour le tableau t for (int i=0;i<n;i++) { // remplissage du tableau

t[i] = i+1 ; }

} // fin du constructeur

void affiche() {

System.out.println("affichage des elements");

for (int i = 0; i < n; i++){

System.out.print(t[i]+" * ");

}

System.out.println("");

}

} // fin de la classe

On ajoute ensuite à la même classe une méthode int inferieurs(int p) permettant à un objet de calculer le nombre d’éléments de son tableau qui sont …

class ObjetTableau { // début de la classe int n ; // deux attributs : n et t int[] t ;

ObjetTableau(int a) { // le constructeur n = a; // n prend la valeur a

t = new int[n] ; // on réserve la place pour le tableau t for (int i=0;i<n;i++) { // remplissage du tableau

t[i] = i+1 ; }

} // fin du constructeur

void affiche() {

System.out.println("affichage des elements");

for (int i = 0; i < n; i++){

System.out.print(t[i]+" * ");

}

System.out.println("");

}

int inferieurs(int p) { int compteur = 0 ;

for (int i = 0; i < n; i++){

if (t[i]<p) compteur++ ; }

return compteur ; }

} // fin de la classe

On ajoute enfin à … les instructions demandant aux objets créés d’exécuter ces méthodes :

public class ProgObjet { // classe principale

public static void main (String args[ ]) { // main ObjetTableau obj1 = new ObjetTableau(6);

obj1.affiche(); // affichage de obj1

// nb elements < 3

System.out.println(obj1.inferieurs(3)) ;

(17)

ObjetTableau obj2 = new ObjetTableau(3);

obj2.affiche(); // affichage de obj2

// nb elements < 4

System.out.println(obj2.inferieurs(4)) ;

} // fin du main

} // fin de classe

Les deux méthodes void affiche() et int inferieurs(int p) ne peuvent être exécutées que par … o On les appelle des …

void affiche() affiche les éléments à l’écran, mais ne calcule rien, d’où son type de valeur de retour : … int inferieurs(int p)calcule le nombre d’éléments de t qui sont strictement inférieurs à p

o int (valeur de retour) indique que le résultat … (valeur du compteur) o int p est le … de la méthode

o return permet de … la valeur du compteur

Le fichier comporte finalement deux classes : ObjetTableau et ProgObjet. Il y aura donc … fichiers compilés.

(18)

Il s’agit d’une , car il y a dans une des classes une méthode appelée … La classe principale est celle qui comporte le main ; elle …

o On l’appelle aussi … l’application

Le fichier doit porter le nom … , suivi de l’extension .java o Ce sera donc ici …

Attributs et méthodes d’instances

Une classe est un … permettant de construire des objets.

Un objet est nécessairement créé à partir d’une classe, à l’aide … On dit que l’objet est une … de la classe et qu’il est … Mais une classe n’oblige pas forcément à créer des objets

Un objet comporte des et dispose de … , définis dans

sa classe.

Ainsi, dans la classe ObjetTableau, o n et t sont des …

o les méthodes void affiche() et int inferieurs(int p) sont des …

Attributs et méthodes de classes

Une classe peut aussi comporter des et des .

Ils sont signalés par le mot-clé … et existent dès le début de l’application

Seule exception : le est une méthode de classe, alors qu’il n’est jamais précédé de …

Exemple d’utilisation d’un attribut de classe et d’une méthode de classe pour compter les objets créés : fichier ProgObjet1.java

class ObjetTableau {

static int nbobjets = 0; //

int n ; // attribut d’instance

int[] t ; // attribut d’instance

ObjetTableau(int a) { // constructeur n = a;

t = new int[n] ;

for (int i=0;i<n;i++) { t[i] = i+1 ;}

nbobjets++ ; // incrémentation du compteur }

(19)

void affiche() {

System.out.print("affichage d'un objet :");

for (int i = 0; i < n; i++){

System.out.print(t[i]+" * ");

}

System.out.println("");

}

static void nombreObjets() { // méthode de classe

System.out.println("Nombre d'objets : " + nbobjets) ; }

}

public class ProgObjet1 { // début de classe

public static void main (String args[ ]) { // le main

ObjetTableau.nombreObjets() ;// appel à la méthode de classe ObjetTableau obj1 = new ObjetTableau(6);

obj1.affiche(); // affichage de obj1

ObjetTableau.nombreObjets() ;// appel à la méthode de classe ObjetTableau obj2 = new ObjetTableau(10);

obj2.affiche(); // affichage de obj2

ObjetTableau.nombreObjets() ;// appel à la méthode de classe

} // fin du main

} // fin de classe

static int nbobjets : attribut de classe initialisé … , modifié dans …

static void nombreObjets() : méthode de classe affichant le nombre d’objets, appelée dans le

programme principal sur … par : ObjetTableau.nombreObjets();

Exécution

Nombre d'objets : 0

affichage d'un objet : 1 * 2 * 3 * 4 * 5 * 6 * Nombre d'objets : 1

affichage d'un objet : 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 * Nombre d'objets : 2

Algorithmique

Permuter le contenu de deux variables

On veut permuter le contenu de deux variables a et b.

Exemple :

o Avant la permutation, a contient 38 et b contient 56.

o Après la permutation, a doit contenir 56 et b doit contenir 38.

Si on écrit a  b (a reçoit la valeur de b), a prend la valeur de b mais …

Il faut donc … où l’on puisse stocker ….

On écrit donc :

temp  ... ; ...  ... ; ...  temp ; Pour permuter deux variables, on a donc impérativement besoin …

Pour les algorithmes sur tableaux suivants,

On suppose qu’un tableau t, de taille nb, contient n nombres, n ≤ nb.

Les cases t[0], t[1], …, t[n-1] du tableau sont donc …

(20)

Insérer un élément x dans un tableau à la suite des éléments existants

Exemple

Le tableau t dispose de 15 places (nb = 15) mais contient 7 nombres (n = 7), et on veut y insérer le nombre 10.

Algorithme si (n = nb)

alors ...

sinon

faire

...  ...

...  ...

fin faire fin si

Résultat

Déterminer les éléments maximum et minimum d’un tableau

Le tableau t est donné, ainsi que son nombre d’éléments n.

On recherche le plus grand ou le plus petit élément du tableau.

Algorithme de recherche du maximum Algorithme de recherche du minimum

max  ...

pour i allant de 1 à n faire

si ( ... ) alors faire

...  ...

fin faire fin si

fin faire fin pour

A la fin de l’algorithme, max contient le plus grand élément du tableau.

min  ...

pour i allant de 1 à n faire

si ( ... ) alors faire

...  ...

fin faire fin si

fin faire fin pour

A la fin de l’algorithme, min contient le plus petit élément du tableau.

Déterminer l’indice du maximum ou du minimum d’un tableau

C’est le même algorithme, mais où on mémorise en même temps : o la plus grande (ou petite) valeur …

o son …

(21)

Algorithme pour l’indice du plus grand Algorithme pour l’indice du plus petit max  ...

indice  ...

pour i allant de 1 à n faire

si ( ... ) alors faire

max  ...

indice  ...

fin faire fin si

fin faire fin pour

A la fin de l’algorithme, max contient le plus grand élément du tableau et indice contient son indice dans le tableau

min  ...

indice  ...

pour i allant de 1 à n faire

si ( ... ) alors faire

min  ...

indice  ...

fin faire fin si

fin faire fin pour

A la fin de l’algorithme, min contient le plus petit élément du tableau et indice contient son indice dans le tableau

Somme des éléments d’un tableau

Il s’agit de … au fur et à mesure les valeurs des éléments du tableau.

Il est donc nécessaire d’avoir une variable contenant … Algorithme :

som  ...

pour i allant de 0 à n faire

som  ...

fin faire fin pour

A la fin, la somme des éléments du tableau est …

Comptages divers

On a besoin de variable supplémentaire.

Exemple : compter le nombre d’éléments égaux à p.

Algorithme : cpt  ...

pour i allant de 0 à n faire

si ( ... ) alors faire

...  ...

fin faire fin si

fin faire fin pour

A la fin, le nombre d’éléments égaux à p est …

(22)

Insérer un élément à sa place, le tableau étant déjà rangé

Un tableau de nb places contient n nombres déjà rangés dans l’ordre croissant.

On veut y insérer un nouveau nombre.

Exemple :

Principe

o si le tableau est déjà plein, … o si le tableau est vide, …

o sinon, c’est que le tableau est partiellement rempli : - on cherche alors le premier indice i tel que…

- on décale vers la fin du tableau les éléments d’indice allant de … - on place x en …

- on augmente … d’une unité Algorithme

si ( ... ) ...

sinon si ( ... ) faire

t[n]  ...

n  ...

fin faire sinon faire

i  ...

tant que ( ... ) faire i  ... fin faire pour j  ...

faire ...  ... fin faire t[i]  ...

n  ...

fin faire fin si

fin si Résultat

(23)

Les tris sur tableaux Algorithme du tri tournoi

Principe

A partir d’un rang i, on considère l’élément … du tableau et on le compare à tous les éléments t[j]

suivants.

A chaque fois que t[i] est … à t[j], on permute … et … On effectue cela pour i allant du … indice à … indice.

Exemple

i = 0. On compare t[0] à t[1], t[2],…, t[n-1] et à chaque fois que t[0] > t[j], on permute …

A la fin de ce premier parcours, le plus petit élément est arrivé …

On recommence avec i = 1 : on compare t[1] à t[2], … , t[n-1] et lorsque t[1] > t[j], on permute …

A la fin du deuxième parcours, les deux plus petits éléments sont … On recommence ensuite avec i = 2, 3, … n-2.

Algorithme : pour i  ...

pour j  ...

si ( ... ) faire

temp  ...

t[i]  ...

t[j]  ...

fin faire fin si

fin pour

(24)

Algorithme du tri à bulles

Principe

On compare chaque élément à son suivant.

S’il lui est supérieur, on les permute ; sinon, on passe à l’élément suivant.

Lorsqu’on a parcouru tout le tableau, on recommence un nouveau parcours s’il y a eu au moins une permutation.

Exemple du premier parcours : ci-contre

A la fin de ce premier parcours, le plus grand élément est arrivé …

Au parcours suivant, on obtient le résultat ci-contre.

Les deux plus grands éléments sont … position et … position.

Le tableau est trié dès qu’un parcours est fait sans …

Pour contrôler l’arrêt des permutations, on utilise une variable initialisée à 0 au début de chaque parcours, et que l’on passe à 1 dès que …

Il suffit alors de boucler alors tant que cette variable, à la fin d’un parcours, est égale …

Algorithme

permut  ...

tant que ( ... ) faire

permut  ...

pour i  0 à ...

si ( ... ) faire

permut  ...

temp  ...

t[i]  ...

t[i+1]  ...

fin faire fin si

fin pour fin faire fin tant que

(25)

Les paquetages Java

Qu’est-ce qu’un paquetage ?

Les paquetages ( … ) sont des librairies de … , de … et …

regroupées selon leur fonction.

Elles sont fournies en même temps que le compilateur javac et l’interpréteur java.

La documentation concernant chaque paquetage est stockée sous forme de pages HTML dans un dossier spécifique

o A l’université, C:\sun\appserver\docs\doc\docs\

o Chez vous, …

Choisir la page index.html puis cliquer sur le lien intitulé : Java 2 Platform … API Specification

La notion d’héritage

Toutes les classes sont liées par la notion …

On déclare qu’une classe dérive d’une autre classe par : class Fille extends Mere {

...

}

La classe fille hérite de tous … et … de la classe mère.

Un objet de la classe fille est donc un objet de la classe … (éventuellement complété par des champs et des méthodes supplémentaires), mais la réciproque est …

Toutes les classes héritent d’une classe spécifique appelée . Si on ne précise pas de clause d’héritage dans la définition d’une classe, par défaut cette classe hérite de …

Protection des attributs et méthodes Déclarations de protection

Les attributs et méthodes d’une classe peuvent être déclarés private, public, protected ou ne pas être précédés de déclaration de protection.

Exemple

class Truc {

private int a ; protected int b ; public int c ; int d ;

}

Déclaration private

Les attributs et méthodes déclarés private ne sont accessibles qu’à l’intérieur de leur propre classe à a ne sera donc accessible …

Déclaration protected

Les attributs et méthodes déclarés protected ne sont accessibles qu’aux sous-classes (qu’elles soient dans le même paquetage ou pas) et aux classes du même paquetage

à b sera donc accessible …

(26)

Déclaration public

Les attributs et méthodes déclarés public sont toujours accessibles à c sera …

Sans déclaration

Les attributs et méthodes sans aucune déclaration de protection (mode dit … ) sont accessibles par toutes les classes du même paquetage. C’est le mode de protection par défaut

à d sera donc accessible …

Les interfaces

Une interface est une sorte de classe spéciale, dont toutes les méthodes sont déclarées … et … (sans code). En fait, une interface , mais sans donner le code permettant d’exécuter ces services.

Une classe qui souhaite utiliser une interface le signale par le mot implements : class B implements C { ... } ; On dit alors qu’elle … l’interface.

Dans la classe B, on doit alors donner le code de … les méthodes de l’interface.

Une classe B peut hériter d’une classe A et implémenter une ou plusieurs interfaces : class B extends A implements C, D {...} ;

class A interface C, D

extends implements

class B

Les méthodes des interfaces C et D doivent alors obligatoirement … On utilisera quelques interfaces par la suite.

Les classes d’exceptions Lever une exception

Lorsqu’une méthode est exécutée, il peut se produire des erreurs. On dit alors qu’une est … o Une exception est un objet, instance d’une des nombreuses sous-classes de la classe Exception.

Chaque méthode qui risque de provoquer une ou des erreur(s) le … par le mot suivi de la nature des erreurs susceptibles de se produire.

o Les différentes classes d’erreurs possibles sont spécifiées dans …

Exemple : dans la classe FilterInputStream, une méthode de lecture d’un fichier est déclarée sous la forme : public int read() throws IOException

Cela signale que cette lecture peut provoquer une erreur d’entrée-sortie ( … ).

Utiliser une méthode à clause throws

Lorsqu’on a besoin d’utiliser une méthode risquant de provoquer des erreurs :

o on englobe l’appel à cette méthode dans un bloc … (pour … l’erreur) o on précise ce qu’on fera en cas d’erreur dans une clause … (pour … l’erreur).

(27)

Exemple : try {

fichier.read() ; }

catch (IOException) {

System.out.println(" erreur de lecture ") ; return ;

}

Le paquetage java.lang java.lang = java.language

Le paquetage java.lang est le seul paquetage dont ...

Il comprend notamment la classe Object, … , la classe System, les

classes enveloppantes, la classe Math et la classe String (classe des … ).

La classe System

La classe System contient des … et des … du système.

Quand on écrit System.out.println(...), on fait appel à … out de la classe System.

System.out : … System.in : …

Les classes enveloppantes

Les variables des types de données primitifs (int, char, double, etc) sont les seuls éléments qui ne sont … des objets dans Java.

Mais on peut … à partir de ces types primitifs à l’aide des …

type nature classe enveloppante

boolean true ou false Boolean

char caractère 16 bits Character

byte entier 8 bits signé (petit entier) Byte

short entier 16 bits signé (entier court) Short

int entier 32 bits signé (entier) Integer

long entier 64 bits signé (entier long) Long

float virgule flottante 32 bits (réel simple) Float double virgule flottante 64 bits (réel double) Double

int n = 5 ; // n n’est pas un objet

Integer obj1 = new Integer(n) ; // obj1 est ...

double f = 4.68756 ; // f n’est pas un objet

Double obj2 = new Double(f) ; // obj2 est ...

La classe Math

La classe Math contient toutes les nécessaires pour effectuer tous les calculs mathématiques.

On effectue donc l’appel à une méthode par l’instruction : …

(28)

double j = -3.145 ;

double k = Math.abs(j) ; // k  ...

double l = Math.pow(j,k) ; // l  ...

double m = Math.sqrt(p) ; // m  ...

La classe String

La classe String contient de très nombreuses pour le traitement des chaînes de caractères

Il est indispensable de consulter la documentation pour trouver la méthode dont on a besoin

Le paquetage java.util java.util = utilitaires de java

Il contient toutes les classes utilitaires, notamment : o Scanner : pour les …

o Random : pour la …

Importation de paquetage

Pour utiliser une partie d’un paquetage autre que java.lang, on utilise le mot-clé : o import java.util.Scanner ;

à on se donne le droit d’utiliser la classe Scanner … o import java.util.Random ;

à on se donne le droit d’utiliser la classe Random…

o import java.util.* ; à on se donne le droit d’utiliser …

Utilisation de la classe Scanner

Fichier UtilScanner.java :

import java.util.Scanner ; public class UtilScanner { static Scanner sc ;

public static void main(String args[]) { sc = new Scanner(System.in);

System.out.println("Veuillez saisir une phrase :");

String str = sc.nextLine();

System.out.println("Vous avez saisi : " + str);

System.out.println("Veuillez saisir un entier :");

int n = sc.nextInt();

System.out.println("Vous avez saisi le nombre : " + n);

System.out.println("Veuillez saisir un float :");

float f = sc.nextFloat();

System.out.println("Vous avez saisi le nombre : " + f);

System.out.println("Veuillez saisir un double :");

double d = sc.nextDouble();

System.out.println("Vous avez saisi le nombre : " + d);

} }

Le programme UtilScanner.java crée un objet sc de la classe Scanner par un constructeur relié au clavier :

(29)

sc = new Scanner(System.in);

puis d’entrer au clavier : o une phrase : … o un entier : … o un float : … o un double : …

Attention : sous Windows, les float et double doivent être entrés sous la forme … (liée à la configuration du système, comme pour Excel).

Utilisation de la classe Random

Le programme UtilObjet.java suivant demande la création d’un objet o qui comporte …

Le … Objet() :

o crée … par l’instruction t = new float[40] ;

o appelle le constructeur … de la classe Random par Random r = new Random(); l’objet construit est appelé un …

o demande à ce … de remplir le tableau par l’instruction t[i]=r.nextFloat();

La méthode nextFloat() de la classe Random génère un ... compris entre et … Fichier UtilObjet.java

import java.util.Random ; class Objet {

float[] t ; Objet() {

t = new float[20] ; Random r = new Random();

for (int i = 0 ; i < 20 ; i++) { t[i]=r.nextFloat();

} }

void affiche() {

for (int i = 0 ; i < 20 ; i++) { System.out.println(t[i]);

} }

}

public class UtilObjet {

public static void main(String[] args) { Objet o = new Objet();

o.affiche();

} }

Un exemple de résultat :

0.37464726 0.008410811 0.36294508 0.9819035 0.9982327 0.2542473 0.7204915 0.52173376 0.94769883 0.7458367 0.70877224 0.2125029 0.7863865 0.22088677 0.8084339 0.76560336 0.94098556 0.81110626 0.085951984 0.12518334

Si on veut obtenir des entiers, on modifie le programme en conséquence et on fait appel à la méthode nextInt() qui génère un … dans … des entiers possibles.

(30)

Fichier UtilObjet2.java

import java.util.Random ; class Objet {

int[] t ; Objet() {

t = new int[20] ;

Random r = new Random();

for (int i = 0 ; i < 20 ; i++) { t[i]=r.nextInt();

} }

void affiche() {

for (int i = 0 ; i < 20 ; i++) { System.out.println(t[i]);

} }

}

public class UtilObjet2 {

public static void main(String[] args) { Objet o = new Objet();

o.affiche();

} }

Un exemple de résultat :

1106836022 -727453113 1406092303 911562671 -1133440582 -1386178611 -1588036922 -994776228 1092643285 1158792337 1429772425 -498695102 341520753 -1052563006 -674535242 789254811 1820655005 1633617820 -1003275755 -1409624375

Si on veut obtenir des entiers compris entre 0 et m (0 … , m … ), on fait appel à la méthode nextInt(m).

Exemple ci-dessous avec des entiers entre 0 (compris) et 50 (exclu) : UtilObjet3.java Fichier UtilObjet3.java

import java.util.Random ; class Objet {

int[] t ; Objet() {

t = new int[20] ;

Random r = new Random();

for (int i = 0 ; i < 20 ; i++) { t[i]=r.nextInt(50);

} }

void affiche() {

for (int i = 0 ; i < 20 ; i++) { System.out.println(t[i]);

} }

}

public class UtilObjet3 {

public static void main(String[] args) { Objet o = new Objet();

o.affiche();

} }

Un exemple de résultat :

42 713 035 4043 17 829 264 34 497 4728 4836 46

On peut obtenir un entier de n’importe quel intervalle [a, b[ par t[i]= ...

(31)

Références

Documents relatifs

– Auteur non punissable – La complicité, pour être punissable, doit être rattachée à un fait principal punissable, mais il n'est en revanche pas nécessaire que l'auteur de

La base de la méthode est l’information statistique brute, c’est-à- dire l’observation pour chaque individu appartenant à la population des modalités

Pour connaître la vitesse d'écoulement de l'air à 20 °C (considéré comme un fluide parfait) dans une cheminée de section 2,00 m², on utilise un tube de Pitot et on mesure

Le parcours en-ordre d’un arbre binaire de recherche nous affiche une liste triée par ordre

3) Partenariat : Indiquer si cette UE est partagée avec un autre établissement dans le cadre d’un partenariat 4) Objectifs : Ce séminaire sur une semaine bloquée est basé en

Estes resultados mostram que a dimensão dos testículos e a produção de sémen são influenciadas pela estação do ano e que a avaliação da concentração de ejaculados por

Pour vous préparer à cet examen, il est suggéré de visionner la présentation algèbre matricielle, en plus des exercices sélectionnés. R10 Section 5.1 : Vecteurs

Cette méthode prend en paramètre une chaîne de caractères, qui est obtenue directement pour les types prédéfinis, et par la méthode toString() appliquée implicitement pour tous