Addition en binaire

Signaler
Messages postés
2
Date d'inscription
mercredi 12 mai 2004
Statut
Membre
Dernière intervention
26 mars 2005
-
steve_clamage
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
-
bonsoir ,



je dois faire un petit prog qui additione 2 nombres binaire.

Le probleme c' est que mes 2 nombres étant des chaines de caractére ca me renvoit une chaine de caractére.

Ex : 1+1= b



Donc voila si qqun voit merci d' avance !!







#include

#include <string.h>

#include <stdlib.h>



int verif(char * a)

{

for (int i=0;i<strlen(a);i++)

{

if (a[i]!='0' && a[i]!='1')

return(0);

}

return(1);

}



char* addition( char * nb1, char * nb2)

{

char *nb;int taille;

nb=new char[50];

int taille1=strlen(nb1);

int taille2=strlen(nb2);

int reste=0;

int nombre;

int c1,c2;

if (taille1 >taille2)

taille=taille1;

else

taille=taille2;



for (int i=0 ; i< taille;i++)

{

c1=(int)nb1[i];;

c2=(int)nb2[i];

nombre=c1+c2+reste;

// nb[i]=nombre



if ( nombre == 2)

{

nb[i]='0';

reste=1;

}

else

{

nb[i]=(char)nombre;

}

}

return(nb);

}



int main()

{

char *a,*b,*c;

a=new char[50];

b=new char[50];

c=new char[50];

cout<< " Entrez 2 nombres binaires:" << endl;

cout << " le premier : " << endl;

cin >> a ;

cout << " le second : " << endl;

cin >> b ;

if (( verif(a) && verif(b)) == 1)

{

c=addition(a,b);

cout << a <<" +"<< b<<" = " <<c << endl ;

}

else

{

if (( verif(a) || verif(b)) ==0)

{

cout <<"Les deux nombres ne sont pas binaires";

}

else

{

if ((verif(a))==0)

{

cout << "Le premier nombre n' est pas binaire";

}

else cout << "le second nombre n' est pas binaire";

}

}

return(1);

}
A voir également:

6 réponses

Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
2
Tu sais que ta fonction addition(
char * nb1, char * nb2) ne sert à rien ? "addition binaire" ne veut
rien dire, tu veux juste saisir la représentation biniare (base 2) de
deux nombres, les additionner (opérateur +, tout simplement) et
afficher la repésentation binaire du résultat.
Messages postés
2
Date d'inscription
mercredi 12 mai 2004
Statut
Membre
Dernière intervention
26 mars 2005

oui mais non justement j' ai pas le droit de faire comme ca ( trop facile!!!) !!!

Faut que je dévellope une fonction sans utiliser les options du cout sinon effectivement ca faisait 3 lignes !!!!



Puis bon de la a dire que ma fonction sert a rien ...... du calme !!!!!
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
2
Oui, si c'est le but de l'exercice, désolé.

En attendant tu devrais utiliser des string plutot que des char*, c'est
nettement plus simple (l'utilisation que tu fais des char* est
incorrecte, c'est plein de fuites mémoire)



#include // sans .h, c'est déprécié

#include <string>

using namespace std;



int main()

{

string a, b, c;



cout << " le premier : " << endl;

getline( cin, a ); // pour saisir une ligne dans a, par exemple "01010110111010"


}





Ensuite pour simplifier ta gestion d'erreur, fais une fonction addition

bool addition( const string & n1, const string & n2, string & resultat );

qui retourne faux (false) si une des deux chaines n'est pas le format correcte d'une représentation binaire.
Messages postés
46
Date d'inscription
vendredi 31 octobre 2003
Statut
Membre
Dernière intervention
7 août 2008

Je comprends pas, tu fais ton addition à l'envers non ?
Là tu pars du chiffre de gauche et tu va jusqu'au chiffre de droite, j'imagine que tu veux faire l'inverse ????
Et ici aussi,

nombre=c1+c2+reste;
// nb[i]=nombre

if ( nombre == 2)

nombre n'est pas forcément 0, 1 ou 2, ça peut etre 3 par exemple, si il restait 1 ?
Messages postés
415
Date d'inscription
samedi 4 janvier 2003
Statut
Membre
Dernière intervention
2 décembre 2005
1
Je suppose que tu veux faire l'addition binaire comme tu le ferai toi
sur une feuille. Dans ce cas, rien de plus simple. Tu prends 3 string
(ou char*, comme tu le sens). Dans la première tu met le premier
binaire, dans la deuxième tu met le deuxième binaire, et dans la
troisième, tu met le résultat de l'addition. ensuite, il te faut un int
pour le drapeau de retenu ( 1+1=10 ).

Pour commencer t'inverse les 2 binaires. ensuite tu prend caractère par caractère et tu les additionne :

0+0 = 0

0+1 = 1

1+1 = 10 (ici tu mettra 1 dans le int de la retenu pour ensuite l'additionner avec les caractère d'aprè)



P.S. : le code ASSCI de 0 est 48, et donc le code ASSCI de 1 est 49.

Le CyberMonde nous offre une meilleur qualité de vie
Messages postés
475
Date d'inscription
dimanche 3 octobre 2004
Statut
Membre
Dernière intervention
11 août 2006
2
Il faut utiliser la constante '0', c'est portable contrairement au code
ASCII (le standard n'impose pas de jeu de caractères mais on a la
relation '0' < '1' < ... < '9').