C/Visual C - ayuda con burbuja en C

 
Vista:

ayuda con burbuja en C

Publicado por btc (7 intervenciones) el 24/07/2008 04:03:28
Hola,
Quisiera ver si alguien me puede decir donde esta el error en esta compilacion:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

#define TAM 10

void evalua (int);
void llenausuario (int []);
void ordena (int []);

void main () {
int opcion;
clrscr ();
printf ("MENU ");
printf ("2. Llenar por el usuario ");
printf ("10. Ordenar ascendentemente ");
printf ("Digite su opcion: ");
scanf ("%d", &opcion);
evalua (opcion);
getch ();
}

void evalua (int opcion)
{
int num [TAM];
switch (opcion) {
case 2: llenausuario (num);
break;
case 10: ordena (num);
break;
}
}

void llenausuario (int numeros [])
{
int i;
printf (" Digite un valor ");
for (i=0; i<TAM; i++)
scanf ("%d", &numeros[i]);
for (i=0; i<TAM; i++)
printf ("%3d", numeros[i]);

}
void ordena (int numeros [])
{
int i,j, aux;
llenausuario (numeros);
for (j=0; j<TAM; j++)
for (i=0; i<TAM; i++)
if ((numeros[i]) > (numeros [i+1]))
{
aux= numeros [i];
numeros [i]= numeros [i+1];
numeros [i+1]= aux;
}
for (i=0; i<TAM; i++)
printf (" %3d", numeros [i]);
}

Al momento de imprimir, el primer dato que me imprime es -10 y el numero mas alto del vector entonces no lo imprime por ya no haber espacio.

Gracias!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:ayuda con burbuja en C

Publicado por m0skit0 (15 intervenciones) el 24/07/2008 11:14:15
En la compilación no tienes error, será en la ejecución, o mejor, en la lógica del programa.

Cuando te refieres a imprimir, hay dos sitios donde imprimes con printf(), ¿a cuál de los 2 de refieres?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con burbuja en C

Publicado por btc (7 intervenciones) el 24/07/2008 15:38:03
me refiero a la segunda parte, la de la funcion ordena. hago el procedimiento de la burbuja y luego quiero imprimir los datos ordenados; al hacer esto el primer numero que siempre imprime es -10 aunque este dato nunca fue digitado, por tanto el numero mayor de la lista no se imprime porque ya -10 tomo un espacio del vector. otra cosa, como hago para que una vez que el usuario haya llenado el vector con los numeros que quiera, y luego se llame a la funcion ordenar, no se tenga que llamar a la funcion anterior? si no que "hale" los numeros ya ingresados en la funcion "llenausuario"?

GRACIAS!!

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

#define TAM 10

void evalua (int);
void llenausuario (int []);
void ordena (int []);

void main () {
int opcion;
clrscr ();
printf ("MENU ");
printf ("2. Llenar por el usuario ");
printf ("10. Ordenar ascendentemente ");
printf ("Digite su opcion: ");
scanf ("%d", &opcion);
evalua (opcion);
getch ();
}

void evalua (int opcion)
{
int num [TAM];
switch (opcion) {
case 2: llenausuario (num);
break;
case 10: ordena (num);
break;
}
}

void llenausuario (int numeros [])
{
int i;
printf (" Digite un valor ");
for (i=0; i<TAM; i++)
scanf ("%d", &numeros[i]);

}
void ordena (int numeros [])
{
int i,j, aux;
llenausuario (numeros);
for (j=0; j<TAM; j++)
for (i=0; i<TAM; i++)
if ((numeros[i]) > (numeros [i+1]))
{
aux= numeros [i];
numeros [i]= numeros [i+1];
numeros [i+1]= aux;
}
for (i=0; i<TAM; i++)
printf (" %3d", numeros [i]);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con burbuja en C

Publicado por m0skit0 (15 intervenciones) el 24/07/2008 16:07:09
Mucho mejor explicado btc ;^)

Para no llamar a llenausuario() si ha sido llamada anteriormente puedes usar una variable unsigned short, por ejemplo, "lleno". Inicialmente le asignas un valor de 0 (lleno = 0). Si el usuario llama a llenausuario, la pones a 1. Cuando vayas a ordenar, compruebas si está a 0 ó 1.

En cuanto a la parte realmente importante, ten en cuenta que cuando i vale 9, entonces i+1 está fuera del rango de tu array y de ahí sacas el -10 y ahí se queda el valor mayor. ¿Cómo solucionarlo? Pues muévete de i=0 a TAM-1. Creo que ahí radica tu problema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con burbuja en C

Publicado por btc (7 intervenciones) el 24/07/2008 16:53:20
Muchisimas gracias m0skit0, ya quisiera tenerte como profesor, creo que seria genial!
En fin, perdona el abuso pero la parte de la variable unsigned "short" no la entendi muy bien, esa variable la debo colocar en el programa principal, en la funcion llenausuario o en la funcion ordenar?

Sabes, todas estas preguntas surgen a raiz de un programa de examen que tengo que presentar y estas son apenas las interrogantes iniciales. aki te va el examen para que te des una idea:
Diseñe un programa que almacene en un vector numérico los datos de ventas en millones de colones de los últimos 6 meses, una vez almacenados debe generar un gráfico de barras donde se visualice la información almacenada.
De esta manera, si se digitan las siguientes cantidades:
15
25
5
20
20
15

Generaría un gráfico de barras, con los datos ordenados a la izquierda y las barras de cada mes alcanzando el nivel respectivo

Se sugiere que trabaje desde un menú con las opciones de: Ingreso de Datos, Revisión de Datos, Generación de Gráfico, Salir del Programa. Queda demás recordar que se debe utilizar todo lo aprendido durante el curso, con el fin de hacer lo más eficiente posible el programa.

Apenas estoy en el curso de programacion II, asi que son conocimientos basicos de ciclos, funciones, librerias, modo grafico y lo ultimo que hemos visto son los vectores y las matrices.
Cualquier ayuda es muy bien recibida.
GRACIAS!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con burbuja en C

Publicado por m0skit0 (15 intervenciones) el 29/07/2008 14:11:37
De nada, estamos aquí para ayudar. Todos hemos pasado por esto, nadie nace sabiendo.

Mira, te explico lo del "unsigned short" (puedes usar short o int si te apetece también). Te lo pongo en mayúsculas para que resalte, cámbialo a minúsuculas

void main ()
{
int opcion;
INT LLENA = 0;
clrscr ();

printf ("MENU ");
printf ("2. Llenar por el usuario ");
printf ("10. Ordenar ascendentemente ");
printf ("Digite su opcion: ");
scanf ("%d", &opcion);
evalua (opcion,LLENA);
getch ();

}

void evalua (int opcion, INT LLENA)
{
int num [TAM];
switch (opcion) {
case 2: LLENA = 1;
llenausuario (num);
break;
case 10: ordena (num);
break; }
}

}
void ordena (int numeros [])
{
int i,j, aux;
if (LLENA==0)
llenausuario (numeros);
etc...

Espero que hayas comprendido. Si no, ¡pregunta! :^) Salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar