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ú
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
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


0