Apfelwein Algorithmus

LeonS

Cadet 4th Year
Registriert
Sep. 2006
Beiträge
64
Hallo,

ich bin gerade dabei ein Programm zur Lösung folgendes
Problems zu entwickeln:
3 Fässer: je 8L, 5L und 3L maximal befüllbar.
Nun soll durch umfüllen in einem Fass 4Liter sein.
Vom Start weg sind im 8L Fass 8 Liter drin.

Ich muss also beachten wieviel maximal noch in die fässer Reingeht
und wieviel ich aus dem Fass aus dem ich auskippe rausholen kann.

Hab mir also 3 Int Variablen gemacht:

z.b. für Fass1(8L) in Fass2(5L) :
fass1=fass1-(5-fass2);
fass2=fass2+(5-fass2);

Was mir schon selbst aufgefallen ist: Das ich den Inhalt von Fass 1 nicht
beachte und somit unmögliche Transaktionen entstehen.
Da kamen manchmal komische ergebnise raus und jede möglichkeit
mit einer If abfrage zu machen ist auch etwas stressig , daher suche
ich eine Methode dies besser zu gestalten.

Wenn ihr Ideen habt wäre ich dankbar für eure Hilfe :)
 
Zuletzt bearbeitet:
Was genau willst Du denn?
Ein Programm, dass die Lösung ermittelt?
Ein Werkzeug, mit dem man die Lösung selbst ermitteln kann?
Eine Lösung, die das Programm nur noch vorspielt?

(Ist Wegschütten erlaubt?)

-- -- muckelzwerg
 
Helios co. schrieb:
Stichworte: Rekursion und Backtracking

Falls ich richtig versaten habe was du meinst :D

Naja nicht wirklich.
Nicht ich , sondern der User soll ja durch das umschütten herausfinden wie man
das Problem löst , ich gebe ihm nur das Werkzeug durch das Programm.

z.B. wenn in Fass8l 5L inhalt sind, ich es in Fass3L wo 0L drin sind schütte.
Sollen in Fass3L 3L drin sein und in Fass8L die 2L die übrig sind , drin bleiben.
Dazu einen Algorithmus hab ich schon versucht , aber bin gescheitert und zähle
jetzt auf euch.
 
Zuerst ueberleg dir eine Datenstruktur. z.B.

- Array Eimer:
- Volumen
- Inhalt

(Inhalt <= Volumen)

Dann ueberleg dir (z.b. auf einem Zettel) welche faelle auftreten koennen wenn es z.B. heist "schuette Array[0] nach Array[2]".
- Es kann rein passen (math.: Array[0].Inhalt <= (Array[2].Volumen - Array[2].Inhalt)
- Es kann nur teilweise reinpassen -> Berechne wieviel reinpasst
- Es kann gar nichts reinpassen
usw.

Mach dir am besten eine Uebersicht auf einem Zettel.
 
Erm, das ist doch nun wirklich simpel.
Du hast pro Fass genau zwei Informationen:
a) Fassungsvermögen
b) Wasserstand
Dann hast Du eine Funktion, die von einem Fass in ein Anderes schüttet.
Das ist nichts weiter, als eine Fallunterscheidung.
1) Füllstand a > Fassungsvermögen b - Füllstand b
>> Fass b auf Max, der Rest bleibt in a
2) Füllstand a = Fassungsvermögen b - Füllstand b
>> Fass b auf Max, a ist leer
3) Füllstand a < Fassungsvermögen b - Füllstand b
>> Fass b wird um Füllstand a voller, a ist leer

Das kannst Du beliebig in Datentypen und Funktionen umsetzen.
Vorschläge kann man da schlecht machen,
zum einen seh ich nicht, womit Du die Aufgabe lösen willst (Programmiersprache?)
zum anderen, sollst Du ja auch noch was zu tun haben.

mfG

-- -- muckelzwerg
 
Zurück
Oben