Anzeige

 Maximale Differenz Aufgabe


#1
Hi Leute,

wie mein Benutzername ja schon zu erkenne gibt, bin ich echt neu hier und habe eine echt schwere Aufgabe zu bewältigen, die weder ich noch jemand aus meinem Kurs versteht oder durchblickt.:eek: Das Problem ist der Kursleiter hat kein Mitleid und hat den Abgabetermin heute in einer Woche angesetzt. :( Falls also jemand sehr begabt unter euch ist und Mitleid mit Neulingen hat, bitte um Hilfe!!:):)

Folgende Aufgabe ist gestellt worden:

• Maximale Differenz:

Gegeben sei eine Folge von ganzen Zahlen, dargestellt als Feld f[1:n] für n≥0. Entwirf einen Algorithmus, der die maximale Differenz zwischen zwei benachbarten Werten in dieser Folge berechnet. Für n≤1 soll das Ergebnis 0 sein. Eine Funktion int abs(↓int x) zur Berechnung des Absolutbetrags kann vorausgesetzt,werden.
Beispiele: 1 2 3 4 5 => 1
6 9 13 2 –5 0 => 11
1 1 1 => 0
 

Yaslaw

n/a
Moderator
#2
Also so schwer ist sowas doch nicht,

Ich poste jetzt mal ein Beispiel. Es ist ungetestet.
Die Eingabe ist eine List. Bei dir ist es keine List. Also muss du da noch umdenken
Java:
 public Integer getMaxDiff(List<Integer> items){
 	Integer maxDiff = 0;
 	Integer lastItem = items.get(0);
 	for(Integer item: items){
 		maxDiff =  Integer.max(maxDiff, abs(item - lastItem));
 	}
 	return maxDiff;
 }
 

melmager

Erfahrenes Mitglied
#3
Wenn keiner im Kurs die Aufgabe versteht ist der Kursleiter schlecht.
So eine Aufgabe muss man Satz für Satz umsetzen.

Gegeben sei eine Folge von ganzen Zahlen, dargestellt als Feld f[1:n] für n≥0.
= wir bekommen also ein Integer Array
Entwirf einen Algorithmus, der die maximale Differenz zwischen zwei benachbarten Werten in dieser Folge berechnet.
= function mit rückgabewert
Für n≤1 soll das Ergebnis 0 sein.
= das ist zugegeben etwas tricky - aber im Prinzip sagt der satz was die Function zurückgeben soll wenn keine Differenz gebildet werden kann, denn für eine Differenz werden Minimum 2 zahlen benötigt :)

Eine Funktion int abs(↓int x) zur Berechnung des Absolutbetrags kann vorausgesetzt
= man kann (und sollte man auch) mit der Function "abs()" arbeiten
allerdings hätte man hier bei der Aufgabenstellung etwas ausführlicher sein können :)

nimm doch mal die Letzen Differenz vom zweiten Beispiel:
a=-5 ; b=0
int diff = a - b;
dann ist das ergebniss -5 ohne Absolutbetrag - bei Differenzen brauchen wir aber postive (also
absolute) Ergebnisse.

Da wir eine Folge von zahlen haben und eine Differenz nur aus 2 zahlen bilden können benötigen wir auch noch
eine schleife die alle vorhandenen zahlen prüft.
Und vor der Schleife muss die Frage geklärt sein, ob das Array die nötige minimumgrösse von zwei werten hat.
bei einem Array kann man die grösse ermitteln und jedes Array in Java fängt mit 0 als Index an
daraus kann man eine Schleife erstellen :)
und in der Schleife wird gefragt (if) ob die aktuelle Differenz grösser ist wie die vorhandene, was wiederum bedeutet das wir eine entsprechende Variable benötigen für den vorherwert, die vor der Schleife auf den Wert 0 gesetzt werden muss
 
Zuletzt bearbeitet:

ComFreek

Mod | @comfreek
Moderator
#5
Ich finde, das nächste Mal sollten wir auch eine Lambda-Lösung anbieten :D Bessere Idee: Eine Compile-Time Lösung mit Template Metaprogrammierung :cool: (Als ob jemand den Unterschied zwischen C++ und Java merkt :p)

Fakt ist doch, dass das Hinschreiben einer Komplettlösung weder ihm einen Lerneffekt bringt noch fair gegenüber seinen Klassenkameraden ist, die keine Lösung haben.
Ich hoffe, der Fragensteller versucht zumindest, die vielen Erklärungen von @melmager durchzulesen und zu verstehen anstatt einfach die Komplettlösung abzugeben.
 
Zuletzt bearbeitet:
Anzeige
Anzeige