Hallo, ich habe ein Problem mit folgender Methode:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| public poly gcd(poly b, int p) { poly r = new poly(deg,coef); poly h = new poly(deg,coef); poly q = new poly(b.deg,b.coef); while(r.deg!=-1) { r=q.mod(h,p); q=h; h=r; } return q; } |
Das Problem mit dieser Methode ist, dass sie das Input-Polynom b verändert.
Konkret führt die Main Methode:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| int[] h = {2,0,0,1}; int[] h2 = {0,10,3}; poly H = new poly(3,h); poly H2 = new poly(2,h2); p=11; H2.gcd(H,p).print(); H.print(); H2.print(); |
zum Output 5x + 2 , 5x + 2, 0. H wurde also von x^3+2 auf 5x + 2 geändert und H2 von 3x^2 + 10 auf 0.
Währed dem Schreiben, habe ich auch schon eine starke Vermutung bekommen warum das so sein könnte:
Offensichtlich werden Änderungen an den "Kopien", welche ich in der gcd-Methode erstellt habe, auch an den urprünglichen Polynomen vorgenommen. Das würde bedeuten, dass wenn ich ein neues Polynom mit exakt den selben Parametern einer schon existierenden Instanz konstruiere, ich eigentlich nur eine reference auf die ensprechenden schon existierenden Werte erstelle. Wie kann ich das umgehen ? Kann mir hier jemand weiterhelfen ?
lg
Moderiert von
Kha: Topic aus Algorithmen, Optimierung und Assembler verschoben am So 09.01.2011 um 17:01Moderiert von
Christian S.: Topic aus Sonstiges (.NET) verschoben am So 09.01.2011 um 17:16