Пример - №175 а).
Условие задачи:
Условие задачи. В таблице 1 приведены сведения о крупнейших реках, которые целиком или частично протекают по Беларуси.Река | Длина, км | Длина на территории Беларуси, км |
Березина | 226 | 226 |
Неман | 937 | 459 |
Сож | 648 | 493 |
Припять | 761 | 400 |
Западная Двина | 1020 | 328 |
Днепр | 2201 | 700 |
Рисование
Соответствующий фрагмент рабочей области приложения приведен на рисунке 1. При воспроизведении фильма пользователь видит чистую область построения.Программирование
Имя переменной | Тип | Область видимости | Назначение |
lnum | целое число | главная временная шкала | текущее число зелёных столбцов |
rnum | целое число | главная временная шкала | текущее число синих столбцов |
lkoef | действительное число | главная временная шкала | коэффициент. 1 : lkoef км - масштаб |
diff1 | действительное число | главная временная шкала | погрешность построения |
l1 | MovieClip | главная временная шкала | зелёный столбик |
r1 | MovieClip | главная временная шкала | синий столбик |
n1 | MovieClip | главная временная шкала | содержит поле ввода текста txt |
R | MovieClip | главная временная шкала | содержит кнопку Ruler с изображением бегунка |
При "добавлении" столбца программа выполняет следующие действия:
Высота столбцов диаграммы определяется положением бегунка R. Понятно, что нет необходимости перемещать его по всей плоскости, более того, пользователю будет удобнее, если бегунок сможет перемещаться лишь вдоль оси абсцисс. Поэтому, в сценарии, размещённом в экземпляре кнопки Ruler, находящемся внутри символа R1, осуществляется вызов метода startDrag() с параметрами.
Код ActionScript | Где размещён? | Для чего предназначен? |
on (release) |
экземпляр кнопки Add_button, обозначенный "добавить линию-1" | Добавление зелёного столбика и поля ввода имени реки слева от него |
on (release) | экземпляр кнопки Add_button, обозначенный "добавить линию-2" | Добавление синего столбика заданной длины под нижним "свободным" зелёным столбиком |
on (release) |
экземпляр кнопки Delbutton, обозначенный "убрать линию-1" | Невидимыми делаются последние сверху основной столбик, поле ввода и (если существует) дополнительный столбик. Фокус ввода передаётся верхнему оставшемуся полю ввода текста |
on (release) |
экземпляр кнопки Delbutton, обозначенный "убрать линию-2" | Делается невидимым верхний синий столбик |
on (press) { startDrag ("_root.R", false, 100, 80, 510, 80); }
on (release) { stopDrag (); } |
экземпляр кнопки Ruler | При нажатой левой кнопке мыши R перемещается внутри прямоугольника, заданного координатами верхнего левого угла (100,80) и нижнего правого угла (510,80). |
onClipEvent (mouseMove) | видеоклип R | При любом движении мыши происходит проверка ответа и передача значения переменной a |
Проверка правильности построения диаграммы должна осуществляться с учётом неизбежной погрешности. Проверяются количество столбиков, правильность подписей и совпадение длин в условии и на диаграмме с определённой точностью. Функция проверки размещается в сценарии ключевого кадра основной временной шкалы.
stop();
lnum = 0;
rnum = 0;
diff1 = 5;
lkoef = 6.25
for (i=1; i<=6; i++)
{
_root["l"+i.toString()]._visible = false;
_root["r"+i.toString()]._visible = false;
_root["n"+i.toString()]._visible = false;
}
//создание массива, содержащего данные условия.
fd = new Array();
function lLines (a, b, str)
{
this.llin = a;
this.rlin = b;
this.name = str;
}
function makeAnswer ()
{
if (diff1<4) { a = 1; }
else { a=0 }
}
function Starter ()
{
var arr1 = new Array(226, 937, 648, 761, 1020, 2201);
var arr2 = new Array(226, 459, 493, 500, 328, 700);
//"\377" - "я" в Flash 5 не задаётся...
var arr4 = new Array("Березина", "Неман", "Сож", "Прип"+"\377"+"ть", "Западна"+"\377"+" Двина", "Днепр");
// fd преобразуется в трехмерный массив с полями llin, rlin, name
for (var i = 0; i<6; i++) {fd[i] = new lLines(arr1[i], arr2[i], arr4[i]);}
}
//функция проверки правильности диаграммы
function checkDiagr1 ()
{
diff1 = 5;
llengths = new Array(0, 0, 0, 0, 0, 0); // llengths - длины основных столбцов;
rlengths = new Array(0, 0, 0, 0, 0, 0); // rlengths - длины дополнительных столбцов
fullchecker = 1; //вспомогательная переменная для проверки подписей
if ((lnum == 6)&&(rnum==6)) { //проверка количества столбиков
for (i=1; i<=lnum; i++) {
for (j=0; j<6; j++) { //формирование массивов длин
if (_root["n"+i.toString()].txt == fd[j].name) {
llengths[j] =
_root["l"+i.toString()]._width*lkoef
rlengths[j] =
_root["r"+i.toString()]._width*lkoef
}
}
}
//проверка наличия всех подписей
for (i=0; i<6; i++)
{
if((llengths[i]==0)||(rlengths[i]==0)){fullchecker=0}
}
//вычисление погрешности
if (fullchecker != 0) {
diff1 = 0;
for (i=0; i<6; i++) { diff1
+= Math.abs(fd[i].llin-llengths[i])+Math.abs(fd[i].rlin-rlengths[i]); }
diff1/=50
}
}
}
Starter()
Условием правильности построения диаграммы является: diff1<4.
Просмотреть результат в новом окне
Назад | К содержанию |
Далее |