Счетчик цикла изменяется в цикле от нуля до ста. Если его разделить на десять, то это число очевидно будет изменяться от нуля до десяти.

Удалите все кривые.

Пишем построитель графиков.

curve -р 0 0 0 -n “myCurve”; int $i;

for($i=0; $i< 100; $i=$i+1)

{

float $x=$i/10.0;

float $y=sin($i/10.0);

curve -p ($x) ($y) 0 -a “myCurve”;

}

Теперь в цикле сто раз будут вычисляться новые значения для переменных $х и $у, основанные на растущем счетчике цикла. Эти значения будут добавляться как координаты новой вершины к кривой myCurve. В результате получается график функции синус (sin).

Важное замечание про округления и забытые точки Если вы случайно забудете поставить точку после десятки в операции деления счетчика цикла float $x=$i/10; то результат выполнения программы будут весьма загадочным.

Несмотря на то, что переменная $х объявлена как float, она, очевидно, принимает в этом случае только целые значения, то есть происходит неожиданное округление.

Дело в том, что выражение $x=$i/10 читается как «разделить целое число $i на целое число 10». Поэтому результат деления тоже становится целым числом, то есть округляется и только после этого «заталкивается» в переменную $х.

Выражение $x=$i/10.0 читается уже как «разделить целое число $i на число с плавающей точкой 10.0». Поэтому результат деления в этом случае становится числом с плавающей точкой и не округляется.

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

Вкратце могу сказать, что при сложении строки и числа результатом будет строка. При сложении (умножении и др.) целого и плавающего числа результат будет с плавающей точкой. Формально это можно выразить диаграммой типа integer -> float -> string.

Проверка существования объекта. Условные переходы

Явное неудобство состоит в том, что каждый раз приходится удалять кривую myCurve, чтобы продолжить построения заново. Иначе новая кривая имеет имя myCurvel, а новые точки норовят добавиться к уже существующей, «старой» кривой myCurve.

Хорошо бы запрограммировать следующую логику: -если объект myCurve уже существует, то удалить его». Слово «если» на MELobckom языке - это if, а для выражения «объект существует» можно использовать команду objExists. Любопытствующие умы уже слазили в документацию и выяснили, что эта команда требует имени объекта в качестве строки-аргумента и, если объект с таким именем существует, возвращает единицу (в противном же случае - ноль). Осталось сравнить результат выполнения этой команды с единицей и в случае совпадения удалить его.

if(objExists{“myCurve”)==1) [ delete “myCurve”; } curve -p 0 0 0 -n “myCurve”; int $i;

for($i=0; $i<100; $i=$i+1)

{

float $x=$i/10.0;

float $y=sin($i/10.);


⇐ вернуться назад | | далее ⇒