StringGrid[delphi]

0

ZADANIE
Zdefiniowac dynamiczny typ macierzowy liczb rzeczywistych. Pobrac macierz kwadratowa z komponentu StringGridLiczbe kolumn i wierszy okreslic za pomoca komponentu SpinEdit wykorzystujac jego zdarzenie OnChange. Napisac funkcje obliczajaca srednia arytmetyczna wskazanego wiersza macierzy.

Czy ktos wie jak to zrobic?? licze na was(dryobates, vogel);)

0

Total Lizus!!

Var Macierz:Array of Array of Real;
I:Integer;
Begin
SetLength(Macierz,Ilosc1);
For I:=0 To Ilosc1-1 Do SetLength(Macierz[I],Ilosc2);

{tutaj instrukcje}

For I:=0 To Ilosc1-1 Do SetLength(Macierz[I],0);
SetLength(Macierz,0);
End;

W macierzy zapisujesz dane tak: Macierz[Kol,Wier]:=StrToFloat(StringGrid1.Cols[Kol].Strings[Wier]); o ile dobrze pamiętam. Tylko teraz pogłówkuj.

Czas rozwiązywania: 4 minuty.

0

Var Macierz:Array of Array of Real;

w Delphi wlasciwiej uzyc double. Choc w standardowym ustawieniu kompilatora real=double.

SetLength(Macierz,Ilosc1);
For I:=0 To Ilosc1-1 Do SetLength(Macierz[I],Ilosc2);

skoro tablica jest prostokatna, to mozna:
SetLength(Macierz, Ilosc1, Ilosc2);

(StringGrid1.Cols[Kol].Strings[Wier]);
Chyba najlatwiej StringGrid.cells[Kol, Wier]; (albo [Wier, Kol])

0

Czy ktos wie jak to zrobic?? licze na was(dryobates, vogel);)

Umiesz liczyć? Licz na siebie!

Nie lubię wazeliniarzy.
Ale ten temat akurat ruszę, z trochę innego względu.
Tak jak pq wspomniał, można to trochę usprawnić. Tu nawet więcej niż prostokątna, bo kwadratowa ma być macierz.

const
Il = 10;
var
Macierz: array of array of Double;
i, j: Integer;
begin
SetLength(Macierz, Il, Il);
for i := 0 to Il-1 do
for j := 0 to Il-1 do
Macierz[i, j] := StrToFloat(StringGrid1.Cells[i, j]);
end;

Ale inna rzecz, która mnie zadręcza, to to SetLength z długością na 0. W pomocy nie doszukałem się nic na temat tego, czy pamięć jest zwalniana automatycznie, czy trzeba ją zwalniać samemu.
A co najgorsze w tym wszystkim, że Encyklopedia też nie zawiera odpowiedzi na ten temat http://vcl.4programmers.net/viewapi.php?id=24
W Helpie można coś takiego pominąć, ale w Encyklopedii? To jest niewybaczalny błąd. Trzeba chyba testy przeprowadzić.

0

Ale inna rzecz, która mnie zadręcza, to to SetLength z długością na 0. W pomocy nie doszukałem się nic na temat tego, czy pamięć jest zwalniana automatycznie, czy trzeba ją zwalniać samemu.

http://4programmers.net/Forum/viewtopic.php?id=11306#11344

PS. O ile wiem lokalne tablice dynamiczne są automatycznie zwalniane po zakończeniu prcedury. Ale nie moge znaleźć potwierdzenia.

//dopisane

sprawdzilem, są zwalniane:
procedure TForm1.Button1Click(Sender: TObject);
var
x:array of integer;
begin
SetLength(x, 10000000);
SleepEx(5000,false);
end;

i TaskManager i wszystko jasne

0

Dzieki, sory ze zrozumieliscie to jak wazeliniarstwo, pprsotu ostatnio tylko wy pomogliscie juz nie bede
P.S. Nie rozumiej ka mozna nauczyc sie delphi przy pomocy F1

0

Normalnie. Gdyby ktoś mnie posadził przed Delphi'm bez helpa nic bym nie zrobił. Na każdym kroku uzywam helpa. SPrawdzam co ma jakie parametry, do czego służy itd.

1 użytkowników online, w tym zalogowanych: 0, gości: 1