Pascal/Turbo Pascal - Como mover algo en un arreglo

   
Vista:

Como mover algo en un arreglo

Publicado por tugatime (44 intervenciones) el 28/01/2013 15:00:51
Lo que pasa es lo siguiente, yo tengo un arreglo. Lo dejo aqui (voy a dejar tambien un registro porque el arreglo es del tipo registro):

1
2
3
4
5
6
7
8
9
10
11
12
const
        tamxcesta= 3;
 
var
         producto=record
                    nombre: string;
                    cantidad: integer;
                     precio: real:
                    en_cesta: boolean;
         end;
 
         cesta=array[1..tamxcesta] of producto;


Como podeis ver, tengo un registro (llamado producto) de un producto, donde se introduce su nombre, su cantidad, su precio y por ultimo si esta o no en la cesta (si esta en la cesta, el campo en_cesta es true, si no esta en la cesta, en campo en_cesta es false). Luego tengo un arreglo (llamado cesta) que es donde se guarda los productos que hay. Se pueden guardar hasta tamxcesta productos, que en este caso tamxcesta es una constante que vale 3, es decir, se pueden guardar hasta 3 productos en la cesta.

Bueno lo que pasa es lo siguiente. En mi programa, hay una opcion para empezar una cesta nueva. En esa opcion lo que yo puedo hacer es añadir productos a la cesta, eliminar productos de la cesta, etc.

Bueno aqui esta mi problema. Lo que pasa es lo siguiente. Mi cesta tiene 3 posiciones. La 1, la 2 y al 3.
Imagina que esto es una tabla:

Posicion 1 ////// Posicion 2 ////// Posicion 3
Nombre: manzanas ////// Nombre: platanos ////// Nombre: fresas
Cantidad: 5 ////// Cantidad: 7 ////// Cantidad:56
Precio: 0.5 ////// Precio: 0.9 ////// Precio:0.25
En_cesta: true ////// En_cesta: true ////// En_cesta: true

Como puedes ver tengo 3 posiciones y en cada posicion tengo un producto con su nombre, su cantidad y su precio. Estos son los 3 productos que yo he añadido a la tabla.
Ahora viene mi problema que esta cuando elimino un producto. Por ejemplo, cuando yo elimino las manzanas, lo que yo quiero es que tanto los platanos como las fresas se muevan un posicion a la izquierda y se quede asi:

Posicion 1 ////// Posicion 2 ////// Posicion 3
Nombre: platanos ////// Nombre: fresas //////
Cantidad: 7 ////// Cantidad: 56 //////
Precio: 0.9 ////// Precio: 0.25 //////
En_cesta: true ////// En_cesta: true //////

Los platanos pasan a estar en la posicion 1, las fresas en la 2 y la posicion 3 se queda vacia sin nada.

Esto es lo que quiero que pase cuando elimino un producto, pero el problema es que no pasa esto. Cuando yo elimino un producto los demas se quedan como estaban asi:

Posicion 1 ////// Posicion 2 ////// Posicion 3
////// Nombre: platanos ////// Nombre: fresas
////// Cantidad: 7 ////// Cantidad:56
////// Precio: 0.9 ////// Precio:0.25
////// En_cesta: true ////// En_cesta: true

Pues yo necesito ayuda para saber como hacer para que cuando elimino un productos los demas se muevan (o vuelvan) una posicion a la izquierda.

Por cierto, dejo estas barras ////// para separar las posiciones.
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

Como mover algo en un arreglo

Publicado por ramon (2072 intervenciones) el 30/01/2013 17:00:09
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
{Mira esto puede ayudarte}
 
procedure borra_cesta(nn : integer; que : char);
  var
    ester : char;
  begin
      if upcase(que) = 'B' then
      ester := ' '
    else
      ester := '*';
      cesta[nn].nombre := ester;
      cesta[nn].cantidad := 0;
      cesta[nn].precio := 0.0;
      cesta[nn].en_cesta := false;
  end;
 
  procedure coloca_cesta;
  var
    n : integer;
  begin
      for n := 1 to 3 do
      if cesta[n].nombre = '*' then
      begin
         if n = 1 then
         begin
         cesta[n] := cesta[n + 1];
         cesta[n + 1] := cesta[n + 2];
         borra_cesta(n + 2);
         end;
         if n = 2 then
         begin
            cesta[n] := cesta[n + 1];
            borra_cesta(n + 1);
         end;
         if n = 3 then
         begin
            borra_cesta(n);
         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
1
Comentar

Como mover algo en un arreglo

Publicado por tugatime (44 intervenciones) el 30/01/2013 18:17:11
Una cosa, entiendo lo que hacer en el 2º procedimiento ("coloca_cesta;"), pero me puedes explicar que hacer en el 1º procedimiento ("borra_cesta(nn : integer; que : char)") ????
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

Como mover algo en un arreglo

Publicado por ramon (2072 intervenciones) el 30/01/2013 19:02:38
El primero marca para después detectarlo y correrlo o sea colocar como tu deseas es una forma
de marcar como anulado.
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

Como mover algo en un arreglo

Publicado por tugatime (44 intervenciones) el 30/01/2013 22:03:50
Hm, ok 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

Como mover algo en un arreglo

Publicado por tugatime (44 intervenciones) el 30/01/2013 23:16:30
Te he dado las gracias, pero aun tengo un problema. He utilizado los 2 procedimientos que me has dado y los he puesto en mi programa. Ahora solo necesito saber unas cosas.
Primero,

1
procedure borra_cesta(nn : integer; que : char);


La variable "nn" y la variable "que" que representan ?? Que son ??

Y otra cosa, cuando haces esto:

1
if upcase(que) = 'B' then


Que estas haciendo aqui ??
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

Como mover algo en un arreglo

Publicado por ramon (2072 intervenciones) el 31/01/2013 18:01:26
Primero La variables "nn" y la variable "que" la primera para marcar la posición del array que
deseas borrar y la segunda para si quieres poner o no poner el asterisco como para borrar.
Referente a esto if upcase(que) = 'B' then su misión es convertir la letra [B] en mayúscula para
evitar doble comprobación como seria,

if (que = 'b') or (que = 'B') then
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

Como mover algo en un arreglo

Publicado por tugatime (44 intervenciones) el 01/02/2013 02:31:20
Ok, muchas gracias por la ayuda. Ahora ya lo entiendo todo.
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