Forum: PC-Programmierung Ruby => C#, Übersetzungsproblem


von Alexander H. (ill_son)


Lesenswert?

Hallo,

ich bin gerade dabei, Ruby-Code aus einem Abstract in C# zu 
implementieren. Leider habe ich von Ruby absolut keine Ahnung. Kann mir 
bitte jemand verraten, was der ** in der Funkton bedeutet, bzw. was 
diese Codezeile genau macht?
1
def Io(x)
2
    tol = 1.0 e−12; ds=1.0; d=0.0; sum=1.0
3
    begin
4
        d += 2
5
        ds ∗= (x / d) ∗∗2
6
        sum += ds
7
        puts sum # shows partial sums
8
    end while(ds > tol ∗ sum )
9
    return sum
10
end

Danke und Grüße, Alex

von Jan H. (j_hansen)


Lesenswert?

Vielleicht eine sinnvolle Anwendung für chatGPT - verstehe aber auch 
wenn mir dafür die Downvotings um die Ohren fliegen.

Hilft dir das weiter?
1
Der gegebene Ruby-Code definiert eine Methode namens Io, die eine bestimmte Berechnung durchführt und das Ergebnis zurückgibt. Lassen Sie uns den Code Schritt für Schritt analysieren:
2
3
    Die Methode Io wird mit einem Argument x definiert.
4
5
    Eine Variable tol wird mit dem Wert 1.0 e−12 initialisiert. Diese Variable repräsentiert eine Toleranzschwelle für die Schleife, die später ausgeführt wird.
6
7
    Die Variablen ds, d und sum werden alle mit dem Wert 1.0 initialisiert. ds repräsentiert die inkrementelle Veränderung, d wird für Berechnungen verwendet, und sum speichert das Ergebnis der Addition.
8
9
    Es wird eine Schleife mit dem Schlüsselwort begin gestartet.
10
11
    Innerhalb der Schleife wird d um 2 erhöht, um den Wert um 2 zu inkrementieren.
12
13
    ds wird mit ds * (x / d) ** 2 aktualisiert. Diese Zeile multipliziert ds mit dem Quotienten von x und d und hebt das Ergebnis quadriert (** 2) an.
14
15
    sum wird mit sum + ds aktualisiert, um das Zwischenergebnis zu speichern.
16
17
    puts sum gibt das Zwischenergebnis der Teilsumme aus. Diese Ausgabe dient dazu, die Schritte des Berechnungsprozesses anzuzeigen.
18
19
    Die Schleife wird ausgeführt, solange ds größer ist als die Toleranzschwelle tol * sum.
20
21
    Nachdem die Schleife beendet ist, wird sum als Endergebnis der Methode Io zurückgegeben.
22
23
Zur Frage nach der Funktion der Zeile mit **: Die Zeile ds ∗= (x / d) ∗∗2 multipliziert den aktuellen Wert von ds mit dem Quadrat des Quotienten von x und d und weist das Ergebnis der Variable ds zu. Der Operator ** in Ruby wird verwendet, um eine Potenzierung durchzuführen. In diesem Fall wird x durch d geteilt und das Ergebnis quadriert, bevor es mit ds multipliziert wird.

von Alexander H. (ill_son)


Lesenswert?

Danke,

** hätte ich als Quadrat vermutet, allerding hatte ich das gegoogled und 
da scheint es noch eine völlig andere Bedeutung zu geben, die in diese 
Richtung geht: "The operator ** is useful as an options hash", ohne dass 
ich da weiter geforscht habe. Das hatte mich dann etwas durcheinander 
gebracht/verunsichert. Von mir gibt's jedenfalls ein Upvote.

Grüße, Alex

von Ein T. (ein_typ)


Lesenswert?

Alexander H. schrieb:
> ** hätte ich als Quadrat vermutet, allerding hatte ich das gegoogled und
> da scheint es noch eine völlig andere Bedeutung zu geben, die in diese
> Richtung geht: "The operator ** is useful as an options hash", ohne dass
> ich da weiter geforscht habe.

Das macht Ruby ähnlich wie auch Python, um Parameter in einem Dictionary 
in eine Parameterliste umzuwandeln:
1
d = {'a': 1, 'b': 2}
2
meine_funktion(*d)

ist dasselbe wie:
1
meine_funktion(a=1, b=2)

Sowas ist in manchen Fällen ganz praktisch, zum Beispiel wenn man eine 
Konfiguration (vor allem mit optionalen Parametern) in einem Dictionary 
ablegen, eine Funktion oder Methode aber nur eine Parameterliste nimmt.

von Torsten R. (Firma: Torrox.de) (torstenrobitzki)


Lesenswert?


von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

Jan H. schrieb:
> Diese Zeile multipliziert ds mit dem Quotienten von x und d und hebt das
> Ergebnis quadriert (** 2) an.

Das ist allerdings falsch bzw. irreführend formuliert; nicht das 
Ergebnis der Multiplikation wird quadriert, sondern nur der Quotient. Im 
letzten Absatz beschreibt ChatGPT es richtig.

von Dirk B. (dirkb2)


Lesenswert?

ChatGPT sollte den Code auch selber nach C# übersetzen können.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.