Pascal/Turbo Pascal - Ayuda[Pascal]

 
Vista:

Ayuda[Pascal]

Publicado por Agustin (3 intervenciones) el 27/03/2013 16:13:43
Hola Chicos Necesitaria una ayuda en Pascal con este Ejercicio.

Un Archivo Movi.Dat clasificado en forma Ascendente por la clave de ordenamiento,contiene un conjunto de facturas y la cantidad de articulos vendidos en cada una de ellas.

Archivo Movi.dat
Nro.Factura(clave de ordenamiento)
codigo de articulo(1001-2000)
cantidad vendida

Ademas en el archivo productos.dat se encuentra almacenado el codigo (clave primaria) y el precio unitario de cada articulo y el stock actual.

Realizar los siguientes procedimientos.
1-Imprimir un listado que contenga: Nro de Factura(Una sola ves por factura) los articulos vendidos para cada factura y el total de la misma.
2-con los datos del archivo MOVI.dat actualizar PRODUCTOS.dat

Hice el Corte, Funciona, pero me tira error en la actualizacion, y ademas creo que esta mal.


Corte de Control:

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
procedure Corte_de_Control(Var Archivo:text;Var Fichero:Datos);
   var R2:Productos;
       R1:Movi;
       Facturaant:integer;
       TotalArticulo:integer;
         begin
          Reset(Archivo);
           Readln(Archivo,R1.Nro_factura,R1.Codigo,R1.cantidad_vendida);
           Facturaant:=0; totalarticulo:=0;
            Facturaant:=R1.Nro_factura;
            while not Eof(Archivo) Do
               begin
                Writeln('Nro de factura      Codigo de Articulo       Cantidad Vendida');
                   While not Eof(Archivo) and (R1.Nro_factura = Facturaant) Do
                      begin
                      Writeln(' ');
                      Writeln(R1.Nro_factura,'                        ',R1.Codigo,'                      ',R1.cantidad_vendida);
                      TotalArticulo:=TotalArticulo + R1.cantidad_vendida;
                      Readln(Archivo,R1.Nro_factura,R1.Codigo,R1.cantidad_vendida);
                      end;
 
                if (R1.Nro_factura <> Facturaant) then
                begin
                Writeln(' ');
                Writeln(' ');
                Writeln(' ');
                Writeln('El Total de cada articulo de la factura: ',Facturaant,' Fue de: ',TotalArticulo);
                Actualizar_Archivo(Fichero,TotalArticulo);
                TotalArticulo:=0;
                Facturaant:=R1.Nro_factura;
                end;
              end;
             Writeln(' ');
             Writeln('Nro de factura      Codigo de Articulo       Cantidad Vendida');
             Writeln(R1.Nro_factura,'                         ',R1.Codigo,'                  ',R1.cantidad_vendida);
                Writeln(' ');
                Writeln(' ');
                Writeln('El Total de cada articulo de la factura: ',Facturaant,' Fue de: ',TotalArticulo);
                Actualizar_Archivo(Fichero,TotalArticulo);
Close(Archivo);
  end;


No Puedo sacar el Precio Unitario y actualizar.

Bueno Muchas Gracias y espero que me ayuden
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[Pascal]

Publicado por ramon (2158 intervenciones) el 31/03/2013 15:34:49
Disculpa puedes pasar la estructura con la que trabajas pues sin ella mal puedo ver
el problema me refiero a la de estos datos.
Nro.Factura(clave de ordenamiento)
codigo de articulo(1001-2000)
cantidad vendida
supongo que es un .

dato = record
Nro.Factura : word;
codigo de articulo : string[12];
cantidad vendida : integer;
end;

si es así la forma de manejar los datos es errónea para lo que quieres hacer.

tienes que manejar lo de otra forma para poder sacar el Precio Unitario y actualizar
correcta mente.
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[Pascal]

Publicado por Agustin (3 intervenciones) el 01/04/2013 02:37:12
Se que funciona de otra manera, pero no me sale el procedimiento aparte de la actualizacion y para sacar el precio unitario y llamarlo en el procedimiento de corte de control.

a los registros los cree asi:

Movi = record
Nro_factura:integer;
Codigo:Integer;
cantidad_vendida:real;
end;

productos = record
Codigos:integer;
P_Unitario:real;
Stock:real;

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[Pascal]

Publicado por ramon (2158 intervenciones) el 01/05/2013 20:03:46
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
{Fíjate en esto a ver si te ayuda }
 
 program control;
 uses
    crt;
 type
    Movi = record
        Nro_factura : integer;
             Codigo : Integer;
   cantidad_vendida : real;
        end;
 
    productos = record
            Codigos : integer;
         P_Unitario : real;
              Stock : real;
            end;
 
   const
      archiv1 = 'Movi.dat';
      archiv2 = 'productos.dat';
 
   var
     f1 : file of Movi;
     datos1 : Movi;
     f2 : file of productos;
     datos2 : productos;
 
 
   procedure entrada_movi;
   begin
      clrscr;
      writeln('**** Entrada Movi ****');
      writeln;
      write('   Entre Num. Factura    : ');
      readln(datos1.Nro_factura);
      write('   Entre Codigo           : ');
      readln(datos1.Codigo);
      write('   Entre Cantidad Vendida : ');
      readln(datos1.cantidad_vendida);
      assign(f1,archiv1);
   {$I-} reset(f1); {$I+}
   if ioresult <> 0 then
   begin
       rewrite(f1);
       seek(f1,0);        {No hay lo creamos}
       write(f1,datos1);
       close(f1);
   end
 else
    begin
        seek(f1,filesize(f1));
        write(f1,datos1);     {Si hay ponemos uno mas}
        close(f1);
    end;
   end;
 
   procedure entrada_productos;
   begin
      clrscr;
      writeln('**** Entrada Productos ****');
      writeln;
      write('   Entre Codigo        : ');
      readln(datos2.codigos);
      write('   Entre Precio Unidad : ');
      readln(datos2.P_Unitario);
      write('   Entre Stock         : ');
      readln(datos2.Stock);
      assign(f2,archiv2);
   {$I-} reset(f2); {$I+}
   if ioresult <> 0 then
   begin
       rewrite(f2);
       seek(f2,0);        {No hay lo creamos}
       write(f2,datos2);
       close(f2);
   end
 else
    begin
        seek(f2,filesize(f2));
        write(f2,datos2);     {Si hay ponemos uno mas}
        close(f2);
    end;
   end;
 
   procedure ordena_Movi;
   var
     canv, temp : movi;
     t, h : longint;
   begin
    assign(f1,archiv1);
   {$I-} reset(f1); {$I+}
   if ioresult <> 0 then
   begin
      clrscr;
      writeln('  Error El Archivo No Encontrado Pulse Una [Tecla]');
      readkey;
      exit;
   end
 else
    begin
      for t := 0 to filesize(f1) - 1 do
      begin
        seek(f1,t);
        read(f1,datos1);
        for h := filesize(f1) - 1 downto t + 1 do
        begin
            seek(f1,h);
            read(f1,temp);
            if datos1.Codigo > temp.Codigo then
            begin
               canv := datos1;
               datos1 := temp;
               temp := canv;
               seek(f1,t);
               write(f1,temp);
               seek(f1,h);
               write(f1,datos1);
            end;
           end;
         end;
       close(f1);
     end;
   end;
 
   procedure prersenta_datos_movi;
   var
     fact : longint;
     antes, venta : real;
   begin
       assign(f1,archiv1);
   {$I-} reset(f1); {$I+}
   if ioresult <> 0 then
   begin
      clrscr;
      writeln('  Error El Archivo No Encontrado Pulse Una [Tecla]');
      readkey;
      exit;
   end
 else
    begin
       antes := 0;
       venta := 0;
       for fact := 0 to filesize(f1) - 1 do
       begin
           seek(f1,fact);
           read(f1,datos1);
           if antes = datos1.Nro_factura then
           begin
           venta := venta + datos1.cantidad_vendida;
           end
         else
            begin
               venta := venta + datos1.cantidad_vendida;
               writeln('Num = ',datos1.Nro_factura,'   Venta = ',venta:0:2);
               venta := 0;
               antes := datos1.Nro_factura;
            end;
       end;
       close(f1);
    end;
   end;
 
   procedure modificadatos;
   var
     toma : real;
     z, s, j : longint;
     tempo : movi;
   begin
      assign(f1,archiv1);
   {$I-} reset(f1); {$I+}
   if ioresult <> 0 then
   begin
      clrscr;
      writeln('  Error El Archivo No Encontrado Pulse Una [Tecla]');
      readkey;
      exit;
   end
 else
    begin
     assign(f2,archiv2);
   {$I-} reset(f2); {$I+}
   if ioresult <> 0 then
   begin
       halt;
    end;
       toma := 0;
       for s := 0 to filesize(f1) - 1 do
       begin
          seek(f1,s);
          read(f1,datos1);
          toma := toma + datos1.cantidad_vendida;
          for j := s to filesize(f1) - 1 do
          begin
              seek(f1,j);
              read(f1,tempo);
              if datos1.Codigo = tempo.Codigo then
              toma := toma + tempo.cantidad_vendida;
          end;
           for z := 0 to filesize(f2) - 1 do
           begin
              seek(f2,z);
              read(f2,datos2);
              if datos2.codigos = datos1.codigo then
              begin
                 datos2.stock := datos2.stock - toma;
                 write(f2,datos2);
              end;
           end;
       end;
    end;
     close(f1);
     close(f2);
   end;
 
   procedure menu;
   var
      salir : boolean;
      tec : char;
    begin
       salir := false;
       repeat
        clrscr;
        writeln('****** Menu General *******');
        writeln;
        writeln('    1 = Entrada_movi');
        writeln('    2 = Entrada_productos');
        writeln('    3 = Ordena_Movi');
        writeln('    4 = Prersenta_datos_movi');
        writeln('    5 = Modificadatos Segun Movi');
        writeln('    6 = Salir');
        writeln;
        writeln('<<<<< Elija Opcion >>>>>');
        repeat
           tec := readkey;
        until tec in[#49..#54];
    case tec of
  #49 : begin clrscr; Entrada_movi; end;
  #50 : begin clrscr; Entrada_productos; end;
  #51 : begin clrscr; Ordena_Movi; end;
  #52 : begin clrscr; Prersenta_datos_movi; end;
  #53 : begin clrscr; Modificadatos; end;
  #54 : salir := true;
   end;
       until salir = true;
   end;
 
 
   begin
      menu;
   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