Здавалка
Главная | Обратная связь

КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ



Поиск наибольшего (наименьшего) значения осуществляется последовательным сравнением значений.

Для нахождения наибольшего необходи­мо задать начальное значение наибольшего, равное заведомо малому числу. При этом поиск в цикле можно описать фор­мулой:

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

 

Пример 1. Составить программу для нахождения наибольшего значения функции при изменении аргумента x от а до b с шагом h.

Программа имеет вид

PROGRAM MAX (INPUT,OUTPUT);

VAR A,B,C,H,X,Y,YMAX:REAL;

BEGIN

READ (A,B,C,H);

YMAX:=-1E30;

X:=A;

WHILE X<=B DO

BEGIN

Y:=ABS(C)*EXP(C*X-X*X);

IF Y>YMAX THEN YMAX:=Y;

X:=X+H

END;

WRITE (YMAX)

END.

Рассмотренный прием нахождения наибольшего (наи­меньшего) является универсальным, так как позволяет найти его даже в том случае, если функция не имеет экстремума (является монотонной) или имеет несколько экстремумов. Если функция имеет один экстремум, то затраты времени на решение можно существенно сократить, используя другой ал­горитм.

Для функции, имеющей один максимум, вычисляемые значения, находящиеся до максимума, всегда являются большими из всех предыдущих, т.е. После максимума функция начнет убывать, следовательно, все последующие значения меньше наибольшего из предыдущих. Поэтому, как только выполнится условие , необходимо пре­кратить вычисления в цикле.

Для нахождения максимума можно записать выражение

Аналогично, для минимума

Пример 2. Составить программу для нахождения экстремума функции при изменении аргумента x от 0 до b/c с ша­гом h.

Функция у всегда положительна и имеет один экстремум. При С>0 функция имеет минимум, а при с<0 - максимум. Поэтому сначала надо определить знак с и присвоить переменной N значение +1, если с положительно (функция имеет минимум), и значение - 1, если с отрицательно (функция имеет максимум).

Программа имеет вид

PROGRAM MINMAX (INPUT,OUTPUT);

LABEL 40;

CONST D=0;

VAR A,B,C,E,H,X,Y,YM:REAL;

N:INTEGER;

BEGIN

READ (A,B,C,H);

IF C>0 THEN N:=l ELSE N:=-l;

YM:=N*1E30;

X:=D;

E:=B/C;

REPEAT

Y:=ABS(A)*EXP(B*X+C*X*X);

IF N*YM<=N*Y

THEN GOTO 40

ELSE

BEGIN

YM:=Y;

X:=X+H

END

UNTIL X>E;

40:WRITE (YM,N)

END.

Пример 3. Составить программу для нахождения наименьшего элемента массива Х(х1, x2, …, x50) и его порядкового номера.

Значения элементов массива X после ввода размещаются в памя­ти ЭВМ. В качестве начального значения наименьшего целесообразно взять значение первого элемента. Сравнение выбранного элемента следует начинать со вторым, третьим и т. д. При выполнении условия xi<XMIN необходимо выполнять оператор присваивания XMIN: = Х[I]; и IMIN:=I; Так как значение первого элемента может оказаться наименьшим, то перед циклом наряду с оператором ХМIN:=Х[1]; необходимо записать IMIN:=1; Программа имеет вид

PROGRAM MINX (INPUT.OUTPUT);

CONST NMAS=50;

VAR XMIN:REAL;

I,IMIN,N:INTEGER;

X:ARRAY [1..NMAS] OF REAL;

BEGIN

READ (N);

FOR I:=l TO N DO READ (X[I]);

XMIN:=X[1];

IMIN:=1;

FOR I:=2 TO N DO

IF X[I]<XMIN THEN

BEGIN

XMIN:=X[I];

IMIN:=I

END;

WRITE (XMIN,IMIN)

END.

 

Контрольные вопросы.

1. Почему при нахождении наибольшего значения функции в качестве начального значения Ymax выбрано значение 1010 ?

2. Какие правила необходимо соблюдать при нахождении наибольшего значения функции?

3. Какие правила необходимо соблюдать при нахождении наименьшего значения функции?

4. С помощью какого оператора возможна проверка условия Y<Ymin ?

 







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.