Tomdery
Tomdery

Reputation: 13

Array element number

I need some help with a simple program. And no - its not my homework (I am learning Cpp for myself and maybe use it in future) So yeah. I have a program, that reads arrays size 10, and then put numbers in it {2.56, 1.598, 0, 5.15, 0, 3.012, 10, 4.789, 2.569, 0} The program should ignore the 0, and it does, but the problem is.. I need to get the number of the where the number is placed in array (Smallest number is 1.598 and its 2 in the array) Meanwhile I get number 8 on the biggest (should be 5 if zeros would be ignored) and 1 on the smallest. How can I fix that ? Heres the void of the biggest number :

void Biggest(float array[], int n, float &max, int &maxNr)
{
    max = array[0]
    for (int i = 1; i < n; i++){
        if (array[i] == 0)
            continue;
        if (array[i] > max){
            max = array[i];
            maxNr = i;
        }
    }
}

Printing void :

void Print(float min, float max, double avg, int maxNr, int minNr)
{
    ofstream info;
    info.open("result1.txt");
    info << "Biggest: " << max << "  Number : " << maxNr << endl;
    info << "Smallest: " << min << "  Number : " << minNr << endl;
    info << "Average: " << avg << endl;
    info.close();
}

And all main.

int main(){
    float array[100];
    int n;
    float max;
    float min;
    double avg;
    int maxNr, minNr;

    Reading(array, n);
    Biggest(array, n, max, maxNr);
    Smallest(array, n, min, minNr);
    Average(array, n, avg);
    Printing(min, max, avg, maxNr, minNr);
    return 0;
}

Upvotes: 0

Views: 88

Answers (2)

John Seed
John Seed

Reputation: 387

Arrays in most (all that I can think of) programming languages start at index zero. So simply change your for loop condition to be:

for (int i = 0; i < n; i++)

Because you want the loop to start at the first element in the array, i must be initialized to 0. That should fix the problem you are having with the array.

Upvotes: 0

Barmar
Barmar

Reputation: 780889

First of all, array indexes start at 0, not 1.

If you want to get the position ignoreing zeros, you need to use a separate counter variable from the one used to index the array, so that you don't increment it when you skip over 0.

void Biggest(float array[], int n, float &max, int &maxNr)
{
    max = array[0];
    int position = 0;
    for (int i = 0; i < n; i++){
        if (array[i] == 0) {
            continue;
        }
        if (array[i] > max){
            max = array[i];
        }
        position++;
    }
    maxNr = position;
}

Upvotes: 1

Related Questions