PDA

Ver la versión completa : Problema en C



herc
30-08-2010, 20:26
Estoy aprendiendo C, y hice un programa en el que insertas 3 numeros y te dice el maximo, el minimo y el mediano, pero al poner por ejemplo: 3, 2 y 1 me da que el maximo es 1, el mediano 3 y el minimo 2... Que problema puedo tener?
Aqui dejo el codigo:

void main()
{
int a, b, c, max, min, med;
printf("Pon 3 valores \n");
scanf( "%d %d %d", &a, &b, &c );
if ((a>b) && (a>c))
{
max=a;
if (b>c)
{
med=b;
min=c;
}
else
{
med=c;
min=b;
}
}
else if ((b>a) && (b>c))
{
max=b;
if (a>c)
{
med=a;
min=c;
}
else
{
med=c;
min=a;
}
}
else if ((c>a) && (c>b));
{
max=c;
if (a>b)
{
med=a;
min=b;
}
else
{
med=b;
min=a;
}
}
printf("son: \n");
printf("maximo= %d\n", max);
printf("mediano= %d\n", med);
printf("minimo= %d\n", min);
system("pause");
}
Gracias por vuestra ayuda ^^

Fruit
31-08-2010, 00:07
Lo bueno que tiene C es que lo puedes hacer todo lo mal que quieras, que como lo optimiza el compilador... ¿por qué no hacemos un concurso de burradas? A ver quién es capaz de hacer un algoritmo más desoptimizado para calcular el menor, mediano y mayor, el único requisito es que funcione.


void main()
{
int a, b, c, max, min, med;
printf("Pon 3 valores \n");
scanf( "%d %d %d", &a, &b, &c );

if (a > b && a > c)
max = a;
if (b > a && b > c)
max = b;
if (c > b && c > a)
max = c;

if (a < b && a < c)
min = a;
if (b < a && b < c)
min = b;
if (c < b && c < a)
min = c;

if (a > min && a < max)
med = a;
if (b > min && b < max)
med = b;
if (c > min && c < max)
med = c;

printf("son: \n");
printf("maximo= %d\n", max);
printf("mediano= %d\n", med);
printf("minimo= %d\n", min);
}

herc
31-08-2010, 00:50
Bueno, al simpatico de arriba:
Antes de tanta prepotencia deberias saber que lo que hago es probar las distintas construcciones que sé para practicar, y la que me falla es esa asi que lo que me has puesto tu no es inutil, es lo siguiente.

Fruit
31-08-2010, 01:09
Podría soltar una ristra de insultos aleatorios aquí, pero como me parece que has malinterpretado completamente mi mensaje, mejor me callo.

RaidMan
31-08-2010, 01:16
Herc, no hagas mucho caso de Fruit, es como la mascota del foro :D

Veras, para lo que tu quieres hacer lo ideal seria que aprendieses a utilizar el llamado "Bubble Sort" u "Ordenamiento Burbuja"

Veras, consiste en lo siguiente:
Creando un Array haces que un bucle lo recorra comparando las cifras que le hayas dado a cada posicion. Y luego guardas la que resulte mayor en cada caso en una variable "comodin" la que sea mayor la colocas en la 1º posicion del Array (pero no habras perdido la 1º, 2º y 3º cifras originales porque las habras ido guardando en la variable "comodin), y asi sucesivamente.

O mejor explicado: http://es.wikipedia.org/wiki/Ordenamiento_de_burbuja


Un saludo

PD: Fruit, se bueno. :D

herc
31-08-2010, 02:43
El caso es que yo todavia estoy aprendiendo y estaba probando las diferentes construcciones condicionales, pero no se porque cuando hice esa los resultados me dieron mal y queria ver si alguien veia el fallo que habia tenido en ese codigo :/

Polimeron
31-08-2010, 09:11
Saludos herc. Tu error está en esta comparación:

else if ((c>a) && (c>b));

Has puesto un punto y coma donde no deberías y por ello haces que esa condición valga solo para ese punto y coma. Dicho de otra forma, el resto de código que debería estar en esa condición se ejecutará siempre.

Marchi
02-09-2010, 04:50
Añadiendo a lo dicho por Polimeron, herc tené en cuenta que en C se puede encerrar cualquier porción de código entre llaves {}. Es decir, no son específicas de las estructuras de control como ser el if, switch o while por ejemplo.

Es así que no te da ningún error al encontrar el bloque de código después del ';'.

Saludos

herc
05-09-2010, 03:16
Muchas gracias por la ayuda ^^