Advertisement
Guest User

Untitled

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