Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Enri_f99 en 24 Noviembre 2017, 17:42 pm



Título: Algún consejo sobre como enfocar este problema para solucionarlo?
Publicado por: Enri_f99 en 24 Noviembre 2017, 17:42 pm
Hola buenas, veréis tengo que tratar de crear un  programa que compla la siguiente precondición y postcondición:
/*
 * Pre: <a> y <b> almacenan sendas cadenas de caracteres con la secuencia
 *      de dígitos de dos números naturales seguidos por el carácter NUL, 
 *      cuyo código ASCII es el '\0'. Sea nA el número de dígitos de <a>
 *      y nB el número de dígitos de <b>. Los caracteres a[nA-1] y b[nB-1]
 *      representan las unidades, los caracteres a[nA-2] y b[nB-2] las decenas y 
 *      así sucesivamente y, finalmente, los caracteres a[0] y b[0] representan
 *      los dígitos mas significativos de <a> y <b>, respectivamente.
 * Post: <suma> almacena la secuencia de dígitos de la suma de los naturales
 *       representados por <a> y <b>. Sea nS el número de dígitos de suma.
 *       El carácter suma[nS-1] representa las unidades de la suma, el carácter
 *       suma[nS-2] representa las decenas y así sucesivamente y, finalmente,
 *       el carácter suma[0] representa el dígito más significativo de la suma.
 */


EL comienzo de la función es este :
void sumar (const char a[], const char b[], char suma[]){

He intentado enfocarlo de diversas maneras pero finalmente en vano, si alguien tiene una idea sorbre como enfocarlo agradecería mucho su ayuda.
Adjunto también el código que he intentado hacer pero que no ha funcionado por si veis algún fallo:
  int Long_a = strlen(a);
    int Long_b = strlen(b);
    if (Long_a == Long_b){
        bool seLlevaUna = false;
        int acarreo;
        for(int i= Long_a -1; i >= 0; i--){
            char ResSuma = (a - '0') + (b - '0');
            if(seLlevaUna = true){
                 acarreo = '1';
            } else {acarreo = '0';}
            if(ResSuma >= '10'){ seLlevaUna = true;
            suma = ResSuma - '10'+ acarreo;}
            else { seLlevaUna = false;
            suma = ResSuma + acarreo;
            }
    }
    } else{
        int diferencia_long;
        if(Long_a > Long_b){
        diferencia_long = Long_a - Long_b;
        for(int i = Long_a-1; i >=0; i--){
            suma = (a - '0')+(b[i-diferencia_long] - '0');
        }
    }
       
        else{diferencia_long = Long_b-Long_a;
        for(int i = Long_b-1; i >=0; i--){
            suma = (b - '0')+(a[i-diferencia_long] - '0');
            }
        }
    }
}
       

Gracias por adelantado, un saludo.


Título: Re: Algún consejo sobre como enfocar este problema para solucionarlo?
Publicado por: MAFUS en 25 Noviembre 2017, 00:16 am
Esto ResSuma >= '10' en C no existe. Las comillas simples son para indicar un (1) dato de tipo carácter, por tanto tener dos encerrados entre comillas simples es un error per se. Seguro que querías decir el valor numérico por tanto quita las comillas.


Título: Re: Algún consejo sobre como enfocar este problema para solucionarlo?
Publicado por: CalgaryCorpus en 25 Noviembre 2017, 14:59 pm
= es para asignar
== es para comparar

Por ejemplo si haces
if( variable = xxxx ) { ... }

estas ASIGNANDO el valor xxx a la variable, no comparandola con xxx.

Tu codigo esta lleno de asignaciones cuando querias comparar.