Entwickler-Ecke
Basistechnologien - Array als Parameter übergeben
FelixD - Fr 14.01.11 17:33
Titel: Array als Parameter übergeben
Ich habe folgenden Konstrukor gegeben:
C#-Quelltext
1: 2: 3: 4: 5:
| public Poly(ModInt[] coef, int deg) { this.coef=coef; this.deg=deg; } |
Nun möchte ich das Nullpolynom implementieren:
C#-Quelltext
1:
| public static Poly Zero = new Poly(-1,{0}); |
Das Problem ist, das der Input Parameter {0} (wie vermutet) zu einem Fehler führt. Nun möchte ich aber nicht umständlich erst ein Array erstellen und damit dann das Nullpolynom erzeugen. Wie löse ich dieses Problem am elegantesten/effizientesten ??
lg
FelixD - Fr 14.01.11 18:08
Das heißt also ich müsste den Konstruktur umschreiben zu:
C#-Quelltext
1: 2: 3: 4: 5:
| public Poly( int deg,params ModInt[] coef) { this.coef=coef; this.deg=deg; } |
Dann sollte ich wahlweise ein Array als Array oder eben als eine Aufzählung a_1,...,a_n übergeben. Ist das richtig?
Vielen Dank!
Ralf Jansen - Fr 14.01.11 18:11
ja
Th69 - Fr 14.01.11 18:41
Du könntest auch den Parameter "int deg" entfernen und ihn mittels
C#-Quelltext
1:
| this.deg = coef.Length - 1; |
berechnen lassen.
P.S. Dein erster Code konnte doch gar nicht compilieren, da du doch die Parameter in der falschen Reihenfolge übergeben hattest, oder?
Yogu - Fr 14.01.11 23:28
Wie wär's denn mit Überladung?
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| public Poly(int deg, ModInt[] coef) { this.deg = deg; this.coef = coef; }
public Poly() { this.deg = 0; this.coef = ModInt[]; } |
Wahlweise auch mit
params.
FelixD hat folgendes geschrieben : |
| Nun möchte ich aber nicht umständlich erst ein Array erstellen und damit dann das Nullpolynom erzeugen. |
Wenn du die Eigenschaft
Zero einmal deklarierst, dann musst du den entsprechenden Aufruf doch nur einmal tätigen. Ist es so schlimm, dann einmal
C#-Quelltext
1:
| public static Poly Zero = new Poly(-1, new ModInt[] { }); |
zu schreiben? Aber Überladung ist natürlich auch möglich.
Edit: Der erste Code enthält einen Fehler, siehe
Th69s Post. Danke!
Th69 - Sa 15.01.11 02:49
Wobei die Überladung dann aber so aussehen sollte:
C#-Quelltext
1: 2: 3: 4: 5:
| public Poly() { this.deg = 0; this.coef = new ModInt[0]; } |
um auch den Compiler zufrieden zu stellen ;-)
FelixD - Sa 15.01.11 19:02
Danke für eure Antworten. Was ihr nicht wissen konntet und ich nicht gesehen habe, ist das dieser Code noch aus einem ganz anderen Grund nicht funktionieren kann. 0 ist ein Integer und kein ModInt ...
Es ist mir auch nicht möglich eine 0 und eine 1 für ModInts zu implementieren, da diese immer auch die einen Member p haben, der angibt Modulo welcher Primzahl gerechnet wird.
Aus diesem Grund ist es also gar nicht möglich mein Vorhaben in die Tat umzusetzen :(
@Th69
Im Fall des Nullpolynoms gilt deg=coef.Length - 1 nicht.
@Yogu
Wenn man es so schreibt ist es natürlich schön. Ich dachte nur, dass das nicht funktioniert (warum auch immer).
Danke!
lg
Yogu - Sa 15.01.11 20:59
FelixD hat folgendes geschrieben : |
| 0 ist ein Integer und kein ModInt ... |
Da gibt es eine ganz elegante Abhilfe: Automatische (implizite) und manuelle (explizite) Konvertierung zwischen
int und
ModInt. In einem anderen Thread hat schon jemand geschrieben, wie das geht:
Kha - So 16.01.11 18:23
Yogu hat folgendes geschrieben : |
| Das heißt also, dass eine Ganzzahl in verschiedene ModInts umgewandelt werden kann? |
Genau, es geht wohl um Polynome über Restklassenkörper.
Aber auf die Ints muss deswegen ja nicht verzichtet werden. Da alle ModInts wohl aus dem gleichen Körper stammen sollten, tut es auch ein Konstruktor
Poly(int p, params int[] coef).
FelixD - So 16.01.11 19:54
| Zitat: |
Genau, es geht wohl um Polynome über Restklassenkörper.
Aber auf die Ints muss deswegen ja nicht verzichtet werden. Da alle ModInts wohl aus dem gleichen Körper stammen sollten, tut es auch ein Konstruktor Poly(int p, params int[] coef). |
Das hast du richtig erkannt. Zunächst wollte ich eigentlich eh keine Struktur ModInt implementieren, dachte mir dann aber, dass es auf diese Weise mehr dem Prinzip der objektorientierten Programmierung entspricht und wenn ich es recht bedenke, dann war diese Entscheidung auch ganz gut, da ich mich nicht in den Poly-Methoden mit der Moduloarithmetik herumschlagen muss ...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!