Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];

Вниз

рекурсия... без рекурсии   Найти похожие ветки 

 
iskatel ©   (2005-05-27 02:37) [0]

есть класс month, конструктор которого должен создать еще один объект того же класса month за предыдущий месяц (он используется внутри класса) но, если написать month(m-1) (где м- номер месяца)
то конструктор этого м-1 будет создавать еще один объект предыдущего месяца и так далее... но нужен только один предыдущий, остальные не нужны...


 
Плохиш ©   (2005-05-27 02:40) [1]

но нужен только один предыдущий, остальные не нужны...

Как это "не нужны"? --> есть класс month, конструктор которого должен создать еще один объект того же класса month за предыдущий месяц

С задачей разберитесь сначала.


 
ЮЮ ©   (2005-05-27 03:36) [2]

замени "конструктор которого должен создать еще один объект" на "конструктор которого может создать еще один объект при вызове некоторого метода".

А ещё лучше, сделать просто свойство PriorMonth: TMonth, созать два объекта m1 и m2 и второму задать m2.PriorMonth := m1, а в методах учитывать, что PriorMonth может быть и nil


 
ЮЮ ©   (2005-05-27 03:38) [3]

в первом абзаце сдедует читать
 ... на "некоторый метод которого может создать еще один объект".


 
TUser ©   (2005-05-27 08:37) [4]

constructor Create (NeedAnother: boolean = true);
begin
 if NeedAnother then
   FPrevious:=TMonth.Create(false);
end;


 
Mystic ©   (2005-05-27 11:54) [5]

Вообще-то лучше всего было бы сразу описать, какую задачу ты решаешь. Предлагаемое тобой решение, мягко говоря, вызывает опасения. Но если очень сильно надо, то можно
 (а) Передавать в конструктор параметр
 (б) Использовать конструкторы с разными именами
 (в) Создавать экземпляр класса "предыдущий месяц" только в момент первого обращения к нему
 (г) Разделить класс TMonth на два (TMonthWithoutPrevMonth и наследник от него TMonth).


 
iskatel ©   (2005-05-27 13:33) [6]

задача была такая:
расчитывается кое что за текущий месяц + прибавляются некоторые данные за предыдущий месяц, поэтому все было сделано рекурсивно, и все отлично считалось от n-ного месяца до января, но теперь задача изменилась: потребовалась ручная корректировка результатов, тоесть теперь нельзя перерасчитывать предыдущие месяца (все результаты рассчетов сохраняются), но нужно брать данные из одного предыдущего чтоб их использовать при рассчете текущего... изначально рекурсия была введена для того чтоб оперативно пересчитывать все, обнаружив ошибку во введенных данных скажем в январе :-)
т.е. класс month уже существует и надо просто его элегантно изменить, поэтому лучшим решением я считаю предложение ЮЮ, так как свойство PriorMonth уже есть (ему присваевается в рекурсии месяц м-1) и соответственно проверка на nil тоже есть (чтоб месяц не стал меньше января), осталось только сделать это св - во public...

PS. а аналогом статической переменной для ф-ции служат только memory mapped files? проще ничего нет, такой переменной чтоб была видна из всех объектов данного класса? а то мож есть, просто я торможу :-) тогда все это можно было бы решить на основе такой переменной...


 
iskatel ©   (2005-05-27 13:42) [7]

PSS to Mystic
(a) и (в) - одно и тоже (если не использовать MMF), хотя тоже вариант

(б) - что за икс??? име конструктора=имени класса, если только (б)+(г) :-))) -тоже в принципе мона :-)

ты бы скомпоновал (ав) и (бг) а то спросони я долго въезжал :-)
хотя тоже неплохой вариант, в отличие от предложения ЮЮ "наружу" ничего не вылезет и не придется переделывать еще и там...


 
iskatel ©   (2005-05-27 13:45) [8]

всем спасибки, я наконец - то проснулся и решил что лучьше сделать (б)+(г) от Mystic"а


 
Digitman ©   (2005-05-27 13:49) [9]


> аналогом статической переменной для ф-ции служат только
> memory mapped files?


MMF-механика, мягко говоря, служит несколько для иных целей


> переменной чтоб была видна из всех объектов данного класса?


область видимости любых идентификаторов определяется местораположением их декларации в тексте проекта или юнита

любой идентификатор, объавленный в разделе implementation (если речь идет о юните) ЗА пределами реализаций любых ф-ций/процедур/методов, будет иметь видимость, достаточную для обращения к нему из методов класса, реализованного в том же юните


 
iskatel ©   (2005-05-27 13:51) [10]

Digitman, т.е. даже из другого объекта того же класса?


 
Девушка с веслом   (2005-05-27 13:53) [11]

Digitman ©   (27.05.05 13:49) [9]
И даже шире, но только ниже.



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.038 c
1-1117043182
KLOPs
2005-05-25 21:46
2005.06.14
Двоичный --в--> десятичный


3-1114757222
afanasic
2005-04-29 10:47
2005.06.14
Oracle -> BDE -> Delphi не читается BLOB


4-1114076923
murk2
2005-04-21 13:48
2005.06.14
Как убрать кнопку окна из панели задач?


1-1117423021
FANAT
2005-05-30 07:17
2005.06.14
Количество строк


14-1116854541
AlterEgo of WondeRu
2005-05-23 17:22
2005.06.14
Logitech - получи кота в мешке!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский