n = n + 10;

}

}

Недостаток этого способов состоит в том, что действия с переменной n выполняются в трех разных строчках программы:

1)  присвоение начального значения (n=10);

2)  условие выполнения цикла (n<=40);

3)  изменение переменной в конце каждого шага цикла (n=n+10).

При этом велика вероятность того, что мы забудем присвоить ей начальное значение или изменить его. Чтобы сосредоточить все операции с переменной n (она называется параметром цикла) в одном месте, используют третий вид цикла, который так и называется – цикл или for (от английского “для”), который позволяет заменить как цикл повтори, так и цикл пока:

Программа

{

int n;

цикл( n=10; n<=40; n=n+10 )

{

Квадрат ( n );

вправо ( 90 );

вперед ( n+10 );

влево ( 90 );

}

}

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

1.  Начальное условие n=10 выполняется один раз перед началом цикла;

2.  Условие продолжения n<=40 говорит о том, при каком условии цикл будет выполняться (если в самом начале это условие неверно, то цикл не выполнится ни одного раза);

3.  Изменение переменной цикла n=n+10 - этот оператор выполняется каждый раз в конце очередного прохода тела цикла.

4  Задачи

4  Арифметические выражения

Арифметическим выражением называют запись, которая содержит элементы четырех типов

·  числа

·  имена переменных

·  знаки арифметических действий

·  вызовы функций

·  скобки для изменения порядка выполнения действий

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

2.  Для обозначения умножения используется знак *, деления /, возведения в степень ^.

3.  Знак операции умножения обязателен, например 4*a.

4.  Дробная и целая части числа отделяются точкой.

5.  Устанавливается приоритет (старшинство) операций:

· сначала выполняются операции в скобках, затем...

· вызовы функций

· возведение в степень, затем...

· умножение и деление слева направо, затем...

· сложение и вычитание слева направо;

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

Запишем в машинном виде выражение

С учетом правил записи выражений результат будет такой:

x=(2*a+4*d)/((c-2*d)*(5-7*c)^2)+5*a/(4*d*c);

Некоторые стандартные функции уже заложены в память компьютера и для их использования надо только вызвать их по имени. Мы рассмотрим только две функции:

abs ( x ) вычисление модуля (абсолютного значения) числа x

sqrt ( x ) вычисление квадратного корня от x

Запишем в машинном виде формулу

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

x = sqrt( (a+2*b+1)/((c-3*d)*(2*a-d)) +

abs ((15*a^2+3*b)/(5*c*(b-a))) );

11.  Исполнитель Чертежник

Еще один исполнитель, с которым мы будем работать - Чертежник. Он умеет рисовать на плоскости, используя прямоугольную (декартову) систему координат.

2  Прямоугольная система координат

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

3

полка

2

1

0

1

2

3

4

стеллаж

 
 

Будем определять положение любого объекта двумя цифрами, первая из которых — стеллаж, а вторая — полка. Например, слон имеет координаты (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).


Координаты вектора могут быть как положительными, так и отрицательными числами. Если, например, координата x положительна, это значит, что исполнитель должен переместиться в ту сторону, в которую увеличивается ось OX, а если координата y отрицательна, то исполнитель перемещается в направлении, противоположном оси OY.

Задание для Чертежника представляет собой рисунок, состоящий из отрезков. Перед началом работы исполнитель находится в точке А, после окончания работы ему надо прийти в точку Б.

Пример. Исполнитель находится в начале координат. Неизвестно, в каком положении находится его перо (опущено или поднято). Ниже даны два варианта решения задачи: с помощью команд в_точку и вектор.

КонвертТоч

{

подними_перо;

в_точку (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] Тема для дополнительного изучения, например, на кружке или факультативе.

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5