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

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


Алгоритм на языке КуМир записывается так:

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

Описание алгоритма состоит из:
  • заголовка (часть до служебного слова нач),
  • тела алгоритма (часть между словами нач и кон).
Части "дано", "надо", а также "тип алгоритма" и "описание аргументов и результатов" могут отсутствовать.

Простейшие алгоритмы

Рассмотрим следующий вспомогательный алгоритм для исполнителя Чертежник.

Пример алгоритма

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

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

Алгоритмы с аргументами

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

Пример алгоритма

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

Слово арг означает, что у алгоритма есть аргумент (а), а вещ — то, что этот аргумент имеет вещественный тип. Команда вызова такого алгоритма может иметь вид

(в этом случае будет нарисован квадрат 2x2) или, например,
(в этом случае будет нарисован квадрат 5x5).

Алгоритмы с результатами

Алгоритм может не только получать информацию, но и отдавать ее. Для этого используется специальный вид величины — результаты .

Пример алгоритма с результатами

алг гипотенуза (вещ a, b, рез вещ c)
дано a >= 0 и b >= 0 | длины катетов треугольника
надо | c = длинa гипотенузы этого треугольника
нач
c:= sqrt(a ** 2 + b ** 2)
кон

Здесь служебное слово рез указывает на то, что величина c является результатом и ее значение будет меняться в процессе работы алгоритма. Например, после вызова

гипотенуза(3, 4, c)

Величина c примет значение 5.

Алгоритмы-процедуры и алгоритмы-функции

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

Для рисования двух квадратов с разными сторонами, например 2 и 3, нам нужно было составить два разных вспомогательных алгоритма. А как быть, если нужно рисовать много разных квадратов с разными длинами сторон? Не писать же для каждого свой алгоритм! Оказывается алгоритмы могут иметь аргументы, можно составить алгоритм рисования квадрата с произвольной длиной стороны.

С понятием аргумент вы уже встречались в математике. В математике аргумент функции - независимая переменная, от значений которой зависят значения функции.
Например, функция f(x) = x 2 +1 имеет один аргумент. При различных значениях аргумента будем получать различные значения функции - при x=2 получим f(x)=5, при x=3 получим f(x)=10 и т. д.

Нужный нам вспомогательный алгоритм (который рисует квадрат определенной длины) можно записать так:

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

Запись «алг квадрат(арг вещ а)» означает, что у алгоритма «квадрат» есть один аргумент (арг) «а», который может быть произвольным вещественным (вещ) числом.
Для того чтобы вызвать этот алгоритм нужно написать, например, «квадрат(2)» - получим квадрат со стороной 2 или «квадрат(3)» - получим квадрат со стороной 3 и т. п.
Какое-то конкретное значение «а» получит только во время работы программы во время соответствующего вспомогательного алгоритма. И везде вместо «а» будет подставлено компьютером это число.

Программа для рисования это рисунка может быть такой:

использовать Чертежник
алг квадраты
нач
. сместиться в точку (1,1)
. квадрат(2)
. сместиться в точку (4,1)
. квадрат(3)
. сместиться в точку (8,1)
. квадрат(4)
. сместиться в точку (13,1)
. квадрат(5)
. сместиться в точку (0,0)
кон
алг квадрат(арг вещ а)
нач
. опустить перо
. сместиться на вектор (0,а)
. сместиться на вектор (а,0)
. сместиться на вектор (0,-а)
. сместиться на вектор (-а,0)
. поднять перо
кон

Научим Чертежника новым командам. Одна из команд пусть называется «линия(арг вещ x1,y1,x2,y2) » – для рисования линии из точки (x1,y1) в точку (x2,y2).


нач
. сместиться в точку (x1,y1)
. опустить перо
. сместиться в точку (x2,y2)
. поднять перо
кон

Вторая команда пусть называется «прямоугольник(арг вещ x1,y1,x2,y2) » для рисования прямоугольника. Точка (x1,y1) одна точка диагонали АС прямоугольника, точка (x2,y2) – противоположная. Перед записью алгоритма нужно понять чему равны координаты двух других точек.

Вспомогательный алгоритм может быть таким:


нач
. сместиться в точку (x1,y1)
. опустить перо
. сместиться в точку (x2,y1)
. сместиться в точку (x2,y2)
. сместиться в точку (x1,y2)
. сместиться в точку (x1,y1)
. поднять перо
кон

Теперь используя эти команды нарисуем домик:


использовать Чертежник
алг домик
нач
. прямоугольник(2,1,8,5)
. прямоугольник(3,2,5,4)
. прямоугольник(6,1,7,4)
. линия(1,4,5,8)
. линия(5,8,9,4)
кон
алг линия(арг вещ x1, y1, x2, y2)
нач
. сместиться в точку (x1,y1)
. опустить перо
. сместиться в точку (x2,y2)
. поднять перо
кон
алг прямоугольник(арг вещ x1, y1, x2, y2)
нач
. сместиться в точку (x1,y1)
. опустить перо
. сместиться в точку (x2,y1)
. сместиться в точку (x2,y2)
. сместиться в точку (x1,y2)
. сместиться в точку (x1,y1)
. поднять перо
кон

Примечание: естественно, одновременно с этими командами мы можем использовать и стандартные команды чертежника (сместиться в точку, сместиться на вектор …).

Задание 1. Используя вспомогательные алгоритмы линия и прямоугольник создайте какой-либо рисунок.

Задание 2. Попробуйте переписать алгоритмы линия и прямоугольник так, чтобы рисование осуществлялось командой сместиться на вектор.

Задание 3. Составьте алгоритм «прямоугольник (арг вещ x, y, a, b)», который рисует прямоугольник с длинами сторон a и b, начиная из заканчивая в точке (х, y).

Задание 4. Нарисуйте самостоятельно, что нарисует Чертежник выполнив алгоритм:

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

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


Алгоритм на языке КуМир записывается так:

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

Описание алгоритма состоит из:
  • заголовка (часть до служебного слова нач),
  • тела алгоритма (часть между словами нач и кон).
Части "дано", "надо", а также "тип алгоритма" и "описание аргументов и результатов" могут отсутствовать.

Простейшие алгоритмы

Рассмотрим следующий вспомогательный алгоритм для исполнителя Чертежник.

Пример алгоритма

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

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

Алгоритмы с аргументами

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

Пример алгоритма

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

Слово арг означает, что у алгоритма есть аргумент (а), а вещ — то, что этот аргумент имеет вещественный тип. Команда вызова такого алгоритма может иметь вид

(в этом случае будет нарисован квадрат 2x2) или, например,
(в этом случае будет нарисован квадрат 5x5).

Алгоритмы с результатами

Алгоритм может не только получать информацию, но и отдавать ее. Для этого используется специальный вид величины — результаты .

Пример алгоритма с результатами

алг гипотенуза (вещ a, b, рез вещ c)
дано a >= 0 и b >= 0 | длины катетов треугольника
надо | c = длинa гипотенузы этого треугольника
нач
c:= sqrt(a ** 2 + b ** 2)
кон

Здесь служебное слово рез указывает на то, что величина c является результатом и ее значение будет меняться в процессе работы алгоритма. Например, после вызова

гипотенуза(3, 4, c)

Величина c примет значение 5.

Алгоритмы-процедуры и алгоритмы-функции

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

Методика изучения вспомогательных алгоритмов Основные цели:    Познакомить с понятием вспомогательного алгоритма. Познакомить с построением алгоритмов методом последовательного уточнения. Познакомить с правилами записи и исполнения вспомогательных алгоритмов с аргументами. Основные понятия:  вспомогательный алгоритм;  основной алгоритм;  вызов вспомогательного алгоритма. В школьном курсе информатики идея структурного программирования заложена в теме "Вспомогательные алгоритмы". Она по праву считается одной из главных тем в разделе "Алгоритмы", так как именно здесь отражается идея системного анализа, структурирования и конструирования. Систематическое и целенаправленное применение идей структурного подхода (в частности метода последовательной детализации) - один из путей рационального обучения учащихся технике алгоритмизации. Он полезен и в плане воспитания учащихся, т. к. развивает умение планировать свои действия при решении сложных задач, способности к общению и коллективной деятельности. Способность к структуризации – фундаментальное свойство человеческого мышления. Оно заключается в способности использовать то, что уже сделано ранее. Например, решая геометрическую задачу, мы используем теоремы, которые были доказаны ранее. Декомпозиция задачи, т.е. ее разбиение на более простые подзадачи является важнейшим приемом алгоритмизации и программирования. Алгоритмы решения таких подзадач называются вспомогательнымм, а реализующие их программы – подпрограммами (процедурами). Вспомогательный алгоритм должен:  иметь имя, с помощью которого его можно вызвать из основного или другого вспомогательного алгоритма  возвращать управление тому алгоритму, из которого был вызван  быть относительно небольшим Основной алгоритм определяет порядок вызова вспомогательных алгоритмов для решения задачи. алг АЛГ 1 нач серия команд основной алгоритм АЛГ 2 команда вызова серия команд кон алг АЛГ 2 нач вспомогательный алгоритм серия команд кон Понятие вспомогательного алгоритма является одним из базовых понятий курса информатики, а способ конструирования алгоритмов методом последовательной детализации с использованием вспомогательных алгоритмов – один из самых эффективных приемов программирования. Суть этого метода состоит в том, что любой алгоритм, как правило, сразу невозможно конкретизировать в командах, которые входят в систему команд исполнителя. Поэтому удобно начать составление алгоритма в боле ""крупных"" командах, не входящих в систему команд исполнителя, но понятных автору алгоритма. Эти ""крупные"" команды записываются как вызовы вспомогательных алгоритмов, которые затем уточняются до тех пор, пока не будут состоять из команд, понятных исполнителю. Программирование в этом случае начинается с записи основной программы, из которой идет обращение к вспомогательным алгоритмам. Очень важно, чтобы учащиеся четко представляли себе всю непростую схему действий исполнителя при обращении к вспомогательному алгоритму с конкретными аргументами и возврате в основной алгоритм с полученными результатами. Преимущества использования вспомогательных алгоритмов следует продемонстрировать на примерах, в которых вызов вспомогательного алгоритма осуществляется многократно. Например, составить алгоритм рисования числа «1919» для исполнителя «Чертежник». Учащиеся уже умеют выполнять подобные задания и составление длинного линейного алгоритма будет им неинтересно. В этой ситуации возможно ученики сами прийджут к идее вспомогательного алгоритма, обратив внимание на то, что в рисунке дважды присутствуют цифры «1» и «9» . Можно отдельно описать алгоритмы рисования этих цифр, а затем использовать их для получения числа «1919». Умение использовать вспомогательные алгоритмы следует вырабатывать у учеников как можно раньше, уже на примерах линейных алгоритмов. На первом этапе следует рассмотреть вспомогательные алгоритмы без параметров. Затее перейти к изучению алгоритмов-функций и вспомогательных алгоритмов с параметрами. Следует добиться четкого понимания учащимися какие параметры вспомогательного алгоритма являются входными, а какие выходными (результатом выполнения впомогательного алгоритма). Учащиеся должны понимать разницу между формальными и фактическими параметрами. Примеры составления вспомогательных алгоритмов на ШАЯ. 1. Алгоритм-функция, определяющая большее из двух чисел алг вещ бид (арг вещ А, В) нач если А > В то знач:= А иначе знач:= В все кон 2. Алгоритм-функция, вычисляющая факториал натурального числа N алг цел факт (арг цел N) нач цел I, Р Р:= 1 нц для I от 1 до N Р:= Р * I кц знач:= Р кон 3. Вспомогательный алгоритм, вычисляющий гипотенузу прямоугольного треугольника по его катетам алг гипотенуза(арг вещ А, В, рез вещ С) дано! А, В - катеты надо! С = гипотенуза нач С:= SQRT(A ** 2 + В ** 2) кон Примеры задач на использование вспомогательных алгоритмов 1. Вычислить a! +b! (используя вспомогательный алгоритм вычисления факториала натурального числа) 2. Найти наибольшее из чисел A, B,C (используя вспомогательный алгоритм выбора большего из двух чисел) 3. Найти наименьшее из чисел A, B,C,D (используя вспомогательный алгоритм выбора меньшего из двух чисел) 4. Два треугольника заданы своими катетами. Определить, у какого из них периметр больше (используя вспомогательный алгоритм, вычисляющий гипотенузу прямоугольного треугольника по его катетам)


Команды абсолютного и относительного смещения (х и у отсчитывается от начала координат 0,0) сместиться в точку (х, у) сместиться на вектор (а, в) (а и в отсчитывается от начала вектора) команда абсолютного смещения команда относительного смещения а в х у




Вид величины арг – объявление величин-аргументов (входных или исходных данных) – показывает вид переменных т. е., как величина используется в алгоритме Тип величины Тип переменной – область значений аргументов вещ - описание величины вещественного (действительного) типа (Пример: 2.5, 6.9, 6.0, 7.9, 3.0) цел - описание величины целого типа (Пример: 2, 0, 8, 9).


Вызов ВА с аргументами Точное имя ВА (числовые значения аргументов в соответствии с их типами через запятую в том же порядке как и в заголовке ВА) Пример. Заголовок: алг Пр 1(арг вещ а, в, с, цел н, к) Вызовы: Пр 1(0, 4, 8.2, 8, 0) ; Пр 1(4, 2, 5, 3, 9) ; Пр 1(6, 7, 4.5, 0, 7)


Пример использования ВА с аргументами для исполнителя Чертежник алг деталь нач ро(7, 2, 3); ро(7, 3, 2); ро(7, 4, 1) кон алг ро (арг вещ х, у, а) нач см в точку (х, у); опустить перо см на вектор (2*а, а); см на вектор(-2*а, а) см на вектор (-2*а, -а); см на вектор(2*а, -а) поднять перо кон Гла вный алгоритм Вспомогательный алгоритм Вызов ВА Заголовок ВА


Использование ВА с аргументами при построении изображения Используя метод последовательного уточнения и проанализирова в данное изображение можно выделить стандартную деталь – ромб, начало его рисования, параметры и количество. Отсюда следует, чтобы получить данный рисунок надо записать четыре вызова ВА в основном алгоритме и один ВА для рисования ромба с тремя параметрами х, у, а Х У у х а 2 а алг деталь нач ро(2, 2, 2); ро(0, 7, 3); ро(4, 7, 1); ро(9, 4, 2) кон алг ро (арг вещ х, у, а) нач см в точку (х, у); опустить перо см на вектор (2*а, а); см на вектор(2*а, -а) см на вектор (-2*а, -а); см на вектор(-2*а, а) поднять перо кон