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

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

11.11.2019, 20:32. Показов 1971. Ответов 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
4198 / 2653 / 654
Регистрация: 23.09.2014
Сообщений: 8,947
Записей в блоге: 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
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,238
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
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,198
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
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,198
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
12930 / 6798 / 1819
Регистрация: 18.10.2014
Сообщений: 17,198
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
Ответ Создать тему
Новые блоги и статьи
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru