Вторая пачка часть 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
Индекс
Элементарные функции    Линейные уравнения    Нелинейные уравнения    Случайные числа


Hosted by uCoz