Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
vezde-smirno
0 / 0 / 0
Регистрация: 04.06.2013
Сообщений: 30
#1

Как вывести наиболее часто встречаемые элементы в массиве? - C++

04.06.2013, 19:20. Просмотров 2809. Ответов 18
Метки нет (Все метки)

Задание. Вывод наиболее часто встречаемых элементов в массиве
Написать функцию, которая в массиве целых чисел a выводит информацию о наиболее часто встречаемых элементах с указанием значения элемента и его количества.
Написать программу, заполняющую массив целых чисел размером n (n – глобальная именованная константа и равна 20, массив A объявлен глобальным) случайными числами в интервале от 0 до 20. Далее вызвать функцию поиска и вывода на экран наиболее часто встречаемых элементов.
Пример работы программы:
массив A={1,1,3,5,4,6,3,4,3,1,1,5}
Результат:
1 – 4 раза
3 – 3 раза
4 – 2 раза
5 – 2 раза
6 – 1 раз
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2013, 19:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как вывести наиболее часто встречаемые элементы в массиве? (C++):

Найти в массиве и вывести значение наиболее часто встречающегося элемента. - C++
ПАцаны помогите, попадаю... отблагадарю... 1. Найти в массиве и вывести значение наиболее часто встре* чающегося элемента.

Найти в массиве и вывести значение наиболее часто встречающегося элемента - C++
Здравствуйте вы мне можете помочь? вот условие задачи, её надо сделать на С.... заранее благоларю... 1. Найти в массиве и вывести...

Дан непустой массив из цифр. Вывести на экран цифру наиболее часто встречающихся в этом массиве. - C++
Доброго времени суток Помогите пжл с задачей Дан непустой массив из цифр. Вывести на экран цифру наиболее часто встречающихся в...

Найти количество элементов, наиболее часто встречающихся в массиве - C++
Найти кол-во элементов наиболее частых встречающихся в массиве. например массив: 123000 023400 023450 003456 0-не...

Найти число, наиболее часто встречающееся в этом массиве - C++
Знаю, что таких тем здесь много, но таким способом нету :( , помогите исправить ошибку, вывод не выводит на экран ответ, начало работает...

Массивы: Найти наиболее часто повторяющиеся числа в массиве - C++
Здравствуйте! Подскажите пожалуйста где у меня может быть ошибка. Дело в том, что вначале когда начал писать код, поставил размер массива...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
04.06.2013, 19:35 #2
Цитата Сообщение от vezde-smirno Посмотреть сообщение
Задание. Вывод наиболее часто встречаемых элементов в массиве
Написать функцию, которая в массиве целых чисел a выводит информацию о наиболее часто встречаемых элементах с указанием значения элемента и его количества.
Написать программу, заполняющую массив целых чисел размером n (n – глобальная именованная константа и равна 20, массив A объявлен глобальным) случайными числами в интервале от 0 до 20. Далее вызвать функцию поиска и вывода на экран наиболее часто встречаемых элементов.
Пример работы программы:
массив A={1,1,3,5,4,6,3,4,3,1,1,5}
Результат:
1 – 4 раза
3 – 3 раза
4 – 2 раза
5 – 2 раза
6 – 1 раз
Объявить массив счетчиков count[21] = {0}. Далее в цикле for проверяем каждый элемент массива А. Если, например, элемент 0 равен 6, значит count[A[0]]++;
Потом выводим массив счетчиков в формате: индекс_ значение
vezde-smirno
0 / 0 / 0
Регистрация: 04.06.2013
Сообщений: 30
04.06.2013, 19:47  [ТС] #3
Мимино, спасибушки за наводку, но я как-то не умею это всё дело осуществлять. но скоро научусь) смогешь функцию написать?
Evg
Эксперт CАвтор FAQ
17630 / 5854 / 376
Регистрация: 30.03.2009
Сообщений: 16,141
Записей в блоге: 26
04.06.2013, 19:49 #4
Цитата Сообщение от Мимино Посмотреть сообщение
Если, например, элемент 0 равен 6
А если элемент 0 равен 100500?

Проще всего отсортировать массив по убыванию, а дальше простым обходом печатать значение и количество
vezde-smirno
0 / 0 / 0
Регистрация: 04.06.2013
Сообщений: 30
04.06.2013, 19:57  [ТС] #5
Evg, это попроще вроде, но немного расходится с заданием. ну да ладно, главное шоб работала. как цикл-то выглядеть должен? это мне после сортировки надо использовать while и сравнивать i-ый элемент с i+1 -ым, и пока так будет продолжаться, увеличивать счетчик, я правильно понял?
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
04.06.2013, 20:00 #6
Цитата Сообщение от Evg Посмотреть сообщение
А если элемент 0 равен 100500?

Проще всего отсортировать массив по убыванию, а дальше простым обходом печатать значение и количество
по условию задачи массив заполняется элементами от 0 до 20

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
 
const int size = 20;
int arr[size];
 
void mode(void);
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    srand(time(NULL));
    cout << "Массив: ";
    for (int i = 0; i < size; i++)
    {
        arr[i] = rand() % 21;
        cout << arr[i] << "  ";
    }
 
    cout << endl;
    mode();
    system("pause");
    return 0;
}
 
 
void mode()
{
    const int countSize = 21;
    int count[countSize] = {0};
 
    for (int i = 0; i < size; i++)
        count[arr[i]]++;
 
    for (int i = 0; i < countSize; i++)
        cout << i << " - " << count[i] << " раз." << endl;
}
А вот результат (или вывод нужен по убыванию моды?):
Миниатюры
Как вывести наиболее часто встречаемые элементы в массиве?  
vezde-smirno
0 / 0 / 0
Регистрация: 04.06.2013
Сообщений: 30
04.06.2013, 20:21  [ТС] #7
Вот тут я чего-то сделал, скопипастил. Как мне сортировку привязать к моему массиву? Тут из другой программы его выдернул.



C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include "stdafx.h"
#include <time.h>
#include <stdlib.h>
#include <locale.h>
#include <iostream>
using namespace std;
 
const int n=20;
int mas[n];
 
 
void PrintArray()
{
    for(int i=0;i<n;i++)
        cout<< mas[i]<<" ";
    cout<< endl;
}
 
int sortirovka()
{
    const int c=12;
    int b[c];
    printf ("Введите 12 целых чисел: ");
    for (int i=0; i<c; i++) scanf("%d ", &b[i]);    //Описание значений элементов массива вводом с клавиатуры.
    for (int i=0; i<c-1; i++){  //11 раз находим наименьший элемент.
        int d=i;    //Берём за наименьший первый элемент  из рассмотренных элементов.
        for (int j=i+1;j<c;j++)
            if (b[j]<b[d]) d=j; //Условие: если меньший элемент найден, то запоминается его номер.
        int a=b[i];//обмен элементов.
        b[i]=b[d];
        b[d]=a;
    }
    for (int i=0;i<c-1;i++) printf ("%d ",b[i]);    //Вывод готового результата.
    printf ("\n");
    return 0;
}
 
int main()
{
    setlocale(0,"");
    srand(time(NULL));
    for(int i=0;i<n;i++)
        mas[i]=rand()%21;
    PrintArray();
    return 0;
}
Добавлено через 37 секунд
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
/*Задание 3. Вывод наиболее часто встречаемых элементов в массиве
Написать функцию, которая в массиве целых чисел a выводит информацию о  наиболее часто 
встречаемых элементах с указанием значения элемента и его количества.
Написать программу, заполняющую массив целых чисел размером n (n – глобальная именованная 
константа и равна 20, массив A объявлен глобальным) случайными числами в интервале от 0 до 20. 
Далее вызвать функцию поиска и вывода на экран наиболее часто встречаемых элементов. 
Пример работы программы:
массив A={1,1,3,5,4,6,3,4,3,1,1,5}
Результат:
1 – 4 раза
3 – 3 раза
4 – 2 раза
5 – 2 раза
6 – 1 раз
*/
 
#include "stdafx.h"
#include <time.h>
#include <stdlib.h>
#include <locale.h>
#include <iostream>
using namespace std;
 
const int n=20;
int mas[n];
 
 
void PrintArray()
{
    for(int i=0;i<n;i++)
        cout<< mas[i]<<" ";
    cout<< endl;
}
 
int sortirovka()
{
    const int c=12;
    int b[c];
    printf ("Введите 12 целых чисел: ");
    for (int i=0; i<c; i++) scanf("%d ", &b[i]);    //Описание значений элементов массива вводом с клавиатуры.
    for (int i=0; i<c-1; i++){  //11 раз находим наименьший элемент.
        int d=i;    //Берём за наименьший первый элемент  из рассмотренных элементов.
        for (int j=i+1;j<c;j++)
            if (b[j]<b[d]) d=j; //Условие: если меньший элемент найден, то запоминается его номер.
        int a=b[i];//обмен элементов.
        b[i]=b[d];
        b[d]=a;
    }
    for (int i=0;i<c-1;i++) printf ("%d ",b[i]);    //Вывод готового результата.
    printf ("\n");
    return 0;
}
 
int main()
{
    setlocale(0,"");
    srand(time(NULL));
    for(int i=0;i<n;i++)
        mas[i]=rand()%21;
    PrintArray();
    return 0;
}
Добавлено через 11 минут
Мимино, вот это вообще хорооош)) только было бы здорово, если бы выводило в нужном порядке )
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
04.06.2013, 20:45 #8
Цитата Сообщение от vezde-smirno Посмотреть сообщение
Добавлено через 11 минут
Мимино, вот это вообще хорооош)) только было бы здорово, если бы выводило в нужном порядке )
Сейчас соображу.
vezde-smirno
0 / 0 / 0
Регистрация: 04.06.2013
Сообщений: 30
04.06.2013, 20:52  [ТС] #9
Мимино,зачем в твоей программе строка "system("pause");"? От нее ведь толку никакого, и к тому же два раза приходится нажимать кнопку, чтобы выйти из черного окна! Я её закомментировал, и всё работает.
Цитата Сообщение от Мимино Посмотреть сообщение
по условию задачи массив заполняется элементами от 0 до 20

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
 
const int size = 20;
int arr[size];
 
void mode(void);
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    srand(time(NULL));
    cout << "Массив: ";
    for (int i = 0; i < size; i++)
    {
        arr[i] = rand() % 21;
        cout << arr[i] << "  ";
    }
 
    cout << endl;
    mode();
    system("pause");
    return 0;
}
 
 
void mode()
{
    const int countSize = 21;
    int count[countSize] = {0};
 
    for (int i = 0; i < size; i++)
        count[arr[i]]++;
 
    for (int i = 0; i < countSize; i++)
        cout << i << " - " << count[i] << " раз." << endl;
}
А вот результат (или вывод нужен по убыванию моды?):
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
04.06.2013, 21:12 #10
Цитата Сообщение от vezde-smirno Посмотреть сообщение
Мимино,зачем в твоей программе строка "system("pause");"? От нее ведь толку никакого, и к тому же два раза приходится нажимать кнопку, чтобы выйти из черного окна! Я её закомментировал, и всё работает.
Как это 2 раза? Она как раз для того и нужна, чтобы окно не закрывалось сразу после выполнения программы.
З.Ы. С выводом по убыванию моды еще борюсь... Вариант есть, но он "кривой" и мне не нравится.
Evg
Эксперт CАвтор FAQ
17630 / 5854 / 376
Регистрация: 30.03.2009
Сообщений: 16,141
Записей в блоге: 26
04.06.2013, 21:23 #11
Цитата Сообщение от Мимино Посмотреть сообщение
по условию задачи массив заполняется элементами от 0 до 20
Невнимательно прочитал
Тогда однозначно твой метод решения верный
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
04.06.2013, 21:44 #12
Как то так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
 
const int size = 20;
int arr[size];
 
void mode(void);
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    srand(time(NULL));
    cout << "Массив: ";
    for (int i = 0; i < size; i++)
    {
        arr[i] = rand() % 21;
        cout << arr[i] << "  ";
    }
 
    cout << endl;
    mode();
    system("pause");
    return 0;
}
 
 
void mode()
{
    const int countSize = 21;
    int count[countSize] = {0}, largest = 0;
 
    for (int i = 0; i < size; i++)
        count[arr[i]]++;
 
    for (int i = 0; i < countSize; i++)
        if (count[i] > largest)
            largest = count[i];
 
    while (largest > 0)
    {
        for (int i = 0; i < countSize; i++)
            if (count[i] == largest)
                cout << setw(2) << i << " - " << count[i] << " раз." << endl;
        largest--;
    }
}
Результат:
Миниатюры
Как вывести наиболее часто встречаемые элементы в массиве?  
vezde-smirno
0 / 0 / 0
Регистрация: 04.06.2013
Сообщений: 30
04.06.2013, 22:07  [ТС] #13
Мимино, да, всё работает, просто супер! можешь разъяснить несколько моментов в программе? и можно ли с тобой связаться как-нибудь, кроме форума?
Цитата Сообщение от Мимино Посмотреть сообщение
Как то так
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include "stdafx.h"
#include <iostream>
#include <iomanip>
using namespace std;
 
const int size = 20;
int arr[size];
 
void mode(void);
 
int main()
{
    setlocale(LC_ALL, "Russian");
 
    srand(time(NULL));
    cout << "Массив: ";
    for (int i = 0; i < size; i++)
    {
        arr[i] = rand() % 21;
        cout << arr[i] << "  ";
    }
 
    cout << endl;
    mode();
    system("pause");
    return 0;
}
 
 
void mode()
{
    const int countSize = 21;
    int count[countSize] = {0}, largest = 0;
 
    for (int i = 0; i < size; i++)
        count[arr[i]]++;
 
    for (int i = 0; i < countSize; i++)
        if (count[i] > largest)
            largest = count[i];
 
    while (largest > 0)
    {
        for (int i = 0; i < countSize; i++)
            if (count[i] == largest)
                cout << setw(2) << i << " - " << count[i] << " раз." << endl;
        largest--;
    }
}
Результат:
Мимино
180 / 151 / 5
Регистрация: 22.05.2013
Сообщений: 435
Записей в блоге: 1
04.06.2013, 22:08 #14
Цитата Сообщение от vezde-smirno Посмотреть сообщение
Мимино, да, всё работает, просто супер! можешь разъяснить несколько моментов в программе? и можно ли с тобой связаться как-нибудь, кроме форума?
Что нужно разъяснить?
vezde-smirno
0 / 0 / 0
Регистрация: 04.06.2013
Сообщений: 30
04.06.2013, 22:15  [ТС] #15
Мимино, что делает 9 строка?

Добавлено через 1 минуту
что делает 36 строка?

Добавлено через 1 минуту
что такое setw(2) в 46 строке?

Добавлено через 2 минуты
можно тебе еще задачку подкинуть? если лень делать, объясни хоть мне, как выделять байты в числе. вот задание:
Задание. Разделение массива на несколько
Дан массив i[] состоящий из n чисел типа int (случайное равномерное заполнение выполняется программой), n=10. Произвести сохранение всех элементов массива i[] в
элементах 4-х массивов типа char (массивы a[],b[],c[],d[]).
Например, число int состоит из 32 бит (4 байт). Первый байт элемента i[k] следует сохранить в массиве a[] с соответствующим индексом элемента k (a[k]). Второй байт — аналогично в массиве b (b[k]). Третий и четвёртый байты - в массивах c и d соответственно. Вывести массивы a,b,c,d на экран.
Произвести обратную операцию объединения числа, для этого выполнить «сбор» массивов a,b,c,d в массив j[] типа int. Вывести массив j[] на экран.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.06.2013, 22:15
Привет! Вот еще темы с ответами:

Найти значение наиболее часто встречающееся в целочисленном массиве размера N - C++
Люди добрые ПОМОГИТЕ ПОЖАЛУЙСТА решить задачу - ЗАВТРА СДАВАТЬ !!!! Условие: Задан Целочисленный массив размера N. Найти значение...

Вывести 10 наиболее часто встречающихся чисел - C++
Нужно написать функцию, которая находит в векторе(видел с использованием map, но не понимаю особо что к чему, вектор как то ближе) 10...

Посчитать все элементы и наиболее часто встречающиеся - удалить - C++
Помогите пожалуйста! Используя класс list (либо map) из стандартной библиотеки шаблонов Stl посчитать из файла in.txt все слова в список...

Найти и вывести на консоль символы, наиболее часто встречающиеся в заданной строке - C++
В тексте найти и напечатать символы, встречающиеся наиболее часто. Помогите !


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.06.2013, 22:15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru