Форум 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=86137)

Svinja 08.10.2006 18:04

Указатели или как вырастить дерево.
 
Наверное этот вопрос задавали уже не один миллион раз. Есть ли в AS указатели аля Си, а то без них делать древовидные структуры, это Ад. Может в AS есть что-нить встроенное для создания деревьев, или указатели.

Хемуль 08.10.2006 21:02

2 Svinja:
Array...

Nirth 08.10.2006 21:06

2 Svinja
Object
указатели в ас не нужны. функции тоже объекты.

Svinja 09.10.2006 11:31

Как это понимать, напирмер у меня есть класс узла дерева, в котором я должен хранить указатель(?) на его потомка, я использовал имя, для однозначного указания на элемент, но это неправильно, потомучто приходилось глубоуо пробираться к этому элементу.
Код:

class MyClass
{
  private var FChild:Number;
 
  public function ShowChild()
  {
    _root['clip1']['clip2']['object'+this['FChild']].Show();
  }
}

надо по идее чот-то типа:

Код:

class MyClass
{
  private var FChild:*MyClass2;
 
  public function ShowChild()
  {
    this['FChild'].Show();
  }
}


wvxvw 09.10.2006 12:13

во втором варианте все в принципе нормально, только астерикс не надо =), ну и чтобы ShowChild() работала ее надо бы где-то вызвать...
а можно менее абстрактный пример? а то так немного сложно понять, что именно нужно, мб есть простое решение... просто не совсем понятна задача...

Svinja 09.10.2006 16:06

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

структура: к корню присоединено поле, в котором создаются мувики формул, каждый мувик формулы, хранит в себе отображение самой формулы(A&B->C,C|-A->B) и древовидную структуру этой формулы(для удобства автопроверок истинности). Для этого я создавал классы для каждой булевой функции(and,or,not, и тд) например класс конъюнкции:
Код:

class TKonjunction extends Object
{
  public var leftPart:Number;
  public var rightPart:Number;
       
  public function True(AA:Boolean,AB:Boolean,AC:Boolean,AD:Boolean,AE:Boolean,AF:Boolean):Boolean
  {
    return _root['pole']['sc'+_root['pole']['currSc']]['formula'+this['leftPart']].True(AA,AB,AC,AD,AE,AF) && _root['pole']['sc'+_root['pole']['currSc']]['formula'+this['rightPart']].True(AA,AB,AC,AD,AE,AF);
  }
       
  public function Show():String
  {
    return _root['pole']['sc'+_root['pole']['currSc']]['formula'+this['leftPart']].Show() + '&' + _root['pole']['sc'+_root['pole']['currSc']]['formula'+this['rightPart']].Show();
  }
}

Здесь два поля: левая часть конъюнкции и правая, но там хранятся номера элементов(!), а не указатели. И два рекурсивных метода(правда даже позороно называть их методами) проверки истенности(на вход подаем значения 6-ти переменных) и записи формулы в виде строки. Если б были указатели, то код измнеился бы так:
Код:

class TKonjunction extends TFormula
{
  public var leftPart:*TFormula;
  public var rightPart:*TFormula;
       
  public function True(AA:Boolean,AB:Boolean,AC:Boolean,AD:Boolean,AE:Boolean,AF:Boolean):Boolean
  {
    return this['leftPart']->True(AA,AB,AC,AD,AE,AF) && this['rightPart']->True(AA,AB,AC,AD,AE,AF);
  }
       
  public function Show():String
  {
    return this['leftPart']->Show() + '&' + this['rightPart']->Show();
  }
}


wvxvw 09.10.2006 16:42

эээ... если чесно, то хочется процитировать Барда Симпсона... 'my brain hurts'
А не проще ли было сделать конструкторы класса и передавать конструктору ссылку на нужный объект вместо того, чтобы писать _root['pole']['sc'+_root['pole']['currSc']]['formula'+this['leftPart']]? Или, что еще логичнее, создавать нужный объект в самом классе?
Хотя... я наверное чего-то не понимаю...
Можно только нескромный вопрос... это работает? Я не издеваюсь, мне действительно интересно...

Хемуль 09.10.2006 16:48

2 Svinja:
И ещё вопрос... Если не секрет, почему Флеш? ^_^

Svinja 09.10.2006 17:04

Все, что пока написано, работет. В саом классе создавать новые объекты нельзя, потомучто внешние объекты будут копироваться(дублироваться), и некоторые ссылки будут перенаправлятся. Работать с такого вида вложениями будет довольно сложно. Когда доделаю, могу выложить, но думаю человеку, не знакомому с предметом матЛога эта программа будет совершенно не понятна.

А почему Flesh: была поставлена задача написания такой программы, а я давно хотел разобраться в AS вот и хорошая возможность. Да и ваще я извращенец.

Хемуль 09.10.2006 17:11

Цитата:

Сообщение от Svinja
Да и ваще я извращенец.

^_^ LoL Уважаю... Я не так давно на флеше делал одну программу для флуда на форумах...

miramax 09.10.2006 19:05

А почему нельзя тупо ссылку записать ?
Код:

a = _root['pole']['sc'+_root['pole']['currSc']]['formula'+this['leftPart']].Show()
a();
b = _root['pole']['sc'+_root['pole']['currSc']]['formula'+this['leftPart']]
b.Show()

И вообще убирай пути, иначе код ужасный получится

wvxvw 10.10.2006 03:51

эээ... ну как бы это сказать, не в обиду, но код больше похож на попытку запихать мизинец правой ноги в левое ухо, при чем так, чтобы колено находилось за спиной... теоретически, если систематически заниматься йогой, то после долгих тренировок это все таки удасться... но если задача была изначально просто почесаться в ухе, то подход к ее решению не может не вызывать удивления =)
Код:

class TKonjunction extends Object
{
//ессна нужно описать структуру объекта и что такое левая и правая части
// типа:
// checkedObject.rightPart =
// checkedObject.leftPart =
// checkedObject._txt =
// ну и так далее...
function TKonjunction (leftPart:Number, rightPart:Number, checkedObject:Object){
       
  public function True(AA:Boolean,AB:Boolean,AC:Boolean,AD:Boolean,AE:Boolean,AF:Boolean):Boolean
  {
    return checkedObject['leftPart'].True(AA,AB,AC,AD,AE,AF) && return checkedObject['rightPart'].True(AA,AB,AC,AD,AE,AF);
  }
// тут, я так понял, нужно просто отобразить формулу и/или  результат вычисления
// тогда просто передаем во все том же объекте ссылку на текстовое поле
  public function Show():Void
  {
    checkedObject._txt.text=checkedObject.formula + "" + checkedObject.rightPart + '&' + checkedObject.leftPart +True(AA,AB,AC,AD,AE,AF).toString();
  }
Show();
}
}

Но даже так логика все равно дубовая, в смысле, может с точки зрения другого языка и ничего, но с точки зрения АС - изврат. Гораздо проще и понятнее было бы создавать "пример" вместе со всеми элементами оформления прямо в этом же классе, а в основном клипе просто ограничится созданием интерфейса позволяющего юзеру выбрать "а какую же формулу он хочет посмотреть".
ЗЫ. возможно что-то где-то не совсем так написал, кавычки не туда влепил или еще что-то, просто действительно тяжело понять смысл проделанной работы =)

Вот, написал простенький пример, там еще конечно много чего надо бы дописать, но главное - принцип:
Вложение 15428


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

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