{ 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 }