Buenas noches. Presento una posible solución del ejercicio CU00552F del curso programación en lenguaje C desde cero.
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:
//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:
//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.