Como lo dice el enunciado, no logro ingresar más de 8 dígitos para pasar de binario a decimal, si ingreso 8 o menos dígitos el resultado es correcto, pero si por Ej. ingreso 110011001 me aparece un número mayor a 1 en el noveno dígito y de la manera que está validado regresa a la función principal,-
Cómo he buscado y buscado en la web y no ayo la manera de solucionarlo recurro una vez más a Uds.
El error está en la función decimal que se encuentra en la línea 99, dejo todo el programa por si a alguien se le ocurre alguna sugerencia para mejorarlo, me parece que error de lógica no tiene, me parece. -
Código
#include <stdio.h> #include <limits.h> #include <float.h> #include <stdlib.h> #include <string.h> void sumar(float, float); void restar(float, float); void dividir(float, float); void multiplicar(float, float); void porcentaje(float, float); void binario(float, float); void decimal(float, float); void hexadecimal(float, float); int main(void){ void ( * calc[] ) (float, float) = { sumar, restar, dividir, multiplicar, porcentaje, binario, decimal, hexadecimal }; float opUno, opDos; int operador, ch, ok, opc; while( opc != 1 ){ opUno = 0.00; do{ }while(!ok); do{ }while(!ok); if( operador >= 6 ){ (* calc[ operador-1 ]) (opUno, opDos); } else{ if( operador == 5){ } else{ } do{ }while(!ok); (* calc[ operador-1 ]) (opUno, opDos); } do{ }while(!ok); } return 0; } void sumar( float opUno, float opDos ){ } void restar( float opUno, float opDos ){ } void dividir( float opUno, float opDos ){ } void multiplicar( float opUno, float opDos ){ } void porcentaje(float opUno, float opDos){ float porc, restado, sumado; porc = (opUno * opDos)/100; restado = opUno - porc; sumado = opUno + porc; } void binario( float opUno, float opDos ){ int entero, i, bits=sizeof(int)*8; entero=(int)opUno; for(i=0;i<bits;++i) } void decimal( float opUno, float opDos ){ char cadena[33]; int elementos, decimal = 0, operando = 1, i; for( i = 0; i < elementos; i++){ if( cadena[i] > '1' ){ return; } } for( --elementos; elementos >= 0; elementos-- ){ if( cadena[elementos] == '1' ){ decimal += operando; } operando *= 2; } } void hexadecimal( float opUno, float opDos ){ int entero; entero=(int)opUno; }
Saludos y muchas gracias desde ya.-
Daniel