Информатика - Учебное пособие

О стиле программирования

 

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

Глубоко ошибочно мнение, что неважно, как написана программа, лишь бы она работала. Это особенно касается программ с большим жизненным циклом, которые используются и другими пользователями; последние должны иметь возможность вносить в программу изменения, исправлять выявляющиеся ошибки. Отсюда требования к программе в первую очередь касаются наглядности ее представления и удобства отладки. Можно предложить следующие рекомендации по выработке хорошего стиля программирования:

1) структурированная программа во всех случаях более понятна, чем неструктурное нагромождение  операторов;  в  первом  приближении  это  достигается  использованием структурно-ориентированных языков (Паскаль, Модула-2 и др.). Но у программиста имеются и дополнительные средства, владение которыми и создает стиль программирования:

- идентификаторы программы должны, по возможности, иметь смысловое значение;

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

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

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

2) элементы стиля, помогающие в отладке программы:

- не жалеть времени на разработку и изучение математической модели исходной задачи;

- помнить об отладке с самого начала создания программы. Для этого активно использовать отладочную  печать;  например,  в  местах  ветвления  выводить  данные,  определяющие  выбор ветви;

- во избежание ошибок следует явным образом присваивать начальные значения всем используемым в программе переменным;

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

- желательно предусмотреть в программе контрольную ее прогонку, при которой в качестве теста используется задача с заранее известным результатом;

- нужно испытывать свою программу в экстремальных ситуациях;

- при программировании арифметических и логических выражений не жалеть скобок;

- длинную формулу целесообразно разбивать на несколько частей и записывать несколькими операторами присваивания;

- перед программировании формулы следует попытаться ее сократить, но так, чтобы не скрылась смысловая сущность формулы, если таковая имеется;

- следует избегать употребления в одном выражении данных различных типов;

- для снижения погрешности результатов при выполнении вычислений с вещественными данными следует:

а) избегать вычитания близких по величине чисел;

б) избегать деления очень больших по модулю чисел на очень маленькие;

в) сложение и вычитание последовательностей чисел начинать с самых маленьких;

г) стремиться уменьшать число выполняемых операций.

 

Применим некоторые рекомендации по выработке хорошего стиля программирования на примере разработки алгоритма и программы поиска минимума функции в некотором интервале.

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

 

Ниже  приводится  алгоритм  поиска  минимума  функции  f(x),  в  структуру  которого включен контрольный пример - поиск минимума достаточно простой функции y = x2  , которая имеет минимум в точке x = 0.

 

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

 

поиск экстремума (минимума) функции

CONST c1=0.5; c2=0.25; VAR k:INTEGER;

a,b,a0,b0,Eps,EpsX,x0,xL,xR,yL,yR:REAL;

FUNCTION CONT(x:REAL):REAL; функция для контрольного просчета

BEGIN CONT:=x*x

END;

FUNCTION F(x:REAL):REAL;       исследуемая Функция

CONST b=2.0; c=1.0; BEGIN

F:=x*x+b*x+c

 

BEGIN

END;

WriteLn('Введите цифру для задания режима решения; Write('0 - контрольный просчет, 1 - ваша функция: ? '); ReadLn(k);

CASE k OF

0: BEGIN

 

 

END;

1: BEGIN

 

END

a0:=-1; b0:=2; Eps:=1e-5

 

Write('ввод границ интервала и точности: ');

ReadLn(a0,b0,Eps)

END; WriteLn;

EpsX:=c2*Eps; a:=a0; b:=b0; Repeat x0:=c1*(a+b);

WriteLn(a:8:5,b:8:5);   отладочная печать

ReadLn; xL:=x0-EpsX; xR:=x0+EpsX; CASE k OF

0: BEGIN yL:=CONT(xL); yR:=CONT(xR) END;

1: BEGIN yL:=F(xL); yR:=F(xR) END

END;

IF yL>=yR THEN a:=xL ELSE

 

x0:=c1*(a+b);

b:=xR UNTIL b-a<=Eps;

IF (x0-a0<Eps) OR (b0-x0<Eps) THEN

WriteLn('экстремума в указанном интервале нет. Повторите поиск.')

ELSE

 

 

THEN

WriteLn('точка экстремума: x =',x0:8:5,

' f(x) =',c1*(yL+yR):8:5); IF k=0

BEGIN

 

WriteLn;

WriteLn('для контрольного примера (функция

y =x*x) ');

 

 

END.

 

ReadLn

WriteLn('правильный ответ:  x = 0.00000,

f(x) = 0.00000') END;