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: Dimitar Stefanov en 08 de Julio 2016, 21:41

Título: C ejemplo refactorizar código Sumatorio n números impares en lenguajeC CU00552F
Publicado por: Dimitar Stefanov en 08 de Julio 2016, 21:41
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.
Título: Re:C ejemplo refactorizar código Sumatorio n números impares en lenguajeC CU00552F
Publicado por: César Krall en 12 de Julio 2016, 18:15
Hola! Todo bien!