Recent Changes

Tuesday, May 16

  1. file 2016-Junio-Programa-Solución-2P.pdf (deleted) uploaded Deleted File
    7:40 am
  2. file 2016-Junio-Programa-Solución-2P.pdf (deleted) uploaded
    7:38 am
  3. file 2016-Junio-Programa-Solución-2P.pdf (deleted) uploaded
    7:37 am

Monday, April 24

  1. page Teoria_2017 edited ... Gestión de una lista de vuelos: crear sin repetición, modificar, borrar, mostrar: Gestión de …
    ...
    Gestión de una lista de vuelos: crear sin repetición, modificar, borrar, mostrar: Gestión de lista de vuelos
    Ficheros
    ...
    del fichero: Mostrar informacion seleccionada de un fichero
    Ejercicio de
    ...
    en otro: Poblacion bilbaina
    Ejercicio de
    ...
    página 109): P109_E5-Ejercicio poblacion bilbaina modificado
    Exámenes Finales de años anteriores: Exámenes anteriores
    Hardware - CPU
    (view changes)
    5:04 am
  2. page P109_E5-Ejercicio poblacion bilbaina modificado edited Ejercicio de la población bilbaina modificado Ejercicio basado en el siguiente menú de opciones…

    Ejercicio de la población bilbaina modificado
    Ejercicio basado en el siguiente menú de opciones:
    1 Añadir nueva persona al censo
    2 Mostrar todo el censo
    3 Crear fichero con mayores de cierta edad
    0 Terminar
    1. Añadir un nuevo registro con la siguiente información:
    Nombre, Primer apellido, Segundo apellido, Año de nacimiento y Dirección.
    2. Mostrar todo el contenido del fichero:
    Leer nombre del fichero y
    mostrar todo su contenido
    3. Crear fichero con mayores de una determinada edad
    Leer año actual
    Leer edad limite
    Volcar a array los mayores de esa edad
    Mostrar array (para comprobarlo)
    Volcar el array al fichero por orden de edad
    PROGRAM P109_E_5 ;
    USES
    Crt, SysUtils ;
    CONST
    MAX_LONG = 400 ;
    TYPE
    tsCadenas = STRING [40] ;
    trgPersonas = RECORD
    sNombre, sApellido1,
    sApellido2, sDomicilio : tsCadenas ;
    iAnyoNacim : Integer
    END ;
    tfbrgFicherosCenso = FILE OF trgPersonas ;
    targListaPersonas = ARRAY [1..MAX_LONG] OF trgPersonas ;
    FUNCTION fncLeerOpcion : Char ;
    VAR
    cOpcion : Char ;
    BEGIN
    ClrScr ;
    WriteLn ('********* MENU DE OPCIONES *********') ;
    WriteLn ('1.- Añadir nueva persona al censo') ;
    WriteLn ('2.- Mostra fichero') ;
    WriteLn ('3.- Crear fichero con mayores de cierta edad') ;
    WriteLn ('0.- Terminar') ;
    WriteLn ;
    Write (' Pulsa la tecla de la opción: ') ;
    REPEAT
    cOpcion := ReadKey
    UNTIL ('0' <= cOpcion) AND (cOpcion <= '3') ;
    WriteLn (cOpcion) ;
    fncLeerOpcion := cOpcion
    END ;
    PROCEDURE LeerPersona (VAR rgPersona : trgPersonas) ;
    BEGIN
    WITH rgPersona DO
    BEGIN
    Writeln ;
    Write (' Nombre: ') ;
    ReadLn (sNombre) ;
    Write (' Primer apellido: ') ;
    ReadLn (sApellido1) ;
    Write ('Segundo apellido: ') ;
    ReadLn (sApellido2) ;
    Write (' Direccion: ') ;
    ReadLn (sDomicilio) ;
    Write ('Año de nacimiento: ') ;
    Readln (iAnyoNacim) ;
    END ;
    END ;
    PROCEDURE MostrarPersona (CONST rgPersona : trgPersonas) ;
    BEGIN
    WITH rgPersona DO
    BEGIN
    WriteLn (' Nombre: ',
    sApellido1, ' ', sApellido2, ', ', sNombre) ;
    WriteLn (' Dirección: ', sDomicilio) ;
    WriteLn ('Año de nacimiento: ', iAnyoNacim) ;
    END ;
    END ;
    PROCEDURE CrearFichero (sNomFich : tsCadenas) ;
    VAR
    fbrgFich : tfbrgFicherosCenso ;
    BEGIN
    Assign (fbrgFich, sNomFich) ;
    ReWrite (fbrgFich) ;
    Close (fbrgFich) ;
    END ;
    PROCEDURE AnyadirUnaPersona (CONST rgPersona : trgPersonas ;
    sNomFich : tsCadenas);
    VAR
    fbrgFich : tfbrgFicherosCenso ;
    rgPersonaNueva : trgPersonas ;
    BEGIN
    Assign (fbrgFich, sNomFich) ;
    Reset (fbrgFich) ;
    Seek (fbrgFich, FileSize (fbrgFich)) ;
    rgPersonaNueva := rgPersona ;
    Write (fbrgFich, rgPersonaNueva) ;
    Close (fbrgFich)
    END ;
    PROCEDURE MostrarFichero (sNomFich : tsCadenas) ;
    VAR
    fbrgFich : tfbrgFicherosCenso ;
    rgPersona : trgPersonas ;
    cEspera : Char ;
    BEGIN
    Assign (fbrgFich, sNomFich) ;
    Reset (fbrgFich) ;
    WHILE NOT Eof (fbrgFich) DO
    BEGIN
    Read (fbrgFich, rgPersona) ;
    MostrarPersona (rgPersona) ;
    Writeln ;
    cEspera := Readkey
    END ;
    Close (fbrgFich) ;
    END ;
    PROCEDURE CrearListaMayores (sNomFichCenso : tsCadenas ;
    VAR argListaMayores: targListaPersonas ;
    VAR iLongLista : Integer ;
    iEdadLimite, iAnyoActual : Integer) ;
    VAR
    fbrgFichCenso : tfbrgFicherosCenso ;
    rgPersona : trgPersonas ;
    BEGIN
    Assign (fbrgFichCenso, sNomFichCenso) ;
    Reset (fbrgFichCenso) ;
    iLongLista := 0 ;
    WHILE NOT Eof (fbrgFichCenso) DO
    BEGIN
    Read (fbrgFichCenso, rgPersona) ;
    IF (iAnyoActual - rgPersona.iAnyoNacim) > iEdadLimite THEN
    IF iLongLista < MAX_LONG THEN
    BEGIN
    iLongLista := iLongLista + 1 ;
    argListaMayores [iLongLista] := rgPersona ;
    END ;
    END ;
    Close (fbrgFichCenso) ;
    END ;
    PROCEDURE MostrarLista (CONST argLista: targListaPersonas ;
    iLong: Integer) ;
    VAR
    i : Integer ;
    cEspera : Char ;
    BEGIN
    FOR i := 1 TO iLong DO
    BEGIN
    MostrarPersona (argLista [i] ) ;
    Writeln ;
    cEspera := Readkey
    END ;
    END ;
    FUNCTION fniBuscarPosMayorEdad (CONST argListaMayores: targListaPersonas ;
    iLongLista : Integer)
    : Integer ;
    VAR
    iMenorAnyoNacim, { es el de menor año de nacimiento }
    i, iPosic : Integer ;
    BEGIN
    iMenorAnyoNacim := argListaMayores[1].iAnyoNacim ;
    iPosic := 1 ;
    FOR i := 2 TO iLongLista DO
    IF argListaMayores[1].iAnyoNacim < iMenorAnyoNacim THEN
    BEGIN
    iMenorAnyoNacim := argListaMayores[i].iAnyoNacim ;
    iPosic := i ;
    END ;
    fniBuscarPosMayorEdad := iPosic ;
    END ;
    PROCEDURE BorrarPersonaLista (VAR argLista: targListaPersonas ;
    VAR iLong: Integer;
    iPosic: Integer) ;
    VAR
    i : Integer ;
    BEGIN
    FOR i := iPosic + 1 TO iLong DO
    argLista [i-1] := argLista [i] ;
    iLong := iLong - 1 ;
    END ;
    PROCEDURE VolcarListaFicheroEnOrden (VAR argListaMayores: targListaPersonas ;
    iLongLista: Integer ;
    sNomFichMayores: tsCadenas) ;
    VAR
    iPosic : Integer ;
    BEGIN
    CrearFichero (sNomFichMayores) ;
    WHILE iLongLista > 0 DO
    BEGIN
    iPosic := fniBuscarPosMayorEdad (argListaMayores, iLongLista) ;
    AnyadirUnaPersona (argListaMayores[iPosic], sNomFichMayores) ;
    BorrarPersonaLista (argListaMayores, iLongLista, iPosic) ;
    END ;
    END ;
    VAR {------------------------ Variables del programa principal -----------------------------}
    sNomFichCenso, sNomFichMayores, sNomFich : tsCadenas;
    cOpcion, cEspera : Char ;
    rgPersona : trgPersonas ;
    iAnyoActual, iEdadLimite : Integer ;
    argListaMayores : targListaPersonas ;
    iLongLista : Integer ;
    BEGIN {------------------------------- programa principal -------------------------------------}
    Writeln ;
    Write ('Nombre del fichero del censo: ') ;
    Readln (sNomFichCenso) ;
    IF NOT FileExists (sNomFichCenso) THEN
    WriteLN ('ERROR: No existe el archivo de censo "', sNomFichCenso, '"')
    ELSE
    REPEAT
    cOpcion := fncLeerOpcion ;
    CASE cOpcion OF
    '1' : BEGIN
    Writeln ('Escribe los datos de la nueva persona: ') ;
    LeerPersona (rgPersona) ;
    AnyadirUnaPersona (rgPersona, sNomFichCenso) ;
    END ;
    '2' : BEGIN
    Writeln ;
    Write ('Nombre del fichero a mostrar: ') ;
    Readln (sNomFich) ;
    Writeln ;
    IF NOT FileExists (sNomFich) THEN
    WriteLN ('ERROR: No existe el archivo "',
    sNomFich, '"')
    ELSE
    BEGIN
    Writeln ('Contenido del fichero: ', sNomFich) ;
    MostrarFichero (sNomFich) ;
    Writeln ('===================================') ;
    END ;
    END ;
    '3' :BEGIN
    Writeln ;
    Write (' Año actual : ') ;
    Readln (iAnyoActual) ;
    Write ('Limite de edad : ') ;
    Readln (iEdadLimite) ;
    Writeln ;
    Write ('Nombre del fichero de mayores de ', iEdadLimite, ': ') ;
    Readln (sNomFichMayores) ;
    iLongLista := 0 ;
    CrearListaMayores (sNomFichCenso, argListaMayores, iLongLista,
    iEdadLimite, iAnyoActual) ;
    Writeln ;
    Writeln ('Lista de mayores de ', iEdadLimite, ': ') ;
    MostrarLista (argListaMayores, iLongLista) ;
    Writeln ('===================================') ;
    VolcarListaFicheroEnOrden (argListaMayores, iLongLista,
    sNomFichMayores) ;
    END ;
    END ; { Case }
    IF cOPcion <> '0' THEN
    cEspera := ReadKey ;
    UNTIL cOPcion = '0' ;
    WriteLn ;
    WriteLn ('====================================================') ;
    WriteLn (' Pulsa RETURN para terminar') ;
    Write ('___________________________________________________') ;
    ReadLn ;
    END. { FIN del PROGRAMA }

    (view changes)
    5:04 am
  3. page Poblacion bilbaina edited Ejercicio de la población bilbaina Dado un fichero conteniendo el censo de la población de Bilb…

    Ejercicio de la población bilbaina
    Dado un fichero conteniendo el censo de la población de Bilbao, se pide escribir
    un programa que cree un fichero que contenga la información referente a las
    personas con más de 60 años, o que los cumplan dentro del año actual,
    (dicha información no deberá borrarse del fichero original).
    El programa, finalmente, deberá calcular el porcentaje que suponen estas personas
    respecto del total del censo.
    Por cada persona censada los datos almacenados son:
    -Nombre
    -Primer apellido
    -Segundo apelldio
    -Domicilio
    -Año de nacimiento
    PROGRAM Poblacion_Bilbao ;
    USES
    Crt, SysUtils ;
    CONST
    iLIMITE = 60 ;
    TYPE
    tsCadenas = STRING [40] ;
    trgPersonas = RECORD
    sNombre, sApellido1,
    sApellido2, sDomicilio : tsCadenas ;
    iAnyoNacim : Integer
    END ;
    tfbrgFicherosCenso = FILE OF trgPersonas ;
    PROCEDURE CrearFicheroMayores (sNomFichCenso,
    sNomFichMayores : tsCadenas ;
    iAnyoActual : Integer) ;
    VAR
    fbrgFichCenso, fbrgFichMayores : tfbrgFicherosCenso ;
    rgPersona : trgPersonas ;
    BEGIN
    Assign (fbrgFichCenso, sNomFichCenso) ;
    Reset (fbrgFichCenso) ;
    Assign (fbrgFichMayores, sNomFichMayores) ;
    Rewrite (fbrgFichMayores) ;
    WHILE NOT Eof (fbrgFichCenso) DO
    BEGIN
    Read (fbrgFichCenso, rgPersona) ;
    IF (iAnyoActual - rgPersona.iAnyoNacim) > iLIMITE
    THEN Write (fbrgFichMayores, rgPersona)
    END ;
    Close (fbrgFichCenso) ;
    Close (fbrgFichMayores)
    END ;
    FUNCTION fnrPorcentaje (sNomFichMayores,
    sNomFichCenso : tsCadenas) : Real ;
    VAR
    fbrgFichMayores, fbrgFichCenso : tfbrgFicherosCenso ;
    BEGIN
    Assign (fbrgFichCenso, sNomFichCenso) ;
    Reset (fbrgFichCenso) ;
    Assign (fbrgFichMayores, sNomFichMayores) ;
    Reset (fbrgFichMayores) ;
    fnrPorcentaje := (Filesize (fbrgFichMayores) /
    Filesize (fbrgFichCenso) ) * 100 ;
    Close (fbrgFichCenso) ;
    Close (fbrgFichMayores)
    END ;
    VAR {------------------------ Variables del programa principal -----------------------------}
    sNomFichCenso, sNomFichMayores : tsCadenas;
    iAnyoActual : Integer ;
    BEGIN {------------------------------- programa principal -------------------------------------}
    Writeln ;
    Write ('Nombre del fichero del censo: ') ;
    Readln (sNomFichCenso) ;
    IF NOT FileExists (sNomFichCenso) THEN
    WriteLN ('ERROR: No existe el archivo de censo "',
    sNomFichCenso, '"')
    ELSE
    BEGIN
    Write ('Nombre del fichero de mayores de 60 años') ;
    Readln (sNomFichMayores) ;
    Write ('Año actual : ') ;
    Readln (iAnyoActual) ;
    CrearFicheroMayores (sNomFichCenso, sNomFichMayores,
    iAnyoActual) ;
    Writeln ('Mayores de ', iLIMITE, ' años: ',
    fnrPorcentaje (sNomFichMayores,
    sNomFichCenso):0:2, '%') ;
    END ;
    WriteLn ;
    WriteLn ('====================================================') ;
    WriteLn (' Pulsa RETURN para terminar') ;
    Write ('___________________________________________________') ;
    ReadLn ;
    END. { FIN del PROGRAMA }

    (view changes)
    5:03 am
  4. page Mostrar informacion seleccionada de un fichero edited Mostrar información seleccionada de un fichero Se dispone de un fichero de créditos con la sigu…

    Mostrar información seleccionada de un fichero
    Se dispone de un fichero de créditos con la siguiente información de cada crédito:
    Nombre : Cadena de caracteres (máximo 40)
    Numero de Cuenta : Cadena de caracteres (máximo 40)
    Cantidad : De tipo real
    El programa debe leer el nombre del fichero (y permitir añadir más información en él).
    Seguidamente pregunta por un valor límite para la cantidad de un credito y muestra por pantalla solo los créditos que superen esa cantidad.
    PROGRAM fichb_Creditos ;
    USES
    Crt, SysUtils ;
    TYPE
    tsCadena = STRING [40] ;
    trgCredito = RECORD
    sNombre, sNumCuenta : tsCadena ;
    rCredito : Real
    END ;
    tfbrgCreditos = FILE OF trgCredito ;
    VAR
    sNomFichCreditos : tsCadena ;
    rLimCredito : Real ;
    cResp, cEspera : Char ;
    PROCEDURE LeerDatosCredito (VAR rgCredito : trgCredito) ;
    BEGIN
    WITH rgCredito DO
    BEGIN
    Write (' Nombre: ') ;
    Readln (sNombre) ;
    Write ('N. de Cuenta(0-123-12345678): ') ;
    Readln (sNumCuenta) ;
    Write (' Credito: ') ;
    Readln (rCredito) ;
    Writeln
    END
    END ; { LeerDatosCredito () }
    PROCEDURE MostrarDatosCredito (rgCredito : trgCredito) ;
    BEGIN
    WITH rgCredito DO
    BEGIN
    Writeln (' Nombre : ', sNombre) ;
    Writeln ('N. de Cuenta: ', sNumCuenta) ;
    Writeln (' Cr‚dito: ', rCredito:0:2) ;
    Writeln
    END ;
    END ; { MostrarDatosCredito () }
    PROCEDURE CrearFicheroSiNoExiste (sNomFich : tsCadena) ;
    VAR
    fbrgCreditos : tfbrgCreditos ;
    BEGIN
    IF NOT FileExists (sNomFich) THEN
    BEGIN
    Assign (fbrgCreditos, sNomFich) ;
    ReWrite (fbrgCreditos) ;
    Close (fbrgCreditos) ;
    END ;
    END ; { CrearFicheroSiNoExiste () }
    PROCEDURE AniadirDatosAlFicheroCreditos (sNomFich : tsCadena) ;
    VAR
    rgCredito : trgCredito ;
    fbrgCreditos : tfbrgCreditos ;
    cResp : Char ;
    BEGIN
    { Como ya existe el fichero se abren y nos posicionamos al final }
    Assign (fbrgCreditos, sNomFich) ;
    Reset (fbrgCreditos) ;
    Seek (fbrgCreditos, Filesize (fbrgCreditos)) ;
    Writeln ; { Comenzar la introducción de datos }
    Write ('¨ Añadir informacion sobre otra persona (S/N) ? : ') ;
    Readln (cResp) ;
    WHILE Upcase (cResp) = 'S' DO
    BEGIN
    { Leer datos de una persona }
    LeerDatosCredito (rgCredito) ;
    { Escribir los datos en el fichero }
    Write (fbrgCreditos, rgCredito) ;
    { Ver si se continúa con la introducci¢n de datos }
    Write ('¨ Añadir informacion sobre otra persona (S/N) ? : ') ;
    Readln (cResp)
    END ;
    Close (fbrgCreditos)
    END ; { AniadirDatosAlFicheroCreditos () }
    PROCEDURE MostrarDatosFichero (sNomFich : tsCadena) ;
    VAR
    rgCredito : trgCredito ;
    fbrgCreditos : tfbrgCreditos ;
    cEspera : Char ;
    BEGIN
    Assign (fbrgCreditos, sNomFich) ;
    Reset (fbrgCreditos) ;
    Clrscr ;
    Writeln ;
    Writeln ('Informaci¢n de todos los creditos') ;
    Writeln ;
    WHILE NOT Eof (fbrgCreditos) DO
    BEGIN
    { leer informaci¢n de una persona }
    Read (fbrgCreditos, rgCredito) ;
    { Mostrar la informaci¢n le¡da }
    MostrarDatosCredito (rgCredito) ;
    cEspera := ReadKey ;
    END ;
    Close (fbrgCreditos) ;
    Writeln ;
    Writeln ('Fin de listado') ;
    Writeln
    END ; { MostrarDatosFichero () }
    PROCEDURE MostrarCreditosMayores (sNomFich : tsCadena ;
    rLimCredito : Real) ;
    VAR
    rgCredito : trgCredito ;
    fbrgCreditos : tfbrgCreditos ;
    cEspera : Char ;
    BEGIN
    Assign (fbrgCreditos, sNomFich) ;
    Reset (fbrgCreditos) ;
    Writeln ;
    Writeln ('Informacion de creditos mayores de ', rLimCredito:0:2,
    ' Euros') ;
    Writeln ;
    WHILE NOT Eof (fbrgCreditos) DO
    BEGIN
    { leer informaci¢n de una persona }
    Read (fbrgCreditos, rgCredito) ;
    { Mostrar la informacion leida si cumple la condici¢n }
    IF rgCredito.rCredito > rLimCredito THEN
    BEGIN
    MostrarDatosCredito (rgCredito) ;
    cEspera := ReadKey ;
    END ;
    END ;
    Close (fbrgCreditos) ;
    Writeln ;
    Writeln ('Fin de listado') ;
    Writeln
    END ; { MostrarCreditosMauyores () }
    BEGIN {******* PROGRAMA PRINCIPAL ***********}
    { Leer nombre del fichero del cr‚ditos }
    REPEAT
    Write ('Nombre del fichero del creditos (ej.: BancoUno.DAT): ') ;
    readln (sNomFichCreditos) ;
    UNTIL Length (sNomFichCreditos) <> 0 ;
    CrearFicheroSiNoExiste (sNomFichCreditos) ;
    Writeln ;
    Write (' Añadir datos al fichero de creditos (S/N) : ') ;
    Readln (cResp) ;
    IF Upcase (cResp) = 'S' THEN
    AniadirDatosAlFicheroCreditos (sNomFichCreditos) ;
    Writeln ;
    Write ('Mostrar el contenido del fichero de creditos (S/N) : ') ;
    Readln (cResp) ;
    IF Upcase (cResp) = 'S' THEN
    MostrarDatosFichero (sNomFichCreditos) ;
    { Leer el l¡mite del cr‚dito }
    Writeln ;
    Writeln ('Se van a mostrar los creditos que superan ',
    'un determinado limite');
    Writeln ;
    Write ('Limite de credito : ') ;
    Readln (rLimCredito) ;
    MostrarCreditosMayores (sNomFichCreditos, rLImCredito) ;
    Writeln ;
    Writeln ;
    Write ('Pulsa una tecla para continuar') ;
    cEspera := ReadKey ;
    END. { FIN DE FICHB_Creditos.PAS }

    (view changes)
    5:02 am
  5. page Ficheros edited ... Contenidos de apoyo a las clases magistrales Ficheros ... del fichero: Mostrar informacio…
    ...
    Contenidos de apoyo a las clases magistrales
    Ficheros
    ...
    del fichero: Mostrar informacion seleccionada de un fichero
    Ejercicio de
    ...
    en otro: Poblacion bilbaina
    Ejercicio de
    ...
    página 109): P109_E5-Ejercicio poblacion bilbaina modificado
    Exámenes Finales de años anteriores: Exámenes anteriores
    (view changes)
    5:01 am

More