Занятие №36 "Динамические списки"
Списки — мощный инструмент, поскольку они могут увеличиваться или уменьшаться по ходу работы программы.
Предположим, вы пишете приложение — классный журнал, в который учителя вводят количество баллов за правильные ответы в контрольных. Причем оценки могут обрабатываться в дальнейшем: учителю может понадобиться найти максимальный балл класса, минимальный балл, среднее арифметическое, медиану и т. д. Но количество учеников в классах разное. Может, учителю надо будет ввести 20 оценок для Класса 1, 25 для Класса 2 и т. д. Как программе узнать, закончил ли учитель вводить баллы? Скоро вы узнаете ответ на этот вопрос.

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

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

Второй динамический способ пополнения списка — ввести специальную величину (сигнальную метку), которая отмечает конец списка. Конечно, ее надо выбрать так, чтобы ее нельзя было принять за обычный элемент списка. Если ваш список будет состоять из имен или положительных чисел, то сигнальная метка «–1» — хорошая идея. Если же пользователь будет вводить отрицательные величины, то «–1» в качестве метки не годится. Сигнальная метка «–1» подходит для нашего списка балловСписок, и в скрипте, показанном ниже, она применяется, чтобы отметить окончание ввода данных пользователем.
При каждом повторе цикла скрипт просит пользователя ввести число и сравнивает его с сигнальной меткой. Скрипт выводит значение метки (в нашем случае –1) в подсказке, обращенной к пользователю. Если пользователь вводит –1, скрипт останавливается, поскольку знает, что ввод закончен. Иначе введенные величины продолжают добавляться к списку, а у пользователя запрашивается следующее число. На рисунке показано, как будет выглядеть балловСписок, если пользователь вводит три числа, а затем сигнальную метку.
Создание столбчатой диаграммы

Чтобы понять, как данные от пользователя организуются в списки, напишем приложение, которое рисует столбчатую диаграмму (гистограмму), используя введенные пользователем числа. Для простоты будем работать с пятью цифрами в диапазоне от 1 до 40. Как только программа получила пять чисел, она изобразит пять столбиков, чья высота будет пропорциональна введенным числам. Интерфейс пользователя для нашего создателя диаграмм приведен ниже
Приложение, создающее столбчатую диаграмму
В этом приложении три спрайта. Драйвер управляет работой при- ложения; он содержит скрипт, который получает информацию от поль- зователя, наполняет список и отдает спрайту Художник команду начать рисовать диаграмму. Художник (Painter) — спрайт-невидимка, который рисует гистограмму. Спрайт Рамка (Frame) нужен только для красоты: он закрывает низ каждого столбика, чтобы все было ровно. Без него было бы видно, что нижняя часть столбиков округлая. Величины для пяти столб- цов используют пять переменных с именами от ч1 до ч5, чьи мониторы расположены на Сцене справа. Когда вы щелкаете по зеленому флажку, чтобы запустить приложение, спрайт Драйвер инициирует скрипт
Для начала на Сцене появляется спрайт Драйвер и полностью очищает экран. Если на Сцене нарисована диаграмма, она будет стерта. Затем скрипт очищает список чиселСписок, чтобы можно было использовать его для сбора новых записей пользователя, и вызывает ПоказатьВеличины: величины ч1–ч5 будут заданы так, что их мониторы окажутся пустыми.
Теперь, когда Сцена подготовлена, скрипт начинает цикл повторить, который должен сработать пять раз. Внутри цикла Драйвер про- сит пользователя ввести число, которое он добавляет к чиселСписок. Получив от пользователя все пять чисел и сохранив их в списке, Драйвер прячется, чтобы освободить место для столбчатой диаграммы. После этого он снова вызывает ПоказатьВеличины, чтобы обновить величины ч1–ч5 данными, которые ввел пользователь, и передает Художнику команду нарисовать все пять столбиков.
Прежде чем узнать, как Художник рисует столбики, посмотрим на процедуру ПоказатьВеличины
ПоказатьВеличины задает переменным ч1–ч5 значения соответствующих записей в чиселСписок. Первый вызов процедуры про- изводится сразу после очистки чиселСписок, поэтому все пять переменных содержат пустые строки. В результате производится очистка всех пяти мониторов на Сцене, что нам и нужно. Когда чиселСписок содержит данные пользователя, вызов ПоказатьВеличины приводит к тому, что на мониторах снова появляются данные.

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

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

Длина этой линии пропорциональна величинам в чиселСписок. Максимальная высота нашей диаграммы на Сцене составит 224 пиксела, а поскольку самое большое возможное число — 40, то ввод этого числа должен давать нам столбик высотой в 224 пик- села. Чтобы рассчитать высоту в пикселах для любого числа в чиселСписок, надо умножить его на 5,6 (224/40). Ниже показан результат работы приложения на основе введенных пользователем чисел. Обратите внимание, что спрайт Рамка закрывает округленный низ линий широкого пера, так что основания столбиков выглядят плоскими.
Пример выходных данных приложения для создания столбчатых диаграмм

Scratch - Учись играя!
This site was made on Tilda — a website builder that helps to create a website without any code
Create a website