Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Рекомендации по стилю программирования




Циклы

Различается и время выполнения циклов. Время выполнения цикла с параметром и цикла с постусловием при всех прочих равных условиях совпадает, цикл с предусловием выполняется несколько дольше (примерно на 20-30%).

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

For i:=1 to 100 000 do

For j:=1 to 1 000 do a:=1;

выполняется примерно на 10% дольше, чем цикл

For i:=1 to 1 000 do

For j:=1 to 100 000 do a:=1;

На первый взгляд, и в первом, и во втором случае 10 000 000 раз выполняется оператор присваивания, и затраты времени на это должны быть одинаковы в обоих случаях. Но это не так. Объясняется это тем, что инициализация цикла, т.е. обработка процессором его заголовка с целью определения начального и конечного значения параметра, а также шага приращения счетчика требует времени. В первом случае 1 раз инициализируется внешний цикл и 100 000 раз – внутренний, т.е. всего выполняется 100 001 инициализаций. Во втором случае, как нетрудно подсчитать, таких инициализаций оказывается лишь 1001.

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

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

Summa:= 0;

For i:= 1 to 1000 do summa:= summa +а * x[i];

Очевидно, что другая форма записи этого цикла оказывается более экономной:

 

Summa:= 0;

For i:= 1 to 1000 do summa:= summa + x[i];

Summa:= a * summa;

т. к. она содержит всего одно умножение при том же числе сложений, против 1000 умножений в первом случае.

инвариантные фрагменты кода

Эта тема тесно связана с проблемой оптимального программирования циклов. Внутри цикла могут встречаться выражения, фрагменты которых никак не зависят от управляющей переменной цикла. Их называют инвариантными фрагментами кода. Современные компиляторы часто определяют наличие таких фрагментов и выполняют автоматическую оптимизацию. Такое возможно не всегда, и иногда производительность программы зависит целиком от того, как запрограммирован цикл. Фрагмент программы иллюстрирует данный случай:


For i:= 1 to n do

begin

for k:=1 to p do

for m:= 1 to q do

begin

a[k, m]:= sqrt (x * k* m –1) + abs (u * i – x * m + k);

b[k, m]:= sin (x * k* i) + abs (u * i * m + k);

end;

am:= 0;

bm:= 0;

for k:= 1 to h do

for m:= 1 to q do

begin

am:= am + a[k, m] / c[k];

bm:=bm + b[k, m] / c[k];

end;

end.

 

Здесь инвариантными фрагментами кода являются слагаемое sin (x * k* i) в первом цикле по переменной m и операция деления на элемент массива / c[k] во втором цикле по m. Значение синуса и элемента массива не изменяются в цикле по переменной m, следовательно, в первом случае можно вычислить значение синуса и присвоить его вспомогательной переменной, которая будет использоваться в выражении, находящемся внутри цикла. Во втором случае можно выполнить деление после завершения цикла по m. Таким образом можно существенно сократить количество трудоемких арифметических операций.

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

Накопленный опыт программирования привел к формированию следующих рекомендаций по составлению наглядных и легко читаемых программ.

1. Стандартизация стиля программирования заключается в том, что необходимо всегда придерживаться одного стиля программирования, записи программы.

2. С целью рационального размещения текста не следует операторы программы писать сплошным текстом.

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

Следует избегать длинных строк.

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

4. Имена для объектов надо выбирать так, чтобы они наилучшим образом соответствовали этим объектам, отражали их назначение.

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

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

 




Поделиться с друзьями:


Дата добавления: 2014-01-20; Просмотров: 348; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.