PDA

View Full Version : aiuto correzzione codice c++ (somma binaria)


LimiT-MaTz
15-10-2004, 20:18
ecco a voi il codice ...
non riesco a capire cosa sbaglio concettualmente e per quale motivo non funzione .

vi ringrazio in anticipo!

#include <iostream.h>
#include <stdlib.h>
#include <string.h>
#define EOS '\0'
#define MAX 20

char *binsum(char[],char[],int,int); // FUNZIONE PROTOTIPO

// //
// FUNZIONE MAIN //
// //

int main(){

char num1[MAX];
char num2[MAX];
int lvl1 = 0;
int lvl2 = 0;
int error = 0;
int error2 =0;
cout << "INSERISCI 2 CIFRE BINARIE" <<"\n"<< endl;
cin >> num1; cout <<":"; cin >> num2;

lvl1 = strlen(num1);
lvl2 = strlen(num2);

for(int i=0;i < lvl1;i++){ // //
if (num1[i] != '0' && num1[i] != '1') // CONTROLLO BINARIO //
error = 1;} // //
if(error==1) cout<<"\nERROR!";

for(int a=0;i < lvl1;a++){ // //
if (num1[a] != '0' && num1[a] != '1') // CONTROLLO BINARIO //
error2 = 1;} // //
if(error2==1) cout<<"\nERROR!";

cout << binsum(num1,num2,lvl1,lvl2);


return 0;
}


/// FUNZIONE ///

char *binsum(char num1[],char num2[],int lvl1,int lvl2){
int flag1=0;
int inum1=0;
int inum2=0;
int iresult=0;
char *result;
char *carry;
if(lvl1 > lvl2)
flag1 = 1;
if(lvl1 < lvl2)
flag1 = 2;

if (flag1 == 1){
result = (char *) malloc(lvl1+1);
carry = (char *) malloc(lvl1+1);
carry[0] = '0';
for(int i=0;i<=(lvl1);i++){

if (i<= lvl1)
inum1 =(int) num1[i];
else inum1 = 0;

if (i <= lvl2)
inum2 =(int) num2[i];
else inum2 = 0;

iresult = inum1 + inum2 + (int)carry[i];

if (iresult == 0){
result[i] = '0';
carry[i+1] =0;}
if (iresult == 1){
result[i]= '0';
carry[i+1]= 0;}
if (iresult == 2){
result[i]='0';
carry[i+1]=1;}
if (iresult == 3){
result[i] ='1';
carry[i+1] = 1;}
}
result[lvl1+1] = EOS;}

if (flag1 == 0){
result = (char *) malloc(lvl1+1);
carry = (char *) malloc(lvl1+1);
carry[0] = '0';
for(int i=0;i<=(lvl1);i++){

if (i<= lvl1)
inum1 =(int) num1[i];
else inum1 = 0;

if (i <= lvl2)
inum2 =(int) num2[i];
else inum2 = 0;

iresult = inum1 + inum2 + (int)carry[i];

if (iresult == 0){
result[i] = '0';
carry[i+1] =0;}
if (iresult == 1){
result[i]= '0';
carry[i+1]= 0;}
if (iresult == 2){
result[i]='0';
carry[i+1]=1;}
if (iresult == 3){
result[i] ='1';
carry[i+1] = 1;}
}
result[lvl1+1] = EOS;}

if (flag1 == 2){
result = (char *) malloc(lvl2+1);
carry = (char *) malloc(lvl2+1);

carry[0] = 0;
for(int i=0;i<=(lvl2);i++){

if (i<= lvl1)
inum1 =(int) num1[i];
else inum1 = 0;

if (i <= lvl2)
inum2 =(int) num2[i];
else inum2 = 0;

iresult = inum1 + inum2 +(int) carry[i];

if (iresult == 0){
result[i] = '0';
carry[i+1] =0;}
if (iresult == 1){
result[i]= '0';
carry[i+1]= 0;}
if (iresult == 2){
result[i]='0';
carry[i+1]=1;}
if (iresult == 3){
result[i] ='1';
carry[i+1] = 1;}
}
result[lvl1+1] = EOS;}

return result;}


//////

bgpop
20-10-2004, 09:50
for(int a=0;i < lvl1;a++){ // //
if (num1[a] != '0' && num1[a] != '1') //



Non so se possa essere questo il problema, ma guarda la condizione del for... hai messo i come il ciclo precedente, ma incrementi la a.