![]() |
Как заставить Флеш решать простые уравнения?
Нужно научиться заставить Флеш решать простые уравнения (+, -, *, /) с натуральными числами. Выглядит это так: на титульном листе документа написано: (допустим) x+25= после равно стоит Imput текст, который просит ввести пользователя число. Далее пользователь, после того как ввел число, жмет на кнопку, и выводится (переменную, введенную юзером, назову I):
x+25=I x=I-25 x=ответ уравнения. Вот и вопрос: как заставить Флеш решать уравнения с введенной пользователем переменной? |
А, и кстати, Actions знаю плохо. Очень плохо.
|
Писать парсер. Который разбирает строку с уравнением на числа, переменные и математические действия согласно их приоретету.
|
http://as3.ru/?p=3
Только надо переписать под AS1/AS2 :) |
Блин чего на человека накинулись
2 __etc он же написал что ПЛОХО знает а ты хошь чтоб он класс переписал 2 Автор - идем в магазин и покупаем книжку чессно-слово.... ну либо платим мне и в пон. у тя будет научный калькулятор :) |
Цитата:
Навсякий случай, по совету __etc , выложил вариант н AS1/AS2 http://as3.ru/?p=3 |
Цитата:
|
Да нет. Скрипт в ссылке, как я понял, заставляет Флеш решать примеры, введенные в строку юзером. А задача другая: уже даны два числа - х+25, далее следует строка ввода. допустим я ввел в строку число 30. то есть: х+25=30. Флеш должен распознать это 30, сопоставить его с 2 данными, х и 25, и выписать в нижнее отведенное место:
х+25=30 х=30-25 х=5. То есть вставляется только одно число, все остальное с помощью данных Флеш находит сам. И уж ясно, что здесь не обойтись без скрипта. Но не писать же в 250 строк :wacko: ! |
Цитата:
|
Разве? Не верю. Мне казалось надо то и только обозначить переменную, потом вставить ее в строку, ну и решить пример 30-25. Неужели Флеш не может обойтись... ну в крайнем случае 50 строками?
|
Цитата:
|
а можно еще __bytecode__("...") - и одной строчки хватит:)
|
Цитата:
Цитата:
|
пример х-25=[user_input]
Код:
var l1_txt:TextField = _root.createTextField("l1_txt", 0, 0, 0, 200, 20); |
Спасибо! все работает. Только вопрос. Надо сделать, чтоб ответ появлялся прямо в файле, а не в OutPut. Отвести в документе место, пусть туда и выводит. Или это сложно?
|
2 Flash'OK:
Смотри... это просто пример для облегчения понимания, на самом деле для того, чтобы все "по-честному" работало надо больше писать. Если ты понял, как это работает, то у тебя не должно быть проблемы создать еще одно текстовое поле (по аналогии с первыми семью строчками кода) и выводить результат туда... Я могу написать готовое решение, но это довольно долго + нет особой необходимости - спасибо Miramax =) Просто это задача не совсем для новичков. Попробуй разобрать этот пример. Если что-то непонятно, можно действовать следующим образом: если пишешь код во флешевском редакторе, то зарезервированные слова и выражения отображаются синим цветом, выделяешь такое слово и жмешь F1 - откроется соответствующая страница хелпа, там читаешь и смотришь, что это такое и что оно делает. Ну... я так понял, что книжку достать проблема. Если читать по-английски тоже проблема - тут в прикрепленных топах есть ссылки на русифицированый хелп. |
Код:
var l1_txt:TextField = _root.createTextField("l1_txt", 0, 0, 0, 200, 20);В первой строке с помощью кода создаем Impyt-строку, переменную. В скобках даем ей имя, размер и координаты положения на листе. Далее настраиваем текст, который будет вносится пользователем: Код:
with (l1_txt) {Код:
Key.addListener(l1_txt);Код:
if (Key.getCode() == Key.ENTER) {Код:
function calculate(_str:String):Void { |
эээ...
type - тип текстового поля есть варианты static, dinamic, input border - отображать ли рамку вокруг текста borderColor - цвет рамки addListener - метод объекта, активировав этот метод и передав ему в качестве параметра ссылку на другой объект - добавляем объект указанный в ссылке в массив "слушателей" объекта (если один объект "слушает" события другого, это значит, что если "говорящий" объект что-то скажет - слушатель об этом узнает и среагирует соответственно). В данном случае мы говорим текстовому полю l1_txt что нужно слушать все события объекта Key (кнопка). Одно из таких событий - onKeyDown (кнопка нажата). Дальше описываем, что нужно сделать, если кнопка нажата. Последняя цитата: - первая строчка объявляет функцию, задает ей количество и тип параметров, тип возвращаемого значения. В нашем случае, принимаемых параметров - 1, принадлежит к классу String (строка), функция ничего не возвращает (Void - пустота) это писать не обязательно, но желательно т.как в АС3 это влияет на производительность. Дальше объявляем локальную переменную функции, задаем ее тип как Number (число) и присваеваем ей значение возвращаемое глобальной функцией Number(). Выражение в скобках: берем переданный функции параметр и выполняем с ним действие преобразующее его в массив, состоящий в нашем случае из двух частей - часть строки до знака "=" и после. Следующая операция pop() - это уже метод массива, она возвращает последний член массива. "+" в последней строчке нужен потому, что trace() в качестве аргумента принимает всего 1 параметр. Т.е. как и в случае с Number() сначала выполняются действия в скобках, потом все выражение преобразуется в нужный тип и передается функции вывода. |
Я подумал, что мне надо начинать с чего нибудь попроще. Математические функции пока мне не по зубам. Да и физические. Точно... Для меня это оказалось тяжелее, чем предполагал :( .
|
Вложений: 1
вот это твой пример, если я правильно понял что ты хотел
|
Да, это то :) ! Все правильно. Я вроде как понял скрипт. Сейчас сделаю чего нибудь с другим уравнением.
|
всё очень просто, но если что непонятно спрашивай!
|
Вложений: 1
Уря! Все получилось! Это другое выражение. 32-у
|
поздравляю!!!!
|
| Часовой пояс GMT +4, время: 03:29. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.