Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Pandemia en 29 de Julio 2016, 22:05

Título: Ejemplo funciones en C Calcular series de números impares LenguajeC CU00552F
Publicado por: Pandemia en 29 de Julio 2016, 22:05
Buenas noches amigos aquí os dejo una posible solución al ejercicio CU00552F.

Citar
EJERCICIO

Reescribe el programa anterior para que todas las funciones tengan un tipo de retorno y que los mensajes no sean mostrados por las distintas funciones, sino que la muestra de mensajes sea realizada exclusivamente por la función main. Esto se corresponde con reorganizar o reescribir un código para mejorarlo, y a esto se le suele denominar “refactorización del código”.

 

Código: [Seleccionar]
//Programa cálculos con impares02
#include <stdio.h>
#include <stdlib.h>

#define NMAX 19
int obtenerValorParaCalculo(); void resolverSumatorio (int numeroItemsSum);
void resolverProducto (int numeroItemsProd);

int main() {
    int valorParaCalculo=0;    int opcionUsuario = 1;
    while (opcionUsuario!=4) {
        printf("\n\n1: Introducir valor\n2: Calcular serie 1+3+5...\n");
        printf("3: Calcular serie 1*3*5...\n4: Salir\n\nElija opcion: ");
        scanf("%d", &opcionUsuario);
        if (opcionUsuario==1) {
            valorParaCalculo =  obtenerValorParaCalculo();
        }

        if (opcionUsuario==2) {
            if (valorParaCalculo!=0) {
                resolverSumatorio(valorParaCalculo);
            } else {
                printf("No hay un valor para calculo que permita obtener sumatorio 1+3+5+...");
            }
        }

        if (opcionUsuario==3) {
            if (valorParaCalculo!=0) {
                resolverProducto(valorParaCalculo);
            } else {
                printf("No hay un valor para calculo que permita obtener resultado 1*3*5*...");
            }
        }
    }
    return 0;
}


int obtenerValorParaCalculo() {
    int imparElegido = 0;
    do {
        printf("\nPor favor introduzca numero entero impar entre 1 y 19: ");
        scanf("%d", &imparElegido);
    } while (imparElegido<=0 || imparElegido>NMAX ||imparElegido%2==0);
    return imparElegido; // Ejercicios resueltos de programación aprenderaprogramar.com
}

void resolverSumatorio (int valorCalculoSum) {
    int impar = -1;      long resultadoSum =0;
    do {
        impar = impar + 2;
        resultadoSum = resultadoSum + impar;
    } while (impar < valorCalculoSum);
    printf("n = %d El valor del sumatorio es: %ld", valorCalculoSum, resultadoSum);
}

void resolverProducto (int valorCalculoProd) {
    int impar = -1;     long resultadoProd = 1;
    do {
        impar = impar + 2;
        resultadoProd = resultadoProd * impar;
    } while (impar < valorCalculoProd);
    printf("n = %d El valor del producto es: %ld", valorCalculoProd, resultadoProd);
}

Solución

Código: [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

#define NMAX 19
int obtenerValorParaCalculo();
long resolverSumatorio (int numeroItemsSum);
long resolverProducto (int numeroItemsProd);

int main()
{
    int valorParaCalculo=0;
    int opcionUsuario = 1;
    while (opcionUsuario!=4)
    {
        printf("\n\n1: Introducir valor\n2: Calcular serie 1+3+5...\n");
        printf("3: Calcular serie 1*3*5...\n4: Salir\n\nElija opcion: ");
        scanf("%d", &opcionUsuario);
        if (opcionUsuario==1)
        {
            valorParaCalculo =  obtenerValorParaCalculo();
        }

        if (opcionUsuario==2)
        {
            if (valorParaCalculo!=0)
            {
                resolverSumatorio(valorParaCalculo);
            }
            else
            {
                printf("No hay un valor para calculo que permita obtener sumatorio 1+3+5+...");
            }
        }

        if (opcionUsuario==3)
        {
            if (valorParaCalculo!=0)
            {
                resolverProducto(valorParaCalculo);
            }
            else
            {
                printf("No hay un valor para calculo que permita obtener resultado 1*3*5*...");
            }
        }
    }
    return 0;
}


int obtenerValorParaCalculo()
{
    int imparElegido = 0;
    do
    {
        printf("\nPor favor introduzca numero entero impar entre 1 y 19: ");
        scanf("%d", &imparElegido);
    }
    while (imparElegido<=0 || imparElegido>NMAX ||imparElegido%2==0);
    return imparElegido; // Ejercicios resueltos de programación aprenderaprogramar.com
}

long resolverSumatorio (int valorCalculoSum)
{
    int impar = -1;
    long resultadoSum =0;
    do
    {
        impar = impar + 2;
        resultadoSum = resultadoSum + impar;
    }
    while (impar < valorCalculoSum);
    printf("n = %d El valor del sumatorio es: %ld", valorCalculoSum, resultadoSum);
}

long resolverProducto (int valorCalculoProd)
{
    int impar = -1;
    long resultadoProd = 1;
    do
    {
        impar = impar + 2;
        resultadoProd = resultadoProd * impar;
    }
    while (impar < valorCalculoProd);
    printf("n = %d El valor del producto es: %ld", valorCalculoProd, resultadoProd);
}

Título: Re:Ejemplo funciones en C Calcular series de números impares LenguajeC CU00552F
Publicado por: Mario R. Rancel en 05 de Agosto 2016, 14:37
Buenas tardes, el ejercicio indica que <<los mensajes no sean mostrados por las distintas funciones, sino que la muestra de mensajes sea realizada exclusivamente por la función main>>

Tu código no cumple con lo que se pedía, ya que dentro de las funciones tienes instrucciones printf para mostrar mensajes por pantalla.

Puedes contrastar tu solución con la propuesta en este otro hilo: https://www.aprenderaprogramar.com/foros/index.php?topic=4924.0

Saludos
Título: Re:Ejemplo funciones en C Calcular series de números impares LenguajeC CU00552F
Publicado por: Pandemia en 07 de Agosto 2016, 20:12
Buenas tardes Mario y gracias por responder, no me había quedado claro el ejercicio,  lo he leído con más detenimiento y dejo el código nuevo.

Código: [Seleccionar]
//Programa cálculos con impares02
#include <stdio.h>
#include <stdlib.h>

#define NMAX 19

int obtenerValorParaCalculo();
long resolverSumatorio (int numeroItemsSum);
long resolverProducto (int numeroItemsProd);
int main()
{
    int valorParaCalculo=0;
    int opcionUsuario = 1;
    while (opcionUsuario!=4)
    {
        printf("\n\n1: Introducir valor\n2: Calcular serie 1+3+5...\n");
        printf("3: Calcular serie 1*3*5...\n4: Salir\n\nElija opcion: ");
        scanf("%d", &opcionUsuario);
        if (opcionUsuario==1)
        {
            valorParaCalculo =  obtenerValorParaCalculo();
        }
        if (opcionUsuario==2)
        {
            if (valorParaCalculo!=0)
            {
                printf("n = %d El valor del sumatorio es: %ld", valorParaCalculo, resolverSumatorio(valorParaCalculo));
            }
            else
            {
                printf("No hay un valor para calculo que permita obtener sumatorio 1+3+5+...");
            }
        }
        if (opcionUsuario==3)
        {
            if (valorParaCalculo!=0)
            {
                printf("n = %d El valor del producto es: %ld", valorParaCalculo, resolverProducto(valorParaCalculo));
            }
            else
            {
                printf("No hay un valor para calculo que permita obtener resultado 1*3*5*...");
            }
        }
    }
    return 0;
}
int obtenerValorParaCalculo()
{
    int imparElegido = 0;
    do
    {
        printf("\nPor favor introduzca numero entero impar entre 1 y 19: ");
        scanf("%d", &imparElegido);
    }
    while (imparElegido<=0 || imparElegido>NMAX ||imparElegido%2==0);
    return imparElegido; // Ejercicios resueltos de programación aprenderaprogramar.com
}
long resolverSumatorio (int valorCalculoSum)
{
    int impar = -1;
    long resultadoSum =0;
    do
    {
        impar = impar + 2;
        resultadoSum = resultadoSum + impar;
    }
    while (impar < valorCalculoSum);
    return resultadoSum;
}
long resolverProducto (int valorCalculoProd)
{
    int impar = -1;
    long resultadoProd = 1;
    do
    {
        impar = impar + 2;
        resultadoProd = resultadoProd * impar;
    }
    while (impar < valorCalculoProd);
    return resultadoProd;
}


Saludos y gracias por tu tiempo.
Título: Re:Ejemplo funciones en C Calcular series de números impares LenguajeC CU00552F
Publicado por: Mario R. Rancel en 11 de Agosto 2016, 18:37
Así mejor, las funciones ahora se limitan a devolver algo mediante la sentencia return, que era lo que se pedía. Saludos.