Сдам Сам

ПОЛЕЗНОЕ


КАТЕГОРИИ







void otdel_korn(fun_pointer fun, double a, double b, double eps, double s1,double s2, double ds)





{ int iter =0;

double shag =fabs(b-a)/10;

double nashalo =a, koneс =b+shag/2;

double x1,x2, s, koren;

 

if (! fun)

{cout << "Function trouble" << endl; exit(0); }
//если не задана функция

 

for(s=s1;s<=s2;s+=ds) //цикл изменения значений параметра

{ nashalo=a;

while(nashalo < koneс) //цикл «движения» по отрезку

{

x1= fun (nashalo, s); //вызов функции с параметром s в т.nashalo

x2= fun (nashalo + shag, s);

cout << "s=" << s << " " << nashalo <<endl;

 

if (x1*x2>0) //если корня на отрезке нет

cout << "Function don't across OX for set interval" << endl;

 

if (!x1) { koren=a; //если корень в т. а

cout <<"koren x="<< koren <<" Kol-vo iterasij="<< iter << endl;
}

if (!x2) { koren=b; //если корень в т.b

cout <<"koren x="<<koren <<" Kol-vo iterasij="<< iter << endl;
}

 

if(x1*x2<=0)

{ if (x1<0) //если корень на отрезке есть и х1<0

solve_rec (fun,nashalo,nashalo+shag, eps, s, &iter, &koren);

else

solve_rec (fun,nashalo+shag,nashalo, eps, s, &iter, &koren);

 

cout << "koren x="<< koren <<

" Kol-vo iterasij=" << iter << endl;

}

 

nashalo=nashalo+shag; //переход к следующей точке

 

} //end цикла while

 

} //end цикла for

return;

}

int solve_rec( fun_pointer fun,double fA, double fB, double fE, double s, int *iter, double *koren)

 

{ (* iter)++;

if (fabs(fA-fB)<fE)

{* koren = (fA+fB)/2; //условие завершения

return 0;

}

double fMiddle = (fA+fB)/2;

 

double fRes = fun (fMiddle, s);

if (fabs(fRes-0.0)< fE)

{* koren = fMiddle; //условие завершения

return 0;

}

if (fRes<0)

return solve_rec (fun, fMiddle, fB, fE, s, iter, koren);

else

return solve_rec (fun, fA, fMiddle, fE, s, iter, koren);

}

 

 

Правила оформления и вызова функций

· в виде функции можно оформить любую (не обязательно повторяющуюся), логически завершенную часть программы;

· перед функцией main() записывается прототип функции; ключевое слово void перед именем функции означает, что функция не возвращает результата. Далее следует имя функции, которое записывается по обычным правилам записи идентификаторов. Пустые круглые скобки после имени функции означают, что функция не имеет ни входных параметров, ни возвращаемых значений. При этом слово void в круглых скобках (но не в начале!!!) можно не писать. После прототипа обязательно записывается символ «;», а при описании функции этот символ не пишем.

· в прототипе функции и при ее определении в заголовке обязательно надо записывать типы параметров, даже если они повторяются (в отличие от объявления переменных);

нельзя писать: void LINE(int Len, y, char ch) //ошибка

надо писать: void LINE(int Len, int y, char ch)

при этом имена параметров обязательны только в заголовке описания, а в прототипе можно указать только их типы: void LINE(int, int, char);

· определение функции размещается после текста функции main(); в качестве заголовка функции записывается ее прототип, но без точки с запятой в конце; при необходимости внутри функции объявляются локальные переменные, предназначенные для хранения промежуточных величин;

· тело функции представляет собой своеобразный шаблон вычислений с формальными параметрами;

· фактические параметры (аргументы) – это приказ «проработать» тело функции для данных значений;

· соответствие формальных параметров и аргументов должно выполняться по количеству, порядку следования и типу;

· вызов функции осуществляется отдельным оператором вызова;

· вызов функции типа void (т.е. не возвращающей значения) выполняется указанием ее имени и параметров, например: LINE(i, j, ch);

При отсутствии параметров, и в прототипе, и в определении функции, и при ее вызове необходимо обязательно записывать пустые круглые скобки.

· точка возврата из функции определяется как место в программе, где описывается действие, которым продолжается программа по окончании выполнения вызова подпрограммы;

· особенности return: оператор обязателен, если в заголовке функции тип результата отличен от void, т.е. возвращается одно значение;можно возвращать константу или значение одной переменной (как частный случай выражения); оператор может быть единственным в функции;таких операторов может быть в функции несколько, и находиться они могут не обязательно в конце функции, но выполняется всегда один из них;

· безусловный выход из функции реализуется через операторы: return – завершение функции, переход к оператору, следующему за вызовом этой функции; exit(n) – завершение работы программы с кодом n, при этом возможно использование функции atexit() дляобработки завершения программы при выходе из нее;

· локальная память функции (локальная память процесса выполнения вызова функции) – это совокупность участков памяти, где хранятся:

§ параметры-значения функции

§ собственные локальные переменные функции

§ точка возврата из функции

§ переменная, в которой запоминается значение, возвращаемое из вызова

· статическая память программы – область под программу и ее переменные;

· программный стек – это память, выделяемая при вызове функции и освобождаемая после завершения ее работы (автоматическая память программы, область локальной памяти функции); механизм работы стека – Last In First Out (первый пришел, последний ушел);

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

§ размещение локальных статических переменных в памяти – вместе с глобальными переменными программы

§ доступность – только во время выполнения вызова функции, в которой они определены.

 

Элементы оптимизации работы с функциями

· устойчивость – идентификация вариантов завершения подпрограммы:

¨ отслеживание ошибок на входе и публикация сообщений об этом:

§ выдача сообщения и прекращение работы программы – плохой способ;

§ присваивание специальному параметру определенных значений – не очень хороший способ;

§ контролирующая функция – самый надежный способ для подпрограмм с несколькими вариантами завершения: подпрограмма определяется как функция, которой присваиваются значения, свидетельствующие о варианте ее завершения

· корректность – правильность вычислений:

¨ отдельные алгоритмы – в функции;

¨ способы повышения корректности взаимодействия программы с подпрограммами:

§ функции при выполнении вычислений в качестве рабочих используют локальные переменные;

§ передача данных осуществляется через параметры, а не через глобальные переменные

§ для передачи исходных данных используются передача параметров по значению;

§ для передачи в функцию исходных данных большого размера используется передача параметров по указателю или по ссылке;

§ передача параметров по указателю и ссылке используются для возврата из функции результатов;

§ использование в функциях глобальных переменных допускается только в исключительных случаях, например, при реализации набора операций над одной и той же общей (глобальной) переменной;

§ функции должны выполнять контроль своих параметров и вычислений, поэтому их надо оформлять в виде контролирующих функций, чтобы проверять все возвращаемые значения;

§ не надо смешивать в одной функции обработку информации и взаимодействие с внешними устройствами.

 

 







Что вызывает тренды на фондовых и товарных рынках Объяснение теории грузового поезда Первые 17 лет моих рыночных исследований сводились к попыткам вычис­лить, когда этот...

ЧТО ПРОИСХОДИТ, КОГДА МЫ ССОРИМСЯ Не понимая различий, существующих между мужчинами и женщинами, очень легко довести дело до ссоры...

Конфликты в семейной жизни. Как это изменить? Редкий брак и взаимоотношения существуют без конфликтов и напряженности. Через это проходят все...

ЧТО ТАКОЕ УВЕРЕННОЕ ПОВЕДЕНИЕ В МЕЖЛИЧНОСТНЫХ ОТНОШЕНИЯХ? Исторически существует три основных модели различий, существующих между...





Не нашли то, что искали? Воспользуйтесь поиском гугл на сайте:


©2015- 2024 zdamsam.ru Размещенные материалы защищены законодательством РФ.