Min i max Value z tablicy dynamicznej

0

Potrzebuje wyznaczyć min i maxValue z tablicy dynamicznej. Niestety funkcja ta wyrzuca błąd:
[DCC Error] Unit1.pas(799): E2010 Incompatible types: 'Array' and 'Dynamic array'
czy jest jakiś sposób obejścia tego, poza ręcznym porównywaniem elementów ?

1

czy jest jakiś sposób obejścia tego, poza ręcznym porównywaniem elementów ?

Spróbuj poprawić błąd w linii 799.
Ponieważ jesteś zbyt głupi aby pokazać kod, to nie licz na więcej :-/ .

0

Dziękuję za ciepłe słowa, lecz następnym razem przeczytaj ze zrozumieniem cały post.
Specjalnie dla **-123oho ** napiszę po polsku o co chodzi, bo może problem nie leży w czytaniu ze zrozumieniem tylko w rozumieniu języka angielskiego.

Potrzebuję wyznaczyć minValue i maxValue spośród elementów dynamicznej tablicy 2 wymiarowej. Niestety obie te funkcje wymagają tablicy statycznej. Moja macierz ma zdefiniowaną liczbę elementów za pomocą SetLength. Czy da się to jakoś przeskoczyć ograniczenie dotyczące rodzaju tablicy?

PS kolejny specjal dla **-123oho **, czyli kod:

  
 SetLength (fd, b, a);
...       
 fd[i][j]:=fmax*CosGamma[i][j];
...
 Writeln ('fd min= ',MinValue(fd));
 Writeln ('fd MAX= ',MaxValue(fd));
0

zainteresuj się funkcją Slice()
Slice

1

Specjalnie dla -123oho napiszę po polsku o co chodzi, bo może problem nie leży w czytaniu ze zrozumieniem tylko w rozumieniu języka angielskiego.

Ty chyba nie rozumiesz że my nie mamy tego kodu przed oczami tak jak ty :-/

Czy da się to jakoś przeskoczyć ograniczenie dotyczące rodzaju tablicy?

Nie.
Generalnie są sposoby na chakierskie sztuczki jeżeli chodzi o tablice statyczne, ale z dynamicznymi tak fajnie już nie jest.
Możesz skopiować zawartość tych dwuwymiarowych tablic do jednowymiarowej i wtedy użyć tej procedury, albo napisać procedurę która będzie działać na tablicach dwuwymiarowych. Zwłaszcza że jesteś newbie, więc chakierskie sztuczki nie są dla ciebie.

zainteresuj się funkcją Slice()
Slice

Tylko co to daje?

1

Gdyby moje pytanie dotyczyło samego kodu to bym go wkleił od razu. Dotyczy ono samego działania funkcji minvalue. Myślałem, że może jest wersja przeciążona tej procedury.
A-123oho, nie wiem kim jesteś i średnio mnie to interesuje ale mniemanie o sobie masz jakbyś co najmniej wymyślił Delphi. Więc wyjaśnij mi, o znawco, po co ci kod który składa się z opisywanej procedury i zmiennej będącej tablicą, i co to wnosi poparcie swojej wypowiedzi wyzwiskiem.

1

@Pegii
Formułuj wątki tak aby można było zrozumieć o co chodzi.
Po pierwsze w pierwszym poście nie napisałeś że chodzi o tablicę dwuwymiarową (wróżka by wiedziała).
Po drugie nie napisałeś co to jest fd (wróżka by wiedziała).
Po trzecie nie ma wersji przeciążonej funkcji MinValue/MaxValue, zresztą w tym przypadku chciałbyś żeby można było korzystać z tablicy o dowolnej liczbie wymiarów?
Zakładając, że fd:array of array of Double możesz wyszukiwać min/max w poszczególnych wierszach, MinValue(fd[0]), MinValue(fd[1]) itd, zapamiętywać je w tablicy pomocniczej jednowymiarowej i następnie wyszukać min/max w tej tablicy.

Ale prościej byłoby napisać własną funkcję wyszukiwania min/max w tablicy dwuwymiarowej.

0

"Tylko co to daje?" - chcesz powiedzieć że delphi trzyma wiersze w nie kolejnych obszarach pamięci?

A trzyma w kolejnych? Mówimy oczywiście o tablicy dynamicznej wielowymiarowej. Z tego co mi się wydaje nie, ale nigdy jakoś specjalnie nie sprawdzałem, mimo wszystko nie jestem pewien twojej intencji. Chcesz rozszerzyć tą tablicę do liczby wszystkich elementów tej dwuwymiarowej?

Gdyby moje pytanie dotyczyło samego kodu to bym go wkleił od razu. Dotyczy ono samego działania funkcji minvalue. Myślałem, że może jest wersja przeciążona tej procedury.

No przecież, że kod nie jest potrzebny tylko że NIGDZIE NIE WSPOMNIAŁEŚ ŻE CHODZIŁO O PROCEDURĘ MINVALUE. Czy naprawdę do ciebie nie dociera że my NIE widzimy tego co ty?

Więc wyjaśnij mi, o znawco, po co ci kod który składa się z opisywanej procedury i zmiennej będącej tablicą, i co to wnosi poparcie swojej wypowiedzi wyzwiskiem.

Bo tam widać:

  1. Jakiej procedury chcesz użyć
  2. W jakim kontekście chcesz jej użyć
  3. Dlaczego kompilator się pluje

A wyzwisko wynika z mojej irytacji taką nieumiejętnością zadania pytania.

0

NIGDZIE NIE WSPOMNIAŁEŚ ŻE CHODZIŁO O PROCEDURĘ MINVALUE

Agrh, ślepy jestem, wspomniałeś. Patrz na post @pelsta on ci dokładniej wytłumaczył czemu to nie działa.
Jak widać już te pytania noobów (jak się sam określa) mnie wyprowadzają z równowagi i normalnego myślenia :f

0
-123oho napisał(a):

"Tylko co to daje?" - chcesz powiedzieć że delphi trzyma wiersze w nie kolejnych obszarach pamięci?

A trzyma w kolejnych? Mówimy oczywiście o tablicy dynamicznej wielowymiarowej. Z tego co mi się wydaje nie, ale nigdy jakoś specjalnie nie sprawdzałem, mimo wszystko nie jestem pewien twojej intencji. Chcesz rozszerzyć tą tablicę do liczby wszystkich elementów tej dwuwymiarowej?
A nie po to zrobili SetLength(Tb,Y,X) aby przedzieliła wspólny obszar i odpowiednio go rozbiła?
W każdym razie sprawdziłem, w FPC - to już nie działa poprawnie.

0
_13th_Dragon napisał(a):

A nie po to zrobili SetLength(Tb,Y,X) aby przedzieliła wspólny obszar i odpowiednio go rozbiła?
W każdym razie sprawdziłem, w FPC - to już nie działa poprawnie.

Chyba właśnie po to to zrobili, ale właśnie w FPC nie działa to tak i przynajmniej dlatego nie należy tak robić :P . Jak chcesz to zpatchuj i wtedy się z tobą zgodzę :) .

W pierwszy poście Pegii wcale nie napisał, że chodzi mu o funkcje MinValue / MaxValue z modułu Math. Ale denerwować się nie ma co. Przecież możesz takie posty po prostu ignorować :)

Przecież to nie w moim stylu.

0

Przepraszam faktycznie w 1 poście nie napisałem że chodzi o 2 wymiarową tablicę.

Wniosek taki, że obie funkcje mają następujące ograniczenia:

  • musi być 1 wymiarowa
  • elementy muszą być Double

Dodatkowo MinValue można przeciążyć by służyła do porównywania.

0

Oto deklaracja funkcji

function MinValue(const Data: array of Double): Double;

Tablica nie musi być statyczna.
W poprzednim poście pisałem jak używać funkcję z tablicami dwuwymiarowymi.
Są też funkcje MinIntValue/MaxIntValue

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.