Maximum und Minimum

Da Operno interne Funktionen zur Ermittlung des Minimums und Maximums einer Queue besitzt, ist es in manchen Fällen sehr praktisch, eine For-Schleife zu verwenden.

Problem

In diesem Kapitel wollen wir eine Funktion schreiben, die uns mehrere Rechenausdrücke in Form eines Strings ausrechnet. Dabei möchten wir, dass jeweils zuerst der gesamte Rechenausruck gezeigt werden soll und danach das Ergebnis (durch ein Gleichheitszeichen).

Vorschau:

calculate("2 + 2", "3 + 2 * 4", "10² - 50")

>>> : 2 + 2     = 4
>>> : 3 + 2 * 4 = 11
>>> : 10² - 50  = 50

Das Problem ist nun, die maximale Größe einer Aufgabe zu ermitteln, damit jedes Gleichheitszeichen untereinander steht.

Erste Lösung

Dieses Problem können wir folgendermaßen lösen: Wir gehen einfach mit einer for-Schleife alle Argumente durch und speichern uns dabei die maximale Größe. Danach führen wir erneut eine Schleife aus, die uns alle Rechenausdrücke ausrechnet und die Gleichheitszeichen passend ausgibt.

Die Größe einer Zeichenkette können wir durch die Klassenmethode fix festsetzen.

def calculate(){
  def maximum as integer
  
  arguments for{
    if(maximum < current:length){
      maximum = current:length
    }
  }
  
  arguments for{
    out current:fix(maximum) << " = " current:eval
  }
}

Zweite Lösung

Doch das Ganze geht natürlich viel schneller, indem wir die for-Schleife effektiv ausnutzen und zugleich die vordefinierte Klassenmethode analyse\max für Queues verwenden:

def calculate(){
  def maximum as integer
  
  maximum = (arguments for(current:length)):analyse\max
  arguments for{
    out current:fix(maximum) << " = " << current:eval
  }
}

In diesem Code-Beispiel gibt die erste Schleife alle Längen als Queue zurück. Darauf folgt die Ermittlung des Maximums, was der maximalen Länge eines Rechenausdrucks entspricht.

Top | Home | Index