Как сделать бесконечный цикл в кумире
Перейти к содержимому

Как сделать бесконечный цикл в кумире

  • автор:

Кумир программы на цикл до робот. Циклы с условием в кумире

система «КуМир» (название происходит от слов «Комплект Учебных Миров»), с которой вас познакомит данный электронный вариант учебника.
Разработчики языка «КуМир» преследовали цель создать простой язык для начального курса информатики, отвечающий современной технологии программирования и допускающий производственное использование. За основу был взят школьный алгоритмический язык. Язык был дополнен некоторыми возможностями, превращающими его из учебного в производственный. В языке есть:
типы цел, вещ, лит ; традиционный набор операций над данными этих типов (включая операции над строками и стандартный набор математических функций);
массивы (таб ) указанных типов; структурные управляющие конструкции циклов, ветвление и др.
КуМир открыт — подключение внешних исполнителей обогащает язык новыми возможностями: от управления базами данных и работы с геометрическими объектами до расширения множества допустимых числовых типов (при этом язык позволит смешивать в выражениях новые типы с уже существующими числовыми типами).
Современная технология программирования учит разбивать программу не только на подпрограммы, но и на более крупные единицы: наборы программ, работающих над общими данными. В разных языках программирования такие единицы называются по-разному, в КуМире такая единица называется «Исполнитель». Понятие исполнителя чрезвычайно важно в практической работе , и должно быть введено на возможно более ранних стадиях обучения.
Опыт использования КуМира в преподавании и для разработки учебного программного обеспечения показал, что язык прост в изучении и вместе с тем достаточно мощен для расширения широкого класса производственных задач.
Подобно Е-практикуму, КуМир является интегрированной системой, включающей текстовый редактор, инкрементальный компилятор с нулевым временем ответа, а так же простой и удобный отладчик. Хорошее название для системы такого рода — «Редактор-компилятор»: пока вы вводите вашу программу, компилятор ее обрабатывает, и в любой момент программа готова к выполнению без малейшей задержки.

2. Имена и типы величины. Операции КуМира

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

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

Для обозначения знаков логических операций используются символы:
= равно;
не равно;
больше;
= больше или равно;
Для записи сложных условий используются такие операции как: И , ИЛИ, НЕ.
И —
одновременное выполнение перечисленных условий (Х > 0 и Х 0 или Y > 0);
НЕ — отрицание.

3. Встроенные функции языка КуМир

Приведем пример встроенных функций:

SIN (X) COS (X) TG (X) EXP (X) LN (X) ABS (X) SQRT (X) MOD (A, B) INT (X) ПИ

синус х косинус х тангенс х
экспонента х (ех) натур. логарифм х
модуль х
корень квадратный х
остаток от деления (А на В)
целая часть числа
число «пи» — 3,14159

Пример записи арифметических выражений на алгоритмическом языке:

4. Команды ВВОДА / ВЫВОДА информации

Часто требуется организовать обмен информацией («диалог») между человеком и ЭВМ в процессе выполнения алгоритма. Для этого в алгоритмическом языке есть специальные команды ВЫВОДА информации из памяти ЭВМ на экран и ВВОДА информации с клавиатуры (от человека) в память ЭВМ.
Команда ВВОДА — команда, по которой значения переменных задаются через устройства ввода (клавиатура).
Команда ВЫВОДА — команда, по которой значение величины отражается на устройстве вывода компьютера (экран монитора).
Поскольку в алгоритмическом языке для запоминания информации используются величины, то в командах ввода / вывода указываются имена величин, значения которых надо вывести (показать на экране) или ввести (запомнить в памяти ЭВМ).
Пример:

Служебное слово НС (новая строка) указывает ЭВМ, что информация должна выводиться на новую строку.

5. Команда присваивания. Создание и редактирование программ линейной структуры

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

ИМЯ ВЕЛИЧИНЫ: = ВЫРАЖЕНИЕ

Знак » : присвоить» (например, команда » n: = e» читается » n присвоить е»). При выполнении команды присваивания ЭВМ сначала вычисляет записанное в правой части выражение (заменяя имена величин на их значения), а потом полученное значение выражения записывает в память.

Алгоритмы, представляющие собой простую последовательность действий, называются алгоритмами линейной структуры.
Рассмотрим процесс создания линейного алгоритма на примере вычисления выражения:
1. Вычислить сумму двух чисел
2. Написать программу нахождения гипотенузы прямоугольного треугольника по двум данным катетам
3. Найти объем куба, если известна его сторона

6. Создание и редактирование программ разветвляющейся структуры

Решение задач не всегда можно представить в виде линейного алгоритма. Существуют задачи, в которых требуется организовать выбор выполнения последовательности действий в зависимости от каких-либо условий. Такие алгоритмы называются алгоритмами разветвляющейся структуры. В системе программирования КуМир для создания алгоритма разветвляющейся структуры предусмотрены конструкции «ЕСЛИ — ТО — ИНАЧЕ — ВСЕ» и «ВЫБОР — ПРИ — ВСЕ».

Команда ветвления: ЕСЛИ — ТО — ИНАЧЕ — ВСЕ

Команда ветвления — разделяет алгоритм на два пути в зависимости от некоторого условия; затем исполнение алгоритма выходит на общее продолжение. Ветвление бывает полное и неполное.

Графическая схема выполнения конструкции «если «

Служебные слова «если «, «то «, «иначе » имеют обычный смысл. Слово «все » означает конец конструкции. Между «то » и «иначе » — в одной или нескольких строках — записывается последовательность команд алгоритмического языка (серия 1). Между «иначе » и «все » записывается другая последовательность команд (серия 2). Серия 2 вместе со служебным словом «иначе » может отсутствовать. При выполнении конструкции «если » ЭВМ сначала проверяет условие, записанное между «если » и «то «. В результате проверки получается либо ДА , либо НЕТ. Если получится ДА, то выполняется СЕРИЯ 1, а если НЕТ, — то СЕРИЯ 2 (если она есть) .
Если условие не соблюдается (получится НЕТ ), а серия 2 вместе с «иначе » отсутствует, то ЭВМ сразу переходит к выполнению команд, записанных после слова «все «.

7. Виды циклов в системе программирования КуМир

Алгоритмы, отдельные действия которых многократно повторяются, называются алгоритмами циклической структуры. Совокупность действий алгоритма, связанную с повторением, называют циклом.
Команда цикла обеспечивает повторное выполнение последовательности команд (тела цикла) по некоторому условию.
Для программирования алгоритмов циклической структуры в системе программирования КуМир предусмотрено два вида циклов: цикл с предусловием (цикл пока) и цикл с параметром (цикл для).

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

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

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

Дано целое положительное число N. Вычислить факториал этого числа: N! = 1 * 2 * 3 * . * N.

Цикл с параметром (цикл для)

Цикл с параметром (цикл для) — повторное выполнение тела цикла, пока целочисленный параметр пробегает множество всех значений от начального (i1) до конечного (in):

Здесь i — переменная целого типа, называемая параметром цикла: i1, in — начальное и конечное значения параметра цикла, которые могут быть заданы либо произвольными целыми числами, либо выражениями с целыми значениями; h — шаг изменения значения параметра цикла, значением шага может быть любое целое число (как положительное, так и отрицательное). Запись «шаг h» в первой строке может вообще отсутствовать, при этом по умолчанию значение шага принимается равным 1.
При выполнении цикла для, его тело выполняется для i = i1, i = i1 + h, i = i1 + 2*h, . . . , i = in. Правила алгоритмического языка допускают задание любых целых i1, in, h. В частности, in может быть меньше i1. Если при этом значение h б>с
то вывод нс ,» максимальным числом является», а
все
если а с
то вывод нс ,» максимальным числом является», б
все
если а б
то а:= а + б
б:= а * б
иначе а:= а * б
б:= а + б
вывод нс , а, б
кон

Найдите среди 4 произвольных чисел минимальное
Решение:

алг минимум
нач вещ а, б, с, е
вывод » введите 4 произвольных числа»
ввод а, б, с. е
если а>б>с>е
то вывод нс ,» максимальное число-«,а
все
если а c>е
то вывод нс ,»максимальное число -«,б
все
если
а е
то вывод нс ,» максимальное число -«, с
все
если
а с
то вывод нс ,» истина»
иначе вывод нс ,»ложь»
все
кон

Найдите Факториал натурального числа n (Факториалом натурального числа n является произведение всех натуральных чисел на промежутке от 1 до n ) Решение:

алг факториал
нач вещ
а. б
цел
н, и
вывод

ввод
н
а:= 1
нц для
и от 1 до н
вывод нс ,
» введите число»
ввод
б
а:= а * б
кц
вывод нс
,
» факториал «,н,»целых чисел равен», а
кон

Найдите максимальное значение среди n — целых чисел
Решение:

алг максимум
нач вещ
а, б
цел
и, н
вывод
» введите количество целых чисел для сравнения»
ввод
н
а:=0
нц для
и от 1 до н
вывод нс ,
«введите число»
ввод
б
если
б>а
то
а:=б
все
кц
вывод нс ,
» максимальным числом среди данных является число», а
кон

Найдите среди n-целых чисел количество отрицательных
Решение:

алг совпадение
нач вещ
а, б, с
цел
н, и, з
вывод «
введите количество натуральных чисел»
ввод
н
вывод нс ,
«введите число»
ввод
б
н:= н — 1
з:= 0
нц для
и от 1 до н
вывод нс
введите число»
ввод
с
если
с = б
то
з:= з + 1
все
кц
вывод нс
,

кон

Последовательно вводятся n-целых чисел. Найти количество совпадений с первым числом
Решение:

нач вещ а, б, с
цел
н, и, з
вывод
» введите количество натуральных чисел»
ввод
н
вывод нс ,
«введите число»
ввод
б
н:= н — 1
з:= 0
нц для
и от 1 до н
вывод нс ,
» введите число»
ввод
с
если
с = б
то з:= з + 1
все
кц
вывод нс
,
» количество совпадений с первым числом равно», з
кон

Последовательно вводятся n-целых чисел. Найти разницу между максимальным и минимальным значениями данных чисел
Решение:

алг разница
нач вещ
а. б, с, д
цел
н, и
вывод
«Введите количество чисел»
ввод
н
а:= 0
с:= 0
нц для
и от 1 до н
вывод нс ,
«введите число»
ввод
д
если
д>с
то
с:= д
все
если
д max
то max:= b
все
кц
вывод нс
,

кон

Найдите максимальный элемент массива и выведите его на монитор Решение:

алг массив 2
нач
цел n, i
вещ
b, max
вещтаб а [ 1:n ]
вывод
» заполните массив «
ввод
n
max:= 0
нц для
i от 1 до n
вывод нс ,
» введите элемент массива»
ввод
b
если
b > max
то max:= b
все
кц
вывод нс
,
» максимальный элемент данного массива равен», max
кон

Найдите сумму элементов одномерного массива Решение:

алг сумма
нач цел
n, i
вещтаб
а [ 1:n ]
вещ
b, z
вывод
» введите количество элементов массива «
ввод
n
z:= 0
нц для i от 1 до n
вывод нс ,
» введите элемент массива»
ввод
b
z:= z + b
кц
вывод нс
,
» сумма»,n,»элементов массива равна», z
кон

Найдите произведение элементов одномерного массива Решение:

алг произведение
нач цел
i, n
вещ
s, d
вещтаб
а [ 1:n ]
вывод
» введите количество элементов массива»
ввод
n
d:= 1
нц для
i от 1 до n
вывод нс ,
«введите число»
ввод
s
d:= d * s
кц
вывод нс
произведение», n, » элементов равно», d
кон


Заполните матрицу случайными числами Решение:

алг массив двумерный
цел
n, j, h, v
нач вещтаб
а
вывод
» введите количество элементов таблицы»
ввод
n
h:= 0
v:= 0
вывод нс ,
» заполните массив»
ввод
a
нц для
j от 1 до n
если а > 0
то
h:= h + 1
иначе
v:= v + 1
кц
вывод нс ,
а
кон


Вычислите количество положительных и отрицательных элементов первой строчки матрицы Решение:

алг массив 2
нач
вещ b, x, z
цел
i, n
вывод

ввод
n x:= 0
z:= 0
нц для
i от 1 до n
вывод
нс ,» введите число»
ввод
b
если
b > 0
то
x:= x + 1
иначе
z:= z + 1
все
кц
вывод нс
,

вывод нс ,

кон


Вычислите сумму элементов каждой строки Решение:

алг массив 3
нач вещ
b, x, z, y
цел
i, n
вещтаб
a[ 1:n, 1:n ]
вывод
» введите количество столбцов»
ввод
n x:= 0
z:= 0
нц для
i от 1 до n
вывод нс ,
» заполните массив»
ввод
a[ 1:n, 1:n ]
b:= a[ 1,i ]+a[ n, i ]
кц
вывод нс
,
» количество положительных чисел равно»,x
вывод нс ,
» количество отрицательных чисел равно», z
кон


Вычислите сумму трех чисел второй строчки матрицы размером три на три Решение:

алг матрица
нач цел
i, n
вещтаб a[ 1:3, 1:3]
вывод » заполните массив»
ввод a[ 1:3, 1:3 ]
n:= 0
нц для i от 1 до 3
n:= n + a[ 2,i ]
кц
вывод нс ,
«сумма чисел второй строки массива равна», n
кон

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Как сделать бесконечный цикл в кумире

Циклические алгоритмы

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

В языке КуМир есть специальные команды для организации программы с циклическим алгоритмом.

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

нц

тело_цикла

кц

Общий вид цикла пока:

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

· тело_цикла

Общий вид цикла до тех пор:

· тело_цикла

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

При выполнении цикла пока Робот циклически повторяет следующие действия:

· Проверяет записанное после служебного слова пока условие.

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

При выполнении цикла до тех пор Робот циклически повторяет следующие действия:

· Выполняет тело цикла.

· Проверяет записанное после служебного слова кц_при условие.

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

Цикл n раз

Цикл пока

Задание 1.

На бес­ко­неч­ном поле име­ет­ся лестница. Сна­ча­ла лест­ни­ца спус­ка­ет­ся вниз слева направо,

потом под­ни­ма­ет­ся вверх также слева направо.

После подъ­ема лест­ни­ца пе­ре­хо­дит в вер­ти­каль­ную стену. Вы­со­та каж­дой ступени — 1 клетка, ширина — 1 клетка.

Ко­ли­че­ство ступенек, ве­ду­щих вверх, и ко­ли­че­ство ступенек, ве­ду­щих вниз, неизвестно.

Между спус­ком и подъ­емом ши­ри­на площадки — 1 клетка. Робот на­хо­дит­ся в клетке,

На ри­сун­ке ука­зан один из воз­мож­ных спо­со­бов рас­по­ло­же­ния стен и Ро­бо­та

Решение

использовать Робот
алг Колодец
нач
нц пока снизу свободно
вниз
кц
нц пока не снизу свободно
вправо
кц
нц пока снизу свободно
вниз
закрасить
если справа свободно
то вправо
все
закрасить
кц
нц пока не снизу свободно
вверх
закрасить
если справа свободно то
вправо
закрасить
иначе влево
все
кц
кон

Напишите для Ро­бо­та алгоритм, за­кра­ши­ва­ю­щий все клетки, рас­по­ло­жен­ные не­по­сред­ствен­но

над лестницей, как по­ка­за­но на рисунке.

Например, для приведённого выше ри­сун­ка Робот

дол­жен за­кра­сить сле­ду­ю­щие клет­ки (см. рисунок).

Конечное рас­по­ло­же­ние Ро­бо­та может быть произвольным. Ал­го­ритм дол­жен ре­шать за­да­чу

При ис­пол­не­нии ал­го­рит­ма Робот не дол­жен разрушиться, вы­пол­не­ние ал­го­рит­ма

долж­но завершиться.

Выполните задание.

На бес­ко­неч­ном поле име­ют­ся 4 стены, рас­по­ло­жен­ные в форме прямоугольника.

Длины вер­ти­каль­ных и го­ри­зон­таль­ных стен неизвестны.

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

На ри­сун­ке указан один из воз­мож­ных способов рас­по­ло­же­ния стен и Ро­бо­та

Решение:

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

алг Стороны

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

нц пока снизу свободно

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

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

пра­вой и ниж­ней стен.

Робот дол­жен закрасить толь­ко клетки, удо­вле­тво­ря­ю­щие данному условию.

Например, для приведённого выше ри­сун­ка Робот дол­жен закрасить сле­ду­ю­щие клетки

При ис­пол­не­нии алгоритма Робот не дол­жен разрушиться, вы­пол­не­ние алгоритма долж­но

завершиться.

Ко­неч­ное расположение Ро­бо­та может быть произвольным.

Ал­го­ритм должен ре­шать задачу для лю­бо­го допустимого рас­по­ло­же­ния стен и лю­бо­го

расположения и раз­ме­ра проходов внут­ри стен

Выполните задание самостоятельно

На бес­ко­неч­ном поле име­ет­ся лестница. Сна­ча­ла лест­ни­ца спус­ка­ет­ся вниз спра­ва налево, затем спус­ка­ет­ся вниз слева направо.

Вы­со­та каж­дой ступени — одна клетка, ширина — две клетки. Робот на­хо­дит­ся спра­ва от верх­ней сту­пе­ни лестницы.

Ко­ли­че­ство ступенек, ве­ду­щих влево, и ко­ли­че­ство ступенек, ве­ду­щих вправо, неизвестно.

На ри­сун­ке ука­зан один из воз­мож­ных спо­со­бов рас­по­ло­же­ния лест­ни­цы и Ро­бо­та (Робот обо­зна­чен бук­вой «Р»).

Напишите для Ро­бо­та алгоритм, за­кра­ши­ва­ю­щий все клетки, рас­по­ло­жен­ные не­по­сред­ствен­но над сту­пе­ня­ми лестницы,

спус­ка­ю­щей­ся слева направо. Тре­бу­ет­ся за­кра­сить толь­ко клетки, удо­вле­тво­ря­ю­щие дан­но­му условию.

Например, для приведённого выше ри­сун­ка Робот дол­жен за­кра­сить сле­ду­ю­щие клет­ки (см. рисунок).

Конечное рас­по­ло­же­ние Ро­бо­та может быть произвольным. Ал­го­ритм дол­жен ре­шать за­да­чу для про­из­воль­но­го раз­ме­ра поля и

лю­бо­го до­пу­сти­мо­го рас­по­ло­же­ния стен внут­ри пря­мо­уголь­но­го поля. При ис­пол­не­нии ал­го­рит­ма Робот не дол­жен разрушиться,

вы­пол­не­ние ал­го­рит­ма долж­но завершиться. Ал­го­ритм может быть вы­пол­нен в среде фор­маль­но­го ис­пол­ни­те­ля или за­пи­сан в

тек­сто­вом редакторе. Со­хра­ни­те ал­го­ритм в тек­сто­вом файле.

Как сделать бесконечный цикл в кумире. Исполнение циклических алгоритмов на базе системы «кумир». Простые команды Робота

На вход программе поступает натуральное число, не превосходящее 2 * 10 9 . Определите сумму цифр этого числа.

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

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

Цикл «пока»

Одной из таких конструкций в языке программирования Кумир является цикл пока . Этот цикл, именуемый часто цикл с предусловием , имеет следующий формат записи:

  • нц пока условие
  • тело_цикла

Условие, записанное после служебного слова пока , представляет собой логическое выражение.

Выполнение цикла происходит следующим образом:

  1. Вычисляется значение логического выражения.
  2. Если результат вычисления равен нет , то выполнение цикла заканчивается, и Кумир переходит к первой команде после цикла пока . Если результат вычисления да , то выполняется тело цикла, после чего снова происходит вычисление значения выражения с новым значением.

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

Теперь применим цикл пока для решения нашей задачи

  • ввод num
  • нц пока num > 0
  • сумма:= сумма + mod(num, 10 )
  • num:= div(num, 10 )
  • вывод сумма

Итак, в ходе каждого исполнения тела цикла к величине сумма прибавляется последняя цифра числа, затем, число уменьшается в 10 раз. Очевидно, что в конце концов num станет равным 0, после чего выполнение цикла закончится.

Цикл «до тех пор»

В Кумире существует еще один вариант цикла с условием, получивший название цикл до тех пор , который имеет следующий формат:

  • тело_цикла
  • кц при условие

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

Работа цикла до тех пор происходит следующим образом:

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

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

  • ввод num
  • если num 0
  • то k:= k + 1
  • кц при num = 0
  • вывод k

Лекция 4. Арифметические выражения

Арифметические выражения и правила их записи. Алгоритмы с «обратной связью». Команда «пока». Условия в алгоритмическом языке. Команды «если» и «выбор». Команды контроля. «Визуальное» представление команд. Отступление: правила и форма записи арифметических выражений в Фортране XXI века.

Лекция 1. Основные цели курса. Методика построения курса. Проблемный подход. Теория познается через практику. Система “КуМир” — эффективная поддержка традиционных понятий процедурных языков программирования и традиционных методов отладки. Примеры использования “КуМира” в предпрофессиональных курсах.

Лекция 2. Практическое знакомство с системой “КуМир”: исполнитель Робот. Понятие алгоритма. Управление исполнителем Робот с помощью пульта. Линейные алгоритмы. Запись алгоритма. Отступление: Карел-Робот в начальном курсе программирования Стэнфордского университета.

Лекция 3. Методы “визуальной” записи алгоритма. Программное управление Роботом. Цикл “n раз”. Использование вспомогательных алгоритмов. Запись алгоритмов на алгоритмическом языке.

Контрольная работа № 1.

Лекция 4. Арифметические выражения и правила их записи. Алгоритмы с “обратной связью”. Команда “пока”. Условия в алгоритмическом языке. Команды “если” и “выбор”. Команды контроля. “Визуальное” представление команд. Отступление: правила и форма записи арифметических выражений в Фортране XXI века.

Лекция 5. Величины в алгоритмическом языке. Команды ввода/вывода информации. Команда присваивания. Вспомогательные алгоритмы. Алгоритмы с результатами и алгоритмы-функции. Цикл “для”. Табличные величины. Логические, символьные и литерные величины.

Контрольная работа № 2.

Лекция 6. Методы алгоритмизации. Рекуррентные соотношения. Метод итерации. Инвариант цикла. Рекурсия.

Лекция 7. Физические основы современных компьютеров. Микропроцессор — сердце современного компьютера. Как создать компьютер.

Лекция 8. Виртуальные и реальные исполнители в системе “КуМир”. Исполнитель Чертежник. Лего-Робот — программно управляемый исполнитель “КуМира”. Гипертексты в системе “КуМир”. Подготовка заданий для учащихся и их автоматическая проверка.

Пока школьник “собирает” программу в “ПиктоМире”, он практически не должен осваивать какой-то новый, непривычный “мир ЭВМ”. Разумеется, ребенок должен научиться оперировать мышкой для получения от компьютера желаемого результата, но интерфейс в целом опирается на привычные для ребенка понятия и действия, “прозрачен” и не требует от ребенка излишней концентрации внимания на самом процессе взаимодействия с компьютером. В этот момент обучаемый концентрирует практически 100% своих усилий (или лучше сказать “объема внимания”) на алгоритме решения поставленной задачи. Но как только происходит переход от графического программирования к более традиционному текстовому, ученик начинает сталкиваться с “другим миром”, законы которого отличаются от привычных, уже изученных в школе. Речь идет в первую очередь о записи арифметических выражений, на отработку навыков манипулирования которыми на уроках математики в школе ученик потратил десятки часов и достиг определенного автоматизма.

В первых задачах по управлению Роботом ЭВМ демонстрирует свои возможности как управляющая машина, а не как вычислительная. Но вот появляется цикл N раз, и при решении некоторых задач ученику может понадобиться в качестве N взять число, которое появляется как результат некоторого вычисления, например, число клеток поля размером 9 ? 14. Тут выясняется, что вовсе не обязательно вычислять общее число клеток такого поля самому (в уме, на бумаге или калькуляторе) и “вписывать” результат в программу. Оказывается, ЭВМ сможет сама проделать все нужные вычисления, как только мы сообщим ей (запишем в программе), что именно нужно вычислять. То есть, грубо говоря, для решения задачи на ЭВМ нужно не столько знать, “сколько будет дважды два”, сколько уметь сообщить ЭВМ, что нужно взять именно результат выполнения операции “дважды два” или операции “9 раз по 14”.

Со сложением и вычитанием проблем нет. В записи цикл 3+3 раз для ученика нет ничего нового. Точно в такой же форме на уроках математики учащиеся записывают и, мы надеемся, вычисляют без помощи калькулятора различные суммы и разности. Но вот для более сложных арифметических выражений правила записи в школьной математике и в традиционных алгоритмических языках начинают несколько отличаться.

Дело в том, что при работе на бумаге и классной доске математические формулы — корни, дроби, степени и индексы — мы “рисуем”, и это очень удобно. А в традиционных языках программирования арифметическое выражение нарисовать нельзя, а нужно “кодировать”, нажимая кнопки на клавиатуре компьютера. Из-за этого в программировании сложилась традиция упрощенной, так называемой “линейной” записи формул, к которой ученику начала XXI века приходится привыкать и приспосабливаться. (Наверное, к середине века этого делать уже не придется, см. программу внизу справа.) Итак, при вводе в программу требуемых формул (арифметических выражений) нам придется пользоваться клавиатурой компьютера и определенным образом эти формулы кодировать (шифровать). Как и всякая задача на кодирование или шифрование информации, эта простая техническая задача может оказаться притягательной для некоторых школьников (уставших от управления Роботом). При решении этой задачи выясняется, что на клавиатуре есть символ точки, но нет символа умножения “?”, да и точка тоже отнюдь не служит символом умножения. Выясняется также, что не принято писать арифметические формулы вида 8(2+3) с пропущенным знаком умножения. ЭВМ (точнее, компилятор языка программирования) могла бы разобраться в подобных формулах, но традиционно отказывается это делать и требует вписать в формулу звездочку — знак умножения: 8*(2+3). А вот две подряд идущие звездочки ЭВМ, как правило, воспринимает как знак возведения в степень.

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

Ошибок дети, как правило, не делают, за исключением одной широко распространенной: дроби вида

и записываются как 3+5/2 и 3*5/2 без скобок, вместо правильной записи (3+5)/2 и (3*5)/2.

Правила записи арифметических выражений в Фортране XXI века

Последние столетия математики отрабатывали язык математических формул, который оказался эффективным средством выражения математических понятий и методов манипуляции с математическими объектами. Когда в середине прошлого века появились компьютеры, первые компьютерные редакторы текстов и первые языки программирования, они оказались неспособными работать с отработанным в математике языком математических формул. С течением времени ситуация с математическими формулами в текстовых документах улучшилась. Математики и программисты придумали и стандартизовали способы ввода математических формул в текстовые документы, однако программисты в своих программах продолжали использовать невыразительную “линейную” форму записи формул в виде цепочки символов, вводимых со стандартной клавиатуры.

В XXI веке положение стало меняться. По заказу военного ведомства США специалисты компании SUN разработали язык Fortress, в который изначально закладывалась возможность использования в текстах программ общепринятых математических обозначений. На настоящий момент в этом направлении сделаны только первые шаги, однако в языке Fortress уже можно использовать: греческие буквы:

верхние/нижние индексы и дроби:

формулы с опущенными знаками умножения:

формулы, в которых аргументы элементарных функций не заключаются в скобки:

знаки операций над множествами

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

Алгоритмы с “обратной связью”. Команда “пока”

До сих пор мы работали с Роботом в стиле Черепашьей графики в ЛОГО, а именно командовали без всякой обратной связи. Поэтому то, что мы делали (с методической точки зрения), с тем же успехом можно было проделать, например, в том же ЛОГО. Вспомогательные алгоритмы (с аргументами или без аргументов) можно изучать как с использованием Робота, так и с использованием Черепашки.

На первых порах при составлении программ для Робота (или для Вертуна) мы, как правило, заранее имели исчерпывающую информацию об обстановке Робота. Но Робот (и Вертун) с методической точки зрения значительно богаче Черепашки, так как у него есть команды обратной связи. И, пользуясь этими командами, Человек может оперативно получить информацию об обстановке вокруг удаленного от него Робота, а ЭВМ может оперативно получать информацию при исполнении программы. Например, выполняя команду “слева свободно”, от кого бы она ни исходила, Робот сообщает порцию информации об обстановке, в которой он в данный момент находится. Другую порцию информации можно получить, спросив Робота, закрашена ли клетка, где он стоит.

При пользовании изображенным выше пультом ответы Робота человек считывает с табло в текстовом виде. Более дешевый пульт мог бы изображать ответ Робота путем зажигания лампочки (светодиода). Когда Роботом управляет ЭВМ, ответ Робота преобразуется в уровни электрических сигналов. Но суть процесса при этом одна и та же: при выполнении команды обратной связи информация не только поступает к Роботу, но и передается в обратном направлении, от Робота к ЭВМ или Человеку. Отсюда и термин обратная связь. Теоретически можно было обойтись только одной командой-вопросом из каждой пары типа: Справа свободно – Справа стена. Однако это усложнило бы запись алгоритма, так как потребовало бы введения отрицания, что на ранней стадии обучения является методически неоправданным, усложняющим правила написания и исполнения программ. Вместо естественной записи “сверху стена” пришлось бы писать что-то типа “сверху не свободно”, что предполагает некую двойственность, а вдруг там есть что-то, кроме стены ?

Обстановка Робота — это прямоугольное поле, окруженное забором и разбитое на клетки, и описывается следующими величинами: 1) размеры поля — количество строк (от 1 до 10) и количество столбцов (от 1 до 16); 2) для каждой клетки: наличие стен вокруг клетки; признак закрашенности; величина радиации (измеряется в условных единицах, может принимать любое вещественное значение от 0 до 100); температура (измеряется в градусах Цельсия, может принимать любое вещественное значение от –273 до +233). Примечание. Нижняя возможная температура — это (приблизительно) абсолютный ноль (0 градусов по шкале Кельвина). Верхняя температура — это температура, при которой горят книги (451 градус по Фаренгейту). Эта температура известна всем читателям знаменитой повести Рея Брэдбери “451 градус по Фаренгейту”.

Система команд Робота позволяет ему определить значения всех этих характеристик клетки. Кроме того, в клетке могут быть пометки, видимые наблюдателю, но недоступные “органам чувств” Робота: символы в левом верхнем и левом нижнем углах клетки, точка в правом нижнем углу клетки. Неотъемлемой частью обстановки является и сам Робот (точнее, его расположение на поле). В системе команд Робота нет команд, позволяющих запросить координаты Робота на поле.

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

Если команды первых двух групп выдают в качестве ответа “да” или “нет”, то команды последней группы возвращают в качестве ответа вещественное число. С помощью этих команд можно узнать, какова температура и какова радиация в клетке, в которой находится Робот. За счет команд третьей группы мир Робота становится заметно богаче. Благодаря этим командам мы можем ставить и решать более широкий набор задач по управлению Роботом и сбору информации на поле Робота. Более того, задачи о температуре и радиации на поле Робота могут заменить некоторые традиционные задачи по обработке массивов. “Оснащение” Робота “термометром” и “счетчиком Гейгера” — хороший методический подход при изучении задач, обычно формулируемых для массивов. Такие традиционные задачи по обработке массивов, как “минимальный элемент”, “индекс максимального элемента”, “сумма элементов”, “среднее арифметическое” и пр., могут быть переформулированы как задачи по сбору информации на поле Робота и получают при этом очень естественную интерпретацию.

Горизонтальный ряд из пяти клеток с заданной в каждой клетке радиацией (10, 10, 30, 20 и 40) — это точный аналог линейной таблицы вещественных чисел из пяти элементов. И почти каждую задачу по работе с линейной таблицей можно переформулировать как задачу про Робота. В такой формулировке будет более понятно, почему такая задача возникла и зачем ее нужно решать. Представим себе, что на поле Робота справа есть стена, к которой должны будут пройти люди — может быть, спасатели. Сначала необходимо разведать, насколько прохождение по коридору опасно для здоровья, каков уровень радиации. Если люди будут продвигаться с примерно постоянной скоростью, то полученная ими доза радиации окажется пропорциональной сумме уровней радиации во всех клетках прохода до стены. Поэтому анализ степени опасности этого прохода для жизни спасателей можно переформулировать как задачу подсчета суммарной радиации в клетках прохода. Это и есть задача нахождения суммы элементов таблицы, сформулированная в терминах управления Роботом. Подобным же образом можно переформулировать практически любую задачу по обработке таблиц (массивов).

Упражнение . Переформулируйте задачи “Минимальный элемент массива” и “Индекс минимального элемента массива” в терминах управления Роботом.

Итак, посмотрим, какая из нижеприведенных формулировок задачи привлекательнее для школьника: 1) найти индексы минимального элемента прямо­угольной таблицы; 2) в прямоугольнике на поле Робота найти клетку с минимальной радиацией и переместить Робота в эту клетку (для отдыха).

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

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

“Где-то ниже Робота на поле есть стена. Надо переместить Робота вертикально вниз до стены, т.е. установить Робота в клетку непосредственно над стеной на одной вертикали с исходным положением Робота”. Сначала можно попробовать решить эту задачу вручную. Учитель даже может нарисовать поле Робота на листе и, не показывая до поры до времени лист школьникам, выполнять их команды. Вскоре школьники поймут, что надо все время спрашивать “снизу свободно?” (или “снизу стена?”) и командовать “вниз” до тех пор, пока ниже Робота свободно.

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

Методический прием такого введения новой конструкции языка программирования Г.В. Лебедев в своих лекциях описывал так:

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

“Замечательно! — говорит учитель. — Все разобрались, как надо управлять Роботом. Но ведь мы занимаемся не ручным управлением Роботом, а информатикой. Поэтому наша задача — написать алгоритм для ЭВМ, при выполнении которого ЭВМ прокомандует Роботом так, чтобы задача была решена. Заметьте, что расстояние от Робота до стены неизвестно, но ЭВМ, выполняя алгоритм (и не зная расстояния), должна сместить Робота к стене. Попробуйте записать такой алгоритм. Вы ведь понимаете, как нужно управлять Роботом, какие команды ЭВМ должна выдать Роботу. Так запишите это в виде алгоритма для ЭВМ”. Я еще раз обращаю ваше внимание на этот проблемный подход. Ведь практически в этом месте мы просим школьников придумать конструкцию цикла “пока”. То есть в отличие от стандартной последовательности (сначала форма записи, потом ее семантика (смысл), потом решение задач) мы сначала ставим задачу, потом разбираем, как ее решать, т.е. разбираемся со смыслом (семантикой) будущей конструкции, а потом просим учеников придумать форму записи ”.

Цикл “пока” содержательно является очень сложной конструкцией. И процесс освоения его лучше сделать наглядным. В учебнике объяснение этого цикла проводится различными способами, в том числе и с использованием блок-схемы. Наглядное объяснение работы цикла “пока” столь же важно, как и режим пошагового выполнения в “КуМире”, так как графические образы и наблюдения в процессе собственной деятельности лучше усваиваются сознанием школьника, нежели речь и математические формулы, исходящие от учителя.

Выполняет один ШАГ программы и переходит в режим ПАУЗА. При запуске в состоянии РЕДАКТИРОВАНИЕ и АНАЛИЗ “проскакивает” строки “использовать” и останавливается перед выполнением первой строки вступления основной программы (если оно есть) или перед выполнением строки со словом “алг” основного алгоритма. Выполнение команды вызова алгоритма-процедуры трактует как один ШАГ. Выводит результаты вычислений и проверок условия на поля.

Выполняется аналогично команде “ШАГ”. Отличие состоит в исполнении команды вызова алгоритма-процедуры или вычисления значения алгоритма-функции (если они представлены в рабочем окне). В этих случаях очередным шагом будет выполнение строки-заголовка вспомогательного алгоритма. В дальнейшем команда “шаг” или “ШАГ” приведет к выполнению очередного шага внутри выполняемого вспомогательного алгоритма.

Попробуем выполнить алгоритм “Шагать доупора” . Будем выполнять программу по шагам, нажимая на пиктограмму ШАГ. Нас интересует выполнение цикла “пока”. Сначала проверяется условие “впереди свободно”. Ответ “да”, значит, должно выполниться тело цикла. И Робот смещается на одну клетку вниз. Когда тело цикла закончилось, мы возвращаемся и снова проверяем условие. И так далее, пока на очередном (Упражнение : Каком по счету? ) шаге Робот упрется в стену и проверка условия даст результат “нет”. И тогда мы завершим выполнение цикла и начнем выполнять ­команды, записанные в программе после кц .

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

А если обстановка Робота иная и он еще до выполнения цикла уже стоит над стеной? Попробуем выполнить алгоритм при таких начальных условиях. Немного бояз

но, а вдруг Робот сломается? Ничего подобного. Робот не сломался, цикл завершился, так как условие “снизу свободно” при первой же проверке не соблюдается и, значит, тело цикла не выполняется ни разу. Это одна из важных особенностей выполнения цикла “пока”.

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

Третья, и последняя, особенность цикла “пока” состоит в том, что условие продолжения цикла в процессе выполнения тела цикла не проверяется. Опять слегка изменим алгоритм, добавив в тело цикла еще одну команду “вниз”. Пусть Робот выполняет задачу побыстрее. Как правило, учащиеся не видят ошибочность подобной программы, неверно предполагая, что условие цикла каким-то магическим образом проверяется в каждый момент выполнения тела цикла. Это, естественно, не так. Приведенный пример демонстрирует возникшую ошибку выполнения, несмотря на то что условие цикла имело (в прошедшем времени) значение “да”. Но перед вторым шагом “вниз” условие уже никто не проверял. Из-за этого и возник отказ в программе.

Условия в алгоритмическом языке. Команды “если” и “выбор”

Как правило, после освоения цикла “пока” команды “если” и “выбор” осваиваются без особых затруднений. Как обычно, введение новой команды нужно начинать, отталкиваясь от задачи. Дано: Робот где-то на поле и справа свободно. Надо: переместить Робота вниз, закрасив по пути те клетки поля, у которых справа стена.

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

На методический вопрос, почему конструкция “если” появляется в курсе после конструкции “пока”, можно найти ответ в “12 лекциях” Г.В. Лебедева : “Конечно, легко ввести и пояснить команду “если” на каком-нибудь примере типа “осторожного” шага: “если снизу свободно то вниз все”. Беда, на наш взгляд, состоит в том, что если с этого начать (а особенно, если ввести команду “если” до циклов), то у школьников в голове не возникает никакого (пусть не формализованного) внешнего контекста, в рамках которого написание такой команды было бы осмысленным для решения каких-то содержательных задач. После того как разобран хотя бы один пример с циклом и с “если” внутри, такой внешний контекст появляется. Тогда уже можно команду “если” изучать и без циклов — ученики представят себе обстановку, в которой нужда в такой команде возникает. Но когда этот первый пример (с циклом и “если”) разобран, в команде “если” уже нечего изучать. Другие иллюстрационные примеры просто не требуются, — нужно решать задачи. Поэтому мы считаем, что впервые команда “если” должна появиться внутри цикла”. Сложность команды “если” может заключаться только в записи условия. Можно придумать задачу для школьников — записать формально условие “Робот стоит в углу”:

(слева стена и сверху стена)

или (сверху стена и справа стена)

или (справа стена и снизу стена)

или (снизу стена и слева стена)

Команда “выбор”

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

“Визуальное” представление команд

Цикл “пока” можно объяснять не только школьникам, используя “КуМир” с Роботом, но и дошкольникам, используя младшего брата “КуМира” — “ПиктоМир”. Из предыдущей лекции нам знаком Вертун, который может ходить по полю, похожему на поле Робота. Вертун — интересный исполнитель, у него есть команды обратной связи: Вертун может проверить, закрашена ли клетка, на которой он стоит, и есть ли перед ним стена. У Вертуна, как и у Робота, двойной набор команд обратной связи. Но на это в “ПиктоМире” есть веские причины. Если в “КуМире” из команды Робота “справа стена” мы могли получить эквивалент команды “справа свободно” добавлением отрицания “не” внутрь команды, то при визуальном стиле программирования в “ПиктоМире” частички не не существует. А значит, двумя командами обойтись нельзя и нужны все четыре.

Изображенные на рисунке пиктограммы обозначают эти пары команд (слева направо): “клетка закрашена” (серый цвет поля); “впереди стена” (кирпичная стена); “клетка чистая” (зеленый цвет поля); “впереди свободно” (стена разрушена).

· при условие 1: серия 1

· при условие 2: серия 2

· при условие n: серия n

· иначе серия n + 1

Ключевое слово иначе вместе с соответствующей серией команд может отсутствовать:

· при условие 1: серия 1

· при условие 2: серия 2

· при условие n: серия n

“КуМир” сначала проверяет условие 1. Если оно соблюдается, то “КуМир” выполняет команды из серии 1, после чего переходит к выполнению команд, записанных после слова все. В противном случае “КуМир” делает то же самое с условием 2 и командами из серии 2 и т.д.

Команды, записанные после слова “иначе”, выполняются в том случае, когда не соблюдено ни одно из условий.

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

В языке “КуМир” существует три команды контроля выполнения:

Все три команды выполняются так. Проверяется условие. Если условие не соблюдается, то “КуМир” прекращает выполнение алгоритма и сообщает, что возник отказ. Если же условие соблюдается, то выполнение алгоритма нормально продолжается так, как если бы ­команды контроля не было вовсе. Команда дано проверяет условие в начале выполнения алгоритма, команда надо — в конце выполнения алгоритма, а командой утв можно проверить условие в процессе выполнения алгоритма.

Как же можно в “ПиктоМире” использовать эти условия? Условия можно располагать в начале вспомогательных алгоритмов в специальных клетках. В синих располагается повторитель (для организации цикла N раз), а в розовых — условие выполнения алгоритма f1–f5. Как уже говорилось в лекции 3, цикл N раз помогает учащемуся экономить клетки при составлении алгоритма.

Но если простая задача состоит, например, в перемещении Вертуна вправо до стены, то программа вполне может выглядеть и так:

Действительно, если “подглядеть” обстановку Вертуна, то можно легко подсчитать, что до стены 4 шага. Другое дело, если обстановка нам не видна и мы можем узнать о ней только по обратной связи от Вертуна. Аналогично ситуации с Роботом школьнику придется спрашивать Вертуна перед шагом вперед, нет ли перед ним стены. В школьном алгоритмическом языке, когда ученики вынуждены сами придумывать конструкцию цикла “пока”, у детей все еще остается большой простор для фантазии, так как границы алгоритмического языка не видны. В “ПиктоМире” у ребенка есть только то, что он видит на экране. И условия можно разместить только в одном месте. Ему остается только это и попробовать.

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

Поясним, как работает вспомогательный алгоритм f1. Перед началом алгоритма (который содержится в 12 исполняемых клетках) выполняется команда Вертуна, находящаяся в розовом поле. Если ответ “да”, то алгоритм выполняется столько раз, сколько указано в синем поле. При этом пустые клетки пропускаются, а команда из розового поля вызывается каждый раз перед очередным циклом выполнения алгоритма f1.

Если розовое поле пусто, то ответ “да”. Если синее поле пусто, то цикл выполняется 1 раз. Фактически такой вспомогательный алгоритм был бы аналогичен следующей записи на алгоритмическом языке:

нц раз пока

Но такой конструкции в алгоритмическом языке нет. При этом f1 превращается в аналог конструкции “если”, в случае пустого повторителя (пустое синее поле) или единичного повторителя, и алгоритм f1 превращается в цикл “пока”, если условие присутствует (розовое поле), а повторитель равен бесконечности.

Упражнение . Вспомните, как построить из f1 цикл N раз.

Что же побудит ребенка использовать цикл “пока” (использовать розовое поле)? Дело в том, что в “ПиктоМире” всего 7 повторителей: 1 раз, 2 раза, 3 раза, 4 раза, 5 раз, 6 раз и “до бесконечности”. С таким набором можно дойти до стены, когда до нее 1, 2, 3, 4, 5 или 6 шагов. Но что делать, когда до стены 7 шагов или так много шагов, что ребенку просто не под силу подсчитать их количество? Есть повторитель “бесконечность”, и даже если ребенок еще не освоился с этим понятием, то, перебрав немногочисленные варианты создания программ в “ПиктоМире”, он обязательно попробует и вариант с повторителем “бесконечность” в синей клетке и нужным условием в розовой клетке. Это и будет созданный ребенком (осознанно) цикл “пока”.

Графический язык “ПиктоМира” сильнее побуждает ребенка к изобретению цикла “пока”, чем алгоритмический язык “КуМира”. Дело в том, что при “возне” с “ПиктоМиром” ребенок сильно ограничен в выборе средств. “ПиктоМир” весь на ладони, а алгоритмический язык можно изучать долго. В “ПиктоМире” можно быстро перебрать все варианты программирования, а поскольку среди них есть и цикл “пока”, то удастся открыть и его. Отличие “КуМира” от “ПиктоМира” подобно отличию шахмат от шашек. Про последние известный американский писатель Эдгар Аллан По в детективном рассказе “Убийство на улице Морг” написал так:

“Между тем здесь (в шахматах. — Прим. ред.) решает внимание. Стоит ему ослабеть, и вы совершаете оплошность, которая приводит к просчету или поражению. А поскольку шахматные ходы не только многообразны, но и многозначны, то шансы на оплошность соответственно растут, и в девяти случаях из десяти выигрывает не более способный, а более сосредоточенный игрок. Другое дело шашки, где допускается один только ход с незначительными вариантами; здесь шансов на недосмотр куда меньше, внимание не играет особой роли и успех зависит главным образом от сметливости. . Очевидно, здесь (при равных силах) победа зависит от удачного хода, от неожиданного и остроумного решения 6 ”.

Существовала и более глубокая причина, по которой мы наделили Робота диаметрально противоположными парами команд-вопросов. Когда-то в алгоритмическом языке нельзя было размещать частицу не внутри имени команды. В те времена из-за этого пришлось бы использовать полностью нечитаемые с точки зрения русского языка выражения типа “не клетка закрашена” или “не сверху свободно”. В современной версии языка подобные выражения записываются существенно более нормально: “клетка не закрашена”, “сверху не свободно”.

Кушниренко А.Г., Лебедев Г.В., Сворень Р.А. Основы информатики и вычислительной техники. М.: Просвещение, 1990, 1991, 1993, 1996.

К сожалению, назвать алгоритм “Шагать до упора” в “КуМире” нельзя, так как “до” является ключевым словом языка.

12 лекций о том, для чего нужен школьный курс информатики и как его преподавать: А.Г. Кушниренко, Г.В. Лебедев. // Методическое пособие. М.: Лаборатория базовых знаний, 2000.

Найдите среди n -целых чисел вводимых с клавиатуры количество отрицательных

Дано два произвольных числа. Пока их произведение меньше 100, увеличивать каждое число на 2 и вывести конечные числа на монитор

Последовательно вводятся n -целых чисел. Найти количество пятерок в последовательности

Последовательно вводятся n -целых чисел. Найти разницу между максимальным и минимальным значениями данных чисел

Найдите среди n -целых чисел вводимых с клавиатуры количество отрицательных

Дано два произвольных числа. Пока их произведение меньше 100, увеличивать каждое число на 2 и вывести конечные числа на монитор

Последовательно вводятся n -целых чисел. Найти количество пятерок в последовательности

Последовательно вводятся n -целых чисел. Найти разницу между максимальным и минимальным значениями данных чисел

Найдите среди n -целых чисел вводимых с клавиатуры количество отрицательных

Дано два произвольных числа. Пока их произведение меньше 100, увеличивать каждое число на 2 и вывести конечные числа на монитор

Последовательно вводятся n -целых чисел. Найти количество пятерок в последовательности

Последовательно вводятся n -целых чисел. Найти разницу между максимальным и минимальным значениями данных чисел

Найдите среди n -целых чисел вводимых с клавиатуры количество отрицательных

Дано два произвольных числа. Пока их произведение меньше 100, увеличивать каждое число на 2 и вывести конечные числа на монитор

Последовательно вводятся n -целых чисел. Найти количество пятерок в последовательности

Последовательно вводятся n -целых чисел. Найти разницу между максимальным и минимальным значениями данных чисел

Знакомство с программой Кумир осваение азов программирования.

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

При изучении одного из наиболее трудных разделов информатики «алгоритмизация и программирование».

Цель разработки :

Скачать:

Предварительный просмотр:

Методическая разработка по информатике.

Тема: «Исполнитель Робот в программе КуМир на уроках информатики »

учитель технологии «Информатика и ИКТ»

Цель разработки : изучить возможности программирования на примере конкретного исполнителя Робот с использованием среды КУМИР; дать практические навыки работы с исполнителем.

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

Учащиеся должны знать:

  • что такое исполнитель; СКИ Робота, среду исполнителя Робот;
  • что такое алгоритм; в чем состоят основные свойства алгоритма;
  • способы записи алгоритмов: блок-схемы, учебный алгоритмический язык; основные алгоритмические конструкции: следование, ветвление, цикл; структуры
  • алгоритмов; ⇒ назначение вспомогательных алгоритмов; технологии построения сложных алгоритмов:

Учащиеся должны уметь:

  • понимать описания алгоритмов на учебном алгоритмическом языке;
  • выполнить трассировку алгоритма для известного исполнителя;
  • составлять линейные, ветвящиеся и циклические алгоритмы управления исполнителя Робот; выделять подзадачи; определять и использовать вспомогательные алгоритмы.

Занятие 1 (2 часа) Урок 1.

Исполнитель Робот. Система команд исполнителя.

  1. Описание СКИ исполнителя, среды исполнителя.

2.Разбор типичных алгоритмов Робота.

Рассмотрим описание исполнителя.

Среда исполнителя : Исполнитель Робот умеет перемещаться по лабиринту, начерченному на плоскости, разбитой на клетки.

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

Команды логические: (проверки условия)

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

слева свободно справа свободно.

Логические связки: И,НЕ, ИЛИ:

Пример:(Не слева свободно) или (не справа свободно)

Команда ветвления : команда цикла:

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

Серия команд серия команд

(В КИМах 2009 года команды Робота отличались от привычных детям, что приводило к путанице 🙂

Команда ветвления : команда цикла:

Если условие то нц пока условие делать

Серия команд серия команд

Общий вид окна программы Кумир. Графическая среда Робота:

В КИМах демонстрационного варианта 2010 года формат команд изменен на привычный

Порядок создания алгоритма:

1.Командами Инструменты -Редактировать стартовую обстановку нарисовать на поле Робота стены и установить Робота в начальное положение.

2.Командами Робот- Сменить стартовую обстановку сохранить новую обстановку.

3.Командами Вставка- Использовать Робот указать исполнителя.

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

5.Командами Выполнение –выполнить непрерывно (или по шагам) запустить алгоритм.

6.Рассмотреть результат выполнения алгоритма и при необходимости произвести его отладку.

Занятие 1 (2 часа) Урок 2.

Практическая работа « Составление линейных алгоритмов».

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

Алгоритмический язык кумир

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

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

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

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

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

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

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

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

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

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

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

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

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

конец цикла

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

Виды циклов.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

пока не устал

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

конец цикла

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

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

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

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

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

сверху стена

снизу стена

слева стена

справа стена

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

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

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

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

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

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

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

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

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

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

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

Решение жду в комментариях. И напоминаю, до осталось совсем немного времени, готовимся активнее.

Цели : сформировать умение записи, исполнения и отладки алгоритмов с использованием цикла пока ; добиться понимания использования цикла пока ; развивать умение анализировать.

Ученики должны знать : правила записи и исполнения цикла пока ; свойства цикла пока .

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

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

Обеспечение урока:

  • система Кумир;
  • интерактивная доска;
  • мультимедийный проектор;
  • карточки-задания.

1. Объяснение нового материала.

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

Общий вид цикла пока

В общем виде цикл пока записывается так:

При выполнении цикла компьютер повторяет следующие действия:

а) проверяет записанное после служебного слова пока условие;

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

Метод отладки : по шагам.

Диалог Компьютера и Робота

Компьютер : снизу свободно?

Робот : да.

Компьютер : вниз.

Робот : смещается вниз в клетку Б.

Компьютер : снизу свободно?

Робот : да.

Компьютер : вниз.

Робот : смещается вниз в клетку В.

Компьютер : снизу свободно?

Так как Робот ответил нет, т.о. записанное после пока условие не соблюдается и выполнение цикла заканчивается.

Продемонстрировать в системе Кумир методы отладки: по шагам и непрерывно.

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

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

2. Эксперименты с программой на примере исполнителя Робот.

Необходимо, в системе Кумир, предварительно сделать заготовки расположения Робота (файлы 1. fil -6. fil ).

Эксперименты с программой.

Задание 1 . (Загрузить файл 1.fil)

Требуется перевести Робота из клетки А в клетку Б. Использовать цикл пока:

Задание 2 . (Загрузить файл 2.fil)

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

Задание 3 . (Загрузить файл 3.fil)

Робот находится в горизонтальном коридоре. Закрасить все клетки коридора:

Задание 4 . (Загрузить файл 4.fil)

1. Переделайте алгоритм «закрасить ряд вправо и вернуться» используя в нем цикл:

2. Используя вспомогательный алгоритм, составьте алгоритм, при выполнении которого Робот закрашивает прямоугольник.

Задание 5 . (Загрузить файл 5.fil)

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

Задание 6 . (Загрузить файл 6.fil) (Из материалов экзамена 2009г.)

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

Задание 7 . (Загрузить файл 6.fil) (Из материалов экзамена 2009 г.)

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

3. Закрепление. Вопросы:

Какие команды Компьютер будет давать Роботу при выполнении цикла:

а) нц пока клетка не закрашена

б) нц пока клетка закрашена

В ситуации, когда Робот стоит:

  1. в закрашенной клетке,
  2. в не закрашенной?

Расположение Робота показано на следующих рисунках:

Как будет выполняться цикл?

Домашнее задание. Определите значение переменной S после выполнения операторов:

Литература : А.Г.Кушниренко «Основы информатики и вычислительной техники».

Найдите среди n -целых чисел вводимых с клавиатуры количество отрицательных

Дано два произвольных числа. Пока их произведение меньше 100, увеличивать каждое число на 2 и вывести конечные числа на монитор

Последовательно вводятся n -целых чисел. Найти количество пятерок в последовательности

Последовательно вводятся n -целых чисел. Найти разницу между максимальным и минимальным значениями данных чисел

Найдите среди n -целых чисел вводимых с клавиатуры количество отрицательных

Дано два произвольных числа. Пока их произведение меньше 100, увеличивать каждое число на 2 и вывести конечные числа на монитор

Последовательно вводятся n -целых чисел. Найти количество пятерок в последовательности

Последовательно вводятся n -целых чисел. Найти разницу между максимальным и минимальным значениями данных чисел

Найдите среди n -целых чисел вводимых с клавиатуры количество отрицательных

Дано два произвольных числа. Пока их произведение меньше 100, увеличивать каждое число на 2 и вывести конечные числа на монитор

Последовательно вводятся n -целых чисел. Найти количество пятерок в последовательности

Последовательно вводятся n -целых чисел. Найти разницу между максимальным и минимальным значениями данных чисел

Найдите среди n -целых чисел вводимых с клавиатуры количество отрицательных

Дано два произвольных числа. Пока их произведение меньше 100, увеличивать каждое число на 2 и вывести конечные числа на монитор

Последовательно вводятся n -целых чисел. Найти количество пятерок в последовательности

Последовательно вводятся n -целых чисел. Найти разницу между максимальным и минимальным значениями данных чисел

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

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

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

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

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

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

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

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

1. Введение

система «КуМир» (название происходит от слов «Комплект Учебных Миров»), с которой вас познакомит данный электронный вариант учебника.
Разработчики языка «КуМир» преследовали цель создать простой язык для начального курса информатики, отвечающий современной технологии программирования и допускающий производственное использование. За основу был взят школьный алгоритмический язык. Язык был дополнен некоторыми возможностями, превращающими его из учебного в производственный. В языке есть:
типы цел, вещ, лит ; традиционный набор операций над данными этих типов (включая операции над строками и стандартный набор математических функций);
массивы (таб ) указанных типов; структурные управляющие конструкции циклов, ветвление и др.
КуМир открыт — подключение внешних исполнителей обогащает язык новыми возможностями: от управления базами данных и работы с геометрическими объектами до расширения множества допустимых числовых типов (при этом язык позволит смешивать в выражениях новые типы с уже существующими числовыми типами).
Современная технология программирования учит разбивать программу не только на подпрограммы, но и на более крупные единицы: наборы программ, работающих над общими данными. В разных языках программирования такие единицы называются по-разному, в КуМире такая единица называется «Исполнитель». Понятие исполнителя чрезвычайно важно в практической работе , и должно быть введено на возможно более ранних стадиях обучения.
Опыт использования КуМира в преподавании и для разработки учебного программного обеспечения показал, что язык прост в изучении и вместе с тем достаточно мощен для расширения широкого класса производственных задач.
Подобно Е-практикуму, КуМир является интегрированной системой, включающей текстовый редактор, инкрементальный компилятор с нулевым временем ответа, а так же простой и удобный отладчик. Хорошее название для системы такого рода — «Редактор-компилятор»: пока вы вводите вашу программу, компилятор ее обрабатывает, и в любой момент программа готова к выполнению без малейшей задержки.

2. Имена и типы величины. Операции КуМира

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

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

Для обозначения знаков логических операций используются символы:
= равно;
не равно;
больше;
= больше или равно;
Для записи сложных условий используются такие операции как: И , ИЛИ, НЕ.
И —
одновременное выполнение перечисленных условий (Х > 0 и Х 0 или Y > 0);
НЕ — отрицание.

3. Встроенные функции языка КуМир

Приведем пример встроенных функций:

SIN (X) COS (X) TG (X) EXP (X) LN (X) ABS (X) SQRT (X) MOD (A, B) INT (X) ПИ

синус х косинус х тангенс х
экспонента х (ех) натур. логарифм х
модуль х
корень квадратный х
остаток от деления (А на В)
целая часть числа
число «пи» — 3,14159

Пример записи арифметических выражений на алгоритмическом языке:

4. Команды ВВОДА / ВЫВОДА информации

Часто требуется организовать обмен информацией («диалог») между человеком и ЭВМ в процессе выполнения алгоритма. Для этого в алгоритмическом языке есть специальные команды ВЫВОДА информации из памяти ЭВМ на экран и ВВОДА информации с клавиатуры (от человека) в память ЭВМ.
Команда ВВОДА — команда, по которой значения переменных задаются через устройства ввода (клавиатура).
Команда ВЫВОДА — команда, по которой значение величины отражается на устройстве вывода компьютера (экран монитора).
Поскольку в алгоритмическом языке для запоминания информации используются величины, то в командах ввода / вывода указываются имена величин, значения которых надо вывести (показать на экране) или ввести (запомнить в памяти ЭВМ).
Пример:

Служебное слово НС (новая строка) указывает ЭВМ, что информация должна выводиться на новую строку.

5. Команда присваивания. Создание и редактирование программ линейной структуры

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

ИМЯ ВЕЛИЧИНЫ: = ВЫРАЖЕНИЕ

Знак » : присвоить» (например, команда » n: = e» читается » n присвоить е»). При выполнении команды присваивания ЭВМ сначала вычисляет записанное в правой части выражение (заменяя имена величин на их значения), а потом полученное значение выражения записывает в память.

Алгоритмы, представляющие собой простую последовательность действий, называются алгоритмами линейной структуры.
Рассмотрим процесс создания линейного алгоритма на примере вычисления выражения:
1. Вычислить сумму двух чисел
2. Написать программу нахождения гипотенузы прямоугольного треугольника по двум данным катетам
3. Найти объем куба, если известна его сторона

6. Создание и редактирование программ разветвляющейся структуры

Решение задач не всегда можно представить в виде линейного алгоритма. Существуют задачи, в которых требуется организовать выбор выполнения последовательности действий в зависимости от каких-либо условий. Такие алгоритмы называются алгоритмами разветвляющейся структуры. В системе программирования КуМир для создания алгоритма разветвляющейся структуры предусмотрены конструкции «ЕСЛИ — ТО — ИНАЧЕ — ВСЕ» и «ВЫБОР — ПРИ — ВСЕ».

Команда ветвления: ЕСЛИ — ТО — ИНАЧЕ — ВСЕ

Команда ветвления — разделяет алгоритм на два пути в зависимости от некоторого условия; затем исполнение алгоритма выходит на общее продолжение. Ветвление бывает полное и неполное.

Графическая схема выполнения конструкции «если «

Служебные слова «если «, «то «, «иначе » имеют обычный смысл. Слово «все » означает конец конструкции. Между «то » и «иначе » — в одной или нескольких строках — записывается последовательность команд алгоритмического языка (серия 1). Между «иначе » и «все » записывается другая последовательность команд (серия 2). Серия 2 вместе со служебным словом «иначе » может отсутствовать. При выполнении конструкции «если » ЭВМ сначала проверяет условие, записанное между «если » и «то «. В результате проверки получается либо ДА , либо НЕТ. Если получится ДА, то выполняется СЕРИЯ 1, а если НЕТ, — то СЕРИЯ 2 (если она есть) .
Если условие не соблюдается (получится НЕТ ), а серия 2 вместе с «иначе » отсутствует, то ЭВМ сразу переходит к выполнению команд, записанных после слова «все «.

7. Виды циклов в системе программирования КуМир

Алгоритмы, отдельные действия которых многократно повторяются, называются алгоритмами циклической структуры. Совокупность действий алгоритма, связанную с повторением, называют циклом.
Команда цикла обеспечивает повторное выполнение последовательности команд (тела цикла) по некоторому условию.
Для программирования алгоритмов циклической структуры в системе программирования КуМир предусмотрено два вида циклов: цикл с предусловием (цикл пока) и цикл с параметром (цикл для).

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

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

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

Дано целое положительное число N. Вычислить факториал этого числа: N! = 1 * 2 * 3 * . * N.

Цикл с параметром (цикл для)

Цикл с параметром (цикл для) — повторное выполнение тела цикла, пока целочисленный параметр пробегает множество всех значений от начального (i1) до конечного (in):

Здесь i — переменная целого типа, называемая параметром цикла: i1, in — начальное и конечное значения параметра цикла, которые могут быть заданы либо произвольными целыми числами, либо выражениями с целыми значениями; h — шаг изменения значения параметра цикла, значением шага может быть любое целое число (как положительное, так и отрицательное). Запись «шаг h» в первой строке может вообще отсутствовать, при этом по умолчанию значение шага принимается равным 1.
При выполнении цикла для, его тело выполняется для i = i1, i = i1 + h, i = i1 + 2*h, . . . , i = in. Правила алгоритмического языка допускают задание любых целых i1, in, h. В частности, in может быть меньше i1. Если при этом значение h б>с
то вывод нс ,» максимальным числом является», а
все
если а с
то вывод нс ,» максимальным числом является», б
все
если а б
то а:= а + б
б:= а * б
иначе а:= а * б
б:= а + б
вывод нс , а, б
кон

Найдите среди 4 произвольных чисел минимальное
Решение:

алг минимум
нач вещ а, б, с, е
вывод » введите 4 произвольных числа»
ввод а, б, с. е
если а>б>с>е
то вывод нс ,» максимальное число-«,а
все
если а c>е
то вывод нс ,»максимальное число -«,б
все
если
а е
то вывод нс ,» максимальное число -«, с
все
если
а с
то вывод нс ,» истина»
иначе вывод нс ,»ложь»
все
кон

Найдите Факториал натурального числа n (Факториалом натурального числа n является произведение всех натуральных чисел на промежутке от 1 до n ) Решение:

алг факториал
нач вещ
а. б
цел
н, и
вывод

ввод
н
а:= 1
нц для
и от 1 до н
вывод нс ,
» введите число»
ввод
б
а:= а * б
кц
вывод нс
,
» факториал «,н,»целых чисел равен», а
кон

Найдите максимальное значение среди n — целых чисел
Решение:

алг максимум
нач вещ
а, б
цел
и, н
вывод
» введите количество целых чисел для сравнения»
ввод
н
а:=0
нц для
и от 1 до н
вывод нс ,
«введите число»
ввод
б
если
б>а
то
а:=б
все
кц
вывод нс ,
» максимальным числом среди данных является число», а
кон

Найдите среди n-целых чисел количество отрицательных
Решение:

алг совпадение
нач вещ
а, б, с
цел
н, и, з
вывод «
введите количество натуральных чисел»
ввод
н
вывод нс ,
«введите число»
ввод
б
н:= н — 1
з:= 0
нц для
и от 1 до н
вывод нс
введите число»
ввод
с
если
с = б
то
з:= з + 1
все
кц
вывод нс
,

кон

Последовательно вводятся n-целых чисел. Найти количество совпадений с первым числом
Решение:

нач вещ а, б, с
цел
н, и, з
вывод
» введите количество натуральных чисел»
ввод
н
вывод нс ,
«введите число»
ввод
б
н:= н — 1
з:= 0
нц для
и от 1 до н
вывод нс ,
» введите число»
ввод
с
если
с = б
то з:= з + 1
все
кц
вывод нс
,
» количество совпадений с первым числом равно», з
кон

Последовательно вводятся n-целых чисел. Найти разницу между максимальным и минимальным значениями данных чисел
Решение:

алг разница
нач вещ
а. б, с, д
цел
н, и
вывод
«Введите количество чисел»
ввод
н
а:= 0
с:= 0
нц для
и от 1 до н
вывод нс ,
«введите число»
ввод
д
если
д>с
то
с:= д
все
если
д max
то max:= b
все
кц
вывод нс
,

кон

Найдите максимальный элемент массива и выведите его на монитор Решение:

алг массив 2
нач
цел n, i
вещ
b, max
вещтаб а [ 1:n ]
вывод
» заполните массив «
ввод
n
max:= 0
нц для
i от 1 до n
вывод нс ,
» введите элемент массива»
ввод
b
если
b > max
то max:= b
все
кц
вывод нс
,
» максимальный элемент данного массива равен», max
кон

Найдите сумму элементов одномерного массива Решение:

алг сумма
нач цел
n, i
вещтаб
а [ 1:n ]
вещ
b, z
вывод
» введите количество элементов массива «
ввод
n
z:= 0
нц для i от 1 до n
вывод нс ,
» введите элемент массива»
ввод
b
z:= z + b
кц
вывод нс
,
» сумма»,n,»элементов массива равна», z
кон

Найдите произведение элементов одномерного массива Решение:

алг произведение
нач цел
i, n
вещ
s, d
вещтаб
а [ 1:n ]
вывод
» введите количество элементов массива»
ввод
n
d:= 1
нц для
i от 1 до n
вывод нс ,
«введите число»
ввод
s
d:= d * s
кц
вывод нс
произведение», n, » элементов равно», d
кон


Заполните матрицу случайными числами Решение:

алг массив двумерный
цел
n, j, h, v
нач вещтаб
а
вывод
» введите количество элементов таблицы»
ввод
n
h:= 0
v:= 0
вывод нс ,
» заполните массив»
ввод
a
нц для
j от 1 до n
если а > 0
то
h:= h + 1
иначе
v:= v + 1
кц
вывод нс ,
а
кон


Вычислите количество положительных и отрицательных элементов первой строчки матрицы Решение:

алг массив 2
нач
вещ b, x, z
цел
i, n
вывод

ввод
n x:= 0
z:= 0
нц для
i от 1 до n
вывод
нс ,» введите число»
ввод
b
если
b > 0
то
x:= x + 1
иначе
z:= z + 1
все
кц
вывод нс
,

вывод нс ,

кон


Вычислите сумму элементов каждой строки Решение:

алг массив 3
нач вещ
b, x, z, y
цел
i, n
вещтаб
a[ 1:n, 1:n ]
вывод
» введите количество столбцов»
ввод
n x:= 0
z:= 0
нц для
i от 1 до n
вывод нс ,
» заполните массив»
ввод
a[ 1:n, 1:n ]
b:= a[ 1,i ]+a[ n, i ]
кц
вывод нс
,
» количество положительных чисел равно»,x
вывод нс ,
» количество отрицательных чисел равно», z
кон


Вычислите сумму трех чисел второй строчки матрицы размером три на три Решение:

алг матрица
нач цел
i, n
вещтаб a[ 1:3, 1:3]
вывод » заполните массив»
ввод a[ 1:3, 1:3 ]
n:= 0
нц для i от 1 до 3
n:= n + a[ 2,i ]
кц
вывод нс ,
«сумма чисел второй строки массива равна», n
кон

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *