Pascal/Turbo Pascal - ayuda ejercicio pascal

   
Vista:

ayuda ejercicio pascal

Publicado por Davo decomarsantona@hotmail.com (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 (2072 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 (2072 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 (2072 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