contar+letras+dobles

=__**Leer una frase y contar el número de letras dobles que contiene**__=

code format="pascal" PROGRAM string_3 A; CONST iLONG_FISICA = 128 ; TYPE tsCadena = STRING [iLONG_FISICA] ;

FUNCTION fniContarLetrasDobles (sTexto : tsCadena) : Integer ; VAR iCont, i      : Byte ; cCaracterActualMayus, cCaracterAnteriorMayus, cCaracterSiguienteMayus : Char ; BEGIN iCont := 0 ;

FOR i := 2 TO Length (sTexto) DO    BEGIN cCaracterActualMayus  := UpCase ( sTexto [i] ) ; cCaracterAnteriorMayus := UpCase ( sTexto [i-1] ) ;

IF ('A' <= cCaracterActualMayus ) AND ( cCaracterActualMayus <= 'Z') THEN IF (cCaracterAnteriorMayus = cCaracterActualMayus) THEN iCont := iCont + 1 END ;

fniContarLetrasDobles := iCont ; END ;

{ Variables del programa principal } VAR sFrase : tsCadena ;

BEGIN {*************** Programa Principal ***********************} Writeln ; Writeln ('Escribe una frase con alguna(s) letra(s) dobles: ') ; Readln (sFrase) ;

WriteLn ; Writeln ('Nº de letras dobles: ', fniContarLetrasDobles (sFrase)) ; WriteLn ; ReadLn ; END.

code > **Si se quiere que en el caso de que haya más de dos letras iguales seguidas sólo se cuente como una única letra doble.** code format="pascal" PROGRAM string_3B ; CONST iLONG_FISICA = 128 ; TYPE tsCadena = STRING [iLONG_FISICA] ;

FUNCTION fniContarLetrasDobles (sTexto : tsCadena) : Integer ; VAR iCont, i      : Byte ; cCaracterActualMayus, cCaracterAnteriorMayus, cCaracterSiguienteMayus : Char ; BEGIN iCont := 0 ;

FOR i := 2 TO Length (sTexto) - 1 DO    BEGIN cCaracterActualMayus   := UpCase ( sTexto [i] ) ; cCaracterAnteriorMayus := UpCase ( sTexto [i-1] ) ; cCaracterSiguienteMayus := UpCase ( sTexto [i+1] ) ;

IF ('A' <= cCaracterActualMayus ) AND ( cCaracterActualMayus <= 'Z') THEN IF (cCaracterAnteriorMayus = cCaracterActualMayus)  AND (cCaracterSiguienteMayus <> cCaracterActualMayus) THEN iCont := iCont + 1 END ;

{ Comprobar si la última y la penultima son letras y son iguales } cCaracterActualMayus := UpCase ( sTexto [Length (sTexto)] ) ; cCaracterAnteriorMayus := UpCase ( sTexto [Length (sTexto) - 1] ) ; IF cCaracterAnteriorMayus = cCaracterActualMayus THEN iCont := iCont + 1 ;

fniContarLetrasDobles := iCont ; END ;

{ Variables del programa principal } VAR sFrase : tsCadena ;

BEGIN {*************** Programa Principal ***********************} Writeln ; Writeln ('Escribe una frase con alguna(s) letra(s) dobles: ') ; Readln (sFrase) ;

WriteLn ; Writeln ('Nº de letras dobles: ', fniContarLetrasDobles (sFrase)) ;

WriteLn ; ReadLn ; END. code