Pascal/Turbo Pascal - Ayuda con un programa

 
Vista:
Imágen de perfil de Bikittas

Ayuda con un programa

Publicado por Bikittas (2 intervenciones) el 10/11/2015 11:33:33
Necesito realizar esta actividad y me eh quedado demasiado estancada en este tema. Podrian porfavor resolvermelo? Gracias.
El ejercicio dice lo siguiente:


Continuaremos ampliando la funcionalidad del programa de gestión de pedidos, con la finalidad de crear un programa que gestiona todos los pedidos de un supermercado.

Considere a partir de ahora que cuando se realice un pedido, el elemento cero de la cesta (del pedido) tendrá un significado especial:
1. El campo en_cesta:=TRUE significará que el pedido se ha realizado y, por tanto, ya no se puede modificar ningún elemento de la cesta.
2. El campo para el nombre, en esta posición cero, guardará la fecha del pedido.
3. El campo del número de elementos guardará el número de unidades totales del pedido (suma de las unidades de cada producto).
4. El campo de precio guardará el precio total del pedido.

1. PRIMERA CUESTIÓN:

Codifique un procedimiento (calcula_pedido) que en el registro cero de la cesta actualice todos los valores de forma adecuada. Si lo considera oportuno, puede crear procedimientos para realizar cada uno de los cálculos (calcula_unidades, calcula_precio…).

Recuerde que a partir de la invocación de calcula_pedido el campo en_cesta de la posición cero de la cesta hay un TRUE significa que el pedido está hecho y no se pueden hacer modificaciones en la cesta (estará prohibido añadir, borrar productos o cambiar los datos de un producto).

Utilice la sección respuesta 1 para incluir cualquier comentario o aclaración.


RESPUESTA 1:




2. SEGUNDA CUESTIÓN:

Modifique el procedimiento (guarda_cesta), para que almacene también el producto de la posición 0. Recuerde que este procedimiento guardaba todos los productos de la cesta que se pasa como parámetro, en un fichero cuyo nombre también se pasaba como parámetro.

Recuerde que salvo el producto que ocupa la posición cero (que como ya hemos visto tiene un significado especial) todos los demás están en la cesta sólo si el campo en_cesta=TRUE.

Utilice la sección respuesta 2 para incluir cualquier comentario o aclaración.

RESPUESTA 2:





3. TERCERA CUESTIÓN:

Modifique el procedimiento (recupera_cesta) para que lea también el primer producto del fichero que almacena un pedido y lo meta en la posición 0 de la tabla.

A partir de ahora, si el pedido no ha sido realizado, es decir, si en el campo en_cesta de la posición cero no hay un TRUE, la cesta puede modificarse libremente con los procedimientos que tenemos definidos en la unidad anterior. Sin embargo, si este campo tiene el valor FALSE la cesta no podrá modificarse y, por tanto, será necesario realizar esta comprobación antes de intentar cualquier cambio.

Utilice la sección respuesta 3 para incluir cualquier comentario o aclaración.

RESPUESTA 3:






4. CUARTA CUESTIÓN:

Un fichero de texto llamado indice.txt va a contener los nombres de todos los ficheros que guardan cestas (pedidos). Incluya en el programa el mecanismo para que cada vez que se cree un pedido nuevo (una cesta nueva) se añada una línea al fichero indice.txt.

Utilice la sección respuesta 4 para incluir cualquier comentario o aclaración.

RESPUESTA 4:





5. QUINTA CUESTIÓN (opcional):

Codifique un procedimiento (pedido_entregado) que elimine los elementos de una cesta que ya ha sido entregada, eliminando el nombre del pedido del fichero indice.txt

Utilice la sección respuesta 5 para incluir cualquier comentario o aclaración.

RESPUESTA 5:





6. SEXTA CUESTIÓN (opcional):

Codifique un procedimiento (estadisticas_totales) que usando el fichero indice.txt calcule el número de pedidos realizados (pendientes de entrega) y el precio total (la suma de los precios de todos ellos). Recuerde que sólo están pedidas las cestas en las en la posición cero el campo en_cesta:=TRUE

Utilice la sección respuesta 6 para incluir cualquier comentario o aclaración.

RESPUESTA 6:






7. SEPTIMA CUESTIÓN (opcional):

Codifique un procedimiento (estadisticas_producto) que usando el fichero indice.txt calcule las unidades de determinado producto (cuyo nombre se pasa al procedimiento) que en un momento determinado están pedidas y pendientes de entrega. Recuerde que sólo están pedidas las cestas en las en la posición cero el campo en_cesta:=TRUE

Utilice la sección respuesta 7 para incluir cualquier comentario o aclaración.

RESPUESTA 7:





8. OCTAVA CUESTIÓN:

Incluya todo lo anterior en un programa que gestiona los pedidos de un supermercado.
Las opciones que se presentarán al usuario serán:

1. Mostrar nombres de cestas existentes.
Nombres incluidos en el fichero indice.txt
2. Abrir cesta de compra existente.
Alguna de las indicadas en el fichero indice.txt
3. Comenzar cesta de compra nueva.
4. Mostrar cesta actual.
5. Añadir producto a la cesta.
6. Eliminar producto de la cesta.
7. Modificar producto de la cesta.
8. Guardar cesta.
Preguntará el nombre y guardará la cesta en un fichero con dicho nombre e incluirá su nombre en indice.txt
9. Pedir cesta.
Se realizará efectivamente el pedido (calcula_pedido). Recuerde que hasta que no elija la opción “Guardar Cesta” no estaría realmente guardado en un fichero.
10. Salir del programa.
Se terminará la ejecución del programa. Y opcionalmente (sólo si usted lo desea).
11. Cesta entregada (opcional).
Se eliminará el pedido del fichero indice.txt
12. Estadísticas totales (opcional).
Muestra el resultado del procedimiento estadisticas_totales
13. Datos de un producto (opcional).
Pedirá el nombre del producto y usará estadísticas_producto

Codifique todo en un programa llamado ActividadFinal.pas y envíelo junto a los comentarios que considere oportunos realizados en este mismo fichero. Se recomienda realizar primero las cuestiones obligatorias y enviar el resultado para luego continuar con las opcionales en caso de desearlo.



Y esta basado en estos ejercicios:
A lo largo de esta actividad vamos a ir realizando varias cuestiones que irán componiendo, incrementalmente, un programa complejo que deberá enviar por correo electrónico en un fichero llamado Unidad8_1.pas, junto con las respuestas a las cuestiones. UTILICE LOS NOMBRES DE TIPOS, FUNCIONES, PROCEDIMIENTOS, CONSTANTES, ETC… QUE SE INDICAN EN EL ENUNCIADO.



1. PRIMERA CUESTIÓN:

Declare un tipo de registro llamado Producto para representar un producto dentro de una cesta de compra.

El producto debe tener campos para representar: El nombre, el número de unidades solicitadas, el precio por unidad y un campo booleano para indicar si el producto continua en la cesta (si en_cesta=TRUE significa que el producto está en la cesta, si en_cesta=FALSE significa que se ha eliminado).

Indique, DETALLADAMENTE, cómo ha declarado el tipo en la sección RESPUESTA 1. Para verificar que es correcto puede incluirlo en un pequeño programa y compilarlo para ver si no hay errores.

RESPUESTA 1:

Type
tRProducto=record
nombre:string;
numero:integer;
en_cesta:boolean
end;
Var
producto:tRProducto;




2. SEGUNDA CUESTIÓN:

Escriba un procedimiento (lee_producto) que rellene los campos de una variable del tipo Producto, pidiendo al usuario todos los datos salvo el valor de en_cesta que pondrá siempre a TRUE, esto indicará que el producto está en la cesta de la compra. Codifique otro procedimiento para mostrar por pantalla (escribe_producto) el valor de una variable del tipo Producto.

Incluya ambos procedimientos en un programa que los invoque desde su módulo principal. Si lo desea puede usar la sección de Respuesta 2 para realizar sus comentarios.

RESPUESTA 2:





3. TERCERA CUESTIÓN:

Defina un tipo llamado Cesta, como una tabla de elementos del tipo Producto, definido en la cuestión 1. La longitud máxima de elementos de la tabla estará definida en la constante TAMMAXCESTA, y los índices de la misma irán entre 0 y TAMMAXCESTA, de modo que el registro de índice 0 tendrá un uso especial (que veremos posteriormente).
Reserve la posición cero de la tabla para un uso especial y use a partir de ahora, sólo las posiciones desde 1 hasta TAMMAXCESTA.

Indique, DETALLADAMENTE, cómo ha definido este tipo en la sección de respuesta 3. Para verificar que es correcto puede incluir la definición en un pequeño programa y compilarlo.

RESPUESTA 3:





4. CUARTA CUESTIÓN:

Añada un procedimiento (inicializa_cesta) que reciba como parámetro una variable del tipo Cesta y la inicialice poniendo el campo en_cesta a FALSE en todas las posiciones de la misma. Esto indicará que todas las posiciones están libres.

Si lo desea puede usar la sección de Respuesta 4 para realizar sus comentarios.

RESPUESTA 4:





5. QUINTA CUESTIÓN:

Añada al programa de la actividad anterior, un procedimiento (mostrar_producto) que reciba un producto de la cesta de la compra como parámetro y lo muestre por pantalla.

Puede usar la sección Respuesta 5 para incluir sus comentarios.

RESPUESTA 5:





6. SEXTA CUESTIÓN:

Añada al programa de la actividad anterior un procedimiento (mostrar_cesta) que reciba una cesta de la compra como parámetro y muestre por pantalla todos los productos que están en la cesta (es decir aquellos en los que en_cesta=TRUE). UTILICE EL PROCEDIMIENTO DE LA CUESTIÓN ANTERIOR Y RECUERDE UTILIZAR LOS PROCEDIMIENTOS DE LAS ACTIVIDADES ANTERIORES ALLÍ DONDE PUEDA HACERLO.

Si lo desea puede usar la sección de Respuesta para realizar sus comentarios.

------------------------------------------------------------------------------------------------------------------------------------------------------
A lo largo de esta actividad vamos a ir realizando varias cuestiones que irán componiendo, incrementalmente, un programa complejo que deberá enviar por correo electrónico en un fichero llamado Unidad8_1.pas, junto con las respuestas a las cuestiones. UTILICE LOS NOMBRES DE TIPOS, FUNCIONES, PROCEDIMIENTOS, CONSTANTES, ETC… QUE SE INDICAN EN EL ENUNCIADO.



1. PRIMERA CUESTIÓN:

Declare un tipo de registro llamado Producto para representar un producto dentro de una cesta de compra.

El producto debe tener campos para representar: El nombre, el número de unidades solicitadas, el precio por unidad y un campo booleano para indicar si el producto continua en la cesta (si en_cesta=TRUE significa que el producto está en la cesta, si en_cesta=FALSE significa que se ha eliminado).

Indique, DETALLADAMENTE, cómo ha declarado el tipo en la sección RESPUESTA 1. Para verificar que es correcto puede incluirlo en un pequeño programa y compilarlo para ver si no hay errores.

RESPUESTA 1:

Type
tRProducto=record
nombre:string;
numero:integer;
en_cesta:boolean
end;
Var
producto:tRProducto;




2. SEGUNDA CUESTIÓN:

Escriba un procedimiento (lee_producto) que rellene los campos de una variable del tipo Producto, pidiendo al usuario todos los datos salvo el valor de en_cesta que pondrá siempre a TRUE, esto indicará que el producto está en la cesta de la compra. Codifique otro procedimiento para mostrar por pantalla (escribe_producto) el valor de una variable del tipo Producto.

Incluya ambos procedimientos en un programa que los invoque desde su módulo principal. Si lo desea puede usar la sección de Respuesta 2 para realizar sus comentarios.

RESPUESTA 2:





3. TERCERA CUESTIÓN:

Defina un tipo llamado Cesta, como una tabla de elementos del tipo Producto, definido en la cuestión 1. La longitud máxima de elementos de la tabla estará definida en la constante TAMMAXCESTA, y los índices de la misma irán entre 0 y TAMMAXCESTA, de modo que el registro de índice 0 tendrá un uso especial (que veremos posteriormente).
Reserve la posición cero de la tabla para un uso especial y use a partir de ahora, sólo las posiciones desde 1 hasta TAMMAXCESTA.

Indique, DETALLADAMENTE, cómo ha definido este tipo en la sección de respuesta 3. Para verificar que es correcto puede incluir la definición en un pequeño programa y compilarlo.

RESPUESTA 3:





4. CUARTA CUESTIÓN:

Añada un procedimiento (inicializa_cesta) que reciba como parámetro una variable del tipo Cesta y la inicialice poniendo el campo en_cesta a FALSE en todas las posiciones de la misma. Esto indicará que todas las posiciones están libres.

Si lo desea puede usar la sección de Respuesta 4 para realizar sus comentarios.

RESPUESTA 4:





5. QUINTA CUESTIÓN:

Añada al programa de la actividad anterior, un procedimiento (mostrar_producto) que reciba un producto de la cesta de la compra como parámetro y lo muestre por pantalla.

Puede usar la sección Respuesta 5 para incluir sus comentarios.

RESPUESTA 5:





6. SEXTA CUESTIÓN:

Añada al programa de la actividad anterior un procedimiento (mostrar_cesta) que reciba una cesta de la compra como parámetro y muestre por pantalla todos los productos que están en la cesta (es decir aquellos en los que en_cesta=TRUE). UTILICE EL PROCEDIMIENTO DE LA CUESTIÓN ANTERIOR Y RECUERDE UTILIZAR LOS PROCEDIMIENTOS DE LAS ACTIVIDADES ANTERIORES ALLÍ DONDE PUEDA HACERLO.

Si lo desea puede usar la sección de Respuesta para realizar sus comentarios.
------------------------------------------------------------------------------------------------------------------------------------------------------
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
-1
Responder

Ayuda con un programa

Publicado por ramon (2158 intervenciones) el 03/12/2015 12:32:10
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
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
{Mira esto puede encaminar te}
 
 program procesta;
   uses
      crt;
   const
      TAMMAXCESTA = 10;
      fitexto = 'indice.txt';
      pedidos = 'datosces.dat';
   type
 
       trproducto = record
             nombre : string;
             numero : integer;
           en_cesta : boolean;
             precio : real;
       end;
 
       cesta = array[0..TAMMAXCESTA] of trproducto;
 
       compra = record
          lacompra : cesta;
          produc : integer;
         end;
 
    Var
      producto : trproducto;
      ftext : text;
      abiert, nombres : string;
      cont : longint;
      f : file of compra;
      lacesta : compra;
 
 
      procedure Mostrar_nombres_cestas_existentes;
      begin
         assign(ftext,fitexto);
      {$I-} reset(ftext); {$I+}
      if ioresult <> 0 then
      begin
         clrscr;
         writeln('    Error De Archivo O No Existe');
         writeln('    Pulse Una Tecla');
         readkey;
      end
    else
       begin
          clrscr;
          writeln('    {Cestas Existentes} ');
           while not Eof(ftext) do
           begin
              read(ftext,nombres);
              writeln('    ',nombres);
           end;
           close(ftext);
           writeln('  Pulse Una Tecla');
           readkey;
        end;
      end;
 
    function Abrir_cesta_de_compra_existente : boolean;
    var
       ces : string;
       p, t : integer;
       cc, hh : longint;
       encon : boolean;
    begin
        clrscr;
        encon := false;
        writeln('   Entre Nombre De Cesta ');
        write('   Nombre : ');
        readln(ces);
        for t := 1 to length(ces) do
        ces[t] := upcase(ces[t]);
        assign(ftext,fitexto);
      {$I-} reset(ftext); {$I+}
      if ioresult <> 0 then
      begin
         clrscr;
         writeln('    Error De Archivo O No Existe');
         writeln('    Pulse Una Tecla');
         readkey;
      end
    else
       begin
          cc := 0;
          while not Eof(ftext) do
          begin
              read(ftext,nombres);
              for t := 1 to length(nombres) do
               nombres[t] := upcase(nombres[t]);
              if nombres = ces then
              begin
                 break;
              end;
              cc := cc + 1;
           end;
           close(ftext);
        assign(f,pedidos);
      {$I-} reset(f); {$I+}
      if ioresult <> 0 then
      begin
         clrscr;
         writeln('    Error De Archivo O No Existe');
         writeln('    Pulse Una Tecla');
         readkey;
      end
    else
       begin
           seek(f,cc);
           read(f,lacesta);
           close(f);
       end;
        Abrir_cesta_de_compra_existente := true;
        abiert := copy(ces,1,length(ces));
    end;
  end;
 
  procedure Comenzar_cesta_de_compra_nueva;
  var
    nomb : string;
    d, k : integer;
    tec : char;
    tot : real;
   begin
      clrscr;
      writeln('    ******  Entrada Cesta Nueva ******');
      writeln;
      writeln('   Entre Fecha dia/mes/ayo');
      write('     Fecha : ');
      readln(nomb);
      lacesta.lacompra[0].nombre := copy(nomb,1,length(nomb));
      k := 1;
    repeat
      write('   Nombre Producto : ');
      readln(lacesta.lacompra[k].nombre);
      write('   Cantidad Producto : ');
      readln(lacesta.lacompra[k].numero);
      write('   Precio del Producto : ');
      readln(lacesta.lacompra[k].precio);
      writeln;
      writeln('   Mas Entradas [S/N]');
      repeat
          tec := upcase(readkey);
      until tec in['S','N'];
      if tec = 'S' then
      begin
      k := k + 1;
      if k > TAMMAXCESTA then
      begin
        k := TAMMAXCESTA;
        writeln('   Tope De Entradas A Cesta');
        writeln('   Pulse Una Tecla');
        readkey;
      end;
    end;
    until tec = 'N';
    lacesta.lacompra[0].en_cesta := false;
    lacesta.lacompra[0].precio := 0;
    tot := 0;
    for d := 1 to k do
    begin
       tot := tot + lacesta.lacompra[d].precio * lacesta.lacompra[d].numero;
    end;
     lacesta.lacompra[0].precio := tot;
     lacesta.produc := k;
   end;
 
   procedure mostrar_cesta_actual;
   var
     c : integer;
   begin
      clrscr;
      writeln('    ***** La cesta Actual *****');
      writeln;
      for c := 1 to lacesta.produc do
      begin
      writeln('   Nombre   = ',lacesta.lacompra[c].nombre);
      writeln('   Cantidad = ',lacesta.lacompra[c].numero);
      writeln('   Precio   = ',lacesta.lacompra[c].precio:0:2);
      writeln;
      end;
      writeln;
      if lacesta.lacompra[0].precio > 0.0 then
      writeln('   Total    = ',lacesta.lacompra[0].precio:0:2);
      writeln('   Pulse Una Tecla');
      readkey;
   end;
 
   procedure anadir_producto_a_la_cesta;
   var
     d, posi : integer;
     tot : real;
   begin
      posi := lacesta.produc + 1;
      if posi <= TAMMAXCESTA then
      begin
        write('   Nombre Producto : ');
        readln(lacesta.lacompra[posi].nombre);
        write('   Cantidad Producto : ');
        readln(lacesta.lacompra[posi].numero);
        write('   Precio del Producto : ');
        readln(lacesta.lacompra[posi].precio);
      end;
        tot := 0;
        for d := 1 to posi do
        begin
        tot := tot + lacesta.lacompra[d].precio * lacesta.lacompra[d].numero;
       end;
        lacesta.lacompra[0].precio := tot;
        lacesta.produc := posi;
     end;
 
 
     procedure eliminar_producto_de_la_cesta;
     var
       t, i : integer;
       bus, nom : string;
       prod : trproducto;
       tot : real;
       begin
          if (lacesta.produc >= 1) and
             (lacesta.lacompra[0].en_cesta = false) then
          begin
          writeln('    Eliminar Producto De Cesta');
          writeln;
 
          write('   Entre Nombre Producto : ');
          readln(nom);
          for i := 1 to length(nom) do
          nom[i] := upcase(nom[i]);
          for t := 1 to lacesta.produc do
          begin
            bus := copy(lacesta.lacompra[t].nombre,1,
                        length(lacesta.lacompra[t].nombre));
            for i := 1 to length(bus) do
            bus[i] := upcase(bus[i]);
            if nom = bus then
            begin
              fillchar(lacesta.lacompra[t],sizeof(lacesta.lacompra[t]),0);
              for i := t + 1 to lacesta.produc do
              begin
                 prod := lacesta.lacompra[i];
                 lacesta.lacompra[i - 1] := prod;
              end;
              tot := 0;
              for t := 1 to lacesta.produc - 1 do
              begin
               tot := tot + lacesta.lacompra[t].precio * lacesta.lacompra[t].numero;
              end;
              lacesta.lacompra[0].precio := tot;
              lacesta.produc := t;
              break;
            end;
          end;
        end
     else
        begin
           writeln('   La Cesta Esta Vacia Pulse Una Tecla');
           readkey;
        end;
       end;
 
 
    procedure modificar_producto_de_la_cesta;
    var
      t, i : integer;
      bus, nom : string;
      te : char;
       tot : real;
      begin
          if (lacesta.produc >= 1) and
                 (lacesta.lacompra[0].en_cesta = false) then
          begin
          writeln('    Eliminar Producto De Cesta');
          writeln;
          write('   Entre Nombre Producto : ');
          readln(nom);
          for i := 1 to length(nom) do
          nom[i] := upcase(nom[i]);
          for t := 1 to lacesta.produc do
          begin
            bus := copy(lacesta.lacompra[t].nombre,1,
                        length(lacesta.lacompra[t].nombre));
            for i := 1 to length(bus) do
            bus[i] := upcase(bus[i]);
            if nom = bus then
            begin
               writeln('  Peroducto  1 = ',lacesta.lacompra[t].nombre);
               writeln('  Cantidad   2 = ',lacesta.lacompra[t].numero);
               writeln('  Precio     3 = ',lacesta.lacompra[t].precio);
            repeat
                te := readkey;
            until te in['1','2','3'];
            case te of
        '1' :  begin
                  write('   Nombre Producto : ');
                  readln(lacesta.lacompra[t].nombre);
               end;
        '2' : begin
                 write('   Cantidad Producto : ');
                 readln(lacesta.lacompra[t].numero);
              end;
        '3' : begin
                 write('   Precio del Producto : ');
                 readln(lacesta.lacompra[t].precio);
              end;
           end;
              tot := 0;
              for t := 1 to lacesta.produc do
              begin
               tot := tot + lacesta.lacompra[t].precio * lacesta.lacompra[t].numero;
              end;
              lacesta.lacompra[0].precio := tot;
              lacesta.produc := t;
            break;
            end;
          end;
         end;
      end;
 
    function estacesta(m : string) : boolean;
    var
      c : integer;
      we, mi : string;
      asi : boolean;
    begin
       asi := false;
       estacesta := false;
       we := copy(m,1,length(m));
       for c := 1 to length(we) do
       we[c] := upcase(we[c]);
       assign(ftext,fitexto);
      {$I-} reset(ftext); {$I+}
         if ioresult <> 0 then
         begin
           writeln('   Error de archivo o no existe Pulse Una Tecla');
           readkey;
         end
      else
         begin
           while not Eof(ftext) do
           begin
              read(ftext,nombres);
              for c := 1 to length(nombres) do
              nombres[c] := upcase(nombres[c]);
              if nombres = we then
              begin
                 asi := true;
                 break;
              end;
           end;
           close(ftext);
           estacesta := asi;
         end;
    end;
 
 
    procedure guardar_cesta;
    var
      nom : string;
     begin
        if lacesta.produc > 0 then
        begin
           writeln('   Guardar Cesta Actual');
           write('   Entre Nombre Cesta : ');
           readln(nom);
           if estacesta(nom) = false then
           begin
           assign(ftext,fitexto);
      {$I-} reset(ftext); {$I+}
         if ioresult <> 0 then
         begin
            rewrite(ftext);
            write(nom);
            close(ftext);
         end
       else
         begin
           Append(ftext);
           write(nom);
           close(ftext);
         end;
         assign(f,pedidos);
      {$I-} reset(f); {$I+}
         if ioresult <> 0 then
         begin
            lacesta.lacompra[0].en_cesta := true;
            rewrite(f);
            seek(f,0);
            write(f,lacesta);
            close(f);
         end
      else
         begin
            lacesta.lacompra[0].en_cesta := true;
            seek(f,filesize(f));
            write(f,lacesta);
            close(f);
         end;
         writeln('    Cesta Guardada Pulse Una Tecla');
         readkey;
       end
    else
       begin
          writeln('   La Cesta Esta Vacia Pulse Una Tecla');
          readkey;
         end;
        end
      else
         begin
            writeln('    La Cesta Nombre ',nom,' No Existe Pulse Una Tecla');
            readkey;
         end;
       end;
 
 
 
 
 
 
      procedure menu;
      var
        tec : char;
        sal : boolean;
      begin
         sal := false;
         cont := 0;
      repeat
          clrscr;
          writeln('   ***** Menu Jeneral *****');
          writeln('   ------------------------');
          writeln;
          writeln('   A = Mostrar nombres de cestas existentes');
          writeln('   B = Abrir cesta de compra existente');
          writeln('   C = Comenzar cesta de compra nueva');
          writeln('   D = Mostrar cesta actual');
          writeln('   E = A¤adir producto a la cesta');
          writeln('   F = Eliminar producto de la cesta');
          writeln('   G = Modificar producto de la cesta');
          writeln('   H = Guardar cesta');
          writeln('   I = Pedir cesta');
          writeln('   J = Cesta entregada');
          writeln('   K = Estadisticas totales');
          writeln('   L = Datos de un producto');
          writeln('   S = Salir del programa');
          writeln;
          writeln('    <<<< Elija Opcion >>>>');
       repeat
            tec := upcase(readkey);
       until tec in['A','B','C','D','E','F','G','H','I','J','K','L','S'];
       clrscr;
     case tec of
  'A' : Mostrar_nombres_cestas_existentes;
  'B' : begin
          if Abrir_cesta_de_compra_existente then
          writeln('   >>> Cesta Abierta Nombre : ',abiert,' <<<');
        end;
  'C' : Comenzar_cesta_de_compra_nueva;
  'D' : mostrar_cesta_actual;
  'E' : anadir_producto_a_la_cesta;
  'F' : eliminar_producto_de_la_cesta;
  'G' : modificar_producto_de_la_cesta;
  'H' : guardar_cesta;
  'I' :;
  'J' :;
  'K' :;
  'L' :;
  'S' : sal := true;
    end;
      until sal = 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

Ayuda con un programa

Publicado por Juanma (1 intervención) el 13/09/2020 20:00:50
Muy buenas, lo he compilado pero tiene dos errores:


247 for t := 1 to lacesta.produc - 1 do

310 for t := 1 to lacesta.produc do



no encuentro el por que, muchas gracias.
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