[ Foro de Pascal ]

como invertir el vector???

12-Mar-2012 19:20
oscar gomez
7 Respuestas

Cordial saludo profesor Nacho y compañeros.
queria saber mas o menos como podria ser el seudocodigo del siguiente programa ojala puedan orientarme:


Entregue en un vector un mensaje partiendo por la ultima letra, la primera letra, la penúltima letra, la segunda letra,  la antepenúltima letra, la tercera letra....,por ejemplo

a s d f g h j k


Se obtendrá: k a j s h d g f

mil gracias por cualquier ayuda u orientacion que me puedan brindar del mismo.


12-Mar-2012 23:29
Antonio P.G.

Hola Óscar. Voy a escribir lo que creo (no está probado y SEGURO que tiene errores).


Se tiene un vector de entrada A, que es el que escribe el usuario.
Se tiene otro de salida B, que es el que se mostrará por pantalla al final.
Ambos miden 1..N (donde N es un máximo que el usuario nunca llenará).
El usuario introduce "k" caracteres, donde "k" siempre es menor o igual que N, es decir, "k : 1..N;".
Se obvia el contador.

Bien, pues con un bucle se puede realizar. Voy a suponer que se conoce "k", que es al fin y al cabo, el número de letras que el usuario ha introducido.

Más o menos quedaría algo como:
************************************
Desde i:= 1 hasta k hacer
  Si "i" no es par entonces
     B[i]:= A[k-(i div 2)];
  En cambio, si "i" es par entonces
     B[i]:= A[i div 2]
************************************
Yo lo dejo ahí. No obstante no sé como sería para el caso en el que "k" es impar, es decir, en el que el nº de letras es impar.

Adjunto un par de imágenes en estas direcciones:
http://www.elestadistico.net/Imagenes/vector1.jpg
http://www.elestadistico.net/Imagenes/vector2.jpg

Espero haberte sido de ayuda.

¡Ciao!
(Por cierto, las imágenes no estarán ahí toda la semana. No podía adjuntarlas por su tamaño. Perdón).


13-Mar-2012 01:58
Sebastian Saldaño

Podrías usar usar el "downto" del "for"..
osea ir mostrando del ultimo elemento hasta el primero..


For i:=fin downto 1 do
 write(palabra[i], ' ');


Pero para usar esto necesitas el tamaño de la palabra.
Espero que sea una buena solución para los que estas buscando.

Saludos.


13-Mar-2012 02:18
Sebastian Saldaño

Jaja, perdón entendí mal el problema, mil disculpas :D


Una posible solucion seria

hacer un ciclo while


While i<= (fin div 2) do
begin
 write(palabra[fin]);
 write(palabtra[i]);
 inc(i);
 dec(fin);
end;


Fíjate que solución te tira, porque pensé una solución alternativa a la que publico el compañero Antonio.

Saludos.


13-Mar-2012 09:46
oscar gomez

Hola antonio, gracias por responderme.
Efectivamente tu solucion es perfecta ya la he probado y funciona ok,ahora bien antonio que se deberia cambiar en el caso que el planteamiento del problema fuera al contrario , es decir:

   a s d f g h j k  // vector que escribe el usuario

   a  k  s  j  d  h  f  g

mil gracias por tu ayuda.


13-Mar-2012 19:30
oscar gomez

Cordial saludo profesor Nacho, Antonio y compañeros.
Antonio respecto a la solucion de la otra forma alterna en la cadena, es decir , me refiero a :

  a s d f g h j k  // vector que escribe el usuario

   a  k  s  j  d  h  f  g

ya lo he solucionado , asi que de mi parte doy por cerrado este hilo y agradecer sus orientaciones que me llevaron a encontrar la solucion al mismo .mil gracias por permitirnos crecer tambien con su ayuda.


25-Nov-2013 02:11
Invitado (hjjkhjkh)

y en codigo java como quedaria resuelto?


25-Nov-2013 11:35
Nacho Cabanes (+83)

Da algún detalle más. ¿Quieres invertir por completo el array o descolocarlo, como se proponía en la pregunta inicial de este hilo?  ¿Es un array de strings, de números, de letras...? ¿Prefijado o introducido por el usuario?

En general, la forma más simple de invertirlo por completo es hacer un "for" que vaya desde el final (Length-1) hasta el principio (0), extrayendo cada elemento y mostrándolo. Pero los detalles dependen de tu problema concreto.






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