Pascal/Turbo Pascal - Ejercicio Pascal

 
Vista:

Ejercicio Pascal

Publicado por Jenifer (1 intervención) el 27/05/2013 13:34:13
Hola a todos, soy nueva por aquí.
Estoy haciendo un curso en Pascal y me he atascado en uno en concreto.
Llevo días dándole vueltas y no saco nada en claro, me urge tenerle bien hecho para poder presentarme al examen del curso.

Os dejo el enunciado, que, creo que alguien de por aqui tambien preguntó por él en su día.

1. 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.

2. 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).

3. 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.

4. Añada al programa anterior un procedimiento (buscar_producto) que reciba como parámetros, entre otros POSIBLES, el nombre de un producto y devuelva la posición en la cesta del producto o cero si no se encuentra.

5. Añada al programa anterior un procedimiento (eliminar_producto_de_cesta) que pregunta el usuario el nombre del producto a eliminar, busca el producto en la cesta (usando el procedimiento buscar_producto) y, si lo encuentra, pone el campo en_cesta a FALSE en la posición que ocupaba el producto. En caso de no encontrarlo mostrará el mensaje de “Producto no encontrado”.

6. Añada al programa anterior un procedimiento (modificar_producto) que pregunte al usuario el nombre del producto a modificar, lo busque y, si lo encuentra, le pregunte al usuario qué campo quiere cambiar, qué valor quiere asignarle y realice la actualización. En caso de no encontrar el producto, debe presentar el mensaje “Producto no encontrado”. Use los procedimientos ya creados en actividades anteriores siempre que pueda.

7.Añada todos los resultados de las cuestiones anteriores en un programa cuyo módulo principal:
1) Declare e inicialice una cesta de la compra.
2) Le presente al usuario las siguientes opciones:
a. Añadir producto a la cesta.
b. Eliminar producto de la cesta.
c. Mostrar cesta.
d. Modificar producto de la cesta.
e. Contar productos de la cesta.
f. Salir del programa.

3) Llame al procedimiento necesario hasta que se escoja la opción de salir del programa.
Se recomienda utilizar un tamaño de cesta pequeño para facilitar la depuración del programa.


Aquí muestro el codigo que ya tengo, no me funciona básicamente nada, salvo el añadir producto y los mensajes de error de que la cesta está vacía.
Aparte, al ejecutarle, me envía dos FALSE y luego muestra el menú

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
program cesta_compra2;
 
const
     tammaxcesta = 2;
 
type
    tproducto = record
    nombre : string[80];
    numero : integer;
    precio : real;
    en_cesta : boolean;
   end;
producto = array[1..tammaxcesta] of tproducto;
 
var
   ini : producto;
   cesta : producto;
   cont : integer;
   resp : char;
 
procedure lee_producto;
          var
             t : integer;
          begin
               if cont < 1 then
                  begin
                       cont := 1;
                       for t := 1 to tammaxcesta do    {creamos un bucle para que pida estos datos hasta llegar al maximo de la cesta}
                           begin
                                writeln('Producto numero : ',t);
 
                                write('Nombre producto: ');
                                readln(cesta[t].nombre);
 
                                write('Unidades del producto: ');
                                readln(cesta[t].numero);
 
                                write('Precio por unidad: ');
                                readln(cesta[t].precio);
 
                                cesta[t].en_cesta := true;  {Este valor lo ponemos nosotros para que siempre sea true}
 
                                writeln();
                           end;
                       cont := t;  {Establecemos el valor de cont como t para finalizar el bucle}
 
                       writeln();
                       writeln('**** Fin de entradas ****');    {Este mensaje es opcional, para informar de que hemos terminado de añadir productos}
                  end
               else
                   writeln('<<<<< Cesta llena.>>>>>');      {Si el contador se pasa del maximo muestra este mensaje para continuar}
          end;
 
procedure escribre_producto(pro : producto);
var
             d : integer;    {Declaramos la variable d para contador}
          begin
               if cont > 0 then       {Si cont es mayor que 0}
                  begin
                       writeln('Productos en la cesta');      {Escribe el mensaje y comienza un bucle}
                       for d := 1 to tammaxcesta do
                           begin
                                write('<<Nombre: ',pro[d].nombre,' >>');    {Para cada valor de d hasta el maximo recorre el array de producto para mostrar las caracteristicas de cada uno}
                                writeln();
                                write('<<Unidades: ',pro[d].numero,' >>');
                                write('<<Precio/ud: ',pro[d].precio:0:2,' >>');
                                writeln();
                           end;
                  end
               else                           {Por el contrario, si no es mayor de 0, debe mostrar el mensaje de cesta vacia}
                   writeln(' <<<< Cesta vacia >>>>');
          end;
 
procedure inicializa_cesta (VAR ini:producto);
 
var
i : integer;
begin
for i:= 1 to tammaxcesta do
writeln (ini[i].en_cesta);
end;
 
procedure mostrar_producto( VAR prod:producto);
 
var
i:integer;
begin
for i:=1 to tammaxcesta do
write (prod[i].nombre);
end;
 
procedure mostrar_cesta(cesta_compra:producto);
Var
i:integer;
begin
for i:=1 to tammaxcesta do
write (cesta_compra[i].en_cesta);
end;
 
function cuenta_productos(ini : producto) : integer;
  Var
   i : integer;
   c : integer;
  begin
    c := 0;
   for i := 1 To tammaxcesta do
   if ini[i].en_cesta= true then
   c := c + 1;
   cuenta_productos:= c;
 end;
 
function busca_libre (buslib: producto): integer;
  Var
    i : integer;
    c : integer;
  begin
    c := 0;
   for i := 1 to tammaxcesta do
   if buslib[i].en_cesta = false then
   begin
      c := i;
   end;
    if c > 0 then
    begin
    end
 else
    begin
     busca_libre := 0;
    end;
  end;
 
procedure incluir_producto_en_cesta(cest : producto);
  var
    li : integer;
  begin
      li := busca_libre(cest);
      lee_producto;
  end;
 
function buscar_producto(nomb : string) : integer;
  var
     s : integer;
     sal : boolean;
  begin
     s := 1;
     sal := false;
     while (s < tammaxcesta) and (sal = false) do
     begin
        if ini[s].nombre = nomb then
        sal := true
      else
        s := s + 1;
     end;
      if sal = true then
      buscar_producto := s
    else
      buscar_producto := 0;
  end;
 
procedure eliminar_producto_de_cesta;
  var
    pro : string;
    vc : integer;
  begin
     write('  Entre Nombre del Producto a Eliminar : ');
     readln(pro);
     vc := buscar_producto(pro);
     if vc > 0 then
     ini[vc].en_cesta := false
   else
     writeln('Producto no encontrado');
  end;
 
procedure modificar_producto;
  var
    pro : string;
    vc : integer;
  begin
     write('Producto a Modificar : ');
     readln(pro);
     vc := buscar_producto(pro);
     if vc > 0 then
        begin
             repeat
                   writeln('¿Que quieres modificar?');
                   writeln;
                   writeln(' 1 = Nombre');
                   writeln(' 2 = Cantidad');
                   writeln(' 3 = Precio');
                   writeln(' 4 = Ninguno');
                   readln(resp);
 
              case resp of
                   '1' : begin
                           write('Nuevo Nombre: ');
                           readln(ini[vc].nombre);
                          end;
                   '2' : begin
                           write('Nueva Cantidad: ');
                           readln(ini[vc].numero);
                         end;
                   '3' : begin
                           write('Nuevo Precio: ');
                           readln(ini[vc].precio);
                         end;
 
              end;
             until  resp = '4';
        end
     else
      writeln('Producto no encontrado');
     end;
 
  procedure iniciocesta;
  var
    opcion2 : char;
  begin
       inicializa_cesta(ini);
     repeat
   writeln(' ****  Menu Cesta ****');
   writeln;
   writeln(' 1 = Añadir producto');
   writeln(' 2 = Eliminar producto');
   writeln(' 3 = Mostrar cesta');
   writeln(' 4 = Modificar producto');
   writeln(' 5 = Contar productos');
   writeln(' 6 = Salir');
   writeln;
   write('<<< Elija Opcion >>>');
   readln(opcion2);
     case opcion2 of
   '1' : begin
         lee_producto;
         incluir_producto_en_cesta(ini);
         end;
   '2' : eliminar_producto_de_cesta;
   '3' : mostrar_cesta(ini);
   '4' : modificar_producto;
   '5' : cuenta_productos(ini);
    end;
    until opcion2 = '6';
  end;
 
begin
    iniciocesta;
end.


Me muestra estos errores:

135 / 5 unidad~3.pas
Note: Local variable LI is assigned but never used
55 / 11 unidad~3.pas
Hint: Local proc ESCRIBE_PRODUCTO is not used
84 / 11 unidad~3.pas
Hint: Local proc MOSTRAR_PRODUCTO is not used


Muchas gracias de antemano

Un saludo
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 Pascal

Publicado por ramon (2158 intervenciones) el 28/05/2013 13:04:37
Mira los errores que tienes se derivan de los procedimientos writeln que tu colocas writeln() esto
en pascal es error a no ser que pongas writeln(' ') que es aceptado correctamente por pascal.
Modifica esas lineas que tienes así.

Esto lógica mente si estas empleando pascal 7 o otra versión de turbo pascal no free pascal.
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