Взятие 2 значений из 3 из основной функции - PullRequest
0 голосов
/ 04 мая 2019

Так что у меня проблема с использованием функций в C. Мне нужно сделать функции max и min, чтобы найти максимальное и минимальное значение. В функции main мне нужно загрузить 3 числа (x, y, z), и у меня есть формула для решения. Идет: y = 2 * Min(x, y) / Max(x, Min(y, z)). Как я могу получить только 2 числа для сравнения, что является максимальным или минимальным, если у меня есть 3 числа? Я получаю сообщение об ошибке, что в Min или Max.

объявлено несколько значений.
#include <stdio.h>

int Max(int x, int y, int z) {
    if (x > y && x > z) {
        return x;
    } else
    if (y > x && y > z) {
        return y;
    } else
        return z;
}

int Min(int x, int y, int z) {
    if (x < y && x < z) {
        return x;
    } else
    if (y < x && y < z) {
        return y;
    } else
        return z;
}

int main() {
    int x, y, z;
    float rez;

    printf("unesi vrijednosti x, y i z: ");
    scanf("%d %d %d", &x, &y, &z);

    if (x >= -10 && x <= 10 && y >= -10 && y <= 10 && z >= -10 && z <= 10) {
        rez = (2.0 * (float)Min(x, y)) / ((float)Max(x, (float)Min(y, z)));
        printf("%.3f", rez);
    }
    return 0;
}

Ответы [ 2 ]

3 голосов
/ 04 мая 2019

Я получаю сообщение об ошибке, что в Min или Max объявлено несколько значений.

потому что вы определяете функции Min / Max с параметрами 3 , а в (2.0 * (float)Min(x, y)) / ((float)Max(x, (float)Min(y, z))); вы даете только 2 аргументов.

Просто определите их с 2 параметрами, например

int Max (int x, int y)
{
   return (y > x) ? y : x;
}

int Min(int x, int y)
{
   return (y < x) ? y : x;
}

Нет никакого интереса иметь более 2 параметров, иначе почему только 3, а не 4 или 5 и т. Д.? Наличие двух параметров позволяет управлять всеми делами, просто помещая вызовы в качестве аргумента для другого

max(a1,a2 ... ,an) является max(a1, max(a2, ... max(an-1, an))...)

и, конечно, то же самое для мин


Из этого я рекомендую вам проверить scanf("%d %d %d", &x, &y, &z); возвращает 3, чтобы убедиться, что 3 правильных значения были введены

0 голосов
/ 04 мая 2019

Вы не можете передать более или менее периметр функции.Вы должны пройти 3 периметра или вы должны объявить обе функции с 2 периметром.Если вы все еще хотите иметь 3 периметра в вашей функции, то вы можете передать значение в функции Min() и Max() следующим образом:

для Min() вызвать функцию как:

Min(value1, value2, INT_MAX);

INT_MAX всегда будет больше любого значения integer .поэтому не будет никакой разницы в подсчете минимального значения.

И так же, как это для Max(), вы можете вызывать функцию следующим образом:

Max(value1, value2, INT_MIN);

Помните: Вы должны include <limits.h> использовать INT_MIN & INT_MAX

ИЛИ,

Вы можете просто объявить 2 функции с 2 периметром, как показано ниже:

int Max (int x, int y) 
{
    if(x > y){
        return x;
    }
    else{
        return y;
    }
}

int Min(int x, int y) 
{
    if(x < y){
        return x;
    }
    else{
        return y;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...