в) Цикл с постусловием.
К этой группе также относят циклические действия, в которых нам заранее неизвестно количество повторений, но, в отличие от предыдущего цикла, где перед выполнением действия требуют проверки выполнения какого-либо условия, проверка на выполнение какого либо условия происходит только после выполнения действия.
Рис 1.9
Чтобы лучше уяснить принцип цикла с постусловием, представьте себе сито, в котором находятся хрупкие шарики, размер которых больше, чем размер ячеек в сите. Вы подбрасываете эти шарики и, в процессе соударений, их размер уменьшается. Это будет продолжаться до тех пор, пока размер шариков станет таким, что они проскочат сквозь ячейки сита. То есть выполнится условие - диаметр шариков равен размеру отверстия в сите.
Основное отличие цикла с предусловием от цикла с постусловием в том, что в первом виде цикла действие выполняется, когда УСЛОВИЕ=ИСТИНА. Во втором виде цикла - если УСЛОВИЕ=ИСТИНА - выполнение действий прекращается.
Дополнительно отметим, что цикл с фиксированным количеством действий является частным случаем цикла с предусловием. В самом деле, если предложили пробежать три круга по стадиону, а Вы уже пробежали три или более кругов, то вправе больше не бежать.
Задание
1. Приведите пример цикла с фиксированным количеством действий.
2. Приведите пример цикла с предусловием.
3. Приведите пример цикла с постусловием.
4. В чем основное отличие цикла с предусловием, от цикла с постусловием.
5. Какое минимальное количество может выполняться цикл с предусловием.
6. Какое минимальное количество может выполняться цикл с постусловием.
1.3. СТРУКТУРНЫЙ ПОДХОД К РЕШЕНИЮ ЗАДАЧ
Как видим, все обозримые действия можно описать набором всего трех основных операций.
Первоначально, когда начинало развиваться программирование, первым методом (методологией) создания (разработки и написания) программ был метод программирования «снизу вверх». Вначале разрабатывались отдельные модули, и затем из них строилась программа, как в детском конструкторе - из различных готовых блоков Вы бы строили дом. На первый взгляд это довольно просто, но здесь кроется ловушка: если вы не построили стен, то не сможете начать строить крышу и, если нет какого-либо, даже самого незначительного, модуля, то здание не будет полностью построено. В случае программирования это значит, что мы не сможем передать полный текст инструкций (программу) исполнителю, и задача (действие) выполнена не будет. К счастью, наше мышление устроено несколько по-другому. Когда мы хотим что-то сделать, то мы разбираем задачу на более мелкие подзадачи, те, в свою очередь, еще на более мелкие (более детализированные). Это продолжается до тех пор, пока наш процессор (исполнитель) не поймет инструкции. При этом, если мы не знаем, как решить какую-либо из подзадач в данный момент, то временно откладываем это "на потом". Данный подход - когда для решения некоторой задачи мы разбиваем ее на независимые подзадачи, и далее рассматриваем как реализуются (решаются) каждая из этих подзадач, называют структурным подходом
Рассмотрим, как с помощью этого подхода можно описать алгоритм задачи по приготовлению чая.
1-й этап. Постановка задачи.
Задача - "приготовить чай", то есть мы должны произвести действие.
2-й этап. Детализация задачи.
Для того, чтобы произвести любое действие согласно определению, которое мы дали понятию действия, надо начать его, делать его и закончить его.
|
Приготовить чай
|
|
|
|
|
|
|
Начать
|
|
Работать
|
|
Закончить
|
3-й этап. Детализация подзадач.
Рассмотрим действие "Начать". Для того, чтобы приготовить чай, нам необходимо выполнение нескольких условий. Это: наличие заварки, воды, емкости для воды и нагревателя. Если хотя бы одного компонента нет, то вряд ли мы сможем приготовить чай.
|
Начать
|
|
|
|
|
|
|
Проверить наличие компонент
|
|
|
|
|
Продолжить работу
|
|
Прейти на "закончить"
|
|
|
|
|
Определим емкость
|
|
|
Определим где вода
|
|
|
Определим вид нагревателя
|
|
|
Определим вид заварки
|
|
|
При продолжении работы мы определяем:
Какая емкость для воды у нас в наличии и выбираем ее. Она может быть разных видов.
|
|
Определим емкость
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Обычный Чайник
|
|
Ведро
|
|
Котелок
|
|
Электрический чайник
|
|
|
|
Стакан
|
Определим, где будем брать воду.
|
|
Определим где вода
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Озеро
|
|
Колодец
|
|
Водопроводный кран
|
|
Ведро
|
|
|
|
река
|
3. Определяем, чем будем нагревать.
|
|
Определим вид нагревателя
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Костер
|
|
Газовая плита
|
|
Электрическая плита
|
|
Кипятильник
|
|
|
|
другие
|
4. Определим вид заварки.
|
|
Определим вид заварки
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Заварка в пакетиках
|
|
Заварка россыпная
|
|
Заварка жидкая
|
|
Травяной сбор
|
|
|
|
другая
|
Рассмотрим действие "Работать". Действие "Работать" можно разделить на три основных поддействия:
|
Работать
|
|
|
|
|
|
|
Набрать в емкость воду
|
|
Вскипятить воду
|
|
Заварить чай
|
Действие Набор в емкость воды пока рассматривать не будем. Это зависит от того, какая емкость у нас будет, и где мы будем брать воду. Рассмотрим действие "Вскипятить воду". Что значит "вскипятить воду"? Это значит, что воду в емкости надо нагревать, пока она (вода) не закипит.
Вскипятить воду
|
|
|
Т
Нагревать
|
Используя приемы, описанные выше, можно расписать действие "Заварить чай". Более того, каждое поддействие может быть разобрано с применением этого подхода. Вы знаете, что каждое действие можно разложить на более частные поддействия, а те, в свою очередь, также разлагаются на более частные поддействия и так далее. Получается, что любую задачу можно детализировать до бесконечности, то есть нельзя написать полную инструкцию?! Совершенно верно.
Что же делать? Вспомните определение, которое мы дали алгоритму. Одной из характеристик алгоритма было то, что это система понятных инструкций. Таким образом, как только мы думаем, что исполнитель (процессор) сможет выполнить действие, прочитав нашу инструкцию, в этот момент можно закончить детализацию.
Задание
Опишите словесно алгоритм выполнения домашнего задания.
Опишите словесно алгоритм приготовления вашего любимого блюда.
Вам поручили выучить стихотворение. Словесно опишите алгоритм.
ё1.4. ОРГАНИЗАЦИЯ ХРАНЕНИЯ И ОБРАБОТКИ ДАННЫХ
1.4.1 Записи и списки
Компьютерные системы включают в себя 4 основных компонента:
1. Человек, который ставит задачу и получает результат.
2. Аппаратное обеспечение.
3. Данные, подлежащие обработке.
4. Программное обеспечение.
Изучение человека - область биологии, анатомии, социологии. Аппаратное обеспечение Вы изучали на уроках по курсу "информатика". Как создается программное обеспечение, мы узнаем при изучении языка программирования Pascal. Сейчас рассмотрим вопрос, как представляются данные в компьютере.
Рассмотрим небольшой пример: Ваш товарищ попросил Вас купить в школьной столовой стакан сока. Вы запомнили это, то есть сделали запись в своей памяти. Все данные в компьютере хранятся как записи.
Запись - совокупность логически взаимосвязанных данных, характеризующих тот или иной объект или явление. При обращении к данным запись рассматривается как элементарный (неделимый) объект. Иногда запись называют элементом.
Если Ваш друг попросил купить для Вас помимо сока еще и пирожок, то, запомнив это, Вы создали список, состоящий из двух записей (элементов). Практически каждый день Вы выполняете домашние задания. Задания по предметам, записанные в дневнике, это тоже список, состоящий из отдельных записей. Каждая запись - это домашнее задание по определенному предмету. Итак, если имеется несколько записей, объединенных вместе, то мы называем это списком.
Список – организация хранения упорядоченной совокупности данных, характеризующих однородные объекты, отличающиеся значениями своих признаков. ЭВМ позволяет обрабатывать данные этой совокупности и изменять ее состав и упорядоченность.
Список можно подразделять различными способами в зависимости от тех или иных особенностей организации, хранения и способа обработки записей, находящихся в списке.
Линейный список – список, состоящий из записей, которые характеризуются своим месторасположением в списке. Месторасположение записи определяется, как правило, от начала линейного списка. Обычно для линейного списка разрешается добавлять запись (элемент) между любыми двумя другими и удалять любую запись (элемент).
Односвязный список – список, в котором запись (элемент), помимо своего значения, имеет ссылку на последующую запись (элемент). Например: Предположим, что Дарибай знает только телефон Алдияра. Алдияр знает только телефон Татьяны. Татьяна знает только телефон Аскара. Аскар знает только телефон Ольги. Ольга знает только телефон Анастасии. Если Вы дадите какую-либо информацию Дарибаю, то ее смогут получить все люди по цепочке. Если информацию получил Аскар, то ее смогут получить Ольга и Анастасия. Татьяна, Алдияр и Дарибай информацию получить не смогут. Движение возможно только от начала цепочки к концу. В этом списке записью является Имя человека, а номер телефона - ссылка на следующую запись. У последней записи нет ссылок на следующую запись, так как она и есть последняя. Но, чтобы не нарушалась структура списка, обычно последняя запись ссылается на так называемую нулевую (пустую) запись. Ее принято обозначать именем nil. Посмотрите, как это выглядит графически:
Дарибай
|
|
|
Алдияр
|
|
|
Татьяна
|
|
|
Аскар
|
|
|
Ольга
|
|
|
Анастасия
|
|
|
|
|
|
|
|
|
|
|
Тел. А
|
|
|
Тел. Т
|
|
|
Тел. А
|
|
|
Тел. О
|
|
|
Тел. А
|
|
|
Nil
|
Рис.1.10
Добавление записи (элемента) в односвязный список. Предположим, что нам надо добавить в односвязный список еще одну запись с именем Сергей. Если добавление записи происходит в конец списка, то в место ссылки на пустой элемент у записи Анастасия надо записать телефон Сергея. Для добавления записи в начало списка надо к записи Сергей добавить ссылку (номер телефона) на запись Дарибай. Если мы хотим поместить запись в любом другом месте списка, например, между записями Аскар и Ольга, то у записи Аскар ссылка на запись Ольга перемещается в запись Сергей, а к записи Аскар добавляется ссылка (номер телефона) на запись Сергей.
Дарибай
|
|
|
Алдияр
|
|
|
Татьяна
|
|
|
Аскар
|
|
|
Ольга
|
|
|
Анастасия
|
|
|
|
|
|
|
|
|
|
|
Тел. А
|
|
|
Тел. Т
|
|
|
Тел. А
|
|
|
Тел. С
|
|
|
Тел. А
|
|
|
Nil
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Сергей
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Тел. О
|
|
|
|
|
|
|
Рис.1.11
Удаление элемента из односвязного списка. Допустим, нам надо удалить запись из односвязного списка, например, запись Сергей. Для этого у предыдущей записи в ссылку (номер телефона) вместо телефона Сергея вновь написать телефон Ольги.
Дарибай
|
|
|
Алдияр
|
|
|
Татьяна
|
|
|
Аскар
|
|
|
|
Ольга
|
|
|
Анастасия
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Тел. А
|
|
|
Тел. Т
|
|
|
Тел. А
|
|
|
Тел. О
|
|
|
|
Тел. А
|
|
|
Nil
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Сергей
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Тел. О
|
|
|
|
|
|
|
Рис.1.12
Двухсвязный список – список, в котором запись (элемент) имеет ссылку как на последующую запись (элемент), так и на предыдущую. В нашем примере информация могла распространяться только в одном направлении - от Дарибая к Анастасии. Но, если Алдияр знает телефон Татьяны и Дарибая, Татьяна – Алдияра и Аскара, Аскар – Татьяны и Ольги, Ольга – Аскара и Анастасии, а Анастасия знает телефон Ольги, то информация может передаваться в двух направлениях. То есть в двухсвязном списке движение возможно в двух направлениях: от начала к концу и от конца к началу.
Nil
|
|
|
Тел. Д
|
|
|
Тел. А
|
|
|
Тел. Т
|
|
|
Тел. А
|
|
|
Тел. О
|
Дарибай
|
|
|
Алдияр
|
|
|
Татьяна
|
|
|
Аскар
|
|
|
Ольга
|
|
|
Анастасия
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Тел. А
|
|
|
Тел. Т
|
|
|
Тел. А
|
|
|
Тел. О
|
|
|
Тел. А
|
|
|
Nil
|
Рис.1.13
Если линейный список имеет дополнительную связь между последней записью (элементом) и первой записью (элементом), то его называют кольцевым списком. В случае если Анастасия знает телефон Дарибая, то линейный список замыкается, и мы имеем дело с кольцевым списком.
Достарыңызбен бөлісу: |