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;}
//////
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;}
//////