#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. То, что вы описываете, называется рекурсией . Хотя это довольно сложная тема для вашего уровня, но в ней есть свои применения. Хотя, возможно, это не то, что вам нужно.