Teil eines Array übergeben
Teil eines Array übergeben
Hallo,
ich habe ein array ergebnisvektor[j,i]
Ich möchte nun die Funktion mean darauf anwenden.
Also z.b. showmessage(floattostr(mean(ergebnisvektor2[12,i])))
das funktioniert auch.
Mein Problem ist, dass meine Werte in Ergebnisvektor erst mit dem Index i=1 anfangen. i=0 ist nicht definiert wird aber leider bei der Berechnung von mean berücksichtigt.
Wie kann ich den Ergebnisvektor übergeben, dass nur die Werte i= 1...n übergeben werden.
Danke im Voraus.
ich habe ein array ergebnisvektor[j,i]
Ich möchte nun die Funktion mean darauf anwenden.
Also z.b. showmessage(floattostr(mean(ergebnisvektor2[12,i])))
das funktioniert auch.
Mein Problem ist, dass meine Werte in Ergebnisvektor erst mit dem Index i=1 anfangen. i=0 ist nicht definiert wird aber leider bei der Berechnung von mean berücksichtigt.
Wie kann ich den Ergebnisvektor übergeben, dass nur die Werte i= 1...n übergeben werden.
Danke im Voraus.
-
- Lazarusforum e. V.
- Beiträge: 3177
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Teil eines Array übergeben
Verstehe ich das richtig, dass der Index 0 zwar existiert, aber einen für deine Anwendung ungültigen oder nicht zu beachtenden Wert beinhaltet? (Deklarationen von Variablen und den verwendeten Typen sind immer hilfreich)ccmueller hat geschrieben:Mein Problem ist, dass meine Werte in Ergebnisvektor erst mit dem Index i=1 anfangen. i=0 ist nicht definiert wird aber leider bei der Berechnung von mean berücksichtigt.
Du erstellt ein zweites Array und kopierst alle Werte dort hinein.ccmueller hat geschrieben:Wie kann ich den Ergebnisvektor übergeben, dass nur die Werte i= 1...n übergeben werden.
Im Falle der mean()-Funktionen aus der Unit math (ich habe jetzt mal geraten, dass du diese meinst), kannst du das aber auch über Zeiger lösen. Erster Parameter ist dann ein Zeiger auf das erste zu beachtende Element und das zweite Argument ist die Anzahl der zu beachtenden Einträge. Den Zeiger musst du auf den entsprechenden Typ deiner Array-Elemente casten.
Code: Alles auswählen
var
a: array [1..3] of single;
m: float;
begin
a[1] := 1.1;
a[2] := 2.2;
a[3] := 3.3;
m := mean(PSingle(@a[2]),2);
end;
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 340
- Registriert: Di 12. Sep 2006, 08:57
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
- Kontaktdaten:
Re: Teil eines Array übergeben
Warum so kompliziert?
Man kann das Array doch einfach bei 0 anfangen lassen...
Man kann das Array doch einfach bei 0 anfangen lassen...
Code: Alles auswählen
var
a: array [0..2] of single;
m: float;
begin
a[0] := 1.1;
a[1] := 2.2;
a[2] := 3.3;
...
end;
Grüße, Antrepolit
care only if your os is really burning
care only if your os is really burning
-
- Beiträge: 1187
- Registriert: Mi 13. Dez 2006, 10:58
- OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
- CPU-Target: AMD A4-6400 APU
- Wohnort: Hamburg
Re: Teil eines Array übergeben
i+1
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.
(Ringelnatz)
(Ringelnatz)
-
- Beiträge: 351
- Registriert: Di 17. Feb 2009, 10:44
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Teil eines Array übergeben
Hallo,
ich habe in diesem Zusammenhang eine ähnliche Frage:
Folgendes Listing:
Ich kann "max" mal mit MaxValue oder mit MinValue aufrufen und bekomme das identische Ergebnis: 1.1 und Index 0.
Erwarten würde ich für den Aufruf mit MinValue als Ergebnis 0.5 und index 1, bei MaxValue als Ergebnis 3.2 und index 2.
mean ist OK. Liefert 1.6.
Was mache ich falsch?
Gruß
Volker
ich habe in diesem Zusammenhang eine ähnliche Frage:
Folgendes Listing:
Code: Alles auswählen
begin
a[0]:=1.1;
a[1]:=0.5;
a[2]:=3.2;
mitt:=mean(a);
max:=MinValue(a,index);
writeln(mitt:3:1);
writeln('');
writeln(max:3:1);
writeln('');
writeln(index);
readln;
end.
Erwarten würde ich für den Aufruf mit MinValue als Ergebnis 0.5 und index 1, bei MaxValue als Ergebnis 3.2 und index 2.
mean ist OK. Liefert 1.6.
Was mache ich falsch?
Gruß
Volker
Re: Teil eines Array übergeben
Welches MinValue meinst du?
Falls es das aus der Unit Math ist, wie kommst du darauf, dass der zweite Parameter ein Index sei?
Falls es das aus der Unit Math ist, wie kommst du darauf, dass der zweite Parameter ein Index sei?
-
- Beiträge: 351
- Registriert: Di 17. Feb 2009, 10:44
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Teil eines Array übergeben
Nun ja, ich hab' die Hilfe falsch interpretiert.
Es gibt die Funktion vier mal, und zwei Aufrufvarianten beinhalten ein "N" als Integer. Ich dachte hier würde ähnlich wie bei einer Deklaration mit "var" eben der Index zurückgegeben.
Es war der Wunsch Vater des Gedanken. Ich bräuchte eine Funktion die mir den Max-Wert einschließlich Position aus einem Array liefert.
Ansonsten Funktionieren MaxValue und MinValue tadellos.
Ich habe zwei Arrays. Eines enthält Drehmomente eines Motors, das Andere die zugehörige Drehzahl. Mit MaxValue wollte ich aus dem Momentenarray entsprechend das Maximum und mit Index die Position herausbekommen um aus dem Drehzahlarray über den Index die zugehörige Drehzahl zu holen. Beide Arrays sind gleich lang.
Gruß
Volker
Es gibt die Funktion vier mal, und zwei Aufrufvarianten beinhalten ein "N" als Integer. Ich dachte hier würde ähnlich wie bei einer Deklaration mit "var" eben der Index zurückgegeben.
Es war der Wunsch Vater des Gedanken. Ich bräuchte eine Funktion die mir den Max-Wert einschließlich Position aus einem Array liefert.
Ansonsten Funktionieren MaxValue und MinValue tadellos.
Ich habe zwei Arrays. Eines enthält Drehmomente eines Motors, das Andere die zugehörige Drehzahl. Mit MaxValue wollte ich aus dem Momentenarray entsprechend das Maximum und mit Index die Position herausbekommen um aus dem Drehzahlarray über den Index die zugehörige Drehzahl zu holen. Beide Arrays sind gleich lang.
Gruß
Volker
Re: Teil eines Array übergeben
Wie wär's mit "sich-nicht-so-anstellen"?
Den Grössten Wert aus einem Array bestimmen ist keine Quantenphysik.
Wenn man zu faul dazu ist, setzt man den Cursor auf "MinValue" in Source-Code und drückt "Alt+Hoch" und dann "Umschalt+Ctrl+Runter".
Dort liest man dann wie MinValue funktioniert, kopiert das und bastelt sich die gewünschte Funktion selber.
Ist schneller gemacht als zig Forenbeiträge zu verfassen.

Den Grössten Wert aus einem Array bestimmen ist keine Quantenphysik.
Wenn man zu faul dazu ist, setzt man den Cursor auf "MinValue" in Source-Code und drückt "Alt+Hoch" und dann "Umschalt+Ctrl+Runter".
Dort liest man dann wie MinValue funktioniert, kopiert das und bastelt sich die gewünschte Funktion selber.
Ist schneller gemacht als zig Forenbeiträge zu verfassen.

-
- Beiträge: 134
- Registriert: So 30. Nov 2008, 21:53
Re: Teil eines Array übergeben
Sind die Werte denn überhaupt unimodal? Oder anders gefragt, was ist die Position des Maximums in
Code: Alles auswählen
const a: array[0..5] of double = (1,2,-3,0,2,-1);
-
- Beiträge: 1187
- Registriert: Mi 13. Dez 2006, 10:58
- OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
- CPU-Target: AMD A4-6400 APU
- Wohnort: Hamburg
Re: Teil eines Array übergeben
@indianer,
zweimal 2 ist ein Widerspruch, hast du das mal probiert?
zweimal 2 ist ein Widerspruch, hast du das mal probiert?
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.
(Ringelnatz)
(Ringelnatz)
-
- Beiträge: 351
- Registriert: Di 17. Feb 2009, 10:44
- OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
- CPU-Target: xxBit
Re: Teil eines Array übergeben
Naja ich war halt ein wenig verwöhnt.
Bei den numerischen Mathematikprogrammen (siehe Foto) funktioniert es so. Und ich dachte die Entwickler der Unit "math" hätten das eingebaut.
Oder es gibt eine unit vector, aus der man es Entnehmen kann.
Bei C oder C++ wird's mit Sicherheit Header geben mit denen das geht, ohne das Rad neu zu erfinden.
Aber eine weitere Frage hätte ich noch: Wie kann man bei einem StringGrid eine beliebige Spalte feststellen? Es gibt "FixedCols:=2" z.B. Dann sind die ersten beiden Spalten des StringGrid fest. Wie kann ich z.B nur Spalte 2 oder 3 feststellen? Irgendwie der Art: "FixedCol[2]:=true" würde mir gefallen. Ich habe im Objektinspektor rauf und runter gesucht, nix gefunden.
Volker
Bei den numerischen Mathematikprogrammen (siehe Foto) funktioniert es so. Und ich dachte die Entwickler der Unit "math" hätten das eingebaut.
Oder es gibt eine unit vector, aus der man es Entnehmen kann.
Bei C oder C++ wird's mit Sicherheit Header geben mit denen das geht, ohne das Rad neu zu erfinden.
Aber eine weitere Frage hätte ich noch: Wie kann man bei einem StringGrid eine beliebige Spalte feststellen? Es gibt "FixedCols:=2" z.B. Dann sind die ersten beiden Spalten des StringGrid fest. Wie kann ich z.B nur Spalte 2 oder 3 feststellen? Irgendwie der Art: "FixedCol[2]:=true" würde mir gefallen. Ich habe im Objektinspektor rauf und runter gesucht, nix gefunden.
Volker
-
- Beiträge: 134
- Registriert: So 30. Nov 2008, 21:53
Re: Teil eines Array übergeben
Nein das ist kein Widerspruch sondern genau der Kern der Frage: Was macht eine Prozedur/Funktion bei einer Eingabe, bei der es zwei oder mehr maximale Werte gibt?schnullerbacke hat geschrieben:@indianer,
zweimal 2 ist ein Widerspruch, hast du das mal probiert?
Liefert sie den ersten Index, den letzten, den Mittelwert, oder was?
-
- Beiträge: 1187
- Registriert: Mi 13. Dez 2006, 10:58
- OS, Lazarus, FPC: Winux (L 1.2.xy FPC 2.6.z)
- CPU-Target: AMD A4-6400 APU
- Wohnort: Hamburg
Re: Teil eines Array übergeben
Nach der Logik wird immer das erste Auffinden angezeigt werden, alles andere wäre Unfug.indianer-frank hat geschrieben:Nein das ist kein Widerspruch sondern genau der Kern der Frage: Was macht eine Prozedur/Funktion bei einer Eingabe, bei der es zwei oder mehr maximale Werte gibt?schnullerbacke hat geschrieben:@indianer,
zweimal 2 ist ein Widerspruch, hast du das mal probiert?
Liefert sie den ersten Index, den letzten, den Mittelwert, oder was?
Humor ist der Knopf, der verhindert, daß uns der Kragen platzt.
(Ringelnatz)
(Ringelnatz)
-
- Lazarusforum e. V.
- Beiträge: 3177
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: Teil eines Array übergeben
Wenn du über alle Einträge von Vorne nach Hinten (0 -> x) iterierst schon; in der anderen Richtung liegst du falsch und diese ist meines Erachtens genau so legitim. Ich hatte auch mal in der Delphi-Hilfe gelesen, dass der Compiler durchaus die Zählreihenfolge verändern kann, wenn diese effizienter ist und das gleiche Ergebnis liefert (auch wenn der Fall hier nicht gegeben ist).schnullerbacke hat geschrieben:Nach der Logik wird immer das erste Auffinden angezeigt werden, alles andere wäre Unfug.
Mathematisch muss man sagen, dass in (1, 2, 0, 2, -1) zwei globale Maxima vorhanden sind. Daher muss für die Anwendung definiert werden, welches dieser Maxima beachtet werden soll (wenn nur eines beachtet werden soll). Den Titel "das Maximum" kann man nur ohne Indexbezug vergeben, da dann nur der identische Wert Maximum ist (es kann also nur ein Maximum geben).
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein