С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
1 / 1 / 1
Регистрация: 16.03.2012
Сообщений: 47

Поиск модульного числа

24.10.2014, 23:44. Показов 1489. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Делаю задачку по книге Страуструп - глава 4 - задачка 16

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

Настряпал такую версию , подскажите что не так . что можно изменить или улучшить.

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
63
64
65
66
67
68
69
#include<iostream> 
#include<string> 
#include<vector> 
#include<algorithm> 
#include<cmath> 
 
int main()
{
    vector<int>my_vector = {1,2,3,4,5,5,6,7,8,9};//вектор чисел
    int turn1 = 1 , turn2 = 1; //турн2 - найбільше повторювань а турн1 тимчасова
    
    sort(my_vector.begin(), my_vector.end());//сортуємо вектор
 
    int leng = my_vector.size();//довжина вектора
    int tmp = 0, happy_num = 0;//тмп - для зберігання індекса , хеппі_нум - для модульного числа
 
    cout << "\n\n";
 
    //__________________________________________показуємо наш вектор
    for (int i = 0; i < leng; i++)
    {
        if (!(i % 5))
        {
            cout << "\n";
        }
        cout << " - " <<setw(2) << my_vector[i] << " - ";
    }
 
    //__________________________________________________________находимо модульне число і кількість його повторювань
    for (int i = 0 ; i < leng - 1; i++)
    {
        tmp = my_vector[i];
 
        for (int j = i + 1; j < leng; j++)
        {
            if (tmp == my_vector[j] )//провіряємо схожість
            {
                turn1++;
                if (turn1 > turn2)//провірка щоб найти модульне число
                {
                    happy_num = tmp;//зберігаємо наше число
                }
            }
            if (tmp != my_vector[j])//провірка на нове число
            {
                if (turn2 > turn1)//якщо кількість повторювань менше 
                {
                    turn1 = 1;
                }
                if (turn2 < turn1)//якщо кількість повторювань більше
                {
                    turn2 = turn1;
                    turn1 = 1;
                }
                break;
            }
        }
    }
 
    //__________________________________________________________виводимо дані на екран
    cout << "\n\n";
    cout << "\n" << "Modul num = " << happy_num;
    cout << "\n" << "is num " << turn2;
    cout << "\n" << "Leng  = " << leng;
 
 
    cout << "\n\n";
    return 0;
}
и ещё вопросик на с++ cout<<endl; или cout<<"\n";
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.10.2014, 23:44
Ответы с готовыми решениями:

Открытие модульного окна JS
Всем привет. Казалось бы что может быть проще, но нужна помощь :help:. Нужно чтоб при нажатии на ссылку &quot;подробнее&quot;...

Пример модульного тестирования
Ребята выложите кто-то исходник консольного приложения примера модульного тестирования из книги &quot;Сандерсон С., Фримен А. ASP.NET MVC3...

Задача с использованием модульного программирования
Создать таблицу (имя, пол 'm' или 'f', возраст, адрес). Должны быть функции(реализованы с возвратом полученной таблицы): поиск всех...

6
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
25.10.2014, 00:05
Запомните много кода это плохо. Много коментов это тоже плохо.
1. У Вас в задаче есть понятие заданный набор чисел. Я думаю автор имел ввиду что эти числа будут вводится пользователем.
2. Зачем Вы сортируете массив?
3. Подумайте как можно улутшить алгоритм.

std::endl флашит буфер в поток, '\n' - нет.
0
1 / 1 / 1
Регистрация: 16.03.2012
Сообщений: 47
25.10.2014, 01:09  [ТС]
1.прикрутить ввод не проблема , просто так удобней проверять норм ли работает.
2.ну не надо просто если больше чисел то удобней смотреть на количество похожих.
3. на счет улучшения, можно несколько вывести в функцию, например ввод цифр, вывод, нахождения модуля, тогда main будет более пустым.(больше не знаю как улучшить).
0
Guardian of Asgaard
377 / 319 / 197
Регистрация: 11.11.2013
Сообщений: 1,046
25.10.2014, 02:52
цикл с ифами слишком ололо. Глянь алгоритм нахождения моды здесь Мода массива
0
1 / 1 / 1
Регистрация: 16.03.2012
Сообщений: 47
25.10.2014, 10:40  [ТС]
мда ифоф у меня больше ((( , переделал немного мб так уже лучше


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
63
64
65
66
67
68
69
70
int setNum(vector<int>&num);
void searchNum(vector<int>num, int& modul, int& most);
 
int main()
{
    vector<int>my_vector;//вектор чисел
    int modul_nun = 0, most_copy = 0 , tmp = 0;
 
    int leng;
 
    leng = setNum(my_vector);//ввід і вивід вектора
 
    searchNum(my_vector, modul_nun, most_copy); //находимо модульне число і кількість його повторювань
    
    //виводимо дані на екран
    cout << "\n\n";
    cout << "\n" << "Modul num = " << modul_nun;
    cout << "\n" << "is num " << most_copy;
    cout << "\n" << "Leng  = " << leng;
 
 
    cout << "\n\n";
    return 0;
}
 
int setNum(vector<int>&num)
{
    int temps = 0;
    cout << "\n" << "Enter num to vector " << "\n";
    cout << "=> ";
    while (cin >> temps)
    {
        cout << "=> ";
        num.push_back(temps);
    }
    
    int len = num.size();
 
    cout << "\n\n";
    for (int i = 0; i < len; i++)
    {
        cout << " - " << setw(2) << num[i] << " - ";
    }
 
    return len;
}
 
void searchNum(vector<int>num, int& modul, int& most)
{
    int leng = num.size() , tmp = 0;
 
    for (int i = 0; i < leng; i++)
    {
        if (tmp > most)
        {
            most = tmp;
            modul = num[i];
        }
 
        tmp = 0;
 
        for (int j = 1; j < leng; j++)
        {
            if (num[i] == num[j])
            {
                tmp++;
            }
        }
    }
}
0
0 / 0 / 0
Регистрация: 12.08.2018
Сообщений: 1
12.08.2018, 02:41
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
63
64
65
66
67
68
69
70
71
72
73
74
#include "standart.h"// <vector>,<iostream>,<algorithm>
int main()
{
    setlocale(LC_ALL, "rus");
    cout << "Введите сколько чисел вы хотите добавить в последовательность положительных чисел?\n";
    int amount_of_numbers,numbers;
    int i=0, p=0;
    int max=0;
    int min=0;
    int count=0;
    int previous=-1;
    int step_min = 0;
    int step_max = 0;
    vector<int> numb;
    cin >> amount_of_numbers;
    //вводим количество чисел
    cout << "Количество чисел: " << amount_of_numbers<<"\n";
    //Вводим сами числа
    cout << "Введите " << amount_of_numbers << " чисел.\n";
    while (amount_of_numbers > 0)
    {
        amount_of_numbers--;
        cin >> numbers;
        numb.push_back(numbers); // добавляем их в вектор
    }
    //Сортируем дабы было легче определять, что повторилось
    sort(numb.begin(), numb.end());
    int steps = 0;
    // создаём шаги, для того чтобы определить где находится наш элемент
    for (int i = 0; i < numb.size(); i++)
    {
        if (numb[i] == previous)
        {
            count++;
            if (max < count)
            {
                if (i == 0)
                {
                    step_max = i;
                }
                else
                {
                    step_max = i;
                    max = count;
                    
                }
            }
            else if (max == count)
            {
                step_min = i;
                if (numb[step_min] > numb[step_max])
                {
                    step_max = step_min; 
 
                }
            }
        }
        else {
            count = 0;  
            
        }
            previous = numb[i];
    }
    //Проблема с повторением решена
    if (step_max == 0)
    {
        cout << "Числа ни разу не повторились\n";
    }
    else{
        cout << "Наибольшее число " << numb[step_max] << ", которое повторилось максимум " << max << " раз - является модой\n";
    }
    system("pause");
    return 0;
}
0
5 / 5 / 1
Регистрация: 20.07.2018
Сообщений: 24
12.08.2018, 11: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
#include <iostream>
#include <vector>
#include <algorithm>
 
int main() {
 
    int max;
    int maxC,tempC;
    maxC = tempC = 0; //Хранит максимальное кол-во повторений и промежуточное
 
    std::vector<int> values = {1,2,3,3,3,4,5,6,7,8,9,9,9,9,9,9};
    std::vector<int> uniqValues; //Для уникальных значений,чтобы не пробегать 100 раз по 1 значению
 
    uniqValues = values;
    uniqValues.erase(std::unique(uniqValues.begin(),uniqValues.end()),uniqValues.end());
 
    for(auto beg = uniqValues.begin();beg!=uniqValues.end();beg++) {
        tempC = std::count(values.begin(),values.end(),*beg);
        if(tempC > maxC) {
            maxC = tempC;
            max = *beg;
        }
    }
 
    std::cout << "Maximal " << max << " - " << maxC << std::endl;
 
 
    return 0;
}
Надеюсь,я правильно понял суть задачи.Программа сначала убирает все повторяющиеся числа и сохраняет их в дополнительном векторе,чтобы уменьшить кол-во проходов по циклу.

Далее бежит по циклу и с помощью функции count сравнивает наибольшее кол-во повторений.Решение,скорее всего не самое оптимальное,но быстрое.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.08.2018, 11:37
Помогаю со студенческими работами здесь

Отличие модульного программирования от ООП
Добрый день! Подскажите пожалуйста, чем отличается парадигма модульного программирования от ООП? Определение на Википедии описывает модуль,...

Инфраструктура модульного тестирования Lotusscript-кода
Наверное, о модульном тестировании (unit tests) не слышали только глухие и ленивые. Я не буду писать здесь об unit-тестах и TDD, желающие...

PascalABC.NET - причуды модульного программирования
Использую PascalABC.NET. Столкнулся с такой проблемой: имеется программа, задачей которой является объединение двух множеств,...

Открытие одного модульного окна с нескольких кнопок
Как сделать, что бы открывалось одно и то же окошко по нажатии на разные кнопки? вот мой JS, который для одной кнопки работает...

Как запретить исполнять часть кода в рамках модульного тестирования
Доброго времени суток. У меня в коде используются ожидания Thread.Sleep() но во время запуска юнит-тестов (MSTest) мне эти задержки не...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru