Título: pascal que se ha cortedo ejercicio Publicado por: manu3742 en 14 Abril 2011, 13:06 pm Código Necesito me ayudeis a ver que código esta mal preincipalmente el menu. no estoy muy seguro si es correcto lo que he codificado PROGRAM Bibliotecas; (* Tamaño de cada registro que se pide *) CONST TAMMAXI = 40; TAMBIBLIOTECA = 25; TYPE (* registro anidado que define las características de cada libro *) Tprestado = record nom_apellidos : string [TAMMAXI]; email : string [TAMMAXI]; fecha : char; end; Tlibro = record datos : Tprestado; titulo : string [TAMMAXI]; autor : string [TAMMAXI]; tema : string [TAMMAXI]; precio : integer; alta : boolean; end; (* -- TABLA SOBRE LA QUE VAMOS A TRABAJAR EN EL PROYECTO BIBLIOTECA --*) Tbiblioteca = array[1..TAMBIBLIOTECA] of Tlibro; Tfichero = file of Tlibro; (*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*) (*!!!!!!!!!!!!!!!! VARIABLES GLOBALES !!!!!!!!!!!!!!!!!!!!!!!!*) (*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*) VAR libro : Tlibro; prestado : Tprestado; biblioteca: Tbiblioteca; libro_prestado : Boolean; alta : Boolean; fichero : char; opc : integer; opc1 : integer; nombre : string; (*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*) (*!!!!!!!!!!!!!!!! FUNCIONES Y PROCEDIMIENTOS !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*) (*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*) (* -- LEE DEL TECLADO TODA LA INFORMACIÓN DE UN LIBRO QUE SE LE PASA--*) PROCEDURE lee_libro( var libro: Tlibro); begin writeln; writeln('Alta o baja (true, false): '); readln(libro.alta); writeln('Titulo: '); readln(libro.titulo); writeln('Autor: '); readln(libro.autor); writeln('Tema: '); readln(libro.tema); writeln('Precio: '); readln(libro.precio); writeln; end; (* PRESENTAR LISTADOS DE LA BIBLIOTECA *) PROCEDURE imprime_libro(libro: Tlibro); begin writeln('--------------------------------------'); writeln('LISTADO POR LIBRO'); writeln('--------------------------------------'); writeln('Alta o baja (true o false)',libro.alta); writeln('Titulo : ', libro.titulo); writeln('Autor : ' , libro.autor); writeln('Tema : ', libro.tema); writeln('Precio : ',libro.precio); writeln; writeln('--------------------------------------'); end; PROCEDURE lee_prestamos(var prestado: Tprestado); begin writeln; writeln('------------------------------------'); writeln('INTRODUCIR DATOS PRESTAMO BIBLIOTECA'); writeln('------------------------------------'); writeln('Introducir Nombre y Apellidos: '); readln(prestado.nom_apellidos); writeln('Email: '); readln(prestado.email); writeln('Fecha del Prestamo: '); readln(prestado.fecha); writeln; end; PROCEDURE imprime_prestados(prestado:Tprestado; longitud: integer); var i: integer; begin for i:= 1 to longitud do; begin writeln('----------------------------------------'); writeln('-----LISTADO DE LIBROS PRESTADOS--------'); writeln('----------------------------------------'); lee_prestamos(prestado); end; end; (* -- CON ESTE PROCEDIMIENTO PRETENDO BUSCAR Y MODIFICAR SU ESTADO DE ALTA, BAJA O MODIFICAR --*) PROCEDURE busca_datos( biblioteca: Tbiblioteca; longitud: integer; buscado: char); var i : integer; encontrado: Boolean; begin encontrado:= false; for i:= 1 to longitud do begin if biblioteca .titulo = buscado then begin imprime_libro(biblioteca); encontrado:= true; end; end; begin if encontrado = false then begin lee_libro(biblioteca); end; end; end; (* -- PENDIENTE DE REALIZAR --*) (* PROCEDURE baja_libro( var libro: Tlibro; longintud: integer); begin end; *) (* -- PENDIENTE DE REALIZAR --*) (*procedure modificar_datos(var prestado: Tprestado; longitud:integer); begin end;*) (* lISTADOS DE TODOS LOS LIBROS *) PROCEDURE imprime_libros(biblioteca: Tbiblioteca; longitud: integer); var i: integer; begin for i:= 1 to longitud do begin writeln('--------------------------------------'); writeln('LISTADO DE TODOS LOS LIBROS BIBLIOTECA'); writeln('--------------------------------------'); imprime_libro(biblioteca); end; end; (* FUNCION QUE DEVUELVE EL VALOR TOTAL DE LA COLECCION DE LA BIBLIOTECA *) FUNCTION suma_coleccion(biblioteca: Tbiblioteca; longitud: integer): real; var i: integer; suma: integer; begin suma:= 0; for i:= 1 to longitud do begin suma:= suma + biblioteca.precio; end; end; (* FUNCIÓN QUE DEVUELVE VALOR MÁXIMO DE LA COLECCION DE LA BIBLIOTECA *) FUNCTION Maximo(bibliooteca: Tbiblioteca; longitud: integer): integer; var i: integer; max: integer; begin max:= 0; for i:= 1 to longitud do begin if max < biblioteca.precio then max:= biblioteca.precio; Maximo:= max; end; end; (* FUNCION QUE DEVUELVE VALOR MÍNIMO DE LA COLECCION DE LA BIBLIOTECA *) FUNCTION Minimo(biblioteca: Tbiblioteca; longitud: integer): real; var i: integer; min: integer; begin min:= 0; for i:= 1 to longitud do begin if min > biblioteca.precio then min:= biblioteca.precio; Minimo:= min; end; end; (* FUNCION QUE DEVUELVE EL VALOR MEDIO DE LA COLECCION DE LA BIBLIOTECA *) FUNCTION Media(biblioteca: Tbiblioteca; longitud: integer): real; var i: integer; suma_coleccion: integer; begin suma_coleccion:= 0; for i:= 1 to longitud do begin suma_coleccion:= suma_coleccion + biblioteca.precio; Media:= suma_coleccion/1.0+longitud; end; end; (*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*) (*!!!!!!!!!!!!!!!! Funciones de ficheros !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*) (*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*) (*-- ALMACENA DATOS LEIDOS DE UN FICHERO --*) PROCEDURE graba_fichero(nombre: string; biblioteca: Tbiblioteca; longitud: integer); Var i : integer; fichero : Tfichero; Begin assign(fichero, nombre); rewrite(fichero); for i:= 1 to longitud do write(fichero, biblioteca); close(fichero); End; (*-- LEE DATOS DEL FICHERO --*) PROCEDURE lee_fichero(nombre: string; var biblioteca: Tbiblioteca; longitud: integer); Var i : integer; fichero : Tfichero; Begin i := 0; assign(fichero, nombre); reset(fichero); while ( not(eof(fichero)) AND (i<TAMBIBLIOTECA) ) do begin i := i+1; read(fichero, biblioteca); end; close(fichero); End; (*-- FUNCIÓN QUE PRESENTA MENÚ Y DEVUELVE OPCIÓN ELEGIDA --*) FUNCTION Menu: INTEGER; VAR opc: integer; BEGIN repeat writeln('-----------------------------'); writeln('MENÚ DE GESTIÓN DE BIBLIOTECA'); writeln('-----------------------------'); writeln; writeln('1. ALTA DE LIBRO'); writeln('2. BAJA DE LIBRO'); writeln('3. DATOS DE PRÉSTAMO'); writeln('4. MODIFICACIÓN DE DATOS'); writeln('5. GUARDAR DATOS EN FICHEROS'); writeln('6. LECTURA DE DATOS DE FICHERO'); writeln('7. PRESENTACIÓN DE LISTADO DE BIBLIOTECA'); writeln; writeln('8. SALIR'); writeln('OPCION: '); readln(opc); until ( (opc>=1) and (opc <=7) or (opc=8) ); Menu := opc; End; (*-- FUNCIÓN QUE PRESENTA UN SUBMENU DE LA OPCION 6 DEL MENÚ PRINCIPAL Y DEVUELVE LA OPCION ELEGIDA --*) FUNCTION submenu: INTEGER; VAR opc1: integer; BEGIN repeat writeln('------------------------------------------'); writeln('MENÚ PRESENTACIÓN DE LISTADO DE BIBLIOTECA'); writeln('------------------------------------------'); writeln; writeln('9. LISTADO DE TODOS LOS LIBROS DE LA BIBLIOTECA'); writeln('10. LISTADO DE LIBROS PRESTADOS'); writeln('11. LISTADO DE PRECIOS MÁXIMOS, MÍNIMOS, LA MEDIA Y EL VALOR TOTAL DE LA COLECCIÓN'); writeln; writeln('12. VOLVER MENU PRINCIPAL'); writeln('OPCION: '); readln(opc1); until ( (opc1>=9) and (opc<=11) or (opc1=12) ); submenu:= opc1; END; (*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*) (*!!!!!!!!!!!!!!!! PROGRAMA PRINCIPAL !!!!!!!!!!!!!!!!!!!!!!!!!!!*) (*!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*) BEGIN repeat opc:= Menu; case opc of 1: lee_libro(libro); 2: busca_datos(biblioteca, TAMBIBLIOTECA, buscado); 3: lee_prestamos(biblioteca); 4: busca_datos(biblioteca, TAMBIBLIOTECA, buscado); 5: begin writeln('Introduzca el nombre del fichero de datos: '); readln(nombre); graba_fichero(nombre, biblioteca, TAMBIBLIOTECA); end; 6: begin writeln('Introduzca el nombre del fichero: '); readln(nombre); lee_fichero(nombre, biblioteca, TAMBIBLIOTECA); end; 7: opc1; end; until(opc=8); repeat opc1:= Submenu; case opc1 of 9: imprime_libros(biblioteca, TAMBIBLIOTECA); 10: imprime_prestados(prestado, TAMBIBLIOTECA); 11: begin writeln('--------------------------------------------------------------'); writeln('LISTADO DE PRECIOS MAXIMOS, MINIMOS, LA MEDIA Y EL VALOR TOTAL'); writeln('--------------------------------------------------------------'); writeln('Valor máximo: '); maximo(biblioteca, TAMBIBLIOTECA); writeln('Valor mínimo: '); minimo(biblioteca, TAMBIBLIOTECA); writeln('Valor medio: '); media(biblioteca, TAMBIBLIOTECA); writeln('Valor total Biblioteca'); suma_coleccion(biblioteca, TAMBIBLIOTECA); end; 12: opc; end; until(opc1=12); END. Título: Re: pascal que se ha cortedo ejercicio Publicado por: Khronos14 en 14 Abril 2011, 16:14 pm ¿Para que abres dos veces un post para el mismo problema?
http://foro.elhacker.net/programacion_general/ejercicio_en_pascal_estoy_con_el_ultimo_ejercicio-t324667.0.html |