2016-10-15 2 views
-1

У меня возникли трудности с созданием функции void/reference для определения самого высокого и самого низкого числа. Числа были введены ранее и назначены четырем отдельным переменным. Числа будут варьироваться от 0 до 100. Я не могу использовать массивы, и это должна быть функция. Мой учитель сказал, что он был в состоянии закончить с 6 условными и я ближе к 12.Определение наивысшего и наименьшего числа

void GetGradesFromUser(double& grade1, double& grade2, double& grade3, double& grade4) 
{ 
    cout << "Enter four test grades: "; 
    cin >> grade1 >> grade2 >> grade3 >> grade4; 
} 

double DetermineMaxAndMin(double& grade1, double& grade2, double& grade3, double& grade4) 
{ 
    double max; 
    double min; 

    if (grade1 >= grade2 && grade1 >= grade3 && grade1 >= grade4) 
    { 
     max = grade1; 
    } 

    else if (grade2 >= grade1 && grade2 >= grade3 && grade2 >= grade4) 
    { 
     max = grade2; 
    } 

    else if (grade3 >= grade1 && grade3 >= grade2 && grade3 >= grade4) 
    { 
     max = grade3; 
    } 

    else max = grade4; 

    if (grade1 <= grade2 && grade1 <= grade3 && grade1 <= grade4) 
    { 
     min = grade1; 
    } 

    else if (grade2 <= grade1 && grade2 <= grade3 && grade2 <= grade4) 
    { 
     min = grade2; 
    } 

    else if (grade3 <= grade1 && grade3 <= grade2 && grade3 <= grade4) 
    { 
     min = grade3; 
    } 

    else min = grade4; 
} 
+1

Попробуйте его скомпилировать перед оптимизацией? (обратите внимание на предупреждения). Тогда вам нужно только 4 условия. –

ответ

-1

После того, как вы показали, что grade1 меньше grade2, нет необходимости постоянно проверять, что состояние снова. grade1 или grade2 могут быть отброшены.

Так что если у вас есть отдельная переменные, назовет его max, чтобы сохранить наибольшее значение видели до этого момента, вы можете последовательно сравнивать каждый класс с max, обновлением maxmax каждый раз превышен.

Минимум будет таким же, за исключением того, что вы храните наименьшее значение, которое было видно.

-1

Если вы не можете использовать массивы и циклы, и хотели бы добиться результата в не более 6 условными, рассмотрим следующее:

double DetermineMaxAndMin(double& grade1, double& grade2, double& grade3, double& grade4) 
{ 
    double max = grade1; 
    double min = grade1; 

    //find max 
    if (max < grade2) max = grade2; 
    if (max < grade3) max = grade3; 
    if (max < grade4) max = grade4; 

    //find min 
    if (min > grade2) min = grade2; 
    if (min > grade3) min = grade3; 
    if (min > grade4) min = grade4; 
} 

Хитрость заключается в том, чтобы предположить, что вы уже нашли max/min и заменить его значение при сравнении с новыми значениями.

+0

Черт возьми, вы просто позволите им вырезать-в-вставить свою домашнюю работу. – user4581301

-2

int a [101]; int min = 0; int max = 0;

min = a [0]; макс = а [0];

для (int i = 0; i < 101; i ++) {if (min> a [i]) {min = a [i];}; if (max < a [i]) {max = a [i];}; };

, так что если ваш номер 1 2 3 4;

min = 1; max = 1; мин будет 1 1 1 1; для каждой итерации; Максимальное значение будет 1 2 3 4; для каждой итерации;

Это пример с массивами daaa. но если вы достаточно умны, вы можете применить мой подход. вам просто нужно настроить мой код и удалить часть массива.

P.s. этот код содержит 2 условных выражения и сортирует любое количество чисел. это так важно, что вы можете это сделать.

Смежные вопросы