Pascal/Turbo Pascal - Ayuda registro de registros(programa pesadora)

 
Vista:

Ayuda registro de registros(programa pesadora)

Publicado por industrial (7 intervenciones) el 06/06/2014 11:12:10
Buenos dias.
Tengo que hacer un programa que funcione como una maquina pesadora de tres cabezas. Entonces tengo que hacer cuatro programas que se van juntando entre ellos. Ya he hecho los dos primeros que tratan de que tu metes el nombre y la composicion de cada carga y tolva.
Ahora lo que se me pide es: un tipo registro tpListaComposiciones que permita almacenar hasta diez posibles composiciones de producto (de tipo tpComposicion). Las composiciones se guardan en la tabla sin dejar huecos desde la posición 1 y ordenadas por su código identificativo. Inicialmente no habrá ninguna composición almacenada.
De momento meto una composicion y con una orden se muestra. Lo que necesito es que se guarden para que luego al iniciar un procedure que ya tengo se muestren en orden alfabetico todas las correctas que haya metido.

He pensado en algo asi

1
2
3
4
5
6
7
8
9
10
11
12
type
  tpComposicion = record
          nombre:string;
          c1:real;
          c2:real;
          c3:real;
   end;
 
tpListaComposiciones = record
    ncompos:0..10;
     compos:array[0..10] of tpComposicion;
     end;

Pero no se si esta bien porque creo que el 10 limitaria la linea y no las composiciones que puedo hacer. Lo que no quiero es hacer un programa tipo:
1
2
3
4
5
tpListaComposiciones=record
        composicion1,composicion2,composicion3,composicion4,
        composicion5,composicion6,composicion7,composicion8,
        composicion9,composicion10:tpComposicion;
        end;
Sino si se puede hacer con lo que he puesto antes y que con un for y un while vaya cambiando.
Gracias por su ayuda.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Ayuda registro de registros(programa pesadora)

Publicado por ramon (2158 intervenciones) el 06/06/2014 11:57:01
No limita la linea limita las entradas de registros o sea solo podrás entrar 11 registros tpComposicion.
Tendrás que controlar que no entren mas de 11 o sea 0 a 10.
Si necesitas ayuda dímelo suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda registro de registros(programa pesadora)

Publicado por industrial (7 intervenciones) el 07/06/2014 13:00:30
He intentado esto pero meta la composicion que meta siempre me salen 10 siendo todas 0.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
procedure leerComposicion(var comp:tpComposicion);
  var  comptemp:tpComposicion;
 begin
   write(':');read(comptemp.nombre);
   write(':');readln(comptemp.c1);
   write(':');readln(comptemp.c2);
   write(':');readln(comptemp.c3);
  if composicionCorrecta(comptemp)=true then
  begin
  comp:=comptemp;
  writeln('Composicion incorporada');
  end
  else
   writeln('Composicion incorrecta');
 end;
 
 procedure imprimirComposicion(var listacompos:tpListaComposiciones);
   begin
      i:=0;
      while i<= listacompos.ncompos do
      for i:=0 to 10 do
      begin
       if (composicionCorrecta(comp)=true)   then
        writeln('C=(',listacompos.compos[i].nombre,':',listacompos.compos[i].c1:0:1,':',listacompos.compos[i].c2:0:1,':',listacompos.compos[i].c3:0:1,')');
       end;
       i:=i+1 ;
   end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda registro de registros(programa pesadora)

Publicado por industrial (7 intervenciones) el 07/06/2014 13:32:28
Tras eso he creado este tambien:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure insertarComposicion(var listacompos:tpListaComposiciones);
  var comp:tpComposicion;
  begin
  i:=1;
 
    for i:=1 to 10 do
    leerComposicion(comp);
      if (composicionCorrecta(comp)=true)   then
      if(comp.nombre=listacompos.compos[i].nombre) then
         writeln('Composicion no incorporada. Composicion ya existente.')
          else begin
           if(listacompos.compos[i].nombre<>'')then
                writeln('Composicion no incorporada. Lista llena.')
                else begin
                 if(listacompos.compos[i].nombre='')
                        then listacompos.compos[i]:=comp;
 
                      writeln('Composicion incorporada.');
                    end;
               end;
               i:=i+1;
    end;

Pero he probado a meter un while a quitar el for etc. Y no me va bien
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda registro de registros(programa pesadora)

Publicado por ramon (2158 intervenciones) el 08/06/2014 00:52:39
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
{ira esto te ayudara un poco}
 
program composicion;
 uses
    crt;
  const
      max = 20;
  type
     composi = record
               nombre : string[80];
               c1, c2, c3 : real;
             end;
 
  var
     comp : array[1..max] of composi;
     cont : integer;
     tecla : char;
   procedure entradacomposicion(var com : composi);
   begin
       clrscr;
       writeln('**** Entrada Composiciones *****');
       writeln;
       with com do
       begin
          write('   Entre Nombre       : ');
          readln(nombre);
          write('   Entre comopicion 1 : ');
          readln(c1);
          write('   Entre comopicion 2 : ');
          readln(c2);
          write('   Entre comopicion 3 : ');
          readln(c3);
       end;
   end;
 
   procedure listacomposiciones;
   var
     l : integer;
   begin
      for l := 1 to cont do
      begin
         writeln(comp[l].nombre,'   ',comp[l].c1:0:2,
             '   ',comp[l].c2:0:2,'   ',comp[l].c3:0:2);
      end;
   end;
 
   begin
      cont := 1;
      repeat
          entradacomposicion(comp[cont]);
          writeln;
          writeln('   Desea Entrar Mas Datos [S/N] ');
          repeat
             tecla := upcase(readkey);
          until tecla in['S','N'];
          if tecla = 'S' then
          cont := cont + 1;
          if cont > max then
          tecla := 'N';
      until tecla = 'N';
      clrscr;
      listacomposiciones;
      readkey;
   end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Ayuda registro de registros(programa pesadora)

Publicado por industrial (7 intervenciones) el 08/06/2014 21:56:06
No funciona. Creo que no se puede definir asi el array de un registro pero no se. Ya no se que hacer igual lo dejo sin hacer y ya esta porque llevo todo el dia intentandolo y no lo resuelvo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
procedure leerComposicion(var listatemp:tpListaComposiciones);
 begin
 i:=1;
   write(':');read(listatemp.compos[j].nombre);
   write(':');readln(listatemp.compos[j].c1);
   write(':');readln(listatemp.compos[j].c2);
   write(':');readln(listatemp.compos[j].c3);
  if composicionCorrecta(listatemp.compos[j])=true then
  begin
  writeln('Composicion incorporada');
  end
  else
   writeln('Composicion incorrecta');
 end;
 
   procedure insertarcomposicion(var lista,listacompos:tpListaComposiciones);
    var cont:integer;
        norepetida,nollena:boolean;
    begin
    j:=1;cont:=0;nollena:=false;norepetida:=false;
      leerComposicion(listacompos);
 
           begin
            for i:=1 to 10 do begin
             if  (listatemp.compos[j].nombre=listacompos.compos[i].nombre) then
             begin
              writeln('Composicion no incorporada. Composicion ya existente.');
              cont:=cont+1;
             end;
           end;
              if cont=0 then
              norepetida:=true;
 
                if(listacompos.compos[i].nombre<>'')then begin
                cont:=cont+1;
                end;
                 if cont<>0 then
                  nollena:=true
                 else begin
                  nollena:=false;
                  writeln('Composicion no incorporada. Lista llena.');
                 end;
           end;
        ordenar(listacompos);
 
     end;

eso es el lo ultimo que se me ha ocurrido pero sigue yendo mal:(
gracias de todas formas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar