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

4.13. Оптимізація лінійних програм

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

Приклад 4.3. Програма обчислення координат вектора, повернутого на кут Alfa.

Program Vector;

Var

X, Y : Real;

Alfa : Real;

U, V : Real;

Begin

{ Введення X, Y, Alfa }

U := X*Cos(Alfa) + Y*Sin(Alfa);

V := Y*Cos(Alfa) - X*Sin(Alfa);

{ Виведення U, V }

End.

У цьому варіанті складність програми T(U, V) є

T(U, V) = 4Tf + 4Tm + 2Ta

Здійснимо попереднє обчислення функції Sin, Cos:

{ Описати допоміжні змінні Fsin, Fcos }

Begin

{ Введення X, Y, Alfa }

Fsin := Sin(Alfa);

Fcos := Cos(Alfa);

U := X*Fcos + Y*Fsin;

V := Y*Fcos - X*FSin ;

{ Виведення U, V }

End.

Отримаємо: T(U, V) = 2Tf + 4Tm + 2Ta

В результаті перетворення складність зменшилась приблизно вдвічі. Можна ще зменшити складність програми, якщо обчислити U і V наступним способом:

A := (Fcos + Fsin)*(X + Y);

B := X*Fsin;

C := Y*Fcos;

U := A - B - C;

V := C - B;

Тоді T(U, V) = 2Tf + 3Tm + 5Ta

Рішення питання про те, який з двох варіантів перетворень програми кращий за швидкодією, залежить від реалізації множення у комп’ютері.

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

Приклад 4.4. Відомо, що рівняння x2 - px + q має два корені . Знайти їх.

Варіант 1:

Discriminant := Sqrt(p*p - 4*q);

Root1 := ( p + Discriminant )/2;

Root2 := ( p - Discriminant )/2;

Варіант 2:

Discriminant := Sqrt(p*p - 4*q);

Root1 := (p + Discriminant)/2;

Root2 := p - Root1;

Обчислення у другому варіанті містять на одне ділення менше. Тут оптимізація досягнута завдяки наявності співвідношення між Root1 і Root2: Root1+ Root2 = p.

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

4.14. Задачі і вправи

Скласти програму, що розв’язує задачу.

Задачі на цілі числа

  1. Скласти алгоритм та розробити програму, яка за трьохзначним числом abc, що вводиться з клавіатури, знаходить та виводить на екран монітору число bсa.

  2. Скласти алгоритм та розробити програму, яка знаходить дві середні цифри добутку двохзначного числа ab на число ba. Число ab вводиться з клавіатури.

  3. Скласти алгоритм та розробити програму, яка знаходить останні дві цифри добутку чотирьох натуральних чисел А, В, С, D.

  4. Скласти алгоритм та розробити програму, яка за числом місяця Жовтень 2001 р. обчислює номер дня тижня, який припадає на це число. (Відлік номерів днів тижня починається з понеділка.)

  5. Прямокутна таблиця розміром M на N заповнена послідовними натуральними числами від 1 до M*N за принципом “зліва направо та зверху вниз”. Скласти алгоритм та розробити програму, яка за номерам рядка A та стовпчика B визначає число X, що стоїть в клітинці таблиці, яка знаходиться в цьому рядку та цьому стовпчику.

  6. Прямокутна таблиця розміром M на N заповнена послідовними натуральними числами від 1 до M*N за принципом “зліва направо та зверху вниз”. Скласти алгоритм та розробити програму, яка за числом A визначає рядок X та стовпчик Y таблиці, де розташоване це число.

  7. Багатоповерховий будинок має N поверхів та M підїздів. На кожному поверсі кожного підїзду розташовано K квартир. Скласти алгоритм та розробити програму, яка за номером F квартири визначає підїзд та поверх розташування цієї квартири.

  8. Автомат для видачі паперових грошей (банкомат) заряджено купюрами номіналів 100, 50, 20, 10, 5, 2, 1 грн. Скласти алгоритм та розробити програму, яка підраховує кількості купюр різних номіналів, якими банкомат видає суму в N грн. Ваш алгоритм повинен витрачати при цьому найменшу можливу кількість купюр.

  9. Скласти алгоритм та розробити програму, яка знаходить останні чотири цифри 32-ого степеня натурального числа N. (N32)

  10. Скласти алгоритм та розробити програму, яка обчислює цілі коефіцієнти А, В, С квадратного рівняння Аx2 + Вx + С = 0 за його раціональними коренями х1 = n1 / m1, x2 = n2 / m2

Задачі на дійсні числа

  1. Знайти гіпотенузу, площу і гострі кути прямокутного трикутника, заданого катетами.

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

  3. Дані дві дійсні змінні a, b. Скласти програму, яка міняє місцями значення цих змінних (нове значення a дорівнює старому значенню b та навпаки).

  4. Дані дві дійсні змінні a, b. Скласти програму, яка міняє місцями значення цих змінних (нове значення a дорівнює старому значенню b та навпаки). Не використовувати додаткових змінних.

  5. Скласти програму, яка обчислює останню цифру цілої частини та першу цифру дробової частини дійсного числа х.

  6. Скласти програму, яка обчислює першу цифру добутку чисел a і n (a – дійсне число, n – натуральне число.)

  7. Змішано V1 літрів води температурою t1 з V2 літрами води температури t2. Знайти об’єм V і температуру t утвореної суміші.

  8. Знайти радіус кола з центром в (X0,Y0), дотичною до якого є пряма y = kx + b.

  9. Обчислити центр ваги системи з трьох матеріальних точок на площині з масами M1, M2, M3 і координатами (X1,Y1), (X2,Y2), (X3,Y3).

  10. Розв’язати систему лінійних рівнянь методом Крамера.

{Вважати, що її визначник не дорівнює нулю }

  1. Обчислити координати точки А(X,Y) при повороті системи координат на кут Alfa і паралельному переносі на вектор a = (u, v).

  2. Знайти корінь степені n і n-ту степінь позитивного дійсного числа a.

  3. Обчислити внутрішні кути трикутника, заданого довжинами сторін.

  4. Перерахувати координати точки з полярної системи в декартову систему координат.

  5. Перерахувати координати точки з декартової системи в полярну систему координат.

  6. Розрахувати координати матеріальної точки, пущеної з початковою швидкістю V0 під кутом Alfa до горизонту в напрямі вектора а = (X0,Y0) в момент часу t.

  7. Багаточлени F(x) = ax + b і G(x) = cx + d задані своїми коефіцієнтами. Знайти коефіцієнти багаточлена H(x) = F(x)*G(x).

  8. Написати програму розвязання задачі: знайти довжини медіан трикутника ABC, визначеного координатами своїх вершин A, B, C.

  9. Написати програму розвязання задачі: знайти довжини бісектрис трикутника ABC, визначеного координатами своїх вершин A, B, C.

  10. Написати програму розвязання задачі: знайти координати точки перетину бісектрис трикутника ABC, визначеного координатами своїх вершин A, B, C.