Witam,
zrobiłem prosty program posiadający dwa pola memo i button 'oblicz' oraz menu -> new,open,save.
Przez open wgrywam plik tekstowy składający się z kolumny danych (wartości rzeczywiste) np. 10 liczb. Po kliknięciu 'oblicz' :
- czytam dwie kolejne wartości z memo1
- wyznaczam funkcję y = ax+b
- generuję określoną liczbę punktów pomiędzy wartościami z memo1 i dodaję do memo2
Operacja 'oblicz' trwa kilkadziesiąt sekund dla 200 danych z memo1 i podziałem przedziału na 200 części.
Czy da się to jakoś przyspieszyć? Ostatecznie zależy mi na zapisaniu tego do pliku txt w postaci kolumny z kropką jako separatorem dziesiętnym (a nie przecinkiem jak robi to winda)
Oto procedura:
procedure TForm1.Button1Click(Sender: TObject);
var
i, x, Span, licz, step1, tmp : integer;
a, b : real;
y1, y2, y : real;
text : string;
begin
Randomize;
licz := 0;
memo2.Lines[0] := memo1.Lines[0];
licz := licz + 1;
Step1 := StrToInt(Step.Text);
tmp := Round(10000 / step1);
//tmp := tmp - 1;
Span := StrToInt(RandomSpan.Text);
for I := 0 to memo1.Lines.Count-2 do
begin
y1 := StrToFloat(memo1.Lines[I]) * 1000; // przejscie z [m] na [mm]
y2 := StrToFloat(memo1.Lines[I+1]) * 1000;
a := y2 - y1;
a := a / 10000;
b := y1;
for x := 1 to tmp do
begin
y := (a * (x* step1)) + b;
y := y + Random (Span);
y := y / 1000;
text := FloatToStr(y);
memo2.Lines.Add(text);
//if (x = tmp) then
if (I = memo1.Lines.Count-1) then
if x = tmp then
memo2.Lines.Add(memo1.Lines[I+1]);
licz := licz + 1;
Form1.Label1.Caption := IntToStr(licz);
end;
end;
end;
z góry dzięki