Pascal/Turbo Pascal - ayuda ejercicio pascal

 
Vista:

ayuda ejercicio pascal

Publicado por Davo (26 intervenciones) el 11/11/2012 10:58:55
Hola, soy nuevo en esto de programar en pascal y estoy atascado en un ejercicio, podria alguien ayudarme a solucionarlo?.Muchas gracias.
El enunciado es este:
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)

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

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

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.

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.

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.

7. SÉPTIMA 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 pide al usuario que rellene la cesta completa (uno a uno cada producto de la cesta desde la posición 1 hasta TAMMAXCESTA).
3) Muestre por pantalla todos los productos de la cesta.

Se recomienda utilizar un tamaño de cesta pequeño para facilitar la depuración del programa.
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

ayuda ejercicio pascal

Publicado por romon (2158 intervenciones) el 12/11/2012 16:32:19
{A ver si esto sirve de ayuda}

uses
crt;
const
tammaxcesta = 5;

type
regcesta = record
nombre : string[80];
numero : integer;
precio : real;
en_cesta : boolean;
end;
producto = array[0..tammaxcesta] of regcesta;

var
cesta : producto;
nu, cont : integer;
tec : char;

procedure lee_producto;
var
t : integer;
begin
if cont < 1 then
begin
cont := 1;
for t := 1 to tammaxcesta do
begin
clrscr;
writeln(' Entrada Cesta N§ : ',t);
writeln;
write(' Entre Nombre : ');
readln(cesta[t].nombre);
write(' Entre Numero : ');
readln(cesta[t].numero);
write(' Entre Precio : ');
readln(cesta[t].precio);
cesta[t].en_cesta := true;
end;
cont := t;
clrscr;
writeln('**** Fin De Entradas Pulse [Enter] ****');
end
else
begin
clrscr;
writeln('<<<<< La Cesta Este Llena Pulse [Enter] >>>>>');
end;
readln;
end;

procedure inicializa_cestas(ces : producto);
var
i : integer;
begin
for i := 0 to tammaxcesta do
ces[i].en_cesta := false;
clrscr;
writeln('Cesta Inicializada Pulse [Enter]');
readln;
end;

procedure mostrar_productos(pro : Producto);
var
y, d : integer;
begin
clrscr;
if cont > 0 then
begin
y := 3;
gotoxy(4,1);write('Nombre N§ De Prodectos Precio');
for d := 1 to tammaxcesta do
begin
gotoxy(4,y);write(pro[d].nombre);
gotoxy(27,y);write(pro[d].numero);
gotoxy(41,y);write(pro[d].precio:0:2);
y := y + 1;
end;
end
else
writeln(' <<<< La Cesta esta Vacia Pulse [Enter] >>>>');
readln;
end;

procedure mostrar_cesta(ces : integer);
begin
clrscr;
if cont > 0 then
begin
gotoxy(4,1);write('Nombre N§ De Prodectos Precio');
gotoxy(4,3);write(cesta[ces].nombre);
gotoxy(27,3);write(cesta[ces].numero);
gotoxy(41,3);write(cesta[ces].precio:0:2);
writeln('***** Pulse [Rnter] *****');
end
else
writeln('<<<<< La Cesta Esta Vacia Pulse [Rnter] >>>>>');
readln;
end;

begin
cont := 0;
repeat
clrscr;
writeln(' **** Menu General ****');
writeln;
writeln(' 1 : Inicialice una Cestas');
writeln(' 2 : Rellene la Cesta Completa');
writeln(' 3 : Muestre Todos los Productos de la Cesta');
writeln(' 4 : Muestre Un Productos de la Cesta');
writeln(' 5 : salir');
writeln;
writeln(' <<< Elija Opcion >>>');
repeat
tec := readkey;
until tec in['1','2','3','4','5'];
case tec of
'1' : inicializa_cestas(cesta);
'2' : lee_producto;
'3' : mostrar_productos(cesta);
'4' : begin
clrscr;
write(' Entre Numero Cesta : ');
readln(nu);
if (nu > tammaxcesta) or (cont < 1) then
begin
clrscr;
writeln('Error de Numero o Cesta Vacia Pulse [Enter]');
readln;
exit;
end
else
mostrar_cesta(nu);
end;
end;
until tec = '5';
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 ejercicio pascal

Publicado por davo (26 intervenciones) el 12/11/2012 17:43:47
muchas gracias me ha orientado mucho para terminar el ejercicio, lo he echo de otra manera pero me ha servido de mucho tu ayuda,gracias de nuevo.
Tengo otros ejercicios que presentar que derivan del anterior, me echas una mano?

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.
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 ejercicio pascal

Publicado por ramon (2158 intervenciones) el 12/11/2012 20:49:18
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
{ Fijate en esto que te dejo segun tus datos considero que seran funciones y no procedimientos,
  otra  cuestion tendria que saver como as tratado los datos para andar por el mismo camino
que tu de lo contrario podemos liar lo do mal ya me comentaras algo.}
 
function cuenta_productos(ddd : producto) : integer;
 var
   b, c : integer;
   begin
     c := 0;
     for b := 1 to cont do
     if ddd[b].en_cesta = true then
     c := c + 1;
     cuenta_productos := c;
   end;
 
  function busca_libre(lll : producto) : integer;
  var
    c, vv : integer;
    begin
       c := 0;
       for vv := 1 to cont do
       if lll[vv].en_cesta = false then
       begin
       c := vv;
       break;
       end;
       if c > 0 then
       begin
          busca_libre := c;
       end
    else
       begin
          busca_libre := 0;
       end;
    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 ejercicio pascal

Publicado por Davo (26 intervenciones) el 13/11/2012 18:52:33
te mando como he tratado yo los datos desde el principio esto seria para el primer ejercicio que me ayudaste

program CEScom;

const
TAMMAXCESTA=3;

Type
tproducto=record
nombre:string;
numunidades:integer;
precio_unidad:real;
en_cesta:boolean;
end;
tabcesta=array[1..TAMMAXCESTA] of tproducto;

Var
ini:tabcesta;
prod:tabcesta;

Procedure Lee_producto(Var produc:tproducto); (*procedimiento de lectura*)
Begin
Write('Nombre del producto: ');
Readln(produc.nombre);
Write('Numero de unidades: ');
Readln(produc.numunidades);
Write('Precio de cada unidad: ');
Readln(produc.precio_unidad);
End;


Procedure escribre_producto(produc:tproducto);(*procedimiento de lectura*)
Writeln('Nombre: ',produc.nombre);
Writeln('Numero de unidades: ');
Writeln('Precio de cada unidad;: ',produc.precio_unidad);
End;




Procedure inicializa_cesta (Var ini:Tabcesta);

Var
en_cesta:boolean;
i:integer;
begin
en_cesta:=false;
for i:= 1 to TAMMAXCESTA do
writeln (ini[i].en_cesta;
end;

Procedure mostrar_producto( Var prod:tabcesta);

Var
i:integer;
begin
for i:=1 to TAMMAXCESTA do
write (prod[i]);
end;


Procedure mostrar_cesta(cesta_compra:tabcesta);
Var
en_cesta:boolean;
i:integer;
begin
en_cesta:=true;
for i:=1 to TAMMAXCESTA do
write (cesta_compra[i].en_cesta;
end;
begin
write(mostra_cesta);
end.



begin
writeln (inicializa_cesta);
writeln( lee_producto);
writeln (mostra_cesta);
writeln;

end.

esto seria para el segundo ejercicio los dos primeros puntos. Espero que te sirva muchas gracias por tu ayuda.

Function cuenta_productos ( cuenpro:tabcesta)of integer:

Var
i:integer;
c:integer;

begin

c:=0;
for i:= 1 To TAMMAXCESTA do
if cuenpro[i].en_cesta= true then
c:=c+1;
cuenta_productos:= c;

end;

------------------------------------------------------------------------------------------------------------------------------
Function busca_libre (buslib: tabcesta): 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;
break;
end;
if c> 0 then
end
else
begin
busca_libre:=0;
end;
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 ejercicio pascal

Publicado por davo (26 intervenciones) el 14/11/2012 19:41:53
puedes ayudarme a terminar el ejercicio me queda desde el punto 3
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

ayuda ejercicio pascal

Publicado por ramon (2158 intervenciones) el 15/11/2012 17:22:13
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
{A ver si esto te sirve de ayuda}
 
program CEScom;
  uses
   crt;
  const
     TAMMAXCESTA=3;
 
  Type
    tproducto = record
        nombre : string;
   numunidades : integer;
 precio_unidad : real;
      en_cesta : boolean;
   end;
  tabcesta = array[1..TAMMAXCESTA] of tproducto;
 
  Var
   ini : tabcesta;
   prod : tabcesta;
   cest : tproducto;
 
Procedure Lee_producto(Var produc:tproducto); (*procedimiento de lectura*)
Begin
Write('Nombre del producto: ');
Readln(produc.nombre);
Write('Numero de unidades: ');
Readln(produc.numunidades);
Write('Precio de cada unidad: ');
Readln(produc.precio_unidad);
End;
 
 
Procedure escribre_producto(produc:tproducto);(*procedimiento de lectura*)
begin
Writeln('Nombre: ',produc.nombre);
Writeln('Numero de unidades: ');
Writeln('Precio de cada unidad;: ',produc.precio_unidad);
End;
 
 
 
 
Procedure inicializa_cesta (Var ini:Tabcesta);
 
Var
en_cesta:boolean;
i:integer;
begin
en_cesta:=false;
for i:= 1 to TAMMAXCESTA do
writeln (ini[i].en_cesta);
end;
 
Procedure mostrar_producto( Var prod:tabcesta);
 
Var
i:integer;
begin
for i:=1 to TAMMAXCESTA do
write (prod[i].nombre);
end;
 
 
Procedure mostrar_cesta(cesta_compra:tabcesta);
Var
en_cesta:boolean;
i:integer;
begin
en_cesta:=true;
for i:=1 to TAMMAXCESTA do
write (cesta_compra[i].en_cesta);
end;
 
  Function cuenta_productos(ini : tabcesta) : 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: tabcesta): 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;
      break;
   end;
    if c > 0 then
    begin
    end
 else
    begin
     busca_libre := 0;
    end;
  end;
 
  procedure incluir_producto_en_cesta(cest : tabcesta);
  var
    li : integer;
  begin
      li := busca_libre(cest);
      Lee_producto(cest[li]);
  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
     clrscr;
     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;
    rr : char;
  begin
     clrscr;
     write('  Entre Nombre del Producto a Eliminar : ');
     readln(pro);
     vc := buscar_producto(pro);
     if vc > 0 then
     begin
        writeln('  Elija Producto a Modificar ');
        writeln;
        writeln(' 1 = Nombre');
        writeln(' 2 = Cantidad');
        writeln(' 3 = Precio');
        writeln(' 4 = Ninguno');
        repeat
 
        until rr in['1','2','3','4'];
     case rr of
   '1' : begin
            write('  Entre Nuevo Nombre : ');
            readln(ini[vc].nombre);
         end;
   '2' : begin
            write('  Entre Nueva Cantidad : ');
            readln(ini[vc].numunidades);
         end;
   '3' : begin
            write('  Entre Nuevo Precio : ');
            readln(ini[vc].precio_unidad);
         end;
     end;
     end
   else
      writeln('Producto no encontrado');
  end;
 
  procedure iniciocesta;
  var
    gg : char;
    w : integer;
  begin
       w := 1;
       inicializa_cesta(ini);
     repeat
      clrscr;
   writeln(' ****  Menu Cesta ****');
   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
       gg := readkey;
   until gg in['1','2','3','4','5','6'];
     case gg of
   '1' : begin Lee_producto(ini[w]); w := w + 1; end;
   '2' : eliminar_producto_de_cesta;
   '3' : mostrar_cesta(ini);
   '4' : modificar_producto;
   '5' : cuenta_productos(ini);
    end;
    until gg = '6';
  end;
 
begin
    clrscr;
    iniciocesta;
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

ayuda ejercicio pascal

Publicado por Davo (26 intervenciones) el 15/11/2012 21:08:14
Muchas gracias por tu ayuda, ahora lo tengo mucho mas claro.
Espero poder aportar ayuda algun dia yo, mientras no me quedara mas remedio que pedirla.
Gracias por todo. Saludos.
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 ejercicio pascal

Publicado por hatedpig (1 intervención) el 11/02/2014 15:52:04
Hay un fallo en el proceso de eliminar producto. Al intentar compilar se obtiene:

Error: Call by var for arg no. 1 has to match exactly: Got "ShortString" expected ...
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
sin imagen de perfil
Val: 35
Ha disminuido 1 puesto en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

ayuda ejercicio pascal

Publicado por Enrique Martin (15 intervenciones) el 26/02/2019 20:11:21
Aquí otra solución para ayudar a comprender como funcionan los registros:

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
Program      CestaMenuRegistro;
 
uses
 crt;
 
Const
 Tammaxcesta=3; //Constante para designar el tamagno de la cesta
 
Type
 Producto=record  //Variable que almacena las caracteristica del producto
	nombre:string;
	solicita:integer;
	precio:real;
	en_cesta:boolean;
 end;
  (*Declaramos el tipo array de producto que nos pìde el ejercicio donde cada
   espacio del array es un tipo producto con sus respectivas variables*)
 
 tCesta= array [0..Tammaxcesta] of producto;
 
var
   (*Definimos igualmente las variables a usar a lo largo del programa, el
   ejercicio nos obligaba a la creación de una variable de tipo tCesta*)
 
 Carrito:tCesta;   //Variable que contiene un array del record producto
 opcion:char;      //Para el bucle
 
 
  (*Declaramos el procedimiento que nos pide el ejerccio para modificar un
  valor dentro de los datos que contiene la tabla, en este caso a la
  variable en_cesta la pasamos a false para inicializar la cesta, pues
  si el campo en_cesta esta en false significa que no hay producto*)
 
Procedure Inicializar_Cesta(VAR InicioCarrito:tCesta;initammaxcesta:integer);
var
 i:integer;
 
begin
 (*Utlizamos un bucle for-do para recorrer todo el array y modificar en cadena
  el atributo en toda la cesta*)
 For i:= 1 to Initammaxcesta do
  begin
   if InicioCarrito[i].en_cesta = true then
    begin
      InicioCarrito[i].en_cesta:=false;
    end;
  end;
end;
 
(*Procedimiento que nos permite contar los productos y detectar los espacios
  libres en el array, ahora necesitamos saber el valor de la variable
  en_cesta*)
Procedure Cuenta_Productos(CuentaCarrito:tCesta;CuentaTammaxcesta:integer);
var
 i:integer;
 Espaciocupado:integer;  //Contador de espacios ocupados
 
Begin
 Espaciocupado:=0;
 for i:= 1 to CuentaTammaxcesta do
  begin
   if CuentaCarrito[i].en_cesta = true then
   inc(Espaciocupado);
  end;
 writeln('Se estan usando: ',Espaciocupado,' huecos de la cesta');
 writeln;
end;
 
(*El procedimiento nos va a permitir averiguar los productos que estan en la
  cesta*)
Procedure Leer_Producto(VAR Leecarrito:tCesta; LeeTammaxcesta:integer);
var
 i:integer;
 stock:char;
 
Begin
  (*Utilizamos el bucle for-do para introducir los datos en la tabla de registro*)
  For i:= 1 to LeeTammaxcesta do
     begin
      if Leecarrito[i].en_cesta = false then
        begin
         writeln('Vamos a introducir los datos del producto');
         writeln('Introduzca el nombre');
         readln(Leecarrito[i].nombre);
         writeln('Introduzca las unidades solicitadas');
         readln(Leecarrito[i].solicita);
         writeln('Introduzca el precio');
         readln(Leecarrito[i].precio);
         writeln('¿Hay stock?: S/N');
         readln(stock);
         case stock of
                's','S':
                        Leecarrito[i].en_cesta:=true;
                'n','N':
                        Leecarrito[i].en_cesta:=false;
         end;
        end;
    end;
end;
 
 (*Mediante este procedimiento localizamos un determinado producto de la cesta
  para poder eliminarlo*)
Procedure Buscar_Producto(VAR LocalizaPro:tCesta;TammaxcestaLo:integer);
var
 i:integer;
 NombreProducto:string[10];
 encontrado:boolean;
 opcion:char;
 
Begin
 writeln ('Escriba el nombre del producto que desea encontrar: ');
 readln(NombreProducto);
 encontrado:=false;
 
 For i:= 1 to TammaxcestaLo do
   if pos(NombreProducto, localizapro[i].nombre) > 0 then
    begin
     encontrado:=true;
     writeln('En la posicion ',i,' se encuentra: ',LocalizaPro[i].nombre);
     writeln('Quiere elimnar el producto: S/N: ',LocalizaPro[i].nombre);
     readln(opcion);
     case opcion of
                's','S':
                        LocalizaPro[i].en_cesta:=false;
                'n','N':
                        LocalizaPro[i].en_cesta:=true;
    end;
   end;
 
 if not encontrado then
 writeln('Producto no encontrado');
 
end;
 
(*Reutilizamos el procedimiento de buscar un producto para poder eliminarlo*)
 
Procedure Eliminar_Producto_de_la_cesta (VAR EliCarrito:tCesta;EliTammaxcesta:integer);
 
begin
 Buscar_Producto (EliCarrito,EliTammaxcesta);
 
end;
 
 
 (*Procedimiento que nos permite modificar los distintos campos que tiene
  un producto dentro de la cesta*)
Procedure Modificar_Producto(Var ModCarrito:tCesta;ModTammaxcesta:integer);
var
 i:integer;
 NombreProducto:string[10];
 encontrado:boolean;
 opcion:char;
 stock:char;
 
Begin
 writeln ('Escriba el nombre del producto que desea modificar: ');
 readln(NombreProducto);
 encontrado:=false;
 
 For i:= 1 to ModTammaxcesta do
 (*La funcion pos nos permite averiguar donde se encuentra un determinado
   numero de caracteres*)
   if pos(NombreProducto, ModCarrito[i].nombre) > 0 then
    begin
     encontrado:=true;
     writeln('Eliga la opcion a modificar: '     );
     writeln('1: Nombre. ');
     writeln('2: unidades. ');
     writeln('3: Precio. ');
     writeln('4: Stock. ');
     readln(opcion);
 
     case opcion of
       '1' :
            begin
             writeln('Escriba el nuevo nombre: ');
             readln(ModCarrito[i].nombre);
            end;
       '2' :
            begin
             writeln('Escriba el nuevo numero de unides: ');
             readln(ModCarrito[i].solicita);
            end;
        '3' :
            begin
             writeln('Escriba el nuevo precio: ');
             readln(ModCarrito[i].precio);
            end;
        '4' :
            begin
             writeln('Hay stock?: S/N: ');
             readln(stock);
             case stock of
                's','S':
                        Modcarrito[i].en_cesta:=true;
                'n','N':
                        Modcarrito[i].en_cesta:=false;
             end;
           end;
 
    end;
   end;
 
 if not encontrado then
 writeln('Producto no encontrado');
 
end;
 
 
(*Ahora solo mostramos los productos que tienen stock, es decir el campo
  en_cesta esta en true*)
Procedure Mostrar_Cesta(VerCarrito:tCesta;VerTammaxcesta:integer);
var
i:integer;
 
begin
 for i:= 1 to Vertammaxcesta do
  begin
   if Vercarrito[i].en_cesta = true then
     begin
      writeln('El nombre del producto es: ',VerCarrito[i].nombre);
      writeln('La cantidad solicitada es: ',VerCarrito[i].solicita,' unidades.');
      writeln('El precio es: ',VerCarrito[i].precio:2:2,' euros.');
      writeln('Existencias:',VerCarrito[i].en_cesta);
     end;
  end;
end;
 
begin
 
 Inicializar_Cesta(carrito,Tammaxcesta);
 
 (*Incluimos un repetir hasta que lo decida el usuario*)
 Repeat
 
 (*Implementamos un menu para desarrollar todos los procedimientos que hemos
   desarrollado*)
 writeln('Elige la opcion que desee realizar: ');
 writeln('1: Anadir producto a la cesta ');
 writeln('2: Eliminar producto de la cesta ');
 writeln('3: Mostrar cesta ');
 writeln('4: Modifica producto de la cesta ');
 writeln('5: Contar productos de la cesta ');
 writeln('6: Salir del programa ');
 readln(opcion);
 
 case opcion of
   '1' :Leer_Producto(Carrito,Tammaxcesta);
   '2' :Eliminar_Producto_de_la_cesta(Carrito,Tammaxcesta);
   '3' :Mostrar_Cesta(Carrito,Tammaxcesta);
   '4' :Modificar_Producto(Carrito,Tammaxcesta);
   '5' :Cuenta_Productos(Carrito,Tammaxcesta);
   '6' : end;
 
 until opcion = '6';
 
 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

ayuda ejercicio pascal

Publicado por Carol (2 intervenciones) el 27/03/2019 16:07:56
Tengo programa:

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
Program CestaDeCompras;
 
uses
 
crt;
 
 
Const
 
 Tammaxcesta=3;
 
 
Type
 
 Producto=record
 
	nombre:string;
 
	numero_solicita:integer;
 
	precio:real;
 
	en_cesta:boolean;
 
 end;
 
 (*Tabla de producto*)
 
 Cesta= array [1..Tammaxcesta] of producto;
 
 
 
var
 
 (*Definimos las variables *)
 
 Carrito:Cesta;
 
 Mercancia:producto;
 
 i: integer;
 
 producto_en_cesta: string;
 
 
 
Procedure Lee_Producto(VAR Mercancia:producto);
 
Begin
 
     writeln('Introduzca los datos del producto');
 
     writeln('Introduzca el nombre');
 
     readln(Mercancia.nombre);
 
     writeln('Introduzca las unidades solicitadas');
 
     readln(Mercancia.numero_solicita);
 
     writeln('Introduzca el precio');
 
     readln(Mercancia.precio);
 
     Mercancia.en_cesta := true;
 
end;
 
 
Procedure Escribe_Producto(Mercancia:producto);
 
begin
 
	writeln('Su product es: ',Mercancia.nombre);
 
	writeln('El numero de unidades solicitadas:',Mercancia.numero_solicita);
 
	writeln('El precio por unidad: ',Mercancia.precio:0:2);
 
 
 
end;
 
 
 (* el procedimiento para inicializar la cesta*)
 
 
procedure inicializa_cesta(VAR Carrito:cesta);
 
var
 
i:integer;
 
begin
 
  For i:= 1 to Tammaxcesta do
 
     begin
 
         Carrito[i].en_cesta:=false;
 
     end;
 
end;
 
 
 
(*Mostramos los productos que tiene la tabla*)
 
 
Procedure Mostrar_Producto(var Mercancia: producto);
 
  begin
       Mercancia.nombre:= 'El nombre del producto';
 
       Mercancia.numero_solicita:= 0;
 
       Mercancia.precio:= 0.00;
 
       Mercancia.en_cesta:= true;
 
       writeln('Su producto es: ',Mercancia.nombre);
 
       writeln('El numero de unidades solicitadas: ',Mercancia.numero_solicita);
 
       writeln('El precio por unidad: ',Mercancia.precio:0:2);
 
      if (Mercancia.en_cesta=true) then
 
        writeln('El producto esta en la cesta.');
 
end;
 
 
 
(* campo en_cesta esta en true*)
 
Procedure mostrar_cesta(var Carrito:Cesta);
 
var
 
i:integer;
 
begin
 
 for i:= 1 to Tammaxcesta do
 
  begin
 
   if Carrito[i].en_cesta = true then
 
     begin
 
      mostrar_producto(carrito[i]);
 
     end
     		else
 
		begin
 
			writeln ('Carrito vacio');
 
			writeln;
 
		end;
 
    writeln;
 
  end;
 
end;
 
begin
 
 (* iniciamos el programa*)
 
 Lee_Producto(Mercancia);
 
 writeln;
 
 Escribe_Producto(Mercancia);
 
 readln;
 
 clrscr;
 
 Inicializa_cesta(Carrito);
 
 Mostrar_Producto(Mercancia);
 
 readln;
 clrscr;
 
for i:=1 to tammaxcesta do
 
      begin
 
       write('Introduzca el nombre: ');
 
       readln(Carrito[i].nombre);
 
       write('Introduzca las unidades solicitadas: ');
 
       readln(Carrito[i].numero_solicita);
 
       write('Introduzca el precio: ');
 
       readln(Carrito[i].precio);
 
       write('El producto esta en la cesta? (responda con "s" o "n"): ');
 
       readln(producto_en_cesta);
 
         if (producto_en_cesta='s' ) then
 
            Carrito[i].en_cesta:=true
 
         else
 
            Carrito[i].en_cesta:=false;
 
         writeln;
 
     end;
 
clrscr;
 
 Mostrar_Cesta(Carrito);
 
 readln;
 
end.

Me piden modificar esta programa que sea asi:

- Escribe Producto: También debe mostrar el valor de "en_cesta"

- Mostrar Producto: Es un procedimiento para reutilizar código por lo que únicamente debe invocar a "escribe_producto"

No entiendo como cambiarlo, alguen puede ayudarme?
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