Pascal/Turbo Pascal - EJERCICIO DE REGISTROS Y ARRAYS

 
Vista:

EJERCICIO DE REGISTROS Y ARRAYS

Publicado por Sara (6 intervenciones) el 04/02/2015 20:27:29
Tengo que hacer este ejercicio pero me quede atascada en los dos puntos ultimos, pongo todo lo que pide desde el principio para saber de que va.

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).
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.
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.
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).
Añada al programa de la actividad anterior un procedimiento (cuenta_productos) que reciba como parámetro, entre otros posibles, una variable del tipo Cesta y cuente las posiciones ocupadas, es decir, las que tienen el campo en_cesta=TRUE devolviendo este valor en un parámetro. Así sabremos cuantos productos tiene la cesta

Añada un procedimiento (busca_libre) que reciba como parámetro, entre otros POSIBLES, una variable de tipo Cesta y busque la primera posición de la Cesta en la que el campo en_cesta=FALSE, devolviendo esta posición o 0 en el caso de que no encuentre ninguna posición libre (es decir ninguna posición con el campo en_cesta=FALSE).

Añada un procedimiento (incluir_producto_en_cesta) que introduzca un nuevo producto en la cesta de la compra, si hay alguna posición libre, o presente el mensaje de “Cesta llena” si no hay posición libre.

Este procedimiento debe hacer uso de los procedimientos busca_libre y lee_producto, que ya ha definido en cuestiones y actividades anteriores.

*************
HASTA AHORA HICE LO SIGUIENTE

Const
Tammaxcesta=3;

Type
Tproducto=record
nombre:string;
num_unidades:integer;
precio_unidad:real;
en_cesta:boolean;
end;
Tcesta = array [0..Tammaxcesta] of Tproducto;

Var
producto:Tproducto; (* Variable del tipo producto*)
micesta:Tcesta; (* variable del tipo cesta*)
contador:integer;

Procedure lee_producto (VAR producto:Tproducto);
Begin
write('Introduzca el nombre del producto: ');
readln(producto.nombre);
write('Introduzca el numero de unidades: ');
readln(producto.num_unidades);
write('Introduzca el precio por unidad: ');
readln(producto.precio_unidad);
End;

Procedure inicializa_cesta;
var
i:integer;
Begin
for i:= 1 to TAMMAXCESTA do
begin
micesta [i]. en_cesta := false;
micesta [i]. nombre := '';
micesta [i]. num_unidades:= 0;
micesta [i]. precio_unidad:= 0.0;
end;
end;

Procedure lee_cesta (VAR unacesta:Tcesta);
Var
i:integer;
Begin
producto.en_cesta:=true;
For i:= 1 to Tammaxcesta do
begin
lee_producto(unacesta[i]);
end;
End;

Procedure cuenta_productos (VAR contador:integer; micesta:Tcesta);
Var
i:integer;
Begin
For i:= 1 to Tammaxcesta do
begin
if producto.en_cesta = true then
contador:=CONTADOR + --------> aqui es donde no se lo que hay que hacer


Ya me contestaron a esto pero no hay que introducir nuevos productos, hay que hacerlo con los productos que tenemos.
Saludos y gracias
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

EJERCICIO DE REGISTROS Y ARRAYS

Publicado por ramon (2158 intervenciones) el 04/02/2015 23:45:53
Procedure cuenta_productos (VAR contador:integer; micesta:Tcesta);
Var
i:integer;
Begin
For i:= 1 to Tammaxcesta do
begin
if producto.en_cesta = true then
contador:=CONTADOR + 1;
end;
end;

contador indicara los productos encontrados en la cesta
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

EJERCICIO DE REGISTROS Y ARRAYS

Publicado por ramon (2158 intervenciones) el 06/02/2015 14:12:52
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
[Mira si esto te ayuda]
 
program lacesta;
 uses
    crt;
  const
     TAMMAXCESTA = 4;
 
  type
   string100 = string[100];
   Producto = record
       nombre : string[100]; {Nombre del ploducto}
       numero : integer; {Cantidad de productos}
       precio : real; {Precio por unidad del producto}
       campo  : boolean; {Existe producto true se anulo false}
     end;
 
  var
    cesta : array[0..TAMMAXCESTA] of producto;
     cont : integer;
    produ : string100;
 
    procedure entradacesta(var c : producto);
    begin
       clrscr;
       writeln('**** Entrada Producto A Cesta ****');
       with c do
       begin
          write('  Nombre Producto            : ');
          readln(nombre);
          write('  Cantidad De Productos      : ');
          readln(numero);
          write('  Precio Unidad Del Producto : ');
          readln(precio);
          campo := true;
       end;
    end;
 
   procedure presentacesta(c : producto);
   begin
      with c do
      begin
         writeln('  Producto      = ',nombre);
         writeln('  Cantidad      = ',numero);
         writeln('  Precio Unidad = ',Precio:0:2);
         if campo = true then
         writeln('  La Cesta Esta Activa')
       else
         writeln('  La Cesta Esta Inactiva');
      end;
        writeln;
        writeln('  Pulse Una Tecla');
        readkey;
   end;
 
   procedure inicializa_cesta(var c : producto);
   begin
       with c do
       begin
          nombre := ' ';
          numero := 0;
          precio := 0.0;
          campo := false;
       end;
   end;
 
   procedure mostrar_producto(n : integer);
   begin
   with cesta[n] do
      begin
         writeln('  Producto      = ',nombre);
         writeln('  Cantidad      = ',numero);
         writeln('  Precio Unidad = ',Precio:0:2);
         if campo = true then
         writeln('  La Cesta Esta Activa')
       else
         writeln('  La Cesta Esta Inactiva');
      end;
        writeln;
        writeln('  Pulse Una Tecla');
        readkey;
     end;
 
   procedure mostrar_cesta(c : array of producto;t : integer);
   begin
      if c[t].campo = true then
      begin
       with c[t] do
       begin
         writeln('  Producto      = ',nombre);
         writeln('  Cantidad      = ',numero);
         writeln('  Precio Unidad = ',Precio:0:2);
         if campo = true then
         writeln('  La Cesta Esta Activa')
       else
         writeln('  La Cesta Esta Inactiva');
      end;
        writeln;
        writeln('  Pulse Una Tecla');
        readkey;
      end;
   end;
 
  function cuenta_productos(c : array of producto) : integer;
  var
     tiene, t : integer;
  begin
      tiene := 0;
      cuenta_productos := 0;
      for t := 1 to TAMMAXCESTA do
      begin
      if c[t].campo = true then
      tiene := tiene + 1;
      end;
       cuenta_productos := tiene;
  end;
 
  function busca_libre(lib : array of producto) : integer;
  var
    unl, i : integer;
    begin
       busca_libre := 0;
       for i := 1 to tammaxcesta do
       begin
          if lib[i].campo = false then
          begin
             unl := i;
             break;
          end;
       end;
         busca_libre := unl;
    end;
 
   procedure incluir_producto_en_cesta(var ent : array of producto);
   var
      li : integer;
   begin
      li := 0;
      li := busca_libre(ent);
      if li > 0 then
      begin
         clrscr;
         writeln('**** Entrada Nuevo Producto A Cesta ****');
         with ent[li] do
         begin
          write('  Nombre Producto            : ');
          readln(nombre);
          write('  Cantidad De Productos      : ');
          readln(numero);
          write('  Precio Unidad Del Producto : ');
          readln(precio);
          campo := true;
       end;
      end
   else
       begin
          writeln('  La Cesta Esta Llena Pulse Una Twcla');
          readkey;
       end;
   end;
 
  function buscar_producto(ces : array of producto; cu : string100) : integer;
  var
     pos, i : integer;
     prod : string100;
     m : integer;
  begin
      for m := 1 to length(cu) do
      begin
      cu[m] := upcase(cu[m]);
      end;
      buscar_producto := 0;
      for i := 1 to tammaxcesta do
      begin
         for m := 1 to length(ces[i].nombre) do
         begin
         prod[m] := upcase(ces[i].nombre[m]);
         prod[0] := chr(m);
         end;
         if prod = cu then
         begin
            pos := i;
            break;
         end;
      end;
       buscar_producto := pos;
  end;
 
  procedure eliminar_producto_de_cesta(var dd : array of producto;
                                        cual : string100);
  var
    t, h : integer;
    tempo : string100;
   begin
      for h := 1 to length(cual) do
      cual[h] := upcase(cual[h]);
      for h := 1 to tammaxcesta do
      begin
         for t := 1 to length(dd[h].nombre) do
         begin
           tempo[t] := upcase(dd[h].nombre[t]);
           tempo[0] := chr(t);
        end;
         if tempo = cual then
         begin
             fillchar(dd[h],sizeof(Producto),0);
             break;
         end;
      end;
   end;
 
   procedure modificar_producto(var mp : array of producto);
   var
     h, t : integer;
     opc : char;
   begin
     writeln('  Modificacion Producto Cesta ');
     writeln;
     for h := 1 to tammaxcesta do
     begin
       writeln('  ',h,' = ',mp[h].nombre);
     end;
     writeln;
     writeln('   Elija Opcion ');
     repeat
        opc := readkey;
     until opc in['1'..'9'];
     t := ord(opc) - 48;
     mostrar_producto(t);
     writeln;
     write('  Producto      : ');
     readln(mp[t].nombre);
     write('  Cantidad      : ');
     readln(mp[t].numero);
     write('  Precio Unidad : ');
     readln(mp[t].Precio);
     mp[t].campo := true;
   end;
 
 
   procedure menu;
   var
     sal : boolean;
     tes : char;
   begin
      sal := false;
      cont := 1;
    repeat
       clrscr;
       writeln('**** Menu Jeneral ****');
       writeln;
       writeln(' 1 = A¤adir producto a la cesta');
       writeln(' 2 = Eliminar producto de la cesta');
       writeln(' 3 = Mostrar cesta');
       writeln(' 4 = Modificar producto de la cesta');
       writeln(' 5 = Contar productos de la cesta');
       writeln(' 6 = Salir del programa');
       writeln;
       writeln('     Elija Opcion ');
     repeat
         tes := readkey;
     until tes in['1','2','3','4','5','6'];
    case tes of
  '1' : begin
           if cont < tammaxcesta then
           begin
           entradacesta(cesta[cont]);
           end;
           cont := cont + 1;
           if cont > tammaxcesta then
           begin
           writeln('  La Cesta Esta Llena Pulse Una Tecla');
           readkey;
           end;
        end;
  '2' : begin
         write('  Entra Nombre Producto A Anular : ');
         readln(produ);
         eliminar_producto_de_cesta(cesta,produ);
        end;
  '3' : begin
          write('  Entra Nombre Producto A Mostrar : ');
          readln(produ);
          mostrar_cesta(cesta,buscar_producto(cesta,produ));
        end;
  '4' : modificar_producto(cesta);
  '5' : begin
        writeln('*** Productos En La Cesta ***');
        writeln;
        write('  Tiene = ',cuenta_productos(cesta));
        writeln;
        writeln('   Pulse Una Tecla  ');
        readkey;
        end;
  '6' : sal := true;
    end;
    until sal = true;
  end;
 
 
 
  begin
    cont := 1;
    while cont < TAMMAXCESTA + 1 do
    begin
     inicializa_cesta(cesta[cont]);
     cont := cont + 1;
     end;
     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