Создать функцию, чтобы найти Max & Min - PullRequest
0 голосов
/ 02 марта 2020
float inputArray(int &size,float &inputdata,float array1[]);
float findMaxMin(int &size,float &max,float &min,float array1[]);
void displayMenu (float &max, float &min);



using namespace std;

int main() {
    int size;   // Variable designated for the number of elements the user wishes to allocate
    float inputdata; // Designated for temporarily storing the user input for the array
    float max;          // Variable designated for the maximum value within the array
    float min;          // Variable designated for the minimum value within the array
    float array1[size]; // Array consisting of a specified number of elements by user

inputArray(size,inputdata,array1);
findMaxMin(size,max,min,array1);
displayMenu(max,min);



return 0;

}



/******************************Input Array Data*****************************/
float inputArray(int &size,float &inputdata,float array1[]){


  cout << "Type in the number of elements you wish to utilize" << endl;
    cin >> size;        // User specifies number of elements to be allocated



    for (int x = 0; x < size; x++) {
        cout << "Type in value for element " << x << " and Press [ENTER] "
             << endl;
        cin >> inputdata;
        array1[x] = inputdata;

        }

}
/****************************************************************************/




/*************************Determination of Max & Min*************************/

float findMaxMin(int &size,float &max,float &min,float array1[]){

//The min and max variables are given the value of the first element of array1.

    max=min=array1[0];  


    for (int x = 0; x < size; x++) {
            if (min > array1[x]) {
                min = array1[x];
            }
            if (max < array1[x]) {
                max = array1[x];
            }
    }

}

/*****************************************************************************/





/*********************************Menu Screen*********************************/
/**The Menu Screen will tell the user that the data collection is complete and 
will prompt the user to input an integer to trigger the display of the desired 
output**/


void displayMenu (float &max, float &min){


        char menuInput; // Variable designated to store user input for the menu
        bool inputTester;


        do {
            cout << "\n\n\t\tYour Data Has Been Collected"
                    "\n\t\tTo View Maximum of Data Set Enter.......\t 9"
                    "\n\t\tTo View Minimum of Data Set Enter.......\t 0"
                 << endl;
            cin >>menuInput;


                            switch(menuInput){
                            case('9'):
                                    cout<<"Maximum is "<<max<<endl;
                                    inputTester=true;
                                    break;

                            case('0'):
                                    cout<<"Minimum is "<<min<<endl;
                                    inputTester=true;
                                    break;

                            default:
                                cout<<"Please Enter a Valid Input"<<endl;
                                inputTester=false;
                                break;

                                }
        }

        while (inputTester==false);

}

Итак, в основном я пытаюсь сделать следующее: предложить пользователю ввести числа с плавающей точкой в ​​консоли; - создать функцию для поиска максимального / минимального числа массива; - Создайте функцию для отображения максимума и минимума в зависимости от того, какая команда («0» или «9») вводится пользователем в консоли. Но я продолжаю получать ошибку, и я застрял.

Ответы [ 2 ]

2 голосов
/ 02 марта 2020
    int size;  // <---- here
    float inputdata;
    float max;
    float min;
    float array1[size];  // <--- and here

Ваша переменная int size неинициализирована, и вы используете ее для выделения float array1 неизвестного числа элементов; Позже вы пытаетесь записать в этот массив, предполагая, что количество доступных элементов равно пользовательскому вводу (а это не так). Вот почему ваш стек поврежден, и вы можете получить ошибку сегмента при возврате из main. Вы должны использовать динамическое распределение c с operator new или просто использовать соответствующий контейнер C ++ для этой работы (например, std::vector).

Совет: компилируйте свои программы с флагами -Wall -Werror. Компилятор расскажет вам о неинициализированных переменных, об отсутствии операторов возврата в функциях и тому подобном.

1 голос
/ 02 марта 2020

Самый простой способ получить min и max из массива - использовать std :: minmax_element , предоставленный заголовком <algorithm>. Чтобы написать функцию, возвращающую minmax std::pair, вы можете сделать:

/* returns <min, max> pair from arr of nelem */
std::pair<float*, float*> minmaxfloat (float *arr, size_t nelem)
{
    return std::minmax_element (arr, arr + nelem);
}

Краткий пример:

#include <iostream>
#include <algorithm>
#include <utility>

/* returns <min, max> pair from arr of nelem */
std::pair<float*, float*> minmaxfloat (float *arr, size_t nelem)
{
    return std::minmax_element (arr, arr + nelem);
}

int main (void) {

    float arr[] = { 5, 4, 6, 3, 7, 2, 8, 1, 9 };
    float min, max;
    /* create minmax pair from call to minmaxfloat() */
    std::pair<float*, float*> p1 = minmaxfloat (arr, sizeof arr/sizeof *arr);

    min = *p1.first;    /* assign min */
    max = *p1.second;   /* assign max */

    std::cout << "min: " << min << " max: " << max << '\n';
}

( примечание: std::pair будет состоять из двух указателей на элементы min и max в вашем массиве)

Пример использования / Вывод

$ ./bin/floatminmax
min: 1 max: 9

Это лучше, чем придумывать свои собственные. Посмотрите вещи и дайте мне знать, если у вас есть дополнительные вопросы.

...