nextupprevious

Next:3.7 Выбор и обоснование набора тестов
Up:3 Общие рекомендации по выполнению заданий
Previous:3.5 Анализ алгоритма и его сложности


3.6 Кодирование алгоритма (программирование)

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

Начнем с рекомендаций по улучшению наглядности программного текста. Рекомендуется с помощью сдвига начала строк выделить содержательно разные части и части, относящиеся к синтаксически разным единицам программного текста. Это дает возможность дополнить структурированность управления в программе структурированностью самого ее текста, удобно показать вложенность одних конструкций в другие. При этом следует записывать repeat под соответствующим until, а else под соответствующим if и т.д., как это сделано в следующем фрагменте программы:

repeat if A[NUMBER] <  A[NUMBER+1] then
                    T:=A[NUMBER];
                    A[NUMBER]:=A[NUMBER+1];
                    A[NUMBER+1]:=T
            else COUNT:=COUNT+1
            end;
            NUMBER:=NUMBER+1
until NUMBER=100

Этот прием позволяет облегчить не только чтение программы, но и поиск некоторых ошибок в ней, например, место нарушения баланса скобок begin--end.

Использование комментариев и содержательно осмысленных (мнемонических) имен -- также весьма простой и мощный прием в деле улучшения наглядности программы.

В связи с этим укажем на весьма распространенное для начинающих программистов явление -- это употребление только одно-двухбуквенных имен в своей программе. В результате такие интуитивно родственные имена, как, например, A, B, C, даются не объектам, имеющим родственный смысл, а, скажем, массиву, индексу элемента в этом массиве и процедуре. Это крайне затрудняет чтение и, следовательно, понимание программы. Что касается комментариев, то они должны кратко и точно пояснять смысл тех шагов алгоритма, к которым они относятся. Не следует делать их ни слишком частыми, ни слишком длинными.

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

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

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

    X:=(2*Y+A*B)*(A*B*C+2*Y)

лучше написать

    Y1:=2*2*Y; A1:=A*B; X:=(Y1+A1)*(A1*C+Y1).

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

    for I:=1 to 100 do A[I]:=A[I]*(B+C)+D*E end

лучше написать

    X:=B+C; Y:=D*E; for I:=1 to 100 do A[I]:=A[I]*X+Y end

Next:3.7 Выбор и обоснование набора тестов
Up:3 Общие рекомендации по выполнению заданий
Previous:3.5 Анализ алгоритма и его сложности


 © В.Н. Касьянов,Е.В. Касьянова, 2004