Главная -> Книги

(0) (1) (2) (3) (4) (5) ( 6 ) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (33) (34) (35) (36) (37) (38) (39) (40) (41) (42) (43) (44) (45) (46) (47) (48) (49) (50) (51) (52) (53) (54) (55) (56) (57) (58) (59) (60) (61) (62) (63) (64) (65) (66) (67) (68) (69) (70) (71) (72) (73) (74) (75) (76) (77) (78) (79) (80) (81) (82) (83) (84) (85) (86) (87) (88) (89) (90) (91) (92) (93) (94) (95) (96) (97) (98) (99) (100) (6)

пользователя на решение задачи, равными сумме затрат на составление программы 7с, ввод программы 7к, выполнение программы Г„ и вспомогательные операции ввода исходных данных и регистрации результатов вычислений Гд.

Составляющая Tq минимальна при использовании программы, взятой из справочников (или для ПМК «Электроника МК-52» из внешнего блока расширения памяти) и максимальна при составлении программы пользователем. При оптимизации программы необходимо учитывать ее назначение. Если программа не предназначена для повторного использования, то оптимальным будет первый ее вариант, обеспечивающий требуемую точность решения, так как в этом случае составляющая Тс минимальна. Если же программа предназначена для библиотеки пользователя, то Tc = Tcolk, где Гсо - начальные затраты времени на составление программы; k - число выполнений (повторений) программы. Очевидно, что даже большие затраты времени Гсо окупаются прн большом числе k.

Составляющая Т",, минимальна при перезаписи программы из ППЗУ (или внешних запоминающих устройств ПМК «Электроника МК-52»). В других случаях она пропорциональна (при отсутствии ошибок) длине программы. Если в программе содержится п одинаковых фрагментов по m шагов, то можно использовать обращение к подпрограмме, заменив каждый такой фрагмент оператором ПП аЬ и вынося повторяющийся фрагмент в подпрограмму, оканчивающуюся оператором В/О. Следовательно, обращение к подпрограмме целесообразно при т«>«-+-2«-Ы, когда длина программы уменьшается. Если программа содержит последовательность из п одинаковых фрагментов, то ее длину можно уменьшить, используя оператор цикла LN аЬ или условный оператор для охвата повторяющегося фрагмента циклом с выходом из него после п итераций. Однако при вводе операторов перехода время выполнения программы увеличивается, и ее оптимальность определяется суммой составляющих 7к и 7м.

Требование минимизации длины программы оказывается первоочередным, когда длина составленной программы превышает емкость программной памяти, так как решение задачи с помощью пакета программ (нескольких последовательно выполняемых программ) связано со значительными затратами времени. Иногда пакет программ используют при большом числе исходных данных, не вмещающихся в числовой памяти, но следует избегать этого, нормируя исходные данные и расчетные выражения [11, 14, 15]. Если же приходится использовать пакет программ, то следует продумать размещение данных и методику выполнения программ пакета, чтобы минимизировать затраты времени.

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

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

Таким образом, оптимальность программы зависит от рационального выбора путей решения задачи на всех его этапах. В частности, выбор алгоритма и



его программного представления определяется особенностями задачи и входного языка ПМК, а также назначением программы [11, 14, 15).

Например, программа определения числа А размещений из /• по т элементов [18]

ПО ПЗ 1 ИПЗ X КИПЗ L0 04 С/П

с инструкцией: « = PY, m= РХ В/О С/П PX=/i;(/«2(m+l)) с значительно короче программы 1, но в тех случаях, когда вычисление Л" является частью решения более сложной задачи и регистры с номерами ЛЗ заняты, оптимальным может оказаться фрагмент, подобный программе 1.

Зависимость критериев оптимальности от назначения программы наглядно проявляется при вычислениях степенных многочленов

А (p) = УaiP =апР" + а„ р- + ...+ снр+а, (1.4)

1 = 0

с вещественными коэффициентами а, и в общем случае комплексным аргументом p = a4-jw. Такие многочлены, как правило, вычисляют по формуле

(Р)=(((ап Р + а„])Р+ +а) P+ai ) Р + Оо- (1.5)

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

где Ао-а„, А„=А(а). В некоторых случаях формулу (1.5) удобнее реализовать рекуррентным выражением

t=(4t ,+a„ ) а, А=1,2.....п, (1.7)

где Ао-О, А{а) =А„-{-ао.

Выбор расчетного выражения и его программной реализации зависит от особенностей задачи. Если требуется однократное вычисление многочлена при заданном значении а, то проще всего найти искомый результат нажатием кла виш, например, по программе

а t t t fln X a„ j -f X ... fli + X flo + <;оответствующей расчетному выражению (1.7). Однако в этом случае вероятность ошибок быстро возрастает при увеличении степени п многочлена н многозначных коэффициентах. Поэтому лучше использовать простейшую программу автоматических вычислений.

Программа 2. Вычисление многочлена А{р) произвольной степени п вещественного аргумента р = а с минимальным временем ввода программы

ИП8 ИП9 X + П8 С/П БП 00

Инструкция. 0 = Р8, а=- Р9, а„ = РХ В/О С/П а„ , = РХ С/П а„ о = = РХ С/П ... ai = PX С/П а„ = РХ С/П РХ = Л (а). Пример. А (2) = р* + Зрз + 2р2+р+0,5 = 50,5.

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



ких многочленов целесообразно усложнить программу, обеспечив высвечивание номера вводимого коэффициента.

Программа 3. Вычисление многочлена А{р) произвольной степени п вещественного аргумента р=а

П8 П9 ПЗ КИПЗ ИПЗ С/П ИП8 ИП9 X + П8 ИПЗ х=0 05 ИП8 С/П

Инструкция. « = PZ, а = PY, а„ = РХ В/О С/П РХ = «-1, а„ = = РХ С/П РХ = п-2... ai = PX С/П РХ = 0, а„ = РХ С/П РХ = А{а).

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

Программа 4. Вычисление многочлена А{р) степени «12 {«13 для ЯМК52) вещественного аргумента р = а с минимальным временем ввода программы

t КИПД ИПД 1 ПД X КИПД + ИПД х=0 03 - С/П

Инструкция, {ао = РО, ai = Pl, .... an = Pn) «=РД, а=РХ В/О С/П РХ=Л{а); tsvin с. Для ЯМК52 обращения в программе к регистру Д заменить обращениями к регистру Е.

Пример. А (2) = 12pii+llp"-+-10pW-+-9p» + 8p8 7р 6р» + 5рб + 4р« + + 3p3-l-2p2-fp+0,5 = 90114,5 («35 с).

Максимальную степень многочлена можно увеличить на единицу, пронормировав многочлен - разделив его коэффициенты иа коэффициент Оп-

Программа 5. Вычисление нормированного {ап=1) многочлена А(р) степени «<13 («<14 для ЯМК52) вещественного аргумента р=а

t КИПД + ИПД 1 - ПД X КИПД + ИПД х=0 04 С/П

Инструкция. {ао = РО, ai = Pl, .... o„ i = P{«-I)) «-1=РД, а = = РХ В/О С/П РХ=/1{а); «3{«-1)с. Для ЯМК52 заменить обращения в программе к регистру Д обращениями к регистру Е.

Пример. А (2) = р"+12р"-+-11р"-+-10р" + 9р + 8р8 +7р + 6р» + 5р» +

-f4p«-+-3p3+2p+p + 0,5 = 98306,5 («35 с).

Максимальную степень многочлена можно повысить при ао = ап = 1, используя освободившиеся регистры для хранения других коэффициентов. Для этого коэффициенты исходного многочлена делят иа коэффициент Оо, получая многочлен с нормированным коэффициентом Оо=1, а затем переходят к норми-

рованной частоте р = р f а„1ао. получая а--1. Однако можно избежать



(0) (1) (2) (3) (4) (5) ( 6 ) (7) (8) (9) (10) (11) (12) (13) (14) (15) (16) (17) (18) (19) (20) (21) (22) (23) (24) (25) (26) (27) (28) (29) (30) (31) (32) (33) (34) (35) (36) (37) (38) (39) (40) (41) (42) (43) (44) (45) (46) (47) (48) (49) (50) (51) (52) (53) (54) (55) (56) (57) (58) (59) (60) (61) (62) (63) (64) (65) (66) (67) (68) (69) (70) (71) (72) (73) (74) (75) (76) (77) (78) (79) (80) (81) (82) (83) (84) (85) (86) (87) (88) (89) (90) (91) (92) (93) (94) (95) (96) (97) (98) (99) (100)