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

Разработать функцию с переменным количеством параметров

21.01.2019, 00:04. Показов 1392. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Функция должна вернуть наименьшее из введенных значений.
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 <iostream>
#include <cstdlib> // для system
#include <cstdarg>
 
using namespace std;
 
long int F_1(long int n,...)
{
    
 
     long int * p = reinterpret_cast<long int *>(&n+1);
    long int min = 1000;
    while ( n-- ) {
        cout<<*p;
        if(min>*p)
        min = *p;
        ++*p;
    }
    return min;
 
}
 
int main() 
{ 
    setlocale(LC_ALL, "Russian");
    int arr[10]={};
    int choice=0,i;
    cout << "Введите числа(неотрицательны,чтобы прекратить ввод -1):" << endl;
    
     
    for(i=0;i<10;i++)
    {
        cin>>choice;
        if(choice==-1)
        {
            break;
        }
        else
        {
            arr[i]=choice;
        }
    }
    int x0=arr[0],x1=arr[1],x2=arr[2],x3=arr[3],x4=arr[4],x5=arr[5],x6=arr[6],x7=arr[7],x8=arr[8],x9=arr[9];
 
    int MIN=F_1(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9);
    cout<<"Минимальное число введенно вами: "<<MIN<<endl;
    system("pause"); // Только для тех, у кого MS Visual Studio
    return 0; 
}
Добавлено через 32 секунды
Мне нужин результат так что не обрашайте внимания на костыли

Добавлено через 1 минуту
брал функцию с тем на форуме тут пытался модифицыровать под свою задачю
Не вышло
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.01.2019, 00:04
Ответы с готовыми решениями:

Функции по переменным количеством параметров
нужна помощь по работе с такой функцией .. Искал в книге Страуструпа, не понял пример, помогите,...

Функция с переменным количеством параметров
Доброго времени суток! Я озадачился таким вопросом - как производится компиляция функций с...

Шаблон с переменным количеством параметров
У меня компилятор Visual Studio 2012, но не работает следующий код: #include &lt;iostream&gt;...

Функция с переменным количеством параметров
Здравствуйте, возникла вот такая проблема: создаю функцию с переменным кол-ом параметров. Пример...

11
112 / 91 / 31
Регистрация: 24.10.2018
Сообщений: 336
21.01.2019, 01:17 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
template<typename T, typename... Args>
int min_func(T val, Args... args)
{
    if constexpr(sizeof...(args) == 1)
        return std::min(val, args...);
    else
        return std::min(val, min_func(args...));
}
 
. . . 
int MIN=min_func(x0,x1,x2,x3,x4,x5,x6,x7,x8,x9);
. . .
1
-1 / 1 / 0
Регистрация: 28.10.2017
Сообщений: 50
21.01.2019, 01:37  [ТС] 3
krolligator, неполучается запустить
0
-1 / 1 / 0
Регистрация: 28.10.2017
Сообщений: 50
21.01.2019, 01:38  [ТС] 4
вот
Миниатюры
Разработать функцию с переменным количеством параметров  
0
112 / 91 / 31
Регистрация: 24.10.2018
Сообщений: 336
21.01.2019, 01:45 5
amoteo, ожидаемо, если не включена нужная версия стандарта, в которой поддерживаются variadic и constexpr.
1
Мозгоправ
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
21.01.2019, 01:56 6
Лучший ответ Сообщение было отмечено amoteo как решение

Решение

Ваш поправленный вариант:
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
#include <iostream>
#include <cstdlib> // для system
 
using namespace std;
 
int F_1(int n, ...) {
 
 
    int *p = reinterpret_cast<int *>(&n + 1);
    int min = *p;
    while (n--) {
        cout << *p << ' ';
        if (min > *p)
            min = *p;
        ++p;
    }
    return min;
 
}
 
int main() {
    setlocale(LC_ALL, "Russian");
    int arr[10] = {};
    int choice = 0, i;
    int counter = 0;
    cout << "Введите числа(неотрицательны,чтобы прекратить ввод -1):" << endl;
 
 
    for (i = 0; i < 10; i++) {
        cin >> choice;
        if (choice == -1) {
            break;
        }
        else {
            arr[i] = choice;
            ++counter;
        }
    }
    int x0 = arr[0], x1 = arr[1], x2 = arr[2], x3 = arr[3], x4 = arr[4], x5 = arr[5], x6 = arr[6], x7 = arr[7], x8 = arr[8], x9 = arr[9];
 
    int MIN = F_1(counter, x0, x1, x2, x3, x4, x5, x6, x7, x8, x9);
    cout << "\nМинимальное число введенно вами: " << MIN << endl;
    system("pause"); // Только для тех, у кого MS Visual Studio
    return 0;
}
Применять long int для счётчика аргументов функции не имеет смысла. Вам просто не хватит стека для такого количества параметров. А вообще корректнее для первого параметра использовать size_t.

И типы фактических параметров должны совпадать с типами, которые используются внутри функции с переменным количеством параметров. Вам просто повезло, что int и long int в msvc совпадают по размеру.

А вообще вариант варварский.

Вот более цивилизованный вариант функции:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <cstdarg>
// ...
 
int F_2(size_t n, ...) {
    va_list args;
    va_start(args, n);
    int min = INT_MAX;
    int num;
    for (size_t i = 0; i < n; ++i) {
        num = va_arg(args, int);
        cout << num << ' ';
        if (min > num)
            min = num;
    }
    va_end(args);
    return min;
}
1
-1 / 1 / 0
Регистрация: 28.10.2017
Сообщений: 50
21.01.2019, 01:59  [ТС] 7
krolligator, а как включитьL0M, насчет long int указанно в заданию что сказад препод то и делаем
0
Мозгоправ
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
21.01.2019, 02:10 8
krolligator, ну тогда уж всю эту байду можно сократить до
C++
1
int MIN = std::min_element(arr, arr + 10);

Правда проблема с "Разработать функцию"

Добавлено через 8 минут
Цитата Сообщение от amoteo Посмотреть сообщение
L0M, насчет long int указанно в заданию что сказад препод то и делаем

Не, можно оставить и long int для первого параметра. В неэкстремальных случаях оно не помешает.

А вот типы в переменном списке параметров должны чётко совпадать между фактически переданными и ожидаемыми функцией. У вас и массив, и безобразная куча переменных, которые фактически передаются в функцию, имеют тип int. Значит и в функции для них должен использоваться тип int.
1
-1 / 1 / 0
Регистрация: 28.10.2017
Сообщений: 50
21.01.2019, 02:11  [ТС] 9
L0M, ваш код хороший но не коркно при разных вводах работает
пару моих костылей(отдельно еше шлю в функцию кол-во элеметов) но всеравно есть бага если первый элемент самый маленький он его не распазнает (видимо нет сравнения)
0
-1 / 1 / 0
Регистрация: 28.10.2017
Сообщений: 50
21.01.2019, 02:14  [ТС] 10
L0M, Я честно пол тора часа пытался сам написать и гуглил и тыкал
Задания более высокого уровня я сделал за 20 минут а тут типа самое простое и портит нервы
Миниатюры
Разработать функцию с переменным количеством параметров  
0
-1 / 1 / 0
Регистрация: 28.10.2017
Сообщений: 50
21.01.2019, 02:17  [ТС] 11
Ну мне впринцыпи тока сдать работает то главное правильные данные ввести))всем спс что выручили
0
Мозгоправ
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
21.01.2019, 02:43 12
Цитата Сообщение от amoteo Посмотреть сообщение
L0M, ваш код хороший но не коркно при разных вводах работает
пару моих костылей(отдельно еше шлю в функцию кол-во элеметов) но всеравно есть бага если первый элемент самый маленький он его не распазнает (видимо нет сравнения)
В "вашем поправленном варианте" кода посмотрите функцию main. Я там тоже кое-что поправил (см. переменную counter).

У меня вроде всё работает правильно. Покажите набор данных, на которых мой вариант (любой) работает некорректно. Будем смотреть.
1
21.01.2019, 02:43
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.01.2019, 02:43
Помогаю со студенческими работами здесь

Массив в функции с переменным количеством параметров
Добрый день. Не могу разобраться, как в функции с переменным количеством параметров сделать...

Функция суммы с переменным количеством параметров
На просторах форума нашёл код. Стало интересно посмотреть что выводят его отдельные части(отдельно...

Функция с переменным количеством параметров-оъектов
Нашел на форуме пример функции с переменным количеством int, подскажите как переписать ее для...

Функции с переменным количеством параметров в языке C ++
Реализовать функцию конкатенации (сцепления) произвольного количества C-строк с динамическим...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Как подключить JavaScript файл в другом JavaScript файле
InfoMaster 20.01.2025
В современной веб-разработке организация кодовой базы играет ключевую роль в создании масштабируемых и поддерживаемых приложений. Модульность и правильное структурирование кода стали неотъемлемыми. . .
Как откатить изменения в исходниках, не внесенные в Git
InfoMaster 20.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с необходимостью отменить внесенные изменения в исходном коде. Особенно актуальной становится ситуация, когда изменения еще. . .
В чем разница между px, in, mm, pt, dip, dp, sp
InfoMaster 20.01.2025
В мире цифрового дизайна и разработки интерфейсов правильный выбор единиц измерения играет ключевую роль в создании качественного пользовательского опыта. История развития систем измерений для. . .
Как изменить адрес удалённого репозитория (origin) в Git
InfoMaster 20.01.2025
В терминологии Git термин origin является стандартным именем для основного удаленного репозитория, с которым взаимодействует локальная копия проекта. Когда разработчик клонирует репозиторий с. . .
Как переместить последние коммиты в новую ветку (branch) в Git
InfoMaster 20.01.2025
При работе над проектом часто возникают ситуации, когда необходимо изолировать определенные изменения от основной линии разработки. Это может быть связано с экспериментальными функциями, исправлением. . .
Как вернуть результат из асинхронной функции в JavaScript
InfoMaster 20.01.2025
Асинхронное программирование представляет собой фундаментальную концепцию в JavaScript, которая позволяет выполнять длительные операции без блокировки основного потока выполнения программы. В. . .
Какой локальный веб-сервер выбрать
InfoMaster 19.01.2025
В современной веб-разработке локальные веб-серверы играют ключевую роль, предоставляя разработчикам надежную среду для создания, тестирования и отладки веб-приложений без необходимости использования. . .
Почему планшеты и iPad уже не так популярны, как раньше
InfoMaster 19.01.2025
Эра революционных инноваций История планшетов началась задолго до того, как эти устройства стали привычными спутниками нашей повседневной жизни. В начале 1990-х годов появились первые прототипы,. . .
Как самому прошить BIOS ноутбука
InfoMaster 19.01.2025
BIOS (Basic Input/ Output System) представляет собой важнейший компонент любого компьютера или ноутбука, который обеспечивает базовое взаимодействие между аппаратным и программным обеспечением. . .
Какой Linux выбрать для домашнего компьютера
InfoMaster 19.01.2025
Современные реалии выбора операционной системы В современном мире выбор операционной системы для домашнего компьютера становится все более важным решением, которое может существенно повлиять на. . .
Как объединить два словаря одним выражением в Python
InfoMaster 19.01.2025
В мире программирования на Python работа со словарями является неотъемлемой частью разработки. Словари представляют собой мощный инструмент для хранения и обработки данных в формате "ключ-значение". . . .
Как без исключения проверить существование файла в Python
InfoMaster 19.01.2025
При разработке программного обеспечения на Python часто возникает необходимость проверить существование файла перед выполнением операций с ним. Это критически важная задача, которая помогает избежать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru