Leer+frases+y+extraer+vocales+y+consonantes

=__**Leer una frase y extraer vocales y consonantes**__=

Programa que lee una cadena de caracteres y extrae las vocales y las consonantes, para crea otras dos cadenas:
 * Una con las vocales
 * Otra con las consonantes de la cadena leída.
 * NOTA**: De la frase inicial se eliminan las vocales y las consonantes

code format="pascal" PROGRAM EXT_CAD ; TYPE tsCadena = String [30] ;
 * ERRONEO: **
 * **FOR i := 1 TO Length (sTotal) DO**

PROCEDURE SepararConFOR_ERRONEO (VAR sTotal, sVocales, sConsonantes : tsCadena); VAR i : Byte ; BEGIN { inicializar como vacías las dos cadenas } sVocales := '' ; { sVocales [0] := Chr (0) } sConsonantes := '' ; { sConsonantes [0] := Chr (0) }

FOR i := 1 TO Length (sTotal) DO     CASE Upcase (sTotal[i]) OF           'A', 'E', 'I', 'O', 'U': BEGIN sVocales := sVocales + sTotal [i] ; Delete (sTotal, i, 1) END ; 'B' .. 'D', 'F' .. 'H', 'J' .. 'N', 'P' .. 'T', 'ñ', 'Ñ' : BEGIN sConsonantes := sConsonantes + sTotal [i]; Delete (sTotal, i, 1) ; END ; ELSE { Avanzar el índice al siguiente elemento de la cadena } i := i + 1 ; END ; { CASE } END ; { SepararConFOR_ERRONEO }

{--- Variables del Programa Principal -} VAR sCadLeida, sCadTotal, sCadVocal, sCadCons : tsCadena ;

BEGIN { Programa Principal ---} Writeln ('Programa que lee una frase y crea dos cadenas de caracteres') ; Writeln ('Una con las vocales y otra con las consonantes') ; Writeln ('La vocales y las consonantes se eliminan de la frase inicial') ; Writeln ; Writeln ('Probar con la frase: El mes de Enero tiene 31 días '};  Writeln ;   Write ('Escribe una frase: ') ;   ReadLn (sCadLeida) ;

sCadTotal := sCadLeida ;

Writeln ; Writeln ('Cadena inicial: ', sCadTotal) ;

Writeln ; Writeln ('Con bucle FOR (ERRONEO)') ;

SepararConFOR_ERRONEO (sCadTotal, sCadVocal, sCadCons) ;

Writeln ('   Vocales: ', sCadVocal) ; Writeln ('Consonantes: ', sCadCons) ; Writeln ('     Resto: ', sCadTotal) ;

ReadLn ; END. { FIN de EXT_CAD.PAS } code code format="pascal" PROGRAM EXT_CAD ; TYPE tsCadena = String [30] ;
 * CORRECTOS **
 * **FOR i := Length (sTotal) DOWNTO 1 DO**
 * ** WHILE ... **

PROCEDURE SepararConFOR_CORRECTO (VAR sTotal, sVocales, sConsonantes : tsCadena); VAR i : Byte ; BEGIN { inicializar como vacías las dos cadenas } sVocales := '' ; { sVocales [0] := Chr (0) } sConsonantes := '' ; { sConsonantes [0] := Chr (0) } FOR i := Length (sTotal) DOWNTO 1 DO     CASE Upcase (sTotal[i]) OF           'A', 'E', 'I', 'O', 'U': BEGIN sVocales := sVocales + sTotal [i] ; Delete (sTotal, i, 1) END ; 'B' .. 'D', 'F' .. 'H', 'J' .. 'N', 'P' .. 'T', 'ñ', 'Ñ' : BEGIN sConsonantes := sConsonantes + sTotal [i]; Delete (sTotal, i, 1) ; END ; ELSE { Avanzar el índice al siguiente elemento de la cadena } i := i + 1 ; END ; { CASE } END ; { SepararConFOR_CORRECTO }

PROCEDURE SepararConWHILE ( VAR sTotal, sVocales, sConsonantes : tsCadena) ; VAR i : Byte ; BEGIN { inicializar como vacías las dos cadenas } sVocales := '' ; { sVocales [0] := Chr (0) } sConsonantes := '' ; { sConsonantes [0] := Chr (0) }

i := 1 ; WHILE i <= Length (sTotal) DO     CASE Upcase (sTotal[i]) OF           'A', 'E', 'I', 'O', 'U': BEGIN sVocales := sVocales + sTotal [i] ; Delete (sTotal, i, 1) END ; 'B' .. 'D', 'F' .. 'H', 'J' .. 'N', 'P' .. 'T', 'ñ', 'Ñ' : BEGIN sConsonantes := sConsonantes + sTotal [i]; Delete (sTotal, i, 1) ; END ; ELSE { Avanzar el índice al siguiente elemento de la cadena } i := i + 1 ; END ; { CASE } END ; { SepararConWHILE }

{--- Variables del Programa Principal -} VAR sCadLeida, sCadTotal, sCadVocal, sCadCons : tsCadena ;

BEGIN { Programa Principal ---} Writeln ('Programa que lee una frase y crea dos cadenas de caracteres') ; Writeln ('Una con las vocales y otra con las consonantes') ; Writeln ('La vocales y las consonantes se eliminan de la frase inicial') ; Writeln ; Writeln ('Probar con la frase: El mes de Enero tiene 31 días '};  Writeln ;   Write ('Escribe una frase: ') ;   ReadLn (sCadLeida) ;

sCadTotal := sCadLeida ;

Writeln ; Writeln ('Cadena inicial: ', sCadTotal) ;

Writeln ; Writeln ('Con bucle FOR (CORRECTO)') ;

SepararConFOR_CORRECTO (sCadTotal, sCadVocal, sCadCons) ;

Writeln (' Vocales: ', sCadVocal) ; Writeln ('Consonantes: ', sCadCons) ; Writeln (' Resto: ', sCadTotal) ;

sCadTotal := sCadLeida ;

Writeln ; Writeln ('Con bucle WHILE (CORRECTO)') ;

SepararConWHILE (sCadTotal, sCadVocal, sCadCons) ;

Writeln ('   Vocales: ', sCadVocal) ; Writeln ('Consonantes: ', sCadCons) ; Writeln ('     Resto: ', sCadTotal) ;

ReadLn ; END. { FIN de EXT_CAD.PAS } code