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
-
Buenas noches amigos aquí os dejo una posible solución al ejercicio CU00552F.
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”.
//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)
{
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);
}
-
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
-
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.
//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.
-
Así mejor, las funciones ahora se limitan a devolver algo mediante la sentencia return, que era lo que se pedía. Saludos.