corrige

publicité
L2 année 2015-2016
TD 1 -POO et langage JAVA
CORRIGE
Exercice 1 : Somme
Écrire un programme qui permet de calculer la somme de deux entiers donnés au clavier et d'afficher le résultat
de cette somme.
import java.util.*;
public class main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Donner un entier x :");
int x=in.nextInt();
System.out.println("Donner un entier y :");
int y=in.nextInt();
int s=x+y;
System.out.println("La somme des 2 nombres est "+s);
}
}
Exercice 2 :
Écrire un programme qui permet d’échanger les valeurs de 3 entiers (valeur de B en A, valeur de C en B,
valeur de A en C).
import java.util.Scanner;
public class main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Donner un entier a :");
int a=in.nextInt();
System.out.println("Donner un entier b :");
int b=in.nextInt();
System.out.println("Donner un entier c :");
int c=in.nextInt();
int t=a;
a=b;
b=c;
c=t;
System.out.println("La permutation donne ");
System.out.println("a = "+a+" b = "+b+" c = "+c);
}
}
1/16
Exercice 3 :
Un ouvrier est payé 3,39 € pour les heures de base et 4,32 € pour les heures supplémentaires. Il subit une
retenue de base de 2,2% sur son salaire brut (le salaire final est le salaire obtenu en tenant compte des heures de
base, des heures supplémentaires et de la retenue de base).
Écrire un programme qui connaissant le nombre d’heures de base et le nombre d’heures supplémentaires permet
de calculer le salaire final de l’ouvrier.
import java.util.Scanner;
public class main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Donner le nombre d'heures de base :");
int nb_heures_base=in.nextInt();
System.out.println("Donner le nombre d'heures supplémentaires :");
int nb_heures_sup=in.nextInt();
final double tarif_heures_base = 3.39;
final
double tarif_heures_sup=4.32;
final
double taux_ret=0.022;
double Sal_brut, Sal_final, Retenue;
Sal_brut =nb_heures_base*tarif_heures_base+nb_heures_sup*tarif_heures_sup ;
Retenue = Sal_brut*taux_ret;
Sal_final =Sal_brut - Retenue ;
System.out.println("le salaire de l'ouvrier est : " + Sal_final);
}
}
Exercice 4 : Écrire un programme qui accepte un caractère du clavier et affiche sa nature. La nature
d’un caractère est supposée être :

Alphabétique majuscule

Alphabétique minuscule

Chiffre

Ou autre(caractères spéciaux)
import java.util.Scanner;
public class main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Donner un caractère :");
String str=in.nextLine();
char c= str.charAt(0);
System.out.println("c'est "+c);
if ((c>='A') && (c<='Z'))
System.out.println("c'est une lettre majuscule");
else if ((c>='a') && (c<='z'))
System.out.println("c'est une lettre minuscule");
else if ((c>='0') && (c<='9')) System.out.println("c'est un chiffre");
else System.out.println("c'est un caractère autre (spécial) ");
}
}
2/16
Exercice 5 : Écrire un programme qui permet de saisir un réel et d’afficher sa valeur absolue
import java.util.*;
public class main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Donner un réel x :");
double x =in.nextDouble();
double Abs_x;
if (x<0) Abs_x=-x;
else Abs_x=x;
System.out.println("La valeur absolue de "+x+" est " +Abs_x);
}
}
Exercice 6 :
-
Écrire un programme qui calcule le min et le max de deux entiers saisis au clavier.
import java.util.Scanner;
public class main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Donner un entier x :");
int x =in.nextInt();
System.out.println("Donner un entier y :");
int y =in.nextInt();
int min,max;
if (x<y) {
min=x;
max=y;
}
else {
min=y;
max=x;
}
System.out.println("Le min est "+min+" et le max est " +max);
}
}
3/16
-
Écrire un programme qui calcule le min et le max de trois entiers saisis au clavier.
import java.util.Scanner;
public class main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Donner un entier x :");
int x =in.nextInt();
System.out.println("Donner un entier y :");
int y =in.nextInt();
System.out.println("Donner un entier z :");
int z =in.nextInt();
int min=0;
int max=0;
if ((x<=y) && (x<=z)) {
min =x;
if (y<z)
max= z;
else
max =y;
}
else {
if (y<z) {
min=y;
if (x<z)
max= z;
else
max = x;
}
else {
min=z;
if (x<y)
max= y;
else
max= x;
}
}
System.out.println("Le min est "+min+" et le max est " +max);
}
}
4/16
Exercice 7 :
Écrire un programme qui permet lire la couleur d’un feu de croisement (rouge ou vert) et d’afficher le
message au piéton qui arrive.
import java.util.Scanner;
public class main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Donner la couleur du feu :");
String str=in.nextLine();
char feu= str.charAt(0);
if ((feu=='V') || (feu=='v') )
System.out.println("c'est vert PASSEZ ");
else
if ((feu=='R') || (feu=='r') )
System.out.println("c'est rouge STOP ");
else System.out.println("ERREUR ");
}
}
Exercice 8 :
Écrire un programme qui permet lire la couleur d’un feu de croisement (rouge, orange ou vert) et
d’afficher le message au véhicule qui arrive.
VERSION 1
import java.util.Scanner;
public class main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Donner la couleur du feu :");
String str=in.nextLine();
char feu= str.charAt(0);
if ((feu=='V') || (feu=='v') )
System.out.println("PASSEZ ");
else
if ((feu=='R') || (feu=='r') )
System.out.println(" STOP ");
else
if ((feu=='O') || (feu=='o') )
System.out.println("c'est orange RALENTIR ");
else System.out.println("ERREUR ");
}
}
5/16
VERSION 2
public class main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Donner la couleur du feu :");
String str=in.nextLine();
char feu= str.charAt(0);
switch (feu) {
case 'V':
case 'v' : System.out.println("PASSEZ ");
break;
case 'R' :
case 'r' : System.out.println(" STOP ");
break;
case 'O' :
case 'o' : System.out.println("c'est orange RALENTIR ");
break;
default : System.out.println("ERREUR ");
}
}
}
Exercice 9 : Date du lendemain
Écrire un programme qui permet de saisir une date sous forme de jour, mois, année et d’afficher la
date du lendemain. ATTENTION une année est bissextile si elle est divisible par 4 ou par 100 mais pas
par 400.
6/16
import java.util.Scanner;
public class main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Donner le jour :");
int j=in.nextInt();
System.out.println("Donner le mois :");
int m=in.nextInt();
System.out.println("Donner l'année :");
int a=in.nextInt();
int jl,ml,al;
Boolean bissextile=((a%4==0) ||(a%100==0)) && (a%400!=0);
Boolean fin_mois=false;
Boolean fin_annee=false;
Boolean erreur=false;
switch(m) {
case 1 :
case 3 :
case 5 :
case 7 :
case 8 :
case 10 : if (j==31) fin_mois=true;
break;
case 4 :
case 6 :
case 9 :
case 11 : if (j==30) fin_mois=true;
break;
case 12 : if (j==31) fin_annee=true;
break;
case 2 :
if ((j==29) || (j==28) && (!bissextile))fin_mois=true;
break;
default : erreur=true;
}
if(fin_mois) {
jl=1;
ml=m+1;
al=a;
}
else
if(fin_annee) {
jl=1;
ml=1;
al=a+1;
}
else {
jl=j+1;
ml=m;
al=a;
}
System.out.println("La date du lendemain sera "+ jl+"/"+ml+"/"+al);
}
}
7/16
Exercice 10 : Rendre la monnaie
On se propose d’écrire un programme permettant d’obtenir la suite des billets totalisant une somme
donnée (dont on suppose qu’elle est un multiple de 5). Les espèces disponibles sont des billets de 50,
20, 10 et 5 euros. Le principe est de donner le billet de valeur la plus grande possible inférieure ou égale
à la somme à rendre et de poursuivre la même stratégie avec la somme restante jusqu’à ce que la
somme restante soit nulle.
Écrire cet algorithme en utilisant les structures de contrôle suivantes : while, if et else if .
On suppose que la somme donnée est un multiple de 5, cette somme sera notée s dans l’algorithme, les
nombres de billets à rendre seront calculés à l’aide de 4 variables nb50,nb20, nb10 et nb5 que l’on
incrémentera à chaque tour de boucle en même temps que la somme sera diminuée de la valeur du billet
trouvée
import java.util.Scanner;
public class main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("Donner la somme à rendre
int s =in.nextInt();
int nb_50=0;
int nb_20=0;
int nb_10 =0;
int nb_5=0;
while
(montant multiple de 5)
:");
(s != 0) {
if (s >= 50) {
s = s - 50;
nb_50++;
}
else if (s >= 20 )
{
s = s -20;
nb_20++;
}
else if (s >= 10 )
{
s = s -10;
nb_10++;
}
else
{
s = s - 5;
nb_5++;
}
}
System.out.println(nb_50+ "billets de 50 euros" );
System.out.println(nb_20+ "billets de 20 euros" );
System.out.println(nb_10+ "billets de 10 euros" );
System.out.println(nb_5+ "billets de 5 euros" );
}
}
8/16
Exercice 11 : Calcul de la moyenne et du minimum des éléments d'un tableau.
import java.util.Scanner;
public class main {
public static void main(String[] args) {
final int N =10;
int []T = new int[N];
int i,min,somme;
double moyenne ;
Scanner in = new Scanner(System.in);
somme=0;
for(i=0;i<N;i++){
System.out.println ("donner la valeur de T["+ i+"] :
T[i]=in.nextInt();
}
min =T[1];
for(i=0;i<N;i++){
somme =somme+T[i];
if (T[i] < min)
min= T[i];
}
moyenne=somme/N;
System.out.println("La moyenne est " +moyenne);
System.out.println("Le minimum est " +min);
in.close();
}
");
}
Exercice 12 : Calcul du nombre d'occurrences d'un élément donné dans un tableau.
import java.util.Scanner;
public class main {
public static void main(String[] args) {
final int N =10;
int []T = new int[N];
int i,Nb_Occ, val;
Scanner in = new Scanner(System.in);
for(i=0;i<N;i++){
System.out.println ("donner la valeur de T["+ i+"] : ");
T[i]=in.nextInt();
}
System.out.println ("donner la valeur recherchée : ");
val=in.nextInt();
Nb_Occ=0;
for(i=0;i<N;i++){
if (T[i] == val)
Nb_Occ++;;
}
System.out.println("Le nombre d'occurences de la valeur " +val+" est " +Nb_Occ);
in.close();
}
}
9/16
Exercice 13 : Palindrome
Une chaîne de caractère est dite Palindrome si elle peut être lue de gauche à droite ou de droite à
gauche tel que été, laval, AZZA, AZIZA, la mariée ira mal, élu par cette crapule, esope reste ici et se
repose.
a) Écrire la fonction palindrome1 (T,N) qui renvoie 1 si le mot contenu dans T et de longueur n est un
palindrome 0 sinon.
import java.util.Scanner;
public class main {
public static void main(String[] args) {
int i_deb,i_fin;
boolean palindrome=true;
Scanner in = new Scanner(System.in);
System.out.println ("donner un mot : ");
String mot =in.nextLine();
i_deb=0;
i_fin=mot.length()-1;
while (palindrome && (i_deb<i_fin)){
if (mot.charAt(i_deb)== mot.charAt(i_fin)) {
i_deb++;
i_fin--;
}
else
palindrome=false;
}
if (palindrome)
else
System.out.println("C'est un palindrome ");
System.out.println("Ce n'est pas un palindrome ");
in.close();
}
}
10/16
b) Écrire la fonction palindrome2 (T,N) qui renvoie 1 si la phrase formée de plusieurs mots séparés
par des séparateurs et contenue dans T et de longueur n est un palindrome 0 sinon.
import java.util.Scanner;
public class main {
public static void main(String[] args) {
int i_deb,i_fin;
boolean palindrome=true;
Scanner in = new Scanner(System.in);
System.out.println ("donner une phrase : ");
String mot =in.nextLine();
i_deb=0;
i_fin=mot.length()-1;
while (palindrome && (i_deb<i_fin)){
while ((mot.charAt(i_deb)==' ' ) && (i_deb<i_fin)) {
i_deb++;
}
while ((mot.charAt(i_fin)==' ' ) && (i_deb<i_fin)) {
i_fin--;
}
if (mot.charAt(i_deb)== mot.charAt(i_fin)) {
i_deb++;
i_fin--;
else
}
if (palindrome)
else
}
palindrome=false;
System.out.println("C'est un palindrome ");
System.out.println("Ce n'est pas un palindrome ");
in.close();
}
}
Exercice 14 : Drapeau Hollandais de Dijkstra (1dimension)
Les éléments d’un tableau sont soit bleus, blancs ou rouges. Il s’agit de construire un tableau ayant les
mêmes éléments mais rangés par couleur : (bleus puis blancs puis rouges)
On utilisera uniquement les opérations suivantes :
T[i] : accès à un élément
Ech(i,j) échange de deux éléments t[i] et t[j].
11/16
import java.util.Scanner;
public class main {
public static void main(String[] args) {
int i_r,i_b,i;
char temp;
Scanner in = new Scanner(System.in);
System.out.println ("Entrer le drapeau dans le désordre
String Drapeau =in.nextLine();
final int N =Drapeau.length();
char [] T_Drap= new char[N];
B b R
:
");
for (i=0;i<N;i++)
// Copier la chaîne Drapeau dans le tableau T_Drap
T_Drap[i]=Drapeau.charAt(i);
System.out.println("Voici votre drapeau initial : ");
for (i=0;i<N;i++){
// Afficher le tableau T_Drap
if (T_Drap[i]=='B')
System.out.print(T_Drap[i]);
else
if (T_Drap[i]=='b')
else
System.out.print(' ');
if (T_Drap[i]=='R')
System.out.print(T_Drap[i]);
}
i=0;
i_b=-1;
i_r=N;
while ((i<i_r)){
switch (T_Drap[i]) {
case 'b' : i++;
break;
case 'B' : i_b++;
temp=T_Drap[i];
T_Drap[i]=T_Drap[i_b];
T_Drap[i_b]= temp;
//permutation des cases N° i et N°i_b
i++;
break;
case 'R' : i_r--;
temp=T_Drap[i];
//permutation des cases N° i et N°i_r
T_Drap[i]= T_Drap[i_r];
T_Drap[i_r]= temp;
break;
}
}
System.out.println();
System.out.println("Voici votre drapeau final : ");
for (i=0;i<N;i++){
// Afficher le tableau T_Drap
if (T_Drap[i]=='B')
System.out.print(T_Drap[i]);
else
if (T_Drap[i]=='b')
else
System.out.print(' ');
if (T_Drap[i]=='R')
System.out.print(T_Drap[i]);
}
in.close();
}
12/16
Exercice 15
On souhaite représenter les notes d’un ensemble d’étudiants par deux tableaux de même taille, l’un
contenant leurs noms et l’autre contenant leurs notes. Le tableau des noms s’appellera tNoms et celui
des notes tNotes.
Exemple :
Tableau de noms :
Bernard
Dupont
Zidane
Henry
Barthez
Tableau de notes
12.5
5
10.6
7
4.5
Les noms et les notes sont dans le même ordre. On sait ainsi que Zidane et sa note ont le même indice
dans les tableaux respectifs et on peut déduire que la note de Zidane est 10,6 de même, la note de
Barthez est 4,5 etc.
Écrire un programme avec les méthodes et actions suivantes :
1. Une fonction trouveIndice qui étant donné un nom et un tableau de noms retourne l’indice de ce nom
dans le tableau.
Si le nom ne figure pas dans le tableau, la fonction doit renvoyer -1. Afin de comparer les chaînes de
caractères, vous utiliserez la fonction prédéfinie equals qui renvoie un boolean, et qui étant donnés 2
chaînes s1 et s2, permet de les comparer par s1.equals(s2).
2. Écrire une fonction trouveNote qui étant donnés un nom, un tableau de noms et un tableau de notes,
retourne la note correspondant au nom donné. Cette fonction doit obligatoirement utiliser la fonction
trouveIndice. Si le nom n’est pas trouvé, on doit renvoyer -1 (qui n’est pas une valeur possible de note).
3. Écrire un programme principal qui déclare et initialise les tableaux tNotes et tNoms comme dans
l’exemple. Ensuite le programme demande à l’utilisateur le nom d’un étudiant et lui fournit sa note.
Utiliser obligatoirement la fonction trouveNote. Ce programme principal doit traiter le cas d’un nom
d’étudiant ne figurant pas sur la liste en affichant un message à l’écran. Vous utiliserez obligatoirement le
fait que la fonction trouveNote renvoie -1 dans ce cas là.
13/16
import java.util.Scanner;
public class Main {
// ********************************************************************************
static public int trouve_indice(String[]T,String nom)
{
int indice_nom=-1;
int i=0;
while ((indice_nom==-1) && (i<T.length)){
if (T[i].equals(nom)) indice_nom=i;
else i++;
}
return indice_nom;
};
// ***********************************************************************************
static public double trouve_note(String [] T1,double [] T2,String nom)
{
int indice_nom=-1;
int i=0;
while ((indice_nom==-1) && (i<T1.length)){
if (T1[i].equals(nom)) indice_nom=i;
else i++;
}
return T2[indice_nom];
};
// ************************************************************************
public static void main(String[] args) {
int [] T_Not = new int[5];
double [] T_Note =new double[5];
String [] T_Nom = new String[5];
Scanner in = new Scanner(System.in);
for ( int i = 0 ; i <T_Nom.length ; i ++) {
System.out.println("Un nom ? ") ;
T_Nom [ i ] = in.nextLine();
}
for ( int i = 0 ; i <T_Note.length ; i ++) {
System.out.println("Une note ? ") ;
T_Note [ i ] = in.nextDouble();
}
String nom = in.nextLine();
for(int j=0;j<T_Note.length;j++)
System.out.println(T_Nom[j] + "
"+ T_Note[j]);
System.out.println("Un nom à chercher? ") ;
String nom1 = in.nextLine();
int indice_nom=trouve_indice(T_Nom,nom1);
System.out.println("Le nom cherché est à l'indice "+indice_nom) ;
double note;
if (indice_nom!=-1){
note=trouve_note(T_Nom,T_Note,nom1);
System.out.println("La note relative à ce nom cherché est
}
else System.out.println("Le nom n'existe pas ") ;
}
"+note) ;
}
14/16
Les fichiers : Lecture et écriture en mode texte
EXERCICE 16
Ecrire un programme qui écrit dans le fichier example.txt le texte:
Hello world!
Voici un programme illustrant l'écriture dans un fichier
CORRIGE PROGRAMME EN JAVA
import
import
import
public
java.io.File;
java.io.FileWriter;
java.io.IOException;
class main {
public static void main(String[] args) {
//
Hello world!
//Voici un programme illustrant l'écriture dans un fichier
System.out.println("Bonjour EXO4 Ecriture dans un fichier ");
String Chaine1="Hello world!";
String Chaine2="Voici un programme illustrant l'écriture dans un fichier";
File f = new File ("C:\\Users\\Cours Java\\MonFichier.txt");
try
{
FileWriter fw = new FileWriter (f);
fw.write
fw.write
fw.write
fw.write
(String.valueOf (Chaine1));
("\r\n");
(String.valueOf (Chaine2));
("\r\n");
System.out.println("Ecriture effectuée dans le fichier Monfichier ");
fw.close();
}
catch (IOException exception)
{
System.out.println ("Erreur lors de la lecture : " + exception.getMessage());
}
}
}
15/16
EXERCICE 17
Ecrire un programme qui lit le fichier exemple.txt défini dans l'exemple précédent et affiche son contenu :
Vous devriez obtenir :
Hello world!
Voici un programme illustrant l'écriture dans un fichier
CORRIGE PROGRAMME EN JAVA
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileNotFoundException;
import java.io.IOException;
public class main {
public static void main(String[] argv) throws IOException
{
BufferedReader lecteurAvecBuffer = null;
String ligne;
try
{
lecteurAvecBuffer = new BufferedReader(new FileReader("C:\\
Cours Java\\MonFichier.txt"));
}
catch(FileNotFoundException exc)
{
System.out.println("Erreur d'ouverture");
}
System.out.println("Voici le contenu de Mon Fichier ");
while ((ligne = lecteurAvecBuffer.readLine()) != null)
System.out.println(ligne);
lecteurAvecBuffer.close();
}
}
16/16
Téléchargement