P_66_E_5-Contar+palabras+con+cierto+numero+de+vocales

=__**Contar palabras con al menos un número determinado de vocales distintas**__=

> ===Programa que:=== > ===1. Lee una frase=== > ===2. Lee el número mínimo de vocales distintas=== > ===3. Cuenta (y muestra por pantalla) cuántas palabras de la frase tienen, al menos, tantas vocales distintas como se ha leído en el punto 2===

code format="pascal" PROGRAM P_66_E_5 ; TYPE tsCadenas = String [128] ;

PROCEDURE ExtraerPrimeraPalabra (VAR sFrase, sPalabra: tsCadenas) ; VAR iPosicEsp : Integer  ; BEGIN iPosicEsp := Pos (' ', sFrase) ;

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

FUNCTION fniContarVocales (sPalabra: tsCadenas) : Integer ; VAR iContVoc: Integer ; BEGIN sPalabra := UpCase (sPalabra) ;

iContVoc := 0 ;

IF Pos ('A', sPalabra) <> 0  THEN iContVoc := iContVoc + 1 ; IF Pos ('E', sPalabra) <> 0  THEN iContVoc := iContVoc + 1 ; IF Pos ('I', sPalabra) <> 0  THEN iContVoc := iContVoc + 1 ; IF Pos ('O', sPalabra) <> 0  THEN iContVoc := iContVoc + 1 ; IF Pos ('U', sPalabra) <> 0  THEN iContVoc := iContVoc + 1 ;

fniContarVocales := iContVoc; END ;

{--- Variables del Programa Principal } VAR sFrase, sPalabra:   tsCadenas  ; iVocalDist, iContPal: Integer ;

BEGIN {*************** Programa Principal ***********************} Write ('Escribe una frase: ') ; ReadLn (sFrase) ; Write ('Indica número de vocales distintas (1..5): ') ; ReadLn (iVocalDist) ;

iContPal := 0 ;

REPEAT ExtraerPrimeraPalabra (sFrase, sPalabra) ;

IF fniContarVocales (sPalabra) >= iVocalDist THEN iContPal := iContPal + 1 ;

UNTIL Length (sFrase) = 0 ;

WriteLn ; WriteLn ('Hay ', iContPal, ' palabras con, al menos, ', iVocalDist, ' vocales distintas ') ;

WriteLn ; ReadLn ; END.

code

> **Otra versión de la función que cuenta el número de vocales distintas: fniContarVocales **

code format="pascal" FUNCTION fniContarVocales (sPalabra: tsCadenas) : Integer ;

VAR i, iContVoc : Integer ; sVocales   : String [5] ; BEGIN sPalabra := UpCase (sPalabra) ; sVocales := 'AEIOU' ;

iContVoc := 0       ;

FOR i := 1 TO 5 DO          { Length (sVocales) = 5 } IF (Pos (sVocales[i], sPalabra) <> 0 THEN        iContVoc := iContVoc + 1 ;

fniContarVocales := iContVoc ; END ; code

> **Otra versión de la función que cuenta el número de vocales distintas: fniContarVocales **

code format="pascal" FUNCTION fniContarVocales (sPalabra: tsCadenas) : Integer ;

VAR i, iCont_A, iCont_E, iCont_I, iCont_O, iCont_U : Integer ; BEGIN iCont_A := 0 ; iCont_E := 0 ; iCont_I := 0 ; iCont_O := 0 ; iCont_U := 0 ;

FOR i := 1 TO Length (sPalabra) DO     CASE sVocales[i] DO         'a', 'A' : iCont_A :=  1 ; 'e', 'E' : iCont_E := 1 ; 'i', 'I' : iCont_I := 1 ; 'o', 'O' : iCont_O := 1 ; 'u', 'U' : iCont_U := 1 ; END ;

fniContarVocales := iCont_A + iCont_E + iCont_I + iCont_O + iCont_U ; END ; code