# Вторая пачка часть 74

В тех вер¬си¬ях язы¬ка, где нет этой встро¬¬ен¬ной функции, мож¬но заранее на¬¬пи¬¬-сать со¬¬¬от¬вет¬ст¬ву¬ю¬щую про¬це¬ду¬ру; 2) определить процедуру-функцию, вы¬чис¬ля-ю¬щую F(х) толь¬¬ко один раз; 3) заменить в операторе цикла медленный оператор (А+В)/2 на более быстрый (А+В)*0.5. Заметим, что имен¬¬но для этой про¬¬грам¬мы дан-ное усо¬вер¬шен¬ство¬ва¬¬¬ние бу¬дет не¬за¬мет¬но, хотя в случае боль¬ших про¬¬грамм учет скорости вы¬пол¬¬-нения опе¬ра¬ций в ма¬шине да¬ет ощу¬¬¬ти¬мый ре¬з¬-уль¬тат. Формальные параметры процедуры. Входные: a, b (тип real) - определяют длину от-рез¬¬ка; eps (тип re¬¬al) - оп¬ределяет заданную точ-ность вы¬числений; it (тип in¬te¬ger) - определяет на¬и¬боль¬¬шее раз¬ре¬шен¬ное количество ите¬раций (для из¬бе¬жа¬ния за¬цик¬ли¬ва¬¬¬ния про¬цесса в слу¬чае не¬пра¬виль¬ного опре¬де¬ле¬ния от¬рез¬ка). Выходные: х (тип real) - в нем со¬дер¬жит¬¬ся ис¬комый ко¬рень срав¬не¬ния; k (тип integer) - в не¬го за¬носится количество вы¬пол¬нен¬ных ите¬¬ра¬ций. Учитывая все замечания, окон¬ча¬тель¬¬¬¬ный ва¬риант про¬це¬¬дуры BISECT может быть сле¬¬¬ду-ющим: PROCEDURE BISECT (A,B,EPS :REAL; IT:INTEGER; VAR X : REAL; VAR K:INTEGER); VAR A1, B1: REAL; X1, X2, X3 : INTEGER; BEGIN K := 0; X1 := SIGN (FUNC(A)); X2 := SIGN (FUNC(B)); A1 := A; B1 := B; REPEAT INC (K); X := (A1+B1)*0.5; X3 := SIGN (FUNC (X)); IF X3=0 THEN EXIT; IF ABS(B1-A1)<(2*EPS) THEN EXIT; IF (X1=X2) AND (X2=X3) THEN EXIT; IF X1=X3 THEN BEGIN A1 := X; X1 := X3; END ELSE BEGIN B1 := X; X2 := X3; END; UNTIL K>IT; END. Перед началом работы программы опре¬¬-деляют FUNC(x) - процедуру-функцию, по которой вы¬чис¬ля¬¬¬¬ют зна¬¬¬че¬ния F(х). Тип функции должен быть ве¬¬щес¬¬¬твен¬ным. Ес¬ли в библиотеке стан¬дарт¬но¬го ма¬те¬¬¬матического ¬обес¬¬пе¬че¬¬¬ния отсутствует про¬це¬ду¬ра-функ¬ция SIGN, то ее сле-дует на¬¬пи¬сать самостоятельно. Предложенная процедура проверялась на при¬¬¬¬¬¬м¬е¬ре ре¬ше¬ния уравнения x2 - 5 sin x = 0

Индекс
Элементарные функции Линейные уравнения Нелинейные уравнения Случайные числа