Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
lazyrazor4
0 / 0 / 0
Регистрация: 20.03.2014
Сообщений: 45
#1

Перегрузка функции int double - C++

20.11.2014, 19:21. Просмотров 397. Ответов 8
Метки нет (Все метки)

Напишите функцию max с переменным количеством параметров, которая находит минимальное из чисел типа int или из чисел типа double, тип параметров определяется с помощью первого параметра функции. Проблема: не правильно выводит минимальное значение.

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
#pragma hdrstop
#pragma argsused
#include <vcl.h>
#pragma hdrstop
#include<iostream.h>
#include <conio.h>
#pragma argsused
 
 
void main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
 
    double minimum(char z, int k, ...);
 
    cout << "\nminimum('1',4.2,5.2,7.3) = " <<
    minimum ('1',4.2,5.2,7.3);
 
    cout << "\nminimum('i',10,45,345,25,256,345,745) = " <<
    minimum ('i',10,45,345,25,256,345,745);
 
    getch();
}
 
double minimum(char z, int k, ...)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
if (z== 'i')
{
    int* pi = &k + 1;
    int min = *pi;
 
    for(; k; k--, pi++)
    min = min > *pi ? *pi : min;
    return (int)min;
}
 
if (z=='1')
{
    double *p1 = (double*)(&k+1);
    double  min = *p1;
    for (; k; k--, p1++)
    min = min > *p1 ?  *p1 : min;
    return (double)min;
}
getch();
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2014, 19:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка функции int double (C++):

Перегрузка типа int и double и сортировка - C++
Дано задание: В одномерном массиве состоящем из n элементов вычислить: 1 номер минимального по модулю элемента. 2 сумму модулей...

Вывести элементы массива, находящихся между его min и max. Перегрузка функций для int и double - C++
Заданы два массива - массив целых и массив вещественных чисел. Вывести на экран массив, составленный из элементов исходного целочисленного...

Создать перегружаемые функции и шаблоны для типов int и double - C++
Создать перегружаемые функции и шаблоны для типов int и double. Передачу параметров в функцию осуществить различными способами: с помощью...

Преобразовать 2 числа int в 1 число float(double) | double int1.int2 - C++
Всем привет. Изучая азы C++, столкнулся с такой проблемой. Есть два значения типа int, их необходимо преобразовать в одно значение типа...

Double, int , long double - C++
Как вычислить диапазоны типов вручную указанных в название темы?

Функции float average(int arrray[],int from,int to) - C++
Напишите код функции float average(int arrray,int from,int to). Возвращаемым значением функции должно быть среднее значение элементов...

8
nmcf
5754 / 5065 / 1732
Регистрация: 14.04.2014
Сообщений: 20,749
20.11.2014, 22:14 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
double minimum(int k, ...)
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
if (k == 1) return k < *(&k + 1) ? k : *(&k + 1);
 
if (k == 2)
{
    double *n1 = (double*)(&k + 1);
    double *n2 = n1 + 1;
    return *n1 < *n2 ? *n1 : *n2;
}
getch();
}
0
lazyrazor4
0 / 0 / 0
Регистрация: 20.03.2014
Сообщений: 45
20.11.2014, 23:33  [ТС] #3
Все равно для Double не правильно выводит минимальный элемент.
0
nmcf
5754 / 5065 / 1732
Регистрация: 14.04.2014
Сообщений: 20,749
20.11.2014, 23:58 #4
А, я забыл про цикл. Надо добавить.
0
lazyrazor4
0 / 0 / 0
Регистрация: 20.03.2014
Сообщений: 45
21.11.2014, 00:32  [ТС] #5
Что-то опять ничего.
0
true_bugmaker
28 / 5 / 1
Регистрация: 18.11.2014
Сообщений: 68
21.11.2014, 02:25 #6
а зачем первый аргумент в апострофах?

Добавлено через 56 минут
нужно как-то так

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
#include <stdarg.h>
#include <iostream>
 
 
int minimum (char type, int n, ...) {
        va_list ap;
        double md, ad;
        int mi, ai;
 
        va_start (ap, n);
 
 
        if ('i' == type) {
                mi = va_arg (ap, int);
                while (--n) {
                        ai = va_arg (ap, int);
                        if (mi > ai) mi = ai;
                }
        } else {
                md = va_arg (ap, double);
                while (--n) {
                        ad = va_arg (ap, double);
                        if (md > ad) md = ad;
                }
        }
        va_end (ap);
        return ('i' == type) ? mi : md;
}
 
int main (int argc, char * argv []) {
        std::cout << "minimum('i') = " << minimum ('i', 10, 10,45,345,25,256,345,745,100,5,7) << std::endl;
        std::cout << "minimum('d') = " << minimum ('d', 10, 10.,45.,345.,25.,256.,345.,745.,100.,5.,7.) << std::endl;
 
        return 0;
}
0
lazyrazor4
0 / 0 / 0
Регистрация: 20.03.2014
Сообщений: 45
21.11.2014, 08:29  [ТС] #7
Спасибо, все отлично. Но как сделать, чтобы выводило все число, а не только целую часть??
0
true_bugmaker
28 / 5 / 1
Регистрация: 18.11.2014
Сообщений: 68
21.11.2014, 15:26 #8
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
исправить так, это мой просчёт
C++
1
double minimum (char type, int n, ...) {
1
lazyrazor4
0 / 0 / 0
Регистрация: 20.03.2014
Сообщений: 45
21.11.2014, 15:58  [ТС] #9
Спасибо большое, все работает как надо.
0
21.11.2014, 15:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2014, 15:58
Привет! Вот еще темы с ответами:

Какая-нибудь реализация функции void Fun (double in, double *out) - C++
Подскажите, пожалуйста, какую-нибудь любую реализацию прототипа функции: void Fun (double in, double *out)

Ошибки error C2296: -: недопустимо, левый операнд имеет тип "double (__cdecl *)(double,double,double - C++
Думаю из-за polp #include&lt;iostream&gt; #include&lt;cmath&gt; #include&lt;cstdlib&gt; using namespace std; double polp(double af,double...

int* to double* - C++
double* myDoublePtr; int myInt = 5; int* myIntPtr; myIntPtr = &amp;myInt; // cout &lt;&lt; &quot;myIntPtr: &quot; &lt;&lt; myIntPtr &lt;&lt; &quot; &quot;...

double в int - C++
собственно вопрос в шапке, как перевести double в int? т.е. также как работает делфийская функция round, округлить до целых и выдать число...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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