Autor Tema: C ejemplo refactorizar código Sumatorio n números impares en lenguajeC CU00552F  (Leído 2381 veces)

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Buenas noches. Presento una posible solución del ejercicio CU00552F del curso programación en lenguaje C desde cero.

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 del programa anterior:

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

El código refactorizado:

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

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

int main() {
    int valorParaCalculo=0;
    int opcionUsuario = 1;
    long resultadoSum=0;
    long resultadoProd=0;

    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) {
            do {
                printf("\nPor favor introduzca numero entero impar entre 1 y 19: ");
                scanf("%d", &valorParaCalculo);
            } while (valorParaCalculo<=0 || valorParaCalculo>NMAX ||valorParaCalculo%2==0);
        }

        if (opcionUsuario==2) {
            if (valorParaCalculo!=0) {
                resultadoSum = resolverSumatorio(valorParaCalculo);
                printf("n = %d El valor del sumatorio es: %ld", valorParaCalculo, resultadoSum);
            } else {
                printf("No hay un valor para calculo que permita obtener sumatorio 1+3+5+...");
            }
        }

        if (opcionUsuario==3) {
            if (valorParaCalculo!=0) {
                resultadoProd = resolverProducto(valorParaCalculo);
                printf("n = %d El valor del producto es: %ld", valorParaCalculo, resultadoProd);
            } else {
                printf("No hay un valor para calculo que permita obtener resultado 1*3*5*...");
            }
        }
    }
    return 0;
}

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

Gracias.
« Última modificación: 12 de Julio 2016, 18:14 por César Krall »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Hola! Todo bien!
Responsable de departamento de producción aprenderaprogramar.com

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".