[Duda] Otra forma de resolverlo?

Iniciado por criskapunk, 18 Julio 2011, 01:54 AM

0 Miembros y 1 Visitante están viendo este tema.

criskapunk

Buenas chicos,

Estoy leyendo el libro de Deitel y hay un ejercicio que dice:

Citar
Escriba un programa que lea cinco enteros y a continuacion determine e imprima cuales son el mayor y el menor entero del grupo. Utilice solo las tecnicas de programacion qe aprendio en este capitulo.

Lo unico que puedo utilizar es:

  • Funciones scanf() y printf().
  • Operadores aritmeticos, de asignacion, de igualdad y relacionales.
  • Estructura if (NO if-else, NO estructuras anidadas).
  • Variables tipo int.

A mi se me ocurrio esta forma para resolverlo:


#include <stdio.h>

main()
{
int a, b, c, d, e;
int min, max;

printf("Ingrese el primer numero: ");
scanf("%d", &a);
min = a;
max = a;
printf("Ingrese el segundo numero: ");
scanf("%d", &b);
if (b < min)
min = b;
if (b > max)
max = b;
printf("Ingrese el tercer numero: ");
scanf("%d", &c);
if (c < min)
min = c;
if (c > max)
max = c;
printf("Ingrese el cuarto numero: ");
scanf("%d", &d);
if (d < min)
min = d;
if (d > max)
max = d;
printf("Ingrese el quinto numero: ");
scanf("%d", &e);
if (e < min)
min = e;
if (e > max)
max = e;

printf("El numero menor es: %d\n", min);
printf("El numero mayor es: %d\n", max);

return 0;

}


Edito:
Aca lo modifique un poco, para poder ingresar todos los numeros al principio, pero al fin y al cabo lo hace de la misma forma :P

#include <stdio.h>

main()
{
int a, b, c, d, e;
int min, max;

printf("Ingrese 5 numeros: ");
scanf("%d %d %d %d %d", &a, &b, &c, &d, &e);
min = a;
max = a;
if (b < min)
min = b;
if (b > max)
max = b;
if (c < min)
min = c;
if (c > max)
max = c;
if (d < min)
min = d;
if (d > max)
max = d;
if (e < min)
min = e;
if (e > max)
max = e;
printf("El numero menor es: %d\n", min);
printf("El numero mayor es: %d\n", max);

return 0;
}


Se les ocurre alguna otra?

Un saludo y gracias :D


Ferno

Partiendo de ambos códigos, podés optimizarlo un poco de tal manera que necesites solamente 3 variables.
Pensalo así: Te piden saber solamente el máximo y el mínimo. Entonces, vas a tener 2 variables como bien hiciste (max y min). Ahora, necesitás una variable para poder leer los enteros requeridos (una variable "a" por ejemplo).
Leés el primer número. Como es el único entero que tenés, también es el máximo y el mínimo del grupo, entonces lo asignás a las variables max y min.
¿Es necesario crear más variables para seguir leyendo? La respuesta es no! Podés leer desde la misma variable "a". Es decir, "a" tiene el valor del primer entero que leíste, pero si este entero, ya se lo asignaste a max o a min, entonces ya no te sirve para nada, por ende, podés descartarlo, entonces, podés usar la misma variable para leer los demás números y actuar de la misma manera para todos (si es mayor a max lo asignás a la variable max, o si es menor a min, lo asignás a min y así sucesivamente).

Fijate que es muy parecido a lo que hiciste, salvo que usás menos variables.
Espero que se haya entendido.

<<<-Basura->>>

Ferno, buena explicación, yo también diría que lo puedes hacer con una variable min, max y un array de 5 campos, y hacer un bucle que recorra toda la array y saque el mayor y el menor... creo que seria un opción...
<<<--Basura-->>>

Ferno

Cita de: <<<-Underwar->>> en 18 Julio 2011, 06:30 AM
Ferno, buena explicación, yo también diría que lo puedes hacer con una variable min, max y un array de 5 campos, y hacer un bucle que recorra toda la array y saque el mayor y el menor... creo que seria un opción...
También es una opción e iba a decirlo, pero leí de vuelta y en los requisitos que escribió en su post (de usar solo lo que el aprendió en ese capítulo del libro) no dice nada de loops y arrays :P por eso desistí.

criskapunk

@Ferno
Tenes razon, no se me habia ocurrido! ;D

@<<<-Underwar->>>
Si, tambien se podria haber echo asi, hay varias maneras para resolverlo pero no todas cumplen con los requisitos que puse en el primer post.

Muchas gracias por sus respuestas :D Un saludo

Khronos14

A mi se me ocurrió esta forma:


#include <stdio.h>
#include <stdlib.h>

int main(int argc, char * argv[])
{
int numero = 0;
int i = 0, menor = 0, mayor = 0;

for (; i < 5; i++)
{
printf("Introduce un numero: ");
scanf("%d", &numero);

if (i == 0)
{
menor = numero;
mayor = numero;
}

if (numero < menor)
menor = numero;
if (numero > mayor)
mayor = numero;
}

printf("El mayor es: %d\n", mayor);
printf("El menor es: %d\n", menor);

system("pause>nul");
return 0;
}


Saludos.

criskapunk

@Khronos14

Esa forma tambien seria valida, pero no cumple con los requisitos que puse en el primer post :P

Citar

  • Funciones scanf() y printf().
  • Operadores aritmeticos, de asignacion, de igualdad y relacionales.
  • Estructura if (NO if-else, NO estructuras anidadas).
  • Variables tipo int.

Un saludo