Help!!!

I'm trying to eliminate the highest and lowest number out of 5 inputs then get the average of the remaining 3 inputs...
In some instances, it gives me incorrect average..
(We are not suppose to use arrays yet)

Here's my code:

#include <iostream>
using namespace std;

void getData(double& input1, double& input2, double& input3, double& input4, double& input5);
//Ask the user to input numbers

void calcscore(double& num1, double& num2, double& num3, double& num4, double& num5);
//should calculate and display the average of the 3 remaining numbers

int main()
{
    double score1, score2, score3, score4, score5;

    getData(score1, score2, score3, score4, score5);
    calcscore(score1, score2, score3, score4, score5);

}

void getData(double& input1, double& input2, double& input3, double& input4, double& input5)
{



    cout<<"Input 5 numbers :  \n";
    cin>> input1
       >> input2
       >> input3
       >> input4
       >> input5;


}

void calcscore(double& num1, double& num2, double& num3, double& num4, double& num5)
{


    if (0 > num2&&num3&&num1&&num5&&num4)
    {

            cout<<"Error! Please enter numbers between 0 to 10 only"  ;
            cout<<"\n\n\n";

    }


    else if (num1 > num2&&num3&&num4 > num5)
    {

            cout<<"Average: "<<(num2 + num3 + num4)/3  ;
            cout<<"\n\n\n";
        }

    else if (num2 > num1&&num3&&num4 > num5)
    {

            cout<<"Average: "<<(num1 + num3 + num4)/3  ;
            cout<<"\n\n\n";
        }

    else if (num3 > num1&&num2&&num4 > num5)
    {

            cout<<"Average: "<<(num1 + num2 + num4)/3  ;
            cout<<"\n\n\n";
        }

    else if (num4 > num1&&num2&&num3 > num5)
    {

            cout<<"Average: "<<(num1 + num2 + num3)/3  ;
            cout<<"\n\n\n";
        }


    else if (num5 > num4&&num2&&num3 > num1)
    {

            cout<<"Average: "<<(num4 + num2 + num3)/3  ;
            cout<<"\n\n\n";
        }

    else if (num1 > num5&&num2&&num3 > num4)
    {

            cout<<"Average: "<<(num5 + num2 + num3)/3  ;
            cout<<"\n\n\n";
        }


    else if (num2 > num5&&num1&&num3 > num4)
    {

            cout<<"Average: "<<(num5 + num1 + num3)/3  ;
            cout<<"\n\n\n";
        }

    else if (num3 > num5&&num2&&num1 > num4)
    {

            cout<<"Average: "<<(num5 + num2 + num1)/3  ;
            cout<<"\n\n\n";
        }

    else if (num5 > num1&&num2&&num3 > num4)
    {

            cout<<"Average: "<<(num1 + num2 + num3)/3  ;
            cout<<"\n\n\n";
        }

    else if (num4 > num1&&num2&&num5 > num3)
    {

            cout<<"Average: "<<(num1 + num2 + num5)/3  ;
            cout<<"\n\n\n";
        }

    else if (num1 > num4&&num2&&num5 > num3)
    {

            cout<<"Average: "<<(num4 + num2 + num5)/3  ;
            cout<<"\n\n\n";
        }

    else if (num2 > num4&&num1&&num5 > num3)
    {

            cout<<"Average: "<<(num4 + num1 + num5)/3  ;
            cout<<"\n\n\n";
        }

    else if (num4 > num2&&num1&&num5 > num3)
    {

            cout<<"Average: "<<(num2 + num1 + num5)/3  ;
            cout<<"\n\n\n";
        }

    else if (num5 > num2&&num1&&num4 > num3)
    {

            cout<<"Average: "<<(num2 + num1 + num4)/3  ;
            cout<<"\n\n\n";
        }

    else if (num3 > num4&&num1&&num5 > num2)
    {

            cout<<"Average: "<<(num4 + num1 + num5)/3  ;
            cout<<"\n\n\n";
        }
    else if (num1 > num2&&num1&&num5 > num2)
    {

            cout<<"Average: "<<(num2 + num1 + num5)/3  ;
            cout<<"\n\n\n";
        }
    else if (num3 > num4&&num1&&num5 > num2)
    {

            cout<<"Average: "<<(num4 + num1 + num5)/3  ;
            cout<<"\n\n\n";
        }
    else if (num4 > num3&&num1&&num5 > num2)
    {

            cout<<"Average: "<<(num3 + num1 + num5)/3  ;
            cout<<"\n\n\n";
        }
    else if (num5 > num3&&num1&&num4 > num2)
    {

            cout<<"Average: "<<(num3 + num1 + num4)/3  ;
            cout<<"\n\n\n";
        }
    else if (num2 > num3&&num1&&num5 > num4)
    {

            cout<<"Average: "<<(num3 + num1 + num5)/3  ;
            cout<<"\n\n\n";
        }

}

Dani AI

Generated

This thread shows the usual trap: try not to enumerate every ordering with huge else/ifs. As suggested, the logic becomes much easier by doing a single pass over the inputs. pointed toward initializing min/max from the first value and updating them while reading — that idea plus maintaining a running sum yields a concise, robust solution. ’s array approach also works, but the version below avoids arrays (useful if arrays weren’t allowed).

Core idea: read the first value to initialize sum, min and max, then read the remaining four values once, updating sum/min/max and validating range as needed. The final average is (sum − min − max) / 3. This handles duplicates correctly (it removes one instance of the highest and one of the lowest) and avoids brittle chained comparisons like if (0 > a && b && c) which don’t do what they appear to.

#include <iostream>
#include <iomanip>

int main() {
    double x;
    std::cout << "Enter 5 numbers (0..10): ";
    if (!(std::cin >> x)) return 0;
    if (x < 0.0 || x > 10.0) { std::cout << "Error: values must be between 0 and 10\n"; return 0; }

    double sum = x, minv = x, maxv = x;
    for (int i = 1; i < 5; ++i) {
        if (!(std::cin >> x)) { std::cout << "Bad input\n"; return 0; }
        if (x < 0.0 || x > 10.0) { std::cout << "Error: values must be between 0 and 10\n"; return 0; }
        sum += x;
        if (x < minv) minv = x;
        if (x > maxv) maxv = x;
    }

    double average = (sum - minv - maxv) / 3.0;
    std::cout << std::fixed << std::setprecision(2) << "Average: " << average << "\n";
    return 0;
}

Notes and pitfalls: always subtract min and max only once each (the above does that). If the intention is to drop all occurrences of the lowest or highest, the algorithm must change. Also ensure floating-point division (divide by 3.0) and handle invalid input early. This pattern is simpler to reason about and much less error-prone than enumerating permutations.

Recommended Answers

All 7 Replies

Your problem is that you're writing very complicated and redundant code and thus it's hard to think about what your code is doing. Use a simpler algorithm to find and remove the largest and smallest values.

Use code tags please:

#include <iostream>
using namespace std;

void getData(double& input1, double& input2, double& input3, double& input4, double& input5);
//Ask the user to input numbers

void calcscore(double& num1, double& num2, double& num3, double& num4, double& num5);
//should calculate and display the average of the 3 remaining numbers

int main()
    {
    double score1, score2, score3, score4, score5;

    getData(score1, score2, score3, score4, score5);
    calcscore(score1, score2, score3, score4, score5);
    
    return 0; // Added a return
    }

void getData(double& input1, double& input2, double& input3, double& input4, double& input5)
    {
    cout<<"Input 5 numbers : \n";
    cin>> input1 >> input2 >> input3 >> input4 >> input5;
    }

void calcscore(double& num1, double& num2, double& num3, double& num4, double& num5)
    {
    if (0 > num2&&num3&&num1&&num5&&num4)
        {
        cout<<"Error! Please enter numbers between 0 to 10 only" ;
        cout<<"\n\n\n";
        }
    else if (num1 > num2&&num3&&num4 > num5)
        {
        cout<<"Average: "<<(num2 + num3 + num4)/3 ;
        cout<<"\n\n\n";
        }
    else if (num2 > num1&&num3&&num4 > num5)
        {
        cout<<"Average: "<<(num1 + num3 + num4)/3 ;
        cout<<"\n\n\n";
        }
    else if (num3 > num1&&num2&&num4 > num5)
        {
        cout<<"Average: "<<(num1 + num2 + num4)/3 ;
        cout<<"\n\n\n";
        }
    else if (num4 > num1&&num2&&num3 > num5)
        {
        cout<<"Average: "<<(num1 + num2 + num3)/3 ;
        cout<<"\n\n\n";
        }
    else if (num5 > num4&&num2&&num3 > num1)
        {
        cout<<"Average: "<<(num4 + num2 + num3)/3 ;
        cout<<"\n\n\n";
        }
    else if (num1 > num5&&num2&&num3 > num4)
        {
        cout<<"Average: "<<(num5 + num2 + num3)/3 ;
        cout<<"\n\n\n";
        }
    else if (num2 > num5&&num1&&num3 > num4)
        {
        cout<<"Average: "<<(num5 + num1 + num3)/3 ;
        cout<<"\n\n\n";
        }
    else if (num3 > num5&&num2&&num1 > num4)
        {
        cout<<"Average: "<<(num5 + num2 + num1)/3 ;
        cout<<"\n\n\n";
        }
    else if (num5 > num1&&num2&&num3 > num4)
        {
        cout<<"Average: "<<(num1 + num2 + num3)/3 ;
        cout<<"\n\n\n";
        }
    else if (num4 > num1&&num2&&num5 > num3)
        {
        cout<<"Average: "<<(num1 + num2 + num5)/3 ;
        cout<<"\n\n\n";
        }
    else if (num1 > num4&&num2&&num5 > num3)
        {
        cout<<"Average: "<<(num4 + num2 + num5)/3 ;
        cout<<"\n\n\n";
        }
    else if (num2 > num4&&num1&&num5 > num3)
        {
        cout<<"Average: "<<(num4 + num1 + num5)/3 ;
        cout<<"\n\n\n";
        }
    else if (num4 > num2&&num1&&num5 > num3)
        {
        cout<<"Average: "<<(num2 + num1 + num5)/3 ;
        cout<<"\n\n\n";
        }
    else if (num5 > num2&&num1&&num4 > num3)
        {
        cout<<"Average: "<<(num2 + num1 + num4)/3 ;
        cout<<"\n\n\n";
        }
    else if (num3 > num4&&num1&&num5 > num2)
        {
        cout<<"Average: "<<(num4 + num1 + num5)/3 ;
        cout<<"\n\n\n";
        }
    else if (num1 > num2&&num1&&num5 > num2)
        {
        cout<<"Average: "<<(num2 + num1 + num5)/3 ;
        cout<<"\n\n\n";
        }
    else if (num3 > num4&&num1&&num5 > num2)
        {
        cout<<"Average: "<<(num4 + num1 + num5)/3 ;
        cout<<"\n\n\n";
        }
    else if (num4 > num3&&num1&&num5 > num2)
        {
        cout<<"Average: "<<(num3 + num1 + num5)/3 ;
        cout<<"\n\n\n";
        }
    else if (num5 > num3&&num1&&num4 > num2)
        {
        cout<<"Average: "<<(num3 + num1 + num4)/3 ;
        cout<<"\n\n\n";
        }
    else if (num2 > num3&&num1&&num5 > num4)
        {
        cout<<"Average: "<<(num3 + num1 + num5)/3 ;
        cout<<"\n\n\n";
        }
}

EDIT: If you're interested in keeping your original code, then here's a little simplification:

#include <iostream>
using namespace std;

void getData(double& input1, double& input2, double& input3, double& input4, double& input5);
//Ask the user to input numbers

void calcscore(double& num1, double& num2, double& num3, double& num4, double& num5);
//should calculate and display the average of the 3 remaining numbers

int main()
    {
    double score1, score2, score3, score4, score5;

    getData(score1, score2, score3, score4, score5);
    calcscore(score1, score2, score3, score4, score5);
    
    return 0; // Added a return
    }

void getData(double& input1, double& input2, double& input3, double& input4, double& input5)
    {
    cout << "Input 5 numbers : \n";
    cin >> input1 >> input2 >> input3 >> input4 >> input5;
    }

void calcscore(double& num1, double& num2, double& num3, double& num4, double& num5)
    {
    if (0 > num2&&num3&&num1&&num5&&num4)
        cout<<"Error! Please enter numbers between 0 to 10 only" ;
    else if (num1 > num2&&num3&&num4 > num5)
        cout<<"Average: "<<(num2 + num3 + num4)/3 ;
    else if (num2 > num1&&num3&&num4 > num5)
        cout<<"Average: "<<(num1 + num3 + num4)/3 ;
    else if (num3 > num1&&num2&&num4 > num5)
        cout<<"Average: "<<(num1 + num2 + num4)/3 ;
    else if (num4 > num1&&num2&&num3 > num5)
        cout<<"Average: "<<(num1 + num2 + num3)/3 ;
    else if (num5 > num4&&num2&&num3 > num1)
        cout<<"Average: "<<(num4 + num2 + num3)/3 ;
    else if (num1 > num5&&num2&&num3 > num4)
        cout<<"Average: "<<(num5 + num2 + num3)/3 ;
    else if (num2 > num5&&num1&&num3 > num4)
        cout<<"Average: "<<(num5 + num1 + num3)/3 ;
    else if (num3 > num5&&num2&&num1 > num4)
        cout<<"Average: "<<(num5 + num2 + num1)/3 ;
    else if (num5 > num1&&num2&&num3 > num4)
        cout<<"Average: "<<(num1 + num2 + num3)/3 ;
    else if (num4 > num1&&num2&&num5 > num3)
        cout<<"Average: "<<(num1 + num2 + num5)/3 ;
    else if (num1 > num4&&num2&&num5 > num3)
        cout<<"Average: "<<(num4 + num2 + num5)/3 ;
    else if (num2 > num4&&num1&&num5 > num3)
        cout<<"Average: "<<(num4 + num1 + num5)/3 ;
    else if (num4 > num2&&num1&&num5 > num3)
        cout<<"Average: "<<(num2 + num1 + num5)/3 ;
    else if (num5 > num2&&num1&&num4 > num3)
        cout<<"Average: "<<(num2 + num1 + num4)/3 ;
    else if (num3 > num4&&num1&&num5 > num2)
        cout<<"Average: "<<(num4 + num1 + num5)/3 ;
    else if (num1 > num2&&num1&&num5 > num2)
        cout<<"Average: "<<(num2 + num1 + num5)/3 ;
    else if (num3 > num4&&num1&&num5 > num2)
        cout<<"Average: "<<(num4 + num1 + num5)/3 ;
    else if (num4 > num3&&num1&&num5 > num2)
        cout<<"Average: "<<(num3 + num1 + num5)/3 ;
    else if (num5 > num3&&num1&&num4 > num2)
        cout<<"Average: "<<(num3 + num1 + num4)/3 ;
    else if (num2 > num3&&num1&&num5 > num4)
        cout<<"Average: "<<(num3 + num1 + num5)/3 ;
    cout<<"\n\n\n";    
    }

Help!!!
I'm trying to eliminate the highest and lowest number out of 5 inputs then get the average of the remaining 3 inputs...
In some instances, it gives me incorrect average..
(We are not suppose to use arrays yet)

It would be SO much easier using arrays and loops. - Can you give some examples of the incorrect averages you get, and is it every time, or just sometimes?

It would be SO much easier using arrays and loops. - Can you give some examples of the incorrect averages you get, and is it every time, or just sometimes?

- Try this:
3rd number = highest; 5th number = lowest

Thanks for the reply...=)

>>
I'm trying to eliminate the highest and lowest number out of 5 inputs then get the average of the remaining 3 inputs...
In some instances, it gives me incorrect average..
<<

First find the highest/lowest integer.

When getting input, make a variable that checks for high and low numbers.

you can do something like ths :

int num1, num2, num3, num4, num5;
int max(0),min(0);
cin >> num1;
max = min = num1;
//then get other inputs while comparing the value

Then post back when you get that done.

- Try this:
3rd number = highest; 5th number = lowest

Thanks for the reply...=)

There's an error in one of your or a lack of a "else if".

Btw, this will do, however I forgot that you weren't supposed to use arrays, but like, just something alike I had laying around.

#include <iostream>
using namespace std;

void getData();
int CheckIsMaxOrMin();
void calcscore();

double input[5];
bool IsMaxOrMin[5];

int main()
    {
    getData();
    calcscore();
    
    system("PAUSE");
    return 0; // Added a return
    }

int CheckIsMaxOrMin()
     {
     int count=0;
     for (int a=0; a < 5; a++)
         if ((IsMaxOrMin[a]==true)){count++;}
     return count;
     }

void getData()
    {
    cout << "Input 5 numbers : \n";
    cin >> input[0] >> input[1] >> input[2] >> input[3] >> input[4];
    double minimum=input[0]; 
    for (int a=0; a < 5; a++)
        if (input[a] < minimum){minimum=input[a];}
    for (int a=0; a < 5; a++)
         if (input[a] == minimum && (CheckIsMaxOrMin()!=1)){IsMaxOrMin[a]=true;}
        
    double maximum=input[0];
    for (int a=0; a < 5; a++)
        if (input[a] > maximum){maximum=input[a];}
    for (int a=0; a < 5; a++)
         if (input[a] == maximum && (CheckIsMaxOrMin()!=2)){IsMaxOrMin[a]=true;}
         
    for (int a=0; a < 5; a++)
         cout << input[a] << " " << IsMaxOrMin[a] << endl;    
    }

void calcscore()
    {
    double num[3]={0,0,0};
    for (int a=0, b=0; a < 5; a++)
        {
        if (!(IsMaxOrMin[a])){num[b]=input[a];b++;}
        }
    cout << "Average: " << (num[0]+num[1]+num[2])/3; 
    cout<<"\n\n\n";    
    }
#include <iostream>
using namespace std;

void getData();
int CheckIsMaxOrMin();
void calcscore();

double input[5];
bool IsMaxOrMin[5];

int main()
    {
    getData();
    calcscore();

    system("PAUSE");
    return 0; // Added a return
    }

int CheckIsMaxOrMin()
     {
     int count=0;
     for (int a=0; a < 5; a++)
         if ((IsMaxOrMin[a]==true)){count++;}
     return count;
     }

void getData()
    {
    cout << "Input 5 numbers : \n";
    cin >> input[0] >> input[1] >> input[2] >> input[3] >> input[4];
    double minimum=input[0]; 
    for (int a=0; a < 5; a++)
        if (input[a] < minimum){minimum=input[a];}
    for (int a=0; a < 5; a++)
         if (input[a] == minimum && (CheckIsMaxOrMin()!=1)){IsMaxOrMin[a]=true;}

    double maximum=input[0];
    for (int a=0; a < 5; a++)
        if (input[a] > maximum){maximum=input[a];}
    for (int a=0; a < 5; a++)
         if (input[a] == maximum && (CheckIsMaxOrMin()!=2)){IsMaxOrMin[a]=true;}

    for (int a=0; a < 5; a++)
         cout << input[a] << " " << IsMaxOrMin[a] << endl;    
    }

void calcscore()
    {
    double num[3]={0,0,0};
    for (int a=0, b=0; a < 5; a++)
        {
        if (!(IsMaxOrMin[a])){num[b]=input[a];b++;}
        }
    cout << "Average: " << (num[0]+num[1]+num[2])/3; 
    cout<<"\n\n\n";    
    }

Marvelous! This one actually works..Thanks for your help, really.
Problem solved, finally.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.