Advertisement
Guest User

Untitled

a guest
Aug 17th, 2017
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 41.85 KB | None | 0 0
  1. program GranDT;
  2.  
  3. {Version Alpha 0.01}
  4.  
  5. {**************************************************************************************************************}
  6.  
  7. uses AyPDT, CRT;
  8.  
  9. {**************************************************************************************************************}
  10.  
  11. const
  12.     JUGADORES = 623;
  13.     EQUIPOS = 20;
  14.     FECHAS_TORNEO = EQUIPOS-1;
  15.     PRESUPUESTO = 60000000;
  16.     MAX_USUARIOS = 10;
  17.     JUGADORESXEQUIPO = 15;
  18.     SEPARADORH = '--------------------------------------------------------------------------------';
  19.     VOLVER = 27;
  20.     TIEMPO_SALIDA = 1500;
  21.     SIMBOLO_MONEDA = '$';
  22.     TACTICAS = 5;
  23.     MAX_TIPO_PREMIOS = 4;
  24.  
  25. {**************************************************************************************************************}
  26.  
  27. type
  28.  
  29.     tTactica = record
  30.         ID : byte;
  31.         Cantidad : byte;
  32.         end;
  33.  
  34.     tTacticas = array[1..6] of tTactica;
  35.     tTacticaMasUsada = array[1..6] of tTactica;
  36.     tPuntajeJugador = array[1..JUGADORES, 1..FECHAS_TORNEO] of integer;
  37.  
  38.     tPuntajeTotalJugador = record
  39.         ID : Integer;
  40.         puntosacumulados : integer;
  41.         end;
  42.  
  43.     tPuntajeTotalJugadores = array[1..JUGADORES] of tPuntajeTotalJugador;
  44.  
  45.     tElegidoJugador = record
  46.         ID : integer;
  47.         valor : byte;
  48.         end;
  49.  
  50.     tElegidoJugadores = array[1..JUGADORES] of tElegidoJugador;
  51.     tListaApuestas = array[1..4] of integer;
  52.  
  53.     tPuntajeEquipo = array[1..FECHAS_TORNEO] of integer;
  54.     tTacticaEquipo = array[1..FECHAS_TORNEO] of byte;
  55.     tPrecioEquipo = array[1..FECHAS_TORNEO] of real;
  56.     tCambios = array[1..FECHAS_TORNEO] of byte;
  57.  
  58.     tCondicion = (TITULAR, SUPLENTE);
  59.  
  60.     tJugadorEquipo = record
  61.         ID : integer;
  62.         Condicion : tCondicion;
  63.         end;
  64.  
  65.     rAcumuladoJugador = record
  66.         id : integer;
  67.         puntosacumulados : integer;
  68.         end;
  69.    
  70.     tAcumuladoJugador = array[1..JUGADORES] of rAcumuladoJugador;
  71.  
  72.     tListaJugadoresEquipo = array[1..JUGADORESXEQUIPO] of tJugadorEquipo;
  73.     tEquipo = record
  74.         Puntaje : tPuntajeEquipo;
  75.         Tactica : tTacticaEquipo;
  76.         Precio : tPrecioEquipo;
  77.         CantFechasGanadas : byte;
  78.         CantCambiosAcum: byte;
  79.         CantCambiosUltimaFecha: byte;
  80.         Cambios : tCambios;
  81.         Jugador : tListaJugadoresEquipo;
  82.         end;
  83.  
  84. tUsuario = record
  85.         ID : byte;
  86.         Nombre : string[25];
  87.         Apellido : string[25];
  88.         Club : string[20];
  89.         Usuario : string[20];
  90.         Contrasena : string[10];
  91.         TipoUsuario : byte;
  92.         Equipo : tEquipo;
  93.         CantidadApuesta : real;
  94.         CantidadCambios : byte;
  95.         GananciaPorFechas : real;
  96.         GananciaPorTorneo : real;
  97.         end;
  98.  
  99.     tUsuarios = array[1..MAX_USUARIOS] of tUsuario;
  100.     tvecEquipo = array [1..JUGADORES] of tJugador;
  101.     tvecCondicion = array [1..JUGADORES] of tCondicion;
  102.     tvecClubs = array [1..(EQUIPOS+1)] of integer;
  103.     tPremios = array[1..MAX_TIPO_PREMIOS] of integer;
  104.     tRegistro = array[1..MAX_USUARIOS] of tUsuario;
  105.  
  106. {**************************************************************************************************************}
  107.  
  108. var
  109.     vListaJugadores : tListaJugadores;
  110.     vUsuarios : tUsuarios;    {Vector de usuarios participantes}
  111.     vTacticas : tTacticas;        {Vector Tactica x fecha Mas Usada}
  112.     vPuntajeJugador : tPuntajeJugador;    {Matriz Puntaje x fecha de Jugadores}
  113.     vPuntajeTotalJugadores : tPuntajeTotalJugadores;    {Vector de Jugadores con sus puntajes Totales}
  114.     vElegidoJugadores : tElegidoJugadores;    {Vector Nro de Veces Elegido Mejor Jugador}
  115.     vListaApuestas : tListaApuestas;    {Apuestas en orden: x fecha, 1ro, 2do, 3ro}
  116.     vTacticaMasUsada : tTacticaMasUsada;    {Vector Tactica x fecha Mas Usada} 
  117.     vJugadorAcumulado : tAcumuladoJugador;
  118.     CantUsuarios : byte;
  119.     Premios : tPremios;
  120.     Registro : tRegistro;
  121.     TipoUsuario : byte;
  122.     UsuarioActual : string;
  123.     FechaActual : byte;
  124.     Participantes : Byte;
  125.     Fecha : Byte;
  126.     Apuesta:integer;
  127.    
  128. {**************************************************************************************************************}
  129.  
  130. procedure MenuAdministrador(var FechaActual:byte;var TipoUsuario:byte);forward;
  131. procedure MenuIniciarSesion(var Usuarios:tRegistro;var TipoUsuario:byte);forward;
  132. procedure MenuUsuario(var TipoUsuario:byte);forward;
  133. procedure CargaUsuarios(var Usuarios:tRegistro; var TipoUsuario:byte; var UsuarioActual:string);forward;
  134. procedure MenuCorrerReportes( var Usuarios:tRegistro;var TipoUsuario:byte);forward;
  135.  
  136. //Imprime titulo del Programa
  137. procedure ImprimirTitulo();
  138. begin
  139. clrscr;
  140. gotoxy(35,1);
  141. writeln('GranDT - Grupo 4');
  142. writeln;
  143. end;
  144. //Ordena En forma Ascendente y descendente el vector
  145. Procedure OrdenarVector(var Usuarios:tRegistro; Orden:string);
  146. var
  147.     Aux:tUsuario;
  148.     i, j: byte;
  149.     DesOrd:boolean;
  150. begin
  151. i:=1;
  152. DesOrd:=true;
  153. while (i<MAX_USUARIOS) and (DesOrd) do
  154.     begin
  155.     DesOrd:=false;
  156.     for j:=1 to MAX_USUARIOS-i do
  157.         begin
  158.         if Orden='Asc' then
  159.             begin
  160.             if Usuarios[j].Usuario > Usuarios[j+1].Usuario then
  161.                 begin
  162.                 Aux:=Usuarios[j];
  163.                 Usuarios[j]:=Usuarios[j+1];
  164.                 Usuarios[j+1]:=Aux;
  165.                 DesOrd:=true;
  166.                 end;
  167.             end
  168.         else
  169.             begin
  170.             if Usuarios[j].Usuario < Usuarios[j+1].Usuario then
  171.                 begin
  172.                 Aux:=Usuarios[j];
  173.                 Usuarios[j]:=Usuarios[j+1];
  174.                 Usuarios[j+1]:=Aux;
  175.                 DesOrd:=true;
  176.                 end;
  177.             end;
  178.         end;
  179.     inc(i);
  180.     end;   
  181. end;
  182. //Devuelve la cantidad de usuarios registrados
  183. Function CantidadParticipantes(var Usuarios:tRegistro):integer;
  184. var
  185.     i:integer;
  186. begin
  187. i:=0;
  188. OrdenarVector(Usuarios, 'Des');
  189. repeat
  190. inc(i);
  191. until (Usuarios[i].Usuario='') or (i>MAX_USUARIOS);
  192. CantidadParticipantes:=i-1;
  193. end;
  194.  
  195. //Obtiene la posicion libre mas cercana.
  196. Function Posicion(var UnRecord:tRegistro):integer;
  197. var
  198.     i:integer;
  199. begin
  200. OrdenarVector(UnRecord, 'Des');
  201. i:=0;
  202. repeat
  203. inc(i);
  204. until (UnRecord[i].Usuario='') or (i>MAX_USUARIOS);
  205. Posicion:=i;
  206. end;
  207.  
  208. //Valida y devuelve numeros de 0 a 9
  209. Function ValidarOpciones():integer;
  210. var
  211.     valor:string;
  212.     Letra:byte;
  213.  begin
  214. repeat
  215.     letra:=ord(readkey);
  216.    
  217. if (Letra>47) and (Letra<58) then
  218.         begin
  219.         Valor:=chr(letra);
  220.         end;
  221. until (length(Valor) < 2);
  222. Val(Valor,Letra);
  223. ValidarOpciones:=Letra;
  224. end;
  225.  
  226. //Valida y devuelve la cantidad de cifras y el valor respectivameente
  227. Function ValidarNumerosCifras(Cant:byte):integer;
  228. var letra, Acum:byte;
  229.     Total:string;
  230.     Valor:integer;
  231. begin
  232. Total:='0';
  233. Acum:=1;
  234. repeat
  235.     letra:=ord(readkey);
  236.     if (Letra>47) and (Letra<58) then
  237.         begin
  238.         write(chr(letra));
  239.         inc(Acum);
  240.         Total:=Total + chr(letra);
  241.         end;
  242. until (letra=13) or (Acum>Cant);
  243. val(Total,Valor);
  244. ValidarNumerosCifras:=Valor;
  245. end;
  246.  
  247. //Verifica que no se dupliquen los usuarios
  248. function UsuarioDuplicado(User:string; var Usuarios:tRegistro):boolean;
  249. var
  250.     Inicio, Fin: integer;
  251.     Medio:integer;
  252.     Encontrado:boolean;
  253. begin
  254. Inicio:=1;
  255. Fin:=MAX_USUARIOS;
  256. Encontrado:=False;
  257. OrdenarVector(Usuarios, 'Des');
  258. repeat
  259. if (Inicio>=Fin) then
  260.     begin
  261.     if (Usuarios[Inicio].Usuario=User) then
  262.         begin
  263.         UsuarioDuplicado:=true;
  264.         Encontrado:=true;
  265.         end
  266.     else
  267.         begin
  268.         UsuarioDuplicado:=false;
  269.         Encontrado:=true;
  270.         end;
  271.     end;
  272. Medio:=(Inicio+Fin) div 2; 
  273. if Usuarios[Medio].Usuario=User then
  274.     begin
  275.         UsuarioDuplicado:=true;
  276.         Encontrado:=true;
  277.     end
  278. else
  279.     if Usuarios[Medio].Usuario>user then
  280.         Inicio:=Medio+1
  281.     Else
  282.         Fin:=Medio-1;  
  283. until (Encontrado)
  284. end;
  285.  
  286. //Verifica que el usuarios y la contrasena existan en los registros
  287. function BuscarUsuario(User:string; password:string; var Usuarios:tRegistro):boolean;
  288. var
  289.     Inicio, Fin: integer;
  290.     Medio:integer;
  291.     Encontrado:boolean;
  292. begin
  293. Inicio:=1;
  294. Fin:=MAX_USUARIOS;
  295. Encontrado:=False;
  296. OrdenarVector(Usuarios, 'Des');
  297. repeat
  298. if (Inicio>=Fin) then
  299.     begin
  300.     if (Usuarios[Inicio].Usuario=User) and (Usuarios[Inicio].Contrasena=password) then
  301.         begin
  302.         BuscarUsuario:=true;
  303.         Encontrado:=true;
  304.         end
  305.     else
  306.         begin
  307.         BuscarUsuario:=false;
  308.         Encontrado:=true;
  309.         end;
  310.     end;
  311. Medio:=(Inicio+Fin) div 2; 
  312. if Usuarios[Medio].Usuario=User then
  313.     if Usuarios[Medio].Contrasena=password then
  314.         begin
  315.         BuscarUsuario:=true;
  316.         Encontrado:=true;
  317.         end
  318.     else
  319.         begin
  320.         BuscarUsuario:=false;
  321.         Encontrado:=true;
  322.         end
  323. else
  324.     if Usuarios[Medio].Usuario>user then
  325.         Inicio:=Medio+1
  326.     Else
  327.         Fin:=Medio-1;  
  328. until (Encontrado)
  329. end;
  330.  
  331. //Verifica si el usuario es administrador o user
  332. Function EsAdmin(var Usuarios:tRegistro; Usuario:string):boolean;
  333. var
  334.    i:byte;
  335. begin
  336. i:=0;
  337. OrdenarVector(Usuarios, 'Des');
  338. repeat
  339.     inc(i);
  340. until (Usuarios[i].TipoUsuario=0) or (i>MAX_USUARIOS);
  341. if Usuarios[i].Usuario=Usuario then
  342.     EsAdmin:=true
  343. else
  344.     EsAdmin:=false;
  345. end;
  346.  
  347. //Oculta y devuelva las teclas ingresadas por el usuario
  348. function OcultarContrasena():string;
  349. var
  350.    Contrasena:string;
  351.    Tecla:byte;
  352.    Contador:byte;
  353. begin
  354. contrasena:='';
  355. contador:=0;
  356. tecla:=0;
  357. while tecla<>13 do
  358.    begin
  359.    Tecla:=ord(readkey);
  360.    if (Tecla > 47) and (Tecla < 123) and (Contador<10) then
  361.       begin
  362.       write('*');
  363.       Contrasena:=Contrasena+chr(Tecla);
  364.       Contador:=Contador+1;
  365.       end;
  366.    end;
  367. OcultarContrasena:=Contrasena;
  368. end;
  369.  
  370. {Convierte la tPosicion de un jugador a formato string. Juan Manuel Castro Pippo}
  371. function tPosicionAString(posicion:tPosicion):string;
  372. var
  373.     textpos:string[15];
  374. begin  
  375. case (posicion) of
  376.     ARQUERO: textpos:='Arquero';
  377.     DEFENSOR: textpos:='Defensor';
  378.     MEDIOCAMPISTA: textpos:='Mediocampista';
  379.     DELANTERO: textpos:='Delantero'
  380.     else textpos:='Desconocido';
  381.     end;
  382. tPosicionAString:=textpos;
  383. end;
  384.  
  385. {Imprime una Lista de los Mejores Jugadores por Puesto. Juan Manuel Castro Pippo}
  386. procedure ImprimirMejoresJugadoresxPuesto(vPuntajeTotalJugadores:tPuntajeTotalJugadores;posicion:tPosicion);
  387. var
  388.     i,j,k : integer;
  389.     auxid : integer;
  390.     Jugador : tJugador;
  391.     Top, ElementosxPagina, tecla:byte;
  392. begin
  393. tecla:=0;
  394. i:=1;   k:=1;
  395. Top:=10;
  396. ElementosxPagina:=15;
  397. while tecla<>83{S} do
  398. begin
  399.     clrscr();
  400.     writeln('10 MEJORES JUGADORES EN LA POSICION ', upcase(tPosicionAstring(posicion)), ' EN LO QUE VA DEL TORNEO');
  401.     writeln('');
  402.     writeln('POS':4,'APELLIDO Y NOMBRE':29,'POSICION':16,'EQUIPO':15,'ACUMULADO':15);
  403.     writeln(SEPARADORH);
  404.     j:=1;
  405.     if i>JUGADORES then i:=1;
  406.     if k>Top then
  407.     begin
  408.         k:=1;
  409.         i:=1;
  410.     end;
  411.     while (j<=ElementosxPagina) and (k<=Top) do            
  412.     begin
  413.         auxid := vPuntajeTotalJugadores[i].id;
  414.         Jugador := vListaJugadores[auxid];
  415.         if vListaJugadores[auxid].posicion = posicion then
  416.         begin
  417.             writeln(k:4,Jugador.nombre:29,tPosicionAString(Jugador.posicion):16,Jugador.equipo_real:15,vPuntajeTotalJugadores[i].puntosacumulados:15);
  418.             inc(k);
  419.             inc(j);
  420.         end;
  421.         inc(i);
  422.     end;
  423.     writeln(SEPARADORH);
  424.     write('Volver al menu anterior?: ');
  425.     tecla:=ord(upcase(readkey));
  426. end;
  427. end;
  428.  
  429. //Muestra menu Resultados por posicion de jugador
  430. procedure ReportesMenuResultadosPorPuesto(var Usuarios:tRegistro; var TipoUsuario:byte);
  431. var
  432.     Opcion:byte;
  433. begin
  434. ImprimirTitulo();
  435.           writeln('1 - Arquero');
  436.           writeln('2 - Defensor');
  437.           writeln('3 - Mediocampista');
  438.           writeln('4 - Delantero');
  439.           writeln('5 - Volver');
  440.           write('Opcion: ');
  441. Opcion:=ValidarOpciones();
  442. Case Opcion of
  443.         1: ImprimirMejoresJugadoresxPuesto(vPuntajeTotalJugadores,ARQUERO);
  444.         2: ImprimirMejoresJugadoresxPuesto(vPuntajeTotalJugadores,DEFENSOR);
  445.         3: ImprimirMejoresJugadoresxPuesto(vPuntajeTotalJugadores,MEDIOCAMPISTA);
  446.         4: ImprimirMejoresJugadoresxPuesto(vPuntajeTotalJugadores,DELANTERO);
  447.         5: MenuCorrerReportes(Usuarios, TipoUsuario);
  448.         else
  449.         ReportesMenuResultadosPorPuesto(Usuarios, TipoUsuario);
  450.         end;
  451. end;
  452.  
  453. //Pide ingreso de usuario y contrasena
  454. procedure IniciarSesion(var Usuarios:tRegistro; var TipoUsuario:byte; var UsuarioActual:string);
  455. var
  456.     Usuario, Contrasena:string;
  457. begin
  458. ImprimirTitulo();
  459. write('Usuario: ');
  460. readln(Usuario);
  461. write('Contrasena: ');
  462. Contrasena:=OcultarContrasena();
  463. if (BuscarUsuario(Usuario, Contrasena, Usuarios)) and (Contrasena <> '') then
  464.     begin
  465.     if EsAdmin(Usuarios, Usuario) then
  466.         begin
  467.         TipoUsuario:=0;
  468.         //Modificar y enviar usuario Actual:
  469.         MenuAdministrador(FechaActual, TipoUsuario)
  470.         end
  471.     else
  472.         begin
  473.         TipoUsuario:=1;
  474.         //Modificar y enviar usuario Actual:
  475.         MenuUsuario(TipoUsuario);
  476.         end;
  477.     end
  478. else
  479.     begin
  480.     writeln;
  481.     writeln('Usuario y/o contrasena incorrectos!');
  482.     delay(TIEMPO_SALIDA);
  483.     MenuIniciarSesion(Usuarios, TipoUsuario);
  484.     end;
  485. end;
  486.  
  487. //Muestra el Menu Crear o logear Usuario
  488. procedure MenuIniciarSesion(var Usuarios:tRegistro; var TipoUsuario:byte);
  489. var
  490.     Opcion:byte;
  491.     Respuesta:byte;
  492. begin
  493. ImprimirTitulo();
  494. Respuesta:=0;
  495. writeln('1 - Crear usuario');
  496. writeln('2 - Iniciar sesion');
  497. writeln('0 - Salir');
  498. write('Opcion: ');
  499. Opcion:=ValidarOpciones();
  500.       Case Opcion of
  501.             1:
  502.             begin
  503.                 TipoUsuario:=1;
  504.                 CargaUsuarios(Usuarios, TipoUsuario, UsuarioActual);
  505.                 end;
  506.             2:IniciarSesion(Usuarios, TipoUsuario, UsuarioActual);
  507.             0:begin
  508.                 write('Si sale se perderan todos los datos. Pulse S para salir: ');
  509.                 Respuesta:=ord(readkey);
  510.                 If (Respuesta=83) or (Respuesta=115) then
  511.                     begin
  512.                     writeln;
  513.                     writeln('Fin del programa...');
  514.                     delay(TIEMPO_SALIDA);
  515.                     end
  516.                 else
  517.                     MenuIniciarSesion(Usuarios, TipoUsuario);
  518.                 end
  519.             else
  520.                 MenuIniciarSesion(Usuarios, TipoUsuario);
  521.      end;
  522. end;
  523.  
  524. //LLama a la funcion crear equipo
  525. procedure CrearEquipo(var TipoUsuario:byte);
  526. begin
  527. if FechaActual=0 then
  528.     begin
  529.     // PROCEDIMIENTO CREAR EQUIPO
  530.     end
  531. else
  532.     begin
  533.     writeln;
  534.     write('El Torneo ha empezado.No puede crear equipos!');
  535.     delay(TIEMPO_SALIDA);
  536.     if TipoUsuario=0 then
  537.         MenuAdministrador(FechaActual, TipoUsuario)
  538.     else
  539.         MenuUsuario(TipoUsuario);
  540.     end;
  541. end;
  542.  
  543. procedure RealizarCambios(var TipoUsuario:byte);
  544. begin
  545. if FechaActual>0 then
  546.     begin
  547.     //PROCEDIMIENTO CAMBIOS EN EQUIPOS
  548.     end
  549. else
  550.     begin
  551.     writeln;
  552.     write('El Torneo no ha empezado.No puede realizar cambios!');
  553.     delay(TIEMPO_SALIDA);
  554.     if TipoUsuario=0 then
  555.         MenuAdministrador(FechaActual, TipoUsuario)
  556.     else
  557.         MenuUsuario(TipoUsuario);
  558.     end;
  559. end;
  560.  
  561. procedure ReportesTablaDePosiciones(var TipoUsuario:byte);
  562. begin
  563.  
  564. end;
  565.  
  566. procedure ReportesResultadosDeApuestas(var TipoUsuario:byte);
  567. begin
  568. end;
  569.  
  570. procedure ReportesEquipoFavorito(var TipoUsuario:byte);
  571. begin
  572. end;
  573.  
  574. Procedure swapUsuario(var Usuario1:tUsuario; var Usuario2:tUsuario);
  575.  
  576. var auxUsuario:tUsuario;
  577.  
  578. begin
  579.  
  580.     auxUsuario:=Usuario1;
  581.  
  582.     Usuario1:=Usuario2;
  583.  
  584.     Usuario2:=auxUsuario;
  585.  
  586. end;
  587.  
  588. Procedure OrdernarUsuariosxPuntaje (var vUsuarios:tUsuarios; USUARIOS:byte; FECHAS:byte);
  589.  
  590. var i,j,k:integer;
  591.  
  592.     ordenado:boolean;
  593.  
  594.     puntajeacum1, cambiosacum1:integer;
  595.  
  596.     precioacum1:real;
  597.  
  598.     puntajeacum2, cambiosacum2:integer;
  599.  
  600.     precioacum2:real;
  601.  
  602. Begin
  603.  
  604.     i:=1;
  605.  
  606.     ordenado:=false;
  607.  
  608.     while (i<=USUARIOS) and not(ordenado) do
  609.  
  610.     begin
  611.  
  612.         ordenado:=true;
  613.  
  614.         puntajeacum1:=0;
  615.  
  616.         precioacum1:=0;
  617.  
  618.         cambiosacum1 := puntajeacum1 + vUsuarios[i].Equipo.CantCambiosAcum;
  619.  
  620.         for j:=1 to USUARIOS-i do
  621.  
  622.         begin
  623.  
  624.             puntajeacum2:=0;
  625.  
  626.             precioacum2:=0;
  627.  
  628.             cambiosacum2 := puntajeacum2 + vUsuarios[j].Equipo.CantCambiosAcum;
  629.  
  630.             for k:=1 to FECHAS do
  631.  
  632.             begin
  633.  
  634.                 if j=1 then
  635.  
  636.                 begin
  637.  
  638.                     puntajeacum1 := puntajeacum1 + vUsuarios[i].Equipo.Puntaje[k];
  639.  
  640.                     precioacum1 := precioacum1 + vUsuarios[i].Equipo.Precio[k];
  641.  
  642.                 end;
  643.  
  644.                 puntajeacum2 := puntajeacum2 + vUsuarios[j].Equipo.Puntaje[k];
  645.  
  646.                 precioacum2 := precioacum2 + vUsuarios[j].Equipo.Precio[k];
  647.  
  648.             end;
  649.  
  650.             if puntajeacum2 > puntajeacum1 then
  651.  
  652.                 ordenado:=false
  653.  
  654.             else if (puntajeacum2 = puntajeacum1) and (cambiosacum2 < cambiosacum1) then
  655.  
  656.                 ordenado:=false
  657.  
  658.             else if (puntajeacum2 = puntajeacum1) and (cambiosacum2 = cambiosacum1) and (precioacum2 > precioacum1) then
  659.  
  660.                 ordenado:=false;
  661.  
  662.             if not(ordenado) then
  663.  
  664.             begin
  665.  
  666.                 puntajeacum1:=puntajeacum2;
  667.  
  668.                 cambiosacum1:=cambiosacum2;
  669.  
  670.                 precioacum1:=precioacum2;
  671.  
  672.                 swapUsuario(vUsuarios[i], vUsuarios[j]);
  673.  
  674.             end;
  675.  
  676.         end;
  677.  
  678.         inc(i);
  679.  
  680.     end;
  681.  
  682. End;
  683.  
  684. Procedure MostrarTabladePosiciones (var vUsuarios:tUsuarios; USUARIOS:byte; FECHAS:byte);
  685.  
  686. var i,j:integer;
  687.  
  688.     puntajeacum, cambiosacum:integer;
  689.  
  690.     precioacum:real;
  691.  
  692. Begin
  693.  
  694.     Writeln('Equipo - Pts Acum - Fechas Ganadas - Cambios Acum - Presupuesto Promedio');
  695.  
  696.     for i:=1 to USUARIOS do
  697.  
  698.     begin
  699.  
  700.         Write('Equipo ', vUsuarios[i].ID);
  701.  
  702.         puntajeacum:=0;
  703.  
  704.         cambiosacum:=0;
  705.  
  706.         precioacum:=0;
  707.  
  708.         for j:=1 to FECHAS do
  709.  
  710.         begin
  711.  
  712.             puntajeacum := puntajeacum + vUsuarios[i].Equipo.Puntaje[j];
  713.  
  714.             if (vUsuarios[i].Equipo.Tactica[j] <> vUsuarios[i].Equipo.Tactica[j+1]) and not(j+1=FECHAS) then
  715.  
  716.                 inc(cambiosacum);
  717.  
  718.             precioacum := precioacum + vUsuarios[i].Equipo.Precio[j];
  719.  
  720.         end;
  721.  
  722.         Write(' - ' , puntajeacum);
  723.  
  724.         Write(' - ' , vUsuarios[i].Equipo.CantFechasGanadas);
  725.  
  726.         Write(' - ' , cambiosacum);
  727.  
  728.         Writeln(' - ' , precioacum/FECHAS);
  729.  
  730.     end;
  731.  
  732. End;
  733.  
  734.  
  735. {Muestra los Resultado de las Apuestas. Requiere la lista de apuestas, la lista de usuarios, la variable de usuarios creados hasta el momento y la variable de la fecha actual. Ricardo Ariel Sosa Aquino}
  736.  
  737. Procedure MostrasResultadosdeApuestas(var vListaApuestas:tListaApuestas; var vUsuarios:tUsuarios; USUARIOS:byte; FECHAS:byte);
  738.  
  739. var i,j,k:integer;
  740.  
  741.     ganadoresxfecha, campeones, subcampeones, puntaje1, puntaje2:integer;
  742.  
  743.     Apuesta, ganadoxmedalla, Ganadoxfecha,gastadoxfecha1,gastadoxfecha2:real;
  744.  
  745.     esganador,escampeon,essubcampeon,estercero:boolean;
  746.  
  747. begin
  748.  
  749.     Apuesta := (vListaApuestas[1] * FECHAS + vListaApuestas[2] + vListaApuestas[3] + vListaApuestas[4])/USUARIOS;
  750.  
  751.     Writeln('Pozo por fecha: ', vListaApuestas[1]);
  752.  
  753.     Writeln('Medalla de Oro: ', vListaApuestas[2]);
  754.  
  755.     Writeln('Medalla de Plata: ', vListaApuestas[3]);
  756.  
  757.     Writeln('Medalla de Bronce: ', vListaApuestas[4]);
  758.  
  759.     {OrdernarUsuariosxPuntaje (vUsuarios, USUARIOS, FECHAS);}
  760.  
  761.     Writeln('Nombre - Equipo - Apuesta - Ganancia por fecha - Ganancia por Torneo - Ganancia Total');
  762.  
  763.     for i:=1 to USUARIOS do
  764.  
  765.     begin
  766.  
  767.         Write(vUsuarios[i].Nombre);
  768.  
  769.         Write(' - Equipo ', vUsuarios[i].ID);
  770.  
  771.         Write(' - ', Apuesta);
  772.  
  773.         puntaje1:=0;
  774.  
  775.         puntaje2:=0;
  776.  
  777.         gastadoxfecha1:=0;
  778.  
  779.         ganadoxmedalla:=0;
  780.  
  781.         campeones:=0;
  782.  
  783.         subcampeones:=1;
  784.  
  785.         escampeon:=true;
  786.  
  787.         essubcampeon:=true;
  788.  
  789.         estercero:=true;
  790.  
  791.         for j:=1 to USUARIOS do
  792.  
  793.         begin
  794.  
  795.             gastadoxfecha2:=0;
  796.  
  797.             for k:=1 to FECHAS do
  798.  
  799.             begin
  800.  
  801.                 if i=1 then
  802.  
  803.                 begin
  804.  
  805.                     puntaje1 := puntaje1 + vUsuarios[i].Equipo.Puntaje[k];
  806.  
  807.                     gastadoxfecha1 := gastadoxfecha1 + vUsuarios[i].Equipo.Precio[k];
  808.  
  809.                 end;
  810.  
  811.                 gastadoxfecha2 := gastadoxfecha2 + vUsuarios[j].Equipo.Precio[k];
  812.  
  813.                 puntaje2 := puntaje2 + vUsuarios[j].Equipo.Puntaje[k];
  814.  
  815.             end;
  816.  
  817.             if estercero then
  818.  
  819.             begin
  820.  
  821.                 if (puntaje1 < puntaje2) then
  822.  
  823.                 begin
  824.  
  825.                     if not(escampeon) then
  826.  
  827.                         begin
  828.  
  829.                             if not(essubcampeon) then
  830.  
  831.                                 estercero:=false;
  832.  
  833.                             essubcampeon:=false;
  834.  
  835.                         end;
  836.  
  837.                     escampeon:=false;
  838.  
  839.                     inc(campeones);
  840.  
  841.                 end
  842.  
  843.                 else if (puntaje1 = puntaje2) and (vUsuarios[i].Equipo.CantFechasGanadas < vUsuarios[j].Equipo.CantFechasGanadas) then
  844.  
  845.                 begin
  846.  
  847.                     if not(escampeon) then
  848.  
  849.                         begin
  850.  
  851.                             if not(essubcampeon) then
  852.  
  853.                                 estercero:=false;
  854.  
  855.                             essubcampeon:=false;
  856.  
  857.                         end;
  858.  
  859.                     escampeon:=false;
  860.  
  861.                     inc(campeones);
  862.  
  863.                 end
  864.  
  865.                 else if (puntaje1 = puntaje2) and (vUsuarios[i].Equipo.CantFechasGanadas = vUsuarios[j].Equipo.CantFechasGanadas) and (gastadoxfecha1 < gastadoxfecha2) then
  866.  
  867.                 begin
  868.  
  869.                     if not(escampeon) then
  870.  
  871.                         begin
  872.  
  873.                             if not(essubcampeon) then
  874.  
  875.                                 estercero:=false;
  876.  
  877.                             essubcampeon:=false;
  878.  
  879.                         end;
  880.  
  881.                     escampeon:=false;
  882.  
  883.                     inc(campeones);
  884.  
  885.                 end
  886.  
  887.                 else if (puntaje1 = puntaje2) and (vUsuarios[i].Equipo.CantFechasGanadas = vUsuarios[j].Equipo.CantFechasGanadas) and (gastadoxfecha1 = gastadoxfecha2) then
  888.  
  889.                 begin
  890.  
  891.                     if escampeon then
  892.  
  893.                         inc(campeones);
  894.  
  895.                     if essubcampeon then
  896.  
  897.                         inc(subcampeones);
  898.  
  899.                 end
  900.  
  901.             end;
  902.  
  903.         end;
  904.  
  905.         if escampeon then
  906.  
  907.             if (campeones<2) then
  908.  
  909.                 ganadoxmedalla := vListaApuestas[2]
  910.  
  911.             else if (campeones<3) then
  912.  
  913.                 ganadoxmedalla := (vListaApuestas[2]+vListaApuestas[3])/campeones
  914.  
  915.             else
  916.  
  917.                 ganadoxmedalla := (vListaApuestas[2]+vListaApuestas[3]+vListaApuestas[4])/campeones
  918.  
  919.         else if essubcampeon and (campeones<3) then
  920.  
  921.             if (campeones<2) then
  922.  
  923.                 if (subcampeones>1) then
  924.  
  925.                     ganadoxmedalla := (vListaApuestas[3]+vListaApuestas[4])/subcampeones
  926.  
  927.                 else
  928.  
  929.                     write(vListaApuestas[3])
  930.  
  931.             else if (campeones<3) then
  932.  
  933.                 ganadoxmedalla := vListaApuestas[4]/subcampeones
  934.  
  935.         else if estercero and (campeones+subcampeones<3)then
  936.  
  937.             ganadoxmedalla := vListaApuestas[4];
  938.  
  939.            
  940.  
  941.         write(' - ', ganadoxmedalla);
  942.  
  943.        
  944.  
  945.         if (vUsuarios[i].Equipo.CantFechasGanadas>0) then
  946.  
  947.         begin
  948.  
  949.             Ganadoxfecha := 0;
  950.  
  951.             for j:=1 to FECHAS do
  952.  
  953.             begin
  954.  
  955.                 ganadoresxfecha:=1;
  956.  
  957.                 k:=1;
  958.  
  959.                 esganador:=true;
  960.  
  961.                 while(k<=USUARIOS) and esganador do
  962.  
  963.                 begin
  964.  
  965.                     if vUsuarios[i].Equipo.Puntaje[j] < vUsuarios[k].Equipo.Puntaje[j] then
  966.  
  967.                         esganador:=false
  968.  
  969.                     else if (vUsuarios[i].Equipo.Puntaje[j] = vUsuarios[k].Equipo.Puntaje[j]) and (vUsuarios[i].Equipo.Precio[k] < vUsuarios[k].Equipo.Precio[j]) then
  970.  
  971.                         esganador:=false
  972.  
  973.                     else if (vUsuarios[i].Equipo.Puntaje[j] = vUsuarios[k].Equipo.Puntaje[j]) and (vUsuarios[i].Equipo.Precio[k] = vUsuarios[k].Equipo.Precio[j]) then
  974.  
  975.                         inc(ganadoresxfecha);
  976.  
  977.                     inc(k);
  978.  
  979.                 end;
  980.  
  981.                 if esganador then
  982.  
  983.                     Ganadoxfecha := Ganadoxfecha + vListaApuestas[1]/ganadoresxfecha;
  984.  
  985.             end;
  986.  
  987.             write(' - ', ganadoresxfecha);
  988.  
  989.         end
  990.  
  991.         else
  992.  
  993.             write(' - 0');
  994.  
  995.     end;
  996.  
  997. end;
  998.  
  999. {Muestra los resultados de la ultima fecha. Requiere la lista de puntaje de jugadores, la variable de de cant de jugadores (623) y la variable de la fecha actual. Ricardo Ariel Sosa Aquino}
  1000.  
  1001. Procedure ResultadosdelaFecha (var PuntajeJugador:tPuntajeJugador; JUGADORES:integer; FECHA:integer);
  1002.  
  1003. var i:integer;
  1004.  
  1005.     seguir:char;
  1006.  
  1007. Begin
  1008.  
  1009.     i:=1;
  1010.  
  1011.     seguir:='S';
  1012.  
  1013.     writeln('Jugador - Puntaje');
  1014.  
  1015.     while (i<JUGADORES) and (upcase(seguir)='s') do
  1016.  
  1017.     begin
  1018.  
  1019.         write('Jugador ', i , ' - ', PuntajeJugador[i, FECHA]);
  1020.  
  1021.         inc(i);
  1022.  
  1023.         readln(seguir);
  1024.  
  1025.     end;
  1026.  
  1027. End;
  1028.  
  1029. {Muestra la Tabla de Posiciones hasta la fecha actual. Requiere la lista de usuarios, la variable de usuarios creados hasta el momento y la variable de la fecha actual. Ricardo Ariel Sosa Aquino}
  1030.  
  1031. Procedure ImprimirTabladePosiciones (var vUsuarios:tUsuarios; USUARIOS:byte; FECHAS:byte);
  1032.  
  1033. begin
  1034.  
  1035.     OrdernarUsuariosxPuntaje (vUsuarios, USUARIOS, FECHAS);
  1036.  
  1037.     MostrarTabladePosiciones (vUsuarios, USUARIOS, FECHAS);
  1038.  
  1039. end;
  1040.  
  1041. {Imprime una Lista de los Mejores Jugadores. Juan Manuel Castro Pippo}
  1042. procedure ImprimirMejoresJugadores(vPuntajeTotalJugadores:tPuntajeTotalJugadores);
  1043. var
  1044.     i,j,k : integer;
  1045.     auxid : integer;
  1046.     Jugador : tJugador;
  1047.     Top, ElementosxPagina, tecla:byte;
  1048. begin
  1049. tecla:=0;
  1050. i:=1;
  1051. k:=1;
  1052. Top:=25;
  1053. ElementosxPagina:=15;                  
  1054. while tecla<>83{S} do
  1055. begin
  1056.     clrscr();
  1057.     writeln('25 MEJORES JUGADORES EN LO QUE VA DEL TORNEO');
  1058.     writeln('');
  1059.     writeln('POS':4,'APELLIDO Y NOMBRE':29,'POSICION':16,'EQUIPO':15,'ACUMULADO':15);
  1060.     writeln(SEPARADORH);
  1061.     j:=1;
  1062.     if i>JUGADORES then i:=1;
  1063.     if k>Top then
  1064.     begin
  1065.         k:=1;
  1066.         i:=1;
  1067.     end;
  1068.     while (j<=ElementosxPagina) and (k<=Top) do            
  1069.     begin
  1070.         auxid := vPuntajeTotalJugadores[i].id;
  1071.         Jugador := vListaJugadores[auxid];
  1072.         writeln(k:4,Jugador.nombre:29,tPosicionAString(Jugador.posicion):16,Jugador.equipo_real:15,vPuntajeTotalJugadores[i].puntosacumulados:15);
  1073.         inc(k);
  1074.         inc(j);
  1075.         inc(i);
  1076.     end;
  1077.     writeln(SEPARADORH);
  1078.     write('Volver al menu anterior?: ');
  1079.     tecla:=ord(upcase(readkey));
  1080. end;
  1081. end;
  1082.  
  1083. {Imprime Jugadores segun la posicion. Juan Manuel Castro Pippo}
  1084. procedure JugadorFavoritoPosicion(var vListaJugadores:tListaJugadores; var vElegidoJugadores:tElegidoJugadores; CantUsuarios:Byte; posicion:tPosicion; min:Byte; max:Byte);
  1085. var
  1086.     i,j:Integer;
  1087.     aux:Integer;
  1088. begin
  1089. i:=1;
  1090. j:=1;
  1091. while (j<=max) do
  1092. begin
  1093.     aux := vElegidoJugadores[i].ID;
  1094.     if (vListaJugadores[aux].posicion=posicion) then
  1095.     begin
  1096.         if (j<=max) and (j>=min) then
  1097.         writeln(vListaJugadores[aux].nombre:30,tPosicionAString(vListaJugadores[aux].posicion):25,vElegidoJugadores[i].Valor:24);
  1098.         inc(j);
  1099.     end;
  1100.     inc(i);
  1101. end;
  1102. end;
  1103.  
  1104. {Devuelve la id de la Tactica Mas Usada. Juan Manuel Castro Pippo}
  1105. function ObtenerTacticas(var vTacticas:tTacticas; CantUsuarios:Byte) : Byte;
  1106.         begin
  1107.                 ObtenerTacticas:=vTacticas[1].id;
  1108.         end;
  1109.      
  1110. {Imprime el EquipoFavorito. Juan Manuel Castro Pippo}
  1111. procedure EquipoFavorito(var vListaJugadores:tListaJugadores; var vElegidoJugadores:tElegidoJugadores; var vTacticas:tTacticas; CantUsuarios:Byte);
  1112. var
  1113.     arq,def,med,del:Byte;
  1114.     tecla:Byte;
  1115. begin
  1116. tecla:=20;
  1117. clrscr();
  1118. writeln('EQUIPO FAVORITO');
  1119. writeln();
  1120. arq:=1;
  1121. Case (ObtenerTacticas(vTacticas, CantUsuarios)) of
  1122.     1:
  1123.     begin
  1124.         def := 3;
  1125.         med := 4;
  1126.         del := 3;
  1127.     end;
  1128.     2:
  1129.     begin
  1130.         def := 3;
  1131.         med := 5;
  1132.         del := 2;
  1133.     end;
  1134.     3:
  1135.     begin
  1136.         def := 4;
  1137.         med := 3;
  1138.         del := 3;
  1139.     end;
  1140.     4:
  1141.     begin
  1142.         def := 4;
  1143.         med := 4;
  1144.         del := 2;
  1145.     end;
  1146.     5:
  1147.     begin
  1148.         def := 4;
  1149.         med := 5;
  1150.         del := 1;
  1151.     end;
  1152. end;
  1153. writeln('JUGADORES DEL EQUIPO':30,'POSICION':25,'VECES ELEGIDO':24);
  1154. writeln(SEPARADORH);
  1155. JugadorFavoritoPosicion(vListaJugadores,vElegidoJugadores,CantUsuarios,ARQUERO,1,arq);
  1156. JugadorFavoritoPosicion(vListaJugadores,vElegidoJugadores,CantUsuarios,DEFENSOR,1,def);
  1157. JugadorFavoritoPosicion(vListaJugadores,vElegidoJugadores,CantUsuarios,MEDIOCAMPISTA,1,med);
  1158. JugadorFavoritoPosicion(vListaJugadores,vElegidoJugadores,CantUsuarios,DELANTERO,1,del);
  1159. JugadorFavoritoPosicion(vListaJugadores,vElegidoJugadores,CantUsuarios,ARQUERO,arq+1,arq+1);
  1160. JugadorFavoritoPosicion(vListaJugadores,vElegidoJugadores,CantUsuarios,DEFENSOR,def+1,def+1);
  1161. JugadorFavoritoPosicion(vListaJugadores,vElegidoJugadores,CantUsuarios,MEDIOCAMPISTA,med+1,med+1);
  1162. JugadorFavoritoPosicion(vListaJugadores,vElegidoJugadores,CantUsuarios,DELANTERO,del+1,del+1);
  1163. writeln(SEPARADORH);
  1164. write('Volver al menu anterior?: ');
  1165. while tecla<>83 do
  1166. tecla:=ord(upcase(readkey));
  1167. end;
  1168.  
  1169. {Menu de Reportes. Ronnie del Pino}
  1170. procedure MenuCorrerReportes(var Usuarios:tRegistro;var TipoUsuario:byte);
  1171. var
  1172.     Opcion:byte;
  1173.     i:byte;
  1174. begin
  1175.  
  1176. ImprimirTitulo();
  1177.           writeln('1 - Tabla de posiciones');
  1178.           writeln('2 - Resultados por fecha');
  1179.           writeln('3 - Resultado de apuestas');
  1180.           writeln('4 - Mejores jugadores');
  1181.           writeln('5 - Mejores jugadores por puesto');
  1182.           writeln('6 - Equipo favorito');
  1183.           writeln('0 - Volver');
  1184.           write('Opcion: ');
  1185.           Opcion:=ValidarOpciones();
  1186. Case Opcion of
  1187.         1: ImprimirTabladePosiciones (vUsuarios, CantUsuarios, FechaActual);
  1188.         2: ResultadosdelaFecha (vPuntajeJugador, JUGADORES, FechaActual);
  1189.         3: MostrasResultadosdeApuestas(vListaApuestas, vUsuarios, CantUsuarios, FechaActual);
  1190.         4: ImprimirMejoresJugadores(vPuntajeTotalJugadores);
  1191.         5: ReportesMenuResultadosPorPuesto(Usuarios, TipoUsuario);
  1192.         6: EquipoFavorito(vListaJugadores, vElegidoJugadores, vTacticas, CantUsuarios);
  1193.         0:begin
  1194.             If TipoUsuario=0 then
  1195.                 MenuAdministrador(FechaActual, TipoUsuario)
  1196.             else
  1197.                 MenuUsuario(TipoUsuario);
  1198.             end;
  1199.          else
  1200.             MenuCorrerReportes(Usuarios, TipoUsuario);
  1201.      end;
  1202. end;
  1203.  
  1204. //Pide datos de premios para apuestas y los guarda
  1205. procedure ConfigurarApuestas(var Usuarios:tRegistro; var Premios:tPremios);
  1206. var
  1207.     j, Cant:byte;
  1208. begin
  1209. if FechaActual=0 then
  1210. begin
  1211. Cant:=3;
  1212. ImprimirTitulo();
  1213. writeln('Premios(',SIMBOLO_MONEDA, '):');
  1214. writeln;
  1215. write('Fecha Ganada: ');
  1216. Premios[1]:=ValidarNumerosCifras(Cant);writeln;
  1217. write('Campeon del  Torneo: ');
  1218. Premios[2]:=ValidarNumerosCifras(Cant);writeln;
  1219. write('Subcampeon del Torneo: ');
  1220. Premios[3]:=ValidarNumerosCifras(Cant);writeln;
  1221. write('Tercer Puesto: ');
  1222. Premios[4]:=ValidarNumerosCifras(Cant);writeln;
  1223. writeln;
  1224. writeln('La siguiente configuracion sera guardada:');
  1225. writeln('Ganador de La fecha: ',SIMBOLO_MONEDA ,Premios[1]);
  1226. writeln('Campeon: ', SIMBOLO_MONEDA,Premios[2]);
  1227. writeln('SubCampeon: ',SIMBOLO_MONEDA ,Premios[3]);
  1228. writeln('Tercer Puesto: ',SIMBOLO_MONEDA ,Premios[4]);
  1229. writeln;
  1230. writeln('Presione una tecla para continuar...');
  1231. readkey;
  1232. For j:=1 to MAX_USUARIOS do
  1233.         begin
  1234.         Usuarios[j].CantidadApuesta:=((FECHAS_TORNEO*Premios[1])+Premios[2]+Premios[3]+Premios[4])/(CantidadParticipantes(Usuarios));
  1235.         Usuarios[j].GananciaPorFechas:=0;
  1236.         Usuarios[j].GananciaPorTorneo:=0;
  1237.        
  1238.         end;
  1239.     MenuAdministrador(FechaActual, TipoUsuario);
  1240. end
  1241. else
  1242.     begin
  1243.     writeln;
  1244.     write('El Torneo ha empezado.No puede configurar apuestas!');
  1245.     delay(TIEMPO_SALIDA);
  1246.     MenuAdministrador(FechaActual, TipoUsuario);
  1247.     end;
  1248. end;
  1249.  
  1250. procedure IniciarTorneo(var TipoUsuario:byte);
  1251. begin
  1252. if FechaActual=0 then
  1253.     begin
  1254.     //PROCEDIMIENTO INICIAR TORNEO
  1255.     end
  1256. else
  1257.     begin
  1258.     write('Torneo en curso!');
  1259.     delay(TIEMPO_SALIDA);
  1260.     MenuAdministrador(FechaActual, TipoUsuario);
  1261.     end;
  1262. end;
  1263.  
  1264. {Aumenta la fecha actual. Emanuel Kotzayan}
  1265. procedure AumentarFecha (VAR FechaActual: byte);
  1266. begin
  1267. Inc(FechaActual);  
  1268. end;
  1269.  
  1270. {Calculo del puntaje de cada jugador en la fecha actual. Emanuel Kotzayan}
  1271. procedure CalcularPuntajeJugador (VAR vPuntajeJugador: tPuntajeJugador);
  1272. var
  1273.     I: integer;
  1274. begin
  1275.    for I:=1 to JUGADORES do
  1276.     begin  
  1277.         if (jugoPartido(I) = true) then
  1278.             vPuntajeJugador[I,FechaActual] := obtenerPuntajeJugador(I)
  1279.         else
  1280.             vPuntajeJugador[I,FechaActual] := 0;
  1281.     end;
  1282. end;
  1283.  
  1284. {Calculo del puntaje de cada equipo en la fecha actual. Emanuel Kotzayan}
  1285. procedure CalcularPuntajeEquipo (VAR vUsuarios: tUsuarios; VAR vPuntajeJugador: tPuntajeJugador);
  1286. var    
  1287.     I,J, Acumulador: integer;
  1288. begin
  1289. for I:=1 to MAX_USUARIOS do
  1290.     begin
  1291.         Acumulador := 0;
  1292.         for J:=1 to JUGADORESXEQUIPO  do
  1293.             begin
  1294.                 if (vUsuarios[I].Equipo.Jugador[J].Condicion = TITULAR) then
  1295.                 Acumulador := Acumulador + vPuntajeJugador[vUsuarios[I].Equipo.Jugador[J].ID, FechaActual];
  1296.             end;
  1297.     vUsuarios[I].Equipo.Puntaje[FechaActual] := Acumulador;
  1298.     end;
  1299. end;
  1300.  
  1301. {Ordena la Lista de vPuntajeTotalJugadores. Juan Manuel Castro Pippo}
  1302. procedure OrdenarPuntajeTotalJugadores(var vPuntajeTotalJugadores:tPuntajeTotalJugadores);
  1303. var
  1304.     aux : tPuntajeTotalJugador;
  1305.     i,j : integer;
  1306. begin
  1307. for i:=1 to JUGADORES-1 do
  1308.     for j:=i+1 to JUGADORES do
  1309.         if vPuntajeTotalJugadores[i].puntosacumulados<vPuntajeTotalJugadores[j].puntosacumulados then
  1310.         begin
  1311.             aux:=vPuntajeTotalJugadores[i];
  1312.             vPuntajeTotalJugadores[i]:=vPuntajeTotalJugadores[j];
  1313.             vPuntajeTotalJugadores[j]:=aux;
  1314.         end;
  1315. end;
  1316.  
  1317. {Suma las tacticas de cada equipo. Juan Manuel Castro Pippo}
  1318. procedure CargarTacticas (var vUsuarios:tUsuarios; var vTacticas:tTacticas; CantUsuarios:Byte);
  1319. var
  1320.     i:Byte;
  1321. begin
  1322. for i:=1 to CantUsuarios do
  1323.     inc(vTacticas[vUsuarios[i].Equipo.Tactica[FechaActual]].Cantidad);
  1324. for i:=1 to TACTICAS do
  1325.     writeln('ID ',vTacticas[i].ID,' ',vTacticas[i].Cantidad);
  1326. end;
  1327.  
  1328. {Ordena la Lista de Tacticas. Juan Manuel Castro Pippo}
  1329. procedure OrdenarTacticas(var vTacticas:tTacticas; var CantUsuarios:Byte);
  1330. var
  1331.     aux : tTactica;
  1332.     i,j : integer;
  1333. begin
  1334. for i:=1 to CantUsuarios-1 do
  1335.     for j:=i+1 to CantUsuarios do
  1336.         if vTacticas[i].Cantidad<vTacticas[j].Cantidad then
  1337.         begin
  1338.             aux:=vTacticas[i];
  1339.             vTacticas[i]:=vTacticas[j];
  1340.             vTacticas[j]:=aux;
  1341.         end;
  1342. end;
  1343.  
  1344. {Obtiene la cantidad de veces que fueron elegidos los jugadores. Emanuel Kotzayan}
  1345. Procedure ObtenerJugadoresElegidos(VAR vElegidoJugadores: tElegidoJugadores);
  1346. var I,J,K: Integer;
  1347. begin
  1348. for I := 1 to JUGADORES do
  1349.     begin
  1350.         vElegidoJugadores[I].ID := I;
  1351.         vElegidoJugadores[I].Valor := 0;
  1352.     end;
  1353. for J := 1 to MAX_USUARIOS do
  1354.     begin
  1355.         for K := 1 to JUGADORESXEQUIPO do
  1356.         inc(vElegidoJugadores[vUsuarios[J].Equipo.Jugador[K].ID].Valor);
  1357.     end;
  1358. end;
  1359.  
  1360. {Ordena la Lista de JugadoresElegidos. Juan Manuel Castro Pippo}
  1361. procedure OrdenarJugadoresElegidos(var vElegidoJugadores:tElegidoJugadores; CantUsuarios:Byte);
  1362. var
  1363.     aux : tElegidoJugador;
  1364.     i,j : integer;
  1365. begin
  1366. for i:=1 to JUGADORES-1 do
  1367.     for j:=i+1 to JUGADORES do
  1368.         if (vElegidoJugadores[i].Valor < vElegidoJugadores[j].Valor) then
  1369.         begin
  1370.             aux:=vElegidoJugadores[i];
  1371.             vElegidoJugadores[i]:=vElegidoJugadores[j];
  1372.             vElegidoJugadores[j]:=aux;
  1373.         end;
  1374. end;
  1375.  
  1376. {Corre los procedimientos que ocurren entre las fechas. Emanuel Kotzayan}
  1377. procedure PasarFecha (VAR vUsuarios: tUsuarios; VAR vPuntajeJugador: tPuntajeJugador; VAR FechaActual: byte);
  1378. begin
  1379. AumentarFecha (FechaActual);
  1380. CalcularPuntajeJugador (vPuntajeJugador);
  1381. CalcularPuntajeEquipo (vUsuarios, vPuntajeJugador);
  1382. OrdenarPuntajeTotalJugadores(vPuntajeTotalJugadores);
  1383. CargarTacticas(vUsuarios, vTacticas, CantUsuarios);
  1384. OrdenarTacticas(vTacticas,CantUsuarios);
  1385. ObtenerJugadoresElegidos(vElegidoJugadores);
  1386. OrdenarJugadoresElegidos(vElegidoJugadores, CantUsuarios);
  1387. end;
  1388.  
  1389. procedure CargarCalificaciones(var TipoUsuario:byte);
  1390. begin
  1391. if FechaActual>0 then
  1392.     PasarFecha (vUsuarios, vPuntajeJugador, FechaActual)
  1393. else
  1394.     begin
  1395.     writeln;
  1396.     write('Torneo no iniciado. No puede cargar calificaciones!');
  1397.     delay(TIEMPO_SALIDA);
  1398.     MenuAdministrador(FechaActual, TipoUsuario);
  1399.     end;
  1400. end;
  1401.  
  1402. //Muestra Listado de Opciones pasa usuarios comunes
  1403. procedure MenuUsuario(var TipoUsuario:byte);
  1404. var
  1405.     Opcion:byte;
  1406. begin
  1407. TipoUsuario:=1;                         {PANTALLA MENU USER}
  1408. ImprimirTitulo();
  1409. writeln('1 - Crear equipo');
  1410. writeln('2 - Realizar cambios');
  1411. writeln('3 - Correr reportes');
  1412. writeln('0 - Cerrar sesion');
  1413. write('Opcion: ');
  1414. Opcion:=ValidarOpciones();
  1415.       Case Opcion of
  1416.             1:CrearEquipo(TipoUsuario);
  1417.             2:RealizarCambios(TipoUsuario);
  1418.             3:begin
  1419.                 TipoUsuario:=1;
  1420.                 MenuCorrerReportes(Registro, TipoUsuario);
  1421.                 end;
  1422.             0:MenuIniciarSesion(Registro, TipoUsuario);
  1423.        else
  1424.                MenuUsuario(TipoUsuario);
  1425.          end
  1426. end;
  1427.  
  1428. //Muestra Menu de Opciones para el Administrador
  1429. procedure MenuAdministrador(var FechaActual:byte; var TipoUsuario:byte);
  1430. var
  1431.     Opcion:byte;
  1432. begin
  1433. TipoUsuario:=0;
  1434. ImprimirTitulo();
  1435. writeln('1 - Crear equipo');
  1436. writeln('2 - Realizar cambios');
  1437. writeln('3 - Correr reportes');
  1438. writeln('4 - Configurar apuestas');
  1439. writeln('5 - Iniciar torneo');
  1440. writeln('6 - Cargar Calificaciones');
  1441. writeln('0 - Cerrar sesion');
  1442. write('Opcion: ');
  1443. Opcion:=ValidarOpciones();
  1444. Case Opcion of
  1445.     1:CrearEquipo(TipoUsuario);
  1446.     2:RealizarCambios(TipoUsuario);
  1447.     3:MenuCorrerReportes(Registro, TipoUsuario);
  1448.     4:ConfigurarApuestas(Registro, Premios);
  1449.     5:IniciarTorneo(TipoUsuario);
  1450.     6:CargarCalificaciones(TipoUsuario);
  1451.     0:MenuIniciarSesion(Registro, TipoUsuario)
  1452.        
  1453. else
  1454.     MenuAdministrador(FechaActual, TipoUsuario);
  1455. end;
  1456. end;
  1457.  
  1458.  
  1459. //Pide y guarda datos de usuarios el el registro
  1460. procedure CargaUsuarios(var Usuarios:tRegistro; var TipoUsuario:byte; var UsuarioActual:string);
  1461. var
  1462.     Nombre, Apellido, Club, Usuario, Contrasena, pwConfirmacion:string;
  1463.     i:byte;
  1464. begin
  1465. if (FechaActual=0) and (CantidadParticipantes(Usuarios)<MAX_USUARIOS) then
  1466. begin
  1467. Contrasena:='';
  1468. Usuario:='';
  1469. i:=Posicion(Usuarios);
  1470. ImprimirTitulo();
  1471. OrdenarVector(Usuarios, 'Des');
  1472. write('Nombre: ');
  1473. readln(Nombre);
  1474. if Nombre='' then
  1475.     begin
  1476.     writeln('Campo Obligatorio. Reingrese.');
  1477.     delay(TIEMPO_SALIDA);
  1478.     CargaUsuarios(Usuarios, TipoUsuario, UsuarioActual);
  1479.     end
  1480. else
  1481.     begin
  1482.     write('Apellido: ');readln(Apellido);
  1483.     write('Club: ');readln(club);
  1484.     write('Usuario: ');readln(Usuario);
  1485.     if (UsuarioDuplicado(Usuario, Usuarios)) then
  1486.         begin
  1487.         writeln('Campo Obligatorio o usuario existente!');
  1488.         delay(TIEMPO_SALIDA);
  1489.         CargaUsuarios(Usuarios, TipoUsuario, UsuarioActual);
  1490.         end
  1491.     else
  1492.         begin
  1493.         write('Contrasena: ');
  1494.         Contrasena:=OcultarContrasena();
  1495.         writeln;
  1496.         write('Reingrese contrasena: ');
  1497.         pwConfirmacion:=OcultarContrasena();
  1498.         if (Contrasena<>pwConfirmacion) or (Contrasena='') then
  1499.             begin
  1500.             writeln;
  1501.             writeln('Contrasena incorrecta. Reingrese.');
  1502.             delay(TIEMPO_SALIDA);
  1503.             CargaUsuarios(Usuarios, TipoUsuario, UsuarioActual);
  1504.             end
  1505.         else
  1506.             begin
  1507.             if TipoUsuario=0 then
  1508.                 begin
  1509.                 //Modificar y enviar usuario Actual:
  1510.                 Usuarios[i].Nombre:=Nombre;
  1511.                 Usuarios[i].Apellido:=Apellido;
  1512.                 Usuarios[i].Club:=Club;
  1513.                 Usuarios[i].Usuario:=Usuario;
  1514.                 Usuarios[i].Contrasena:=Contrasena;
  1515.                 Usuarios[i].ID:=i;
  1516.                 Usuarios[i].TipoUsuario:=TipoUsuario;
  1517.                 TipoUsuario:=1;
  1518.                 MenuAdministrador(FechaActual, TipoUsuario);
  1519.                 end
  1520.             else
  1521.                 begin
  1522.                 //Modificar y enviar usuario Actual:
  1523.                 Usuarios[i].Nombre:=Nombre;
  1524.                 Usuarios[i].Apellido:=Apellido;
  1525.                 Usuarios[i].Club:=Club;
  1526.                 Usuarios[i].Usuario:=Usuario;
  1527.                 Usuarios[i].Contrasena:=Contrasena;
  1528.                 Usuarios[i].ID:=i;
  1529.                 Usuarios[i].TipoUsuario:=TipoUsuario;
  1530.                 MenuUsuario(TipoUsuario);
  1531.                 end;
  1532.             end;
  1533.         end;
  1534.     end;
  1535. end
  1536. else
  1537.     begin
  1538.     writeln;
  1539.     writeln('No puede crear usuarios:');
  1540.     writeln('- Se a alcanzado el maximo (',MAX_USUARIOS,') de usuarios registrados!');
  1541.     write('- El Torneo a Iniciado!');
  1542.     delay(TIEMPO_SALIDA);
  1543.     MenuIniciarSesion(Usuarios, TipoUsuario);
  1544.     end;
  1545. end;
  1546.  
  1547. Procedure PedidoAndres(var Usuarios:tRegistro; TipoUsuario:byte);
  1548. begin
  1549. Usuarios[1].TipoUsuario:=1;
  1550. Usuarios[1].ID:=Posicion(Usuarios);
  1551. Usuarios[1].Nombre:='Raul';
  1552. Usuarios[1].Apellido:='Garcia';
  1553. Usuarios[1].Club:='River Plate';
  1554. Usuarios[1].Usuario:='raul';
  1555. Usuarios[1].Contrasena:='raul';
  1556.  
  1557. Usuarios[2].TipoUsuario:=1;
  1558. Usuarios[2].ID:=Posicion(Usuarios);
  1559. Usuarios[2].Nombre:='Carlos';
  1560. Usuarios[2].Apellido:='Totti';
  1561. Usuarios[2].Club:='Boca Juniors';
  1562. Usuarios[2].Usuario:='carlos';
  1563. Usuarios[2].Contrasena:='carlos';
  1564.  
  1565. Usuarios[3].TipoUsuario:=1;
  1566. Usuarios[3].ID:=Posicion(Usuarios);
  1567. Usuarios[3].Nombre:='Anibal';
  1568. Usuarios[3].Apellido:='Ibarra';
  1569. Usuarios[3].Club:='Racing Club';
  1570. Usuarios[3].Usuario:='anibal';
  1571. Usuarios[3].Contrasena:='anibal';
  1572.  
  1573. Usuarios[4].TipoUsuario:=1;
  1574. Usuarios[4].ID:=Posicion(Usuarios);
  1575. Usuarios[4].Nombre:='Francisco';
  1576. Usuarios[4].Apellido:='Pasman';
  1577. Usuarios[4].Club:='Sacachispas';
  1578. Usuarios[4].Usuario:='francisco';
  1579. Usuarios[4].Contrasena:='francisco';
  1580. end;
  1581. //Muestra las Primeras 2 Opciones y Inicializa valor de ser necesario.
  1582. procedure MenuPantallaInicial(var TipoUsuario:byte);
  1583. var
  1584.    Opcion,i:byte;
  1585. begin
  1586. TipoUsuario:=0;
  1587. PedidoAndres(Registro, TipoUsuario);
  1588. For i:=1 to MAX_USUARIOS do
  1589.     Registro[i].TipoUsuario:=1;
  1590. ImprimirTitulo();
  1591. writeln('1 - Crear Administrador');
  1592. writeln('0 - Salir del Programa');
  1593. write('Opcion: ');
  1594. Opcion:=ValidarOpciones();
  1595. Case Opcion of
  1596.     1:CargaUsuarios(Registro, TipoUsuario, UsuarioActual);
  1597.     0:begin
  1598.       writeln;
  1599.       writeln('Fin del programa...');
  1600.       end
  1601. else
  1602.     MenuPantallaInicial(TipoUsuario);
  1603. end;
  1604. end;
  1605. {Copia la lista de jugadores de la unit a un vector. Juan Manuel Castro Pippo}
  1606. procedure GenerarListaJugadores(var vListaJugadores:tListaJugadores);
  1607. var
  1608.     jugador:tJugador;
  1609.     i:integer;
  1610. begin
  1611. for i:=1 to JUGADORES do
  1612.     begin
  1613.         obtenerJugador(i, jugador);
  1614.         vListaJugadores[i]:=jugador;
  1615.     end;
  1616. end;
  1617.      
  1618. {Intercambia 2 Jugadores de lugar de la ListaJugadores. Juan Manuel Castro Pippo}
  1619. procedure IntercambiarJugadores(var vListaJugadores:tListaJugadores; k:Integer; l:Integer);
  1620. var
  1621.     aux : tJugador;
  1622. begin
  1623.     aux := vListaJugadores[k];
  1624.     vListaJugadores[k] := vListaJugadores[l];
  1625.     vListaJugadores[l] := aux;
  1626. end;
  1627.  
  1628. {**************************************************************************************************************}
  1629.  
  1630. begin
  1631. FechaActual := 0;
  1632. GenerarListaJugadores (vListaJugadores);
  1633. MenuPantallaInicial(TipoUsuario);
  1634. end.
  1635.  
  1636. {**************************************************************************************************************}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement