Частота встречаемости символов в матрице

Задача

Двумерный массив MxN заполнить случайными символами английского алфавита (заглавные). Вывести на экран сколько раз встречается каждый символ.

Решение

 

Программа написана с учетом того, что неизвестно какие номера по таблице символов имеют буквы A и Z, а также неизвестна длина алфавита. Это делает программу немного сложнее, но придает ей гибкость (достаточно поменять символы, код менять не надо).

Выражение ord('Z')-ord('A')+1 вычисляет длину диапазона. Например, порядковый номер Z равен 90, A = 65. Тогда 90 - 65 = 25, однако всего букв 26 (границы диапазона входят в него), поэтому следует прибавить единицу.

В массиве let первой букве алфавита соответствует индекс 1, второй - 2 и т. д. Если известно, какой порядковый номер имеет буква, то можно установить соответствие между индексами и номерами: arr[i,j]-ord('A')+1. Например, arr[i,j] равно 67, буква A имеет номер 65. 67 - 65 = 2. 2 + 1 = 3. Т.е. букве C будет соответствовать третий элемент массива let.

Программа на языке Паскаль: 

 

const m = 25; n = 15;
var
    arr: array[1..n,1..m] of byte;
    let: array[1..30] of byte;
    i,j: byte;
begin
    randomize;
    for i:=1 to n do begin
        for j:=1 to m do begin
            arr[i,j] := ord('A') + random(ord('Z')-ord('A')+1);
            write(chr(arr[i,j]):2)
        end;
        writeln;
    end;
 
    for i:=1 to n do
        for j:=1 to m do
           let[arr[i,j]-ord('A')+1] := let[arr[i,j]-ord('A')+1] + 1;
 
    for i:=1 to (ord('Z')-ord('A')+1) do begin
        write(chr(i+ord('A')-1):3, ' - ', let[i]:2);
        if i mod 5 = 0 then
            writeln;
    end;
 
readln;
end.

 

Тема

Матрицы

Уровень

Комбинированные задачи

Теги

Добавить комментарий