Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.10.2009, 11:13   #1
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию Сложная структура записи (record+array)

Знач запись примерно такая:
Код:
TDetail = record
             ...
             bla-bla-bla
             ...
             Junction = record
                            JCount:Byte;
                            JType:Array ... of Byte;
                            JOccupied:Array ... of Boolean
                            ... 
                            bla-bla-bla
             End;
End;

Так вот, что разрешается записать в Array ... of Byte вместо многоточия, чтоб примерно так:
Код:
Array[1..Count] of Byte;
или на крайняк
Код:
Array of Byte;
, но тогда, наверное нужно будет писать специальную процедуру для установки длины массива.

P.S. Идея эта: http://www.programmersforum.ru/showp...29&postcount=6
P.P.S. Или может классами поиграться, а там сделать подобие SL:=TStringList.Create;, где и устанавливать длину массива.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 19.10.2009, 11:29   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

думаю выделить изначально столько-то памяти под Array[1..Count] of Byte будет проще, сразу будет ясно сколько жрет, только весь вопрос сколько выделить...

хранить описание объектов типа танчики что-ли?
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 19.10.2009, 11:33   #3
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Не, хранить описание деталей. Типа детали между собой соединяются "узлами", а кол-во узлов неизвестно, пока деталь не считана (например из файла), в полной версии этой структуры (наверху сокращенная) еще хранятся имя детали, подсоединенной к каждому узлу и пр. и пр.

Цитата:
Array[1..Count] of Byte будет проще
Я тоже думаю, что это оптимальный вариант, но вопрос в том, будет ли это адекватно? Ведь хоть Count и описан перед массивом, значения он пока не имеет.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 19.10.2009, 11:39   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Или может классами поиграться,
Светлая мысль. Воплоти ее в жизнь
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.10.2009, 11:39   #5
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
Типа детали между собой соединяются "узлами", а кол-во узлов неизвестно, пока деталь не считана
ага, так и думал

Цитата:
но вопрос в том, будет ли это адекватно? Ведь хоть Count и описан перед массивом, значения он пока не имеет
ругается пока константой не сделал, значит число узлов деталей должно быть четкое кол-во
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 19.10.2009, 11:43   #6
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Цитата:
Светлая мысль. Воплоти ее в жизнь
Еслиб я еще помнил классы Ну ничего, найду.
Цитата:
ругается пока константой не сделал
Я так и думал, придется делать неопределенный массив.

Тему пока не закрывайте, plz, мож что еще понадобится.

Ложная тревога, все исправил.
Delete, plz.
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ

Последний раз редактировалось Stilet; 19.10.2009 в 13:02.
Alex Cones вне форума Ответить с цитированием
Старый 19.10.2009, 13:01   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я бы так делал :
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;
  Type
      TJunction = record
                 JType             :Array of Byte;    {Ex.: 1 - bolt, 2 - glue}
                 JOccupied         :Array of Boolean; {Occupied? Yes\No       }
                 JOccupiedBy       :Array of Integer; {ID of another detail   }
                 JOccupiedIn       :Array of Byte;    {Junction of an. detail }
      End;

 TDetail = Class(TObject)
    private
    FJCount: integer;
    procedure SetJCount(const Value: integer);
    protected
    public
      Mass         :Integer;                          {Ex.: 12 500 g.         }
      Cost         :Integer;                          {Ex.: 12 000 $          }
      Name         :String[20];                       {Ex.: 'Платформа T3'    }
      ID           :Integer;                          {Ex.: 5                 }
      Junction:TJunction;
     Property JCount:integer read FJCount write SetJCount;
      constructor Create;
  end;
{ TDetail }

constructor TDetail.Create;
begin

end;

procedure TDetail.SetJCount(const Value: integer);
begin
  FJCount := Value;
  SetLength(Junction.JType,FJCount);
  SetLength(Junction.JOccupied,FJCount);
  SetLength(Junction.JOccupiedBy,FJCount);
  SetLength(Junction.JOccupiedIn,FJCount);
  SetLength(Junction.JType,FJCount);

end;

var j:TDetail;
begin
 j:=TDetail.Create;
 j.JCount:=10;
 j.Junction.JType[3]:=2;
 j.Free;
  { TODO -oUser -cConsole Main : Insert code here }
end.
Т.е. изменение значения в JCount повлечет за собой пертурбации массивов.
I'm learning to live...

Последний раз редактировалось Stilet; 19.10.2009 в 13:09.
Stilet вне форума Ответить с цитированием
Старый 19.10.2009, 13:02   #8
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

убрал вложенный record наружу и сделал наследование
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 19.10.2009 в 13:03. Причина: какие вы быстрые :d
raxp вне форума Ответить с цитированием
Старый 19.10.2009, 13:06   #9
Alex Cones
Trust no one.
Старожил
 
Аватар для Alex Cones
 
Регистрация: 07.04.2009
Сообщений: 6,526
По умолчанию

Знач создал вот так:
Код:
unit UnitClass;

interface

Uses
 SysUtils, Graphics;

Type
 TJunction = record
                 JCount            :Byte;             {Ex.: 16                }
                 JType             :Array of Byte;    {Ex.: 1 - bolt, 2 - glue}
                 JOccupied         :Array of Boolean; {Occupied? Yes\No       }
                 JOccupiedBy       :Array of Integer; {ID of another detail   }
                 JOccupiedIn       :Array of Byte;    {Junction of an. detail }
      End;
 TDetail = Class(TObject)
    private
    protected
    public
      Mass         :Integer;                          {Ex.: 12 500 g.         }
      Cost         :Integer;                          {Ex.: 12 000 $          }
      Name         :String[20];                       {Ex.: 'Платформа T3'    }
      ID           :Integer;                          {Ex.: 5                 }
      Source       :Array[0..15] of TBitMap;          {Animation images       }
      Junction     :TJunction;
      constructor Create;
  end;



implementation

Constructor TDetail.Create;
 Begin
  SetLength(Self.Junction.JType,Self.Junction.JCount);
  SetLength(Self.Junction.JOccupied,Self.Junction.JCount);
  SetLength(Self.Junction.JOccupiedBy,Self.Junction.JCount);
  SetLength(Self.Junction.JOccupiedIn,Self.Junction.JCount);
  SetLength(Self.Junction.JType,Self.Junction.JCount);
 End;

end.
Код:
unit UNTMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, UnitClass, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  B:TBitMap;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
Var Det:TDetail;
begin
 Det.Junction.JCount:=5;
 Det.Create;
 Det.Junction.JType[1]:=2;
 Button1.Caption:=IntToStr(Det.Junction.JType[1]);
end;

end.
Но меня ругают, мол низзя Det.Junction.JType[1]:=2;!


О_о сколько ответов
SQUARY PROJECT - НАБОР БЕСПЛАТНЫХ ПРОГРАММ ДЛЯ РАБОЧЕГО СТОЛА.
МОЙ БЛОГ
GRAY FUR FRAMEWORK - УДОБНАЯ И БЫСТРАЯ РАЗРАБОТКА WINAPI ПРИЛОЖЕНИЙ
Alex Cones вне форума Ответить с цитированием
Старый 19.10.2009, 13:10   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Но меня ругают,
Внимательно смотрим мой пример.
Цитата:
О_о сколько ответов
Сам же просил )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
записи - структура (пару вопросов) felmor Паскаль, Turbo Pascal, PascalABC.NET 1 25.05.2009 03:23
Текстовый файл - Структура (записи) felmor Паскаль, Turbo Pascal, PascalABC.NET 0 18.05.2009 22:36
Записи (структура). проверить. felmor Паскаль, Turbo Pascal, PascalABC.NET 1 16.05.2009 17:24
Структура программы, записи. Нужна проверка. Roof Общие вопросы Delphi 2 18.01.2009 21:57