1. This site uses cookies. By continuing to use this site, you are agreeing to our use of cookies. Learn More.

I have a problem with my code please

Discussion in 'C++' started by nanoooosha, Oct 7, 2009.

  1. nanoooosha

    nanoooosha New Member

    Oct 7, 2009
    Likes Received:
    Trophy Points:

    I have this function

    void smallAverage(int *array, float *average, int *numSmallerThanAverage );
    which returns in the parameters, average and numSmallerThanAvergae, the corresponding result. average is the average value of all the elements of the array. numSmallerThanAverage is the number of elements in the array which are smaller than the average.
    I need to redefine the above function such that it utilizes pass by reference to return the results, i.e., the average and the number of elements smaller than the average.

    Now, I have the code for the pass by pointer function, even though I'm not really sure if its alright and its perfect and I would really appreciate it if someone would take a look at it for me...
    for the pass by reference function, I dont know how to do it, but I was guessing that it would be the same as my pass by pointer function except that I would change every
    everywhere they are found in the function such as:

    void smallAverage(int &array, float &average, int &numSmallerThanAverage );
    I dont know if I'm wrong or not and I really need help please..oh by the way I dont know if that would be helpful, but these two functions need to be tested in a main routine and print the results. The main function must accept the size of the array as a command line parameter. And the array should be initialized with random numbers.

    Here is my code:

    #include <iostream>
    #include <cmath>
    #include <cstdlib>
    #include <ctime>
    using namespace std;
    int main(int argc, char* argv[])
    int size;
    int* myArray = NULL;
    if (argc >= 2) size = atoi (argv[1]);
    else {
    cout << "Enter array size in command line: ";
    return -1;
    myArray = new int[size];
    for(int i = 0; i < size; i++){ 
    myArray[i] = rand();
    float* average;
    int* numSmallerThanAverage;
    smallAverage(myArray, average, int* numSmallerThanAverage);
    delete[] myArray;
    return 0; 
    /****************************************function # 1**********************************************************/
    void smallAverage(int *myArray, float *average, int *numSmallerThanAverage)
    int size;
    int sum = 0;
    for(int i = 0; i < size; ++i){
    sum += myArray[i];
    *average = (float)sum/(float)size;
    *numSmallerThanAverage = 0;
    for(int i = 0; i < size; i++)
    cout << myArray[i] << " ";
    for(int i = 0; i < size; i++) //check until condition i=size
    if(*average > myArray[i])
    cout << "\nSearching..." << endl;
    //display the result...
    cout << "The number of elements smaller than the average value is = " << *numSmallerThanAverage << endl;
  2. xpi0t0s

    xpi0t0s Mentor

    Aug 6, 2004
    Likes Received:
    Trophy Points:
    Senior Support Engineer
    To change the code to pass-by-reference instead of pass-by-pointer you need to change * to & in the function parameters, and within the function use the variables as if they were local, so instead of
    *numSmallerThanAverage = 27;
    as you would with pointers, you just write this instead:
    numSmallerThanAverage = 27;
    This will work for the two scalars. Have a look at http://www.cplusplus.com/doc/tutorial/arrays/ to see how to pass an array by reference.

Share This Page