Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 основи програмування книга.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.77 Mб
Скачать

6.7. Оптимізація розгалужень

Складність програми, що розгалужується, визначається складністю умови і складністю обчислень гілок. На відміну від програми, що не розгалужується, час виконання тут залежить від гілки, якою слідує процес виконання. Тому для таких програм має смисл поняття складності програми в гіршому випадку і складності програми в середньому.

Хай Тп - складність програми за часом в гіршому випадку, Ту - складність за часом умови і Тв1, Тв2 - складності гілок за часом програми. Тоді має місце співвідношення:

Tп = Tу + Max( Tв1, Tв2 ) (1)

Складність за часом у середньому визначається формулою

Tп = Tу + PуTв1 + (1 - Pу)Tв2 (2)

де Ру - ймовірність виконання умови.

Оскільки умовою є логічний вираз, загальні прийоми оптимізації виразів застосовуються і для логічних виразів. Час Tл виконання логічних операцій And, Or, Not, =, <> значно менше часу виконання адитивних операцій, а час виконання операцій <, >, <=, >= дорівнює часу виконання аддитивних операцій.

Tf >> Tm > Ta > Tл (3)

Розглянемо приклад: потрібно з’ясувати, чи дорівнює нулю одне з двох чисел А, В .

1 варіант умови: А * В = 0

2 варіант умови: (А = 0) Оr (В = 0)

У першому варіанті використані множення і порівняння, у другому - 3 логічних операції. Складність 2-го варіанта менша.

У програмах з багатозначним розгалуженням, коли в управлінні використовується декілька умов або обчислень логічних виразів, існує можливість оптимізації управління обчисленнями. Наприклад, наступні обчислення еквівалентні:

If x < 0 then <==> If (x < 0) And (Y < 0)

If y < 0 then z := 1 then z := 1

If x < 0

then Flag := False <==> Flag := (x >= 0)

else Flag := True

У наступному прикладі умови розгалужень спрощені за рахунок використання співвідношень, що виконуються після обчислення попередньої умови:

Приклад 6.2. Програма обчислення значення кусково-визначеної функції:

1 варіант ( який часто зустрічається у починаючих)

If x < -1 then y := 2*x - 1;

If (-1 <= x) And (x < 1) then y := Sqr(x) + 1;

If x >= 1 then y := 2*x + 1;

2 варіант ( оптимальний )

If x < -1

then y := 2*x - 1

else If x < 1

then y := Sqr(x) + 1

else y := 2*x + 1;

Дійсно, умови x < -1, (-1 <= x)And(x < 1), x >= 1 взаємно протилежні і у сукупності тотожно істинні. Тому (-1 <= x) і x >= 1 можна замінити на else.

6.8. Розділ типів. Перелічуваний тип

Поряд зі стандартними типами даних у мові Pascal широко використовуються типи, що визначаються програмістом. Один з таких типів – це перелічувальний тип. Визначення цього типу задає упорядковану множину значень шляхом перелічення імен, що позначають ці значення.

Типи даних, що визначає програміст, описуються у спеціальному розділі – розділі типів. Розділ типів визначений синтаксичною діаграмою:

Розділ

типів

Перелічувальний тип даних визначається наступною діаграмою:

Перелічувальний

тип

Приклади визначень перелічувальних типів:

а)

Type

Weekday = (Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday);

Colour = (Red, Orange, Yellow, Green, Blue, Black);

Operation = (Plus, Minus, Times, Divide)

Відзначимо, що стандартний тип Boolean, якщо б його треба було описати, виглядав би як : type Boolean = (False, True);

Для аргументів перелічувального типу визначені такі стандартні функції:

Succ(x) - значення, наступне за x.

Pred(x) - значення, попереднє x.

Ord(x) - порядковий номер x.

До даного перелічувального типу можуть бути застосовані відношення:

=, <>, <, <=, >=, > .

Упорядкованість значень визначається порядком переліку констант в описанні типу. Наприклад:

Red < Orange < Yellow < Green < Blue < Black ;

Описи типу змінної можна давати і в розділі змінних. Наприклад, опис:

Type

Shape = (Triangle, Circle, Rhombus, Square);

Var

f: Shape;

еквівалентний опису

Var

f: (Triangle, Circle, Rhombus, Square);

однак у другому випадку опис типу став анонімним: тип описаний, але не має імені. Використання цього типу обмежене. Тому 1-ий варіант більш відповідає стилю мови.