Ver Mensaje Individual
  #2 (permalink)  
Antiguo 31/01/2016, 08:59
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: duda cargar , mostrar y ordenar estructura en c++[ayuda]

El código, si lo decoras con la etiqueta de código (mira el desplegable Highlight) conseguirás que sea legible y respetarás las normas del foro.

Cosillas de tu código:

C++ no es C

En C++ los struct funcionan de forma ligeramente diferente a como lo hacen en C.

En C++ no es necesario usar typedef con un struct. El siguiente ejemplo te lo demuestra:

Código C++:
Ver original
  1. struct tJugador{
  2.   string name;
  3.   float puntuacion;
  4. };
  5.  
  6. int main()
  7. {
  8.   tJugador objeto;
  9.   objeto.name = "test";
  10. }

Contenedores

C++ dispone de contenedores. Un contenedor es un objeto pensado para contener colecciones de elementos. Son los sustitutos naturales de los arrays de C. Las ventajas de usar contenedores en vez de arrays de C son varias:
  • Evitas errores con la memoria dinámica.
  • No tienes limitaciones de tamaño. El contenedor gestiona su memoria interna y tiene sus propias rutinas para redimensionar el tamaño de su lista.
  • Disponen de utilidades para manipular sus elementos
  • Cada tipo de contenedor se adapta a unas necesidades diferentes.

El contenedor más utilizado es vector. Esta clase almacena una lista de elementos sin ordenar, para no enrollarnos decir que es lo más parecido un array clásico de C.

La clase vector tiene un método push_back() para añadir elementos a la lista, un método size() que te indica el número de elementos en la lista. También puedes usar los corchetes [] para acceder a los elementos de la colección:

Código C++:
Ver original
  1. std::vector<tJugador> jugadores;
  2.  
  3. tJugador jugador;
  4. jugador.name="test";
  5.  
  6. jugadores.push_back(jugador);
  7.  
  8. std::cout << jugadores.size() << std::endl;
  9. std::cout << jugadores[0].name << std::endl;

No se si te dejarán utilizar contenedores a estas alturas, pero te interesa saber que existen y que su uso es muy recomendable.

Ordenar listas

Código C++:
Ver original
  1. void ordenar(tJugador player[]){
  2.   for (int contador = 0; contador < MAX_JUGADORES - 1; contador++) {
  3.     // Desde el primer elemento hasta el penúltimo
  4.     for (int j = MAX_JUGADORES - 1; j > contador; j--) { // <<--- 1
  5.       if (players[cont].puntuacion < lista[cont - 1].puntuacion) { // <<--- 2
  6.         int tmp;
  7.         tmp = players[cont].puntuacion;
  8.         players[cont].puntacion = players[cont - 1].puntuacion;  // <<--- 3
  9.         players[cont - 1].puntuacion = tmp;
  10.  
  11.         // 4
  12.       }
  13.     }
  14.   }
  15. }
  1. Un segundo bucle con j como índice... ¿Dónde usas esta variable?
  2. Si la variable que estás declarando en el for es contador... ¿por qué aquí usas cont? Nombres diferentes, variables diferentes y código que no compila.
  3. ¿Por qué asumes que SIEMPRE debes intercambiar el un registro y su inmediatamente anterior? ¿Y si cont vale 0? Tip: Tienes dos índices contador y [/i]j[/i]... úsalos.
  4. Ordenar la lista entiendo que debería significar ordenar TODO... no únicamente la puntuación. ¿Qué sucede con el nombre del jugador? Tienes los datos definidos en una estructura no? pues entonces copia estructuras:
    Código C++:
    Ver original
    1. tJugador jugador1;
    2. jugador1.name="test";
    3. jugador1.puntuacion = 3;
    4.  
    5. tJugador jugador2;
    6. jugador2 = jugador1;
    7.  
    8. std::cout << jugador2.name << " " << jugador2.puntuacion << std::endl;

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.