www.vorhilfe.de
- Förderverein -
Der Förderverein.

Gemeinnütziger Verein zur Finanzierung des Projekts Vorhilfe.de.
Hallo Gast!einloggen | registrieren ]
Startseite · Mitglieder · Impressum
Forenbaum
^ Forenbaum
Status VH e.V.
  Status Vereinsforum

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Suchen
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Maple" - ggT Programm maple
ggT Programm maple < Maple < Mathe-Software < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Maple"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

ggT Programm maple: Programm
Status: (Frage) beantwortet Status 
Datum: 23:36 Mo 29.05.2006
Autor: pamela

Aufgabe
Implementieren Sie den Euklidischen Algorithmus zur ggT-Bestimmung ganzer Zahlen. Ihr Verfahren soll auch die Anzahl der Schritte zählen, die der Algorithmus benötigt. Testen Sie Ihr Verfahren für zufällig erzeugte (große) Zahlen.

Nach langem Probieren bin ich hier im Forum gelandet.
Leider funktioniert mein Programm nicht.
Der Ansatz ist da, aber ist zu nichts zu gebrauchen.... :-)


Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.

        
Bezug
ggT Programm maple: Antwort
Status: (Antwort) fertig Status 
Datum: 00:15 Di 30.05.2006
Autor: Martin243

Hallo,

schade, dass du deinen Ansatz hier nicht veröffentlichst!
So weiß ich nicht, was genau ein Schritt sein soll. Aber ich zeige dir mal, wie ich es gemacht hätte. Die Funktionsweise zu verstehen sollte nicht schwer sein:

ggT := proc(a,b)
local c, d,steps, rmd;
steps := 0; c:=a; d:=b;

if (a*b=0) then error "Illegal args!!!" end if;

while (c mod d > 0) do
steps := steps + 1;
rmd := c mod d;
c := d;
d := rmd;
end do;
  
return (d,steps);
end proc;


Wenn du noch Fragen hast, dann melde dich!

Gruß
Martin

Bezug
                
Bezug
ggT Programm maple: an Martin
Status: (Frage) beantwortet Status 
Datum: 16:46 Di 30.05.2006
Autor: pamela

Hallo Martin!
Erstmal herzlichen Dank für deine Hilfe zu so später bzw früher Stunde.
Da ich deine Version nicht ganz verstehe, schreibe ich dir kurz meine und was ich nicht verstehe.
Ich bin so rangegangen:
hab die zufallszahl erstmal weggelassen und wollte über die allgemeine Form gehen:
r1 = r2*q1+r3 => r2 = r3*q2+r4 usw bis ri= 0 ist,
da die Anzahl der Schritte gezählt werden soll. Ich hab aber Schwierigkeiten, maple zu sagen, wie es das ergebnis des ersten Durchlaufs in obiger Form ausgibt und im nächsten zB r3 übernimmt. Habe für q den Befehl trunc(r1/r2) und für r3 wie du auch r1 mod r2 definiert und versucht mit ner while do Schleife die Funktion laufen zu lassen. Aber dabei habe ich endweder eine Endlosschleife erzeugt, so dass mein ganzer Rechner ständig abstürzte oder es kam bei meinem Versuchs-Beispiel ggT(44;12) sowas wie 44=44...8=32 raus.
habe auch nach maple befehlen gesucht und gelesen und teilweise probiert. komme jedoch mit der Prozedur und dem Weiterzählenlassen gar nicht klar.
LG

Bezug
                        
Bezug
ggT Programm maple: Antwort
Status: (Antwort) fertig Status 
Datum: 17:57 Di 30.05.2006
Autor: Martin243

Hi Pamela,

ich kann natürlich deinen Fehler nicht nachvollziehen, weil du den Code nicht postest. Aber wenn du Ausdrücke der Form 44=44 bekommst, dann könnte es sein, dass du einen Vergleich "=" mit einer Zuweisung ":=" verwechselt hast.
Ansonsten verfolgt meine Lösung desnselben Ansatz.

Poste mal deinen Code und wir reden nochmal drüber.

Gruß
Martin

Bezug
                
Bezug
ggT Programm maple: Leerzeile einfügen
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 14:05 So 04.06.2006
Autor: pamela

Hallo!
Mein Programm funktioniert jetzt. Ich konnte deinen Ansatz als gute Basis verwenden und hab noch die Zufallszahlen und den Euklidschen Algorithmus (Angabe jeder Zeile der Schritte) eingebaut.
Da ich viele (ich nehme 100) Durchführungen laufen lassen muss, hätte ich gerne eine Leerzeile zwischen den Berechnungen zum nächsten Algorithmus. Ich habe es mit
print(                                                                                      );
versucht. Das hat aber kaum eine Auswirkung.
Gibt es einen Befehl für das Einfügen einer Leerzeile?
Ich finde leider nichts dazu.
MfG

Bezug
                        
Bezug
ggT Programm maple: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 17:24 So 04.06.2006
Autor: Martin243

Hallo,

um den gewünschten Effekt zu erzielen, benutzen wir die aus der C-Programmierung bekannte(?) Funktion printf:
[mm] printf("\backslash{n}"); [/mm]

Damit weist du Maple an, ein einzelnes "Newline"-Zeichen auszugeben, was einem Zeilenvorschub entspricht.

Übrigens:
Diese Funktion kann Daten in einem bestimmten Format ausgeben. Evtl. kannst du dein ganzes Programm damit gestalten, z.B. liefert der Aufruf
printf("Schritt %d: a=%d, b=%d [mm] \backslash{n}",step,a,b); [/mm]

die Ausgabe:
Schritt 22: a=22, b=4   (ich habe die Variablen mal mit diesen Werten belegt)


Bei Interesse kannst du dir ja die Hilfe und die Beispiele zu printf ansehen und nochmal fragen. Sonst kannst du ja wenigstens einen Zeilenvorschub erzeugen :)


Gruß
Martin





Bezug
                                
Bezug
ggT Programm maple: Leerzeile einfügen
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 20:30 So 04.06.2006
Autor: pamela

Danke für deine Antwort.
Ich hab das Problem nun mit
print(______________________________________________);
gelöst.
Sieht schön übersichtlich aus.
Aber das nächste Problem folgte:
Ich hab drei Dateien erstellt:
a) erstellt nach freier Eingabe von a und b den EA und gibt diesen und ggT    und die Anzahl der Schritte aus.=> funktioniert
b) erstellt Zufallszahlen und gibt EA aus und ggT und die Anzahl der Schritte => funktioniert
c) Soll je eine Zeile zu 100 Datensätzen ausgeben, in der die beiden Zufallszahlen, der ggT und die Anzahl der Schritte stehen=> Ergebnis stimmt nicht
Ich hab mit null Kenntnissen von maple diese aufgabe angefangen, sehr viel Zeit investiert und bin nach zahlreichem Probieren am Ende.
Vielleicht magst du nach meinem Fehler suchen...

zu c)

> # Wir erstellen eine Prozedur mit Namen PggT
> PggT := proc(a,b)
>  local c, d,Schritt, Rest;
>
>   # ... mit der Anfangsbedingung, dass keine der gewählten Zahlen gleich Null sein darf
>   if (a*b=0) then
>    error "Funktion mit ungültigen Parametern aufgerufen!"
>   end if;
>
>   # ... zweite Anfangsbedingung bildet den Betrag der ganzen Zahlen und ordnet sie der Größe nach
>   Schritt := 0:
>   if (abs(a)>abs(b)) then
>     c:=abs(a):
>     d:=abs(b):
>    else
>     c:=abs(b):
>     d:=abs(a):
>   end if;
>
>   # ... dritte Bedingung führt den Euklid'schen Algorithmus aus bis der Rest Null ist und Ausgabe
>   while (c mod d > 0) do

>    Schritt := Schritt + 1:
>    Rest := c mod d:
>    c := d:
>    d := Rest:
>   end do;
>    
>  # ...wiederholt obiges in jeder Berechnung
>  return (d,Schritt):
> end proc;
>
> # Maple wählt zwei zufällig erzeugte große Zahlen [-1.000.000;1.000.000]führt die Prozedur aus und gibt Zusammenfassung aus
> a:= rand(-1000000..1000000);
> b:= rand(-1000000..1000000);
> e:= PggT (a(), b()):
>
> for i from 1 to 10 do
>  use
>    Zufallszahl1= a(),
>    Zufallszahl2= b(),
>    e= PggT(Zufallszahl1, Zufallszahl2)
>   in
>    print(Zufallszahl1,Zufallszahl2,e);
> end use;
> od;

   PggT := proc(a, b)
   local c, d, Schritt, Rest;
     if a*b = 0 then
       error "Funktion mit ungltigen Parametern aufgerufen!"
     end if;
     Schritt := 0;
     if abs(b) < abs(a) then
       c := abs(a);
       d := abs(b);
     else
       c := abs(b);
       d := abs(a);
     end if;
     while 0 < `mod`(c, d) do Schritt := Schritt + 1;
       Rest := `mod`(c, d);
       c := d;
       d := Rest;
     end do;
     return d, Schritt;
   end proc;
a := proc()
local t;
global _seed;
  _seed := irem(a*_seed, p);
  t := _seed;
  to concats do _seed := irem(a*_seed, p); t := s*t + _seed; end do;
  irem(t, divisor) + offset;
end proc;
b := proc()
local t;
global _seed;
  _seed := irem(a*_seed, p);
  t := _seed;
  to concats do _seed := irem(a*_seed, p); t := s*t + _seed; end do;
  irem(t, divisor) + offset;
end proc;
                     -54561, 904941, 1, 12
                     -510787, 38892, 1, 12
                     -768235, 686129, 1, 12
                     522034, -217241, 1, 12
                     917301, 609286, 1, 12
                    -879101, -586232, 1, 12
                     -829520, 911635, 1, 12
                    -902156, -397732, 1, 12
                    -318712, -876713, 1, 12
                      942328, 33899, 1, 12

Ende zu c)

Also das Ausgabeformat stimmt, aber e nicht
zb:
942328,33899,1,12 müsste
942328,33899,1,10 lauten

Hast du ne Idee?























































































Dateianhänge:
Anhang Nr. 1 (Typ: mw) [nicht öffentlich]
Anhang Nr. 2 (Typ: mw) [nicht öffentlich]
Anhang Nr. 3 (Typ: mw) [nicht öffentlich]
Bezug
                                        
Bezug
ggT Programm maple: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 23:02 So 04.06.2006
Autor: Martin243

Jetzt erstmal eins nach dem anderen.

Zu dem Problem mit den 10 Datensätzen:
Die For-Schleife muss korrekterweise so aussehen:

for i from 1 to 10 do
  use
     Zufallszahl1= a(),
     Zufallszahl2= b()
    in
     print(Zufallszahl1,Zufallszahl2,PggT(Zufallszahl1, Zufallszahl2));
  end use;
od;

Da Problem war, dass das e nur einmal ausgewertet wurde und nicht bei jedem Schleifendurchlauf!

Nun zum nächsten Problem...

Bezug
        
Bezug
ggT Programm maple: Nachtrag Leerzeile+Anlage
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 20:52 So 04.06.2006
Autor: pamela

Ich hab die fehlerhafte Datei nochmal durchlaufen lassen und kann mit der Fehlermeldung
Error, (in PggT) cannot determine if this expression is true or false: abs(Zufallszahl2) < abs(Zufallszahl1)
nichts anfangen.

> # Wir erstellen eine Prozedur mit Namen PggT
> PggT := proc(a,b)
>  local c, d,Schritt, Rest;
>
>   # ... mit der Anfangsbedingung, dass keine der gewählten Zahlen gleich Null sein darf
>   if (a*b=0) then
>    error "Funktion mit ungültigen Parametern aufgerufen!"
>   end if;
>
>   # ... zweite Anfangsbedingung bildet den Betrag der ganzen Zahlen und ordnet sie der Größe nach
>   Schritt := 0:
>   if (abs(a)>abs(b)) then
>     c:=abs(a):
>     d:=abs(b):
>    else
>     c:=abs(b):
>     d:=abs(a):
>   end if;
>
>   # ... dritte Bedingung führt den Euklid'schen Algorithmus aus bis der Rest Null ist
>   while (c mod d > 0) do

>    Schritt := Schritt + 1:
>    Rest := c mod d:
>    c := d:
>    d := Rest:
>   end do;
>    
>  # ...wiederholt obiges in jeder Berechnung
>  return (d,Schritt):
> end proc;
>
> # Maple wählt zwei zufällig erzeugte große Zahlen [-1.000.000;1.000.000]führt die Prozedur aus und gibt Zusammenfassung aus
> a:= rand(-1000000..1000000);
> b:= rand(-1000000..1000000);
> e:= PggT (a(), b()):
>
> for i from 1 to 10 do
>  use
>    Zufallszahl1= a(),
>    Zufallszahl2= b(),
>    e= PggT(Zufallszahl1, Zufallszahl2)
>   in
>    print(Zufallszahl1,Zufallszahl2,e);
> end use;
> od;

  



Dateianhänge:
Anhang Nr. 1 (Typ: mw) [nicht öffentlich]
Bezug
        
Bezug
ggT Programm maple: Fehler in Programm
Status: (Frage) beantwortet Status 
Datum: 22:20 So 04.06.2006
Autor: pamela

Mein Programm zum GGT gibt ein falsches Ergebnis aus.
Kann mir bitte jemand helfen?

> # Wir erstellen eine Prozedur mit Namen PggT
> PggT := proc(a,b)
>  local c, d,Schritt, Rest;
>
>   # ... mit der Anfangsbedingung, dass keine der gewählten Zahlen gleich Null sein darf
>   if (a*b=0) then
>    error "Funktion mit ungültigen Parametern aufgerufen!"
>   end if;
>
>   # ... zweite Anfangsbedingung bildet den Betrag der ganzen Zahlen und ordnet sie der Größe nach
>   Schritt := 0:
>   if (abs(a)>abs(b)) then
>     c:=abs(a):
>     d:=abs(b):
>    else
>     c:=abs(b):
>     d:=abs(a):
>   end if;
>
>   # ... dritte Bedingung führt den Euklid'schen Algorithmus aus bis der Rest Null ist
>   while (c mod d > 0) do

>    Schritt := Schritt + 1:
>    Rest := c mod d:
>    c := d:
>    d := Rest:
>   end do;
>    
>  # ...wiederholt obiges in jeder Berechnung
>  return (d,Schritt):
> end proc;
>
> # Maple wählt zwei zufällig erzeugte große Zahlen [-1.000.000;1.000.000]führt die Prozedur aus und gibt Zusammenfassung aus
> a:= rand(-1000000..1000000);
> b:= rand(-1000000..1000000);
> e:= PggT (a(), b()):
>
> for i from 1 to 10 do
>  use
>    Zufallszahl1= a(),
>    Zufallszahl2= b(),
>    e= PggT(Zufallszahl1, Zufallszahl2)
>   in
>    print(Zufallszahl1,Zufallszahl2,e);
> end use;
> od;

   PggT := proc(a, b)
   local c, d, Schritt, Rest;
     if a*b = 0 then
       error "Funktion mit ungltigen Parametern aufgerufen!"
     end if;
     Schritt := 0;
     if abs(b) < abs(a) then
       c := abs(a);
       d := abs(b);
     else
       c := abs(b);
       d := abs(a);
     end if;
     while 0 < 'mod'(c, d) do Schritt := Schritt + 1;
       Rest := 'mod'(c, d);
       c := d;
       d := Rest;
     end do;
     return d, Schritt;
   end proc;
a := proc()
local t;
global _seed;
  _seed := irem(a*_seed, p);
  t := _seed;
  to concats do _seed := irem(a*_seed, p); t := s*t + _seed; end do;
  irem(t, divisor) + offset;
end proc;
b := proc()
local t;
global _seed;
  _seed := irem(a*_seed, p);
  t := _seed;
  to concats do _seed := irem(a*_seed, p); t := s*t + _seed; end do;
  irem(t, divisor) + offset;
end proc;
Error, (in PggT) cannot determine if this expression is true or false: abs(Zufallszahl2) < abs(Zufallszahl1)

ich weiss leider nicht mehr, was ich noch probieren kann.

Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt. Nur in diesem unter maple ggt programm, aber unter einer beantworteten Frage.

Bezug
                
Bezug
ggT Programm maple: anderer Fehler in Programm
Status: (Frage) beantwortet Status 
Datum: 22:35 So 04.06.2006
Autor: pamela


> # Wir erstellen eine Prozedur mit Namen PggT
> PggT := proc(a,b)
>  local c, d,Schritt, Rest;
>
>   # ... mit der Anfangsbedingung, dass keine der gewählten Zahlen gleich Null sein darf
>   if (a*b=0) then
>    error "Funktion mit ungültigen Parametern aufgerufen!"
>   end if;
>
>   # ... zweite Anfangsbedingung bildet den Betrag der ganzen Zahlen und ordnet sie der Größe nach
>   Schritt := 0:
>   if (abs(a)>abs(b)) then
>     c:=abs(a):
>     d:=abs(b):
>    else
>     c:=abs(b):
>     d:=abs(a):
>   end if;
>
>   # ... dritte Bedingung führt den Euklid'schen Algorithmus aus bis der Rest Null ist
>   while (c mod d > 0) do

>    Schritt := Schritt + 1:
>    Rest := c mod d:
>    c := d:
>    d := Rest:
>   end do;
>    
>  # ...wiederholt obiges in jeder Berechnung
>  return (d,Schritt):
> end proc;
>
> # Maple wählt zwei zufällig erzeugte große Zahlen [-1.000.000;1.000.000]führt die Prozedur aus und gibt Zusammenfassung aus
> a:= rand(-1000000..1000000);
> b:= rand(-1000000..1000000);
> e:= PggT (a(), b()):
>
> for i from 1 to 10 do
>  use
>     Zufallszahl1= a(),
>     Zufallszahl2= b(),
>     e= PggT (a(), b()),
>     e= PggT(Zufallszahl1, Zufallszahl2)
>    in
>     print(Zufallszahl1,Zufallszahl2,e);
>  end use;
> od;

   PggT := proc(a, b)
   local c, d, Schritt, Rest;
     if a*b = 0 then
       error "Funktion mit ungltigen Parametern aufgerufen!"
     end if;
     Schritt := 0;
     if abs(b) < abs(a) then
       c := abs(a);
       d := abs(b);
     else
       c := abs(b);
       d := abs(a);
     end if;
     while 0 < `mod`(c, d) do Schritt := Schritt + 1;
       Rest := `mod`(c, d);
       c := d;
       d := Rest;
     end do;
     return d, Schritt;
   end proc;
a := proc()
local t;
global _seed;
  _seed := irem(a*_seed, p);
  t := _seed;
  to concats do _seed := irem(a*_seed, p); t := s*t + _seed; end do;
  irem(t, divisor) + offset;
end proc;
b := proc()
local t;
global _seed;
  _seed := irem(a*_seed, p);
  t := _seed;
  to concats do _seed := irem(a*_seed, p); t := s*t + _seed; end do;
  irem(t, divisor) + offset;
end proc;
                    -318712, -876713, 1, 10
                      832929, -191, 7, 11
                     295184, 636469, 1, 12
                     -390482, 871020, 1, 10
                     490627, -234083, 1, 7
                    -795753, -234873, 23, 7
                     938672, -308673, 1, 13
                     -126934, 263421, 1, 11
                    -331468, -194841, 1, 11
                     -295256, 264179, 1, 9

Bezug
                        
Bezug
ggT Programm maple: Antwort
Status: (Antwort) fertig Status 
Datum: 23:37 So 04.06.2006
Autor: Martin243

OK, ich hoffe, du liest dir mal alle Antworten durch, weil ich gerade gemerkt habe, dass ich die etwas verstreue...

Das hier sollte die ultimative Lösung sein!!!

Deine Probleme haben eigentlich nur mit der ungeschickten Zufallszahlenerzeugung und der use...in...-Klausel zu tun.

Mit a := rand(...) erzeugst du ja nur einen neuen Generator und die use...in...-Klausel ersetzt die Ausdrücke einfach eins zu eins. Das heißt, du weist Zuf1 und Zuf2 keine Zufallszahlen zu sondern Zufallszahlengeneratoren, die dann ihr Unwesen treiben.

Mein Vorschlag für die For-Schleife:

for i from 1 to 10 do

    Zufallszahl1:= a():
    Zufallszahl2:= b():
    e:= PggT(Zufallszahl1, Zufallszahl2):
  
    print(Zufallszahl1,Zufallszahl2,e);

od:


Bitte beachte die Doppelpunkte an den Zeilenenden! Sie unterdrücken die Ausgabe, was von dir wahrscheinlich erwünscht war. Nur der print-Befehl gibt etwas aus.
Die Doppelpunkte in den einzelnen Zeilen funktionieren aber nur, wenn auch hinter dem od ein Doppelpunkt steht.


Gruß
Martin

Bezug
                                
Bezug
ggT Programm maple: gelöst
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 00:02 Mo 05.06.2006
Autor: pamela

Herzlichen Dank an Martin. das Problem ist behoben:
In meinen unzähligen Versuchen bin ich verzweifelt, weil maple das ":" nicht berücksichtigt hat.
Bei allen Versuchen war ein ";" hinterm od, und somit zuviel Ausgabe. das wollte ich mit dem "use    in     end use" befehl umgehen. aber nur Fehlermeldungen oder falsche Ergebnissekamen dabei raus. nun gehts.
Juchu

Bezug
                                
Bezug
ggT Programm maple: rand () ohne Null
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 13:54 Fr 09.06.2006
Autor: pamela

Hallo Martin!

Hab noch einen Fehler im Programm gefunden.
Die Anfangsbedingung, dass keine der Zahlen null sein darf funktioniert. aber sobald innerhalb der Prozedur (Bei zb dem 50.Durchlauf) eine Null als Zahl auftritt, bricht das Programm mit der Fehlermeldung ab und führt die restlichen Durchläufe (bei mir 100) nicht mehr durch.
Habe vergebens versucht, den rand Befehl von a:= rand(-10..10) in
a:= ((rand(-10..-1)) or (rand(1..10))); umzuschreiben. Er findet jedoch nur zufällige negative Zahlen.

Bezug
                                        
Bezug
ggT Programm maple: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 14:08 Fr 09.06.2006
Autor: pamela

Aufgabe
hab vergessen dies als Frage zu stellen

Immernoch dieselbe Frage.......

Bezug
                                                
Bezug
ggT Programm maple: Antwort
Status: (Antwort) fertig Status 
Datum: 16:29 Fr 09.06.2006
Autor: Martin243

Hi!

Mehrere Anmerkungen:

1. Die Abfrage, ob a oder b gleich Null sind, findet doch nur am Anfang der Prozedur statt. Wie kann es denn dann zu Abbrüchen kommen, wenn innerhalb des Verfahrens mal eine Null vorkommt?
Das kann doch nur passieren, wenn eine der Zufallszahlen Null ist.

2. Wieso benutzt du nicht einfach nur rand()? Für gewöhnlich interessiert einen das Euklidische Verfahren für a,b>0. Standardmäßig wird nämlich "a random 12 digit non-negative integer"  erzeugt (also auch schon mal 0).

3. Das Konstrukt mit dem or kann natürlich nicht funktionieren. Aber wenn du schon negative und positive Zahlen brauchst, dann kannst du beispielsweise das hier machen:

1: a:= rand(-1000000..1000000); 
2: a_zero_shift := rand(0..1);
3: Zufallszahl1 := a();
4: Zufallszahl1 := piecewise(Zufallszahl1=0, (-1)^a_zero_shift(),Zufallszahl1);


Frag mich nicht, warum da jetzt Zeilennummern auftauchen...


Dieses piecewise definiert stückweise folgende Funktion:
Wenn Zufallszahl1=0 ist, dann setzen wir Zufallszahl1 zufällig auf -1 oder +1, je nach Zufallswert a_zero_shift(). In allen anderen Fällen (Zufallszahl1/=0) belassen wir es bei der alten Zufallszahl1.

Dasselbe kannst du mit Zufallszahl2 machen und hast damit das Problem behoben. Dadurch verschiebt sich zwar die Verteilung, aber ist das tragisch?


Vielleicht kannst du ja mal schreiben, ob und/oder warum du auch negative Zahlen brauchst...

Gruß
Martin

Bezug
                                                        
Bezug
ggT Programm maple: rand()
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 23:14 Fr 09.06.2006
Autor: pamela

sorry, hatte nicht eher Zeit.
in meiner Aufgabenstellung heißt es: ...implementieren sie den EA für zufällig erzeugte ganze Zahlen...
Daher darf ich eigentlich die Null bei den Zufallszahlen nicht ausschließen, hielt ich aber für simpler als...Innerhalb der Prozedur bricht maple halt ab.  Hab schon versucht, das "end if" zu verschieben, leider ohne Erfolg.
zu 1. ich hab k.A. warum die restlichen zeilen zur Zählschleife entfallen
zu 2. igcd() gibt nur das Erbebnis her, nicht den EA wie in der Aufgabenstellung verlangt
zu 3. ich nicht verstehen, hab keine ahnung von Programmierung, probiere nur...

Dateianhänge:
Anhang Nr. 1 (Typ: mw) [nicht öffentlich]
Bezug
                                                        
Bezug
ggT Programm maple: 3.
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 23:28 Fr 09.06.2006
Autor: pamela

zu 3.
gibt falsche Werte aus..?????

Bezug
                                                                
Bezug
ggT Programm maple: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 23:35 Fr 09.06.2006
Autor: Martin243

Hi,

was ist igcd()?
Die Version kenne ich wohl noch nicht...

Kannst du nur diese eine Version mal anhängen?

Irgendwie fällt mir nämlich zu dem Null-Problem nix ein.


Gruß
Martin

Bezug
                
Bezug
ggT Programm maple: Antwort
Status: (Antwort) fertig Status 
Datum: 23:16 So 04.06.2006
Autor: Martin243

Aha!

Du machst da etwas sehr Unsauberes, was dein Programm zum Scheitern verurteilt:
Du weist Zuffalszahl1 und Zuffalszahl2 jeweils Funktionen zu und jedesmal, wenn Zuffalszahl1/2 ausgewertet wird, hat es einen anderen Wert, so dass hier:

>    Zufallszahl1= a(),
>    Zufallszahl2= b(),
>    e= PggT(Zufallszahl1, Zufallszahl2)
>   in
>    print(Zufallszahl1,Zufallszahl2,e);

zuerst e berechnet wird und dann Zuf1 und Zuf2 neue Werte bekommen.
Das Programm macht also:

Zuf1 := x1
Zuf2 := y1
e := PggT(x2,y2)
print(x3,y3,PggT(x2,y2))

Sehr komischer(na ja) und gefährlicher Seiteneffekt, der eine(n)ProgrammiererIn zur Verzweiflung treiben kann.

Schau dir einfach mal die Zufallszahlenerzeugung in Maple an und sorge dafür, dass Zuf1 und Zuf2 zuverlässig erzeugt werden.

Ich komme aber allmählich durcheinander. weil du diverse Versionen gepostet hast...


Gruß
Martin

Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Maple"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
ev.vorhilfe.de
[ Startseite | Mitglieder | Impressum ]