Häufig tritt der Fall auf, dass aus einer oder auch mehreren Eingangs-Variablen genau ein Ergebniswert errechnet und zurückgeliefert werden soll. Dann ist es sinnvoll, eine Funktion zu verwenden.
In Delphi wird eine Funktion folgendermaßen deklariert:
Function MyFunc (x: Double) : Double;x ist hier das Argument, das an die Funktion übergeben wird. Nach dem Doppelpunkt folgt der Ergebnis-Typ der Funktion, hier Double, genau wie das Argument. Im allgemeinen kann eine Funktion aber auch mehrere Werteparameter haben, deren Typen weder mit dem Ergebnistyp noch untereinander übereinstimmen müssen. Implementiert wird eine Funktion genau wie eine Prozedur: nach der Wiederholung der Funktions-Deklaration (und eventuell der Deklaration lokaler Variablen) folgt ein "begin...end"-Block, der die auszuführenden Anweisungen enthält. Eine Spezialität ist die Erzeugung des Funktions-Ergebnisses: hierzu dient eine vordefinierte Variable namens Result, die vom Ergebnis-Typ der Funktion ist, also z.B.: TForm1.MyFunc (x: Double) : Double; begin Result := 3*sin(2*x) - x/2; end; |
In Java wird eine Funktion namens "myFunc" folgendermaßen deklariert:
public double myFunc (double x)x ist hier das Argument, das an die Funktion übergeben wird. Vor dem Funktionsnamen steht der Ergebnis-Typ der Funktion, also hier "double", genau wie beim Argument. Im allgemeinen kann eine Funktion aber auch mehrere Werteparameter haben, deren Typen weder mit dem Ergebnistyp noch untereinander übereinstimmen müssen. Implementiert wird eine Funktion in Java genau wie eine Prozedur: direkt im Anschluss an die Funktions-Deklaration folgt der "{...}"-Block, der die auszuführenden Anweisungen enthält. Eine Spezialität ist die Erzeugung des Funktions-Ergebnisses: hierzu dient die "return" - Anweisung, nach der diejenige Variable (vom gewünschten Ergebnistyp) genannt werden muss, die im Augenblick das Funktionsergebnis enthält. Statt einer Variablen kann hier auch ein Term stehen, dessen Wert kompatibel zum Ergebnistyp der Funktion ist, also z.B.: public double myFunc(double x) { return 3*Math.sin(2*x) - x/2; } |
In Delphi:
TForm1.IntDiv(n, m: Integer): Integer; var i : Integer; begin i := 0; While n >= m do begin n := n - m; i := i + 1; end; Result := i; end; |
In Java:
public int intDiv(int n, int m) { int i = 0; while (n >= m) { n = n - m; i = i + 1; } return i; } |
In Delphi können wir sie in Termen mit Hilfe der Operatoren "DIV" und "MOD" verwenden: statt
q := IntDiv(n, m) bzw. r := IntRest(n, m)können wir einfacher schreiben: q := n DIV m bzw. r := n MOD m |
In Java können wir sie in Termen mit Hilfe der Operatoren "/" und "%" verwenden: sind n und m zwei Integer-Variablen, dann können wir statt
q = IntDiv(n, m) bzw. r = IntRest(n, m)einfacher schreiben: q = n / m bzw. r = n % m |
In Delphi können Sie dazu eine StringGrid-Komponente verwenden sowie einen Button, in dessen Klick-Prozedur eine Schleife die laufenden x-Werte und die zugehörigen Funktionswerte in die Tabelle einfügt. Arbeiten Sie in dieser Schleife zunächst mit den privaten Variablen start, ende und schrittweite, deren Werte Sie in der OnCreate-Prozedur des Formulars setzen. Vergessen Sie auch nicht die Spaltenüberschriften in den beiden Feldern der obersten "FixedRow". Einträge von Strings in die Tabelle können Laufzeit mit Hilfe der Eigenschaft "cells[i, k]" vorgenommen werden: z.B. schreibt "sg.cells[2, 5] := 'Butter'" den String 'Butter' in die 6. Zeile der 3. Spalte der StringGrid-Komponente "sg" - die Nummerierung beginnt hier mit der "0"! |
In Java können Sie dazu eine JTable-Komponente verwenden sowie einen Button, in dessen Klick-Prozedur eine Schleife die laufenden x-Werte und die zugehörigen Funktionswerte in die Tabelle einfügt. Arbeiten Sie in dieser Schleife zunächst mit den lokalen Variablen start, ende und schrittweite, deren Werte Sie in der Klick-Prozedur des Buttons setzen. Vergessen Sie auch nicht die Spaltenüberschriften in den beiden obersten Feldern der Tabelle: diese Strings werden in der Eigenschaft "Columns" gesetzt. Zur Laufzeit kann man dann mit der Methode "setValueAt()" der JTable-Komponente Strings an bestimmten Stellen der Tabelle ausgeben: z.B. schreibt "jt.setValueAt(\"Honig\", 2, 5)" den String "Honig" in die 6. Zeile der 3. Spalte - die Nummerierung beginnt hier mit der "0"! |
In Delphi setzen Sie dazu einfach die Variable StringGrid.RowCount! |
In Java ist eine Neudimensionierung der Tabelle zur Laufzeit ziemlich kompliziert. Zur Vermeidung dieses Problems ist es am einfachsten, zur Designzeit im Objektinspektor die Eigenschaft "RowCount" auf einen hinreichend hohen Wert zu setzen. |