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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.09.2015, 16:04   #11
sera.kerch
Пользователь
 
Регистрация: 09.04.2015
Сообщений: 24
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение

Код:
TP =record p: integer; list: array of ???  end;
Tpaket = array of TP;

function GetProto(paket: Tpaket; proto: integer): TP;
begin
.....
end;
function GetSourceIP(p: ???, sourceIP): TSIP;
begin 
end;
и основной КОД
Код:
var
  p: TP;
begin
 P:=GetProto(paket, proto);// proto
 sip:=GetSip(p.list, sourceIP);// sourceIP
делаю так
Код:
type
Tsip=record sip:integer; sp:array of Tsp; end;
Psip = array of Tsip;

Tp=record p:integer; sip:array of Tsip; end;
Tpaket = array of TP;

function GetProto(paket_: Tpaket; proto: integer): TP;
var k,i:integer;
begin
....
end;

function GetSourceIP(sip: Psip; SourceIP: integer): Tsip;
var k,i:integer;
begin
....
end;

procedure Button2Click(Sender: TObject);
var Zpaket_:Tpaket;
     p:tp;
     sip:tsip
begin
 p:=GetProto(Zpaket_,12);
 sip:=GetSourceIP(p.sip,12);
end;
sip:=GetSourceIP(p.sip,12); - ошибка, подскажите, я не очень понял какой сюда тип подставлять
если ставлю GetSourceIP(sip: Tsip; SourceIP: integer): Tsip; то ругается на k:=high(sip); неизвестный тип

Последний раз редактировалось sera.kerch; 10.09.2015 в 16:07.
sera.kerch вне форума Ответить с цитированием
Старый 10.09.2015, 16:09   #12
sera.kerch
Пользователь
 
Регистрация: 09.04.2015
Сообщений: 24
По умолчанию

если ставлю GetSourceIP(sip: Tsip; SourceIP: integer): Tsip; то ругается на k:=high(sip); неизвестный тип

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

Текст ошибки засекречен? )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.09.2015, 16:17   #14
sera.kerch
Пользователь
 
Регистрация: 09.04.2015
Сообщений: 24
Сообщение

Цитата:
Сообщение от Stilet Посмотреть сообщение
Текст ошибки засекречен? )
))) в первом и втором варианте пишет неизвестный тип
sera.kerch вне форума Ответить с цитированием
Старый 10.09.2015, 16:47   #15
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Код:
type
Tsp=record....end;??????????? ДУМАЮ это есть!!!!!

Psip = array of Tsip;
Tsip=record sip:integer; sp: Psip; end; //НАДО !!! только ранее описанный ТИП динамического массив (Psip)

Tp=record p:integer; sip: Psip; end; !!!!!!!НАДО!!!!!! или какой там тип нужен (но только не array of !!!! )
Tpaket = array of TP;

function GetProto(paket_: Tpaket; proto: integer): TP;
var k,i:integer;
begin
....
end;

function GetSourceIP(sip: Psip; SourceIP: integer): Tsip;
var k,i:integer;
begin
....
end;
Да написание в блокноте имеет свои недостатки.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 10.09.2015 в 16:51.
evg_m вне форума Ответить с цитированием
Старый 11.09.2015, 09:02   #16
sera.kerch
Пользователь
 
Регистрация: 09.04.2015
Сообщений: 24
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Код:
type
Tsp=record....end;??????????? ДУМАЮ это есть!!!!!

Psip = array of Tsip;
Tsip=record sip:integer; sp: Psip; end; //НАДО !!! только ранее описанный ТИП динамического массив (Psip)

Tp=record p:integer; sip: Psip; end; !!!!!!!НАДО!!!!!! или какой там тип нужен (но только не array of !!!! )
Tpaket = array of TP;

function GetProto(paket_: Tpaket; proto: integer): TP;
var k,i:integer;
begin
....
end;

function GetSourceIP(sip: Psip; SourceIP: integer): Tsip;
var k,i:integer;
begin
....
end;
Да написание в блокноте имеет свои недостатки.
Можно привести рабочий пример описания 2 типов и их функции?
если дважды вызвать функцию GetProto то она не видит количества уже записанных данных
sera.kerch вне форума Ответить с цитированием
Старый 11.09.2015, 09:19   #17
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Код:
procedure Button2Click(Sender: TObject);
var Zpaket_:Tpaket;
     p:tp;
     sip:tsip
begin
 p:=GetProto(Zpaket_,12);
Цитата:
если дважды вызвать функцию GetProto то она не видит количества уже записанных данных
Дважды вызвать это означает дважды щелкнуть по кнопке, чтобы дважды сработал код приведенный выше?
Ну так ЗДЕСЬ каждый раз создается новая переменная и естественно создается НОВЫЙ массив.(и конечно никаких данных от предыдущего вызова).
что бы данные сохранялись от вызова к вызову
var Zpaket_: TPaket; должна сохраняться МЕЖДУ вызовами.
Быть или глобальной переменной, или полем формы.

Код:
var 
  Zpaket_:Tpaket; //быть ей глобальной переменной.

procedure Button2Click(Sender: TObject);
var
     p:tp;
     sip:tsip
begin
 p:=GetProto(Zpaket_,12);
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 11.09.2015, 10:28   #18
sera.kerch
Пользователь
 
Регистрация: 09.04.2015
Сообщений: 24
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
Код:
procedure Button2Click(Sender: TObject);
var Zpaket_:Tpaket;
     p:tp;
     sip:tsip
begin
 p:=GetProto(Zpaket_,12);
Дважды вызвать это означает дважды щелкнуть по кнопке, чтобы дважды сработал код приведенный выше?
Ну так ЗДЕСЬ каждый раз создается новая переменная и естественно создается НОВЫЙ массив.(и конечно никаких данных от предыдущего вызова).
что бы данные сохранялись от вызова к вызову
var Zpaket_: TPaket; должна сохраняться МЕЖДУ вызовами.
Быть или глобальной переменной, или полем формы.

Код:
var 
  Zpaket_:Tpaket; //быть ей глобальной переменной.

procedure Button2Click(Sender: TObject);
var
     p:tp;
     sip:tsip
begin
 p:=GetProto(Zpaket_,12);
Я это все прекрасно понимаю, если в процедуре нажатия кнопки вызвать
несколько раз GetProto, то каждый раз у меня получается что размер Zpaket_ -1

GetProto () написана Вами функция
sera.kerch вне форума Ответить с цитированием
Старый 11.09.2015, 11:15   #19
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

Код:
function GetProto(var paket: Tpaket; proto: integer): TP;
var
  k: integer;
  i: integer;
begin
 k:=high(paket);
 result.list:=nil; // ДИНАМИЧЕСКИЙ массив это ссылка и мы ее можеМ присваивать БЕЗ дублирования массивов!!!!
 for i:=0 to k do begin
  if paket[i].list=nil then begin // это пока ПУСТОЙ элемент ???
    paket[i].p:=proto;
    SetLength(paket[i].list, 10);
  end;
  if proto=paket[i].p then begin
   result.p:=paket[i].p;
   result.list:=paket[i].list; //мы копируем НЕ массив, а только ссылку НА НЕГО!!!!
   break;
  end;
 end;
 if result.list=nil then begin //мы так и не нашли ???
   k:=length(paket);
   SetLength(paket,k+10);// прибавим сразу МНОГО (аж целых десять!)
   paket[k].p:=proto;
   SetLength(paket[k].list, 10);
   result.p:=paket[k].p;
   result.list:=paket[k].list;
 end;
end;
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 11.09.2015 в 11:18.
evg_m вне форума Ответить с цитированием
Старый 11.09.2015, 12:31   #20
sera.kerch
Пользователь
 
Регистрация: 09.04.2015
Сообщений: 24
По умолчанию

сделал так :
Код:
Tsp=record sp:integer; end;
Psp = array of Tsp;
Tsip=record sip:integer; sp: Psp; end;
Psip = array of Tsip;
Tp=record p:integer; sip: Psip; end;
Tpaket = array of TP;

var
  Form1: TForm1;
  Zpaket_:Tpaket;


implementation

{$R *.dfm}

function GetProto(var paket: Tpaket; proto: integer): TP;
var
  k: integer;
  i: integer;
begin
 k:=high(paket);
 result.sip:=nil;
 for i:=0 to k do begin
  if paket[i].sip=nil then begin
    paket[i].p:=proto;
    SetLength(paket[i].sip, 1);
  end;
  if proto=paket[i].p then begin
   result.p:=paket[i].p;
   result.sip:=paket[i].sip;
   break;
  end;
 end;
 if result.sip=nil then begin
   k:=length(paket);
   SetLength(paket,k+2);
   paket[k].p:=proto;
   SetLength(paket[k].sip, 1);
   result.p:=paket[k].p;
   result.sip:=paket[k].sip;
 end;

end;

function Getsip(var Psip_: Psip; SourceIP: integer): Tsip;
var
  k: integer;
  i: integer;
begin
 k:=high(Psip_);
 result.sp:=nil;
 for i:=0 to k do begin
  if Psip_[i].sp=nil then begin
    Psip_[i].sip:=SourceIP;
    SetLength(Psip_[i].sp, 1);
  end;
  if SourceIP=Psip_[i].sip then begin
   result.sip:=Psip_[i].sip;
   result.sp:=Psip_[i].sp;
   break;
  end;
 end;
 if result.sp=nil then begin
   k:=length(Psip_);
   SetLength(Psip_,k+2);
   Psip_[k].sip:=SourceIP;
   SetLength(Psip_[k].sp, 1);
   result.sip:=Psip_[k].sip;
   result.sp:=Psip_[k].sp;
 end;

end;

function GetSp(var Psp_: Psp; SourceP: integer): Tsp;
var
  k: integer;
  i: integer;
begin
 k:=high(Psp_);
 for i:=0 to k do begin
  if SourceP=Psp_[i].sp then begin
   result.sp:=psp_[i].sp;
   exit;
  end;
 end;
   k:=high(Psp_);
   SetLength(Psp_,k+2);
   Psp_[k].sp:=SourceP;
   result.sp:=SourceP;
end;



procedure TForm1.Button1Click(Sender: TObject);
var
  p:tp;
  s:Tsip;
  po:Tsp;
begin
//1
 p:=GetProto(Zpaket_,12);
 s:=Getsip(p.sip,10);
 po:=GetSp(s.sp,55);
//2
 p:=GetProto(Zpaket_,13);
 s:=Getsip(p.sip,11);
 po:=GetSp(s.sp,45);
//3
 p:=GetProto(Zpaket_,12);
 s:=Getsip(p.sip,10);
 po:=GetSp(s.sp,55);
end;
функция GetSp(); присваивает
но при 3 проходе не находит (((( не могу понять почему
sera.kerch вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Указатели и динамические массивы Placebo228 Общие вопросы C/C++ 4 07.11.2012 16:15
Указатели и динамические массивы С++ Лилия396 Помощь студентам 0 14.05.2012 18:00
Динамические массивы и указатели GrihaI Общие вопросы C/C++ 5 30.05.2010 17:52
Указатели и динамические массивы iiunbreakableii Общие вопросы Delphi 7 04.09.2009 14:43
Указатели и динамические массивы. Airou Общие вопросы C/C++ 5 16.01.2009 19:05