• Sábado 20 de Abril de 2024, 14:13

Autor Tema:  Necesito Una Mano Con Un Programa  (Leído 1611 veces)

kobukguille

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Necesito Una Mano Con Un Programa
« en: Viernes 5 de Enero de 2007, 17:27 »
0
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.

_.B._

  • Miembro activo
  • **
  • Mensajes: 88
    • Ver Perfil
Re: Necesito Una Mano Con Un Programa
« Respuesta #1 en: Miércoles 17 de Enero de 2007, 15:50 »
0
Saludos!

Prueba pasando "Ficha" como parámetro formal.

Código: Text
  1. procedure Vaciar_Almacen(var Ficha : T_Almacen);
  2.  

Espero te sirva :comp:
¡Olmo, dame peras!
www.BernardoLG.net

kobukguille

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Necesito Una Mano Con Un Programa
« Respuesta #2 en: Miércoles 17 de Enero de 2007, 23:28 »
0
Muchas gracias por la respuesta pero ya he terminado el programa por mi mismo y la verdad estoy muy satisfecho.

Gracias de todos modos.