Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Delphi > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 11.08.2019, 14:53   #161
anaschu
Форумчанин
 
Регистрация: 21.09.2012
Сообщений: 243
Репутация: 27
По умолчанию

нет, все таки я не смог внедрить новые классы в старый код. пришлось работать напрямую с этими дженериками. одну проблему описал выше, ща другая.

внутри unit Model есть процедура инит.
в ней я внутри ячейки Fiield создаю дженерик колекшион Popul, а там создаю обьект Human/

так вот, Human я засовываю ТОЛЬКО в срединную ячейку. Но почему то в конце процедуры у меня ВСЕ клетки на поле оказываются заселенными людьмми.

Код:
Procedure Init(Size: integer; Food, Mater: Single);
var
  i, j,z: Integer;
  Hum:Thuman;
begin
      Fstep := 0;
      SetLength(Field, Size, Size);
      for i := 0 to high(Field) do
        for j := 0 to high(Field[i]) do
        begin
          Field[i, j]:=Tcell.Create;
          Field[i, j].Food := Food;
          Field[i, j].Mater := Mater;
        end;
            for z := 0 to 1 do      // это на самом деле скопировано из Cell
            begin
            hum:=THuman.Create;
            with Hum.Genotype do
            begin
              Agress := 5;
              Attract := 5;
              Coop := 5;
              Altr := 5;
              Strange := 5;
              Rank := 5;
               Field[Size div 2, Size div 2].Popul.Add(@Hum);
            end;

          end;

          forinitsex(Size);
end;

procedure forinitsex(x:integer) ;
Begin

            Field[1,1].Popul[0].Genotype.Sex := True;
            Field[1,1].Popul[1].Genotype.Sex := False;
            Field[1,1].BySex.Insert(0,0) ;
            Field[1,1].BySex.Insert(1,1) ;
End;
anaschu на форуме   Ответить с цитированием
Старый 12.08.2019, 21:10   #162
anaschu
Форумчанин
 
Регистрация: 21.09.2012
Сообщений: 243
Репутация: 27
По умолчанию

https://www.dropbox.com/s/77g5gu94o9...D1%8F.rar?dl=0


две проблемы
1. Human кроме центральной ячейки записывается в остальные при

переходе с 50 на 52 строку (кроме 1,1 записывается в 0,0 0,1 и

так далее).
Причем в тлисте попул нет экземпляров, но для этих экземпляров

можно определить поля этих экзепляров, а именно sex.
Как следствие

2. как только я что то делаю в конце процедуры адпипл, генотип

исчезает
но теперь проблемы в tcellGenotype
а именно с 47 строчки- там исчезают последние генотипы. то есть

попул появляется раньше, чем заполняется генотип.
anaschu на форуме   Ответить с цитированием
Старый 13.08.2019, 15:31   #163
evg_m
Профессионал
 
Регистрация: 20.04.2008
Сообщений: 4,911
Репутация: 2242
По умолчанию

Цитата:
нет, все таки я не смог внедрить новые классы в старый код. пришлось работать напрямую с этими дженериками. одну проблему описал выше, ща другая.
чтобы не писать много на форуме 1.zip
взял версию 3.2 (c DropBox)
и в ней пошагово (см. инструкция.txt) пребразовал 4 приложенных файла *.pas+
только компиляция (без единого запуска) кроме последнего на 9 шаге.
запустил.
да шаг 10 только написал в инструкцию но в коде не делал.

основная проблема делаем "наверху" все то что надо бы делать в самых "нижних" классах. шаги 3-8 и частично 9.
т.е. у нас изначально много кода в Tcell и почти нет кода в Thuman
попытался все что работает с одним экземпляром Thuman убрать туда
прежде всего исчезли длинные строки с кучей точек (вложенные объекты были предоставлены себе) и читать проще и надеюсь понятнее.
__________________
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума   Ответить с цитированием
Старый 14.08.2019, 03:11   #164
anaschu
Форумчанин
 
Регистрация: 21.09.2012
Сообщений: 243
Репутация: 27
По умолчанию

ого. завтра вечером гляну
anaschu на форуме   Ответить с цитированием
Старый 15.08.2019, 01:20   #165
anaschu
Форумчанин
 
Регистрация: 21.09.2012
Сообщений: 243
Репутация: 27
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
и читать проще и надеюсь понятнее.
ну да, понятнее. всё таки очередной раз убедился, что в нас в лаборатории эко мат мод ужасный стиль программинга.там очень заботяться о быстром написании и одновременно о быстрой отработке. в итоге пользуются указателями, в одной функции и процедуре делают сразу много вещей и так далее....чувак, который это писал, наверное, у него природный талант разбираться в своем коде и быстро писать. Но мне и остальным это все не всегда понятно

Последний раз редактировалось anaschu; 15.08.2019 в 01:42.
anaschu на форуме   Ответить с цитированием
Старый 15.08.2019, 10:44   #166
evg_m
Профессионал
 
Регистрация: 20.04.2008
Сообщений: 4,911
Репутация: 2242
По умолчанию

в дополнение к #163
я бы ещё отказался от использования ord
особенно учитывая что мы здесь заменили тип используемых данных boolean --> TEnumSex =(t_man, t_woman)
и скорее всего получили неверную формулу по следующей причине
ord(false) <> ord(t_woman)
ord(true) <> ord(t_man)

Код:
const
  Hum: array [0 .. 3] of Single = (-0.5, 0.5, -1, 1);
  hum2: array [TEnumSex, 0..2{ну или сколько хотим вариантов}] of single= ( (-0.5, 0.5, 0), // для t_man 
                                            (-1, 1, 0) // и t_woman
                                            );
и соответственно
Код:
    self.Genotype.Agress := summ * 0.5 + random * summ * Hum[random(ord(self.Genotype.Sex) * 2 + 2)];
// на выбор (и для возможной коррекции, ну не кажетcя она мне правдоподобной
// но об этом судить вам и только вам
    self.Genotype.Agress:=summ *0.5 +random * summ * hum2[self.Genotype.Sex, Random(3)];
    self.Genotype.Agress:=summ * (0.5 + random * hum2[self.Genotype.Sex, Random(3)] );
другие поля Genotype аналогично.

и "небольшое" замечание к логике.
Цитата:
Код:
//      self.Sort(1); // Ресурсов не хватает даже бабам - в приоритете те, кто готов поделиться
    self.Popul.Sort( sortaltr);
  for p := 0 to self.Popul.Count-1 do
  begin
    self.EatEach(THuman(self.Popul[p]));
и так при недостаче ресурсов первыми потребляют альтруисты(кто готов делиться), НО при этом "забывают" делиться.
P.S. я так полагаю это(дележка и т.п.) должно было бы размещаться здесь и далее
Цитата:
Код:
//первая вспомогательная процедура
procedure TCell.EatEach(Hum: THuman);
begin
...
        // ввести борьбу за еду
        hum.addresource(self.Food);
__________________
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 15.08.2019 в 11:35.
evg_m вне форума   Ответить с цитированием
Старый 16.08.2019, 01:18   #167
anaschu
Форумчанин
 
Регистрация: 21.09.2012
Сообщений: 243
Репутация: 27
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
4 приложенных файла *.pas+
чисто интуитивно перенес в среду дельфи:
1.убрал "delphi mode"
2. в теле программы после имплементейшн оверлоад после названия процедуры после точки с запятой вроде не пишется?
3. проблема.
пришлось сделать вот так.

Код:
public
    constructor Create1;
    destructor Destroy; override;
    constructor Create(asex: TEnumSex); overload;
    constructor Create(Amother, Afather: THuman); overload;
    procedure addresource(var res: Single);
  end;
иначе была вот такая ошибка на этапе компиляции:
[dcc32 Error] Objects.pas(71): E2267 Previous declaration of 'Create' was not marked with the 'overload' directive
[dcc32 Error] Objects.pas(72): E2267 Previous declaration of 'Create' was not marked with the 'overload' directive
anaschu на форуме   Ответить с цитированием
Старый 16.08.2019, 01:19   #168
anaschu
Форумчанин
 
Регистрация: 21.09.2012
Сообщений: 243
Репутация: 27
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
4 приложенных файла *.pas+
чисто интуитивно перенес в среду дельфи:
1.убрал "delphi mode"
2. в теле программы после имплементейшн оверлоад после названия процедуры после точки с запятой вроде не пишется?
3. проблема.
пришлось сделать вот так.

Код:
public
    constructor Create1;
    destructor Destroy; override;
    constructor Create(asex: TEnumSex); overload;
    constructor Create(Amother, Afather: THuman); overload;
    procedure addresource(var res: Single);
  end;
иначе была вот такая ошибка на этапе компиляции:
[dcc32 Error] Objects.pas(71): E2267 Previous declaration of 'Create' was not marked with the 'overload' directive
[dcc32 Error] Objects.pas(72): E2267 Previous declaration of 'Create' was not marked with the 'overload' directive
anaschu на форуме   Ответить с цитированием
Старый 16.08.2019, 01:22   #169
anaschu
Форумчанин
 
Регистрация: 21.09.2012
Сообщений: 243
Репутация: 27
По умолчанию

Теперь все файлы выглядят так. изменения практически только в Objects
Вложения
Тип файла: rar soc_mod_woman_man_3.rar (4.1 Кб, 1 просмотров)
anaschu на форуме   Ответить с цитированием
Старый 16.08.2019, 01:23   #170
anaschu
Форумчанин
 
Регистрация: 21.09.2012
Сообщений: 243
Репутация: 27
По умолчанию

Ошибка теперь у меня такая вот
[dcc32 Error] E1026 File not found: 'Face.lfm'
anaschu на форуме   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
построение клеточного автомата в Excel olgafirst Помощь студентам 0 02.04.2014 00:26
Математическая модель "Автосервис" pro100saniok Помощь студентам 4 24.05.2012 18:31
Меня раздражают наши "звезды", которые считают себя сливками общества... grenles Свободное общение 53 16.02.2011 12:16
Стоит ли покупать видеокурс О.Л.Соколова, Видеокурс О.Л.Соколова "Проф.хакер" arkad-167 Помощь студентам 1 27.02.2010 11:32
Создаю диаграмму "Bar". Подскажите как убрать растояние между "столбами" MAcK Компоненты Delphi 11 24.10.2007 10:49


23:35.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru