С++ для начинающих Мода массива

Сайт не является учебником по программированию. Это только небольшой авторский сборник информации в помощь начинающим программистам.

Одно из популярных заданий при работе с массивами — это поиск моды. Модой называют наиболее часто встречающееся или повторяющееся значение в массиве или интервале данных. В книге Дейтелов есть пример, в котором показано как искать моду, но честно говоря какой-то он не самый удачный. Сам пример хороший, но вот то, как описан сам принцип работы примера мне не очень понравилось. Вникал я долго, собственно так и не вник. Основываясь на примере из книги Дейтелов я покажу один из множества возможных вариантов решения и опишу, что к чему и зачем. Мой вариант описания тоже не идеальный, но возможно и не самый плохой.

Для решения любой задачи, нужно прикинуть то, что может потребоваться. Частично новые задачи решаются по ходу решения, так как нельзя предвидеть всего. Вот и эту так получилось, но этот момент я предпочту оставить в стороне. Просто стоит иметь это виду, что не все сразу у всех выходит.

Итак, для решения этой задачи в моем примере будут использоваться числа от 1 до 9.
Например, есть массив из N элементов и он содержит случайные целые числа от 1 до 9. Нужно найти такое число внутри массива, которое встречается чаще других, значит нужно найти моду. Чтобы найти моду я буду использовать вспомогательный массив, но зачем он нужен, наверное лучше будет понятно после примера, поэтому приступаю к примеру. В примере функция main и две стандартные функции (заполнение массива и печать массива на экране), еще одна функция есть и она нас интересует, функция поиска моды.
Я не буду полностью доделывать пример, но выполню самое главное. Вам останется дописать функцию поиска максимального значения в массиве

Код C++ Поиск моды в массиве

Такой вот предварительный анализ для поиска моды в массиве очень полезен для получения некоторых навыков работы с массивами для многих начинающих. Давайте разбираться что тут происходит. Для начала стоит вспомнить, что у массива своего рода природная двойственность. Можно обращаться к элементу массива и можно обращаться к индексу массива. Это свойство использовано в примере. Я создал дополнительный массив, который обозначил как рейтинг. Так как количество цифр изначально — это цифры от 1 до 9, то мне достаточно 9 ячеек. Каждая ячейка обозначает определенную цифру. (Нулевая = 1, Первая = 2…). Согласно некоторому плану, массив рейтинга я буду бомбить по его же индексам. Чтобы бомбить массив рейтинга я поэлементно обращаюсь к каждой ячейке основного массива по очереди. Обращаясь к нулевой ячейке основного массива я получаю оттуда некоторое значение-цифру. Эта цифра выполняет роль координат для бомбежки. Другими словами я обращаюсь к значению основного массива, чтобы обратится к индексу массива рейтинга. После обращения к индексу массива рейтинга я увеличиваю на единицу то значение, которое там находится.
rating[Arr[i]-1]++; сложноватая штука для начинающих программистов, здесь
Arr[i] — это вытаскивание значения-координаты, которая будет индексом массива рейтинга
Arr[i]-1 — это уменьшение полученного значения на 1 (объяснять долго, это из-за отсчетов от нуля/единицы)
rating[Arr[i]-1] — это я активирую координату на массиве rating (навел прицел)
rating[Arr[i]-1]++ — это я увеличиваю значение по активированной координате на +1 (сбросил снаряд)
===================
не надо путать Arr[i+1] и Arr[i]+1 — это совершенно разное. первое просто обращение к индексу, второе увеличение значения по указанному индексу на единицу

Таким образом после прохода по всему основному массиву я получаю некоторый массив рейтинга, согласно которому можно посчитать какое число в массиве сколько раз встречается и, соответственно, выполнить поиск того числа, которое встречается чаще всего. Мне нетрудно это доделать, но поиск такого числа я предпочту оставить на вас, учащиеся. Самое трудное я описал как мог. По поводу нулей и единиц часто бывает путаница, нужно знать где, что и от чего начинает отсчет. Не думаю, что основная масса сходу осилит доделывание, но практиковаться надо обязательно.
Также отмечу, что этот пример хорошо подходит для поиска числа или одного символа, но не для поиска, например, слова.

Все комментарии на сайте проверяются, поэтому ваш комментарий может появиться не сразу. Для вставки кода в комментарий используйте теги: [php]ВАШ_КОД[/php]

2 комментария: С++ для начинающих Мода массива

  • Nik говорит:

    веселое задание). прочитал заголовок и заинтересовался. час где-то потратил на то, чтобы додуматься до рейтинга, еще пол на то, чтобы понять, как его использовать. приходила даже мысля использовать ссылки, но… вы поняли))

  • Vladimir говорит:

    Задание шикарное! Для новичков для понимания самое нужное, я потратил минут 40 чтоб разобраться что к чему. Честно сказать описание не особо помогает пониманию, но может это и к лучшему, я разобрался когда пропустил через дебаг по ступенькам.

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

Ваш e-mail не будет опубликован.

Поиск

 
     
Яндекс.Метрика

НАГРАДИ АВТОРА САЙТА
WEBMONEY
R375024497470
U251140483387
Z301246203264
E149319127674

Кошки стали умнее людей — не регистрируются вконтакте, не заводят твиттер

Выражаю свою признательность

  • Максиму очень признателен за указание на мои ошибки и неточности.
  • Sergio ===> за оказание помощи в исправлении моих ошибок
  • Gen ===> за правильное стремление помочь другим новичкам и выявления моих ошибок