Калькулятор "Школьная доска 3"

Графическое отображение результатов




Запуская пример с игрой, приведенный в конце предыдущего пункта, можно узнать только, кто выиграл. Чтобы проследить за перипетиями игры, нужно воспользоваться ключевым словом export(имя). По сути, это — функция, которая в процессе счета собирает все значения величины, указанной ее аргументом. После завершения счета собранные данные автоматически выводятся в виде графика.

Следующие формулы отличаются от рассмотренных в предыдущем пункте наличием двух функций export(), по одной для каждого из игроков:

Аркадий = 0
Борис = 0
do
    Аркадий = Аркадий + random(1)
    Борис = Борис + random(1)
    export(Аркадий)
    export(Борис)
until(Аркадий = 10 Or Борис = 10)

Результат таков:

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

Чтобы выяснить, как можно управлять графиками лучше всего запустить формулы в калькуляторе "Школьная доска".

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

Меню в правом верхнем углу полотна графиков позволяет распечатать графики или сохранить как изображение в форматах jpeg или png.

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

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

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

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

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

Чтобы продемонстрировать полезность масштабирования, рассмотрим формулы, табулирующие функцию y = sin[1/(|x-0.5| + 0.000001)] на интервале [0, 1].

x = 0
h = 0.00001
do
    y = sin[1/(|x-0.5|+0.000001)]
    x = x+h
    export(y)
until(x>=1)

Получаем следующий график:

Как ведет себя график посередине, то есть в окрестности точки x = 0.5, (количество циклов – 50000), абсолютно не ясно. Выделим интервал от x = 0.49 до x = 0.51:

Снова ничего не видно. И, наконец c четвертого раза в диапазоне от x = 0.4996 до x = 0.5004 получим требуемое:

Например, теперь можно сказать, что в точке x = 0.5 имеется локальный максимум, в котором функция принимает значение y = -0.66.

Функции export() в принципе можно располагать, где угодно. Но нужно понимать, что сохраняемые ими значения зависят от их местоположения, а именно: захватывается текущее значение аргумента на момент выполнения этой функции. Поэтому рекомендуется помещать функции export() только в циклы и, желательно, в конце тела цикла.

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

То же относится и к блокам конструкций ветвления типа if...endif, которые будут рассмотрены в следующем параграфе.

И, наконец, аргументом функции export() может быть любое математическое выражение. Например, можно перейти к логарифмической шкале, заменив export(y) на export(ln(y)).