Меню
Видеоучебник

Строковые величины

Урок 28. Творческие задания в Sсratch 5-6 классы

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

Конспект урока "Строковые величины"

Вопросы:

·     Определение строки.

·     Блоки обработки строк.

·     Применение строк.

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

Что такое строковая величина или строка? Строкой в программировании называется произвольная последовательность символов алфавита. Строкой может быть слово, фраза, целый текст или же вообще случайная цепочка букв и цифр. Так, все предсказания нашего шара из прошлого урока были строками, как и названия городов в проекте «Путешествие». Вводить строки нам уже приходилось, но вот обрабатывать и изменять их мы ещё не пробовали.

Давайте посмотрим, что можно делать со строками в Scratch. Все блоки для обработки строк расположены в категории «Операторы». Для строк есть три уникальных блока-сенсора. Это блоки «Слить», «Буква» и «Длина». Также для строк работают те же датчики сравнения, что и для чисел. Рассмотрим это подробнее.

Начнём с блоков сравнения. Строки, как и числа, можно сравнить между собой. Например, вынесем в рабочее поле блок «<». В его левой ячейке запишем слово «Кот», а в правой ячейке – слово «Слон». Теперь проверим, действительно ли кот меньше слона. Для этого щёлкнем по блоку левой кнопкой мыши. Над блоком появилось слово «true», или «Истина». То есть кот действительно меньше слона. Казалось бы, что здесь удивительного... Даже самый большой кот меньше самого маленького слонёнка. Но Scratch не настолько умён и на самом деле не знает, что означают слова, которые мы вводим. Так, если мы заменим слово «Кот» на «Кит» – Scratch будет утверждать, что кит меньше слона, хотя на самом деле это неправда.

Всё потому, что сравнение строк в Scratch происходит иначе. Строки сравниваются посимвольно. Что это означает? Сперва сравниваются первые буквы каждой строки, если они совпадают – сравниваются вторые, если и они совпадают – сравниваются третьи и так далее. Строки считаются равными только тогда, когда все их символы совпадают. Но как буквы сравниваются между собой? Всё просто. Меньше та буква, которая раньше по порядку встречается в алфавите. Так мы можем проверить, что буква «А» меньше буквы «Бэ». Соответственно в словах «Кот» и «Слон» сперва сравниваются буквы К и С. Так как буква К встречается в алфавите раньше буквы С, она меньше, а значит, строка «Кот» меньше строки «Слон». Также можно сравнить слова «Самолёт» и «Самосвал». Первые четыре буквы в этих словах совпадают, а значит, будут проверяться пятые буквы. Буква Л встречается в алфавите раньше буквы С, а значит, строка «Самолёт» меньше строки «Самосвал».

Здесь нужно обратить внимание, что Scratch не видит разницы между прописными и строчными буквами и считает их равными, при этом символы цифр следуют в алфавите Scratch раньше букв русского и английского алфавитов. Ещё один нюанс будет виден, если мы с помощью блока «Меньше» попытаемся сравнить слова «Кол» и «Колонна». Scratch будет утверждать, что строка «Кол» меньше. Так, если одна строка совпадает с началом другой строки, то меньше будет та строка, которая короче.

Теперь посмотрим, как работают блоки-сенсоры. Блок «Слить» позволяет соединить две строки. Удалим лишние блоки из рабочего поля и для примера в категории «Данные» создадим новую переменную, которую назовём «Строка». Дальше перетащим в рабочее поле блок «Задать значение». В качестве значения установим блок «Слить» из категории «Операторы». В левой ячейке блока запишем слово «Стекло», а в правой – слово «Вата». Щёлкнем по получившемуся блоку левой кнопкой мыши. Теперь значение переменной «Строка» изменилось на «Стекловата». Так, результат блока «Слить» – это строка, которая получается присоединением к концу строки из левой ячейки блока строки из правой ячейки блока.

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

Блок-сенсор «Длина» для строк работает так же, как и сенсор «Длина списка» для списков. Длиной строки называется количество символов, которые в ней содержатся. Так, с помощью блока «Длина» найдём длину строки, которая хранится в переменной «Строка». Действительно, длина строки «Стекловата» составляет 10 символов, по количеству букв в слове. А теперь вместо переменной зададим в блок «Длина» строку «Мама мыла раму». Прежде чем запустить блок на выполнение, попробуйте сами посчитать длину этой строки. Если вы насчитали в этой строке 12 символов, то вы ошиблись. На самом деле в ней 14 символов. Дело в том, что пробелы между словами также считаются полноценными символами строки. В алфавите Scratch символ «Пробел» встречается раньше всех букв и цифр.

Мы рассмотрели операции обработки строк в Scratch. Вы могли заметить, что в них есть что-то от чисел, а что-то от списков. Теперь попробуем использовать их на практике. Сперва научим Царапку здороваться с нами по имени.

Уберём всё лишнее из рабочего поля. И начнём составление скрипта для Царапки. Пусть он запускается при нажатии на зелёный флажок. Чтобы поздороваться с нами по имени, Царапка сперва должен как-то узнать наше имя. Самый простой способ сделать это – спросить. Для этого добавим в скрипт блок «Спросить и ждать». В качестве вопроса зададим «Как тебя зовут?».

Дальше с помощью блока «Сказать» сделаем, чтобы Царапка произносил текст приветствия. Подумаем, что это будет за текст. Если пользователь назвался Васей, то Царапка должен ответить: «Привет, Вася! Приятно познакомиться». При этом имя в тексте будет изменяться в зависимости от ввода. Так? можно разделить этот текст на три части. Первая часть – слово «Привет» с запятой и пробелом, вторая часть – введённое имя и третья часть – то, что идёт после имени. Соединить эти части можно с помощью слияния строк. Установим внутрь блока «Сказать» блок «Слить». Однако в этом блоке всего две ячейки, при этом нам нужно соединить три строки. Чтобы это сделать, добавим в одну из ячеек блока «Слить» ещё один блок «Слить». Так мы получим блок «Слить» с тремя ячейками. Заполним их. В первой ячейке будет слово «Привет», запятая и пробел. Во второй ячейке будет имя пользователя, которое можно получить с помощью сенсора ответа. И в третьей ячейке – восклицательный знак, пробел, слова «Приятно познакомиться» и точка.

Запустим скрипт на выполнение. Царапка спрашивает наше имя. Назовёмся Петей. Царапка ответил «Привет, Петя! Приятно познакомиться.». Всё работает правильно. Задача решена.

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

Удалим из рабочего поля спрайта всё лишнее. Сделаем так, чтобы пользователь задавал книги в список и книги выставлялись в нужном порядке при нажатии на зелёный флажок. Создадим список, который назовём «Книги». Скрипт будет запускаться при нажатии на зелёный флажок.

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

Создадим переменную-указатель, которую назовём i. Этот указатель будет указывать на первую книгу в паре. Так как проверять книги нужно с начала списка, зададим переменной i значение 1. Дальше добавим цикл для перестановки книг. Это будет цикл с заданным условием окончания работы «Повторять, пока не...». Пока условие окончания работы цикла задавать не будем. В цикл установим блок для полной формы ветвления. В условии ветвления с помощью блока > будем сравнивать i-тую книгу списка «Книги» с i + 1 книгой списка. Как это будет работать? Ветвление будет срабатывать, если на позиции с номером i стоит книга, которая в алфавитном порядке должна следовать после i + 1 книги. В этом случае мы должны элементы списка с индексами i и i + 1 поменять местами.

Как поменять местами элементы списка? Для этого заведём дополнительную переменную, которую назовём p. Зададим переменной p значение i-того элемента списка «Книги». Затем заменим i-тый элемент списка «Книги» на значение i + 1 элемента списка. И наконец, заменим i + 1 элемент списка на значение, которое раньше было у i-того элемента, а теперь хранится в переменной p. После того как мы поменяли книги в паре местами, мы должны вернуться в начало списка. Для этого зададим переменной-указателю i значение 1. В противном случае, если книги в паре стоят в алфавитном порядке и мы ничего не меняли, мы должны перейти к проверке следующей пары. Для этого переменную-указатель i увеличим на 1.

Теперь подумаем над условием окончания работы цикла. Цикл должен заканчиваться, когда мы доберёмся до конца списка, ничего не переставляя. Так цикл будет заканчиваться, когда переменная-указатель i станет указывать на последний элемент списка. То есть при равенстве переменной i длине списка «Книги».

Протестируем то, что у нас получилось. Добавим в наш список несколько книг. Пусть это будут «Му-му», «Война и мир», «Тихий Дон», «Евгений Онегин», «Мастер и Маргарита», «Недоросль» и «Герои нашего времени».

Нажмём на зелёный флажок. Книги в списке изменили порядок, теперь они расположены в алфавитном порядке. Задача решена.

Мы узнали:

·     Строкой называется произвольная последовательность символов алфавита.

·     Длиной строки называется количество символов в ней.

·     Строки сравниваются между собой посимвольно.

·     Для обработки строк в Scratch есть блоки: «Слить», «Буква» и «Длина» из категории «Операторы».

494

Комментарии 0

Чтобы добавить комментарий зарегистрируйтесь или на сайт

Вы смотрели