Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/9: Рейтинг темы: голосов - 9, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 14.10.2019
Сообщений: 31

Функция находящая значения трёх наибольших элементов массива

11.11.2019, 20:32. Показов 2016. Ответов 11

Студворк — интернет-сервис помощи студентам
Задание звучит так: "Составить ПРОЦЕДУРУ, исходными данными которой является массив С1, С2, ... Сn. Результаты процедуры указаны ниже в вариантах задания. Для проверки составленной процедуры разработать программу.". И, собственно, ниже указан мой вариант задания (то есть, если я правильно понял, это то, что должна находить моя процедура, да?): "Значения трёх наибольших элементов С1, С2,..., Сn."

Ну я и написал что-то. Однако мой вариант был забракован преподавателем и мне было сказано, что нужно возвращать эти найденные наибольшие значения в main и через него выводить. Но разве это не противоречит самому заданию? Ведь процедура в с++ должна быть void и поэтому ничего не возвращает. Или я ошибаюсь?

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
#include <iostream>
#include <cmath>
using namespace std;
void pr(double *num, int h) {
    int i;
    double m1 = num[0], m2 = num[1], m3 = num[2];
    for (i = 1; i < h; i++) {
        if (m1 < num[i]) {
            m3 = m2;
            m2 = m1;
            m1 = num[i];
        }
        else {
            if ((m1 > num[i]) && (m2 < num[i])) {
                m3 = m2;
                m2 = num[i];
            }
            else {
                if ((m1 > num[i]) && (m2 > num[i]) && (m3 < num[i])) {
                    m3 = num[i];
                }
            }
        }
    }
    cout << "\n" << m1 << "\n" << m2 << "\n" << m3;
 
}
int main(void)
{
    setlocale(LC_ALL, "Russian");
    int i, n;
    cout << "\n Введите значение n= "; cin >> n;
    double* C = new double[n];
    double* pC = C;
    for (i = 0; i < n; i++) {
        cout << "\n Введите C(i): ";
        cin >> C[i];
    }
    pr(C, n);
    return 0;
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
11.11.2019, 20:32
Ответы с готовыми решениями:

Функция находящая сумму нечетных положительных элементов массива
Помогите с применением функций к данному коду #include &lt;iostream&gt; using namespace std; int main() { int*a; int...

Как составить массив m x 2, где 1-й столбец составлен из сумм трёх наименьших, 2-й из суммы трёх наибольших элементов массива m x n
Дан двумерный массив (m x n ) составить двумерный массив размерности m x 2, где 1 -ы столбец составлен из сумм трёх наименьших элементов ,...

Вывести значения трех наибольших элементов среди заданных
Всем добрый день! Помогите разобраться с проблемой пожалуйста. Пишу программу на С. Условие: Вывести значения трех наибольших...

11
Заблокирован
11.11.2019, 20:39
Лучший ответ Сообщение было отмечено Antisovenok как решение

Решение

в процедуру можно передавать параметры по ссылке/указателю, на пример:
C++
1
2
3
4
5
6
7
8
void sum(int a,int b,int &c)
{
  c=a+b;
}
........
int c;
sum(3,7,c);
cout<<c<<endl;
1
Just Do It!
 Аватар для XLAT
4211 / 2670 / 655
Регистрация: 23.09.2014
Сообщений: 9,083
Записей в блоге: 3
11.11.2019, 20:42
Цитата Сообщение от Antisovenok Посмотреть сообщение
нужно возвращать эти найденные наибольшие значения в main
Цитата Сообщение от Antisovenok Посмотреть сообщение
Ведь процедура в с++ должна быть void
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
#include <iostream>
#include <cmath>
using namespace std;
void pr(double *num, int h, double* m) {
    int i;
    double m1 = num[0], m2 = num[1], m3 = num[2];
    for (i = 1; i < h; i++) {
        if (m1 < num[i]) {
            m3 = m2;
            m2 = m1;
            m1 = num[i];
        }
        else {
            if ((m1 > num[i]) && (m2 < num[i])) {
                m3 = m2;
                m2 = num[i];
            }
            else {
                if ((m1 > num[i]) && (m2 > num[i]) && (m3 < num[i])) {
                    m3 = num[i];
                }
            }
        }
    }
    
    m[0] = m1;
    m[1] = m2;
    m[2] = m3;
}
int main(void)
{
    setlocale(LC_ALL, "Russian");
    int i, n;
    cout << "\n Введите значение n= "; cin >> n;
    double* C = new double[n];
    double* pC = C;
    for (i = 0; i < n; i++) {
        cout << "\n Введите C(i): ";
        cin >> C[i];
    }
    
    double m[3];
    pr(C, n, m);
    cout << "\n" << m[0] << "\n" << m[1] << "\n" << m[2];
    
    return 0;
}
1
1 / 1 / 0
Регистрация: 14.10.2019
Сообщений: 31
11.11.2019, 20:52  [ТС]
Holiday13, боже мой, это гениально... Спасибо! Вроде решил как надо)

Добавлено через 5 минут
XLAT, понял, большое спасибо за ответ)
1
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,245
11.11.2019, 21:17
По поводу pr.
Может лучше так:
C++
1
2
3
4
5
6
7
#include <algorithm>
void pr(double *num, int n, double* m) {
    std::sort(num, num + n);
    m[0] = num[n-1];
    m[1] = num[n - 2];
    m[2] = num[n - 3];
}
0
1 / 1 / 0
Регистрация: 14.10.2019
Сообщений: 31
12.11.2019, 01:58  [ТС]
zss, выглядит интересно, но я не знаю, что такое
Цитата Сообщение от zss Посмотреть сообщение
std::sort(num, num + n);
...
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13180 / 6816 / 1821
Регистрация: 18.10.2014
Сообщений: 17,245
12.11.2019, 02:08
Цитата Сообщение от zss Посмотреть сообщение
Может лучше так:
Ну тогда уж лучше так

C++
1
2
3
4
5
void pr(double *num, int n, double* m) 
{
  std::partial_sort(num, num + 3, num + n, std::greater<>());
  std::copy_n(num, 3, m);
}
А так как в задании ни слова не сказано о порядке этих трех элементов, то еще лучше так

C++
1
2
3
4
5
void pr(double *num, int n, double* m) 
{
  std::nth_element(num, num + n - 3, num + n);
  std::copy_n(num + n - 3, 3, m);
}
0
1 / 1 / 0
Регистрация: 14.10.2019
Сообщений: 31
12.11.2019, 02:33  [ТС]
TheCalligrapher, std::(и что-то там дальше) мне пока ещё не известен. Но за ответ спасибо)
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13180 / 6816 / 1821
Регистрация: 18.10.2014
Сообщений: 17,245
12.11.2019, 05:38
Цитата Сообщение от Antisovenok Посмотреть сообщение
std:: (и что-то там дальше) мне пока ещё не известен
Тем не менее в своем коде вы пользуетесь std::cout и std::cin...
0
1 / 1 / 0
Регистрация: 14.10.2019
Сообщений: 31
12.11.2019, 20:06  [ТС]
TheCalligrapher, я кажется понял, что имеется в виду. И я использовал "namespace std", а потом и "cout/cin" по отдельности, так что Ваше написание для меня не знакомо.
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13180 / 6816 / 1821
Регистрация: 18.10.2014
Сообщений: 17,245
12.11.2019, 21:28
Цитата Сообщение от Antisovenok Посмотреть сообщение
И я использовал "namespace std", а потом и "cout/cin" по отдельности, так что Ваше написание для меня не знакомо.
Ну если вы использовали using namespace std (весьма спорная практика, мягко говоря), то вместо std::partial_sort вы можете писать просто partial_sort

Не знаю, легче ли вам от этого...
1
1 / 1 / 0
Регистрация: 14.10.2019
Сообщений: 31
13.11.2019, 19:12  [ТС]
TheCalligrapher, ну трудно в учение - легко в бою. Так что спасибо за пояснение)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.11.2019, 19:12
Помогаю со студенческими работами здесь

Функция находящая среднее арифметическое квадратов положительных элементов массива
В исходном массиве случайных чисел найдите среднее арифметическое квадратов положительных элементов, разработав соответствующую функцию....

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

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

Найти сумму трех наибольших отрицательных четных элементов массива Р(22)
(на паскале)Найти сумму трех наибольших отрицательных четных элементов массива Р(22)

Найти произведение первых трёх наибольших элементов одномерного массива
Написать программу одномерного массива. Условие: Найти произведение первых трёх наибольших элементов вектора С(15). P.S. Заранее...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru