Curso 2014/2015 Mayo de 2015 1 Curso 2014/2015 Mayo de 2015 2

Anuncio
 {-----------------------------------------------------------------------------Programa: Mayo-2015
-------------------------------------------------------------------------------}
PROGRAM ConcursoCocineros ;
USES
Crt, SysUtils ;
TYPE
tsCadCortas = STRING [9] ;
tsCadLargas = STRING [25] ;
PROCEDURE MostrarInscritos (sNomFich: tsCadLargas);
VAR
fbrgFich
: tfbrgFichInscritos;
rgUnCocinero : trgCocinero ;
BEGIN
Assign (fbrgFich, sNomFich) ;
Reset (fbrgFich) ;
trgCocinero = RECORD
iInscripcion
sNombre, sApellidos
iEdad
sTelefono
rCalificacion
END ;
tfbrgFichInscritos = FILE OF
:
:
:
:
:
WHILE NOT EOF (fbrgFich) DO
BEGIN
Read (fbrgFich, rgUnCocinero) ;
MostrarCocinero (rgUnCocinero) ;
Writeln ;
END ;
Close (fbrgFich) ;
END ;
Integer ;
tsCadLargas ;
Integer ;
tsCadCortas ;
Real ;
PROCEDURE EdadMenorMediaMayor (sNomFich: tsCadLargas ;
VAR iMenor : Integer ;
VAR rMedia : Real ;
VAR iMayor : Integer) ;
VAR
fbrgFich
: tfbrgFichInscritos;
rgUnCocinero : trgCocinero ;
rSuma
: Real ;
BEGIN
iMenor := MAXiNT ;
iMayor := - 1 ;
rSuma := 0 ;
trgCocinero ;
tarPuntuacionJuez = ARRAY [1..9] OF Real ;
trgEvaluacion = RECORD
iCod_Juez, iInscripcion : Integer ;
arPuntuaciones
: tarPuntuacionJuez ;
END ;
tfbrgFichEvaluacionesTotales = FILE OF trgEvaluacion ;
Assign (fbrgFich, sNomFich) ;
Reset (fbrgFich) ;
FUNCTION fncLeerOpcion : Char ;
VAR
cOpcion : Char ;
BEGIN
Writeln ('1.
Mostrar el contenido de fichero de inscripcione') ;
Mostrar las edades Mayor, Menor y Media de los participantes') ;
Writeln ('2.
Writeln ('3.
Calcular la Puntuación obtenida por todos los participantes') ;
WriteLn ('4.
Mostrar los ganadores del concurso') ;
Writeln ('0.
Finalizar') ;
REPEAT
cOpcion := ReadKey ;
UNTIL ('0' <= cOpcion) AND (cOpcion <= '4') ;
Writeln (cOpcion) ;
WHILE NOT EOF (fbrgFich) DO
BEGIN
Read (fbrgFich, rgUnCocinero) ;
WITH rgUnCocinero DO
BEGIN
IF iEdad < iMenor THEN
iMenor := iEdad ;
IF iEdad > iMayor THEN
iMayor := iEdad ;
rSuma := rSuma + iEdad ;
END ;
END ;
fncLeerOpcion := cOpcion ;
END ;
rMedia := rSuma / FileSize (fbrgFich) ;
PROCEDURE MostrarCocinero (CONST rgUnCocinero : trgCocinero) ;
BEGIN
WITH rgUnCocinero DO
BEGIN
Writeln ('Cod. Inscripcion: ', iInscripcion) ;
Writeln ('Apels,
Nombre: ', sApellidos, ', ', sNombre) ;
Writeln ('
Edad: ', iEdad) ;
Writeln ('
Telefono: ', sTelefono) ;
Writeln ('
Puntuacion: ', rCalificacion) ;
END ;
END ;
Close (fbrgFich) ;
END ;
FUNCTION fnrPuntosCocineroJuez (CONST arEvaluacionJuez: tarPuntuacionJuez) : Real;
VAR
i : Integer ;
rSumaPuntos : Real ;
BEGIN
rSumaPuntos := 0 ;
FOR i := 1 TO 9 DO
rSumaPuntos := rSumaPuntos + arEvaluacionJuez[i] ;
fnrPuntosCocineroJuez :=
END ;
Curso 2014/2015
Mayo de 2015
1
Curso 2014/2015
rSumaPuntos / 9 ; { Para obtener la media 0 a 10}
Mayo de 2015
2
BEGIN
Assign (fbrgFich, sNomFichEvaluaciones) ;
Reset (fbrgFich) ;
FUNCTION fnrPuntosTotalesCocinero (iInscripcionBuscada : Integer;
sNomFichEvaluaciones: tsCadLargas) : Real ;
VAR
rPuntos
: Real ;
fbrgFich
: tfbrgFichEvaluacionesTotales;
rgEvalJuez : trgEvaluacion ;
iNumJueces : Integer ;
BEGIN
Assign (fbrgFich, sNomFichEvaluaciones) ;
Reset (fbrgFich) ;
rPuntosMaximos := - 1 ;
WHILE NOT EOF (fbrgFich) DO
BEGIN
Read (fbrgFich, rgUnCocinero) ;
WITH rgUnCocinero DO
BEGIN
IF (rInf <= iEdad) AND (iEdad < rSup) THEN
IF rPuntosMaximos < rCalificacion THEN
BEGIN
rPuntosMaximos := rCalificacion ;
rgMejorCocinero := rgUnCocinero
END ;
END ;
END ;
iNumJueces := 0 ;
rPuntos
:= 0 ;
WHILE NOT EOF (fbrgFich) DO
BEGIN
Read (fbrgFich, rgEvalJuez) ;
IF rgEvalJuez.iInscripcion = iInscripcionBuscada THEN
BEGIN
iNumJueces := iNumJueces + 1 ; ;
rPuntos := rPuntos + fnrPuntosCocineroJuez (rgEvalJuez.arPuntuaciones);
END ;
END ;
Close (fbrgFich) ;
fnrPuntosTotalesCocinero :=
END ;
{ rInf ≤ iEdad < rSup }
Close (fbrgFich) ;
END ;
VAR {------------------ Variables del Programa Principal -------------}
sNonFichInscritos,
sNomFichEvaluaciones : tsCadLargas ;
boExistenFicheros
: Boolean ;
cOpcion, cEspera
: Char ;
iMenor, iMayor
: Integer ;
rMedia
: Real ;
rgMejorCocinero
: trgCocinero ;
rPuntos / iNumJueces ;
PROCEDURE PuntuarTodosCocineros (sNonFichInscritos,
sNomFichEvaluaciones : tsCadLargas) ;
VAR
fbrgFich
: tfbrgFichInscritos;
rgUnCocinero : trgCocinero ;
rPuntos
: Real ;
BEGIN
Assign (fbrgFich, sNonFichInscritos) ;
Reset (fbrgFich) ;
BEGIN {----------------- Programa Principal -----------------------}
Write ('Escribe el nombre del fichero de Inscritos: ') ;
ReadLn (sNonFichInscritos) ;
Write ('.....nombre del fichero de la evaluaciones: ') ;
ReadLn (sNomFichEvaluaciones) ;
WHILE NOT EOF (fbrgFich) DO
BEGIN
Read (fbrgFich, rgUnCocinero) ;
boExistenFicheros := TRUE ;
IF NOT FileExists (sNonFichInscritos) THEN
BEGIN
Writeln ('ERROR: no existe el fichero ', sNonFichInscritos) ;
boExistenFicheros := FALSE ;
END ;
rPuntos := fnrPuntosTotalesCocinero (rgUnCocinero.iInscripcion,
sNomFichEvaluaciones) ;
rgUnCocinero.rCalificacion := rPuntos ;
IF
Seek (fbrgFich, FilePos (fbrgFich)
- 1);
Write (fbrgFich, rgUnCocinero) ;
END ;
Close (fbrgFich) ;
END ;
IF
PROCEDURE MejorPuntuacionRango (sNomFichEvaluaciones : tsCadLargas;
rInf, rSup : Real;
VAR rgMejorCocinero :trgCocinero) ;
VAR
fbrgFich
: tfbrgFichInscritos;
rgUnCocinero
: trgCocinero ;
rPuntosMaximos : Real ;
Curso 2014/2015
Mayo de 2015
3
NOT FileExists (sNomFichEvaluaciones) THEN
BEGIN
Writeln ('ERROR: no existe el fichero ', sNomFichEvaluaciones) ;
boExistenFicheros := FALSE ;
END ;
boExistenFicheros THEN
REPEAT
cOpcion := fncLeerOpcion ;
CASE cOpcion OF
'1' : BEGIN
Writeln ('Listado de información de cocineros inscritos') ;
MostrarInscritos (sNonFichInscritos) ;
END ;
Curso 2014/2015
Mayo de 2015
4
'2' : BEGIN
EdadMenorMediaMayor (sNonFichInscritos,
iMenor, rMedia, iMayor);
Writeln ('Edad menor: ', iMenor) ;
Writeln ('
media: ', rMedia:0:2) ;
Writeln (' superior: ', iMayor) ;
END ;
'3' : PuntuarTodosCocineros (sNonFichInscritos,
sNomFichEvaluaciones) ;
'4' : BEGIN
EdadMenorMediaMayor (sNonFichInscritos,
iMenor, rMedia, iMayor) ;
MejorPuntuacionRango (sNomFichEvaluaciones,
iMenor, rMedia, rgMejorCocinero) ;
{=======================================================================}
{
Mostrar los ganadores, de otra forma
}
{=======================================================================}
VAR {------------------ Variables del Programa Principal -------------}
...
rgMejorCocineroJoven
: trgCocinero ;
rgMejorCocinerVeterano : trgCocinero ;
BEGIN {----------------- Programa Principal -----------------------}
...
WriteLn ('Cocinero ganador de entre los jóvenes',
' (entre ', iMenor, ' y ', rMedia:0:1 , ' )') ;
MostrarCocinero (rgMejorCocinero) ;
Writeln ;
'4' : BEGIN
EdadMenorMediaMayor (sNonFichInscritos,
iMenor, rMedia, iMayor) ;
MejorPuntuacionRango (sNomFichEvaluaciones,
iMenor, rMedia, rgMejorJoven) ;
{ Se pone iMayor + 1 para que tenga en cuenta también el valor iMayor }
{ pues el rango que va a tener en cuenta en el procedure es: rInf ≤ iEdad < rSup }
WriteLn ('Cocinero ganador de entre los jóvenes',
' (entre ', iMenor, ' y ', rMedia:0:1 , ' )') ;
MostrarCocinero (rgMejorJoven) ;
Writeln ;
MejorPuntuacionRango (sNomFichEvaluaciones,
rMedia, iMayor + 1, rgMejorCocinero) ;
WriteLn ('Cocinero ganador de entre los veteranos',
' (entre ', rMedia:0:1, ' y ', iMayor + 1, ' )') ;
MostrarCocinero (rgMejorCocinero) ;
{ Se poner iMayor + 1 para que tenga en cuenta también el valor iMayor }
{ pues el rango que va a tener en cuenta en el procedure es: rInf ≤ iEdad < rSup }
MejorPuntuacionRango (sNomFichEvaluaciones,
rMedia, iMayor + 1, rgMejorVeterano) ;
{ Se pone iMayor + 1 para que tenga en cuenta también el valor iMayor }
MejorPuntuacionRango (sNomFichEvaluaciones,
iMenor, iMayor + 1, rgMejorCocinero) ;
WriteLn ('Cocinero ganador de entre los veteranos',
' (entre ', rMedia:0:1, ' y ', iMayor, ' )') ;
MostrarCocinero (rgMejorVeterano) ;
WriteLn ('Cocinero ganador absoluto del concurso') ;
MostrarCocinero (rgMejorCocinero) ;
END ;
WriteLn ('Cocinero ganador absoluto del concurso') ;
IF rMejorJoven.rCalificacion > rMejorVeterano.rCalificacion
THEN
MostrarCocinero (rgMejorJoven) ;
ELSE
MostrarCocinero (rgMejorVeterano) ;
END ;
END ;
IF cOpcion <> '0' THEN
cEspera := ReadKey ;
UNTIL cOpcion = '0' ;
Writeln ;
Write ('Pulsa una tecla para finalizar') ;
cEspera := ReadKey ;
END .
Curso 2014/2015
Mayo de 2015
5
Curso 2014/2015
Mayo de 2015
6
Descargar