Programme qui calcule du binaire -> où est le problème?
Fermé
Linquisiteur
-
Modifié par Linquisiteur le 4/02/2013 à 20:41
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 6 févr. 2013 à 20:59
KX Messages postés 16754 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 6 févr. 2013 à 20:59
A voir également:
- Programme qui calcule du binaire -> où est le problème?
- Codage binaire - Guide
- Programme demarrage windows 10 - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans un autre programme - Guide
- Programme (x86) ✓ - Forum Windows
7 réponses
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
4 févr. 2013 à 20:50
4 févr. 2013 à 20:50
signe = 0; et if (signe == '0') ce n'est pas compatible, idem pour 1 et '1'
Ensuite, tu ne peux pas faire nb.charAt(8-cpt) = 1; car un String n'est jamais modifiable ! Essayes plutôt de travailler sur des tableaux char[], ce sera mieux.
Pour les autres erreurs on verra plus tard, certaines devrait disparaître toute seule quand tu modifieras ton code...
Ensuite, tu ne peux pas faire nb.charAt(8-cpt) = 1; car un String n'est jamais modifiable ! Essayes plutôt de travailler sur des tableaux char[], ce sera mieux.
Pour les autres erreurs on verra plus tard, certaines devrait disparaître toute seule quand tu modifieras ton code...
j'ai modifier les ' ' en les supprimant j'avais completement oublier les code ascii --'
sinon je ne vois pas ce que tu veux dire pour le reste..
Je dois utiliser des string ou string buffer
De plus je n'ai presque plus de temps pour finir le devoir (pas que je m'y prend a la bourre mais trop de devoir en un coup..) 3 en c 1 en shell et 3 en java --' plus contrôle... Mais je coince sur ce programme et pas moyen de le résoudre... Après je dois encore le faire avec la mantisse --'
sinon je ne vois pas ce que tu veux dire pour le reste..
Je dois utiliser des string ou string buffer
De plus je n'ai presque plus de temps pour finir le devoir (pas que je m'y prend a la bourre mais trop de devoir en un coup..) 3 en c 1 en shell et 3 en java --' plus contrôle... Mais je coince sur ce programme et pas moyen de le résoudre... Après je dois encore le faire avec la mantisse --'
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
4 févr. 2013 à 21:14
4 févr. 2013 à 21:14
Ce que je veux dire c'est que tu ne peux pas modifier le caractère d'un String, mais le StringBuffer serait effectivement une alternative envisageable.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
voila j'ai un peu avancer dans mon programme:
mais pas moyen de sortir les négatif --'
import java.util.Scanner; public class binaire2 { public static void main(String args[]) { Scanner clavier = new Scanner(System.in); boolean bon = false ; //on en supposant que la chaine binaire entré est bonne String nb = ""; do{ System.out.println("Entrez un nombre binaire sur 8 bits: "); nb = clavier.nextLine(); boolean estBinaire = true ; for (int i=0; i<nb.length() & estBinaire ;i++) estBinaire = nb.charAt(i) == '1' | nb.charAt(i) == '0'; if (estBinaire && nb.length() == 8 )bon = true; }while(!bon);// nb correctement initialisé //.................................................................. partie positif int cpt = 0; int x; int signe; x = nb.charAt(cpt)-'0'; if (x == 0) // on vérifie si le nombre binaire est: positif { signe = 0; //positif } else { signe = 1; //négatif System.out.println("x vaut 1"); } double total = 0; cpt = 1; while(cpt < nb.length() && bon == true && signe == 0) // Compte la taille du string { System.out.println("bouclepositif"); x = nb.charAt(cpt)-'0'; // x contiendra les nombres binaire total = total + Math.pow(2,(nb.length()-cpt))*x; cpt++; } //total = total/2;//Tout les résultats se trouvai au double sans.. //......................................................................partie négatif StringBuffer A1 = new StringBuffer(""); while(cpt < nb.length() && bon == true && signe == 1) // Compte la taille du string { System.out.println("bouclenégatif"); x = nb.charAt(cpt)-'0'; // x contiendra les nombres binaire System.out.println("x neg vaut:"+x); if (x == 0) // complément A1 { System.out.println("Le nombre x 1 est :"+x); A1.append("1"); //on reconstitue une nouvelle chaine binaire cpt++; System.out.println("Le nombre A1 est :"+A1); } else { System.out.println("Le nombre x 2 est :"+x); A1.append("0"); //on reconstitue une nouvelle chaine binaire cpt++; } } System.out.println("Le nombre A1 est :"+A1); cpt = 0; while(cpt < nb.length()-1 && bon == true && signe == 1) // Compte la taille du string { x = nb.charAt(cpt)-'0'; // x contiendra les nombres binaire if (x == 0 && signe == 1) // complément A2 { A1.setCharAt(cpt,'1'); System.out.println("Troll"); cpt++; } else { A1.setCharAt(cpt,'0'); signe = 0; System.out.println("Fin"); } } System.out.println("Le nombre A1 est :"+A1); while(cpt < nb.length()-1 && bon == true && signe == 0) // Compte la taille du string { total = total + Math.pow(2,(A1.length()-cpt))*x; cpt++; } total = total/2; //Sinon je possède le double de la valeur voulu if (bon == true) //si il s'agit bien d'une chaine binaire { System.out.println("Le nombre décimal est :"+total); } else // La chaine binaire est mauvaise { System.out.println("Le nombre binaire que vous avez entré n'est pas bon"); } } }
mais pas moyen de sortir les négatif --'
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
6 févr. 2013 à 18:35
6 févr. 2013 à 18:35
Vu ce que tu fais, il n'y a AUCUNE raison d'avoir des double, ce sont des nombres entiers qu'il faut que tu utilises. En plus tu dis avoir des problèmes avec les négatifs, mais avec les positifs aussi. Rien que "00000001" ça donne 1.9921875...
Et puis c'est looooong ! 120 lignes pour un code qui doit en faire 20 maxi, c'est vraiment compliqué à comprendre tellement tu es loin de ce qu'on attend de toi.
Alors y a rien d'étonnant à ce que ça plante, tu te perds en complications inutiles !
Et puis c'est looooong ! 120 lignes pour un code qui doit en faire 20 maxi, c'est vraiment compliqué à comprendre tellement tu es loin de ce qu'on attend de toi.
Alors y a rien d'étonnant à ce que ça plante, tu te perds en complications inutiles !
désoler je débute avec le java.. Pour la fonction double ce n'est que a cause de la fonction pow que je l'utilise. Le programme est long mais j'ai préféré le découper en plusieurs gros morceau pour avoir plus simple
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
Modifié par KX le 6/02/2013 à 19:12
Modifié par KX le 6/02/2013 à 19:12
Non, non, là tu t'égares. Quand je vois que tu as 5 boucles, c'est énorme.
Tu as juste à lire les caractères un à un pour faire ton calcul, donc une seule boucle suffit !
Et puis tu n'as pas besoin de faire des puissances, et encore moins avec pow...
Il faut absolument que tu revoies l'algorithme de conversion binaire à décimal, car là c'est vraiment beaucoup plus compliqué que nécessaire !
Déjà dans un premier temps, ne prends pas en compte les cas particuliers, pars du principe que ta chaîne est déjà de taille 8 avec que des 0 et 1, et tu fais le calcul de base (1 seule boucle, 20 lignes maximum, si c'est plus, c'est faux).
Et une fois que ça marchera tu pourras rajouter des avertissements pour dire que la chaîne n'est pas correcte, mais c'est vraiment pas le plus important !
Tu as juste à lire les caractères un à un pour faire ton calcul, donc une seule boucle suffit !
Et puis tu n'as pas besoin de faire des puissances, et encore moins avec pow...
Il faut absolument que tu revoies l'algorithme de conversion binaire à décimal, car là c'est vraiment beaucoup plus compliqué que nécessaire !
Déjà dans un premier temps, ne prends pas en compte les cas particuliers, pars du principe que ta chaîne est déjà de taille 8 avec que des 0 et 1, et tu fais le calcul de base (1 seule boucle, 20 lignes maximum, si c'est plus, c'est faux).
Et une fois que ça marchera tu pourras rajouter des avertissements pour dire que la chaîne n'est pas correcte, mais c'est vraiment pas le plus important !
KX
Messages postés
16754
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 020
6 févr. 2013 à 20:59
6 févr. 2013 à 20:59
Voici un exemple :
Cependant tu n'as pas besoin de ça pour ton programme ! La seule méthode qui te sera utile c'est charAt(i), et éventuellement length, mais tout le reste ne te servira à rien !
StringBuffer sb = new StringBuffer(); sb.append("texte");
Cependant tu n'as pas besoin de ça pour ton programme ! La seule méthode qui te sera utile c'est charAt(i), et éventuellement length, mais tout le reste ne te servira à rien !