Programación General => Pascal => Mensaje iniciado por: kobukguille en Viernes 5 de Enero de 2007, 17:27
Título: Necesito Una Mano Con Un Programa
Publicado por: kobukguille en Viernes 5 de Enero de 2007, 17:27
Estoy haciendo un programa que registre modelos de resistencias, un máximo de 100. Mi problema es que quando quiero vaciar el almacen y borrar todas las resistencias registradas no lo hace, para ello uso un procedure. Utilizo el delphi 6 y programo en pascal estoy un poco verde porque me acabo de meter en este mundillo. Tambien me gustaria saber como definir el numero de decimales que quiero que tenga un 'real'. Por otra parte me gustaria poder añadir una acción en forma de funcion(por ejemplo BOOLEAN) que mire la estructura y diga si un codigo ya existe. Escribir una acción en forma de procedure para añadir los datos de una nueva resistencia a la estructura (verificar a su vez si el codigo aun no existe). Escribir una acción en forma de procedure para visualizar el contenido de la estructura. Lo que me gustaria es saber si me lo podeis explicar de una forma simple porque en los apuntes que tengo me explica muy poco de procedimientos y lo que explica no lo entiendo. Llevo dias provando formas de hacer las cosas, aprendiendo de los errores que me da el programa al compilar pero voy a paso de tortuga y un poco a ciegas. Porfavor cualquier respuesta que me podais dar me sera de gran ayuda, seguro
Muchas gracias. Hos escribo el programa
program programa;
{$APPTYPE CONSOLE}
uses SysUtils;
const max=100;
type T_Contador=1..max; T_Ficha=RECORD Codigo:STRING[5]; Valor:INTEGER; Tolerancia:INTEGER; Potencia:REAL; Existencias:INTEGER; Precio_Unidad:REAL; Ubicacion:STRING[8]; end; T_Almacen=RECORD T_Stock:ARRAY [T_Contador] OF T_Ficha; N_Resistencias:INTEGER; end;
procedure Vaciar_Almacen (Ficha:T_Almacen); var respuesta:CHAR; N_Resistencias:INTEGER; begin while (respuesta<>'s')and(respuesta<>'n') do begin writeln('Realmente desea eliminar la informacion sobre el contenido del almacen? (S/N)'); readln(respuesta); if respuesta='s' then begin Ficha.N_Resistencias:=0; writeln('Ha eliminado toda la informacion respecto al contenido del almacen'); end; if respuesta='n' then writeln('No se ha eliminado la informacion respecto al contenido del almacen'); if (respuesta<>'s')and(respuesta<>'n') then writeln('Introduzca una respuesta valida S/N'); end; writeln; writeln('Presione intro para volver al Menu'); readln; end;
procedure Introducir_Resistencia (var Ficha:T_Almacen); begin Ficha.N_Resistencias:=Ficha.N_Resistencias+1; writeln('Se dispone a introducir los datos de la RESISTENCIA numero ',Ficha.N_Resistencias); writeln('Introduzca el CODIGO de la resistencia'); readln(Ficha.T_Stock[Ficha.N_Resistencias].Codigo); writeln('Introduzca el VALOR de la resistencia (OHMS)'); readln(Ficha.T_Stock[Ficha.N_Resistencias].Valor); writeln('Introduzca la TOLERANCIA de la resistencia (%)'); while ((Ficha.T_Stock[Ficha.N_Resistencias].Tolerancia)<>1)AND ((Ficha.T_Stock[Ficha.N_Resistencias].Tolerancia)<>2)AND ((Ficha.T_Stock[Ficha.N_Resistencias].Tolerancia)<>5)AND ((Ficha.T_Stock[Ficha.N_Resistencias].Tolerancia)<>10) do begin readln(Ficha.T_Stock[Ficha.N_Resistencias].Tolerancia); if ((Ficha.T_Stock[Ficha.N_Resistencias].Tolerancia)<>1)AND ((Ficha.T_Stock[Ficha.N_Resistencias].Tolerancia)<>2)AND ((Ficha.T_Stock[Ficha.N_Resistencias].Tolerancia)<>5)AND ((Ficha.T_Stock[Ficha.N_Resistencias].Tolerancia)<>10) then writeln('ERROR, Introduzca un valor correcto: 1,2,5,10') end; writeln('Introduzca la POTENCIA de la resistencia (WATTS)'); readln(Ficha.T_Stock[Ficha.N_Resistencias].Potencia); writeln('Introduzca las EXISTENCIAS de la resistencia'); readln(Ficha.T_Stock[Ficha.N_Resistencias].Existencias); writeln('Introduzca el PRECIO por UNIDAD de la resistencia (EUROS)'); readln(Ficha.T_Stock[Ficha.N_Resistencias].Precio_Unidad); writeln('Introduzca la UBICACION de la resistencia (elija estante: del 1 al 8)'); readln(Ficha.T_Stock[Ficha.N_Resistencias].Ubicacion);
writeln('RESISTENCIA numero ',Ficha.N_Resistencias); writeln('CODIGO: ',Ficha.T_Stock[Ficha.N_Resistencias].Codigo); writeln('VALOR: ',Ficha.T_Stock[Ficha.N_Resistencias].Valor,' OHMS'); writeln('TOLERANCIA: ',Ficha.T_Stock[Ficha.N_Resistencias].Tolerancia,'%'); writeln('POTENCIA: ',Ficha.T_Stock[Ficha.N_Resistencias].Potencia,' WATTS'); writeln('EXISTENCIAS: ',Ficha.T_Stock[Ficha.N_Resistencias].Existencias,' Unidades'); writeln('PRECIO por UNIDAD: ',Ficha.T_Stock[Ficha.N_Resistencias].Precio_Unidad,' EUROS'); writeln('UBICACION: Estante ',Ficha.T_Stock[Ficha.N_Resistencias].Ubicacion); writeln; writeln('Presione intro para volver al Menu'); readln; end;
var Opcion:INTEGER; N:T_Almacen; N_Resistencias:INTEGER;
begin Opcion:=-1; while (Opcion<>0) do begin writeln('Menu, Que desea hacer?'); writeln('Opcion 1: Vaciar el almacen'); writeln('Opcion 2: Insertar una resistencia'); writeln('Opcion 3: (por definir)'); writeln('Opcion 0: Salir'); readln(Opcion); case Opcion of 1 :begin writeln('Ha elegido Vaciar el almacen'); Vaciar_Almacen(N) end; 2 :begin writeln('Ha elegido Insertar una resistencia'); Introducir_Resistencia(N) end; 3 :writeln('Ha elegido la opcion 3'); 0 :writeln('Gracias por actualizar su Stock de resistencias, ADIOS'); else writeln('ERROR, Introduzca una opcion valida: 1,2,3,0') end; end; readln; end.
Título: Re: Necesito Una Mano Con Un Programa
Publicado por: _.B._ en Miércoles 17 de Enero de 2007, 15:50
Saludos!
Prueba pasando "Ficha" como parámetro formal.
Código: Text
procedure Vaciar_Almacen(var Ficha : T_Almacen);
Espero te sirva :comp:
Título: Re: Necesito Una Mano Con Un Programa
Publicado por: kobukguille en Miércoles 17 de Enero de 2007, 23:28
Muchas gracias por la respuesta pero ya he terminado el programa por mi mismo y la verdad estoy muy satisfecho.