![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() случилось следующее. отказывается работать функция mean в delphi7, так как хочет статический массив, а не динамический, какой я подсовываю ей. как можно обойти этот препон?
в rad xe5 функция mean и norm работают с динамическими массивами без всяких проблем. может и в 7 версии можно, что-то сделать, чтобы эти ф-ции заработали с динамическими массивами? |
#2
|
||||
|
||||
![]() Цитата:
|
#3
|
||||
|
||||
![]() да, все работает:
Код:
uses Math, Код:
var d: array of Double; begin SetLength(d, 2); d[0]:=0; d[1]:=10; ShowMessage(FloatToStr(Mean(d))); end; Код:
var d: array [0..1] of Double; begin d[0]:=0; d[1]:=10; ShowMessage(FloatToStr(Mean(d))); end; Пишу программы за еду. __________________ |
#4
|
|||
|
|||
![]() почему тогда у меня не работает. в чем ошибка? модуль math я подключил.
Код:
procedure TForm1.ATTRFm(const name: string); var Svalexetrhead:string; valexetrhead:Word; extblock:array[0..31] of Byte; tpProc:Cardinal; nameFileSeism:string; dPP,NcentrPV,NprS,Nsp:real; mic_b, mic_e, sig_b,sig_e,tras1_b,tras1_e,tras_b,tras_e:Cardinal; step,NaT,NserT,NseisT,ND,NprP,Npp:cardinal; ration:Real; countS,CountM:Integer; koef:single; i,j,z:Cardinal; Asig,Amic:array of Single; head:Thead; headtras:TheadTras; dats:array of single; f:TFileStream; v:TStringList; begin f:=TFileStream.Create(name,fmOpenRead); f.Read(head,SizeOf(head)); step:=SwapDword(head.step); NaT:=SwapDWorD(head.NallT); NserT:=SwapDWorD(head.NserT); NseisT:=SwapDWorD(head.NseisT); ND:=SwapDWorD(head.Ndiskret); NprS:=head.lv[0]*256*256+head.lV[1]*256+head.lV[2]; NprS:=NprS+head.lV[3]/256+head.lV[4]/256/256; Nsp:=head.PV[0]*256*256+head.PV[1]*256+head.PV[2]; Nsp:=Nsp+head.PV[3]/256+head.PV[4]/256/256; Nsp:=StrToFloat(FloatToStr(NprS)+FloatToStr(Nsp)); setlength(dats,nd); tras_b:=strtoint(form2.edit5.Text); tras_e:=strtoint(form2.edit6.Text); mic_b:=trunc(strtofloat(form2.edit1.Text)/step*1000+1); mic_e:=trunc(strtofloat(form2.edit2.Text)/step*1000+1); sig_b:=trunc(strtofloat(form2.edit3.Text)/step*1000+1); sig_e:=trunc(strtofloat(form2.edit4.Text)/step*1000+1); for I := 1 to NserT do begin f.Read(headtras,SizeOf(headtras)); f.Read(dats[0],nd*4); end; countS:=0; countM:=0; for i:=0 to NseisT-1 do begin //начиная с этой трассы ведем перебор и запись данных в массив мик f.Read(headtras,SizeOf(headtras)); f.Read(dats[0],nd*4); NprP:=headtras.LP[0]*256*256+headtras.LP[1]*256+headtras.LP[2]; Npp:=headtras.PP[0]*256*256+headtras.PP[1]*256+headtras.PP[2]; Npp:=StrToInt(IntToStr(NprP)+inttostr(Npp)); if (offset(Nsp,Npp)<=tras_e) and (offset(Nsp,Npp)>=tras_b) then begin SetLength(Amic,(mic_e-mic_b+1)+i*(mic_e-mic_b+1)); SetLength(Asig,(sig_e-sig_b+1)+i*(sig_e-sig_b+1)); koef:=swapflt(headtras.koef); for j:=mic_b-1 to mic_e-1 do begin Amic[CountM]:=Abs(koef*swapflt(dats[j])); //mt.Add(FloatToStr(Amic[CountM])); Inc(CountM); end; for z:=sig_b-1 to sig_e-1 do begin Asig[CountS]:=Abs(koef*swapflt(dats[z])); Inc(CountS); end; end; end; f.Free; if form2.radiobutton1.Checked then ration:=mean(Asig)/mean(Amic) else ration:=norm(Asig)/norm(Amic); end; при этом в rad xe5 этот код работает. а в delphi7 говорит о несовместимости типов - incompatible types 'array' and 'dynamic array' |
#5
|
||||
|
||||
![]() Цитата:
Т.е. если поменяешь объявление переменных на такое: Код:
Asig, Amic: array of Double; |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
Tonyy (03.01.2014)
|