Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: shikidos en 19 Enero 2015, 03:54 am



Título: ayuda compañeros! programa c ordenar mayor a menor
Publicado por: shikidos en 19 Enero 2015, 03:54 am
Hola compañeros, trate de hacer un programa que ordene los numeros de mayor a menor pero al correr salen muchos ceros y parece que tiene algun fallo, pero no se cual es, podrian ayudarme? en seguida coloco el codigo
Código
  1. #include <stdio.h>
  2. main(){
  3. int a, b, c, d, e, nm1, nm2, nm3, nm4, nm5;
  4. printf("Por favor introduzca 5 numeros separados por un espacio, en seguida se ordenaran de mayor a menor.\n");
  5. scanf("f%, f%, f%, f%, f%", a, b, c, d, e);
  6.  
  7. if (a >= b){
  8. nm1 = a;
  9. nm2 = b;
  10. }
  11. else {
  12.    nm1 = b;
  13.    nm2 = a;
  14. }
  15. if (c >= d){
  16. nm3 = c;
  17. nm4 = d;
  18. }
  19. else {
  20.    nm3 = d;
  21.    nm4 = c;
  22. }
  23. if (nm3 >= nm1){
  24.    nm1 = c;
  25.    nm3 = a;
  26. }
  27. else {
  28.    nm1 = a;
  29.    nm3 = c;
  30. }
  31. if (nm4 >= nm2){
  32.    nm2 = d;
  33.    nm4 = b;
  34. }
  35. else {
  36.    nm2 = b;
  37.    nm4 = d;
  38. }
  39.  
  40. if (e >= nm1 & nm3){
  41.    nm2 = nm1;
  42.    nm3 = nm2;
  43.    nm4 = nm3;
  44.    nm5 = nm4;
  45.    c = nm1;
  46. }
  47. else {
  48.    e = nm5;
  49. }
  50.  
  51. printf("Gracias! aqui estan tus numeros ordenados:\n %f, %f, %f, %f, %f", nm1, nm2, nm3, nm4, nm5);
  52. return 0;
  53. }

Mod: Tema modificado. Para hacer tu código más visible usa las etiqueta GeSHi


Título: Re: ayuda compañeros! programa c ordenar mayor a menor
Publicado por: engel lex en 19 Enero 2015, 04:05 am
problema 1: en el scanf el parámetro "f%" está mal escrito... es con el "%" antecediendo al indicador tal que "%f"

problema 2: todas tus variables son de tipo int, "%f" captura floats... debes usar "%d"

problema 3: para el ultimo printf también debes usar "%d"

problema 4: los parametros para scanf deben pasar referenciados es decir con "&" antes de cada variable
ej:
Código
  1. scanf("%d", &variable);

por ultimo, no entiendo la lógica de tu programa... pero está mal...



modifiqué tu código para hacerlo más visible, procura usar etiquetas GeSHi



Título: Re: ayuda compañeros! programa c ordenar mayor a menor
Publicado por: shikidos en 19 Enero 2015, 04:21 am
muchas gracias, por la ayuda con el codigo y por la informacion, es la primera vez que posteo  y que hago un programa... la proxima tratare de postearlo correctamente :xD

regresando al codigo... lo cambie con tus recomendaciones pero me sigue saliendo algo asi... (http://s17.postimg.org/hjy94kenz/programa_mayor_a_menor.jpg)

supongo que algo esta mal en mi codigo, no logro entender que es, podria alguien orientarme para que funcione correctamente?


Título: Re: ayuda compañeros! programa c ordenar mayor a menor
Publicado por: engel lex en 19 Enero 2015, 04:26 am
publica como quedó tu codigo


Título: Re: ayuda compañeros! programa c ordenar mayor a menor
Publicado por: shikidos en 19 Enero 2015, 04:32 am
asi quedo ya modificado...
Código
  1. #include <stdio.h>
  2. main(){
  3. int a, b, c, d, e, nm1, nm2, nm3, nm4, nm5;
  4. printf("Por favor introduzca 5 numeros separados por un espacio, en seguida se ordenaran de mayor a menor.\n");
  5. scanf("%d, %d, %d, %d, %d", &a, &b, &c, &d, &e);
  6.  
  7. if (a >= b){
  8. nm1 = a;
  9. nm2 = b;
  10. }
  11. else {
  12.    nm1 = b;
  13.    nm2 = a;
  14. }
  15. if (c >= d){
  16. nm3 = c;
  17. nm4 = d;
  18. }
  19. else {
  20.    nm3 = d;
  21.    nm4 = c;
  22. }
  23. if (nm3 >= nm1){
  24.    nm1 = c;
  25.    nm3 = a;
  26. }
  27. else {
  28.    nm1 = a;
  29.    nm3 = c;
  30. }
  31. if (nm4 >= nm2){
  32.    nm2 = d;
  33.    nm4 = b;
  34. }
  35. else {
  36.    nm2 = b;
  37.    nm4 = d;
  38. }
  39.  
  40. if (e >= nm1 & nm3){
  41.    nm2 = nm1;
  42.    nm3 = nm2;
  43.    nm4 = nm3;
  44.    nm5 = nm4;
  45.    c = nm1;
  46. }
  47. else {
  48.    e = nm5;
  49. }
  50.  
  51. printf("Gracias! aqui estan tus numeros ordenados:\n %d, %d, %d, %d, %d", nm1, nm2, nm3, nm4, nm5);
  52. return 0;
  53. }
  54.  


Título: Re: ayuda compañeros! programa c ordenar mayor a menor
Publicado por: engel lex en 19 Enero 2015, 04:35 am
el error está en linea 5...
Código
  1. scanf("%d, %d, %d, %d, %d", &a, &b, &c, &d, &e);

el espera que introduzcas un numero, coloques una coma, un espacio y repitas... cuidado con esos errores que son los más comunes jejeje


Título: Re: ayuda compañeros! programa c ordenar mayor a menor
Publicado por: shikidos en 19 Enero 2015, 04:52 am
perfecto! ahora eso esta bien, pero creo que la logica de mi codigo esta mal, como dijiste,
(http://s28.postimg.org/j9lzxjwzh/programa_mayor_a_menor.jpg)
 si le pogo comentarios al codigo de que traate de hacer con cada if, crees que podrias orientarme?


Título: Re: ayuda compañeros! programa c ordenar mayor a menor
Publicado por: engel lex en 19 Enero 2015, 04:58 am
tienes alguna limitación? no puedes usar ciclos?

lo más practico es que hicieras un ordenamiento de burbuja


Título: Re: ayuda compañeros! programa c ordenar mayor a menor
Publicado por: shikidos en 19 Enero 2015, 05:05 am
lo que pasa es que me pidieron solo utilizar los if...


Título: Re: ayuda compañeros! programa c ordenar mayor a menor
Publicado por: engel lex en 19 Enero 2015, 05:23 am
muchos if anidados jejeje

realmente te toca hacer un ordenamiento a mano jejeje te recomiendo que busques metodos de ordenamientos de array y apliques esa logica jejeje



Título: Re: ayuda compañeros! programa c ordenar mayor a menor
Publicado por: shikidos en 19 Enero 2015, 05:27 am
bueno voy a revisar la logica y ese metodo, si no lo logro, regresare a preguntar jojo


Título: Re: ayuda compañeros! programa c ordenar mayor a menor
Publicado por: engel lex en 19 Enero 2015, 05:41 am
buble sort es el más simple, pero serían 14 pasos (creo)

la logica es algo como
supongamos el peor caso
Código:
a=5, b=4, c=3, d=2, e=1 

si a mayor que b cambian a y b
si b mayor que c cambian b y c
si c mayor que d cambian c y d
si d mayor que e cambian d y e
aquí tienes el ultimo numero listo...
ahora hacemos lo mismo hasta d, luego de nuevo hasta c, y por ultimo hasta b...