{ File: contmaiu.pas }

{ Scopo: uso di array }

program FrequenzaMaiuscole;
{ Legge una sequenza di caratteri terminata da '.' e stampa la lettera
  alfabetica maiuscola che compare con frequenza massima nella sequenza.

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

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

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 }

begin { FrequenzaMaiuscole }

  { 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);
    if ('A' <= ch) and (ch <= 'Z') then
      conta[ch] := conta[ch] + 1;  { ch e' una lettera maiuscola, quindi
                                     incrementa il contatore corrispondente }
  until ch = '.';

  { trova la lettera maiuscola 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 maiuscola piu'' frequente: ', lettera_max);
    writeln('Essa appare ', conta[lettera_max], ' volte')
  end
  else
    writeln('Testo senza lettere maiuscole')
end. { FrequenzaMaiuscole }