[ Foro de Pascal ]
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.
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
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]
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;
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.
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.
Ok. Sería bueno que colocaras el código para ir viéndolo.
Saludos.
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.
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.)