Автор: Пользователь скрыл имя, 16 Декабря 2011 в 18:56, курсовая работа
На самом деле изложение структурного стиля не может уместиться в рамки одной лекции. Но данный стиль программирования (вернее, его вариант, основанный на циклах и массивах, слегка пополненный единственно возможный во всех ныне предлагаемых учебных пособиях рекурсивными процедурами) описывается и навязывается как по программированию на традиционных языках. В связи с этим мы имеем право предположить, что обучающийся знаком с ним (более того, знаком только с ним, и мы надеемся, что он еще не потерял способность воспринимать другие стили). И хотя Вы считаете, что с этим вариантом структурного стиля уже освоились, особенности, опускаемые в традиционных изложениях, могут полностью изменить Ваш взгляд на данный стиль. Мы рассматриваем структурное программирование как равноправный член сообщества альтернативных ему друзей-соперников.
Общая характеристика структурного программирования
Сети данных
Выбор
О дисциплине циклического структурного программирования
Переходы и выдаваемые значения
Министерство образования и науки РФ
ГОУ ВПО Пермский государственный технический университет.
Кафедра
«Вычислительной математики и механики».
Курсовая работа по дисциплине «информатика».
Тема: «Структурное
программирование»
Пермь2011
На самом деле изложение структурного стиля не может уместиться в рамки одной лекции. Но данный стиль программирования (вернее, его вариант, основанный на циклах и массивах, слегка пополненный единственно возможный во всех ныне предлагаемых учебных пособиях рекурсивными процедурами) описывается и навязывается как по программированию на традиционных языках. В связи с этим мы имеем право предположить, что обучающийся знаком с ним (более того, знаком только с ним, и мы надеемся, что он еще не потерял способность воспринимать другие стили). И хотя Вы считаете, что с этим вариантом структурного стиля уже освоились, особенности, опускаемые в традиционных изложениях, могут полностью изменить Ваш взгляд на данный стиль. Мы рассматриваем структурное программирование как равноправный член сообщества альтернативных ему друзей-соперников.
Начнем с того, что обратимся к истории.
В качестве методики структурного программирования Э. Дейкстра предложил пользоваться лишь конструкциями цикла и условного оператора, изгоняя go to как концептуально противоречащее этому стилю.
Структурное программирование естественно возникает во многих классах задач, прежде всего в таких, где задача естественно расщепляется на подзадачи, а информация − на достаточно независимые структуры данных. Основной его инвариант действия и условия локальны. Необходимой чертой хорошей реализации структурного стиля программирования является соблюдение согласованности, а в идеале и единства, следующих компонентов программы:
Внимание! Этой альтернативы Вы не встретите в традиционных изложениях структурного программирования. Концептуальное противоречие между циклами и рекурсиями намного мягче, чем между операторами структурного программирования и структурными переходами, и оно отмечается лишь в виде изредка встречающихся прагматических указаний (благих пожеланий) не смешивать их произвольно.
Первым обратил внимание на необходимость введения призраков для логического и концептуального анализа программ Г.С. Цейтин в 1971 г. В Америке это "независимо" открыли заново в 1979 г., хотя упомянутая статья Цейтина была опубликована на английском языке в общедоступном издании. Даже название сущностям было дано то же самое. Этому важнейшему и традиционно игнорируемому понятию посвящена отдельная лекция в курсе "Основания программирования".
Подпорки противоположны призракам. На самом деле они являются той формой, в которой материя проникает в программу, и в этом качестве противостоят всей совокупности идеальных сущностей, порождающих структуру программы: как реальных, так и призрачных, и порою грубо ее искажают. Но без подпорок программа просто не будет работать или будет работать неэффективно.
Для структурного программирования весьма важно требование. Все структуры подчиняются структуре информационного пространства. Это общее требование конкретизируется в следующие.
Структурное программирование лучше всего описано теоретически, но частные описания не сведены в единую систему. Одни книги трактуют его с точки зрения программиста, другие − с точки зрения теоретика. Так что даже здесь единой системы взглядов еще нет, хотя, видимо, все основания для ее формирования уже имеются.
Рассмотрим
основную структуру данных, которая
появляется при структурном
z := second;
second := first;
first := z;
соответствует следующая сеть да нных :
Здесь first, second, z можно считать комментариями, а сами данные опущены, поскольку их конкретные значения не важны. На этом примере видно, что порой для лучшего структурирования сети целесообразно вводить дополнительные вершины, соответствующие сохраняющимся значениям. Ребро, ведущее из одной такой вершины в другую, обозначается при помощи стрелочки, похожей на равенство. Видно так же, как материя воздействует на идею, заставляя вводить дополнительные операторы и дополнительные значения. В данном случае переменная z и включающие ее операторы являются подпорками, и, если их исключить, сеть данных становится проще. Но в общераспространенных языках программирования нет кратных присваиваний типа first,second:=second,first;
Даже если бы они были, представьте себе, как неудобно станет читать длинное кратное присваивание и понимать, какое же выражение какой переменной присваивается! В случае программы вычисления факториала сеть потенциально бесконечна вниз, поскольку аргументом может быть любое число, но по структуре еще проще.
Перекрестных зависимостей между параметрами нет, следовательно, возможны две известные реализации факториала: циклическая и рекурсивная. Покажем их на разных языках, ибо все равно, на каком традиционном языке их писать.
function fact(n: integer): integer;
var j,res: integer;
begin
res:=1;
for j:=1 to n do res:=res*j;
result:=res;
end;
int fact(int n)
{if (n==0) return(1);
else return(n*fact(n-1));}
Схема построения циклической программы называется потоковой обработкой. Значения на следующей итерации цикла зависят от значений на предыдущей. Для чисел Фибоначчи (та же рис.1.2) структура уже несколько сложнее предыдущих, поскольку каждое следующее число Фибоначчи зависит от двух предыдущих, но метод потоковой обработки применим и здесь.