Buenas, dejo una posible solución al ejercicio CU00552F del tutorial aprende a programar en C como si estuvieras en primero.
EJERCICIO
Reescribe el programa siguiente 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”.
//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:
#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.