Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Бахты.doc
Скачиваний:
82
Добавлен:
12.02.2015
Размер:
654.34 Кб
Скачать

Способы передачи параметров

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

2) для результата - память для переменной выделяется, но туда ничего не записывается, по окнончанию работы подпрограммы происходит запись из нее в фактический параметр (используется для передачи выходных параметров, т.е. результата).

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

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

5) Текст, макроподстановка везде, где встречается обработка формального параметра происходит автоматическая замена формального параметра на текст фактического. При этом в зависимости от текста фактического параметра не всегда может произойти корректная работа компилятора. Пример: пусть x заменяется на a+b, тогда выражение вида x:=x+1 заменяется на выражение a+b:=a+b+1, а это ошибка, т.к. не понятно значение какой переменной необходимо менять.

В Паскале реализованы не все из указанных выше способов передачи параметров. В этом языке программирования способ передачи определяется по описанию заголовка подпрограммы. Если перед именем переменной следует зарезервированное слово var, то считается, что переменная передается по ссылке, а если этого слова нет - то по значению.

Пример:

Procedure MyProcedure (var a:real; b:real);

Переменная a передается по ссылке, а b по значению.

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

Структурное программирование, управляющие конструкции, пошаговая детализация.

На протяжении 60-х годов попытки создания многих больших программных систем наталкивались на ряд трудностей. Графики создания программного обеспечения обычно не выполнялись, а конечные продукты отличались ненадежностью. Люди начали понимать, что создание программного обеспечения более сложная задача, чем они представляли. Исследовательские работы 60-х годов привели к развитию структурного программирования – дисциплинированного подхода к написанию программ, отличающихся от неструктурированных программ ясностью, простотой тестирования и отладки и легкостью модификации.

Одним из наиболее ощутимых результатов этих исследований была разработка в 1971 году Никлаусом Виртом языка программирования Pascal. Pascal, названный в честь математика и философа семнадцатого столетия Блеза Паскаля, был разработан для изучения структурного программирования в академической среде и вскоре стал наиболее предпочитаемым языком программирования во многих университетах.

Приступим к описанию структурной методологии.

Определение:Блок-схема — это графическое представление алгоритма или фрагмента алгоритма. Блок-схема рисуется с использованием специальных символов, таких, как прямоугольники, ромбы, овалы, и малые окружности; эти символы соединяются стрелками, называемыми линиями связи. Например, функциональные узлы, как фрагменты блок схем:

  • Узел слияния - 2 входа 1 выход, операции над данными не осуществляются

Простой предикат – вычисляет логическое выражение и в соответствии с получившимся результатом определяет направление. Вычисление без побочных эффектов.

Функция- преобразование входных данных.

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

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

Существует 15 элементарных программ (≤ 4 узлов)

7из них имеют функциональные узлы:

1. функция. 2.Следование

3. Если-то-иначе. 4. Если-то.

5. Цикл с предусловием. 6. Цикл с постусловием.

7: Цикл с внутренним условием.

С помощью указанных управляющих конструкций можно добиться сколь угодно высокой сложности.

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

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

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

Теорема о структурировании : любая простая программа может быть преобразована в функционально ей эквивалентную программу, построенную на основе 3 следующих структур:

  1. Следования.

  2. Если-то-иначе.

  3. Цикл с предусловием.

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

К неструктурным операторам в языке Pascal относятся:

  1. Goto.

  2. break.

  3. continue.

  4. exit.

  5. halt.

Пошаговая детализация и нисходящее проектирование.

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

Вывод: пошаговая реализация это тактика разработки программы, а нисходящее проектирование это стратегия программирования.

Цели структурного программирования:

  1. Обеспечить дисциплину программирования.

  2. Улучшить читабельность программы.

  3. Повысить эффективность программы.

  4. Повысить надежность программы.