elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  compila pero no hace lo que pido
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: compila pero no hace lo que pido  (Leído 1,765 veces)
imeniuel

Desconectado Desconectado

Mensajes: 1


Ver Perfil
compila pero no hace lo que pido
« en: 3 Septiembre 2019, 19:42 pm »

hola estoy practicando funciones y me puse a realizar un programa que compila pero los resultados no son lo que esparaba, si alguno me dice donde esta mi error me ayudaria mucho
el codigo es:

/*
Confeccionar un programa que solicite el ingreso de un número entero positivo de 4 cifras y pueda calcular e
informar la suma de sus dígitos hasta llegar a una sola cifra. Ej:2561 → 5
*/
#include <iostream>
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int obtener_datos(int numero);
void calculo_datos(int suma);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
using namespace std;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int numero;
int suma;

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    obtener_datos(numero);
    calculo_datos(suma);
    return 0;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int obtener_datos(int numero)
{
    do
    {
        cout<<"Digite un numero de 4 cifras mayor a cero: ";
        cin>>numero;

        if(numero>1000)
        {
            return numero;
        }
        else
        {
            cout<<"El numero ingresado no cumple los requisitos pedidos"<<endl;
            cout<<"Digite un numero de 4 cifras mayor a cero: ";
        }
    }while(numero<=999);
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void calculo_datos(int suma)
{
    int unidad_mil;
    int decena;
    int centena;
    int unidad;
    int unidad2;
    int decena2;

    unidad_mil=numero/1000;
    centena=(numero%1000)/100;        //1234
    decena=((numero%1000)%100)/10;
    unidad=((numero%1000)%100)%10;
    suma=unidad+decena+centena+unidad_mil;
    if(suma>0&&suma<=9)
    {
        cout<<"El resultado es: "<<suma<<endl;
    }
    else
    {
        decena2=suma/10;
        unidad2=suma%10;
        suma=decena2+unidad2;
        cout<<"El resultado es: "<<suma<<endl;
    }
}


En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: compila pero no hace lo que pido
« Respuesta #1 en: 3 Septiembre 2019, 21:15 pm »

Deberías pensar en usar la recursividad y tal vez usar bucles para conseguir cada uno de los dígitos.

Debes encontrar el patrón y automatizar.


En línea

@XSStringManolo
Hacker/Programador
Colaborador
***
Desconectado Desconectado

Mensajes: 2.397


Turn off the red ligth


Ver Perfil WWW
Re: compila pero no hace lo que pido
« Respuesta #2 en: 3 Septiembre 2019, 21:23 pm »

No estás haciendo lo que se te pide. Y estás declarando todo como ints. Dice número entero positivo.
Si usas unsigned ya que sabes que es positivo y que va a tener 4 cifras puedes usar short.
unsigned short int numero = 1000;

La condicion del bucle debería ser comprobar si el número está entre 1000 y 9999 ambos incluidos. Ya que son todos los números enteros positivos de 4 cifras.

Esta forma de pedirte el ejercicio interpreto que está planteado  específicamente para que lo resuelvas de forma matemática. Si no, lo más sencillo es resolver este problema con un array de ints y usando el operador de array[] o aritmética de punteros para acceder a cada elemento del array y sumarlos. Otra opción es usar un string que no deja de ser un array de caracteres y aplicarías el mismo principio de usar el operador array[], aritmética de punteros o como añadido alguno de los múltiples métodos que te habilita la Standart Template Library, como el método find, o recorrer el array usando iteradores o alguno de los múltiples for como el clásico o el basado en rango o alguno de los algoritmos disponibles para ello.
También puedes resolverslo obteniendo los bytes que ocupa en memoria el tipo de dato unsigned short int o usar los operadores de bits y resolverlo operando en binario.
Interpreto que lo tienes que resolver matemáticamente debido a que te dice "número entero positivo" no caracter. O "números" enteros positivos. Aunque el resultado final sea el mismo, será para que desarrolles tu pensamiento lógico.

Matemáticamente puedes aprovecharte de que se hace un truncado de números decimales. Es decir, la parte decimal no se aproxima, se elimina.

Si el numero fuese por ejemplo 6789 obtienes las cifras dividiendo entre cada valor.

numero1 = numero/1000; Obtienes 6.
numero2 = numero/100; Obtienes 67.
numero3 = numero/10; Obtienes 678.
numero4 = numero/1; Obtienes 6789.

Así solo sacas uno de los números que vas a sumar. El 6.

Ahora voy a sacar el 7.
numero2 = numero2 - numero1*10;
Así ya sale el 7.

Ahora el 8.
numero3 = numero3 - ((numero1*10 + numero2)*10); Esto equivale a 678-670;

El último.
numero4 = numero4 - (((numero1*10 + numero2)*10)*10); Esto equivale a 6789-6780;

Te queda:
numero1 = 6
numero2 = 7
numero3 = 8
numero4 = 9

Sumas todo:
numero = numero1 + numero2 + numero3 + numero4; Y obtienes 30.

Si el número es mayor a 9 tienes 2 cifras, asique debes obtener ambas cifras. Usas el mismo método.
numero1 = 30/10; Obtienes 3.
numero2 = numero - numero1*10; Obtienes 0.

Por último obtienes el resultado final del programa:
numero = número1 + numero2; Obtienes 3.

Esto si lo quieres hacer con una función hazlo con una funcion que returne unsigned short int y tome como parámetro el número.
unsigned short int Calculo (numero);

Seguramente haya burradas de maneras de resolverlo matemáticamente y más eficientes. Esta es la que se me ocurre a mi sin darle muchas vueltas ni buscar ejemplos. Impleméntala en el programa o utiliza otra. Asegúrate de que esté todo correcto y se cumpla en todos los casos.

Estas operaciones están en bruto, puedes sacar y deberías sacar el patrón usado e implementarlo en un for.
« Última modificación: 3 Septiembre 2019, 21:35 pm por string Manolo » En línea

Mi perfil de patrocinadores de GitHub está activo! Puedes patrocinarme para apoyar mi trabajo de código abierto 💖

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: compila pero no hace lo que pido
« Respuesta #3 en: 3 Septiembre 2019, 21:28 pm »

Creo que te complicaste un poco, Manolo. Con dividir y resto es más sencillo, cómo lo hacía él, pero en un bucle.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Compila bien, pero no ejecuta !! Solucionado
Java
Vingilot 4 3,961 Último mensaje 8 Enero 2008, 15:20 pm
por Vingilot
Programa que compila, pero error en consola
Java
AndenBomber 1 2,656 Último mensaje 29 Mayo 2008, 19:49 pm
por HadesDark
Ejercicio compila pero no se ejecuta « 1 2 »
Programación C/C++
David8 15 8,163 Último mensaje 20 Abril 2014, 22:47 pm
por David8
Duda C++. Compila pero no corre.
Programación C/C++
Gaspi 9 3,963 Último mensaje 20 Febrero 2015, 20:58 pm
por Gaspi
matriz 5*5 no me da error pero no compila « 1 2 »
Programación C/C++
creiko 11 4,502 Último mensaje 29 Mayo 2016, 00:04 am
por creiko
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines