(C ++) Пытаетесь закончить быструю программу, но я не уверен, где я ошибся? - PullRequest
0 голосов
/ 06 декабря 2018

Описание программы ниже.Когда я пытаюсь скомпилировать, я получаю сообщение об ошибке 'cannot convert 'double' to 'double**' for argument.

Напишите программу, которая динамически выделяет массив, достаточно большой для хранения определенного пользователем количества тестов.Как только все оценки введены, массив должен быть передан в функцию, которая сортирует их в порядке возрастания.Должна быть вызвана другая функция, которая вычисляет средний балл.Программа должна отображать отсортированный список оценок и средних значений с соответствующими заголовками.

ПРИМЕЧАНИЕ. Я довольно новичок в использовании указателей в C ++ и понимаю, что ошибка в моем коде может быть довольно легконекоторые заметить, так что, пожалуйста, идите спокойно.Кроме того, если есть какие-либо предложения относительно того, что я могу улучшить, или где я могу найти дополнительные ссылки на указатели, это было бы здорово!

#include <iostream>
#include <iomanip>

using namespace std; 

//Function Prototypes
void arrSelectionSort( double *[], int );
double testAverage( double *[], int );

int main() { 

    double *testScores; //To dynamically allocate an array

    int numTest;    //To hold the number of test - size of array
    int count;      //Counter variable


    //User input
    cout <<"Please enter the number of test scores: ";
    cin >> numTest; 

    //Dynamically allocate an array for test scores 
    testScores = new double[numTest];

    //Obtain the individual test scores from user
    cout << "\nEnter each test score.\n";
    for ( count = 0; count < numTest; count++ ) { 

        cout << "Test " << ( count + 1 ) << ": " << endl; 
        cin >> testScores[count];

    }

    //Function call to sorting algorithm 
    arrSelectionSort( testScores, numTest );


    //Display sorted array
    cout << "Here are the sorted test scores.\n";
    for ( int x = 0; x < numTest; x++ ) { 

        cout << "\nTest " << (x+1) << ": " << testScores[x];

    } 


    //Display average of all test scores
    cout <<"\nAverage of all test scores is: " << testAverage( testScores, numTest );


    //Free up allocated memory
    delete  [] testScores;
    testScores = 0; 

    return 0;
}

void arrSelectionSort( double *arr[], int size ) { 

    int startScan, minIndex; 
    double *minElement; 

    for ( startScan = 0; startScan < ( size - 1 ); startScan++ ) { 

        minIndex = startScan; 
        minElement = arr[startScan]; 

        for ( int index = startScan + 1; index < size; index ++ ) { 

            if (*(arr[index]) < *minElement) {

                minElement = arr[index]; 
                minIndex = index;  
            }

        }

        arr[minIndex] = arr[startScan]; 
        arr[startScan] = minElement; 
    }
}

double testAverage( double *arr[], int size ) { 

    double average;
    double total; 

    //Accumulating Loop
    for ( int count = 0; count < size; count++ ) { 

        total += arr[count];
    }

    average = total/size; 

    return average; 
}

1 Ответ

0 голосов
/ 06 декабря 2018

Удалите * из параметров вашей функции:

void arrSelectionSort( double arr[], int size );
double testAverage( double arr[], int size );

Вы хотите передать массив double значений, а не массив double* указателей.

И затем, внутри arrSelectionSort(), избавьтесь от использования *, поскольку вы хотите сортировать значения, а не указатели:

void arrSelectionSort( double arr[], int size ) { 

    int startScan, minIndex; 
    double minElement; 

    for ( startScan = 0; startScan < ( size - 1 ); startScan++ ) { 

        minIndex = startScan; 
        minElement = arr[startScan]; 

        for ( int index = startScan + 1; index < size; index ++ ) { 

            if (arr[index] < minElement) {

                minElement = arr[index]; 
                minIndex = index;  
            }

        }

        arr[minIndex] = arr[startScan]; 
        arr[startScan] = minElement; 
    }
}
...