[ Foro de Pascal ]

Array - Borrar elementos

17-Oct-2014 03:52
Invitado (Ramiro)
8 Respuestas

Antes que nada buenas a todos.
 
 Mi duda es la siguiente: ¿Cómo puedo hacer para mover los elementos de un array hacia los lugares anteriores? Los lugares " vacíos" los escribo como ceros, entonces cada vez que elimino un valor al final del array aparece un cero.
Otra cosa, para moverlo hacia atras tienen que ser dos valores iguales o uno ser cero y el siguiente otro valor.

Muchas gracias.


17-Oct-2014 10:04
Nacho Cabanes (+30)

No te basta con ponerles el valor cero. Debes llevar un contador de cuántos datos hay, y disminuir ese contador. Mira, lo tienes en el apartado 4.1.6 de mi curso de Pascal:

http://www.aprendeaprogramar.com/mod/resource/view.php?id=553



17-Oct-2014 16:45
Invitado (Ramiro)

Muchas gracias por responder.

Estuve leyendo el articulo del link, pero mi problema es que no coloco los datos yo.
Se me da un array de una longitud determinada por una constante, dentro de ese array tengo numeros, si el numero es 0 voy a considerar que es un lugar vacio.

Lo que quiero lograr es que si hay un 0 seguido de un numero ese numero pase al lugar del 0 y todos los demas se muevan al anterior. Quiza me este explicando mal pero seria algo asi.

[0,2,0,3,4] quisiera que quede [2,3,4,0,0]

y a su vez si encuentra que dos consecutivos son iguales los sume.

[0,2,2,3,4,4] quisiera que quede [4,3,8,0,0,0]



17-Oct-2014 19:09
Ramiro Burnster

Lo que no me sale es pasar el numero despues de un 0 al 0, osea, correr los valores del array hacia atras, porque sumarlos los sumo, pero despues de la suma queda un casillero  vacio para que venga el siguiente numero distinto de 0;


18-Oct-2014 05:06
Luis Torres (+12)

Para desplazar los elementos que están después del cero (0), debes primero identificar el índice del vector del elemento cero (0), y luego, realizar lo siguiente:
Supongamos que el índice del cero es k y dim la dimensión del vector, haríamos lo que viene a continuación:

 
Para i:=k hasta (dim - 1) hacer
  vector[i]:= vector[i + 1];
vector[dim]:= 0;
 


Pruébalo y, luego me cuentas.

Saludos.


18-Oct-2014 17:13
Ramiro Burnster

Hola Luis gracias por responder. Te cuento que estauve probando eso y no me servia, lo que hice fue usar un integer auxiliar para solucionarlo.


18-Oct-2014 22:04
Luis Torres (+12)

Ok. Sería bueno que colocaras el código para ir viéndolo.

Saludos.


18-Oct-2014 22:21
Ramiro Burnster


 
const 
Maximo=4;
 
var i:             integer;
var j:             integer;
var auxiliar: integer;
 
for i:=1 to Maximo do
					begin
					for j:=1 to Maximo-1 do
						begin
 
						if (fila[j]=0) then
							begin
							  auxiliar:=fila[j+1];
							  fila[j+1]:=fila[j];
							  fila[j]:=auxiliar;
							end;
 
						end;//segundo for
 
					end;//primer for
 


espero que a alguien le sirva de ayuda en el futuro.


20-Oct-2014 02:42
Luis Torres (+12)

He estado probando el código que acabas de colocar, pero no hace lo que pide el enunciado.

En vez de desplazar elementos a partir de uno dado hacia la izquierda, lo que hace es una especie de intercambio.

Saludos.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)