Как вызвать функцию в основном блоке кода при объявлении прототипа

#c

#c

Вопрос:

Я работаю над кодом для класса, который включает в себя выполнение численного интегрирования с трапециевидным правилом и дискретными точками данных. Часть инструкций гласит, что нужно вызывать функцию с прототипом:

 double trapInt(const double xvals[], const double yvals[], int nElements);
  

Я уже объявил прототип перед частью кода «int main», но я не до конца понимаю точные шаги по вызову функции.

Примечание: Код предполагает использование одномерных массивов. У меня также есть PDF-файл назначения, если просмотр этого поможет.

 #include <iostream>
#include <ifstream>


using namespace std;

double trapInt(const double xvals[], const double yvals[], int nElements);


int main()
{
const int MAX_SIZE = 101;
double xData[MAX_SIZE];
double yData[MAX_SIZE];

ifstream infile("trapezoidData.txt");
if(infile.fail())
  {
    for(int a=0; a<MAX_SIZE;   a)
    {
      infile >> xData[a] >> yData[a];
      cout << xData[a] << 't' << yData[a] << endl;
  }

}
else
{
  cout << "Could not open infile." << endl;
}

cout.setf(ios::fixed);
cout.precision(3);

return 0;
}
  

Комментарии:

1. Ваша fail проверка отменена. Вы пытаетесь прочитать, когда открытие файла завершается неудачей, и выводите сообщение об ошибке, когда это удается.

2. Вызов функции был бы таким простым, как double result = trapInt(xData, yData, MAX_SIZE);

3. Объявление прототипа кажется довольно простым. Два const double массива, которые на самом деле являются разложившимися указателями, и int параметр. Что именно вы не понимаете в «точных шагах»? Вы вызываете ее как любую другую функцию, которая принимает те же параметры.

4. @IgorTandetnik Если бы я просто добавил восклицательный знак перед «infile» в строке «if(infile.fail())», это устранило бы проблему с отменой моей проверки на ошибку?

5. @AstroNOT98 Вы пробовали это, и помогло ли это?

Ответ №1:

Вызвать функцию очень просто. Все, что вы делаете, это даете имя функции и задаете параметры аналогично тому, как объявляется прототип:

 main () {
    // implementation...
    trapInt(xvals, yvals, nElements);
    // more implementation...
}
  

Однако имейте в виду, что простое добавление этой строки (или подобной) к вашей основной функции не сможет скомпилироваться без реализации:

 double trapInt(const double xvals[], const double yvals[], int nElements) {
    // implementation of the function...
}
  

Редактировать: Изначально я хотел оставить вызов функции в качестве упражнения для вас, но на случай, если вы действительно в неведении, я приведу вам пример:

trapInt(xData, yData, MAX_SIZE);

Просто добавьте эту строку в свой main() .

Комментарии:

1. Большое вам спасибо. Я знаю, что мой вопрос был довольно широким, но вы, кажется, поняли, о чем я спрашивал. Однако ваш ответ оставил у меня другой вопрос. Проходит ли строка без объявлений (вместе с другими «инструкциями» для функции) внутри строки с объявлениями, как у меня ниже?

2. double trapInt(const double xvals[], const double yvals[], int nElements) { trapInt(xvals, yvals, nElements); }

3. Неважно. Теперь я понимаю, как это сделать. Еще раз спасибо!

4. То, что вы описываете, называется рекурсией . Хотя это довольно сложная тема для вашего уровня, но в ней есть свои применения. Хотя, возможно, это не то, что вам нужно.