Advertisement
Guest User

Untitled

a guest
Nov 13th, 2019
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.13 KB | None | 0 0
  1. /**********************************************************************/ /**
  2.  *
  3.  * @file pr5_juego_v0.cpp
  4.  *
  5.  * @brief Práctica 5 EDA-GIM: Programa principal
  6.  *  
  7.  * @version 0.9
  8.  * @author Marina Martinez y Laura Crespo
  9.  * @date 06-11-2019
  10.  *
  11.  */ /**********************************************************************/
  12.  
  13. #include <map>
  14. #include <vector>
  15. #include <utility>      //pair, make_pair
  16. #include <algorithm>    //make_heap, push_heap, pop_heap
  17. #include <fstream>
  18. #include <iostream>
  19. #include <string>
  20.  
  21. using namespace std;
  22.  
  23. //Alias para el tipo mapa (jugadoresConectados)
  24. typedef map<string,int> TipoMapa;
  25. //Alias para los elementos que se guardan en el monticulo y en los equipos
  26. typedef pair<int,string> TElemento;
  27. //Alias para el tipo monticulo (rankingJugadores)
  28. typedef vector<TElemento> TipoMonticulo;
  29. //Nombres de los archivos de entrada y salida
  30. const string NOM_ARCHIVO_INICIO = "usuarios_conectados_small.dat";
  31. const string NOM_ARCHIVO_SALIDA = "pr5_jugadores_final.dat";
  32.  
  33. //Prototipos de funciones auxiliares
  34. void ConstruirMapaInicial(TipoMapa&);
  35. void MostrarJugadoresConectados(TipoMapa);
  36. void ConstruirMonticuloInicial(TipoMapa, TipoMonticulo&);
  37. void MostrarRankingJugadores (TipoMonticulo);
  38. void FormarEquipos(TipoMonticulo&, vector<TElemento>&, vector<TElemento>&);
  39. void MostrarEquipo(vector<TElemento>);
  40. void ActualizarPuntuacion(vector<TElemento>, int, TipoMonticulo&, TipoMapa&);
  41. void GuardarResultados(TipoMapa);
  42.  
  43. /** @brief Programa principal organizado con la estructura de tareas
  44.  *  del guion de la practica
  45.  */
  46. int main()
  47. {
  48.     TipoMapa jugadoresConectados ;
  49.     TipoMonticulo rankingJugadores;
  50.     vector<TElemento> equipo_1, equipo_2;
  51.    
  52.     //Tarea 1: Carga inicial y verificacion
  53.     ConstruirMapaInicial(jugadoresConectados);
  54.     cout << endl << "Jugadores Conectados" << endl;
  55.     cout << "-----------------------------" << endl;    
  56.     MostrarJugadoresConectados(jugadoresConectados);
  57.     ConstruirMonticuloInicial(jugadoresConectados, rankingJugadores);
  58.     cout << endl << "Ranking de jugadores" << endl;
  59.     cout << "-----------------------------" << endl;
  60.     MostrarRankingJugadores(rankingJugadores);
  61.    
  62.     //Tarea 2: Formacion de equipos y verificacion
  63.     FormarEquipos(rankingJugadores, equipo_1, equipo_2);
  64.     cout << endl << "* Equipo 1" << endl;
  65.     cout << "*****************" << endl;
  66.     MostrarEquipo(equipo_1);
  67.     cout << endl << "* Equipo 2" << endl;
  68.     cout << "*****************" << endl;
  69.     MostrarEquipo(equipo_2);
  70.     cout << endl << "Ranking de jugadores (sin los equipos)" << endl;
  71.     cout << "-----------------------------" << endl;
  72.     MostrarRankingJugadores(rankingJugadores);
  73.    
  74.     //Tarea 3: Fin de juego por equipos y Actualizacion de puntuacion
  75.     //Gana equipo 2 y sus miembros acumulan 25 puntos más
  76.     ActualizarPuntuacion(equipo_2, +25, rankingJugadores, jugadoresConectados);
  77.     //Pierde equipo 2 y sus miembros restan 10 puntos menos
  78.     ActualizarPuntuacion(equipo_1, -10, rankingJugadores, jugadoresConectados);
  79.     cout << endl << "Ranking de jugadores (de nuevo con los equipos)" << endl;
  80.     cout << "-----------------------------" << endl;
  81.     MostrarRankingJugadores(rankingJugadores);
  82.     cout << endl << "Jugadores Conectados" << endl;
  83.     cout << "-----------------------------" << endl;    
  84.     MostrarJugadoresConectados(jugadoresConectados);
  85.    
  86.     //Tarea 4: Resultados finales
  87.     GuardarResultados(jugadoresConectados);
  88.    
  89.     return 0;
  90. }
  91.  
  92. /**********************************************************************/ /**
  93.  *
  94.  *  @brief Construir el mapa inicial con los jugadores conectados
  95.  *  La informacion se lee del archivo NOM_ARCHIVO_INICIO
  96.  *
  97.  *  @param[out] m Mapa generado (registro de jugadores conectados)
  98.  *
  99.  */ /**********************************************************************/
  100. void ConstruirMapaInicial(TipoMapa& m)
  101. {
  102.     //#IMPLENTAR
  103.  
  104.     ifstream f_in;
  105.     string nombre;
  106.     int puntos;
  107.    
  108.     f_in.open (NOM_ARCHIVO_INICIO);
  109.     //f_in.open ("A.dat");
  110.     if ( f_in.fail())
  111.         cout << "Error al abrir el fichero" << endl;
  112.     else
  113.     {
  114.         while (getline (f_in, nombre, ':'))
  115.         {
  116.             f_in >> puntos;
  117.             f_in.ignore();
  118.             //m.insert(pair<string, int>(nombre, puntos));  
  119.             m.insert(make_pair(nombre, puntos));
  120.         }
  121.  
  122.         f_in.close();
  123.  
  124.  
  125.        
  126.  
  127.     }
  128.  
  129.     return;
  130.    
  131.    
  132.    
  133.    
  134. }
  135.  
  136. /**********************************************************************/ /**
  137.  *
  138.  *  @brief Mostrar en pantalla los elementos de un mapa, ordenados por clave
  139.  *
  140.  *  @param [in]  m   Mapa con los jugadores conectados
  141.  *
  142.  */ /**********************************************************************/
  143. void MostrarJugadoresConectados(TipoMapa m)
  144. {
  145.     for (TipoMapa::iterator it=m.begin(); it!=m.end() ; it++)
  146.         cout << it->first << " => " << it->second << endl;
  147.     cout << endl << "Total = " << m.size() << endl;
  148.     cout << "-----------------------------" << endl;
  149. }
  150.  
  151. /**********************************************************************/ /**
  152.  *
  153.  *  @brief Construir el monticulo inicial a partir de los jugadores conectados
  154.  *
  155.  *  @param [in]  mapa   Mapa con los jugadores conectados
  156.  *  @param [out] monte Monticulo generado
  157.  *
  158.  */ /**********************************************************************/
  159. void ConstruirMonticuloInicial(TipoMapa mapa, TipoMonticulo& monte)
  160. {  
  161. //#IMPLENTAR
  162.     //monte = make_heap (mapa.begin(), mapa.end());
  163.    
  164.     /*//Alias para el tipo mapa (jugadoresConectados)
  165.     typedef map<string,int> TipoMapa;
  166.     //Alias para los elementos que se guardan en el monticulo y en los equipos
  167.     typedef pair<int,string> TElemento;
  168.     //Alias para el tipo monticulo (rankingJugadores)
  169.     typedef vector<TElemento> TipoMonticulo;*/
  170.    
  171.     /*make_heap (monte.begin(), monte.end());  
  172.     for (TipoMapa::iterator it=mapa.begin(); it!=mapa.end(); it++)
  173.     {
  174.  
  175.          monte.push_back(//it );
  176.          push_heap (monte.begin(), monte.end());
  177.          
  178.     }*/
  179.    
  180.  
  181.    
  182. }
  183.  
  184. /**********************************************************************/ /**
  185.  *
  186.  *  @brief Mostrar en pantalla los elementos de un monticulo
  187.  *  Los datos no están ordenados, se muestran en orden de indices en el vector
  188.  *
  189.  *  @param [in]  m   Monticulo con las puntuaciones de los jugadores
  190.  *
  191.  */ /**********************************************************************/
  192. void MostrarRankingJugadores (TipoMonticulo m)
  193. {
  194.     for (size_t i=0; i < m.size(); i++)
  195.     {
  196.         if ( i==0 )
  197.             cout << "[Raiz] ";
  198.         else
  199.         {
  200.             size_t padre = (i-1)/2;
  201.             cout << "[Hijo de " << m[padre].second << "] ";
  202.         }
  203.         cout << m[i].first << ":" << m[i].second << endl;
  204.     }
  205.     cout << endl << "Total = " << m.size() << endl;
  206.     cout << "-----------------------------" << endl;
  207. }
  208.  
  209. /**********************************************************************/ /**
  210.  *
  211.  *  @brief Formar 2 equipos de 5 jugadores con los jugadores de mayor puntuacion
  212.  *  Los jugadores seleccionados son eliminados del monticulo
  213.  *
  214.  *  @param [in,out]  m   Monticulo con las puntuaciones de los jugadores
  215.  *  @param [out]  eq1   Equipo resultante 1
  216.  *  @param [out]  eq2   Equipo resultante 2
  217.  *  @exception runtime_error No hay suficientes jugadores=no se pueden formar los equipos
  218.  *
  219.  */ /**********************************************************************/
  220. void FormarEquipos(TipoMonticulo& m, vector<TElemento>& eq1, vector<TElemento>& eq2)
  221. {
  222. //#IMPLENTAR
  223. }
  224.  
  225. /**********************************************************************/ /**
  226.  *
  227.  *  @brief Mostrar por pantalla los jugadores miembros de un equipo
  228.  *
  229.  *  @param [in]  e   Equipo
  230.  *
  231.  */ /**********************************************************************/
  232. void MostrarEquipo(vector<TElemento> e)
  233. {
  234.     for (size_t i=0; i < e.size(); i++)
  235.         cout << e[i].first << ":" << e[i].second << endl;
  236.     cout << endl << "Total = " << e.size() << endl;
  237.     cout << "-----------------------------" << endl;
  238. }
  239.  
  240. /**********************************************************************/ /**
  241.  *
  242.  *  @brief Actualizar la puntuacion de los miembros de un equipo
  243.  *  Los jugadores se reincorporan al ranking de jugadores y se actualizan sus
  244.  *  datos en el registro de jugadores conectados
  245.  *
  246.  *  @param [in]  eq   Equipo
  247.  *  @param [in]  ptos Puntos añadidos (o restados si negativo)
  248.  *  @param [in,out]  monte Monticulo con el ranking de jugadores
  249.  *  @param [in,out]  mapa Mapa con el registro de jugadores conectados
  250.  *
  251.  */ /**********************************************************************/
  252. void ActualizarPuntuacion(vector<TElemento> eq, int ptos, TipoMonticulo& monte, TipoMapa& mapa)
  253. {
  254. //#IMPLENTAR
  255. }
  256.  
  257. /**********************************************************************/ /**
  258.  *
  259.  *  @brief Almacenar los resultados finales de los jugadores conectados
  260.  *  en un archivo (NOM_ARCHIVO_SALIDA)
  261.  *
  262.  *  @param [in]  mapa Mapa con el registro de jugadores conectados
  263.  *
  264.  */ /**********************************************************************/
  265. void GuardarResultados(TipoMapa m)
  266. {
  267. //#IMPLENTAR
  268. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement