Min i max Value z tablicy dynamicznej

Min i max Value z tablicy dynamicznej
Pegii
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 11 lat
  • Postów:54
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 ?


Uwaga NooB !!!
pelsta
Idź do wróżki.
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 :-/ .

Pegii
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 11 lat
  • Postów:54
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:

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

Uwaga NooB !!!
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
0

zainteresuj się funkcją Slice()
Slice


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
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?

_13th_Dragon
"Tylko co to daje?" - chcesz powiedzieć że delphi trzyma wiersze w nie kolejnych obszarach pamięci?
Pegii
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 11 lat
  • Postów:54
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.


Uwaga NooB !!!
pelsta
  • Rejestracja:prawie 19 lat
  • Ostatnio:17 dni
  • Postów:819
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

pelsta
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ć :)
_13th_Dragon
Jak się na tym forum trochę posiedzi to z: "... min i maxValue ..." trza już się nauczyć wnioskować ze wspomniał o tych funkcjach. ;P
_13th_Dragon
  • Rejestracja:ponad 19 lat
  • Ostatnio:2 miesiące
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.


Wykonuję programy na zamówienie, pisać na Priv.
Asm/C/C++/Pascal/Delphi/Java/C#/PHP/JS oraz inne języki.
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.

Pegii
  • Rejestracja:około 13 lat
  • Ostatnio:ponad 11 lat
  • Postów:54
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.


Uwaga NooB !!!
edytowany 1x, ostatnio: Pegii
pelsta
  • Rejestracja:prawie 19 lat
  • Ostatnio:17 dni
  • Postów:819
0

Oto deklaracja funkcji

Kopiuj
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

edytowany 2x, ostatnio: pelsta
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)