Pascal/Turbo Pascal - Proceso para eliminar producto

 
Vista:

Proceso para eliminar producto

Publicado por hatedpig (1 intervención) el 11/02/2014 16:47:26
El ejercicio es el siguiente:

1. PRIMERA CUESTIÓN:
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. SEGUNDA CUESTIÓN:

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. TERCERA CUESTIÓN:

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. CUARTA CUESTIÓN:

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. QUINTA CUESTIÓN:

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. SEXTA CUESTIÓN:

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. SEPTIMA CUESTIÓN:
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.

////

Mi problema surge en el quinto apartado. Os dejo el código creado hasta ahora:

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
program cestacompra;
uses crt;
 
CONST
 
tammaxcesta = 3;
 
TYPE
 
producto = record
	nombre : string;
	unidades : integer;
	precio : real;
	en_cesta : boolean;
 
	END;
 
cesta = array[1..tammaxcesta] of producto;
 
VAR
 
cestaprod : cesta;
huecolibre : integer;										{Para poder conectar procedimientos}
 
PROCEDURE lee_producto(VAR cestaprod : cesta);				{Procedimiento para leer datos}
 
VAR
 
i : integer;
 
BEGIN
 
clrscr;
 
 
 
writeln('// ESCRIBA LOS DATOS DE LOS PRODUCTOS //');
 
 
for i := 1 to tammaxcesta do
 
	begin
 
	cestaprod[i].en_cesta := true;
 
	writeln();
	write('> Nombre: ');							readln(cestaprod[i].nombre);
	write('> Unidades solicitadas: ');				readln(cestaprod[i].unidades);
	write('> Precio: ');							readln(cestaprod[i].precio);
 
	END;
 
END;
 
PROCEDURE escribe_producto(cestaprod : cesta);				{Procedimiento para mostrar datos}
 
VAR
 
i : integer;
 
BEGIN
clrscr;
 
writeln('// DATOS DE LOS PRODUCTOS //');
 
 
for i := 1 to tammaxcesta do
 
	begin
 
	writeln();
	writeln('- El nombre del producto es: ', cestaprod[i].nombre);
	writeln('- Las unidades solicitadas: ', cestaprod[i].unidades);
	writeln('- El precio del producto es : ', cestaprod[i].precio:4:2);
 
	END;
 
END;
 
PROCEDURE inicializa_cesta(VAR cestaprod : cesta);			{Procedimiento para dejar posiciones libres}
 
VAR
 
i : integer;
 
BEGIN
 
for i := 1 to tammaxcesta do
 
	begin
 
	cestaprod[i].en_cesta := false;
 
	end;
 
END;
 
PROCEDURE mostrar_cesta(VAR cestaprod : cesta);				{Procedimiento que muestra productos de la cesta}
 
VAR
 
i : integer;
 
BEGIN
 
writeln();
writeln('// PRODUCTOS EN LA CESTA //');
 
for i := 1 to tammaxcesta do
 
	begin
 
	if (cestaprod[i].en_cesta = true) then
 
			writeln();
			write('> ', cestaprod[i].nombre);
 
	END;
 
writeln();
 
END;
 
PROCEDURE cuenta_productos(VAR cestaprod : cesta);			{Procedimiento que cuenta posiciones ocupadas}
 
VAR
 
i : integer;
cuenta : integer;
 
BEGIN
 
cuenta := 0;
 
for i := 1 to tammaxcesta do
 
	begin
 
	if (cestaprod[i].en_cesta = true) then
		cuenta := cuenta + 1;
 
	END;
 
writeln();
writeln('> Hay ' , cuenta, ' productos en la cesta');
 
END;
 
PROCEDURE busca_libre(VAR cestaprod : cesta);				{Procedimiento para buscar huecos libres y ocupar}
 
VAR
 
i : integer;
libres : integer;
 
BEGIN
 
libres := 0;
 
for i := 1 to tammaxcesta do
 
	begin
 
	if (cestaprod[i].en_cesta = false) then
		libres := libres + 1;
 
	END;
 
huecolibre := libres;
 
END;
 
PROCEDURE incluir_producto_en_cesta(VAR cestaprod : cesta; huecolibre : integer);	 {Procedimiento para añadir nuevos productos}
 
BEGIN
 
busca_libre(cestaprod);
 
if (huecolibre = 0) then
writeln ('> La cesta esta llena')
else
lee_producto(cestaprod);
 
 
END;
 
PROCEDURE buscar_producto(VAR cestaprod : cesta);			{Procedimiento para buscar producto}
 
VAR
 
posicion : integer;
datopos : boolean;
nombre : string;
 
BEGIN
 
posicion := 1;
datopos := false;
 
writeln();
write('> Producto a buscar: ');				readln(nombre);
 
while (posicion <= tammaxcesta) and (datopos = false) do
 
	begin
 
	if (cestaprod[posicion].nombre = nombre) then
	datopos := true
	else posicion := posicion + 1;
 
	end;
 
	if (datopos = true) then
	begin
	writeln('El producto buscado esta en la posicion ',posicion);
	end
	else
	posicion := 0;
 
	if (posicion = 0) then writeln ('El producto buscado no esta en la cesta');
 
END;
 
PROCEDURE eliminar_producto_de_cesta(VAR cestaprod : cesta);						{Procedimiento para eliminar producto}
 
VAR
 
pro : string;
x : integer;
 
BEGIN
 
write('Nombre del producto a eliminar: ');		readln(pro);
 
x := buscar_producto(pro);
if (x > 0) then
cestaprod[x].en_cesta := false
else writeln('Producto no encontrado');
 
END;
 
 
 
 
 
 
BEGIN															{Módulo principal}
 
inicializa_cesta(cestaprod);
lee_producto(cestaprod);
mostrar_cesta(cestaprod);
cuenta_productos(cestaprod);
busca_libre(cestaprod);
incluir_producto_en_cesta(cestaprod, huecolibre);
buscar_producto(cestaprod);
eliminar_producto_de_cesta(cestaprod);
 
 
readkey;
 
END.

///

Al compilar obtengo:

unidad8_2.pas(235,25) Error: Call by var for arg no. 1 has to match exactly: Got "ShortString" expected "cesta"
unidad8_2.pas(269) Fatal: There were 1 errors compiling module, stopping
Fatal: Compilation aborted

///

Me gustaría saber donde está el fallo en el procedimiento de la cuestión cinco. 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

Proceso para eliminar producto

Publicado por ramon (2158 intervenciones) el 24/02/2014 12:08:19
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
{A ver si esta modificaciones en tu programa te sirven}
 
program cestacompra;
uses crt;
 
CONST
 
tammaxcesta = 3;
 
TYPE
 
producto = record
nombre : string;
unidades : integer;
precio : real;
en_cesta : boolean;
 
END;
 
cesta = array[1..tammaxcesta] of producto;
 
VAR
 
cestaprod : cesta;
huecolibre : integer;	 {Para poder conectar procedimientos}
 
PROCEDURE lee_producto(VAR cestaprod : cesta);	 {Procedimiento para leer datos}
 
VAR
 
i : integer;
 
BEGIN
 
clrscr;
 
 
 
writeln('// ESCRIBA LOS DATOS DE LOS PRODUCTOS //');
 
 
for i := 1 to tammaxcesta do
 
begin
 
cestaprod[i].en_cesta := true;
 
writeln;
write('> Nombre: ');	 readln(cestaprod[i].nombre);
write('> Unidades solicitadas: ');	 readln(cestaprod[i].unidades);
write('> Precio: ');	 readln(cestaprod[i].precio);
 
END;
 
END;
 
PROCEDURE escribe_producto(cestaprod : cesta);	 {Procedimiento para mostrar datos}
 
VAR
 
i : integer;
 
BEGIN
clrscr;
 
writeln('// DATOS DE LOS PRODUCTOS //');
 
 
for i := 1 to tammaxcesta do
 
begin
 
writeln;
writeln('- El nombre del producto es: ', cestaprod[i].nombre);
writeln('- Las unidades solicitadas: ', cestaprod[i].unidades);
writeln('- El precio del producto es : ', cestaprod[i].precio:4:2);
 
END;
 
END;
 
PROCEDURE inicializa_cesta(VAR cestaprod : cesta);	 {Procedimiento para dejar posiciones libres}
 
VAR
 
i : integer;
 
BEGIN
 
for i := 1 to tammaxcesta do
 
begin
 
cestaprod[i].en_cesta := false;
 
end;
 
END;
 
PROCEDURE mostrar_cesta(VAR cestaprod : cesta);	 {Procedimiento que muestra productos de la cesta}
 
VAR
 
i : integer;
 
BEGIN
 
writeln;
writeln('// PRODUCTOS EN LA CESTA //');
 
for i := 1 to tammaxcesta do
 
begin
 
if (cestaprod[i].en_cesta = true) then
 
writeln;
write('> ', cestaprod[i].nombre);
 
END;
 
writeln;
 
END;
 
PROCEDURE cuenta_productos(VAR cestaprod : cesta);	 {Procedimiento que cuenta posiciones ocupadas}
 
VAR
 
i : integer;
cuenta : integer;
 
BEGIN
 
cuenta := 0;
 
for i := 1 to tammaxcesta do
 
begin
 
if (cestaprod[i].en_cesta = true) then
cuenta := cuenta + 1;
 
END;
 
writeln;
writeln('> Hay ' , cuenta, ' productos en la cesta');
 
END;
 
PROCEDURE busca_libre(VAR cestaprod : cesta);	 {Procedimiento para buscar huecos libres y ocupar}
 
VAR
 
i : integer;
libres : integer;
 
BEGIN
 
libres := 0;
 
for i := 1 to tammaxcesta do
 
begin
 
if (cestaprod[i].en_cesta = false) then
libres := libres + 1;
 
END;
 
huecolibre := libres;
 
END;
 
PROCEDURE incluir_producto_en_cesta(VAR cestaprod : cesta; huecolibre : integer);	 {Procedimiento para añadir nuevos productos}
 
BEGIN
 
busca_libre(cestaprod);
 
if (huecolibre = 0) then
writeln ('> La cesta esta llena')
else
lee_producto(cestaprod);
 
 
END;
 
 function buscar_producto(VAR cestaprod : cesta; cual : string) : integer;	 {Procedimiento para buscar producto}
 
VAR
 
posicion : integer;
datopos : boolean;
nombre : string;
 
BEGIN
 
posicion := 1;
datopos := false;
 
writeln;
write('> Producto a buscar: ');	 readln(nombre);
 
while (posicion <= tammaxcesta) and (datopos = false) do
 
begin
 
if (cestaprod[posicion].nombre = nombre) then
datopos := true
else posicion := posicion + 1;
 
end;
 
if (datopos = true) then
begin
writeln('El producto buscado esta en la posicion ',posicion);
end
else
posicion := 0;
 
if (posicion = 0) then writeln ('El producto buscado no esta en la cesta');
 
END;
 
PROCEDURE eliminar_producto_de_cesta(VAR cestaprod : cesta);	 {Procedimiento para eliminar producto}
 
VAR
 
pro : string;
x : integer;
 
BEGIN
 
write('Nombre del producto a eliminar: ');	 readln(pro);
 
x := buscar_producto(cestaprod,pro);
if (x > 0) then
cestaprod[x].en_cesta := false
else writeln('Producto no encontrado');
 
END;
 
 
 
 
 
 
BEGIN	 {Módulo principal}
 
inicializa_cesta(cestaprod);
lee_producto(cestaprod);
mostrar_cesta(cestaprod);
cuenta_productos(cestaprod);
busca_libre(cestaprod);
incluir_producto_en_cesta(cestaprod, huecolibre);
buscar_producto(cestaprod,'Patatas');
eliminar_producto_de_cesta(cestaprod);
 
 
readkey;
 
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