Autor Beitrag
FelixD
Hält's aus hier
Beiträge: 14



BeitragVerfasst: So 09.01.11 17:46 
Hallo, ich habe ein Problem mit folgender Methode:

ausblenden 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:

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
            int[] h = {2,0,0,1}; //der erste eintrag ist dabei das absolute Glied
    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 user profile iconKha: Topic aus Algorithmen, Optimierung und Assembler verschoben am So 09.01.2011 um 17:01
Moderiert von user profile iconChristian S.: Topic aus Sonstiges (.NET) verschoben am So 09.01.2011 um 17:16
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: So 09.01.11 17:59 
user profile iconFelixD hat folgendes geschrieben Zum zitierten Posting springen:
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.
Nein, das zum Glück nicht. Aber Arrays sind Referenztypen und deswegen teilen sich mehrere deiner Poly-Instanzen dasselbe Array. Du solltest es im Konstruktor also erst einmal per .ToArray() kopieren.

PS: Klassen- und Methodennamen werden normalerweise groß geschrieben.

_________________
>λ=
FelixD Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: So 09.01.11 18:08 
Zitat:
Nein, das zum Glück nicht. Aber Arrays sind Referenztypen und deswegen teilen sich mehrere deiner Poly-Instanzen dasselbe Array. Du solltest es im Konstruktor also erst einmal per .ToArray() kopieren.


Ah ja klar. Vielen Dank!

Zitat:
PS: Klassen- und Methodennamen werden normalerweise groß geschrieben.


Ich werde es mir für die Zukunft merken. Aber das ist mein erstes Programm, da kennt man solche Konventionen halt noch nicht ;)
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: So 09.01.11 21:57 
user profile iconKha hat folgendes geschrieben Zum zitierten Posting springen:
PS: Klassen- und Methodennamen werden normalerweise groß geschrieben.

Lokale Variablen außerdem klein und Bezeichner sollten normalerweise aus mindestens einem Wort bestehen. Gewöhn dir das lieber für die Zukunft an, sonst will keiner deinen Code lesen, wenn du mal ein Problem damit hast. Vor lauter h, h2, H, p wird man ja noch verrückt ;)
FelixD Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Mo 10.01.11 10:30 
Gut ich werde es mir merken. Nur was sind Bezeichner ??
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19340
Erhaltene Danke: 1752

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mo 10.01.11 11:06 
user profile iconFelixD hat folgendes geschrieben Zum zitierten Posting springen:
Nur was sind Bezeichner ??
Das ist etwas, das etwas bezeichnet. :mrgreen: ;-)
Also Variablennamen, Eigenschaftsnamen, Klassennamen, ...
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: Mo 10.01.11 13:39 
Wobei gegen ein Poly p wenig einzuwenden ist, wenn hinter der Variablen kein allzu tieferer Sinn steckt ;) .

_________________
>λ=