Schleifeninvariante: Richtig gemacht ?

Hallo
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 162
Registriert: 22. Apr 2015 19:03

Schleifeninvariante: Richtig gemacht ?

Beitrag von Hallo »

Hallo, ich hoffe hier kann mir jemand weiterhelfen.
Ich habe diesen Code als Übung vom Internet ausgesucht und habe dafür einen Korrektheitsbeweis durchgeführt. Ich frage mich jetzt ob es richtig war oder nicht.

Code: Alles auswählen

s=0;
Get(n);
while n>0 loop
   s=s+n;
   n=n-1;
end loop;
Put(s);
1. Ind. Behauptung: Für n-1 enthält s den n-1-ten Wert.

2. Ind. Aunfang: Initialzustand gilt hier: S=0.

3. Ind. Schritt: Für n, würde s den (n-1-ten + n-ten) Wert enthalten. Also s=n-1 --> s( was ja n-1-ten Wert hat) += n.

4. Gesamtkorrektheit: Dank der Variante, dass n nach Iteration i>0 immer um 1 dekrementiert wird, erreichen wir die Abbruchbedingung, dass n <= 0 ist und der Algorithmus terminiert und liefert uns den Korrekten Wert für s zurück.

Würde mich auf Feedback freuen.
Danke.

Prof. Karsten Weihe
Dozentin/Dozent
Beiträge: 1824
Registriert: 21. Feb 2005 16:33

Re: Schleifeninvariante: Richtig gemacht ?

Beitrag von Prof. Karsten Weihe »

Hallo hat geschrieben:

Code: Alles auswählen

s=0;
Get(n);
while n>0 loop
   s=s+n;
   n=n-1;
end loop;
Put(s);
1. Ind. Behauptung: Für n-1 enthält s den n-1-ten Wert.
Was ist der (n-1)-te Wert? Diesen Begriff haben Sie nicht definiert. Und der Wert, der vor/nach jeder Iteration in n ist, ist sicher ebenfalls wichtig (wenn auch dieses "triviale" Faktum leicht zu übersehen ist).

Die Induktionshypothese in der Formulierungsweise wie im Wiki würde ich so formulieren: Sei \(n_0\) der mit Get eingegebene Wert von \(n\). Nach \(i\geq 0\) Iterationen gilt \(n=n_0-i\) und \(s=\sum_{j=n_0-i}^{n_0}j\).

Aus dieser Induktionshypothese folgt dann sofort, dass der mit Put ausgegebene Wert gleich \(\sum_{j=1}^{n_0}\) ist. Ich nehme an, das ist die Spezifikation, deren Einhaltung der Induktionsbeweis beweisen soll? :?

Anmerkung: Generell ist es hilfreich für Dokumentation von Code, wenn man den Zuständen einer Variable zu relevanten Zeitpunkten eigene Namen gibt, so wie oben \(n_0\) für den Zustand von \(n\) vor der Schleife.

Hallo hat geschrieben: 2. Ind. Aunfang: Initialzustand gilt hier: S=0.
... und \(n=n_0\).

Hallo hat geschrieben: 3. Ind. Schritt: Für n, würde s den (n-1-ten + n-ten) Wert enthalten. Also s=n-1 --> s( was ja n-1-ten Wert hat) += n.
Hier operieren Sie wieder mit mit (n-1)-ten bzw. n-tem Wert, den Sie nicht definiert haben.

Auf Basis meines obigen Vorschlags für die Induktionshypothese würde ich so etwas schreiben wie: Für \(n\) ergibt sich die Einhaltung der Invariante sofort aus Zeile 5. Nach Induktionsvoraussetzung hat \(s\) unmittelbar vor der i-ten Iteration den Wert \(s=\sum_{j=n_0-(i+1)}^{n_0}j\). Die Addition von \(n=n_0-i\) in Zeile 4 ergibt \(s=\sum_{j=n_0-i}^{n_0}j\)

Hallo hat geschrieben: 4. Gesamtkorrektheit: Dank der Variante, dass n nach Iteration i>0 immer um 1 dekrementiert wird, erreichen wir die Abbruchbedingung, dass n <= 0 ist und der Algorithmus terminiert und liefert uns den Korrekten Wert für s zurück.
Stimme zu. :)

KW

Hallo
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 162
Registriert: 22. Apr 2015 19:03

Re: Schleifeninvariante: Richtig gemacht ?

Beitrag von Hallo »

Vielen Dank für die Schnelle Antwort!

Ich habe mir jedoch jetzt einen Algorithmus für Binäre Suchbäume ausgesucht und frage mich, ob ich das hier richtig gemacht habe :oops: :oops: :oops: .

Der Code Lautet:

Code: Alles auswählen

public boolean hasPathSum(int sum) { 
 return( hasPathSum(root, sum) ); 
}

boolean hasPathSum(Node node, int sum) { 
  // return true if we run out of tree and sum==0 
  if (node == null) { 
    return(sum == 0); 
  } 
  else { 
  // otherwise check both subtrees 
    int subSum = sum - node.data; 
    return(hasPathSum(node.left, subSum) || hasPathSum(node.right, subSum)); 
  } 
} 
Ind. Behauptung: Es soll bestimmt werd ob es ein Pfad im Baum gibt, deren summe gleich den gegeben Wert sum ist.

Ind. Anfang: sum wird um den key des Aktuellen Knotens (Wurzel) verringert und in eine neue Integer Variable gespeichert.

Ind. Schritt: Bei jedem Rekursionsschritt i>0 steigt man eine Stufe tiefer im Baum links und rechts hinab und der neue Wert subsum wird mit dem Ergebnis von den alten Wert subsum - den aktuellen Wert des Knotens überschrieben.

Korrektheit: Dank der Variante, dass man bei jedem Rekursionsschritt eine Stufe tiefer im Baum hinabsteigt,und der Abbruchbedingung node ==null wird true das Korrekte Ergebnis zurückgeliefert, falls es einen Pfad in Baum gibt deren Summe gleich den Wert Sum hat.


Vielen Dank für ihre Hilfe! :oops:

Prof. Karsten Weihe
Dozentin/Dozent
Beiträge: 1824
Registriert: 21. Feb 2005 16:33

Re: Schleifeninvariante: Richtig gemacht ?

Beitrag von Prof. Karsten Weihe »

Hallo hat geschrieben: Ind. Behauptung: Es soll bestimmt werd ob es ein Pfad im Baum gibt, deren summe gleich den gegeben Wert sum ist.
Das ist zunächst einmal nicht die Induktionsbehauptung, sondern die Spezifikation des Algorithmus, oder?

Ich denke, selbige wird klarer, wenn Sie den Rückgabewert explizit beschreiben: und auch explizit schreiben, was Sie mit "Pfad" und mit "Summe" meinen: Rückgabe ist true genau dann, wenn es einen Pfad im Baum von der Wurzel bis zu einem Blatt gibt, so dass die Summe der data-Werte aller Knoten auf diesem Pfad gleich sum ist.

Alte Journalistenweisheit, passt auch in der Informatik: sag' es einfach - sag es einfach :!: :idea: 8)

Die Induktionsbehauptung wäre dann: Für (Teil-)bäume der Höhe \(h\) (<-Induktionsvariable!) ist der Algorithmus korrekt.
Hallo hat geschrieben: Ind. Anfang: sum wird um den key des Aktuellen Knotens (Wurzel) verringert und in eine neue Integer Variable gespeichert.
Ich muss gestehen, dass ich Ihren Satz nicht verstehe. Außerdem müsste meine Induktionsvariable oder eine andere irgendwie vorkommen.

Ich würde schreiben: Für leere Bäume (also Bäume der Höhe \(h=-1\)) ist jede Pfadsumme die leere Summe, also gleich 0.
Hallo hat geschrieben: Ind. Schritt: Bei jedem Rekursionsschritt i>0 steigt man eine Stufe tiefer im Baum links und rechts hinab ...
Hier könnten Sie gut mit der Induktionsvariable operieren. :)
Hallo hat geschrieben: und der neue Wert subsum wird mit dem Ergebnis von den alten Wert subsum - den aktuellen Wert des Knotens überschrieben.
Wie im ersten Beispiel schreiben Sie wieder nur vage von "Wert". Ein alter Wert wird mit einem neuen Wert überschrieben, gut - aber warum ist der neue Wert der richtige, das ist doch die Frage!?

Vielleicht so: Die beiden Teilbäume, auf die die Methode rekursiv angewandt wird, haben maximal Höhe \(h-1\). Nach Induktionsvoraussetzung liefern die beiden rekursiven Aufrufe daher die korrekten booleschen Werte für \(subSum\). Die Definition von subSum impliziert dann den korrekten booleschen Wert für \(h\).
Hallo hat geschrieben: Korrektheit: Dank der Variante, dass man bei jedem Rekursionsschritt eine Stufe tiefer im Baum hinabsteigt,und der Abbruchbedingung node ==null wird true das Korrekte Ergebnis zurückgeliefert, falls es einen Pfad in Baum gibt deren Summe gleich den Wert Sum hat.
Stimme zu, wobei ich natürlich auch hier denke, meine obige Formulierungsweise ist klarer.

KW

Hallo
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 162
Registriert: 22. Apr 2015 19:03

Re: Schleifeninvariante: Richtig gemacht ?

Beitrag von Hallo »

Vielen Dank für ihre schnelle Antwort.

Ich hoffe meine Fragen nerven Sie nicht. Da es aber keine Sprechstunden dieses Semester gibt, liegt mir nichts übriges als meine Fragen hier zu posten. :oops:

Ich habe mir diesen Code aufgeschrieben, der einen Baum spiegeln soll.

Code: Alles auswählen

public void mirror() { 
  mirrorRec(root); 
}

public void mirrorRec(Node node) { 
  if (node != null) { 
    // do the sub-trees 
    mirror(node.left); 
    mirror(node.right);

    // swap the left/right pointers 
    Node temp = node.left; 
    node.left = node.right; 
    node.right = temp; 
  } 
} 

Ind. Behauptung: Für Bäume der Höhe h, ist der Algorithmus korrekt.

Ind. Anfang: Für leere Bäume der Höhe h = -1, ist es auch ein gespiegelter Baum.

Ind. Schritt: Für ein Teilbaum der Höhe h-1, ist dessen Nachfolgenden Teilbaum der höhe h schon gespiegelt.

Gesamtkorrektheit: Dank der Variante, das mit jedem Rekursionsschritt eine Stufe tiefer im Baum abgestiegen wird, erreicht man die Abbruchbedingung (node==null) und der Algorithmus liefert einen gespiegelten Teilbaum zurück.


Vielen Dank.

Prof. Karsten Weihe
Dozentin/Dozent
Beiträge: 1824
Registriert: 21. Feb 2005 16:33

Re: Schleifeninvariante: Richtig gemacht ?

Beitrag von Prof. Karsten Weihe »

Hallo hat geschrieben: Ich hoffe meine Fragen nerven Sie nicht.
Absolut nicht :!:

Ihre Fragen sind extrem wichtig, und es ist auch wichtig, dass sie hier im Forum diskutiert werden, damit alle mitlesen können. Ich könnte mir vorstellen, nicht nur für die Mitleser, auch für Sie persönlich ist eine schriftliche Diskussion sinnvoll, denn die Prüfung ist ja auch schriftlich.

Hallo hat geschrieben: Da es aber keine Sprechstunden dieses Semester gibt
Vor der letzten Klausur im September waren die Sprechstunden nicht ernsthaft nachgefragt. :roll:

Hallo hat geschrieben: Ich habe mir diesen Code aufgeschrieben, der einen Baum spiegeln soll.
Also Spezifikation: Gegeben ist die Wurzel eines binären(!) Baumes, Ergebnis der Methode ist, dass der Baum gespiegelt ist, das heißt, für jeden Knoten im Baum sind die Inhalte der Attribute left und right vertauscht.

Hallo hat geschrieben: Ind. Behauptung: Für Bäume der Höhe h, ist der Algorithmus korrekt.
Erscheint mir absolut tragfähig als Induktionsbehauptung = Invariante.

Hallo hat geschrieben: Ind. Anfang: Für leere Bäume der Höhe h = -1, ist es auch ein gespiegelter Baum.
Stimme zu, bis auf ein Detail: Das ist ein gutes Beispiel für ein generelles sprachliches Problem, an dem sich die Sprachverarbeitung (unter dem Namen co-reference resolution) die Zähne ausbeißt. Das Problem ist: gegeben ein Pronomen, in diesem Fall "es", auf welches Nomen bezieht es sich :?:

Daher mein Vorschlag: Aus der Definition von Spiegelung, dass für jeden Knoten left und right vertauscht sind, ergibt sich, dass der leere Baum sein eigenes Spiegelbild ist, also nichts zu tun.

Hallo hat geschrieben: Ind. Schritt: Für ein Teilbaum der Höhe h-1, ist dessen Nachfolgenden Teilbaum der höhe h schon gespiegelt.
Was sind die nachfolgenden Teilbäume eines Teilbaums? Ich denke, klar wird, was Sie meinen, wenn Sie die Teilbäume mit Wurzel node.left und node.right benennen (sag es einfach - sag es einfach).

Ist das ein Versehen, dass bei Ihnen die Teilbäume eines Baumes der Höhe h-1 eine größere Höhe als h-1 haben? Falls es kein Versehen ist, zeigt sich hier ein interessantes sprachliches Problem: Die Höhe eines Knotens ist geringer als die Höhe seiner Nachfolger; die Höhe eines Baumes ist hingegen größer als die Höhe jedes (echten) Teilbaumes.

Hallo hat geschrieben: Gesamtkorrektheit: Dank der Variante, das mit jedem Rekursionsschritt eine Stufe tiefer im Baum abgestiegen wird, erreicht man die Abbruchbedingung (node==null) und der Algorithmus liefert einen gespiegelten Teilbaum zurück.
Man könnte zum besseren Verständnis der Zusammenhänge hinzufügen, dass der letzte Hauptsatz unmittelbar aus der Invariante folgt.

Warum reite ich so auf Sprache herum: Weil Sie als Informatiker (oder verwandt) voraussichtlich mehr mit Menschen als mit Compilern u.ä. kommunizieren werden. Wo immer etwas Ernsthaftes von gelingender Kommunikation abhängt, sollte die Sprache möglichst präzise sein - denken Sie etwa auch an Medizin oder Jura (dort vermeidet man übrigens Pronomen gerne, aus gutem Grund).

KW

Hallo
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 162
Registriert: 22. Apr 2015 19:03

Re: Schleifeninvariante: Richtig gemacht ?

Beitrag von Hallo »

Hallo,

Ich verstehe leider nicht genau was die damit hier meinen.
Ist das ein Versehen, dass bei Ihnen die Teilbäume eines Baumes der Höhe h-1 eine größere Höhe als h-1 haben?
Ich weiß schon dass die Höhe jeden Knotens (h-1) geringer ist als die Höhe (h) deren unmittelbaren Nachfolger. Also als Beispiel, die Höhe der Wurzel ist geringer als die Höhe deren Nachfolger node.left und node.right.


Zweitens wollte ich noch Fragen,ob der oben stehende Code falls in der Klausur in dieser Art so geschrieben wird als richtig zählen wurde. Ich kann mich nicht genau erinnern wo, aber ich habe von ihnen etwas gelesen, wo da stand dass man in der Hauptmethode (Die Methode wo die Rekursivehilfsmethode aufgerufen wird) die Abbruchbedingung schreiben soll, und nicht in der Rekursivenhilfsmethode.

Vielen Dank!

Prof. Karsten Weihe
Dozentin/Dozent
Beiträge: 1824
Registriert: 21. Feb 2005 16:33

Re: Schleifeninvariante: Richtig gemacht ?

Beitrag von Prof. Karsten Weihe »

Hallo hat geschrieben:Ich verstehe leider nicht genau was die damit hier meinen.
Ist das ein Versehen, dass bei Ihnen die Teilbäume eines Baumes der Höhe h-1 eine größere Höhe als h-1 haben?
Na ja, Ihr Satz, auf den ich mich beziehe, ist folgender:
Hallo hat geschrieben: Für ein Teilbaum der Höhe h-1, ist dessen Nachfolgenden Teilbaum der höhe h schon gespiegelt.
Sie haben "nachfolgender Teilbaum" nicht definiert. Ich kann also nur aus dem Kontext heraus versuchen zu erschließen, was Sie mit diesem Satz sagen wollten. Und meine Interpretation ist folgende: Ich benenne die Wurzel des erstgenannten Teilbaums, der Höhe h-1 haben soll, mit root. Dann meinen Sie nach meiner Interpretation die Teilbäume, die node.left bzw. node.right als Wurzel haben. Ist das so? Falls ja, ist meine Nachfrage sicher berechtigt, denn die Höhe eines Teilbaumes ist so definiert, dass diese beiden letztgenannten Teilbäume eine Höhe von höchstens h-2, keinesfalls eine Höhe von h haben.

Hallo hat geschrieben: Zweitens wollte ich noch Fragen,ob der oben stehende Code falls in der Klausur in dieser Art so geschrieben wird als richtig zählen wurde. Ich kann mich nicht genau erinnern wo, aber ich habe von ihnen etwas gelesen, wo da stand dass man in der Hauptmethode (Die Methode wo die Rekursivehilfsmethode aufgerufen wird) die Abbruchbedingung schreiben soll, und nicht in der Rekursivenhilfsmethode.
Wenn es Einschränkungen wie die von Ihnen zitierte gibt, dann werden sie in der Aufgabenstellung explizit formuliert. Anders herum gesagt: Wenn Ihre Implementation der Spezifikation in der Aufgabenstellung entspricht und alle explizit benannten Einschränkungen einhält (und zudem lesbar und nachvollziehbar ist...), dann gibt's volle Punktzahl.

KW

Hallo
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 162
Registriert: 22. Apr 2015 19:03

Re: Schleifeninvariante: Richtig gemacht ?

Beitrag von Hallo »

Für ein Teilbaum der Höhe h-1, ist dessen Nachfolgenden Teilbaum der höhe h schon gespiegelt.
Also ich meinte mit diesem Satz, vielleicht hätte ich ihn formulieren sollen:
Für einen Knoten der höhe h-1, sind seine nachfolgenden Teilbäume (node.left bzw. node.right) gespiegelt.


Ist das so richtig formuliert ? :oops:

Prof. Karsten Weihe
Dozentin/Dozent
Beiträge: 1824
Registriert: 21. Feb 2005 16:33

Re: Schleifeninvariante: Richtig gemacht ?

Beitrag von Prof. Karsten Weihe »

Hallo hat geschrieben:
Für ein Teilbaum der Höhe h-1, ist dessen Nachfolgenden Teilbaum der höhe h schon gespiegelt.
Also ich meinte mit diesem Satz, vielleicht hätte ich ihn formulieren sollen:
Für einen Knoten der höhe h-1, sind seine nachfolgenden Teilbäume (node.left bzw. node.right) gespiegelt.
Ist das so richtig formuliert ?
Ich denke, es geht nicht nur um "richtig" oder "falsch", sondern insbesondere um "nachvollziehbar" oder nicht. Das hängt natürlich vom potentiellen Leserkreis ab, ob eine Formulierung nachvollziehbar ist oder nicht.

Sie identifizieren Teilbäume mit ihren Wurzeln node.left und node.right und definieren auch nicht "gespiegelt". Wenn Sie sich sicher sein können, dass jeder potentielle Leser das trotzdem versteht, etwa weil das in Ihrem Team eine übliche Formulierungsweise ist, dann ist das durchaus ok. Sonst würde ich sicherheitshalber eher wieder schreiben "die Teilbäume, deren Wurzeln node.left und node.right sind" oder so ähnlich und Spiegelung explizit definieren.

Bei der Klausurkorrektur versuchen wir natürlich, Ihren Gedankengängen zu folgen, und würden das vermutlich akzeptieren. Aber sicher kann ich das nicht garantieren, es hängt von den genauen Umständen ab, ob so etwas nachvollziehbar ist oder nicht. Versuchen Sie doch immer, sich in den armen Leser (Korrektor?) hineinzuversetzen, der Ihre Gedanken nicht lesen kann und nur die schriftlichen Formulierungen hat, um nachzuvollziehen, was Sie meinen.

Ein Detailpunkt noch: In Ihren neuen Formulierungsvorschlag bleiben Sie bei h-1, das verstehe ich nicht. Vielleicht geben Sie einfach einmal an, was Sie als Induktionvariable verwenden. Ich hatte in meinem Vorschlag die Höhe des Baumes verwendet, dann ist der Induktionsanfang beim leeren Baum mit Höhe -1, und der Induktionsschritt geht von h-1 nach h oder meinetwegen auch von h nach h+1, beides ist äquivalent. Wie ist das bei Ihnen?

KW

Hallo
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 162
Registriert: 22. Apr 2015 19:03

Re: Schleifeninvariante: Richtig gemacht ?

Beitrag von Hallo »

Bei mir ist das so dass ich mit h = -1 den leeren in meinen Induktionsanfang anfange und in meinem Induktionsschritt von über die Korrektheit der Nachfolger bei Knoten der Höhe h-1, also die Korrektheit der Knoten h.

h_ar
Mausschubser
Mausschubser
Beiträge: 99
Registriert: 16. Apr 2015 19:56

Re: Schleifeninvariante: Richtig gemacht ?

Beitrag von h_ar »

Hallo hat geschrieben:Bei mir ist das so dass ich mit h = -1 den leeren in meinen Induktionsanfang anfange und in meinem Induktionsschritt von über die Korrektheit der Nachfolger bei Knoten der Höhe h-1, also die Korrektheit der Knoten h.
Gesundheit. Wenn Herr Prof. Weihe das versteht, Hut ab.

Prof. Karsten Weihe
Dozentin/Dozent
Beiträge: 1824
Registriert: 21. Feb 2005 16:33

Re: Schleifeninvariante: Richtig gemacht ?

Beitrag von Prof. Karsten Weihe »

h_ar hat geschrieben:
Hallo hat geschrieben:Bei mir ist das so dass ich mit h = -1 den leeren in meinen Induktionsanfang anfange und in meinem Induktionsschritt von über die Korrektheit der Nachfolger bei Knoten der Höhe h-1, also die Korrektheit der Knoten h.
Gesundheit. Wenn Herr Prof. Weihe das versteht, Hut ab.
Verstehe ich leider nicht. :|

Im übrigen hatte es schon seinen Grund, warum ich gezielt nach der Induktionsvariable gefragt habe. Ich denke, die Antwort auf diese Frage ist der Schlüssel, um voranzukommen.

KW

Hallo
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 162
Registriert: 22. Apr 2015 19:03

Re: Schleifeninvariante: Richtig gemacht ?

Beitrag von Hallo »

Hallo, hier komme ich nochmal mit einen Code aus dem Internet, der hier für jeden Knoten ein duplikaten als node.left einfügt.

Code: Alles auswählen

public void doubleTree() { 
 doubleTree(root); 
}

private void doubleTree(Node node) { 
  Node oldLeft;

  if (node == null) return;

  // do the subtrees 
  doubleTree(node.left); 
  doubleTree(node.right);

  // duplicate this node to its left 
  oldLeft = node.left; 
  node.left = new Node(node.data); 
  node.left.left = oldLeft; 
} 


Ind. Behauptung: Für Bäume mit der Höhe h liefert der Algorithmus korrekte Beispiele.


Ind. Anfang: Für leere Bäume der Höhe h= -1, liefert der Algorithmus das korrekte Ergebnis, denn für einen leeren Baum mit node==null, würde sein node.left auch == null sein und immer noch ein leerer Baum werden.


Ind. Schritt: Nach jedem Rekursiven durchlauf wird an den Knoten mit der Höhe h ein neuer Knoten als linkes Kind angehängt mit gleichem Inhalt wie dessen Vaterknoten, der Knoten mit der Höhe h.

Gesamtkorrektheit : Dank der Variante, das mit jedem Rekursionsschritt eine Stufe tiefer im Baum abgestiegen wird, erreicht man die Abbruchbedingung (node==null) und der Algorithmus liefert einen gespiegelten Teilbaum zurück.


Viele Grüße, AA.

uffie
Neuling
Neuling
Beiträge: 6
Registriert: 11. Nov 2014 21:20

Re: Schleifeninvariante: Richtig gemacht ?

Beitrag von uffie »

Prof. Karsten Weihe hat geschrieben:

Aus dieser Induktionshypothese folgt dann sofort, dass der mit Put ausgegebene Wert gleich \(\sum_{j=1}^{n_0}\) ist.[...]


KW
\(\sum_{j=1}^{n_0}j\) oder? :mrgreen:

Antworten

Zurück zu „Archiv“