Связь с администрацией сайта:       

demo

Среди толпы я одинок

Вывод на экран самого часто встречающегося элемента из массива

Пожалуй, одна из самых часто встречающихся задач. Зачастую необходимо подсчитать статистику о самом активном пользователе, поэтому данный алгоритм программы подойдет для решения данной проблемы.
Как же применить данный алгоритм? А очень просто, у вас в базе есть 100 пользователей, которые оставили определенное количество комментариев. И вот встает вопрос, кто из них самый активный на сайте/в программе?  
 
С этим разобрались, теперь перейдем к написанию алгоритма на языке pascal. Сразу напишу код, а ниже разберем его построчно.
var a:array[1..10] of integer; //Массив чисел
       i,j,m,p,n:integer;
begin
     writeln('введите 10 элементов массива');
     for i:=1 to 10 do readln(a[i]);
     m:=1;
     p:=1;
     for i:=1 to 10 do begin
       n:=0;
       for j:=1 to 10 do begin
          if a[i] = a[j] then inc(n);
       end;
       if n>m then begin
          m:=n;
          p:=i;
       end;
     end;
     writeln('Самый часто встречающийся элемент:',a[p]);
end.
Кажется громоздким, но это только на первый взгляд. На самом деле проще и не придумаешь. Необходимые переменные:
a – массив,
m – количество раз, которое встречается число,
n– переменная, которая в цикле считает количество раз, и обнуляется при дальнейшей обработке цикла i.
p– индекс числа в массиве.
И еще, что требуется, это два цикла со счетчиками i и j. Первый цикл i берет числа от 1 до 10, второй цикл j прогоняет массив от 1 до 10 и считает количество совпадений ifa[i] = a[j] theninc(n); занося в переменную n +1.
После обработки цикла j, ставим условие if n>m, то есть если подсчитанный элемент больше того, что у нас есть, заносим данные о нем m:=n; p:=i.
И после всего этого выводим элемент в массиве с индексом p:
writeln('Самый часто встречающийся элемент:',a[p]);
Для тех, кто до сих пор не понял как взаимодействуют эти циклы с массивом, я  поэтапно объясняю на пальцах в таблице 1.
Таблица 1.

Цикл i. Значение i = 1 в a[i].

Начало цикла i с индексом 1

n:=0;

Присваиваем счетчику одинаковых чисел - ноль.

Цикл j. Значение j = 1 в a[j].

Переходим в цикл j c индексом 1

if a[1] = a[1] then inc(n);

Сравниваем элементы с индексами i = 1, j = 1, если равны то +1 в n

Цикл j. Значение j = 2 в a[j].

Переходим в цикл j c индексом 2

if a[1] = a[2] then inc(n);

Сравниваем элементы с индексами i = 1, j = 2, если равны то +1 в n

…..

Цикл j. Значение j = 10 в a[j].

Переходим в цикл j c индексом 10

if a[1] = a[10] then inc(n);

Сравниваем элементы с индексами i = 1, j = 10, если равны то +1 в n

if n>m then

begin

m:=n;

p:=i;

end;

Сравниваем прошлые результаты о количестве совпадений с нынешними, если нынешние больше, то сохраняем данные о количестве в m, и об индексе массива p, где находится число.

Цикл i. Значение i = 2 в a[i].

Начало цикла i с индексом 2

n:=0;

Присваиваем счетчику одинаковых чисел - ноль.

Цикл j. Значение j = 1 в a[j].

Переходим в цикл j c индексом 1

if a[2] = a[1] then inc(n);

Сравниваем элементы с индексами i = 2, j = 1, если равны то +1 в n

Цикл j. Значение j = 2 в a[j].

Переходим в цикл j c индексом 2

if a[2] = a[2] then inc(n);

Сравниваем элементы с индексами i = 2, j = 2, если равны то +1 в n

…..

Цикл j. Значение j = 10 в a[j].

Переходим в цикл j c индексом 10

if a[2] = a[10] then inc(n);

Сравниваем элементы с индексами i = 2, j = 10, если равны то +1 в n

if n>m then

begin

m:=n;

p:=i;

end;

Сравниваем прошлые результаты о количестве совпадений с нынешними, если нынешние больше, то сохраняем данные о количестве в m, и об индексе массива p, где находится число.

И так до конца цикла i.

 
В конце, сделаем отдельную функцию CountVeryMuchNumber, чтобы код был более элегантным:
type mas = array[1..10]  of integer;
 
function CountVeryMuchNumber(_a:mas):integer;
var i,j,m,p,n:integer;
begin
  m:=1; p:=1;
     for i:=1 to 10 do begin
       n:=0;
       for j:=1 to 10 do begin
          if _a[i]=_a[j] then inc(n);
       end;
       if n>m then begin
          m:=n; p:=i;
       end;
     end;
    CountVeryMuchNumber:=_a[p];
end;
var a:mas;
      i:integer;
begin
     writeln('введите 10 элементов массива');
     for i:=1 to 10 do readln( a[i] );
 
     writeln('самый часто встречающийся элемент:',CountVeryMuchNumber(a));
end.
 
 
Rate this item
(2 votes)
Login to post comments