Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
448to452
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
448to452
448to452
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Syntax für Arrays als Parameter einer Funktion

Syntax für Arrays als Parameter einer Funktion
01.07.2004 13:41:18
eknarx
In der Hilfe Datei von VBA steht, dass man seit VBA 6 Arrays als Parameter übergeben kann und dass diese auf eine besondere Art und Weise eingebunden werden müssen. Das Beispiel sieht so aus:

Sub BeliebigeAnzArg (strName As String, ParamArray intPunkte() As Variant)
[Anweisungen]
End Sub

Der Aufruf erfolgt in dem Beispiel folgendermaßen:
BeliebigeAnzArg "Mona", 10, 26, 32, 15, 22, 24, 16
---
Meine Funktion sieht ungefähr so aus:
Public

Function Rekursion(zahl, pos, ParamArray permutationen() As Variant)
[Anweisungen]
End Function

Und aufrufen möchte ich sie, indem ich den Array als ganzes und nicht die einzelnen Werte als Argumente benutze. Also sowas in die Richtung:
Rekursion = Rekursion(zahl, pos, permutationen)
Dabei erhalte ich jedoch immer die Fehlermeldung, dass "das Argument nicht optional ist". Wie sieht den die Sytax für so einen Fall aus?
Dank im voraus,
Eknarx

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Syntax für Arrays als Parameter einer Funktion
Hans
Das ParamArray-Verfahren gibt die Möglichkeit eine Funktion variabel in der Ausstattung mit Argumenten zu machen. Das ist bei Deinem Problem gar nicht angezeigt.
Ein Array ist ein Datenfeld und benötigt EINEN Übergabe-Parameter - das hat nix mit ParamArray zu tun. Streiche es ersatzlos....
BTW: Ich kann mir nur ganz schwer eine Rekursion auf einem Array vorstellen. Auch eine Art Speicherplatz nieder zu machen ;-)
Gruß HW
AW: Syntax für Arrays als Parameter einer Funktion
01.07.2004 15:18:46
eknarx
Vielen Dank für diesen Hinweis Hans. Die Größe des übergebenen Datenfeldes muss tatsächlich nicht dynamisch sein.
Das sich ein Datenfeld einfach so als Parameter übergeben lässt hatte ich eigentlich auch gedacht. Allerdings habe ich gar keine bis kaum Erfahrung mit VBA und vorher habe ich es auch nicht ohne ParamArray hinbekommen (deswegen hatte ich ja überhaupt erst nachgeguckt).
Kannst du mir vielleicht in drei Zeilen kurz die korrekte Übergabe eines Arrays an eine Funktion/Porzedur demonstrieren? Wäre echt nett :).
--
Wegen dem Array und der Rekursion: Den Original Algrhytmus habe ich in PHP geschrieben. Der sieht so aus:

function sum($arr) {
$sum = 0;
for ($i = 0; $i $sum += $arr[$i];
}
return $sum;
}
function debug($permutationen) {
print implode(" ", $permutationen)."
";
// Anweisungen für die weitere Berechnung
}
function compute($permutationen, $zahl, $pos) {
for ($it = $zahl; $it >= 0; $it--) {
$permutationen[$pos] = $it;
$sum = sum($permutationen);
if ($sum == 10) debug($permutationen);
$rest = 10 - $sum;
if ($rest > 0 && $pos compute($permutationen, $rest, $pos + 1);
}
}
}
$permutationen = array(0,0,0,0,0,0);
compute($permutationen, 10, 0);
?>
Das ganze liefert mir dann die 3003 verschiedenen Permutationen dieses sechsstelligen Arrays, wobei die Quersumme immer 10 ergeben soll.
10 0 0 0 0 0
09 1 0 0 0 0
09 0 1 0 0 0
etc.
Das brauch ich für so eine Art Prognoserechnung. Auf 'ne bessere Lösung um diese PErmutationen zu erhalten, bin ich nicht gekommen.
Anzeige
AW: Syntax für Arrays als Parameter einer Funktion
Hans
Zum Berechnen von Permutationen empfehle ich dir unsere Website . Rekursionen dazu werden zwar gerne angeboten sind aber wenig geeignet. Vorallem müssen dann ja alle Permutationen auf einen Rutsch berechnet werden und man erhält bei größeren Zahlen dann gerne einen Stack-Überlauf (64 K bei VBA). Sinnvoller ist es einen lexigaphischen Ansatz zu wählen und immer nur "die nächste" Permuation zu berechnen.
Zur Array-Frage findest Du hier im Archiv und in der OH alles was Du brauchst. Vereinfacht gesagt setzt man den Datentyp Variant zur Übergabe von Feldern ein.
BTW: Was soll bitte bei einem Array aus lauter 0en permutiert werden? 6! = 720 und was spielt dabei die Zahl 3003 für eine Rolle?
Gruß HW
Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige