Leer+una+frase+y+calcular+las+letras+más+frecuentes

=__**Leer una frase y obtener letras más frencuentes**__=

> Leer una frase y obtener las letras que aparecen más veces

code format="pascal" PROGRAM arr_1_2 ; USES Crt ;

TYPE tsCadena      = STRING [80] ; tabyContadores = ARRAY ['A'..'Z'] OF Byte ;

PROCEDURE ContarApariciones (    sCadena       : tsCadena ;                              VAR abyContadores : tabyContadores) ; VAR cLetraMayus : Char ; byIndice   : Byte ; BEGIN { Inicializar los contadores } FOR cLetraMayus := 'A' TO 'Z' DO     abyContadores [cLetraMayus] := 0 ;

{ Contar cu ntas veces aparece cada letra } FOR byIndice := 1 TO Length (sCadena) DO     BEGIN cLetraMayus := Upcase (sCadena[byIndice]) ;

IF ( 'A' <= cLetraMayus ) AND ( cLetraMayus <= 'Z' ) THEN abyContadores [cLetraMayus] := abyContadores [cLetraMayus] + 1 END END ; { ContarApariciones }

FUNCTION fnbyBuscarMaximo (CONST abyContadores : tabyContadores) : Byte ; VAR cIndice : Char ; byMaximo : Byte ; BEGIN byMaximo := 0 ;

FOR cIndice := 'A' TO 'Z' DO       IF abyContadores [cIndice] > byMaximo THEN byMaximo := abyContadores [cIndice] ;

fnbyBuscarMaximo := byMaximo END ; { fnbyBuscarMaximo }

FUNCTION fnsCadenaLetrasFrecuentes (CONST abyContadores : tabyContadores ;                                       byFrecuencia  : Integer) : tsCadena ;

VAR sCadenaFrecuentes : tsCadena ; cIndice         : Char ; BEGIN sCadenaFrecuentes := '' ;

FOR cIndice := 'A' TO 'Z' DO      IF abyContadores [cIndice] = byFrecuencia THEN sCadenaFrecuentes := sCadenaFrecuentes + ' ' + cIndice ;

fnsCadenaLetrasFrecuentes := sCadenaFrecuentes END ; { fnsCadenaLetrasFrecuentes }

VAR { --- Variables del PROGRAMA PRINCIPAL } sCadena           : tsCadena ; abyContadores     : tabyContadores ; byMaximaFrecuencia : Byte ; cEspera           : Char ;

BEGIN { - PROGRAMA PRINCIPAL } Clrscr ; Writeln ; Write ('Escribe una frase: ') ; Readln (sCadena) ; WriteLn ;

IF Length (sCadena) > 0 THEN BEGIN ContarApariciones (sCadena, abyContadores) ;

byMaximaFrecuencia := fnbyBuscarMaximo (abyContadores) ;

IF byMaximaFrecuencia = 0 THEN Writeln ('No has introducido ningun caracter alfabetico') ELSE Writeln ('La(s) letra(s) que mas veces aparece(n) es/son: ',               fnsCadenaLetrasFrecuentes (abyContadores, byMaximaFrecuencia)) END ELSE Writeln ('­ Cadena vacia !') ;

Writeln ; cEspera := ReadKey END. { Final de ARR_1_2.PAS } code