Précédent   Forum des professionnels en informatique > Java > Général Java > Langage
Langage Forum d'entraide sur le langage Java et autres langages pour la JVM : syntaxe, POO, conventions, API standard. Avant de poster -> FAQ Java
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/01/2012, 16h19   #1
Membre du Club
 
Homme Seif El Islam Guizani
Développeur informatique
Inscription : février 2009
Messages : 76
Détails du profil
Informations personnelles :
Nom : Homme Seif El Islam Guizani
Âge : 31
Localisation : Canada

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2009
Messages : 76
Points : 56
Points : 56
Envoyer un message via MSN à guizaniseifislam Envoyer un message via Skype™ à guizaniseifislam
Par défaut Représentation normalisée des nombres flottants

bonjour, mon exercice est :
Comportement attendu
Attention, il importe que votre programme respecte strictement les formats et comportements présentés ici.

Le programme accepte un nombre décimal suivi d'un retour chariot et affiche la représentation normalisée suivie d'un retour chariot. Si l'entrée ne contient pas un nombre décimal ou contient un nombre décimal mal formé, le programme doit afficher une ligne terminant par 'Erreur' suivi d'un retour chariot.
Exemples

entrée: 0
sortie: 0

entrée: 5
sortie: 0.5e1

entrée: 100
sortie: 0.1e3

entrée: 0.55
sortie: 0.55

entrée: 0.007
sortie: 0.7e-2

entrée: -10.00
sortie: -0.1e2

entrée: -01020.03040
sortie: -0.10200304e4
Fin exercice

NB/ La forme normalisée à utiliser dans ce TP est "0.XXXeYYY" qui peut être précédée du signe moins (-) où :

XXX (appelée mantisse) est une séquence de chiffres de 0 à 9 qui ne doit ni commencer ni se terminer par un 0.
YYY (appelé exposant) est une séquence de chiffres de 0 à 9 qui ne doit pas commencer par un 0 et qui peut être précédée du signe moins (-).
Si le nombre à représenter vaut 0, la forme normalisée est juste "0" (sans signe ni exposant).
Si l'exposant vaut zéro, la partie exposant (incluant le 'e') est omise (la forme normalisée est juste "0.XXX" éventuellement précédée du signe moins).

Le code que j'ai fait jusqu'à présent est (juste la lecture de l'entrée clavier et tester si un nombre ou pas, reste comment traduire ce nombre souos la forme demandée?):
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.ParseException;
 
 
public class INF2170_TP1 {
//final String s_TP_Name = "INF2170_TP1";
 
	/**Cette fonction teste si la valeur donnée
	 * en String est numérique ou pas
	 * @param p_Number de type String
	 */
static boolean is_number(String p_Number){
	boolean b_Number = false;
 
	NumberFormat format = new DecimalFormat();
 
	try {
		format.parse(p_Number).doubleValue();
		b_Number = true;
	} catch (ParseException e) {
		b_Number = false;
	}
 
	return b_Number;
}
 
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println("INF2170_TP1");
		System.out.println("Veuillez donner un nombre décimal: ");
 
		// pour récupérer les données user et les mettre en mémoire
		InputStreamReader s_val_in = new InputStreamReader(System.in);
		BufferedReader s_val_tampon = new BufferedReader(s_val_in);
 
		// pour récupérer les données de la mémoire
		String s_str = null;
 
		try {
			s_str = s_val_tampon.readLine();
 
			if (!is_number(s_str)){
				System.out.println("la valeur " + s_str + " n'est pas un nombre");
			}
			else{
				System.out.println("Vous avez donné: " + s_str);
			}
		} catch (IOException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
		}
 
 
	}
}
Merci
guizaniseifislam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 16h41   #2
Membre Expert
 
Homme
Développeur informatique
Inscription : avril 2010
Messages : 388
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : Distribution

Informations forums :
Inscription : avril 2010
Messages : 388
Points : 1 576
Points : 1 576
Bonjour,

Tu veux que l'on fasse l'exercice à ta place, ou bien tu as une question précise, concernant un problème précis ?

Mako.
Mako 5013 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 16h54   #3
Expert Confirmé Sénior
 
Inscription : septembre 2004
Messages : 5 099
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 099
Points : 7 026
Points : 7 026
Beuh, dans mon pays, la notation normalisée c'est X.XXXeYYYY

Je ne crois pas qu'on puisse avoir la forme demandée avec des DecimalFormat ou un Formatter.
D'ailleurs, vu qu'on ne sait pas à quelle précision afficher la sortie, je ne pense pas non plus qu'on puisse l'afficher après avoir parsé l'entrée sous forme de float ou double.

Exemple, le double obtenu en parsant 0.55 vaut en fait 0.5500000000000000444 et des poussières. Tant qu'on ne va pas à cette précision ça va, mais comment décide-t-on à quelle précision on va ?

Personnellement je laisserais tomber la notion de flottant, je parserais les nombres sous forme de BigDecimal et me contenterais d'afficher :
- signe moins si nécessaire,
- 0,
- les chiffres de la mantisse,
- e et l'exposant correct si différent de zéro.
thelvin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 19h39   #4
Membre du Club
 
Homme Seif El Islam Guizani
Développeur informatique
Inscription : février 2009
Messages : 76
Détails du profil
Informations personnelles :
Nom : Homme Seif El Islam Guizani
Âge : 31
Localisation : Canada

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2009
Messages : 76
Points : 56
Points : 56
Envoyer un message via MSN à guizaniseifislam Envoyer un message via Skype™ à guizaniseifislam
ok merci j'ai trouvé la solution.
guizaniseifislam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2012, 21h43   #5
Expert Confirmé Sénior
 
Inscription : septembre 2004
Messages : 5 099
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 5 099
Points : 7 026
Points : 7 026
Hum. C'est une question ouverte qui pique la curiosité. Tu ne veux pas partager ? Ou au moins parler de ta solution ?
thelvin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 08h29   #6
Membre du Club
 
Homme Seif El Islam Guizani
Développeur informatique
Inscription : février 2009
Messages : 76
Détails du profil
Informations personnelles :
Nom : Homme Seif El Islam Guizani
Âge : 31
Localisation : Canada

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : février 2009
Messages : 76
Points : 56
Points : 56
Envoyer un message via MSN à guizaniseifislam Envoyer un message via Skype™ à guizaniseifislam
Par défaut Représentation normalisée des nombres flottants

Pardon, j'ai pas vu ta question.
Bon la solution était simple, je parcours la chaine et je décale le séparateur à gauche et je compte jusqu'à j'arrive à la fin du nombre (qui est string), je concatène toute la chaîne à "0." et enfin je concatène "e" et le nombre de chiffres parcouru à gauche.

Merci quand même pour votre intention
guizaniseifislam est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h12.


 
 
 
 
Partenaires

Hébergement Web