В квартире

Ландыши первоцветы. Первоцветы - вестники весны! Технология правильной посадки

Ландыши первоцветы. Первоцветы - вестники весны! Технология правильной посадки

Алгоритм рисование спирали:

использовать Чертежник
алг
нач
. сместиться в точку (3,3)
. опустить перо
. виток(1); виток(3); виток(5); виток(7); виток (9)
. поднять перо
кон
алг виток(арг вещ а)
нач
. сместиться на вектор (а, 0)
. сместиться на вектор (0, -а)
. сместиться на вектор (-а-1,0)
. сместиться на вектор (0, а+1)
кон

Обратите внимание на блок команд:

Виток(1); виток(3); виток(5); виток(7); виток (9)

Вспомогательный алгоритм «виток(арг вещ а) » вызывается 5 раз, но вызывать его в цикле «N раз» нельзя, т. к. каждый раз он вызывается с разными значениями аргумента.

Но можно заметить, что значения аргумента изменяются от 1 до 9, каждый раз увеличиваясь на 2. Значит, нам может помочь цикл со счётчиком . Так же такой цикл называется цикл «для» .

Цикл со счётчиком - цикл, в котором некоторая переменная изменяет своё значение от заданного начального значения до конечного значения с некоторым шагом, и для каждого значения этой переменной тело цикла выполняется один раз.

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

Общий вид цикла со счётчиком:

нц для <счетчик> от <нач. знач.> до <кон. знач.> [шаг <знач.>]
<тело цикла (последовательность команд)>
кц

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

Теперь алгоритм «спираль» можем переписать таким образом:

использовать Чертежник
алг
нач
. сместиться в точку (3,3)
. опустить перо
. цел размер
. нц для размер от 1 до 9 шаг 2
. . виток(размер)
. кц
. поднять перо
кон
алг виток(арг вещ а)
нач
. сместиться на вектор (а, 0)
. сместиться на вектор (0, -а)
. сместиться на вектор (-а-1,0)
. сместиться на вектор (0, а+1)
кон

В этом примере переменная-счетчик «размер» будет получать значения: 1, 3, 5, 7, 9. Т.е. цикл выполниться 5 раз. Для каждого значения переменой «размер» будет один раз выполнено тело цикла, в нашем примере это вызов вспомогательного алгоритма «виток(арг вещ а) ».

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

Блок-схема такого алгоритма выглядит так:

Рассмотрим еще один пример:

Давайте для начала вспомним и напишем вспомогательный алгоритм, который будет рисовать квадрат в точке (x, y). Для разнообразия для рисования будем использовать команду сместиться на вектор (в предыдущих примерах смещались в точку).

Алгоритм может быть таким:

алг квадрат(арг вещ x, y, сторона)
нач
. сместиться в точку (x, y)
. сместиться на вектор (-сторона/2, сторона/2)
. опустить перо
. сместиться на вектор (сторона, 0)
. сместиться на вектор (0, -сторона)
. сместиться на вектор (-сторона, 0)
. сместиться на вектор (0, сторона)
. поднять перо
кон

Используя такой вспомогательный алгоритм, нарисуем такой рисунок:

Для этого воспользуемся циклом «для». Изучите пример программы:

использовать Чертежник
алг рисунок1
нач
. цел z
. нц для z от 2 до 10 шаг 2
. . квадрат(0, 0, z)
. кц
кон
алг квадрат(арг вещ x, y, сторона)
нач
. сместиться в точку (x, y)
. сместиться на вектор (-сторона/2, сторона/2)
. опустить перо
. сместиться на вектор (сторона, 0)
. сместиться на вектор (0, -сторона)
. сместиться на вектор (-сторона, 0)
. сместиться на вектор (0, сторона)
. поднять перо
кон

В этом примере переменная «z» будет получать значения: 2, 4, 6, 8, 10. Т.е. цикл выполниться 5 раз. Для каждого значения «z» будет один раз выполнено тело цикла, в нашем примере это вызов вспомогательного алгоритма квадрат.

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

Как вы обратили внимание в алгоритме использовались не только числа, но и алгебраические выражения , формулы, например «-сторона/2». В информатике эти выражения называются арифметическими . Правила языка позволяют при записи алгоритмов всюду, где можно написать число, написать и произвольное арифметическое выражение.

Ее для дальнейшей работы и научились задавать . Теперь перейдем непосредственно к составлению алгоритмов для Робота с использованием простых команд.

Если вам больше нравится информация в формате видеоуроков, то на сайте есть видеоурок

У любого исполнителя должна быть система команд (СКИ система команд исполнителя ). Система команд исполнителя — совокупность всех команд, которые может выполнить исполнитель. В качестве примера рассмотрим дрессированную собаку. Она умеет выполнять некоторые команды — «Сидеть», «Лежать», «Рядом» и т. п. Это и есть ее система команд.

Простые команды Робота

У нашего Робота тоже есть система команд. Сегодня мы рассмотрим простые команды Робота . Всего их 5:

  • вверх
  • влево
  • вправо
  • закрасить

Результат выполнения этих команд понятен из их названия:

  1. вверх — переместить Робота на одну клетку вверх
  2. вниз — переместить Робота на одну клетку вниз
  3. влево — переместить Робота на одну клетку влево
  4. вправо — переместить Робота на одну клетку вправо
  5. закрасить — закрасить текущую клетку (клетку в которой находится Робот).

Эти команды можно писать с клавиатуры, а можно использовать горячие клавиши (нажав их команды будут вставляться автоматически):

  • вверх — Escape, Up (стрелка вверх)
  • вниз — Escape, Down (стрелка вниз)
  • влево — Escape, Left (стрелка влево)
  • вправо — Escape, Right (стрелка вправо)
  • закрасить — Escape, Space (пробел)

Обратите внимание, что набирать нужную комбинацию горячих клавиш нужно не привычным нам способом! Мы привыкли нажимать клавиши одновременно, а здесь их нужно нажимать последовательно . К примеру, чтобы ввести команду вверх, нужно нажать Escape, отпустить ее и после этого нажать стрелку вверх. Это нужно помнить.

Теперь мы готовы написать первый алгоритм для Робота. Предлагаю начать с простого — нарисуем квадрат со стороной 3 клетки. Поехали!

Запускаем Кумир, его. Можно начинать писать программу? Конечно нет! Мы же не ! Делаем это. Предлагаю использовать вот такую:

Вот теперь все готово. Начинаем писать программу. Пока она выглядит так

Удаляем символ «|» и называем наш алгоритм «Квадрат»

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

Попробуем запустить программу и посмотреть что же получилось. Для запуска нажимаем F9 или же кнопку на панели инструментов

В результате мы должны увидеть вот такую картину

Если такое окно Робота у вас не появилось, то на панели инструментов щелкните «Показать окно Робота » или в меню Робот выберите пункт «Показать окно Робота «. Продолжаем дальше.

Теперь мы будем двигаться вниз и закрашивать правую сторону квадрата:

вниз

закрасить

вниз

закрасить

Потом пойдем влево, закрашивая нижнюю границу квадрата

влево

закрасить

влево

закрасить

У нас осталась одна незакрашенная клетка. Закрасим ее

вверх

закрасить

Все готово! В итоге наша программа выглядит так:

использовать Робот

алг Квадрат

нач

закрасить

вправо

закрасить

вправо

закрасить

вниз

закрасить

вниз

закрасить

Вложенные циклы и ветвления в системе КУМИР

Одним из фундаментальных понятий в информатике является понятие алгоритма. Происхождение самого термина «алгоритм» связано с математикой. Это слово происходит от Algorithmi – латинского написания имени Мухаммеда аль-Хорезми (787 – 850) выдающегося математика средневекового Востока. В своей книге "Об индийском счете" он сформулировал правила записи натуральных чисел с помощью арабских цифр и правила действий над ними столбиком.

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

Алгоритм может быть предназначен для выполнения его человеком или автоматическим устройством. Создание алгоритма, пусть даже самого простого, - процесс творческий. Он доступен исключительно живым существам, а долгое время считалось, что только человеку. В XII в. был выполнен латинский перевод его математического трактата, из которого европейцы узнали о десятичной позиционной системе счисления и правилах арифметики многозначных чисел. Именно эти правила в то время называли алгоритмами.

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

Такими свойствами являются:

Дискретность (прерывность, раздельность) – алгоритм должен представлять процесс решения задачи как последовательное выполнение простых (или ранее определенных) шагов. Каждое действие, предусмотренное алгоритмом, исполняется только после того, как закончилось исполнение предыдущего.

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

Результативность (конечность) – алгоритм должен приводить к решению задачи за конечное число шагов.

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

Способы записи алгоритмов

Для записи алгоритмов используют самые разнообразные средства. Выбор средства определяется типом исполняемого алгоритма.

Выделяют следующие основные способы записи алгоритмов:

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

- символьный , когда алгоритм описывается с помощью набора символов и является программой (программы пишутся с помощью языков программирования);

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

Общепринятыми способами записи являются графическая запись с помощью блок-схем и символьная запись с помощью какого-либо алгоритмического языка - программа.

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

Система программирования КУМИР

При освоении темы алгоритмы воспользуемся системой программирования КУМИР.

КуМир (Комплект Учебных МИРов) - система программирования, предназначенная для поддержки начальных курсов информатики и программирования в средней и высшей школе.

В системе КуМир используется школьный алгоритмический язык с русской лексикой и встроенными исполнителями Робот и Чертёжник и др.

При вводе программы КуМир осуществляет постоянный полный контроль ее правильности, сообщая на полях программы обо всех обнаруженных ошибках.

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

Графический исполнитель Робот

Графический исполнитель Робот позволяет освоить азы программирования и понять работу основных алгоритмических конструкций.

Графический исполнитель - это объект управления. А уп равлять им будем мы с вами.

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

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

Р
обот может выполнять команды
: вверх, вниз, вправо, влево, закрасить.

Робот может проверять условия : сверху свободно, снизу свободно, справа свободно, слева свободно, добавление частицы не меняет условие на противоположное. Не сверху свободно, не снизу свободно, не справа свободно, не слева свободно.

Базовые алгоритмические структуры

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

    Будем записывать алгоритмы на и школьном АЯ и в виде блок-схем.

Линейная структура

Линейная структура является самой простой организацией алгоритмов - команды выполняются последовательно одна за другой

Пример:

Циклическая структура (цикл)

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

    Любая циклическая структура состоит из двух частей - заголовка и тела цикла.

    Набор команд, повторяющихся при выполнении цикла, называют телом цикла.

    Заголовок определяет количество повторений тела цикла.

Цикл на число повторений (раз)

нц N раз

<команда>

кц

Пример:

использовать Робот
алг столбик

нач
.
нц 5 раз
. . закрасить
. . вверх
.
кц

кон

Цикл с предусловием (пока)

(запись в алгоритмическом языке)

нц пока <условие>

<команда>

кц

Пример:

использовать Робот
алг Линия

нач

нц пока сверху свободно
закрасить
вверх
кц

кон

Цикл с постусловием (при)

(запись в алгоритмическом языке)

нц

<команда>

кц_при <условие>

Пример:

использовать Робот
алг Линия

нач
нц

закрасить; вверх

кц_при слева свободно

кон

Структура «ветвление».

    Структура «ветвление». Решение некоторых задач требует различных действий в зависимости от выполнения некоторых условий. В таких случаях говорят о ветвлении алгоритма.

    Для реализации структуры «ветвление» используются две структурированные команды школьного АЯ - если и выбор, каждая из которых может быть полной и неполной.

    В блок-схемах и школьном АЯ <условие> - это логическое выражение, результатом которого может быть одно из двух возможных значений - истина или ложь. В школьном АЯ эти значения записывают как да и нет. В языках программирования часто используются значения True и False . В компьютере эти значения хранятся как 1 и 0.

Полное ветвление

(запись в алгоритмическом языке)

если <условие>
. .
то <команда1>
. .
иначе <команда2>
все

Пример:

использовать Робот
алг ветвление_полное

нач
.
если сверху свободно
. .
то вверх
. .
иначе вниз
.
все

кон

Неполное ветвление

(запись в алгоритмическом языке)

если <условие>
. .
то <команда1>
все

Пример:

использовать Робот
алг ветвление_неполное

нач
.
если сверху свободно
. .
то вверх
.
все

кон

Вспомогательный алгоритм (процедура)

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

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

    Вспомогательный алгоритм вызывается из основной программы через имя. Вспомогательный алгоритм записывается после основного алгоритма. У вспомогательного алгоритма обязательно должно быть имя.

использовать Робот
алг
нач
вниз

квадрат
вниз

вниз
кон

алг квадрат
нач

закрасить

вправо

закрасить

вниз

закрасить

влево

закрасить
кон

Вложенные циклы и ветвления

При решении некоторых задач с роботом необходимо использовать вложенные циклы или ветвления.

Цикл называется вложенным, если он размещается внутри другого цикла.

Рассмотрим вложенный цикл на примере цикла пока.

Мы знаем, что цикл состоит из заголовка цикла, который определяет количество повторений тела цикла.

Тело цикла, это та часть цикла, которая повторяется при выполнении цикла.

Телом цикла может быть команда, несколько команд, а также другой цикл или ветвление.

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

Вложенный цикл

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

Вложенное ветвление

Рассмотрим решение задачи с вложенными ветвлениями и циклами:

Задача 1 Робот находится на стене, в которой есть отверстия, двигаясь вдоль стены вправо, робот должен закрашивать все клеточки, где есть отверстия.

использовать Робот алг нач
.
нц пока справа с вободно
нц пока снизу свободно
.закрасить;
вправо
. .
кц
. . вправо
.
кц кон С
оставим алгоритм решения задачи с вне6шим циклом пока и вложенным циклом пока.

Р ешим эту же задачу, используя внешний цикл пока и вложенное ветвление.

Решим эту же задачу с помощью внешнего цикла при и вложенного цикла пока.

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

Итак, что такое цикл ? Представьте, что мы находимся на уроке физической культуры и перед нами стоит задача сделать 7 приседаний . Это задание можно оформить в виде линейного алгоритма и тогда оно будет выглядеть примерно так:

сделай приседание

сделай приседание

сделай приседание

сделай приседание

сделай приседание

сделай приседание

сделай приседание

Т. е мы повторили команду сделай приседание 7 раз. А есть ли смысл писать 7 одинаковых команд? Может проще дать команду сделай 7 приседаний ? Конечно проще и правильнее. Это и есть цикл . Вы можете сами вспомнить примеры циклов из жизни — их довольно много.

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

повторяй 7 раз

сделай приседание

конец цикла

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

Виды циклов.

Цикл со счетчиком.

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

Для того, чтобы написать цикл со счетчиком для исполнителя необходимо знать его синтаксис. А он такой:

нц <количество повторений > раз

<команда 1>

<команда 2>

<команда n>

Здесь мы должны указать количество повторений (число) и команды, которые будут повторяться. Команды, которые повторяются в цикле называют телом цикла .

Давайте рассмотрим это на примере.

Изначально Робот находился в левой верхней клетке.

Давайте для начала решим задачу линейно. В этом случае мы будет закрашивать текущую клетку и перемещаться на 1 клетку вправо и программа будет выглядеть так:
использовать Робот
алг
нач

закрасить

вправо

закрасить

вправо

закрасить

вправо

закрасить

вправо

закрасить

вправо

закрасить

вправо

закрасить

вправо

Как видим, команды закрасить и вправо повторяются 7 раз. Давайте теперь перепишем программу с использованием цикла. Кстати, чтобы вставить цикл в свою программу можно в меню Вставка выбрать пункт нц-раз-кц или нажать одну из комбинаций клавиш Esc, Р (русская буква Р) или Esc, H (латинская буква H). Причем клавиши надо нажимать последовательно — сначала Esc, отпустить ее и только потом Р или H.

Так вот, наша программа с циклом будет выглядеть так:

использовать Робот

нц 7 раз

закрасить

вправо

Если мы ее запустим, то увидим, что в результате получится тоже самое — 7 закрашенных клеток. Однако программа стала короче и значительно грамотней с алгоритмической точки зрения!

В качестве разминки и закрепления предлагаю самостоятельно написать программу для Робота, которая нарисует квадрат со стороной 7 клеток. Естественно, используя цикл. Жду решения в комментариях.

Цикл с условием.

При решении задачи 19 ГИА по информатике с Роботом использовать цикл со счетчиком не получится. Так как там поле, как правило, бесконечное и стены не имеют конкретной длины. Поэтому мы не сможем определить количество повторений для цикла со счетчиком. Но не беда — нам поможет цикл с условием .

Вернемся к физкультуре и изменим задачу. Ведь кто-то может и не сделать 7 приседаний, а другой способен сделать 27. Можно ли учесть это при создании цикла? Конечно. Только теперь мы будем использовать не счетчик (количество повторений), а условие. К примеру, пока не устал, делай приседания. В этом случае человек будет делать не конкретное число приседаний, а приседать до тех пор, пока не устанет. И наш цикл на абстрактном языке примет такой вид:

пока не устал

сделай приседание

конец цикла

Слова не устал в нашем случае — это условие. Когда оно истинно, цикл выполняется. Если же оно ложно (устал) тело цикла не будет выполнено. У исполнителя Робот есть несколько условий

сверху свободно

снизу свободно

слева свободно

справа свободно

сверху стена

снизу стена

слева стена

справа стена

Но в условии задачи 19 ГИА указаны только первые 4. Так что будем пользоваться только ими.

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

Давайте сначала сформулируем словесный алгоритм — т. е. опишем словами что нужно делать Роботу. Этот алгоритм будет звучать примерно так:

«Пока справа свободно делай шаг вправо и закрашивай клетку »

В результате Робот пробежит по всем клеткам вправо и будет их закрашивать до тех пор, пока справа не окажется стена.

Исходный код нашей программы для Робота будет примерно такой:

использовать Робот

нц пока справа свободно

вправо

закрасить

В результате выполнения этой программы мы увидим вот такую картину:

Хирьянов Тимофей Федорович

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

Условно исполняемый код

Некоторые операции могут быть поставлены под условный оператор. Тогда они будут выполнены только в случае истинности этого условия.

если <условие>
то
<действия>
все

Альтернатива

В блок-схеме проверка условия может служить принципом выбора альтернативных операций. То есть, если условие истинно, исполнение пойдет по одной траектории, а если ложно, то по другой. На языке КуМир цикл с предусловием имеет следующий вид:

если <условие>
то
<действия>
иначе
<альтернативные действия>
все


Условия для робота:
слева стена
справа стена
снизу стена
сверху стена
клетка закрашена
слева свободно
справа свободно
снизу свободно
сверху свободно
клетка чистая

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

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

нц пока <условие>
<тело цикла>
кц

Цикл с постусловием

Цикл с постусловием — цикл, в котором условие проверяется после выполнения тела цикла. Отсюда следует, что тело всегда выполняется хотя бы один раз. В языке Паскаль этот цикл реализует оператор repeat..until , в Си — do…while .
На языке КуМир цикл с постусловием имеет следующий вид:

нц
<тело цикла>
кц_при <условие>

Цикл со счётчиком

Цикл со счётчиком — цикл, в котором некоторая переменная изменяет своё значение от заданного начального значения до конечного значения с некоторым шагом, и для каждого значения этой переменной тело цикла выполняется один раз. В большинстве процедурных языков программирования реализуется оператором for , в котором указывается счётчик (так называемая «переменная цикла»), требуемое количество проходов (или граничное значение счётчика) и, возможно, шаг, с которым изменяется счётчик. На языке КуМир цикл со счетчиком имеет следующий вид:

цел а
нц для а от 0 до 9
… тело цикла
кц

В различных языках программирования по-разному решается вопрос о значении переменной по завершении цикла, в котором эта переменная использовалась как счётчик.