Ordenamiento burbuja

Iniciado por jravelar, 24 Abril 2010, 23:23 PM

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

jravelar

Hola tengo un arreglo en dev c que me pide calificaciones y me entrega el promedio, me han pedido que lo mejore imprimienole además del promedio la calificacion mas alta del alumno, se debe tomar en cuenta que el maximo de calificaciones por semestre es 10; estuve buscando y encontre algo que es ordenamiento burbuja, pero no supe adaptarlo a mi programa. por si alguien me puede ayudar con el codigo a imprimir la calificacion mas alta porfavor!


este es el codigo
Citar#include <stdio.h>
#include <stdlib.h>
#define  M 10
int main(int argc, char *argv[])
{
  int n, i;
  float  calif[M], prom=0;
  printf ("Cuantas materias tomaste en el semestre:");
  scanf ("%d", &n);
  for(i=0; i<n; i++)
  {        printf("Dame tu calificacion:");
           scanf("%f", &calif);
           prom=prom + calif;
           }
  calif = prom/n;
  printf("\nTus calificaciones son:\n");
  for(i=0; i<n; i++)
  printf("\n%.02f", calif );
  printf("\n\n\nTu promedio es:  %.02f\n\n\n\n", calif[n]);
 
  system("PAUSE");   
  return 0;
}

Agradezco de antemano

leogtz

Pero si no te han pedido implementar una ordenación, ¿por qué quieres usar la burbuja ahí?

Además está mal redactado lo que quieres, vuelvelo a leer, verás que se entiende poco.

¿
"me han pedido que lo mejore imprimienole además del promedio la calificacion mas alta del alumno"
?
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Littlehorse

Tomas un valor como ejemplo y mientras recorres el arreglo -u donde sea que recibas las calificaciones- vas comparando con ese ejemplo, si es mayor reemplazas y si no no. Para cuando termines tendrás la calificación mas alta en donde tenias el ejemplo.

En el caso que ordenes el arreglo, la calificación mas alta estará obviamente en los extremos, dependiendo de como ordenes el arreglo (en forma ascendente o descendente)

Saludos

PD: En el foro hay ejemplos con códigos de lo que quieres hacer, y la etiqueta para los códigos es [code=c]código[/code]
An expert is a man who has made all the mistakes which can be made, in a very narrow field.

jravelar

Corrijo
El problema es
1-Pedir numero de materias
2-Obtener promedio
3-Imprimir la calificacion mas alta

Esto es lo que tengo, ya me imprime el promedio; aunque siempre me imprime 0 como si fuera la calificacion mas alta.
Segun yo utilizo el ordenamiento para imprimir la que quede "hasta al final" e imprimirla.
Por si me ayudan otra vez, jeje

#include <stdio.h>
#include <stdlib.h>
#define  M 10
int main(int argc, char *argv[])
{
  int n, i, j, temp;
  float  calif[M], prom=0;
  printf ("Cuantas materias tomaste en el semestre:");
  scanf ("%d", &n);
  for(i=0; i<n; i++){
  {      printf("Dame tu calificacion:");
           scanf("%f", &calif[i]);
           prom=prom + calif[i];
           }
           for (j=i; j<n; j++)
               {if (calif[i]>calif[j])
               temp=calif[i];
               calif[i]=calif[j];
               calif[j]=temp;
               }}
 
  printf("\n\nTu calificacion mas alta es: %i", calif[i]);

  calif[i] = prom/n;
  printf("\n\n\nTu promedio es:  %.02f\n\n", calif[n]);
  system("PAUSE");
  return 0;
}



biribau

1 - te faltan unas llaves en el "ordenamiento"
2 - eso no es la burbuja
3 - ordenacion por insercion es mucho más fácil y natural en la forma en que te vienen los datos(de uno en uno) y que supongo que es lo que pretendías(malamente, porque recorres la parte sin inicializar del array, fíjate)
4 - no te hace falta ordenarlo, es el problema de la k-seleccion cuando k=0, mira sólo tienes que llevar otra variable temporal con el máximo, cada vez que te entreguen un numero mayor actualizas el máximo, ya está, porque si algo es mayor que el máximo es que es el máximo. Problema: necesitas un numero mínimo(para inicializar máximo), esto a veces puede suponer un problema, a veces se coge -infinito o MIN_INT, en tu caso ya sabes cual es el mínimo posible, 0.

Tha_Traker

Yo te recomendarías dos cosas para empezar: tabula y pon comentarios. Porque el código tal cual esta es incomprensible.
Antes de preguntas, por qué no usas el debuger, aprenderas más que si te resuelven otros las dudas simples.
En todo caso como dice biribau no te hace falta ordenar y en este caso no deberías ordenador es totalmente ilógico y sobrecargas el programa para nada.

Lo que tienes que hacer es coger un papel y plantearte el problema. Necesitas saber cual es la nota maxima. Pues como te ha dicho biribau :
Citarcada vez que te entreguen un numero mayor actualizas el máximo, ya está, porque si algo es mayor que el máximo es que es el máximo. Problema: necesitas un numero mínimo(para inicializar máximo), esto a veces puede suponer un problema, a veces se coge -infinito o MIN_INT, en tu caso ya sabes cual es el mínimo posible, 0.


Después de insertar los datos en el vector con el primer for. Haz otro for igual y dentro pregunta si el dato que esta en MAX es mejor que el del vector, si es el caso cambia, sino pues que siga.
NOTA:No hace falta un mínimo para eso, tan solo inicialo con el primer valor del vector.



Una burbuja en speudocódigo

CitarCOMIENZO Burbuja

Entorno:

p,n,i son enteros
vector[n] es alfanumerico{vector}
Algoritmo:

para
p<-1 a n-1 hacer {en c seria i<-0}
   para i<-1 a n-1 hacer
     si vector>vector[i+1]
        entonces
        aux<-v
        vector<-vector[i+1]
        vector[i+1]<-aux
    fin_si
   fin_para
fin_para

FIN_BURBUJA

Esto es la estructura de una burbuja.


Un saludo