[ Foro de Pascal ]

ejercicio propuesto: palabras separadas por espacios

08-Feb-2014 19:42
Carolina Sanchez
11 Respuestas

Hola me podrian ayudar con este ejercicio?.. Lo intente de mil formas pero no me sale nada, desde ya gracias.
Crea un programa que te pida tres palabras y las muestre separadas por espacios y en el orden contrario a como las has introducido (primero la tercera palabra, después la segunda y finalmente la primera).


08-Feb-2014 22:34
Luis Torres (+18)

Una idea para resolverlo sería declarar un arreglo de strings que pueda almacenar tres palabras, es decir un arreglo desde el uno hasta el tres de strings. Luego procedes a leer cada palabra utilizando un ciclo for para ello. Finalmente se puede hacer otro ciclo for, pero esta vez en sentido contrario, en orden descendente, desde el tres hasta el 1 mostrando en pantalla cada una de las palabras introducidas, usando para ello un write en vez de un writeln. Todo eso sería más o menos como te muestro a continuación en código:


program tresPalabras;

var 
  palabra: array[1..3] of string;
  i: integer;

BEGIN
  for i:=1 to 3 do
   begin
       write('Introduzca la palabra numero ',i,': ');
       readln(palabra[i]);
   end;
  writeln('Las palabras que usted introdujo en orden inverso son: ');
  for i:=3 downto 1 do
    write(palabra[i],' ');
 writeln;
  readln;
END.


08-Feb-2014 23:56
Nacho Cabanes (+83)

Si eres totalmente novata, no necesitas complicarte con bucles ni con arrays: basta con que pidas 3 cosas (con 3 readLn) y escribas esas 3 cosas (con writeLn), además de 2 espacios en blanco (ampliando los writeLn anteriores o usando 2 writeLn adicionales), así:


program tresPalabras1;

var 
  palabra1, palabra2, palabra3: string;

begin
  write('Primera palabra?');
  readLn(palabra1);
  write('Segunda palabra?');
  readLn(palabra2);
  write('Tercera palabra?');
  readLn(palabra3);

  writeLn('Las palabras en orden inverso son: ');
  write(palabra3);
  write(' ');
  write(palabra2);
  write(' ');
  write(palabra1);
end.


Fácil, ¿verdad? Es mejorable, pero intenta buscar siempre en primer lugar la solución más simple y ya lo optimizarás después... si fuera necesario...  ;-)


09-Feb-2014 18:02
Carolina Sanchez

Muchas gracias por ayudarme a los dos!.. si la verdad soy bastante novata y los arreglos se me complican un poco todavia :)


09-Feb-2014 19:20
oscar gomez

buenas noches.
entre hoy de casualidad por que me gusta mucho este foro con el cual pude aprobar mis dos programaciones I y II , y del cual sigo aprendiendo.

curioseando vi este link propuesto y me preguntaba si pudieran darme una idea o la ayuda que prefieran para el caso en que  no fueran palabras por separado,  sino una frase, con espacios y porejemplo puntos o comas, y quisiera invertirla.

gracias


10-Feb-2014 14:35
Nacho Cabanes (+83)

Puedes recorrer la frase de principio a fin. Cada vez que encuentres un espacio (o cuando termines de recorrer la frase), tomas el substring que hay antes del espacio, y lo concatenas al principio de una nueva cadena, eliminándolo de la cadena original.

Prueba y comparte aquí tu intento, en caso de no conseguirlo.


13-Feb-2014 11:18
oscar gomez

Hola profesor nacho.
ok, entiendo lo que me dices como sugerencia de llevar el substring que esta antes del espacio y lo concatene en una nueva, pero y que pasaria con los simbolos iniciales pues mi pregunta hacia referencia  a una frase con simbolos tales como la coma, el punto, es decir como llevo esos simbolos para que queden en la misma posicion original que tenia la cadena , ahora a cada palabra invertida en la nueva frase? mil gracias por tu ayuda


13-Feb-2014 12:01
Nacho Cabanes (+83)

Pon un ejemplo de lo que quieres hacer con esos símbolos adicionales y verás tú mismo la respuesta.  ;-)

Por ejemplo, si quieres que algo como "Hola Nacho." se convierta en "Nacho. Hola", no debes tratar los puntos (y los símbolos que tú decidas) como separadores, sino como parte de las palabras.

Por el contrario, si quieres que "Hola,Nacho" se convierta en "Nacho,Hola", tendrás que considerar la coma (y quizá otros símbolos) como separadores válidos, además del espacio.

Pero insisto: primero debes plantearte tú mismo qué es lo que quieres conseguir, porque hay varias soluciones posibles.


13-Feb-2014 14:59
oscar gomez

cordial saludo profesor, gracias por tu respuesta, en efecto tienes razon en cuanto a no haberte definido exactamente que es lo que quiero y por ello mis disculpas.
Efectivamente lo que deseo y atraves de tu ejemplo esta claro:

Por el contrario, si quieres que "Hola,Nacho" se convierta en "Nacho,Hola", tendrás que considerar la coma (y quizá otros símbolos) como separadores válidos, además del espacio.

gracias por cualquier ayuda o idea que reciba.


14-Feb-2014 13:21
Nacho Cabanes (+83)

La idea es la siguiente:

Se recorre toda la cadena.

Si la letra actual no es un espacio (o uno de los separadores adicionales que quieras comprobar, como la coma), se va formando la "palabra actual".

Si es un espacio (o cualquier otro separador), se guarda la palabra actual como parte del "resultado" y se comienza una nueva palabra

Al final debes tener en cuenta el caso de que habrá una última palabra que no termina en espacio.

Te he incluido aquí una versión en C#, que no te costará adaptar a Pascal:

http://www.aprendeaprogramar.com/fuentes/view.php?t=6

¿Por qué en C#? Para que puedas comparar otra alternativa que permiten lenguajes más modernos que Pascal, en los que un problema como éste se puede resolver con 3 órdenes: Split para partir la frase, Reverse para invertir el array resultante y Join para volver a juntar los elementos del array formando una nueva frase:

http://www.aprendeaprogramar.com/fuentes/view.php?t=5


07-Mar-2014 12:24
oscar gomez

Hola profesor, disculpa que no me habia dado cuenta que habias respondido a mi post.
profesor solo una ultima cuestion en este tema, me podrias matizar mas con un ejemplo o como creas conveniente para entenderte esta parte que mencionas en la solucion:
"Al final debes tener en cuenta el caso de que habrá una última palabra que no termina en espacio. " ,es que no me queda claro por que debe hacerse esta ultima accion, en que caso porejemplo en :
Hola,Nacho" se convierta en "Nacho,Hola", a que palabra ultima que no termina en espacio y por que debe tenerse encuenta, que pasaria si se obviara dicha cuestion, gracias por explicarmelo de la mejor manera y disculpa si puede ser obvio pero seria importante para mi aclararlo.


08-Mar-2014 12:55
Nacho Cabanes (+83)

Me refiero a que cada palabra estará seguida por un espacio (o un separador de los que permitas emplear)... excepto la última, que, en general, acabará en la última posición de la cadena, sin ningún separador tras ella.






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