[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вычисление значения выражения с помощью дерева
Mirexzpalich
С теорией я вроде бы разобрался. Все понятно. Но я так и не представляю себе как разбивать строку на дерево и в чем хранить это дерево. Да и рекурсией я не очень владею.



Спустя 14 дней, 22 часа, 58 минут, 11 секунд (4.05.2010 - 22:16) Mirexzpalich написал(а):
Тихо в теме. Кароч. все решено. Но осталась проблемма. У мну все хранится в файле, в котором хранятся строчки типа:
11111111111#+#

И таких строчек множество. При работе с файлом приходится постоянно его открывать и закрывать. А таких операций не мало. Есть ли что то подобное Memo в Delphy?

Если нет, то как можно организовать это хранение? (Массивы не предлагать)

Спустя 4 минуты, 35 секунд (4.05.2010 - 22:21) Unlikely написал(а):
Мемо в делфи просто же выводит текст из файла?

Спустя 27 минут, 54 секунды (4.05.2010 - 22:49) dr_Lev написал(а):
есть функция file - читает содержимое файла и помещает его в массив (функция file())

Спустя 37 секунд (4.05.2010 - 22:50) Mirexzpalich написал(а):
Оно может и не выводить. Можно просто в memo хранить. Т.е. в оперативной памяти, а не на харде.

Спустя 55 секунд (4.05.2010 - 22:50) Mirexzpalich написал(а):
Цитата (dr_Lev @ 4.05.2010 - 19:49)
есть функция file - читает содержимое файла и помещает его в массив (функция file())

Я вообще хочу не трогать файлы.

Спустя 9 минут, 56 секунд (4.05.2010 - 23:00) zarafar написал(а):
Не совсем понятно, что вы хотите сделать.

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

И как вы храните свое дерево, если не в массиве ?

Спустя 14 минут, 3 секунды (4.05.2010 - 23:14) dr_Lev написал(а):
Цитата (Mirexzpalich @ 4.05.2010 - 22:16)
При работе с файлом приходится постоянно его открывать и закрывать

Один раз прочитай из файла в массив и работай спокойно с массивом, не трогай больше файл
$strings = file('твой файл'); /* прочитал строки в массив */

/* работа с массивом */

echo $strings[23];
echo $strings[345645];

Цитата
Я вообще хочу не трогать файлы.
Ну ту ты меня уже в ступор вогнал...

Спустя 13 минут, 6 секунд (4.05.2010 - 23:28) Mirexzpalich написал(а):
Цитата (Mirexzpalich @ 4.05.2010 - 19:16)


Если нет, то как можно организовать это хранение? (Массивы не предлагать)

Про массивы я и сам неплохо знаю!!!!!!!!

Мой вопрос звучит так:

как можно организовать это хранение? (Массивы не предлагать)


Может ООП? Но в нем я не силен.

Спустя 9 минут, 10 секунд (4.05.2010 - 23:37) zarafar написал(а):
Mirexzpalich
Видимо все таки вы плохо знаете массивы, либо сами не знаете чего хотите. ООП вам не поможет в данном случае, пока вы не научитесь излагать свои мысли.

Из того, как вы изложили свой вопрос, dr_Lev вам привел пример, как это делается "правильно".

Если вас не понимают, попробуйте спросить по-другому.

Спустя 1 минута, 24 секунды (4.05.2010 - 23:38) Raito-kun написал(а):
приплетать объекты в такой тривиальной задаче?... как по мне вообще нерационально. вам сказали варианты - массив и файл. что не устраивает? можно ответить без капса, <b> и 15ого шрифта.

Спустя 9 часов, 46 минут, 4 секунды (5.05.2010 - 09:24) Mirexzpalich написал(а):
Еще раз.
Про работу с массивами я и сам неплохо знаю! Меня интересуют еще и ДРУГИЕ СПОСОБЫ РЕШЕНИЯ ЭТОЙ ПРОБЛЕМЫ.
Так наверное понятнее?

Спустя 23 минуты, 17 секунд (5.05.2010 - 09:47) dr_Lev написал(а):
Вроде я понял что тебе нужно...
Вот объект для хранения дерева (писал на колене, заранее прошу прощения за возможные ошибки)
class tree{
public $value; // значение
public $id; // идентификатор
public $parent_id = 0; // идентификатор родительского элемента
public $nodes = array(); // массив дочерних элементов
public function __construct($value, $id){ // конструктор, получает значение и идентификатор
$this->value = $value;
$this->id = $id;
}
/* метод добавления элемента, получает объект(tree) или значение с идентификатором */
public function AddNode($value, $id = 0){
if (is_a($value, 'tree')){
$value->parent_id = $this->id;
$this->nodes[] = $value;
}else{
$node = new tree($value, $id);
$this->nodes[] = $node;
}
}

/* метод вставки элемента, получает идентификатор родительского элемента, объект(tree) или значение с идентификатором */
public function InsertNode($parent_id, $value, $id = 0){
if (!is_a($value, 'tree')){
$value = new tree($value, $id);
}
if ($parent_id == $this->id){
$this->AddNode($value);
return true;
}else{
foreach($this->nodes as $node){
if ($node->InsertNode($parent_id, $value)){
return true;
}
}
}

return false;
}
/* метод удаления эелемена по идентификатору */
public function DelNode($id){
foreach ($this->nodes as $index=>$node){
if ($node->id == $id){
unset($this->nodes[$index]); // можно оставить и так, если не нужно строгое индексирование массива
return true;
}else{
if ($node->DelNode($id)){
return true;
}
}
}

return false;
}
/* метод получения элемента по идентификатору */
public function GetNode($id){
if ($this->id == $id){
return $this;
}
foreach ($this->nodes as $node){
$finded = $node->GetNode($id);
if (is_a($finded, 'tree')){
return $finded;
}
}

return NULL;
}
}

Спустя 3 часа, 15 минут, 35 секунд (5.05.2010 - 13:03) Mirexzpalich написал(а):
dr_Lev, спасибо большое. Но не обязательно было писать код. Мне хватило бы и теории. Спасибо еще раз.


_____________
Дорогу осилит идущий...
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.