Pascal/Turbo Pascal - 1.1 tema 8 (2)

 
Vista:
sin imagen de perfil

1.1 tema 8 (2)

Publicado por Erik (73 intervenciones) el 09/04/2014 15:37:13
hola tengo que corregir un codigo pascal, lo que tengo que corregir es lo siguiente:

Ve revisando todos los procedimientos para que cumplan lo que te he indicado. Mira en este: 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.

Tu has escrito

procedure entradacesta(var c : producto); c no es un identificador significativo

¿cómo se accede a un campo de un registro? estudia los ejemplos del curso. recuerda que la notación es nombre_registro.nombre campo


1. PRIMERA CUESTIÓN: 2014-04-08 23:13:23
Dos cosas

1ª- Muy importante en programación: utilizar nombres significativos

2ª- Fíjate en el enunciado, nos lo indica en mayúsculas

UTILICE LOS NOMBRES DE TIPOS, FUNCIONES, PROCEDIMIENTOS, CONSTANTES, ETC… QUE SE INDICAN EN EL ENUNCIADO.

Mira tu has escrito:

1
2
3
4
5
6
Producto = record
       nombre : string[100]; {Nombre del ploducto}
       numero : integer; {Cantidad de productos}
       precio : real; {Precio por unidad del producto}
       campo  : boolean; {Existe producto true se anulo false}
     end;

y mira el enunciado:

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

Por tanto lo tenemos que modificar:

1
2
3
4
5
6
Producto = record
       nombre : string[100]; {Nombre del ploducto}
       numero busca otro nombre más significativo, por ejemplo unidades : integer; {Cantidad de productos}
       precio : real; {Precio por unidad del producto}
       campo  en_cesta: boolean; {Existe producto true se anulo false}
     end;

este es el codigo pascal que tengo que corregir

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
program respuestas;
 uses
    crt;
  const
     TAMMAXCESTA = 4;
 
  type
 
   Producto = record
       nombre : string[100]; {Nombre del ploducto}
       numero : integer; {Cantidad de productos}
       precio : real; {Precio por unidad del producto}
       campo  : boolean; {Existe producto true se anulo false}
     end;
 
  var
    cesta : array[0..TAMMAXCESTA] of producto;
    cont : integer;
 
 
    procedure entradacesta(var c : producto);
    begin
       clrscr;
       writeln('**** Entrada Producto A Cesta ****');
       with c do
       begin
          write('  Nombre Producto            : ');
          readln(nombre);
          write('  Cantidad De Productos      : ');
          readln(numero);
          write('  Precio Unidad Del Producto : ');
          readln(precio);
          campo := true;
       end;
    end;
 
   procedure presentacesta(c : producto);
   begin
      with c do
      begin
         writeln('  Producto      = ',nombre);
         writeln('  Cantidad      = ',numero);
         writeln('  Precio Unidad = ',Precio:0:2);
         if campo = true then
         writeln('  La Cesta Esta Activa')
       else
         writeln('  La Cesta Esta Inactiva');
      end;
        writeln;
        writeln('  Pulse Una Tecla');
        readkey;
   end;
 
   procedure inicializa_cesta(var c : producto);
   begin
       with c do
       begin
          nombre := ' ';
          numero := 0;
          precio := 0.0;
          campo := false;
       end;
   end;
 
   procedure mostrar_producto(n : integer);
   begin
   with cesta[n] do
      begin
         writeln('  Producto      = ',nombre);
         writeln('  Cantidad      = ',numero);
         writeln('  Precio Unidad = ',Precio:0:2);
         if campo = true then
         writeln('  La Cesta Esta Activa')
       else
         writeln('  La Cesta Esta Inactiva');
      end;
        writeln;
        writeln('  Pulse Una Tecla');
        readkey;
     end;
 
   procedure mostrar_cesta(c : producto);
   begin
      if c.campo = true then
      begin
       with c do
       begin
         writeln('  Producto      = ',nombre);
         writeln('  Cantidad      = ',numero);
         writeln('  Precio Unidad = ',Precio:0:2);
         if campo = true then
         writeln('  La Cesta Esta Activa')
       else
         writeln('  La Cesta Esta Inactiva');
      end;
        writeln;
        writeln('  Pulse Una Tecla');
        readkey;
      end;
   end;
 
 
 
 
  begin
    cont := 1;
    while cont < TAMMAXCESTA + 1 do
    begin
     inicializa_cesta(cesta[cont]);
     entradacesta(cesta[cont]);
     cont := cont + 1;
     end;
 
     clrscr;
     for cont := 1 to TAMMAXCESTA do
     begin
     mostrar_cesta(cesta[cont]);
     clrscr;
     end;
 
  end.

gracias de antemano.
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
sin imagen de perfil

1.1 tema 8 (2)

Publicado por Diego (98 intervenciones) el 09/04/2014 18:58:40
Al usar with nombre_del_registro do se está indicando que desde el begin hasta el end del with se trabajará dentro del registro; por lo tanto los nombres de las variables sin el punto primero será buscados dentro del registro y luego dentro del módulo, y luego en el programa; en cuanto a la acotacion de sesta; como la letra "c" suena como "se"; supongo que debió hacerla memotecnicamente basandose en su pronunciación y no en su nombre. De todos modos esto es debatible.
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

1.1 tema 8 (2)

Publicado por Erik (73 intervenciones) el 10/04/2014 17:07:19
explicamelo en codigo pascal. por favor.
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

1.1 tema 8 (2)

Publicado por Diego (98 intervenciones) el 11/04/2014 21:38:37
Se usa el with para no tener que escribir registro.campo_del_registro; de esta manera simplemente se escribe el campo y no hace falta escribir el registroal que pertenece ya que se indicó con with el registro en que se está trabajando.

with (registro) do
---begin
---end;
ejemplo:

read(reg.nombre);
read(reg.apellido);

es igual que hacer:
with (reg) do
--begin
-----read(nombre);
-----read(apellido);
---end;

{es igual ya que se idica que el primero verifique si nombre pertenece al registro en que se está trabajando; de eser así se escribe en ese registro, de no pernetener al registro se busca en las variables globales, luego en las locales al módulo hasta encontrarlo}.
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

1.1 tema 8 (2)

Publicado por Erik (73 intervenciones) el 12/04/2014 20:27:10
si, esta bien pero muestramelo con el codigo pascal que escribi yo, configuralo para que se corriga los errores.
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