1. Приведите пример стека.
2. Объясните, что означает понятие «максимальная глубина стека».
3. Какие основные действия проводятся со стеком?
4. Расскажите, в каком случае нельзя произвести действие "Взять элемент из стека".
1.5 СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ.
При рассмотрении процесса составления структурированных программ мы будем придерживаться понятия «умозрительная» машина, предложенного Э. Дейкстрой. Допустим, нам необходимо выполнить некоторые действия, например: нам необходимо, чтобы машина смогла приготовить чай. Если она достаточно умна, то после команды «Приготовь чай», сама выполнит необходимые действия. Но пока такой машины нет в нашем распоряжении, мы вынуждены давать более подробные инструкции:
Шаг 1.
1. Подготовить материалы для приготовления чая.
2. Приготовить чай.
3. Закончить работу.
Шаг 2.
1. Подготовить материалы для приготовления чая.
1.1. Определить, есть ли емкость для воды.
1.2. Определить, есть ли вода.
1.3. Определить наличие заварки.
1.4. Определить, есть ли чем нагреть воду.
2. Приготовить чай.
2.1. Набрать в емкость воду.
2.2. Довести воду до кипения.
2.3. Заварить чай.
3. Закончить работу.
............................
Каждая строка инструкции является предписанием для своей «умозрительной» машины более низкого уровня. Для каждой из этих машин мы проводим детализацию, то есть, подключаем к работе «умозрительные» машины все более «низкого» уровня.
Обратите внимание, что при детализации необходимых действий мы не стремимся сразу оговаривать, как делать, а говорим о том, что необходимо делать. При проведении детализации существует следующее правило: Не принимайте ответственных решений. То есть, старайтесь не взваливать всю работу на «умозрительную» машину верхнего уровня - передавайте большую часть работы на «умозрительную» машину более низкого уровня. Пока неизвестно, какая емкость для воды у нас имеется на втором шаге, мы не говорим, что именно берем. Для сравнения - Случай 2 - Что бы мы делали, если бы у нас не было чайника?
Детализация (подключение «умозрительных» машин более низкого уровня) проводится до тех пор, пока реальная машина не сможет выполнить указание. Более того, если следовать этому подходу в случае написания программы, в конечном итоге Вы получите готовый текст программы.
В чем преимущества структурного подхода к программированию?
1. Можно ожидать, что логика работы программы будет более понятна программирующему.
2. Если Вы пока не знаете, как реализовать какой-либо модуль, всегда можно поставить «умозрительную» машину, которая ничего не делает.
3. Возможность «работать» (программировать) с отдельным модулем.
4. Независимость «умозрительных» машин одного уровня позволяет независимо модифицировать блоки программы без затрагивания других блоков. Как отмечал Э. Дейкстра: “…модификации программ могут быть теперь представлены заменой одной (умозрительной) машины другой подходящей машиной”.
5. Проведение отладки структурированных программ намного легче, чем не структурированных.
6. Можно ожидать, что это оградит нас от ненужной работы. Если нет заварки, наша программа просто завершит работу.
7. “Структурный подход” позволяет проводить целенаправленную подготовку к участию в олимпиадах по информатике. Если модули независимы друг от друга, то можно заранее подготовить машины нижнего уровня, например, блок сортировки, блок поиска в глубину, поиска в ширину, блок обработки входной информации. Отработав их в подготовительный период, на олимпиаде, исходя из задачи, использовать в том или ином сочетании.
Небольшое замечание. Часто, сравнивая языки программирования, говорят, что Паскаль - структурированный язык. А, например, Бейсик - нет. Что один язык лучше другого. Хочется напомнить таким спорщикам следующее: каждый язык программирования наиболее удобен для определенного круга задач. Например, для задач, связанных с искусственным интеллектом, возможно, более подходит язык Пролог, для задач, связанных с вычислениями, лучше Фортрана вряд ли что можно предложить и т.д. Помните! На “структурированном” Паскале можно написать "неструктурированные" программы. А на “неструктурированном” Бейсике - хорошо "структурированную" программу.
Иногда, сравнивая структурное программирование с объектно-ориентированным и визуальным программированием, представляют последние как более высокую ступень программирования. Это не так. Объектно-ориентированное программирование, как и визуальное программирование, это лишь способы программирования, тогда как структурное программирование - это методология и идеология программирования.
Достарыңызбен бөлісу: |