Структурное программирование

Автор работы: Пользователь скрыл имя, 07 Июня 2014 в 16:29, контрольная работа

Краткое описание

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

Содержание

1 ВВЕДЕНИЕ 3
2 СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ 4
2.1 Сущность структурного программирования 4
2.2 Подпрограммы 5
2.3 Нисходящее проектирование 6
2.4 Процедуры и функции 8
2.5 Параметры подпрограмм 8
2.6 Управление последовательностью вызова подпрограмм 8
2.7 Структура подпрограммы 9
2.8 Как функция возвращает значение 9
2.9 Формальные и фактические параметры 11
2.10 Развитие структурного программирования 11
2.11 Недостатки структурного программирования 12
3 ЗАКЛЮЧЕНИЕ 14
4 СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУ

Вложенные файлы: 1 файл

Информатика.Контрольная.doc

— 85.00 Кб (Скачать файл)

СОДЕРЖАНИЕ

 

 

1 ВВЕДЕНИЕ          3

2 СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ     4

2.1 Сущность структурного программирования    4

2.2 Подпрограммы         5

2.3 Нисходящее проектирование       6

2.4 Процедуры и функции        8

2.5 Параметры подпрограмм        8

2.6 Управление последовательностью вызова подпрограмм  8

2.7 Структура подпрограммы        9

2.8 Как функция возвращает значение      9

2.9 Формальные и фактические  параметры            11

2.10 Развитие структурного программирования           11

2.11 Недостатки структурного программирования           12

3 ЗАКЛЮЧЕНИЕ                14

4 СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ           15

 

 

 

 

 

 

 

 

 

 

 

 

ВВЕДЕНИЕ

 

 

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

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

 

 

 

 

 

 

 

 

 

 

 

2 СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ

 

 

2.1 Сущность структурного программирования

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

Структурное программирование — подход к созданию программ, который выражает идею разделения таких частей программы, как определение подпрограмм и функций и их неоднократное последующее применение. Так, обеспечивается определенный уровень автономии подпрограмм и свойств, позволяющий многократно использовать их в различного рода программах. Структурное программирование получило развитие в 1960—1970-х гг. и возникло из потребности в качественном стиле программирования. Существовавшие в то время языки программирования этой потребности не удовлетворяли. В ранних не поддерживающих структурное программирование проявлениях таких распространенных языков, как фортран и бейсик, только самодисциплина программиста предотвращала «размытие» взаимосвязанных составных программы по сотням и тысячам строк ее текста. Но часто одной дисциплины оказывалось вовсе не достаточно. Очень трудно понимать программу, когда ее структура зашифрована или скрыта. Простейшее усовершенствование применяемых языков программирования путем добавления в них концепции подпрограмм совершенно не приносило желаемого результата. Например, разработанным аналогичным образом ранним версиям бейсика все же сильно недоставало принятой поддержки структурного программирования. Его не могли поддерживать даже полунезависимые подпрограммы (т. е. подпрограммы с принадлежащими им константами и переменными), и все переменные в них были глобальными. Этот недостаток подпрограмм бейсика создавал при переводе программ с бейсик на другие языки. Кроме этого, применение глобальных переменных было нежелательным из-за существования побочных эффектов, которые могли возникнуть из-за того, что различные операторы присваивания использовали одни и те же переменные для разных целей. Становилась очевидной необходимость создания языков абсолютно нового типа — языков структурного программирования, в которых по логике связанные предложения и действия объединяются в определенные группы.

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

2.2 Подпрограммы

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

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

2.3 Нисходящее проектирование

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

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

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

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

Рассмотрим пример, демонстрирующий методику нисходящего проектирования. Имеется массив Осеnki, состоящий из N (М > 2) судейских оценок (каждая оценки положительна). В некоторых видах спорта принято отбрасывать самую большую и самую маленькую оценки, чтобы избежать влияния необъективного судейства, и в зачет спортсмену идет среднее арифметическое из оставшихся оценок. Решим эту задачу, постепенно детализируя алгоритм (без привязки к конкретному языку программирования).

1) Процесс решения наиболее просто описывается подпрограммами:

Ввести_оценки_в_массив;

Удалить_самую_большую_оценку;

Удалить_самую_маленькую_оценку;

Рассчитать_среднее_арифметическое_оставшихся_оценок;

Вывести_результаты;

Теперь можно приступить к детализации каждой их этих подпрограмм.

2) Удалить_самую_большую_оценку;

Как удалить самую большую оценку из статического массива? Вместо нее можно просто записать значение 0, а при подсчете среднего арифметического нулевые значения не учитывать.

I  = Номер_самого_большого_элемента_в_массиве; Осеnki [   I   ]   =0;   

3.  Удалить_самую_мапенькую_оценку;

I = Номер_самого_маленького_элемента_в_массиве;

Осеnki (   I   )   = 0;

При реализации подпрограммы: номер_самого_маленького_элемента_в

_массиве – надо учесть, что  искать придётся самое маленькое  из положительных значений( больших  нуля ).

4) Рассчитать_среднее_арифметическое_оставшихся_оценок;

Здесь потребуется оператор цикла, вычисляющий сумму всех элементов массива Осеnki.

SUM = о

FОR  I  =   1   ТО N

SUM = SUM + Осеnki (   I   )

NЕХТ

SUM = SUM / (N - 2)

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

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

2.4 Процедуры и функции

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

В Си++ понятия «процедура» нет — там имеются только функции, а если никакого значения функция не вычисляет, то считается, что она возвращает значение типа «никакое» (vоid).

2.5 Параметры подпрограмм

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

2.6 Управление последовательностью  вызова подпрограмм Подпрограммы вызываются, как правило, путем простой записи их

названия с нужными параметрами. В Бейсике есть оператор САLL для явного указания того, что происходит вызов подпрограммы.  

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

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

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

2.7 Структура подпрограммы

Подпрограмма состоит из нескольких частей: заголовка с параметрами, тела подпрограммы (операторов, которые будут выполняться при ее вызове) и завершения подпрограммы . ( см. далее Таблица 1 и Таблица 2)

Локальные переменные, объявленные внутри подпрограммы, имеют областью действия только ее тело.

2.8 Как функция возвращает  значение

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

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

Бейсик:

FUNCTION SQR%    (X  АS INТЕGЕR)

Таблица 1 Функции

 

Бейсик

Паскаль

Си++

Заголовок функ-ции

FUNCTION имя (список_параметров)

Тип возвращаемого значения определяется специальным симво-лом после имени функции

Function имя (список_параметров):

 тип_функции;

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

Тело

Последовательность операторов

Begin

последовательность операторов

end;

{

последовательность операторов

};

Завершение

END FUNCTION

нет

нет                                 


 

 

Таблица 2 Процедуры

 

Бейсик

Паскаль

Си++

Заголовок процедуры

SUB имя (список_параметров)

ргосеdure имя (список_параметров);

УОЙ ИМЯ(СПИСОК_

параметров)

Тело

Последовательность операторов

Begin

последовательность операторов end;

{

последовательность операторов

};

Завершение

END SUB

нет

нет

Информация о работе Структурное программирование