# Funktion soll andere Funktionen nutzen?!



## Bierjunkie (8. Nov 2011)

Ich definiere eine Funktion, die das Maximum von vier ganzen Zahlen berechnet. 
Soweit habe ich es verstanden.
Doch nun soll diese Funktion mindestens eine der der anderen Funktionen nutzen können.

Was ist damit genau gemeint?


----------



## nrg (8. Nov 2011)

"nutzen können" hängt mal stark davon ab, was mit "andere Funktionen" gemeint ist . so kann man nur schwer was sagen. ist das eine Aufgabe? Wenn ja, poste sie mal genauer.


----------



## Bierjunkie (8. Nov 2011)

> "Definieren Sie eine Funktion die das Maximum von vier ganzen Zahlen berechnet. Diese Funktion soll
> mindestens eine der der anderen Funktionen nutzen."



Ich verstehe einzig und alleine nicht was der letzte Teil zu bedeuten hat. Hab erst seit zwei Wochen Java


----------



## Tobse (8. Nov 2011)

Bierjunkie hat gesagt.:


> Ich verstehe einzig und alleine nicht was der letzte Teil zu bedeuten hat. Hab erst seit zwei Wochen Java


Da bist du nicht alleine, obwohl ichmich schon lang mit Java beschäftige. Eine Funktion aknn nicht einfach "die anderen" funktionen benutzen. Das ist wie wenn du sagst, berechne f(x) unter verwendung der anderen werte.
Du kannst eine Funktion deklarieren

```
int maximumOf(int i) {
}
```
Und sie in einer anderen Funktion benutzen

```
int maximumOf(int _1, int _2, int _3, int _4) {
     return maximumOf(_1) +
            maximumOf(_2) +
            maximumOf(_3) +
            maximumOf(_4);
}
```

Sowas ist warscheinlich gemeint.


----------



## nrg (8. Nov 2011)

was sind denn jetzt "die anderen Funktionen"? Das ist doch eine Teilaufgabe oder nicht?


----------



## SlaterB (8. Nov 2011)

@Tobse
das ist aber schlecht geraten, wahrscheinlich soll doch eine Methode zum Maximum zweier Zahlen benutzt werden

max(a,b,c,d) = max(max(max(a,b),c),d);


----------



## Bierjunkie (8. Nov 2011)

Das sind bisher alle vorherigen Aufgaben, welche ich bis zur aktuellen Fragestellung gelöst habe:

*a) Funktionen / Methoden in Java und anderen Programmiersprachen wurden nach dem Vorbild mathemati-
scher Funktionen entworfen. Zeigen Sie dass Sie das Konzept einer mathematischen Funktion beherrschen
indem Sie den Unterschied zwischen einem Parameter (oft auch “formaler Parameter” genannt) und einem
Argument (oft auch “aktueller Parameter” genannt) erläutern.

b) Definieren Sie eine Funktion die das Maximum von zwei übergebenen ganze Zahlen berechnet und ausgibt
und eine die das Maximum von zwei übergebenen ganzen Zahlen berechnet und zurück gibt. Erläutern
Sie den Unterschied.

c) Definieren Sie eine Funktion die das Maximum von zwei eingelesenen ganze Zahlen berechnet und ausgibt
und eine die das Maximum von zwei eingelesenen ganzen Zahlen berechnet und zurück gibt. Erläutern Sie
den Unterschied.

d) Definieren Sie eine Funktion die das Maximum von drei ganzen Zahlen berechnet.*


----------



## Evil-Devil (8. Nov 2011)

Das klingt doch schon wesentlich einleuchtender.

Zwar gibt es eine Max(n1, n2) in Java schon, aber erneut schreiben zum üben kann nicht schaden. Also wenn ich Aufgabe D richtig verstehe mit der Information aus deinem Eingangspost, dann definiert die sich aus den vorangegangen Funktionen.
Wobei bei D nicht dabei steht ob du es ausgeben oder zurückgeben sollst und bei C wirst du wohl auf die Werte von Benutzereingaben zurückgreifen sollen.

Sehr schwammig...erinnert mich an diverse Kunden...

b1)
funktion max1 (zahl1, zahl2)
begin
zahl = zahl1

wenn zahl2 > zahl dann
zahl = zahl2

ausgabe zahl
end

b2)
funktion max2 (zahl1, zahl2)
begin
zahl = zahl1

wenn zahl2 > zahl dann
zahl = zahl2

rückgabe zahl
end

d)
funktion max3 (zahl1, zahl2, zahl3)
begin
rückgabe max2 (zahl1, max (zahl2, zahl) )
end


----------



## nrg (8. Nov 2011)

wie slater schon gesagt hast, sollst du dann einfach deine selbst geschriebenen Methoden in den anderen wieder verwenden:

(ungetestet)

```
public static int max(int a, int b) {
		return a > b ? a : b;
	}
	
	public static int max(int a, int b, int c) {
		return max(c, max(a, b));
	}
	
	public static int max(int a, int b, int c, int d) {
		return max(d, max(c, max(a, b)));
	}
```


----------



## faetzminator (8. Nov 2011)

Und ausgeben ist natürlich auch nicht schwer:
[Java]public static void printMax(int a, int b) {
    System.out.println(max(a, b));
}[/code]
Auch wenn der Lehrer von der Aufgabenstellung keine Wiederverwendung verlangt, wär das eigentlich

```
public static void printMax(int a, int b) {
    System.out.println(a > b ? a : b);
}
```
Aber eigentlich ist das dämlich :bae:


----------



## Bierjunkie (9. Nov 2011)

```
package maximo;
import java.util.Scanner;

public class Maxime {
	public static int max1(int a, int b) {
        return a > b ? a : b;
    }
    
    public static int max1(int a, int b, int c) {
        return max1(c, max1(a, b));
    }
    
    public static int max1(int a, int b, int c, int d) {
        return max1(d, max1(c, max1(a, b)));
    }
    
    public static void main(String args[]){
    	Scanner maximus = new Scanner(System.in);
    	int a,b,c,d,max;
    	System.out.println("Geben sie a ein: ");
    	a = maximus.nextInt();
    	System.out.println("Geben sie b ein: ");
    	b = maximus.nextInt();
    	System.out.println("Geben sie c ein: ");
    	c = maximus.nextInt();
    	System.out.println("Geben sie d ein: ");
    	d = maximus.nextInt();
    	max = max1(a,b,c,d);
    	System.out.println("Die Maxime aus vier Werten entspricht: " +max);
    	
    }

}
```

Das ist der getestete Vorschlag von nrg. Programm zeigt keine Fehlermeldung, doch entspricht es nun der Aufgabenstellung es so zu programmieren?!


----------



## SlaterB (9. Nov 2011)

bestimmt


----------



## Bierjunkie (9. Nov 2011)

Da mich die Fragtestellung etwas verwirrt hat, möchte ich mal wissen in welcher Reihenfolge das Programm arbeitet!
Mir ist klar, dass zwischen Zeile 4 und 14 die Berechnung stattfindet, doch ich erinnere mich dunkel daran das mein Tutor irgendwas von einem Sprung erzählte in etwa: Das Programm startet beim Main, es werden Zeilen eingelesen und zack springen wir zu den Berechnungen,...!


----------



## Landei (9. Nov 2011)

Kein Grund zum Raten: Jede moderne Programmierumgebung hat einen "Debugger". Zuerst setzt du einen Breakpoint auf die erste Zeile nach [c]public static void main(...)[/c], dann startest du den Debugger und kannst dein Programm Schritt für Schritt "durchsteppen" (normalerweise F7) und dabei sogar Variableninhalte und so anschauen.

Ich glaube, das würde ich meinen Eleven als erstes beibringen - spart viel Arbeit...


----------



## Bierjunkie (9. Nov 2011)

Landei hat gesagt.:


> Kein Grund zum Raten: Jede moderne Programmierumgebung hat einen "Debugger". Zuerst setzt du einen Breakpoint auf die erste Zeile nach [c]public static void main(...)[/c], dann startest du den Debugger und kannst dein Programm Schritt für Schritt "durchsteppen" (normalerweise F7) und dabei sogar Variableninhalte und so anschauen.



Danke


----------



## faetzminator (10. Nov 2011)

Aus der Aufgabenstellung:


> [...] ganze Zahlen berechnet und *ausgibt* [...]


Vergleiche mit meinem Post.


----------

