Циклы с условием в кумире. Ветвление в языке кумир Программы циклы с постусловием в кумире

1. Введение

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

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

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

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

Для обозначения знаков логических операций используются символы:
= равно;
< > не равно;
< меньше;
> больше;
< = меньше или равно;
> = больше или равно;
Для записи сложных условий используются такие операции как: И , ИЛИ, НЕ.
И -
одновременное выполнение перечисленных условий (Х > 0 и Х < = 2);
ИЛИ - выполнение хотя бы одного из условий (Х > 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 < 0, то цикл выполняется нужное количество раз, а если h имеет положительное значение, то этот случай не считается ошибочным - просто тело цикла не будет выполнено ни разу, а ЭВМ сразу перейдет к выполнению команд, записанных после КЦ . При h = 0 происходит зацикливание.

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

8. Алгоритмы рекуррентных выражений

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

ai = ai-1 + d

В последовательности 1, 1, 2, 3, 5, 8, 13, ... (она называется последовательностью Фибоначчи ) каждый следующий член равен сумме двух предыдущих. Для этой последовательности

ai = ai-1 + ai-2 , a1 = a2 =1

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

9. Табличные величины и работа с ними

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

Работа с линейными таблицами (одномерными массивами)

Как и любая величина, линейная таблица занимает место в памяти ЭВМ, имеет имя, значение и тип. В КуМире используются таблицы целого (целтаб) и вещественного (вещтаб) типов. Например:

Запись целтаб А [ 1: 5 ] означает, что величина А является таблицей (таб), состоящей из целых (цел) чисел, элементы данной таблицы имеют индексы от1 (нижняя граница) до 5 (верхняя граница). Значение А - это пять целых чисел: 3, 15, 0, -10,101.
Элементы таблицы отдельных имен не имеют. Для обозначения i-го элемента таблицы А используется запись А [ i ]. Например, при выполнении команды А [ 3 ] : = A [ 2 ] + A [ 4 ] ЭВМ подставит вместо А [ 2 ] и А [ 4 ] значения 2-го и 4-го элементов таблицы А, т. е. числа 15 и -10, сложит их и присвоит полученное значение 3-му элементу, таким образом, на месте 3-го элемента в таблице вместо 0 появится значение 5.
В качестве значений границ таблицы могут быть использованы любые (как положительные, так и отрицательные) целые числа, а также 0. Значение нижней границы должно быть меньше значения верхней границы, в случае их равенства таблица считается состоящей из одного элемента. Если в описании таблицы из-за описки нижняя граница окажется больше верхней, например, целтаб [ 3: 1], то это не будет считаться ошибкой, и при вводе алгоритма никаких сообщений на "полях" не появится. В этом случае будет считаться, что в этой таблице нет ни одного элемента, и при первом же обращении к этой таблице появится сообщение "плохой индекс".

Задача.

Работа с прямоугольными таблицами (матрицами)

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

Запись целтаб А [ 1: 5, 1:2 ] означает, что величина А является таблицей (таб), состоящей из целых (цел) чисел, элементы данной таблицы имеют индексы от (первый столбец, первая строка) до (последний столбец, последняя строка). Значение А - это десять целых чисел: 3, 15, 0, -10, 101, 200, -45, 50, 10, 222.
Элементы таблицы отдельных имен не имеют. Для обозначения i-го элемента таблицы А используется запись А [ i, j ]. Например, при выполнении команды А [ 3, 1 ] : = A [ 2, 1 ] + A [ 4, 1 ] ЭВМ подставит вместо А [ 2, 1 ] и А [ 4, 1 ] значения 2-го и 4-го элементов первого столбца таблицы А, т. е. числа 15 и -10, сложит их и присвоит полученное значение 3-му элементу в первой строке таким образом, на месте 3-го элемента первой строки в таблице вместо 0 появится значение 5.
В качестве значений границ таблицы могут быть использованы любые (как положительные, так и отрицательные) целые числа, а также 0. Значение нижней границы должно быть меньше значения верхней границы, в случае их равенства таблица считается состоящей из одного элемента. Если в описании таблицы из-за описки нижняя граница окажется больше верхней, например, целтаб [ 3: 1, 5: 2], то это не будет считаться ошибкой, и при вводе алгоритма никаких сообщений на "полях" не появится. В этом случае будет считаться, что в этой таблице нет ни одного элемента, и при первом же обращении к этой таблице появится сообщение "плохой индекс".

Задача. В заданной таблице В определить индекс и значение максимального элемента.

Приложение: Задачи

Линейные алгоритмы

Задача №1

Найдите сумму двух чисел - а и b
Решение:

алг сумма
нач вещ a, b, c
вывод " введите значение 2 чисел"
ввод a, b
с:= a + b
вывод нс , " сумма чисел",a,"и",b,"равна",c
кон

Задача №2

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

алг разность
нач вещ a, b, c
вывод " введите значения переменных "
ввод a, b
с:= a - b
вывод нс, " разность чисел",a,"и",b," равна",c
кон

Задача №3

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

цел a, b, c

алг произведение
нач
вывод
" введите два числа"
ввод
a, b c: = a + b
вывод нс,
"
произведение чисел",a,"и",b"равно",c
кон

Задача №4

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

вещ a, b, c

алг частное
нач
вывод "
введите делимое и делитель"
ввод
a, b
c:= a / b
вывод нс,
" частное чисел",a,"и",b,"равно",c
кон

Задача №5

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

вещ a, b, c, d, e, f

алг арифметическое
нач вещ a, b, c, d, e, f
вывод " введите 5 любых чисел"
ввод a, b, c, d, e
f:=(a + b + c + d + e)/ 5
вывод нс ," среднее арифметическое 5 чисел равно", f
кон

Ветвление

Задача №1

Найдите среди 3 целых чисел наибольшее (числа произвольные)

алг максимум
нач цел а, б, в
вывод " введите три произвольных числа"
ввод а, б, в
если а>б>с
то вывод нс ," максимальным числом является", а
все
если а<б>с
то вывод нс ," максимальным числом является", б
все
если а<б<с
то вывод нс ," максимальным числом является", с
все
кон

Задача №2

Дано два произвольных числа. Если первое число больше второго, то ему присвоить их сумму, а второму числу их произведение. Если же второе число больше первого, то первому числу присвоить их произведение, а второму их сумму.

алг условие
нач вещ а, б
вывод " введите два числа"
ввод а, б
если а > б
то а:= а + б
б:= а * б
иначе а:= а * б
б:= а + б
вывод нс , а, б
кон

Задача №3:

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

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

Задача №4

Даны 2 катета (2 см и 2 см) равнобедренного треугольника и его основание (2.82 см). Определить, является ли треугольник прямоугольным.
Решение:

алг треугольник
нач вещ я, ч, с
я:= 2
ч:= 2
с:= 2.82
если с**2= (я**2)+(ч**2)
то вывод " истина"
иначе вывод " ложь"
все
кон

Задача №5

Вывести сообщение " истина", если произведение двух отрицательных чисел больше ноля, иначе вывести сообщение " ложь"
Решение:

алг отриц
нач вещ я, ч, с, м
вывод " введите два отрицательных числа"
ввод я, ч
с:=0
м:= я * ч
если м>с
то вывод нс ," истина"
иначе вывод нс ,"ложь"
все
кон

Цикл «для»

Задача №1

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

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

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

Задача №2

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

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

Задача №3

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

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

кон

Задача №4

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

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

Задача №5

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

алг разница
нач вещ
а. б, с, д
цел
н, и
вывод
"Введите количество чисел"
ввод
н
а:= 0
с:= 0
нц для
и от 1 до н
вывод нс ,
"введите число"
ввод
д
если
д>с
то
с:= д
все
если
д<а
то
а:= д
все
кц
б:= с - а
вывод нс ,
"разница между минимальным и максимальным значениями равна", б
кон

Цикл «пока»

Задача №1

Найти сумму всех чисел на промежутке от 1 до 5
Решение:

алг числа
нач вещ а, б
вывод " введите два таких числа, что второе число больше первого"
ввод а, б
нц пока а<б
а:= а + 1
кц
вывод нс
, а
кон

Задача №2

Дано два таких числа, что второе число больше первого. Надо прибавлять к первому числу по 1, пока оно не будет равно второму числе, вывести его на монитор.
Решение:

алг сумма
нач вещ а, б, с
вывод " введите промежуток суммирования"
ввод а, б
с:= а
нц пока а < б
а:= а + 1
с:= с + а
кц
вывод нс
," сумма чисел на данном промежутке равна", с
кон

Задача №3

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

алг произведение
нач вещ а, б, с
вывод " введите два произвольных числа "
ввод а, б
с:= 100
нц пока а * б < с
а:= а + 2
б:= б + 2
кц
вывод нс
, а, б
кон

Одномерные массивы

Задача №1

Заполните массив случайными числами и выведите его элементы Решение:

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

кон

Задача №2

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

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

Задача №3

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

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

Задача №4

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

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

Массивы

Задача №1


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

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


Задача №2


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

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

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

вывод нс ,

кон


Задача №3


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

алг массив 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
кон


Задача №4


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

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

Управление исполнителем Робот в системе КУМИР

Робот существует в определенной обстановке (прямоугольном клетчатом поле). Между некоторыми клетками поля могут быть расположены стены. Некоторые клетки могут быть закрашены (рис. 3.11).

Робот занимает ровно одну клетку поля.

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

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

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

О
шибки: 1 синтаксические; 2. логические

Описания обстановок хранятся в текстовых файлах специального формата (формат.fil).

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

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

Порядок работы:


  1. Задать стартовую обстановку по условию задачи:
Меню Инструменты → Сменить стартовую обстановку Робота (нарисовать обстаковку по условию задачи, дать имя, сохранить в Личной папке)

2. Указать Исполнителя:

Меню Вставка →Использовать Робот

3. Написать алгоритм решения задачи.

4. Выполнить алгоритм (Меню Выполнение →Выполнить непрерывно /F9)

Система команд исполнителя Робот в системе КУМИР


Команда

Действие

вверх

Робот перемещается на 1 клетку вверх

вниз

Робот перемещается на 1 клетку вниз

влево

Робот перемещается на 1 клетку влево

вправо

Робот перемещается на 1 клетку вправо

закрасить

Робот закрашивает клетку, в которой находится

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

Робот проверяет выполнение соответствующего простого условия

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



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



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



клетка закрашена



клетка чистая



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

Цикл – организация повторения действий, пока верно некоторое условие.

Тело цикла – набор повторяемых действий.

Условие – логическое выражение (простое или сложное (составное))
Типы циклов:

1.Цикл «Повторять n раз» 2. Цикл «Пока»
нц n раз нц пока
. . Тело цикла. . Тело цикла
кц кц

Пример: нц пока справа свободно


Общий вид цикла «Повторять n раз:

ПОВТОРИТЬ n РАЗ

КОНЕЦ
кц

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

ПОКА ДЕЛАТЬ

КОНЕЦ
Составные условия образуются из одного или нескольких простых условий и служебных слов И, ИЛИ, НЕ.


Составное условие А И В (где А, В - простые условия), выполнено, когда выполнено каждое из двух входящих в него простых условий.

Пусть А - сверху свободно, В - справа свободно, тогда составное условие А И В - сверху свободно И справа свободно.


Составное условие А ИЛИ В выполнено, когда выполнено хотя бы одно из двух входящих в него простых условий: сверху свободно ИЛИ справа свободно
Составное условие НЕ А - выполнено, когда не выполнено условие А.

Пример: Пусть А – клетка закрашена (простое условие).

Проверка составного условия НЕ А:

а) А - выполнено, НЕ А (НЕ закрашено) - не выполнено.

б) А - не выполнено, НЕ А (НЕ закрашено) - выполнено.


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

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

Общий вид команды ЕСЛИ:

ЕСЛИ ТО ИНАЧЕ

КОНЕЦ

В языке КУМИР:

Полное ветвление: Неполное ветвление:
если то если то

иначе

все все

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

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

Вопросы и задания

1. Приведите все алгоритмы из трех команд, которые переместят Робота из исходного положения в клетку Б.

Существует ли для этой задачи алгоритм, при выполнении которого Робот делает:

а) два шага; б) четыре шага; в) пять шагов; г) семь шагов?


  1. Петя составил алгоритм, переводящий Робота из клетки А в клетку Б с закрашиванием каких-то клеток. Что должен сделать Коля с этим алгоритмом, чтобы получить алгоритм, переводящий Робота из Б в А и закрашивающий те же клетки?


7. Известны два вспомогательных алгоритма Робота

Нарисуйте, что получится при выполнении Роботом следующих основных алгоритмов:


а)

нц 5 раз


узор_1

вправо; вправо;


б)

нц 7 раз


узор_2

вправо; вправо


в)
вправо; вправо; вправо

вверх; вверх

вправо; вправо; вправо

вниз; вниз


г)
вправо; вправо
вправо; вправо

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



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

10. Известно, что где-то правее Робота есть закрашенная клетка.

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

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

12. Известно, что Робот находится где-то в горизонтальном коридоре. Ни одна из клеток коридора не закрашена.

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


13. В ряду из десяти клеток правее Робота некоторые клетки закрашены.

Составьте алгоритм, который закрашивает клетки:

а) ниже каждой закрашенной клетки;

б) выше и ниже каждой закрашенной клетки.


14. Что можно сказать о правильности следующего фрагмента алгоритма?

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

ЕСЛИ справа свободно ТО

вправо; закрась

к
ц

15. Напишите программу, с помощью которой Робот сможет попасть в клетку Б во всех трех лабиринтах.


16. Напишите программу, следуя которой Робот сможет пройти по коридору от левого нижнего угла поля к правому верхнему. Коридор имеет ширину одна клетка и тянется в направлении слева-снизу вправо-вверх. Пример возможного коридора изображен на рисунке.

З

адачи ГИА


  1. Коридор1. Робот находится где-то в вертикальном коридоре. Ни одна из клеток коридора не закрашена. Составить алгоритм, под управлением которого Робот закрасит все клетки этого коридора и вернется в исходное положение.

  1. К
    Надо

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

Возможный вариант начального расположения Робота приведён на рисунке (Робот обозначен буквой «Р»)

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


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


Надо

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

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



  1. На бесконечном поле имеется длинная вертикальная стена. Длина стены неизвестна. Робот находится в одной из клеток, расположенной непосредственно справа от стены. Начальное положение робота также неизвестно. Одно из возможных положений робота приведено на рисунке (робот обозначен буквой «Р»):Напишите для работа алгоритм, закрашивающий все прилегающие к стене клетки: слева, начиная с верхней не закрашенной и через одну; справа, начиная с нижней закрашенной и через одну. Робот должен закрасить только клетки, удовлетворяющие данному условию. Например, для приведенного выше рисунка робот должен закрасить следующие клетки (см. рисунок): Конечное расположение робота может быть произвольным. Алгоритм должен решать задачу для произвольного размера стены и любой допустимой начальной позиции робота. При исполнении алгоритма Робот не должен разрушиться.


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


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

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



Р

  1. На бесконечном поле имеется длинная вертикальная стена. Длина стены неизвестна. Робот находится в одной из клеток, расположенной непосредственно слевав от стены. Начальное положение робота также неизвестно. Одно из возможных положений робота приведено на рисунке (робот обозначен буквой «Р»):
Напишите для работа алгоритм, закрашивающий все прилегающие к стене клетки:

  • слева все;

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

B
1102_ГИА2011

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

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


В
1103_ГИА_2011


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Пример:

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

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

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

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

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

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

нц N раз

<команда>

кц

Пример:

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

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

кон

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

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

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

<команда>

кц

Пример:

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

нач

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

кон

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

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

нц

<команда>

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

Пример:

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

нач
нц

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

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

кон

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

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

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

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

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

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

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

Пример:

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

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

кон

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

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

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

Пример:

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

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

кон

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

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

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

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

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

квадрат
вниз

вниз
кон

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

закрасить

вправо

закрасить

вниз

закрасить

влево

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Карточки-задания

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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