Примеры спецификаций (например, для метода сортировки массива в возрастающем порядке

Понятие алгоритма и его свойства

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

свойства: дискретностью, массовостью, определенностью, результативностью, формальностью.

Свойства Алгоритмов:

n Конечность

n Определенность

n Наличие входных данных

n Наличие выходных данных

n Эффективность

2. Понятие «язык программирования».

Минимальная последовательность лексем, способная вызвать действия исполнителя, называется конструкцией языка

Среди конструкций языка выделяют операторы,

например:
y=sin(x) – оператор

Реализация языка – комплект программ, с помощью которого обеспечиваются:

n Поддержка операций с исходной программой (ввод, редактирование, сохранение текста, анализ синтаксических ошибок)

n Подготовка синтаксически правильной программы к исполнению на конкретном исполнителе

Система программированиявключает:

n Файловую систему

n Редактор для ввода текстов

n Транслятор для преобразования текстов программ к виду, в котором она может исполняться, или указания ошибок, если преобразование не удается

n Библиотеки периода трансляции

n Библиотеки периода исполнения

n Отладчик

n Пользовательские библиотеки

n Средства поддержки разработки программ

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

n Способов представления данных

n Способов вызова процедур и т.д.

3. Что включает в себя постановка задачи?

n Постановка задачи должна быть точной и подробной.

Вопросы на которые необходимо ответить:

n Каковы входные данные

n Какие данные считаются корректными, какие – нет.

n Для кого предназначено программное обеспечение?

n Какой пользовательский интерфейс следует применить?

n Какие сообщения об ошибках следует предусмотреть?

n Какие ограничения накладываются на программу?

n Существуют ли особые ситуации?

n В каком виде следует представить выходные данные?

n Какая документация должна сопровождать программу?

Этап 2. Проектирование:

n При разработке программ следует использовать модульный подход

4. Что такое спецификация программы??

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

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

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

При разработке модуля необходимо ответить на вопросы:

n какие данные доступны каждому модулю при исполнении

n в каких условиях можно выполнять данный модуль

n какие действия выполняет модуль

n как изменяются данные после завершения его работы

Спецификация модуля:

n какие данные доступны каждому модулю при исполнении

n в каких условиях можно выполнять данный модуль

n какие действия выполняет модуль

n как изменяются данные после завершения его работы

n спецификация модуля не должна описывать метод решения задачи!!!

Спецификация включает в себя:

предусловия и

постусловия функции

Примеры спецификаций (например, для метода сортировки массива в возрастающем порядке

//сортировка массива

//предусловие: переменная А является массивом

//состоящим из N целых чисел, N>0

// постусловие: целые числа в массиве A упорядочены.

Достаточно ли этих пред- и постусловий?

Очевидно, что нет:

n Во-первых, не указано в каком порядке необходимо упорядочить числа

n Во-вторых, не указано, насколько большим может быть число элементов в массиве N.

Пересмотренная спецификация: Sort(A,N)

//сортировка массива в возрастающем порядке

//предусловие: переменная А является массивом

//состоящим из N целых чисел,1<=N<=MAX_N

// где MAX_N – глобальная константа

//задающая максимальный размер массива А

// постусловие: целые числа в массиве A упорядочены

// по возрастанию: A[1]<=A[2]<= …<= A[N]

// число N не изменилось

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

n В постусловии описываются результаты работы функции (либо возвращаемое функцией значение) и все последствия ее работы.

Понятие Инварианта. Инвариант цикла.

Инвариант – это условие, которое должно всегда быть истинным в некоторой точке программы

Инвариант цикла – это условие, которое должно выполняться до и после каждого выполнения цикла.

Использование инварианта цикла для решения следующей задачи: вычислить сумму первых n элементов массива А:

//вычисляет сумму элементов A[0],A[1], … A[n-1]

// для любого n>0

int j=0; sum=0;

while (j<n)

{

sum+=A[j];

++j;

} // конец оператора while

Инвариант данного цикла: значение переменной sum равно сумме элементов A[0]+A[1]+ … +A[j-1], j – значение параметра цикла

Инвариант данного цикла:

//вычисляет сумму элементов

//A[0],A[1], … A[n-1] для любого n>0

int j=0, sum=0;

***

while (j<n)

{ ***

sum+=A[j];

++j;

***

} // конец оператора while

***

n Инвариант должен быть истинным изначально

n Выполнение цикла должно сохранять инвариант

n Из выполнения инварианта должна следовать правильность алгоритма

n Цикл должен завершиться

7. Что такое защитное программирование? Перечислите пути реализации защитного программирования.

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

Защитное программирование реализуется двумя путями:

n во-первых, необходимо придерживаться определенного стиля программирования,

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

Простота реализации

n При разработке проекта программы из нескольких равнозначных решений следует выбирать наиболее простые (но не примитивные!).

n Приемами, усложняющими алгоритм, следует пользоваться с максимальной осторожностью.

Пример неоправданной сложности:

for (i=0; i<n; i++)

for (j=0;j<n; j++)

v[i][j]=(i/j)*(j/i);

Правильный вариант:

for (i=0; i<n; i++)

{

for (j=0;j<n; j++) v[i][j]=0;

v[i][i]=1;

};

8. В чем заключаются принципы защитного программирования?

n Простота реализации кодов повышает надежность программы.

n Общее недоверие: как к входным данным, так и к результатам.

n Максимально раннее (в смысле использования программы) обнаружение и локализация ошибок.

Наши рекомендации