Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: criskapunk en 18 Julio 2011, 01:54 am



Título: [Duda] Otra forma de resolverlo?
Publicado por: criskapunk en 18 Julio 2011, 01:54 am
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:

Código
  1. #include <stdio.h>
  2.  
  3. main()
  4. {
  5. int a, b, c, d, e;
  6. int min, max;
  7.  
  8. printf("Ingrese el primer numero: ");
  9. scanf("%d", &a);
  10. min = a;
  11. max = a;
  12. printf("Ingrese el segundo numero: ");
  13. scanf("%d", &b);
  14. if (b < min)
  15. min = b;
  16. if (b > max)
  17. max = b;
  18. printf("Ingrese el tercer numero: ");
  19. scanf("%d", &c);
  20. if (c < min)
  21. min = c;
  22. if (c > max)
  23. max = c;
  24. printf("Ingrese el cuarto numero: ");
  25. scanf("%d", &d);
  26. if (d < min)
  27. min = d;
  28. if (d > max)
  29. max = d;
  30. printf("Ingrese el quinto numero: ");
  31. scanf("%d", &e);
  32. if (e < min)
  33. min = e;
  34. if (e > max)
  35. max = e;
  36.  
  37. printf("El numero menor es: %d\n", min);
  38. printf("El numero mayor es: %d\n", max);
  39.  
  40. return 0;
  41.  
  42. }
  43.  

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

Código
  1. #include <stdio.h>
  2.  
  3. main()
  4. {
  5. int a, b, c, d, e;
  6. int min, max;
  7.  
  8. printf("Ingrese 5 numeros: ");
  9. scanf("%d %d %d %d %d", &a, &b, &c, &d, &e);
  10. min = a;
  11. max = a;
  12. if (b < min)
  13. min = b;
  14. if (b > max)
  15. max = b;
  16. if (c < min)
  17. min = c;
  18. if (c > max)
  19. max = c;
  20. if (d < min)
  21. min = d;
  22. if (d > max)
  23. max = d;
  24. if (e < min)
  25. min = e;
  26. if (e > max)
  27. max = e;
  28. printf("El numero menor es: %d\n", min);
  29. printf("El numero mayor es: %d\n", max);
  30.  
  31. return 0;
  32. }

Se les ocurre alguna otra?

Un saludo y gracias :D



Título: Re: [Duda] Otra forma de resolverlo?
Publicado por: Ferno en 18 Julio 2011, 06:23 am
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.


Título: Re: [Duda] Otra forma de resolverlo?
Publicado por: <<<-Basura->>> 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...


Título: Re: [Duda] Otra forma de resolverlo?
Publicado por: Ferno en 18 Julio 2011, 06:33 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í.


Título: Re: [Duda] Otra forma de resolverlo?
Publicado por: criskapunk en 18 Julio 2011, 13:34 pm
@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


Título: Re: [Duda] Otra forma de resolverlo?
Publicado por: Khronos14 en 18 Julio 2011, 13:40 pm
A mi se me ocurrió esta forma:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char * argv[])
  5. {
  6. int numero = 0;
  7. int i = 0, menor = 0, mayor = 0;
  8.  
  9. for (; i < 5; i++)
  10. {
  11. printf("Introduce un numero: ");
  12. scanf("%d", &numero);
  13.  
  14. if (i == 0)
  15. {
  16. menor = numero;
  17. mayor = numero;
  18. }
  19.  
  20. if (numero < menor)
  21. menor = numero;
  22. if (numero > mayor)
  23. mayor = numero;
  24. }
  25.  
  26. printf("El mayor es: %d\n", mayor);
  27. printf("El menor es: %d\n", menor);
  28.  
  29. system("pause>nul");
  30. return 0;
  31. }
  32.  

Saludos.


Título: Re: [Duda] Otra forma de resolverlo?
Publicado por: criskapunk en 18 Julio 2011, 13:45 pm
@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