Vous êtes sur la page 1sur 6

Université Tunis El-Manar

Fac. Sces de tunis


Module : Programmation.O.O
Série N° 1 : Programmation en Java

Exercice 1 : Une somme d'entiers

Sachant que :

 la syntaxe de base de java est quasiment la même que celle du C


 si n est une variable de type int, l'instruction :System.out.println(n); provoque l'écriture du contenu
de la variable n
 l'instruction : System.out.println("voila " + n); provoque l'écriture du mot voila suivi du contenu
de la variable n

Ecrire un programme qui calcule la somme des 100 premiers entiers et indique à l'écran le résultat.

Exercice 2 : Une factorielle

Il s'agit d'écrire un programme qui calcule la factorielle des n premiers entiers et indique à l'écran le résultat. Le
nombre n doit être lu sur la ligne de commande.

Les quelques renseignements qui suivent peuvent être utiles :

 La classe Integer du paquetage java.lang possède la méthode :

public static int parseInt(String s); qui retourne l'int correspondant à la chaîne de caractères
indiquée en paramètre. Vous compilerez avec l'instruction :
javac Factorielle.java

et vous exécuterez avec

java Factorielle 7
si vous voulez la factorielle des 7 premiers entiers

Exercice 3 : Palindrome

Il s'agit d'écrire un programme qui, étant donnée une chaîne de caractères (une instance de la classe String

 calcule la chaîne inverse


 indique s'il s'agit ou non d'un palindrome

Premier temps En un premier temps, la chaîne à traiter ne comportera pas de caractère d'espacement et sera
indiquée sur la ligne de commande.
Exemples

 Si la commande est :

> java Palindrome bonjour


La réponse pourrait être :
L'inverse de bonjour est ruojnob
bonjour n'est pas un palindrome

 Si la commande est :

1
> java Palindrome laval
La réponse pourrait être
L'inverse de laval est laval
laval est un palindrome
On définira une seule classe qui n'aura aucun attribut et deux méthodes statiques :

 Une méthode dont l'en-tête sera : static String inverse(String s) qui retournera un objet de type
String contenant la chaîne inverse de la chaîne s. Cette méthode aura entre autres variables locales une
variable nommée envers, de type char[], pour référencer un tableau de caractères comportant autant de
case que le nombre de caractères de la chaîne s. Ce tableau est destiné à contenir les caractères de s en
sens inverse de s.
 Une méthode main ; dans cette méthode, on récupérera la chaîne par la ligne de commande, on calculera
son inverse grâce à la méthode inverse, on affichera cet inverse dans la fenetre de commande, on
indiquera aussi dans la fenêtre de commande si la chaîne est ou non un palindrome.

Indications

 La classe String possède une méthode length() qui retourne le nombre de caractères de la chaîne
concernée. Par exemple, si on a :

String s = "java",
s.length() vaut 4

 La classe String possède une méthode charAt(int i) qui retourne le (i + 1) ème caractère de la
chaîne concernée. Par exemple, si on a :

String s = "java",
s.charAt(2) vaut v

 La classe String possède une méthode equals(String c) qui retourne true la chaîne concernée est
identique à la chaîne c et false sinon.Par exemple, si on a :

String s = "java", t = "lundi", u = "ja" + "va",


s.equals(t) vaut false et s.equals(u) vaut true

 La classe String possède un constructeur ayant un paramètre de type char[] et retourne un objet de type
String correspondant au tableau reçu en paramètre. Par exemple, si on a :

char[] table = {'j', 'a', 'v', 'a'};


s = new String(table) revient à s = "java"

Second temps :En un second temps, la chaîne à traiter sera indiquée par la fenêtre d'exécution mais la saisie se
fera après le lancement du programme. Cela permettra d'avoir des caractères d'espacement dans la chaîne de
caractères à traiter.

Exemples

> java Palindrome2


Indiquez la chaîne de caractères
je programme avec java
L'inverse de "je programme avec java" est "avaj ceva emmargorp ej"
"je programme avec java" n'est pas un palindrome
A part ce qui concerne la saisie, le programme sera analogue à celui développé dans le premier temps.

2
Indication
Pour effectuer une saisie par la fenêtre d'exécution, on peut utiliser l'instruction suivante :
Scanner entree = new Scanner(System.in); L'objet nommé ci-dessus entree permet de faire des saisies ;
en particulier, l'instruction
String chaine = entree.nextLine(); met dans chaîne le contenu de la ligne indiquée dans la fenêtre
d'exécution par l'utilisateur (et "envoyée" par la touche d'entrée).

Exercice 4 : Une classe pour modéliser un segment

Il s'agit de modéliser un segment de droite dont les valeurs des deux extrémités sont entières. Si on échange les
deux extrémités, on considère qu'il s'agit encore du même segment. Les opérations que l'on souhaite faire sur ce
segment sont :

 calculer sa longueur
 savoir si un entier donné se trouve sur le segment (c'est-à-dire s'il est compris entre la plus petite et la plus
valeurs des extrémités du segment).

Ecrire un programme qui contient :

 une classe Segment comportant


o deux attributs de type int, extr1 et extr2, représentant les coordonnées (entières) des extrémités
d'un segment sur un axe
o un constructeur de ce segment recevant en argument les deux valeurs entières des extrémités du
segment que l'on veut construire
o une méthode nommée ordonne échangeant éventuellement les valeurs des extrémités du segment
de telle sorte que la valeur de extr1 soit au plus égale à la valeur de extr2.
o une méthode retournant la longueur du segment
o une méthode dont le prototype est : boolean appartient(int x); indiquant si le point de
coordonnée x appartient ou non au segment
o une méthode redéfinissant la méthode : public String toString() :Celle-ci décrira une
instance de Segment sous la forme d'une chaîne de caractères (par exemple, le segment
d'extrémités -35 et 44 pourra être transformé en la chaîne de caractères : "segment [-35, 44]")
(la plus petite extrémité est toujours indiquée à gauche). La méthode "retournera" (return...)
cette chaîne.
 une classe EssaiSegment testant la classe Segment et comportant une méthode main à laquelle on devra
fournir trois paramètres entiers par la ligne de commande : origine et extrémité d'un segment et
coordonnée d'un point dont on voudra savoir s'il appartient ou non au segment. On utilisera
nécessairement la méthode toString lorsqu'on voudra écrire le segment sur la sortie standard (l'écran).

Exemple d'exécution souhaitée pour la méthode main

Pour la commande :

java EssaiSegment 44 -35 8 :


Longueur du segment [-35, 44] : 79
8 appartient au segment [-35, 44]

Pour la commande :

java EssaiSegment -35 44 100


Longueur du segment [-35, 44] : 79
100 n'appartient pas au segment [-35, 44]

Indication

1. Si la méthode toString est définie comme indiqué ci-dessus, l'instruction :


3
System.out.println("le " + new Segment(1, 3));
donnera sur la sortie standard (l'écran) : le segment [1, 3].

Version avec des attributs privés Dans une seconde écriture de la classe Segment, on souhaite assurer que extr1
soit toujours plus petit que extr2 ; pour cela, on déclare les attributs extr1 et extr2 comme privés (avec le
modificateur private) ; on permettra alors, bien que ces attributs soient privés, leur consultation et leur
modification, en définissant quatre méthodes (nommées généralement accesseurs) supplémentaires dans la classe
Segment:

 int getExtr1(void);
 void setExtr1(int a);.
 int getExtr2(void);
 void setExtr2(int a);

Dans le main défini dans EssaiSegment, on ajoutera quelques instructions au choix pour tester ces méthodes
supplémentaires.

Exercice 5 : Une classe pour modéliser un vecteur

Il s'agit de modéliser un vecteur de Z2 dont l'origine est en (0, 0) (un tel vecteur est donc caractérisé par deux
nombres entiers relatifs). Les opérations que l'on souhaite faire sur ce segment sont :

 calculer sa longueur, par une méthode d'instance sans paramètre, nommée longueur, et qui retourne cette
longueur sous forme d'un double
 savoir si le vecteur concerné est ou non plus petit qu'un autre un autre vecteur donné ; on écrira pour cela
une méthode d'instance nommée plusPetitQue qui recevra en paramètre l'autre vecteur et qui retournera
une variable de type boolean
 additionner au vecteur concerné un autre vecteur ; on écrira pour cela une méthode d'instance nommée
addition qui recevra en paramètre l'autre vecteur et qui ne retournera rien
 additionner deux vecteurs donnés ; on écrira pour cela une méthode statique nommée aussi addition (en
utilisant ainsi la possibilité de la surcharge) qui recevra en paramètres les deux vecteurs à additionner et
qui retournera le résultat sous forme d'un objet de type Vecteur
 une méthode redéfinissant la méthode : public String toString()Celle-ci décrira une instance de
Vecteur sous la forme d'une chaîne de caractères (par exemple, le vecteur de composantes 1 et 2 pourra
être décrit par la chaîne de caractères : "vecteur (1, 2)"). La méthode retournera cette chaîne.

On écrira une méthode main pour tester cette classe Vecteur, méthode que l'on écrira à l'intérieur d'une classe
nommée EssaiVecteur. Les composantes des vecteurs à traiter dans les tests pourront être indiquées sur la ligne
de commande. Un exemple d'exécution de ce main peut être :

> java EssaiVecteur 1 2 5 -3


v1 : vecteur (1, 2)
Longueur de vecteur (1, 2) : 2.23606797749979
v2 : vecteur (5, -3)
le vecteur (1, 2) est plus petit que le vecteur (5, -3)
v1 après addition de v2 : vecteur (6, -1)
v3 = v1 + v2 : vecteur (11, -4)

Indications

1. Si la méthode toString est définie comme indiqué ci-dessus et si on a :

Vecteur v = new Vecteur(1, 2);


l'instruction System.out.println(v); donnera sur la sortie standard (l'écran) : vecteur (1, 2) et
l'instruction System.out.println("le joli " + v); donnera sur la sortie standard : le joli
vecteur (1, 2)

4
Exercice 6 : Les complexes
1- On souhaite manipuler les nombres complexes en java. Ecrire la classe Complexe suivante :
Class Complexe {
Private double pReel ;
Private double pIm ;
public Complexe (double pReel, double pIm) ;
public Complexe (double pReel) ;
public Complexe () ;
public double getRe () ;
public double getIm () ;
public void setRe (double) ;
public void setIm (double) ;
public double module () ;
public double argument () ;
public Complexe oppose () ;
public Comlexe conjuge () ;
public Complexe inverse () ;
public Complexe plus( Complexe c) ;
public Complexe moins ( Complexe c) ;
public Complexe multiplier ( Complexe c) ;
public Complexe diviser ( Complexe c) ;
public static Complexe creerC (double pReel, double pIm) ;
public static Complexe plus (Complexe c1, Complexe c2) ;
public static Complexe moins (Complexe c1, Complexe c2) ;
public static Complexe multiplier (Complexe c1, Complexe c2) ;
public static Complexe diviser (Complexe c1, Complexe c2) ;
public String toString() ;
}
2- Ecrire une classe EssaiComplexe qui met en œuvre les différentes méthodes de la classe Complexe.

Exercice 7 : manipuler des tableaux


1/Compléter la squelette de la classe suivante :
class ManipTableau
{private int[] tab ;
ManipTableau(int n)
{…}// alloue un tableau de dimension n
void remplir ()
{…}// remplit le tableau par des valeurs générés aléatoirement entre 0 et 100.
float moyenne ()
{…}// calcule la moyenne du tableau
int somme ()
{…} calcule la somme des éléments du tableau
int max()
{…} //retourne la valeur maximale
int min()
{…} //retourne la valeur minimale
int rechercher( int e)
{} recherche l’indice de l’élément e sinon elle retourne -1
void affcihe(String separateur)
{…}// affiche les éléments du tableau séparés par le « séparateur »
}

2/ écrire la classe EssaiManipTableau contenant une méthode main pour tester les méthodes précédemment
définies

3/Faites le nécessaire pour ajouter une méthode maxMin, à la classe ManipTableau, qui retourne à la fois la
valeur min et la valeur max du tableau.

5
Exercice 8 : Gérer une pile d'entiers

1/ Il s'agit de définir une classe modélisant une pile d'entiers. Nécessairement, tous les attributs de cette classe
auront le modificateur private, ce qui signifie qu'on ne peut pas les utiliser directement de l'extérieur de la
classe (on dit encore qu'ils ne sont visibles que de leur propre classe). Cette classe possèdera les méthodes
suivantes (il faudra reprendre exactement les en-têtes indiquées) :

 pubic Pile (int max)


 pubic Pile() // construire par défaut une pile de 100 entiers
 private erreur(String message)// Affiche un message d’erreur
 pubic void empiler(int n) : Cette méthode empile la valeur n reçue en paramètre.
 pubic int depiler()
 pubic boolean estVide() : Cette méthode retourne true si la pile est vide et false
dans le cas contraire.
 pubic boolean estPleine()
 pubic void listerPile()// affiche le contenu de la pile

Exercice 9 : Manipulation de dates

1/ On souhaite écrire la classe Date qui gère des dates. Les attributs jour, mois, an sont mémorisés comme
des entiers. Ecrire alors les méthodes « pubiques » suivantes :

 Date (int j, int m, int an) ;


 String toString () ;
 boolean bissex () ;// teste si l’année est bissextile
 int nbJoursEcoules() // nombre de jours écoulés depuis le début de l’année
 int nbJoursrestants() // nombre de jours restants dans l’année
 int static boolean bissex(int annee) ;
 static long nbJoursEntre(Date1, Date2)

2/ Ecrire la classe EssaiDate qui permet de donner les résultat de l’exécution suivants :

Bissextile 1900 : false

Bissextile 1920 : true

Bissextile 1989 : false

Bissextile 2000 : true

Bissextile 2003 : false

Au 3/2/2003

Nombre de jours écoulés : 34

Nombre de jours restants :331

Nombre de jours écoulés entre le 1/1/1900 et le 1/1/2000 = 36525

Vous aimerez peut-être aussi