Практика программирования (Бейсик, Си, Паскаль)



         

Что такое "хорошая" программа? - часть 2


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

Во-вторых, программа должна быть, по возможности, эффективной и не тратить на решение задачи лишнее время и ресурсы компьютера. Это особенно важно, когда предполагается многократное использование программы или ее включение в состав более сложного программного комплекса. Конечно, эффективность программы в первую очередь зависит от выбранного алгоритма. Но и реализация последнего может внести свою лепту. Профамма может быть идеальной с точки зрения использования конструкций алгоритмического языка, но далеко не самой эффективной из-за неудачного алгоритма. Представим себе, что потребовалось сложить натуральные числа от kl до R2. Такая процедура реализуется простым циклом, например, на Паскале:

s:=0;

for j:=k1 to k2 do s:=s+j;

Однако сумму членов арифметической прогрессии можно найти вспомнив или элементарно получив нужную формулу. Выпишем друг под другом ее элементы в прямом и обратном порядках:

kl kl+1 kl+2 ........ kl+(k2-kl)

kl+(k2-kl) k2-l k2-2 ........ kl

Сумма каждой пары равна (kl+k2), и таких пар (k2—kl+1). Поэтому искомая сумма может быть найдена по формуле

s:=(kl+k2)*(k2-kl+l)/2;

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

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




Содержание  Назад  Вперед