Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Типы переменных (http://www.flasher.ru/forum/showthread.php?t=150886)

BlackShadow 19.02.2011 12:15

Типы переменных
 
Итак, такое дело. Создал программу для вычисления корреляций (что это такое - нет времени объяснять, да и проблема не в этом).
В начале программы я задал все значения переменных по типу:

var [переменная]:Number;

А в ходе вычислений я заметил, что так идет другой тип переменной - строка, потому что там идет такой процесс:

1) Присваиваю Х значение = 10
2) Присваиваю У значение = 10
3) Есть поле "Операция" ("rezult"), где возможны 4 значения: плюс, минус, делить, умножить (в это поле нужно вводить операцию: +, -, *, /)
4) Есть поле Dynamic Text "rezult", которое вначале = 0 (присвоено, как Number, равный 0)
5) При нажатии кнопки "RESULT", переменной rezult присваивается значение Х и У, между которыми происходит операция. Вот код кнопки:
Код AS1/AS2:

on (release) {
        txt = "";
        if ((oper == "+") or (oper == "-") or (oper == "*") or (oper == "/")){
                if ((a != "") and (b != "")){
                        switch (oper){
                                case "+":
                                rezult = a + b;
                                case "-":
                                rezult = a - b;
                                case "*":
                                rezult = a * b;
                                case "/":
                                rezult = a / b;
                        }
                } else {
                        txt = "Не введены числа!";
                }
        } else {
                txt = "Неверная операция!";
        }
}

6) Вроде бы, код верный, а в поле rezult высвечивается такое значение rezult, будто он ДЕЛИТ (то есть rezult становится равным 1. Если Х и У равно 10 и 100, соответственно, то rezult = 0,1)

Вопрос: почему так происходит? Подскажите, что я не так делаю

dark256 19.02.2011 12:19

Вложений: 1
Замените "or" на "||"

'a != ""' замените на !isNan(a)

У меня все работает :)

А. Тьфу. После каждого case и операции добавляйте break;

Код AS1/AS2:

switch (oper)
                        {
                                case "+":
                                rezult = a + b;
                                break;
                                case "-":
                                rezult = a - b;
                                break;
                                case "*":
                                rezult = a * b;
                                break;
                                case "/":
                                rezult = a / b;
                                break;
                        }
                        trace( rezult )


BlackShadow 19.02.2011 12:34

Спасибо большое, но теперь у меня другая проблема. При введении, например, 12 и 1 результат оказывается 121, а не 13... Походу, теперь он стал считать их строками... Может я опять что-то не так делаю?

dark256 19.02.2011 12:43

Флэш плюет на типизацию при любом удобном случае.
Вставьте операнды в "Number()"

Код AS1/AS2:

Number(a) + Number(b)

К сожалению вы привели лишь участок кода, поэтому судить сложно.
К слову, если вы берет данные из полей ввода, то там однозначно будет text.
Еще кстати - флэш совершенно безболезненно умеет делить на ноль :)
Так что ничему не удивляйтесь :)

BlackShadow 19.02.2011 12:47

Цитата:

Сообщение от dark256 (Сообщение 974564)
Флэш плюет на типизацию при любом удобном случае.
Вставьте операнды в "Number()"

Код AS1/AS2:

Number(a) + Number(b)

К сожалению вы привели лишь участок кода, поэтому судить сложно.
К слову, если вы берет данные из полей ввода, то там однозначно будет text.
Еще кстати - флэш совершенно безболезненно умеет делить на ноль :)
Так что ничему не удивляйтесь :)

Ой :) Огромное спасибо Вам)) Очень выручили и помогли!)) Можно потом к Вам еще по одному вопросу обратиться?))

dark256 19.02.2011 12:52

Ну.... собственно я тут самый тихий и незаметный из всех пользователей.
Пишите в форум, тут присутствуют гуру на несколько порядков покруче, чем ваш покорный слуга :)

BlackShadow 19.02.2011 12:57

Да что Вы)) Какой слуга?)) Вы мне очень даже помогли)) Просто я разработчик формул во Flash, которые идут из курса физики за первый курс института)) и мне позарез нужно узнать, как построить графики, если у меня есть функция y = kx + b.. Вы бы не могли помочь с материалом по этой теме? просто я, бродя по поисовикам, ничего толком не нашел.. а у вас рука-то уже "набита" по таким сумасшедшим вопросам))

dark256 19.02.2011 13:08

Вложений: 1
Нуууууу......... батенька....... собссно строим по точкам.
Которые соединяем линиями :)

Код AS1/AS2:

var SUMDRAW = SUM.createEmptyMovieClip("SUMMARY",100);
                SUMDRAW.lineStyle (1, 0x00AAAA,100);
                SUMDRAW .beginFill(0x00AAAA,20);
 
                SUMDRAW.moveTo ( x0, y0);
                SUMDRAW.lineTo ( x1, y1);
и так далее по точкам графика

В целом.... можете полюбоваться на мой исходник... типа сумматор нескольких функций.
Можно полюбоваться кодом. Который ужасен. Ибо писано давно. Но посмотреть можно :)

BlackShadow 19.02.2011 13:10

Извините, а в какой он сделан версии? У меня MF8... И он говорит, что не понимает формат((

dark256 19.02.2011 13:10

А в целом, может быть, имеет смысл связаться с автором вот этого приложения.
Дать ему денег и сэкономить время :)
http://vkontakte.ru/app5435_43915359


Часовой пояс GMT +4, время: 04:10.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.