Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Запишем в машинном виде формулу
С использованием стандартных функций это выражение запишется так
x = sqrt((a+2*b+1)/((c-3*d)*(2*a-d)) +
abs ((15*a^2+3*b)/(5*c*(b-a))));
11. Исполнитель Чертежник
Еще один исполнитель, с которым мы будем работать - Чертежник. Он умеет рисовать на плоскости, используя прямоугольную (декартову) систему координат.
2 Прямоугольная система координат
Представим себе, что в магазине на полках стоят товары, и вы хотите сказать продавщице, где находится тот товар, который вы хотите посмотреть.
|
Будем определять положение любого объекта двумя цифрами, первая из которых — стеллаж, а вторая — полка. Например, слон имеет координаты (2,2), а кошка — (4,3). Отсчет ведется от левого нижнего угла. Эта точка называется началом координат.
Теперь вспомним математику. На плоскости выбирается точка O, которая принимается за начало координат. Через нее проводятся две оси: горизонтальная ось OX вправо и вертикальная ось OY вверх. На обеих осях наносят разметку с выбранным шагом.
Координатами любой точки считаются два числа: расстояние до оси OY (координата x) и расстояние до оси OX (координата y). Считается, что точка O имеет координаты (0,0). Точки, расположенные справа от оси OY, имеют положительные координаты x, слева - отрицательные.
На рисунке показано, как определяются координаты точек на плоскости.
2 Как управлять Чертежником?
Среда Чертежника – плоскость с системой координат, которая необходима для того, чтобы однозначно определять место точки. Для задания системы координат надо определить
· направление осей координат
· единичные отрезки на осях
· начало отсчета – точку с координатами (0,0)
Оси координат не рисуются на экране — вы видите чистое белое поле. Началом координат считается центр поля исполнителя.
¨ СКИ Чертежника:
покажись;Чертежник появляется на экране
скройся;Чертежник исчезает
опусти_перо;после этого остается след
подними_перо; не оставлять след
в_точку (x, y); переместиться в точку с координатами (x,y)
вектор (dx, dy); переместиться на вектор (dx,dy)
относительно текущего положения
Покажем на примере разницу между командами в_точку и вектор.
Команда в_точку(20,40) перемещает исполнителя в точку с абсолютными координатами (20,40), независимо от того, где он находился до этого. | Команда вектор(20,40) смещает исполнителя в точку, расположенную на 20 шагов правее и на 40 шагов выше его текущего положения. |
Важно, что для использования команды в_точку нам требуется знать, где находится начало отсчета, а при использовании команды вектор – нет, так как отсчет ведется от текущего положения исполнителя. Поэтому в большинстве случаев мы будем использовать только команды вектор.
¨ Вектор -это отрезок, имеющий направление.
Начало вектора (Dx,Dy) находится там, где был исполнитель до выполнения команды, в точке (x0, y0), конец имеет координаты (x0+Dx, y0+Dy).
Задание для Чертежника представляет собой рисунок, состоящий из отрезков. Перед началом работы исполнитель находится в точке А, после окончания работы ему надо прийти в точку Б.
Пример. Исполнитель находится в начале координат. Неизвестно, в каком положении находится его перо (опущено или поднято). Ниже даны два варианта решения задачи: с помощью команд в_точку и вектор.
КонвертТоч { подними_перо; в_точку (10, 50); опусти_перо; в_точку (60, 50); в_точку (60, 10); в_точку (10, 10); в_точку (10, 50); в_точку (60, 10); в_точку (10, 10); в_точку (60, 50); } | КонвертВект { подними_перо; вектор (10, 50); опусти_перо; вектор (50, 0); вектор (0, -40); вектор (-50, 0); вектор (0, 40); вектор (50, -40); вектор (-50, 0); вектор (50, 40); } |
2 Использование процедур
Напишем с помощью Чертежника слова МАМА на экране. Заметим, что оно состоит из двух одинаковых букв А и двух одинаковых букв М. Это наводит на мысль об использовании процедур.
Научим Чертежника рисовать на экране буквы М и А одинаковой высоты. Обе буквы вписаны в прямоугольник 20 на 40, точка Б находится на расстоянии 5 от правой ножки. Заметим, что переход в точку Б означает, что исполнитель уже готов рисовать следующую букву.
БукваМ { опусти_перо; вектор (0, 40); вектор (10, -20); вектор (10, 20); вектор (0, -40); подними_перо; вектор (5, 0); } | |
БукваА { опусти_перо; вектор (10, 40); вектор (10, 0); вектор (0, -20); вектор (-15, 0); вектор (15, 0); вектор (0, -20); подними_перо; вектор (5, 0); } |
Теперь очень легко написать основную программу:
СловоМАМА
{
БукваМ; БукваА;
БукваМ; БукваА;
}
При проверке на компьютере после нее надо записать обе процедуры.
2 Процедуры с параметрами
Теперь решим задачу, с которой Черепаха сможет справиться только с очень большим трудом (здесь надо использовать тригонометрические функции). Построим на экране такую фигуру:
Исполнитель находится в точке A, именно отсюда удобнее рисовать все треугольники — там находятся середины их оснований. Как обычно, выделяем общее и отличие:
· общее: все треугольники равнобедренные, основание горизонтально
· отличия: разная длина основания и высота — они будут параметрами процедуры
Включим в параметры процедуры еще цвет линии c:
Треугольник(int a, int h, int c) { опусти_перо; цвет (c); вектор (-a/2, 0); вектор (a/2, h); вектор (a/2, -h); вектор (-a/2, 0); } |
С верхними тремя треугольниками все понятно. Сложность — с тем, который "опрокинут" вниз. Однако для того, чтобы нарисовать его, достаточно задать отрицательную высоту. Окончательно основная программа принимает вид:
Программа
{
Треугольник (60, 90, 9);
Треугольник (120, 60, 10);
Треугольник (180, 30, 2, 11);
Треугольник (90, -30, 6, 12);
}
2 Циклы и переменные
Чертежник понимает команду цикла повтори и может использовать переменные. Это демонстрирует следующий пример.
Зубы { int a = 10, h = 30; повтори (3) { Треуг (a, h); a = a + 10; h = h - 10; } } Треуг (int a, int h) { опусти_перо; вектор (0, h); вектор (a, -h); вектор (-a, 0); подними_перо; вектор (a, 0); } |
Здесь одновременно меняются две переменные: основание и высота, причем основание увеличивается, а высота уменьшается.
Рассмотрим еще одну задачу: с помощью исполнителя Чертежник нарисовать узор из квадратов:
Сторона каждого из квадратов и расстояние между строками и между столбцами равны 10. Приведем два способа решения этой задачи:
Узор { повтори (4) Ряд (4); } Ряд (int n) { повтори (n) { Квадрат (10); вектор (20, 0); } вектор (0, -20); вектор (-20*n, 0); } | Узор { повтори (4) { повтори (4) { Квадрат (10); вектор (20, 0); } вектор (0, 20); вектор (- 80, 0); } } |
Первый способ использует процедуру Ряд, параметром которой является количество квадратов в строке. Обратите внимание, что тело цикла не ограничено скобками, так как содержит только один оператор. При этом соблюдается запись с отступами – тело цикла сдвинуто вправо.
Во втором способе мы фактически сразу подставили тело процедуры в основную программу. При этом получилось, что в теле внешнего цикла в основной программе находится еще один цикл (внутренний), который раньше был в процедуре. Такая конструкция называется вложенный цикл. При этом в записи тело внутреннего цикла также сдвинуто вправо относительно его заголовка.
Заметьте, что для правильной работы этих программ к ним необходимо добавить текст процедуры Квадрат.
Квадрат (int a)
{
опусти_перо;
вектор (0, a); вектор (a, 0);
вектор (0, - a); вектор (- a, 0);
подними_перо;
}
2 Сравнение Чертежника и Черепахи
Букет
{
влево (45);
повтори (4) {
Цветок;
вправо (30);
}
}
где используется процедура для построения одного цветка
Цветок
{
опусти_перо;
вперед (60); влево (45);
повтори (3) {
повтори (2) {
вперед (25); вправо (30);
вперед (25); вправо (150);
}
вправо (30);
}
влево (45); назад (60);
подними_перо;
}
Благодаря естественной системе координат Черепаха отлично справилась с работой. Теперь вообразите, сколько усилий надо затратить, чтобы научить Чертежника рисовать такую фигуру.
Однако у Черепахи тоже есть недостатки. Так ей трудно начертить прямоугольный треугольник, потому что она должна знать длины всех его сторон и все углы (Чертежник легко решает эту задачу, зная длины только двух сторон, которые пересекаются под прямым углом).
2 Переменные и использование памяти
Пример 1. Построить на экране с помощью исполнителя Чертежник квадрат, длину его стороны ввести с клавиатуры и рассчитать площадь этого квадрата.
ДиалогКвадрат
{
int a;
вывод "Введите длину стороны квадрата";
ввод a;
Квадрат (a);
вывод "Площадь квадрата со стороной ", a,
" равна ", a*a;
}
Квадрат (int a)
{
опусти_перо;
вектор (0, a); вектор (a, 0);
вектор (0, - a); вектор (- a, 0);
подними_перо;
}
Пример 2. Составить программу для решения системы двух линейных уравнений:
Сначала мы должны решить эту систему в общем виде, то есть “в буквах”. Это можно сделать, выразив y из первого уравнения
и подставив результат во второе:
Выразив отсюда x, получаем
Таким образом, исходными данными являются значения a1, b1, c1, a2, b2, c2, по ним мы сначалавычисляем x, а затем – y, которые и будут результатами программы. Заметим, что систему нельзя решить этим способом, когда b1=0 или знаменатель выражения для x равен нулю. Эти случаи надо обрабатывать отдельно, сообщая об ошибке.
СистемаУравнений
{
float a1, b1, c1, a2, b2, c2, x, y, d = 0;
вывод "Введите a1, b1 и c1 ";
ввод a1, b1, c1;
вывод "Введите a2, b2 и c2 ";
ввод a2, b2, c2;
если (b1!= 0)
d = a2 - b2*a1/b1;
если (d!= 0)
{
x = (c2 - b2*c1/b1) / d;
y = (c1 - a1*x) / b1;
вывод "Решение системы: x = ", x, ", y = ", y;
}
иначе
вывод "Система вырожденна.";
}
2 Цикл с параметром
Нарисуем на экране с помощью исполнителя Чертежник веер из n лучей, концы которых находятся на одном уровне по оси y, а расстояние между концами соседних лучей равно d. Исполнитель находится в точке А.
Рассмотрим разные способы решения этой задачи. Первый отрезок направлен вертикально вниз, то есть ему соответствует вектор(0,-h). После этого лучше поднять перо и вернуться обратно в точку А. Следующий отрезок рисуется командой вектор(d,-h), дальше будет вектор(2d,-h) и т.д. Заметим, что в команде вектор изменяется только координата x, которая принимает последовательно значения 0,d,2d,3d,...,(n-1)d, то есть, начальное значение x равно 0, цикл выполняется пока x<nd и с каждым шагом значение x увеличивается на величину d.
Для решения удобно использовать цикл с параметром, который так и называется – цикл или for (от английского for – “для”).
Веер
{
int x, h, d, n;
вывод "Введите d, h и n ";
ввод d, h, n;
цикл (x = 0; x < n*d; x = x + d)
{
опусти_перо;
вектор (x, -h);
подними_перо;
вектор (-x, h);
}
}
Как видно из этой программы, все операции с переменной d сгруппированы в заголовке цикла внутри круглых скобок. Три части отделяются знаком “;”, так же как и конец команды:
1. Начальное условие x=0 выполняется один раз перед началом цикла;
2. Условие продолжения x<n*d говорит о том, при каком условии цикл будет выполняться (если в самом начале это условие неверно, то цикл не выполнится ни одного раза);
3. Изменение переменной цикла x=x+d -этот оператор выполняется каждый раз в конце очередного прохода тела цикла.
Как можно заменить этот цикл на цикл повтори?на цикл пока?
2 Задачи
1. Что нарисует Чертежник, выполнив программу:
Домик
{
опусти_перо;
вектор (4, 0); вектор (0, 4);
вектор (-4, 0); вектор (0, -4);
подними_перо;
вектор (0, 4); опусти_перо;
вектор (2, 2); вектор (2, -2); подними_перо;
вектор (-4, -4);
}
2. Не «отрывая пера от бумаги» и не проводя одну линию два раза нарисовать
3.Составить программы для исполнителя Чертежник
4. Составить программу для исполнителя Чертежник, используя процедуру с параметром.
5. Какую фигуру нарисует Чертежник, выполнив программу
Спираль
{
опусти_перо;
Виток (10);
Виток (30);
Виток (50);
Виток (70);
Виток (90);
подними_перо;
}
Виток (int n)
{
вектор (n, 0);
вектор (0, - n);
вектор (- n - 10, 0);
вектор (0, n + 10);
}
6. Составить процедуру для исполнителя Чертежник, по которой он рисует n звеньев ломаной размером a. На рисунке изображено одно звено.
Что произойдет, если при вызове процедуры задать отрицательное значение параметра a?
7. Составить программу для исполнителя Чертежник, используя цикл с параметром:
[1] Разговор о числовых выражениях целесообразен только после изучения переменных.
[2] Объем материала этого раздела варьируется сообразно возрасту. В 5-6 классах достаточно рассказать только 4 арифметических операции и скобки.
[3] Тема для дополнительного изучения, например, на кружке или факультативе.
Дата публикования: 2014-10-30; Прочитано: 689 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!