{ File: contlett.pas }

{ Scopo: uso di array }

program FrequenzaLettere;
{ Legge una sequenza di caratteri terminata da '.' e stampa la lettera
  alfabetica che compare con frequenza massima nella sequenza
  (senza distinguere tra lettere maiuscole e minuscole).

  Usa un array indicizzato con lettere maiuscola per determinare la frequenza
  di ogni lettera alfabetica.
}

type
  TipoLettera   = 'A'..'Z';
  TipoFrequenza = array [TipoLettera] of 0..MAXINT;
           { tipo array di interi positivi, indicizzato con lettere maiuscoli }

var
  conta       : TipoFrequenza;  { array di contatori, uno per lettera }
  lettera,                      { indice del ciclo per scandire l'array }
  lettera_max : TipoLettera;    { lettera con frequenza massima }
  ch          : char;           { carattere letto }


  procedure ConvertiInMaiuscola (var car: char);
  { Converte il carattere car da lettera minuscola in maiuscola. }
  begin
    if ('a' <= car) and (car <= 'z')
      then car := chr(ord(car) - ord('a') + ord('A'));
  end; { ConvertiInMaiuscola }


begin { FrequenzaLettere }

  { azzera tutti i contatori }
  for lettera := 'A' to 'Z' do
    conta[lettera] := 0;

  { leggi la sequenza di caratteri in ingresso e calcola le frequenze }
  writeln('Immetti una sequenza di caratteri terminata da ''.'' !');
  repeat
    read(ch);
    ConvertiInMaiuscola(ch);
    if ('A' <= ch) and (ch <= 'Z') then
      conta[ch] := conta[ch] + 1;  { ch e' una lettera alfabetica, quindi
                                     incrementa il contatore corrispondente }
  until ch = '.';

  { trova la lettera con frequenza massima }
  lettera_max := 'A';
  for lettera := 'B' to 'Z' do
    if conta[lettera] > conta[lettera_max] then
      lettera_max := lettera;

  { stampa del risultato }
  if conta[lettera_max] > 0 then
  begin
    writeln('Lettera alfabetica piu'' frequente: ', lettera_max);
    writeln('Essa appare ', conta[lettera_max], ' volte')
  end
  else
    writeln('Testo senza lettere alfabetiche')
end. { FrequenzaLettere }