Научная статья на тему 'Решение задач в среде ЛогоРайтер'

Решение задач в среде ЛогоРайтер Текст научной статьи по специальности «Математика»

CC BY
398
57
i Надоели баннеры? Вы всегда можете отключить рекламу.
i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Решение задач в среде ЛогоРайтер»

Г.Л.Луканкин А.В.Диков

РЕШЕНИЕ ЗАДАЧ В СРЕДЕ ЛОГОРАЙТЕР

В настоящее время всё большую популярность в нашей стране приобретает язык программирования Лого. Появилась даже русифицированная версия этого языка ЛогоРайтер 2.0 фирмы ЮБ!. Журнал "Информатика и образование" печатал интересные статьи учителя А.Г.Юдиной, освещающие опыт её работы со школьниками на языке ЛогоРайтер. Чему же обязан своей популярностью этот язык? Ведь появился он на свет примерно в то же время, что и все известные языки программирования. Ответы на этот вопрос можно найти в книге его создателя С. Пейперта "Переворот в сознании: дети, компьютеры и плодотворные идеи". Мы лишь отметим, что, вероятнее всего, образовательный потенциал Лого уже начал проявлять себя благодаря экспериментальной работе многих учителей информатики, поэтому появилась потребность включить изучение самого Лого и его преподавания в рабочие планы педагогических вузов. Так, в Пензенском государственном педагогическом университете им. В. Г. Белинского благодаря нашим усилиям уже второй год ведётся спецкурс по данной теме.

В статье мы предлагаем разработки нескольких уроков по темам, связанным со списками и простыми словами. Каждая тема - это параграф учебника (ещё не опубликованного). Нумерация тем начинается с числа 21 потому, что учащиеся для изучения их должны освоить некоторый объём учебного материала. Предлагаемая методика выработана в результате практической работы в девятых классах лингвистической гимназии № б г. Пензы и теоретических размышлений авторов. Нам кажется что Лого особенно интересен для школ или классов с гуманитарным направлением обучения, так как это пока единственный язык, развивающий алгоритмическое мышление в тесном взаимодействии с образным. Кроме того, важной особенностью среды Лого является наличие кибернетического существа - черепахи, наделённой способностями, похожими на способности человека. Осознание обучаемыми того, что они сами выступают в роли учителей черепахи, приводит их в неописуемый восторг и делает процесс обучения желанным.

21 I ЧЕРЕПАШКА ПРЕВРАЩАЕТ ЧИСЛА В СТОЛБЦЫ

100

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

столбчатой диаграммой. Научим нашу черепашку !-------

рисовать по заданному набору чисел соответствующие им столбцы.

90

100 т 50 1 1 25 35

0 Х П П А ^ • -50 -80

-50 | 3 4

-100 -70

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

№ значение :т число элементов :т

1 [ 10 25 -15 2-100 13 18] ■ 7 •

2 [7 12 156-67-98 52] 6

3 [-15-17-19] 3

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

Списком называют упорядоченную последовательность элементов. Это значит, что каждый элемент списка имеет свой порядковый номер. Так, например, в приведенном выше первом списке :т элемент 13 имеет номер б, а элемент -100 номер 5.

Кроме того, в списке выделяют голову, хвост и тело. Головой списка называется первый его элемент, хвостом - последний элемент. Все остальные элементы (кроме головы и хвоста) составляют тело списка. В первом списке :т головой является число 10, хвостом число 18, элементы 25, -15, 2, -100, 13 составляют тело данного списка.

Для работы с перечисленными выше частями списков в Лого есть следующие служебные слова - функции.

первый а Дает первый элемент списка а

последний а Дает последний элемент списка а

кпрв а Дает список а без первого элемента (кроме первого)

кпсл а Дает список а без последнего элемента (кроме последнего)

сколько а Дает число элементов списка а

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

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

повтори сколько :т [пусть "ч первый :т пусть "т кпрв :т]

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

№ ч ■ ■■ т

1 10 [25 -15 2-100 13 18]

2 25 [-15 2 -100 13 18]

3 -15 [2-100 13 18]

4 2 [-100 13 18]

5 -100 [ 13 18]

6 13 [18]

7 18 []

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

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

ширина столбца = ширина экрана / число столбцов - длина промежутка

пусть "шс 300 I сколько :т -10 Длина промежутка между столбцами - это какое-то постоянное число, например, 10 шагов черепахи. Высота столбца (длина прямоугольника) - это есть само число из списка т., однако надо учитывать, что если число больше размера экрана, то столбец не уместится на экране. Начнем составлять процедуру.

это столбец :ч вп :ч пр 90 вп :шс пр 90 вп :ч лв 90 пп вп 10 лв 90 по конец

это ось

пр 90 вп 300 нд 300 лв 90 конец

это гистограмма :т пусть "шс 300 I (сколько :т) -10 пп лв 90 вп 150 пр 90 по ось пр 90 вп 5 лв 90 повтори сколько :т [пусть "ч первый :т столбец :ч пусть "т кпрв :т] конец

Команды пп л в 90 вп 150 пр 90 по устанавливают черепашку на позицию, с которой она начнет рисовать первый столбец. По команде ось черепашка проведёт горизонтальную прямую в середине экрана, от которой будут отходить столбцы вверх или вниз. Если число положительное, то столбец растет вверх, а если отрицательное - вниз. Самое удивительное состоит в том, что при написании процедуры гистограмма мы не учитывали этот факт! Зато черепаха понимает, что если в команде вперед :ч число :ч отрицательное, то надо идти назад. По команде гистограмма [-15 -55 35 20 90] черепашка нарисует следующий рисунок.

28

Чтобы написать числа в поле черепашки, можно воспользоваться клавишей "НАДПИСЬ" (F8). После нажатия на эту клавишу текстовый курсор перемещается в поле черепахи и мы можем им управлять. Для возврата в поле команд необходимо нажать один раз клавишу ESC.

О

X ВОПРОСЫ И УПРАЖНЕНИЯ ;

II

3

4

Что такое гистограмма? Для чего она предназначена? Что такое список? Из каких элементов он состоит? Какие в словаре Лого есть служебные слова для работы со списками? К какой группе слов относятся значения слова

а) первый, в) кпрв, д) сколько.

б) последний, г) кпсл,

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

(7^ Напишите процедуру, которая по заданному списку имен учеников подсчитает число учеников с именами Борис, Камиль, Сергей, Лиана, Лариса. [8^ Напишите процедуру, которая по заданному списку:

а) определяет, является ли список пустым;

б) находит сумму всех содержащихся в списке чисел;

в) находит среднее арифметическое всех чисел списка;

г) находит сумму первого и предпоследнего элементов списка;

д) находит число положительных элементов списка;

е) находит число четных элементов;

ё) находит число элементов, кратных 3 и не кратных 5. Напишите процедуру, которая по заданному простому слову:

а) находит число букв а в заданном слове;

б) определяет, является ли заданное слово пустым;

в) есть ли в этом слове буквы о, б или т;

г) есть ли в этом слове буквы о, б, т;

д) определяет, совпадает ли первая и последняя буквы этого слова. Напишите процедуру - функцию, дающую по заданному списку слов

число слов списка, которые:

а) начинаются и оканчиваются одной и той же буквой;

б) начинаются с той же буквы, что и следующее слово;

в) совпадают с последним словом.

В

КРИВАЯ ДРАКОНА

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

1

Кривая начинается с отрезка 1 и на каждом углу поворачивается на 90 градусов либо направо, либо налево. Построим последовательность двух чисел: 1 и 3. Эта последовательность должна отражать ход нашей кривой, то есть очерёдность поворотов кривой. Присвоим код 1 для поворота налево и код 3 для поворота направо. Для кривой на рисунке последовательность следующая:

113 1133

Кривую можно продолжить дальше, и при этом окажется, что если очередной поворот имеет четный номер, то он равен тому члену последовательности, номер которого получается делением номера очередного четного поворота на 2. Например, следующий член в нашей последовательности имеет порядковый номер 8. Это число четное, значит, сам член равен члену с номером 4 (8 / 2), а это есть 1. Таким образом, восьмой член последовательности равен 1.

В случае, когда номер очередного поворота нечетный, член последовательности равен остатку от деления данного номера на число 4. Например, следующий неизвестный член последовательности имеет номер 9. Это нечетное число. Поэтому сам член последовательности равен 1.

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

В качестве параметров процедуры можно взять, во-первых, число поворотов кривой (обозначим :г), во-вторых, размер отрезка (обозначим: шаг). Для того, чтобы строить в процедуре последовательность, надо завести список, в который будут добавляться очерёдные вычисленные значения поворотов. Сделать это помогут новые служебные слова Лого.

элемент а р Дает элемент слова или списка р с номером а

вксп а р Помещает значение а в конец списка Р

внсп а р Помещает значение а в начало списка р

входит? а р Дает истина, если а есть в р, иначе дает ложь

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

Пусть у нас начальный список будет содержать 3 первых элемента последовательности. Обозначим список именем т.

пусть "т [1 1 3] Следующий 4 элемент можно внести в конец списка командой

пусть "т вксп 1 :т после выполнения которой будем иметь список т [1 1 3 1] уже из четырёх элементов. В процедуре построим последовательность команд, по которым будут вычисляться очередные значения поворота кривой и вноситься в конец списка т. Так как число поворотов есть параметр г, то эти команды должны выполняться г раз.

проверка четности очередного поворота

вычисление^ значения поворота (1 или 3)

повтори :г /// ^^

[еслииначе (остаток :ном 2) = 0 [пусть "и элемент (:ном 12) :т]

[пусть "и остаток :ном 4] пусть "т вксп :и :т пусть "ном тном + 1]

внесение\ значения поворота в список поворотов^

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

переход к следующему повороту

У

Осталось добавить команды для черепашки, чтобы она рисовала кривую. Черепашка должна делать такое количество шагов, какое мы дадим параметру шаг, затем она должна повернуть в соответствии со значением поворота, определенным в нашей последовательности поворотов.. Если значение 1, то черепаха поворачивает налево 90, если 3 - направо 90.

это дракон_1 :г :шаг пр 90 вп :шаг пусть "т [1 1 3] пусть "ном 4 лв 90 вп :шаг лв 90 вп :шаг пр 90 вп :шаг повтори :г [еслииначе (остаток :ном 2) = 0

[пусть "и элемент (:ном / 2) :т] [пусть "и остаток :ном 4] пусть "т вксп :и :т

если :и = 1 [лв 90] если :и = 3 [пр 90] вп :шаг пусть "ном :ном + 1] конец

дракон_1 64 10

дракон_1 128 10

Э-Пз

о

су

п

I I

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

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

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

тельный параметр :к, который будет задавать число шагов для округления угла. Поворот на 90 градусов разобьём на два поворота по 45 градусов: поворот на 45, затем вперед :к и снова поворот на 45.

это дракон_2 :г :шаг :к пп новместо [-70 30] по пр 90 вп :шаг пусть "т [1 1 3] пусть "ном 4 лв 45 вп :к лв 45 вп :шаг лв 45 вп :к лв 45 вп :шаг пр 45 вп :к пр 45 вп :шаг повтори :г

[еслииначе (остаток :ном 2) = 0

[пусть "и элемент (:ном / 2} :т] [пусть "и остаток :ном 4] пусть "т вксп :и :т если :и = 1 [лв 45 вп :к лв 45] если :и = 3 [пр 45 вп ж пр 45] вп :шаг пусть "ном :ном + 1] конец

дракон_2 256 3 3

Дополнительную информация о кривых дракона можно найти в [ 2, 5 ].

X

ВОПРОСЫ И УПРАЖНЕНИЯ

?

Какие из новых служебных слов Лого являются командами, а какие -функциями?

[2| В каком из четырёх новых служебных слов параметром может быть простое слово?

3 | Каким свойством обладают кривые дракона?

¡71 Напишите процедуру, которая напечатает заданный список слов в обратном порядке.

Составьте процедуру, которая по списку т строит два новых списка: т1 -из положительных элементов списка т и т2 - из остальных элементов списка т.

Составьте процедуру, которая по заданным двум спискам формирует третий список, состоящий из элементов:

а) входящих в оба исходных списка;

б) первого списка, не входящих во второй список;

в) первого и второго списков.

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

РЦ Составьте процедуру, которая в заданном слове определяет номера:

а) первой буквы о; в) всех букв п, г, т;

б) всех букв е; г) последней буквы а.

Составьте процедуру, которая по заданному списку учеников, их роста и

веса, подсчитает число учеников, имеющих рост выше :р и вес меньше :в. Пример списка: [ [Петров 50 155] [Сидоров 52 156] [Иванова 49 150] ].

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

(111 Пилообразный текст. Составьте процедуру, по которой черепаха распечатает заданный текст в необычной форме: в первой строке - одно слово, каждая следующая строка должна быть хотя бы несколько длиннее предыдущей; когда очередная строка имеет заранее указанную максимальную длину, а текст не поместился в ней, снова повторяется то же самое, начиная со строки, состоящей из одного слова, - печатается новый зубец "пилы" [10].

¡111 Составьте процедуру, дающую список чисел, полученных из заданного списка следующим образом:

х-1, хг, ..., хп - элементы исходного списка,

Х1 - хп, х2- хп, ..., хп-1 - хп - элементы, которые надо получить.

Он

вступил

в темные

широкие сени,

от которых подуло

холодом, как из погреба.

Из сеней он попал в комнату,

тоже темную, чуть-чуть озаренную

светом, выходившим из-под широкой

щели,

находившейся: внизу двери. Отворивши эту дверь^он наконец очутился

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

происходило мытье полов и

сюда на время нагромоздили всю мебель.

в

ЧЕРЕПАХА НАХОДИТ ПАЛИНДРОМЫ

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

ИДИ

потоп

КАБАК

ИСКАТЬ ТАКСИ

ЧИН ЗВАН МЕЧЕМ НАВЗНИЧЬ

121 202 1331 42 524 10 201

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

(слово а р у ...) Дает слово, склеенное из а, р, у и т. д.

слово? а Дает истина, если а простое слово, иначе - ложь

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

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

это палиндром :т пусть Мт1 " пусть "т2 :т повтори сколько :т [пусть "т1 слово :т1 последний :т пусть "т кпсл :т] еслииначе :т2 = :т1 [выход "истина] [выход "ложь]

конец

т1

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

казак а

каза к

каз ка

ка каз

к каза

(Г казак

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

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

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

Ф исходное простое слово "просматривается" по одному символу, Ф формируется новое слово, исходя из условий задачи. Например, заменить в слове все буквы т на символ +. Исходное слово обозначим переменной :ис, новое слово - переменной :нс.

это типичная_задача :ис пусть "не " повтори сколько :ис [пусть "буква первый :ис еслииначе :буква = "т [пусть "не слово :нс "+]

[пусть "не слово :нс :буква]

пусть "ис кпрв :ис] выход :нс конец

По команде пиши типичная_задача "тратата черепашка выведет в поле строку +ра+а+а.

X вопросы и упражнения ?

11 Что такое палиндром?

Какие существуют приёмы для обработки простых слов? ■ I Какую операцию над простыми словами совершает новое служебное слово:

а) слово; б) (слово ...) в) слово?

Напишите процедуру, которая преобразует исходное простое слово, заменив в нем:

а) все восклицательные знаки точками;

б) каждую точку многоточием (тремя точками);

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

в) каждую из групп стоящих рядом точек одной точкой.

(б^ Составьте процедуру, которая по заданному простому слову дает:

а) все символы, расположенные до первого двоеточия включительно;

б) все символы, расположенные после первого двоеточия;

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

а) наибольшее число идущих подряд символов /;

б) истину, если в слове есть пять идущих подряд букв е.

Составьте процедуру, которая в заданном простом слове исключает

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

(ЁЦ Составьте процедуру, которая в заданном простом слове заменяет группу символов это на группу то.

(э^ Составьте процедуру, которая в заданном простом слове заменяет каждый символ, встречающийся после первого вхождения символа * на -. Если нет символа *, то оставить слово без изменения.

(10 1 Составьте процедуру, которая в заданном простом слове удалит все запятые, предшествующие первой точке, и заменит знаком = все цифры 4, встречающиеся после первой точки.

( 11 | Составьте процедуру, которая в заданном простом слове удалит все буквы а и повторит каждый символ, отличный от а.

(12 | Составьте процедуру, которая по заданному простому слову выяснит:

а) входит ли в него буква ю;

б) верно ли, что в этом слове есть все буквы, входящие в слово шина;

в) имеется ли в этом слове пара соседствующих букв но или он.

ЧЕРЕПАХА ИЗУЧАЕТ ТАЙНОПИСЬ

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

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

Примером простого шифра является шифр Цезаря, названный в память о том, что им пользовался еще Юлий Цезарь (100 - 44 г.г. до н.э.). Шифр основан на сдвиге букв алфавита. В алфавит Лого, как известно, входят буквы латинского и русского алфавитов и специальные знаки, всего 256 символов составляют этот алфавит.

м н Е н Е О Б X

Т| с В о: м и Д О

р Е т т V 'С я

ю ю ю и м А в с

9686 9613 7546 2206

1477 1409 2225 4355

8829 0575 9991 1245

7431 9874 6951 2093

0816 2982 2514 5708

3569 3147 6622 8839

8962 8013 3919 9055

1829 9451 5781 5154

<

К 2 1 х

3 Ц

е

© 1 О * ♦ * ф • □

■4 * !! <П 1 1

Г ¡1 # 5 У. £ «

■ 0 1 2 3 4 5 6

— > о А В С Т> Е

Ь М N О Р ъ Л 5 Т

[ N 1 л к а Ь с

и к 1 И п о р Ч г

у г -С ■ ■ > ^ й А Б

И И К Л М н О П Р

Ч Ш Щ ъ Ы ь Э Ю Я

ж о м й к л м н о

Ч | г Ъ 11 II II д £1 Тт л К

|_ Г Г + + J г

т а ф X И ч ш ш, ъ

ё ф- -ф

0 с? 2

ф -Э и_

1 > * +

7 8 9 ш ■ ■ я

Ж С Н I 1Т

и и Ы X V

а е Г Я ь

г t и V и

В Г Д Е Ж

С т 9 Ф X

а б в Г д

п :::: 1

л Л X 1 т

"«Г Т1Г р

ы Ь э ю я

- II 5 ■

Каждый символ алфавита в Лого имеет свой порядковый номер (код). Так, например, знак ? имеет код 63, а буква П - код 143. Черепаха знает все коды символов и может напечатать символ по заданному ей коду или напечатать код заданного символа (коды начинаются с номера 0 и заканчиваются номером 255). Для того, чтобы попросить черепашку сделать это, надо сообщить ей следующие новые служебные слова.

символ а Дает символ по коду а

код а Дает код символа а

По команде пиши код 77 черепаха выведет на экран число 143, а по команде пиши символ 63 напечатает знак ?. Как видно из примеров, в функции код аргумент должен быть простым словом, но также может быть переменной или выражением со значением простое слово, а в функции символ - числом, либо числовой переменной, либо арифметическим выражением.

Шифр Цезаря основан на том, что каждая буква исходного сообщения сдвигается относительно алфавита вправо на какое-то заранее определенное число, называемое ключом. Сдвиг осуществляется по кругу, то есть последним символам будут соответствовать первые. Например, для ключа 3 слово ЛОГОРАЙТЕР перейдет в ОСЖСУГМХИУ.

ЛОГОРАИТЕР ОСЖСУГМХИУ

J

Составим процедуру, по которой черепаха будет делать шифровку из исходного текста. Исходный текст будем задавать в виде списка. Обозначим список переменной :text, ключ к шифру переменной :кеу.

Процедура /''это шифр_Цезаря .text :кёу

пусть "j 1 пусть "newtext [ ] повтори сколько :text [пусть "eurword элемент :j :text пусть "newword шифр_слова : eurword пусть "newtext вксп : newword :newtext пусть "j :j + 1 ] выход ¡newtext конец

шифр_Цезаря из списка слов text берет последовательно по одному слову, присваивая каждое слово переменной newword. Интересен новый способ извлечения слов из списка. Если раньше мы брали из списка первый элемент, затем укорачивали список на этот элемент и повторяли всё снова, то здесь присутствует указатель номеров слов (переменная j), поэтому для извлечения очередного слова используется служебная функция элемент, одним из аргументов которой является переменная j.

Каждое слово, извлечённое из списка text, обрабатывается процедурой шифр_слова. Эта процедура кодирует текущее слово и создает новое, уже зашифрованное слово newword, которое процедурой шифр_Цезаря помещается в список newtext.

Процедура шифр_слова тем же способом (указатель номеров - переменная i) извлекает из текущего слова eurword по одной букве, затем с помощью функции код находит код текущего символа, после чего к коду прибавляет ключ key

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

присваивает

переменной

newcode

закодированную

букву

извлекает очередную букву

это шифр_слова :curword пусть "i 1 пусть "newword повтори сколько :curword

[пусть "newcode (код (элеменГгтГТсип/Уо^)) + :кеу если : newcode > 255 [пусть "newcode : newcode - 255] пусть "newword слово :newword символ :newcode пусть "i :i + 1] выход : newword конец

условие зацикливания кодировки

приклеивает закодированную

букву к слову newword

По команде

пиши шифр_Цезаря [ЛОГОРАЙТЕР - замечательный язык] 2

черепашка выведет на экран криптограмму:

НРЕРТВЛФЗТ / йвозщвфзнюпэл ёйэм

Раскрыть шифр Цезаря не составляет большого труда. Например, можно для этого воспользоваться процедурой шифр_Цезаря и здравым смыслом. Перебирая различные значения ключа, можно натолкнуться на нужный текст. Так, например, при значении -2 (или 253) ключа key из приведенной выше криптограммы получим исходный текст.

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

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Дополнительную информацию по данной теме можно найти в [ 1, 5, 6, 10 ].

X ВОПРОСЫ И УПРАЖНЕНИЯ ?

Что такое криптография? Что такое криптограмма? Какие существуют методы кодирования текста?

Какой текст будет содержать криптограмма текста "Вундеркинд", зашифрованного методом Цезаря с ключом 255?

Какое количество символов содержится в алфавите Лого? С помощью какого служебного слова можно узнать номер символа в алфавите? С помощью какого служебного слова можно напечатать символ по его номеру в алфавите?

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

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

(8J Шифр Гронсфельда. Его ключ - пятизначное число. Буквы текста разбиваются на группы по пять. Первая группа шифруется по методу Цезаря с ключом, роль которого играет первая цифра пятизначного числа, вторая группа - с ключом, равным второй цифре, и так далее. Составьте процедуру, которая будет шифровать текст методом Гронсфельда.

("Ц Составьте процедуру, которая будет шифровать последовательность из нулей и единиц (или же, например, точек и тире). Пусть a-i, ..., ап - такая последовательность. То, что предлагается в качестве её шифра, - это последовательность bi, ..., bn, образованная по следующему правилу: ,

Г1, если ai = аи, bi = ai, bi = 1

10 в противном случае.

[ Ю | Исправление ошибок. Пусть по некоторому каналу связи передаётся сообщение, имеющее вид последовательности нулей и единиц (или точек и тире). Из-за помех возможен ошибочный приём некоторых сигналов: нуль может быть воспринят как единица и наоборот. Поэтому, чтобы скорректировать сообщение, при приёме каждый сигнал передается трижды, то есть он дублируется. Три последовательные цифры при расшифровке заменяются той цифрой, которая встречается среди них по крайней мере дважды. Составьте процедуру корректировки.

(11 | Составьте процедуру, которая переведёт все маленькие буквы заданного слова в большие, а большие в малые.

СТОЛБЦЫ ВЫСТРАИВАЮТСЯ ПО РОСТУ

Существует много задач, в которых необхо- |--------

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

жить по алфавиту. Процесс упорядочивания на- >------

зывают еще и сортировкой.

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

Научим и мы нашу черепашку расставлять элементы списка в заданном порядке. Имеется много различных методов сортировки, среди них есть простые и сложные. Мы рассмотрим простой метод. Возьмем сначала список т, элементами которого будут только числа. Создадим список тн, в который будем помещать элементы в заданном порядке, например в порядке возрастания. Это значит, что мы должны найти в исходном списке т наименьший элемент и поместить его в конец списка тн. Затем исключить этот элемент из списка т и повторить все снова, и так будем делать до тех пор, пока в списке т не останется элементов.

[(¡2) Q QB (Э]

-93

|)В

15» ^ ] ]

0 0 0

[

фв]

[0 [0в]

-50

15

[0Q 0 0 [ ]

-93

-50

100

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

это сортировка :т пусть "тн [ ] повтори сколько :т [пусть "тн вксп мин :т :тн пусть "т исключить :т мин :т] выход :тн " конец

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

это мин :с

пусть 'Ч первый :с повтори сколько :с [ если и > первый :с [пусть "I первый :с] пусть "с кпрв :с] выходм конец

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

это исключить :т пусть "т1[] повтори сколько :т

[если не (первый :т) = :1 [пусть ,гт1 вксп первый :т :т1] пусть "т кпрв :т] выход :т1 конец

По команде пиши сортировка [100 -50 75 28 -93 15 85] черепаха выведет в своё поле уже упорядоченную последовательность чисел по возрастанию, а именно: -93 -50 15 28 75 85 100.___

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

———-------------------—Ц столбиковую гистограмму.

гистограмма сортировка [100 -50 75 28 -93 15 85] Однако, чтобы команда гистограмма выполнялась, необходимо присутствие в рабочей памяти компьютера соответствующей процедуры. В ЛогоРайтер есть служебные команды, которые позволяют организовать работу с процедурами, хранящимися на других листах (т.е. не на текущем листе).

возьмипроцедуры а Загружает в память процедуры с листа а

сотрипроцедуры Стирав* в памяти внешние процедуры

процедуры Дает список имен внешних процедур

Таким образом, имея на текущем листе процедуры, выполняющие сортировку, можно дать команду возьмипроцедуры "018Т0С11А, после чего коман-

да гистограмма будет выполняться, так как на листе ФЗТСЮЯА имеется соответствующая процедура.

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

О

X ВОПРОСЫ И УПРАЖНЕНИЯ ;

Что такое сортировка? Для чего нужна сортировка? Какой метод сортировки реализован в процедуре сортировка? Как изменить процедуру сортировка, чтобы элементы выстраивались по убыванию?

Присутствуют ли среди новых неслужебных слов команды? Появятся ли на изнанке новые процедуры после выполнения команды возьмипроцедуры?

ГбЦ Останутся ли на изнанке процедуры после выполнения команды сотрипро-цедуры?

Составьте процедуру, дающую среднее арифметическое максимального и минимального элементов списка.

[Щ Задача поиска. Составьте процедуру, которая по заданным списку и элементу будет давать номер данного элемента в списке. Если же такого элемента в списке не окажется, то должно выдаваться слово нет

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

( Ю | Пусть задана таблица футбольного чемпионата (например, процедурой футбол_таб), в которой все элементы, принадлежащие главной диагонали равны нулю, а каждый элемент, не принадлежащий главной диагонали, равен 2,1 или 0 (числу очков, набранных в игре: 2 - выигрыш, 1 - ничья,.0 - проигрыш).

Составьте процедуру, которая:

а) найдет число команд, имеющих больше побед, чем поражений;

б) определит номера команд, прошедших чемпионат без поражений;

в) выяснит, имеется ли хотя бы одна команда, выигравшая более половины

'это футбол_таб выход [[0 1 12 0 1] [1 00 1 2 0] [1 2 0 0 1 2] [01 0001] [20 1 20 2] [1 2 01 0 0]]

конец

игр.

БИБЛИОГРАФИЯ^

— ■ I "ч> I -и 1

Абрамов С.А. и др. Задачи по программированию. М.: Наука, 1988. 2л Аммерал Л. Программирование графики на Турбо Си. М.: Сол Систем, 1992. ЗЛ Аммерал Л. Принципы программирования в машинной графике. М.: Сол Сис-темЛ992.

4Л Арсак Ж. Программирование игр и головоломок. М.: Наука, 1990.

Болл У., Коксетер Г. Математические эссе и развлечения. М.: Мир, 1986. Гарднер М. От мозаик Пенроуза к надежным шифрам. М.: Мир, 1993. Гарднер М. Математические досуги. М.: Оникс, 1995. Гарднер М. Математические головоломки и развлечения. М.: Оникс, 1994. Гарднер М. Математические новеллы. М.: Мир, 1974. 10Л Дагене В.А., Григас Г.К., Аугутис К.Ф. 100 задач по программированию. М.: Просвещение, 1993.

Дьяконов В.П. Язык программирования Лого. М.: Радио и связь, 1991. 12^ Евстигнеев В.А. Применение теории графов в программировании. - М.: Наука, Ш85.

13Л Липский В. Комбинаторика для программистов. М.: Мир, 1988. .14^ Лойд С. Математическая мозаика. М.: Рипол, 1995.

Николов Р., Сендова Е. Начала информатики. Язык Лого. М.: Наука, 1989. 16Л Пайтген X., Рихтер П. Красота фракталов. М.: Мир, 1993.

i Надоели баннеры? Вы всегда можете отключить рекламу.