Pascal/Turbo Pascal - ayuda ejerc pascal

 
Vista:
sin imagen de perfil
Val: 6
Ha aumentado su posición en 2 puestos en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

ayuda ejerc pascal

Publicado por oscar (64 intervenciones) el 12/11/2012 22:40:20
De esta ya no pido mas ayuda...lo prometo pero me queda esto como ultimo de todos..
Para esta actividad debe reutilizar los tipos (Producto, Cesta…) y todos los procedimientos que considere necesario de la unidad anterior.

1. PRIMERA CUESTIÓN:

Defina un fichero binario en el que cada elemento del fichero sea de tipo Producto.

Codifique un procedimiento (guarda_cesta) que guarda todos los productos de una cesta de la compra, que se pasa como parámetro, en un fichero cuyo nombre también se pasa como parámetro.

Tenga en cuenta que salvo el producto que ocupa la posición cero (que como ya veremos tiene un significado especial) todos los demás están en la cesta sólo si el campo en_cesta=TRUE, si este campo es FALSE no necesitamos, por tanto, guardar ese producto en el fichero.


2. SEGUNDA CUESTIÓN:

Codifique un procedimiento (recupera_cesta) que lea de un fichero de elementos de tipo producto, cuyo nombre se pasa como parámetro JUNTO CON OTROS QUE CONSIDERE NECESARIO, todos los productos que tenga almacenados y los guarde en una variable del tipo cesta que también se pasa como parámetro. Asegúrese de que no se sobrepasarán los límites de la cesta intentando introducir más de TAMMAXCESTA.


3. TERCERA CUESTIÓN:

Codifique un módulo principal en el que reutilizando los resultados de cuestiones y actividades anteriores (procedimientos de lectura y escritura de ficheros, presentación, modificación de datos de una cesta…), se muestre al usuario el menú propuesto en la actividad 2 de la unidad 6 (Unidad6_2_4.pas) y se ejecuten las acciones pertinentes a cada opción.
Tenga en cuenta que si el usuario elige:
1. Abrir cesta de compra existente: se preguntará al usuario el nombre de la cesta (que será el nombre del fichero que la contiene).
2. Comenzar cesta de compra nueva: se creará una cesta desde cero.
5. Guardar cesta: se pedirá al usuario el nombre del fichero donde guardar la cesta.
6. Pedir cesta: se mostrará la cesta actual.
7. Salir del programa: se terminará la ejecución del programa.

y se tiene q reutilizar lo q proceda de aqui

program cestacompra;

uses crt;

const
TAMMAXCESTA = 3;

type
Producto = record
nombreproduct : string[25];
numerounidadessolic :integer;
preciounidad : real;
en_cesta : boolean;
end;

tIndice = 0..TAMMAXCESTA;
tBase = Producto;
Cesta = array[tIndice] of tBase;

var
c:Cesta;

procedure lee_producto(var p:Producto); {var, modificamos el registro, insertamos información}
begin

write('Dime el nombre del producto: ');
readln(p.nombreproduct);
write('Dime el numero de unidades solicitadas: ');
readln(p.numerounidadessolic);
write('Dime el precio de la unidad: ');
readln(p.preciounidad);
p.en_cesta := true;

end;


procedure escribe_producto(p:Producto);
begin


writeln('Nombre del producto: ', p.nombreproduct);
writeln('Numero de unidades: ', p.numerounidadessolic);
writeln('Precio de la unidad: ', p.preciounidad:0:2);
write('El producto esta en cesta?: ');
if p.en_cesta then
writeln('si')
else
writeln('no');
end;



procedure inicializa_cesta(var c:Cesta);
var i:integer;
begin

{Empezamos en 1 porque el 0 está reservado.}
for i:=1 to TAMMAXCESTA do
c[i].en_cesta := false;


end;

procedure mostrar_cesta(c:Cesta);
var i:integer;
begin

for i:=1 to TAMMAXCESTA do begin
writeln;
if c[i].en_cesta then
escribe_producto(c[i]);
writeln;
end;

end;

procedure rellenar_cesta(var c:Cesta);
var i:integer;
begin

for i:=1 to TAMMAXCESTA do begin
writeln('Rellene el producto ', i, ' de su cesta:');
lee_producto(c[i]);
writeln;
end;

end;

begin

inicializa_cesta(c);
rellenar_cesta(c);

writeln('La lista de productos de su cesta es: ');
mostrar_cesta(c);
readln;
END.

mil gracias de verdad..me urge bastante
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 ejerc pascal

Publicado por ramon (2158 intervenciones) el 13/11/2012 16:15:47
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
{Mira a ver si esto 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 : array[1..10] of producto;
   nn, nu, cont : integer;
   tec : char;
 
 procedure lee_producto(ces, n : integer);
 var
   t : integer;
   td : char;
 begin
     repeat
      clrscr;
      writeln('    Entrada Cesta N§ : ',n);
      writeln;
      write('   Entre Nombre Producto : ');
      readln(cesta[ces][n].nombre);
      write('   Entre Cantidad : ');
      readln(cesta[ces][n].numero);
      write('   Entre Precio Unidad : ');
      readln(cesta[ces][n].precio);
      cesta[ces][t].en_cesta := true;
      writeln;
      writeln('  Desea Entrar Mas Productos En La Cesta [S/N]');
      repeat
          td := upcase(readkey);
      until td in['S','N'];
      if td = 'S' then
      n := n + 1;
     until (n > tammaxcesta) or (td = 'N');
     if n > tammaxcesta then
     begin
     clrscr;
     writeln('**** Fin De Entradas Pulse [Enter] ****');
     end;
 end;
 
 procedure inicializa_cestas(ces : integer);
 var
   i : integer;
 begin
     if ces > 10 then
     begin
        writeln('  Revasado N§ de Cestas Pulse [Enter]');
        readln;
     end
   else
      begin
     for i := 0 to tammaxcesta do
     begin
     cesta[ces][i].en_cesta := false;
     cesta[ces][i].nombre := ' ';
     end;
     clrscr;
     writeln('Cesta Inicializada Pulse [Enter]');
     readln;
    end;
 end;
 
 procedure mostrar_productos(pro : integer);
 var
   y, d : integer;
 begin
     clrscr;
     if cont > 1 then
     begin
     y := 3;
     gotoxy(4,1);write('Nombre          N§ De Prodectos      Precio');
     for d := 1 to tammaxcesta do
     begin
     if cesta[pro][d].nombre = ' ' then
     begin
     end
   else
     begin
     gotoxy(4,y);write(cesta[pro][d].nombre);
     gotoxy(27,y);write(cesta[pro][d].numero);
     gotoxy(41,y);write(cesta[pro][d].precio:0:2);
     y := y + 1;
     end;
    end;
   end
  else
     writeln(' <<<< La Cesta esta Vacia Pulse [Enter] >>>>');
     readln;
 end;
 
 procedure mostrar_cesta(ces : integer);
 var
    p : integer;
 begin
     clrscr;
     write('   Entre Posicion A Visualizar : ');
     readln(p);
     if (p < tammaxcesta) and (cesta[ces][p].nombre > ' ') then
     begin
     if cont > 1 then
     begin
     gotoxy(4,1);write('Nombre          N§ De Prodectos      Precio');
     gotoxy(4,3);write(cesta[ces][p].nombre);
     gotoxy(27,3);write(cesta[ces][p].numero);
     gotoxy(41,3);write(cesta[ces][p].precio:0:2);
     writeln;
     writeln('***** Pulse [Rnter] *****');
     end
   else
     writeln('<<<<< La Cesta Esta Vacia Pulse [Rnter] >>>>>');
     readln;
    end;
 end;
 
 function cuenta_productos(ddd : integer) : integer;
 var
   b, c : integer;
   begin
     c := 0;
     for b := 1 to tammaxcesta do
     if cesta[ddd][b].en_cesta = true then
     c := c + 1;
     cuenta_productos := c;
   end;
 
  function busca_libre(lll : integer) : integer;
  var
    c, vv : integer;
    begin
       c := 0;
       for vv := 1 to tammaxcesta do
       if cesta[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;
 
  procedure incluir_producto_en_cesta;
  var
    n, gg : integer;
  begin
      writeln('  Entre N§ Cesta : ');
      readln(n);
      gg := busca_libre(n);
      lee_producto(n,gg);
 
  end;
 
 
 begin
    cont := 1;
 repeat
   clrscr;
   writeln('  **** Menu General ****');
   writeln;
   writeln('  1 : Inicialice una Cestas');
   writeln('  2 : Rellenar Una Cesta ');
   writeln('  3 : Muestre Todos los Productos de Una Cesta');
   writeln('  4 : Muestre Un Productos de la Cesta');
   writeln('  5 : Nuevo Producto En Cesta');
   writeln('  6 : salir');
   writeln;
   writeln(' <<< Elija Opcion >>>');
   repeat
   tec := readkey;
   until tec in['1','2','3','4','5','6'];
   case tec of
  '1' : begin write('  Cesta N§ : '); readln(nn); inicializa_cestas(nn); end;
  '2' : begin lee_producto(cont,1); cont := cont + 1; end;
  '3' : begin write('  Cesta N§ : '); readln(nn); mostrar_productos(nn); end;
  '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;
  '5' : incluir_producto_en_cesta;
   end;
  until tec = '6';
 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
sin imagen de perfil
Val: 6
Ha aumentado su posición en 2 puestos en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

ayuda ejerc pascal

Publicado por oscar (64 intervenciones) el 13/11/2012 21:00:33
ante todo, gracias por contestar, tengo unas dudas, por ejemplo, yo no he usado el gotoxy en ningun momento del cursillo, pq lo podria sustituir?o es solo para mi ?(gracias)tp el break, podria sustituirlo por? y por ejemplo en "Entrada Cesta N§" q significa esa N con ese simbolo?mil 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 ejerc pascal

Publicado por ramon (2158 intervenciones) el 13/11/2012 21:48:32
Te digo gotoxy posiciona el texto en pantalla puede sustituirlo writeln(); o sea quitarlo y en vez de
write pon writeln.
El break no tiene sustitución pero puedes poner esto.

Lo que hay :

1
2
3
4
5
6
for vv := 1 to tammaxcesta do
       if cesta[lll][vv].en_cesta = false then
       begin
       c := vv;
       break;
       end;


Cambiar por:
crea una variable sal : boolean;
1
2
3
4
5
6
7
8
9
10
11
12
w := 1;
 sal := false:
  repeat
      if cesta[lll][vv].en_cesta = false then
       sal := true
  else
       w := w + 1;
  until (w > tammaxcesta) or (sal = true):
  if sal = true then
    busca_libre := w
else
    busca_libre := 0;


esto seria el cambio.

En Entrada Cesta Nº " o sea numero. El símbolo se ve así por problemas de los símbolos del
dos y windows.
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: 6
Ha aumentado su posición en 2 puestos en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

ayuda ejerc pascal

Publicado por oscar (64 intervenciones) el 13/11/2012 21:49:48
OOOOk mil gracias por cada explicacion
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 ejerc pascal

Publicado por ramon (2158 intervenciones) el 13/11/2012 22:08:48
También puedes con esto.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function busca_libre(cct : producto) : integer;
  var
    c, vv : integer;
    begin
       c := 0;
       vv := 1;
       while (vv < tammaxcesta) or (cct[vv].en_cesta <> false) do
       begin
          vv := vv + 1;
       end;
       if cct[vv].en_cesta = false then
       begin
       c := vv;
       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
sin imagen de perfil
Val: 6
Ha aumentado su posición en 2 puestos en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

ayuda ejerc pascal

Publicado por oscar (64 intervenciones) el 13/11/2012 22:21:18
aqui me tira error

1
2
3
4
5
6
7
8
9
procedure incluir_producto_en_cesta;
var
	n, gg : integer;
begin
	writeln(' Entre N§ Cesta : ');
	readln(n);
	gg := busca_libre(n);  en esta linea el error es incompatible type for arg no. 1: got smallnt , expected producto
	lee_producto(n,gg);
	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 ejerc pascal

Publicado por ramon (2158 intervenciones) el 13/11/2012 22:49:39
gg := busca_libre(n); en esta linea el error es incompatible type for arg no. 1: got smallnt , expected

pon busca_libre(tBase); ya que tu tienes definido eso

1
2
3
4
5
6
7
procedure incluir_producto_en_cesta;
 var
    gg : integer;
begin
gg := busca_libre(tBase);
lee_producto(gg);
end;


fijate en esto con calma y veras la causa del error.

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
[ el 1]
const
TAMMAXCESTA = 3;
 
type
Producto = record
nombreproduct : string[25];
numerounidadessolic :integer;
preciounidad : real;
en_cesta : boolean;
end;
 
tIndice = 0..TAMMAXCESTA;
tBase = Producto;
Cesta = array[tIndice] of tBase;
 
var
c:Cesta;
 
 
 [ el 2]
 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 : array[1..10] of producto;



Por esto se causan errores los cambios de formas.
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: 6
Ha aumentado su posición en 2 puestos en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

ayuda ejerc pascal

Publicado por oscar (64 intervenciones) el 13/11/2012 23:14:43
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
program ficherocesta;
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 : array[1..10] of producto;
	nn, nu, cont : integer;
	tec : char;
 
tBase :Producto;
 
 
procedure lee_producto(ces, n : integer);
var
	t : integer;
	td : char;
begin
	repeat
	 clrscr;
	 writeln(' Entrada Cesta N§ : ',n);
	 writeln;
	 write(' Entre Nombre Producto : ');
	 readln(cesta[ces][n].nombre);
	 write(' Entre Cantidad : ');
	 readln(cesta[ces][n].numero);
	 write(' Entre Precio Unidad : ');
	 readln(cesta[ces][n].precio);
	 cesta[ces][t].en_cesta := true;
	 writeln;
	 writeln(' Desea Entrar Mas Productos En La Cesta [S/N]');
	repeat
	 td := upcase(readkey);
	until td in['S','N'];
	 if td = 'S' then
	 n := n + 1;
	until (n > tammaxcesta) or (td = 'N');
	if n > tammaxcesta then
	begin
	clrscr;
	writeln('**** Fin De Entradas Pulse [Enter] ****');
	end;
end;
 
procedure inicializa_cestas(ces : integer);
var
	i : integer;
begin
	if ces > 10 then
begin
	writeln(' Revasado N§ de Cestas Pulse [Enter]');
readln;
end
	else
begin
	for i := 0 to tammaxcesta do
begin
	cesta[ces][i].en_cesta := false;
	cesta[ces][i].nombre := ' ';
end;
clrscr;
	writeln('Cesta Inicializada Pulse [Enter]');
readln;
	end;
end;
 
procedure mostrar_productos(pro : integer);
var
	y, d : integer;
begin
clrscr;
	if cont > 1 then
begin
	y := 3;
writeln('Nombre N§ De Prodectos Precio');
	for d := 1 to tammaxcesta do
begin
	if cesta[pro][d].nombre = ' ' then
begin
end
	else
begin
writeln(cesta[pro][d].nombre);
writeln(cesta[pro][d].numero);
writeln(cesta[pro][d].precio:0:2);
y := y + 1;
	end;
	end;
end
	else
	writeln(' <<<< La Cesta esta Vacia Pulse [Enter] >>>>');
readln;
end;
 
procedure mostrar_cesta(ces : integer);
var
	p : integer;
begin
clrscr;
	write(' Entre Posicion A Visualizar : ');
	readln(p);
	if (p < tammaxcesta) and (cesta[ces][p].nombre > ' ') then
begin
	if cont > 1 then
begin
writeln;write('Nombre N§ De Prodectos Precio');
writeln;write(cesta[ces][p].nombre);
writeln;write(cesta[ces][p].numero);
writeln;write(cesta[ces][p].precio:0:2);
	writeln;
	writeln('***** Pulse [Rnter] *****');
end
	else
	 writeln('<<<<< La Cesta Esta Vacia Pulse [Rnter] >>>>>');
readln;
end;
end;
 
function cuenta_productos(ddd : integer) : integer;
var
	b, c : integer;
begin
	c := 0;
	for b := 1 to tammaxcesta do
	if cesta[ddd][b].en_cesta = true then
	c := c + 1;
	cuenta_productos := c;
end;
 
 
function busca_libre(cct : producto) : integer;
var
	c, vv : integer;
begin
	c := 0;
	vv := 1;
   while (vv < tammaxcesta) or (cct[vv].en_cesta <> false) do
begin
	vv := vv + 1;
end;
	if cct[vv].en_cesta = false then
begin
	c := vv;
	end;
	if c > 0 then
begin
	busca_libre := c;
end
	else
begin
	busca_libre := 0;
   end;
   end;
 
procedure incluir_producto_en_cesta;
var
gg : integer;
begin
 
	gg := busca_libre(tBase);
	lee_producto(gg);
	end;
begin
	cont := 1;
repeat
clrscr;
	writeln(' **** Menu General ****');
	writeln;
	writeln(' 1 : Inicialice una Cestas');
	writeln(' 2 : Rellenar Una Cesta ');
	writeln(' 3 : Muestre Todos los Productos de Una Cesta');
	writeln(' 4 : Muestre Un Productos de la Cesta');
	writeln(' 5 : Nuevo Producto En Cesta');
	writeln(' 6 : salir');
	writeln;
	writeln(' <<< Elija Opcion >>>');
   repeat
	tec := readkey;
   until tec in['1','2','3','4','5','6'];
   case tec of
'1' : begin
	write(' Cesta N§ : ');
readln(nn);
	inicializa_cestas(nn);
	end;
'2' : begin
	lee_producto(cont,1);
	cont := cont + 1;
	end;
'3' : begin
	write(' Cesta N§ : ');
	readln(nn);
	mostrar_productos(nn);
	end;
'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;
'5' : incluir_producto_en_cesta;
	end;
   until
	tec = '6';
end.



pero me sigue tirando error
añadi la var tBase: Producto

y luego

1
2
3
4
5
6
7
8
9
procedure incluir_producto_en_cesta;
var
gg : integer;
begin
 
	gg := busca_libre(tBase);
	lee_producto(gg);
	end;
begin


y me pone en esta linea lee_producto(gg); wrong number of parameters specified for call to lee_producto, eso es q tengo q poner otro parametro?
tb la const esta mal?
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 ejerc pascal

Publicado por ramon (2158 intervenciones) el 14/11/2012 19:01:35
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
{A ver no puedes mezclar formas de registros diferentes fíjate en las estructuras,
 
Mia:
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 : array[1..10] of producto;
	nn, nu, cont : integer;
	tec : char;
 
tBase :Producto;
 
 
La tuya:
const
TAMMAXCESTA = 3;
 
type
Producto = record
nombreproduct : string[25];
numerounidadessolic :integer;
preciounidad : real;
en_cesta : boolean;
end;
 
tIndice = 0..TAMMAXCESTA;
tBase = Producto;
Cesta = array[tIndice] of tBase;
 
var
c:Cesta;



Tendrás que acoplar lo a la que emplees no las mezcles
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: 6
Ha aumentado su posición en 2 puestos en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

ayuda ejerc pascal

Publicado por oscar (64 intervenciones) el 14/11/2012 23:38:20
mmm ramon, ok pero no esta el procedimiento q me piden el guarda_cesta ni recupera_cesta ni esto

Codifique un módulo principal en el que reutilizando los resultados de cuestiones y actividades anteriores (procedimientos de lectura y escritura de ficheros, presentación, modificación de datos de una cesta…)aqui supongo que ira lo de assing, rewrite, reset,close....

mira al final rehice y me quedo asi (tengo un problema no me termina de compilar tp y se supone q tendria q partir de esto)

program cestacompra;
uses crt;

const
TAMMAXCESTA = 3;

type
Producto = record
nombreproduct : string;
numerounidadessolic : integer;
preciounidad :real;
en_cesta : boolean;
end;


Tcesta= array [0..TAMMAXCESTA] of Producto;

procedure lee_producto(var p:Producto); {var, modificamos el registro, insertamos información}
begin
write('Nombre del producto: ');
readln(p.nombreproduct);
write('Numero de unidades solicitadas: ');
readln(p.numerounidadessolic);
write('Precio por unidad: ');
readln(p.preciounidad);
p.en_cesta := true;
end;

procedure inicializa_cesta(cestacompra : Tcesta);
var i:integer;
begin

{Empezamos en 1 porque el 0 está reservado.}
for i:=1 to TAMMAXCESTA do
begin
cestacompra [i]. en_cesta := false;
cestacompra [i]. nombreproduct := '';
cestacompra [i]. numerounidadessolic := 0;
cestacompra [i]. preciounidad := 0.0;
end;
End;


procedure muestra_producto(var p:Producto);
begin
writeln('Nombre del producto: ', p.nombreproduct);
writeln('Numero de unidades: ', p.numerounidadessolic);
writeln('Precio de la unidad: ', p.preciounidad:0:2);
writeln ('Precio total: ',(p.numerounidadessolic * p.preciounidad):0:2);
writeln;
end;


procedure mostrar_cesta(lacesta : Tcesta);
var i:integer;
aux : integer;
Begin
aux:= 0;
for i := 1 to TAMMAXCESTA do
begin
if (lacesta[i].en_cesta = true) then
begin
Writeln('Nombre: ',lacesta[i].nombreproduct);
writeln ('Unidades: ',lacesta[i].numerounidadessolic);
writeln ('Precio por unidad: ',lacesta[i].preciounidad:0:2);
aux:= aux + 1;
Writeln;
end;
end;
if aux = 0 then
begin
Writeln ('La cesta esta vacia');
Writeln;
end;
end;

procedure rellenar_cesta(var lacesta: Tcesta);
var i:integer;
begin

for i:=1 to TAMMAXCESTA do
writeln('Rellene el producto ', i, ' de su cesta:');
lee_producto(lacesta[i]);
writeln;
end;


Procedure Muestracesta (lacesta : Tcesta);
var
i: integer;
begin
for i := 1 to TAMMAXCESTA do
muestra_producto (lacesta[i]);
end;

Function cuenta_productos(lacesta: Tcesta):integer;
var cantos:integer; i:integer;
begin
cantos:= 0; {iniciamos la cuenta a 0}
for i:=1 to TAMMAXCESTA do {recorremos la cesta}
if (lacesta[i].en_cesta) then {si el producto i de la cesta c está en la cesta}
cantos:= cantos + 1; {aumentamos la cuenta de productos en cesta en 1}
cuenta_productos:= cantos;
end;

function busca_libre(lacesta: Tcesta): integer;
var i:integer;
begin
busca_libre:=0;
for i := 1 to TAMMAXCESTA do
if (lacesta[i].en_cesta = false) then
begin
busca_libre:= i;
end
else
writeln ('No hay ninguna posicion libre en la cesta');
end;

procedure incluir_producto_en_cesta(var lacesta:Tcesta);
var
i: integer;
begin
i:= 0;
i:= busca_libre(lacesta);
if (i <> 0 )then
lee_producto (lacesta [i])
else
begin
writeln;
writeln ('La cesta esta llena');
end;
end;

function busca_producto(lacesta:Tcesta; nombreproduct:string):integer;
var i:integer;
begin
for i:=1 to TAMMAXCESTA do
begin
if (lacesta[i].nombreproduct = nombreproduct) then
busca_producto:= i
else
busca_producto:= 0;
end;
end;

procedure eliminar_producto_de_cesta(var lacesta:Tcesta);
var
aproduct:string;
posaux:integer;
begin
{leemos el nombre del producto}
write('Por favor, indique el nombre del producto a eliminar: ');
readln(aproduct);
{pos := 0; {inicializamos pos (aunque no hace falta aquí)}}
posaux:= busca_producto(lacesta,aproduct); {buscamos el producto}
{pos := 0; {inicializamos pos (aunque no hace falta aquí)}
if posaux = 0 then {si lo encontramos}
writeln ('Producto no encontrado.');{c[pos].en_cesta := false {lo eliminamos}
else
begin
lacesta[posaux].en_cesta:= false;
writeln('Producto numero: ',posaux,'encontrado y eliminado');
end;
end;

procedure modificar_producto(var lacesta:Tcesta);
var
p: string;
posaux:integer;
change:integer;
nuevonombre :string;
nuevonumero : integer;
nuevoprecio : real;

Begin
{leemos el nombre del producto}
write('Por favor, indique el nombre del producto a modificar: ');
readln(p);
posaux:= busca_producto (lacesta , p);
if posaux = 0 then
writeln ('Producto no encontrado')
else
begin
writeln('Introduzca el numero de campo que quiere modificar');
writeln('1. Modificar el nombre.');
writeln('2. Modificar el numero de unidades.');
writeln('3. Modificar el precio por unidad.');
readln(change);
writeln;
if (change = 1) then
begin
writeln ('Que nombre quiere poner por: ', lacesta [posaux].nombreproduct);
Readln (nuevonombre);
lacesta [posaux].nombreproduct:= nuevonombre;
end
else if (change = 2) then
begin
writeln ('Que numero de unidades desea: (antes:' ,lacesta[posaux].numerounidadessolic,')');
Readln (nuevonumero);
lacesta [posaux].numerounidadessolic := nuevonumero;
end
else if (change = 3) then
begin
writeln ('Que precio nuevo desea: (antes:' ,lacesta[posaux].preciounidad:0:2,')');
Readln (nuevoprecio);
lacesta [posaux].preciounidad := nuevoprecio;
end;
end;
End;

var
lacesta: Tcesta;
option: integer;

Begin
option:= 0;
inicializa_cesta(lacesta); {inicializamos la cesta}

repeat {menú del programa}

writeln('a. Anhadir producto de la cesta.');
writeln('b. Eliminar producto de la cesta.');
writeln('c. Mostrar cesta.');
writeln('d. Modificar productos de la cesta.');
writeln('e. Contar productos de la cesta.');
writeln('f. Salir del programa.');
readln(option);

Case opcion of
a : begin
Clrscr;
incluir_producto_en_cesta (lacesta);
Writeln;
end;
b: begin
Clrscr;
eliminar_producto (lacesta);
Writeln;
end;
c: begin
Clrscr;
mostrar_cesta (lacesta);
Writeln;
end;
d: begin
Clrscr;
modificar_producto (lacesta);
Writeln;
end;
e: begin
Clrscr;
Writeln;
Writeln ('La cesta contiene: ',cuenta_productos (lacesta),' productos');
Writeln;
end;
f: begin
ClrScr;
Writeln ('Pulse cualquier tecla para salir');
Readln;
end;
end;
until opcion = 6;

End.

a ver q me puedes dcir
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
sin imagen de perfil
Val: 6
Ha aumentado su posición en 2 puestos en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

ayuda ejerc pascal

Publicado por oscar (64 intervenciones) el 15/11/2012 01:15:09
aqui va el definitivo y ya ffuncionando solo me faltaria hacer las act 1,2 y 3 que puse al inicio de todo
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
program cestacompra;
uses crt;
 
const
    TAMMAXCESTA = 3;
 
type
    Producto = record
        nombreproduct : string;
        numerounidadessolic : integer;
        preciounidad :real;
        en_cesta : boolean;
    end;
 
 
Tcesta= array [0..TAMMAXCESTA] of Producto;
 
procedure lee_producto(var p:Producto); {var, modificamos el registro, insertamos información}
begin
    write('Nombre del producto: ');
    readln(p.nombreproduct);
    write('Numero de unidades solicitadas: ');
    readln(p.numerounidadessolic);
    write('Precio por unidad: ');
    readln(p.preciounidad);
    p.en_cesta := true;
end;
 
procedure inicializa_cesta(cestacompra : Tcesta);
var i:integer;
begin
 
    {Empezamos en 1 porque el 0 está reservado.}
    for i:=1 to TAMMAXCESTA do
begin
    cestacompra[i].en_cesta := false;
    cestacompra[i].nombreproduct := '';
    cestacompra[i].numerounidadessolic := 0;
    cestacompra[i].preciounidad := 0.0;
end;
End;
 
 
procedure muestra_producto(var p:Producto);
begin
    writeln('Nombre del producto: ', p.nombreproduct);
    writeln('Numero de unidades: ', p.numerounidadessolic);
    writeln('Precio de la unidad: ', p.preciounidad:0:2);
    writeln ('Precio total: ',(p.numerounidadessolic * p.preciounidad):0:2);
   writeln;
end;
 
 
procedure mostrar_cesta(lacesta : Tcesta);
var i:integer;
aux : integer;
Begin
aux:= 0;
for i := 1 to TAMMAXCESTA do
begin
if (lacesta[i].en_cesta = true) then
    begin
      Writeln('Nombre: ',lacesta[i].nombreproduct);
      writeln ('Unidades: ',lacesta[i].numerounidadessolic);
      writeln ('Precio por unidad: ',lacesta[i].preciounidad:0:2);
      aux:= aux + 1;
      Writeln;
    end;
end;
if aux = 0 then
    begin
      Writeln ('La cesta esta vacia');
      Writeln;
    end;
end;
 
procedure rellenar_cesta(var lacesta: Tcesta);
var i:integer;
begin
 
    for i:=1 to TAMMAXCESTA do
        writeln('Rellene el producto ', i, ' de su cesta:');
        lee_producto(lacesta[i]);
        writeln;
    end;
 
 
Procedure Muestracesta (lacesta : Tcesta);
var
i: integer;
begin
     for i := 1 to TAMMAXCESTA do
        muestra_producto (lacesta[i]);
end;
 
Function cuenta_productos(lacesta: Tcesta):integer;
var  cantos:integer; i:integer;
begin
    cantos:= 0; {iniciamos la cuenta a 0}
    for i:=1 to TAMMAXCESTA do {recorremos la cesta}
        if (lacesta[i].en_cesta) then {si el producto i de la cesta c está en la cesta}
            cantos:= cantos + 1;    {aumentamos la cuenta de productos en cesta en 1}
            cuenta_productos:= cantos;
    end;
 
function busca_libre(lacesta: Tcesta): integer;
var i:integer;
begin
    busca_libre:=0;
    i:=1;
    while (busca_libre = 0) and (i <= TAMMAXCESTA) do begin
         if (lacesta[i].en_cesta = false) then
             busca_libre:= i;
         i := i + 1;
    end;
    if busca_libre = 0 then
		writeln('No hay ningun sitio libre en la cesta.');
end;
 
procedure incluir_producto_en_cesta(var lacesta:Tcesta);
var
i: integer;
begin
	i:= busca_libre(lacesta);
	if (i <> 0 )then
		lee_producto(lacesta [i])
	else
	  begin
	   writeln;
	   writeln ('La cesta esta llena');
	  end;
	end;
 
function busca_producto(lacesta:Tcesta; nombreproduct:string):integer;
var i:integer;
begin
	i:=1;
    busca_producto := 0;
    while (busca_producto = 0) and (i <= TAMMAXCESTA) do
		if lacesta[i].nombreproduct = nombreproduct then
			busca_producto := i;
end;
 
procedure eliminar_producto_de_cesta(var lacesta:Tcesta);
var
aproduct:string;
posaux:integer;
begin
    {leemos el nombre del producto}
    write('Por favor, indique el nombre del producto a eliminar: ');
    readln(aproduct);
    {pos := 0; (inicializamos pos (aunque no hace falta aquí))}
    posaux:= busca_producto(lacesta,aproduct); {buscamos el producto}
    {pos := 0; (inicializamos pos (aunque no hace falta aquí))}
    if posaux = 0 then {si lo encontramos}
        writeln ('Producto no encontrado.'){c[pos].en_cesta := false (lo eliminamos)}
    else
        begin
        lacesta[posaux].en_cesta:= false;
        writeln('Producto numero: ',posaux,'encontrado y eliminado');
end;
end;
 
procedure modificar_producto(var lacesta:Tcesta);
var
p: string;
posaux:integer;
change:integer;
nuevonombre :string;
nuevonumero : integer;
nuevoprecio : real;
 
Begin
    {leemos el nombre del producto}
    write('Por favor, indique el nombre del producto a modificar: ');
    readln(p);
	posaux:= busca_producto(lacesta, p);
    if posaux = 0 then
        writeln ('Producto no encontrado')
else
begin
    writeln('Introduzca el numero de campo que quiere modificar');
            writeln('1. Modificar el nombre.');
            writeln('2. Modificar el numero de unidades.');
            writeln('3. Modificar el precio por unidad.');
            readln(change);
            writeln;
         if (change = 1) then
            begin
             writeln ('Que nombre quiere poner por: ', lacesta[posaux].nombreproduct);
             Readln (nuevonombre);
             lacesta [posaux].nombreproduct:= nuevonombre;
            end
          else if (change = 2) then
                  begin
                   writeln ('Que numero de unidades desea: (antes:' ,lacesta[posaux].numerounidadessolic,')');
                   Readln (nuevonumero);
                   lacesta [posaux].numerounidadessolic := nuevonumero;
                  end
                     else if (change = 3) then
                         begin
                          writeln ('Que precio nuevo desea: (antes:' ,lacesta[posaux].preciounidad:0:2,')');
                          Readln (nuevoprecio);
                          lacesta [posaux].preciounidad := nuevoprecio;
                         end;
	end;
End;
 
var
lacesta: Tcesta;
option: integer;
 
Begin
option:= 0;
inicializa_cesta(lacesta); {inicializamos la cesta}
 
    repeat {menú del programa}
 
        writeln('1. Anhadir producto de la cesta.');
        writeln('2. Eliminar producto de la cesta.');
        writeln('3. Mostrar cesta.');
        writeln('4. Modificar productos de la cesta.');
        writeln('5. Contar productos de la cesta.');
        writeln('6. Salir del programa.');
        readln(option);
 
    Case option of
        1 : begin
            Clrscr;
            incluir_producto_en_cesta (lacesta);
            Writeln;
            end;
        2:  begin
            Clrscr;
            eliminar_producto_de_cesta (lacesta);
            Writeln;
            end;
        3:  begin
            Clrscr;
            mostrar_cesta (lacesta);
            Writeln;
            end;
        4:  begin
            Clrscr;
            modificar_producto(lacesta);
            Writeln;
            end;
        5:  begin
            Clrscr;
            Writeln;
            Writeln ('La cesta contiene: ',cuenta_productos (lacesta),' productos');
            Writeln;
            end;
        6:  begin
            ClrScr;
            Writeln ('Pulse cualquier tecla para salir');
            Readln;
            end;
       end;
   until option = 6;
 
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
sin imagen de perfil
Val: 6
Ha aumentado su posición en 2 puestos en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

ayuda ejerc pascal

Publicado por oscar (64 intervenciones) el 15/11/2012 12:39:26
Entiendo q tengo q hacerlo asi ejemplo:
Tfichero = file of integer;
Procedure graba_fichero(nombre: string; VAR medidas :lecturas);
Var
i : integer;
fichero : Tfichero;
Begin

assign(fichero, nombre);
rewrite(fichero);

for i:= primhora to ulthora do
write(fichero, medidas[i]);

close(fichero);

End;

pero ni idea, ni del procedimiento guardar_cesta ni de recuperar_cesta...a ver si me puedes echar una mano q se me acaba el plazo, mil 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
sin imagen de perfil
Val: 6
Ha aumentado su posición en 2 puestos en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

POR FAVOR ME URGE MUCHO

Publicado por oscar (64 intervenciones) el 15/11/2012 21:09:13
me urge mucho , podrias ayudarme con esto q te comentaba antes?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