String_21+-+Listar+palabras+de+una+frase

=__**Obtener las palabras que forman una frase**__= Escribir un programa en el que:


 * Se definan los tipos y las variables necesarias para manejar cadenas de caracteres
 * Se lea una Frase desde teclado y se muestren las palabras que componen la frase (una en cada línea)

Se considera que las palabras van separadas siempre por un único espacio en blanco y no hay espacios ni al inicio ni al final de la frase.

code format="pascal" PROGRAM String_21 ; USES Crt ; CONST cESPACIO = ' ' ; iLONG_FISICA = 128 ; TYPE tsCadena = String [iLONG_FISICA] ;

PROCEDURE ExtraerPalabra (VAR sFrase, sPalabra: tsCadena) ; VAR byPrimerEspacio : Byte ; BEGIN

WHILE (sFrase[1] = cESPACIO) AND (Length (sFrase) >= 1) DO        Delete (sFrase, 1, 1) ;

byPrimerEspacio := Pos (cESPACIO, sFrase) ;

IF byPrimerEspacio <> 0 THEN BEGIN sPalabra := Copy (sFrase, 1, byPrimerEspacio - 1) ; Delete (sFrase, 1, byPrimerEspacio) END ELSE BEGIN sPalabra := sFrase ; sFrase := '' END ;

WHILE (sFrase[Length (sFrase)] = cESPACIO) AND (Length (sFrase) >= 1) DO        Delete (sFrase, Length (sFrase), 1) ; END ; { ExtraerPalabra }

{ Variables del programa principal -} VAR sFrase, sPalabra : tsCadena ; iPosic : Integer ; cEspera : Char ;

BEGIN { Programa Principal } WriteLn ; WriteLn ('Escribe una frase (sin espacios en blanco adicionales): ') ; ReadLn (sFrase) ;

WriteLn ; WriteLn ('Las palabras que la componen son: ') ;

iPosic := 0 ; WHILE Length (sFrase) > 0 DO        BEGIN ExtraerPalabra (sFrase, sPalabra) ;

iPosic := iPosic + 1 ; WriteLn (iPosic, '¦ : ', sPalabra) END ;

Writeln ; cEspera := ReadKey ; END. { Fin de STRING_21 } code