Für spezialisten

Neue Frage »

Moppel Auf diesen Beitrag antworten »
Für spezialisten
Breze 06.08.2004 20:27:38

Funktionen

Um Euch vorrechnen zu können wieviel von den Truppen max gekauft werden können bräuchte ich einen Rechenmeister.

Was wissen wir:
Wir kennen die Preise z.B. von einem Scharfschützen.

80 Gold
40 Koks
0 Sand
0 Nahrung

Die Anzahl die ich kaufen kann kenn ich net. Aber ich weiß was ich an Rohstoffen besitze

Ich hab 200 Gold 200 Koks 200 Sand und 200 Nahrung

Wie heißt dann die Formel?

Am Ende muß rauskommen das ich max 2 bauen kann.
Gibt es dafür überhaupt ne Formel?



eddie1570 06.08.2004 23:03:59

Funktionen

versuch es mit einer <= rechnung/gleichung

wenn gold/2 <= koks dann ( x gold )/80
wenn gold/2 >= koks dann ( x koks )/40

wobei die anrwort nur reelle/ganze zahlen sein sollten ( die nachkommastellen kann man ja einfach weglassen )




Breze 07.08.2004 01:48:25

Funktionen

Naja, so einfach ist das beim Programmieren nicht.
Man kann nie ausschliessen das ich mich nicht mal entscheide statt Gold wieder Nahrung zu verlangen.
Es gibt immer 4 Kostenstellen, also müssen auch alle berechnet werden.
Und der Wert 80 und 40 muß Durch eine Variable angegeben werden.

Genauso ist unlogisch woher Du die 2 in Deiner Formel nimmst
gold/2

Ich sagte nur das in unseren Fall als Ergebnis 2 rauskommen muß. Aber die Zahl 2 ist bei uns das gesuchte X

Also überdenke das ganze nochmal

Wichtig:
Es gibt 4 Preise, auch wenn diese eine 0 enthalten ist es ein Preis, denn bei der Berechnung der Anzahl wird nicht nur der Scharfschütze berechnet, sondern z.B. auch die Arbeiter und die kosten Nahrung.
Die Formel muß auf alle 4 Preisstufen passen.

Viel Spaß



_______________________________________________________


Könnt ihr hier bitte weiterhelfen ich denke mal ihr wisst worum es hier geht
Ben Sisko Auf diesen Beitrag antworten »

Was suchst du genau? Ein Lösungsverfahren, dass du selbst programmieren willst?

Gruß vom Ben
Mazze Auf diesen Beitrag antworten »

Überprüfe die Bedingungen bevor du die Werte abziehst. Ich werde hier mal nicht die komplexeren (aber schnelleren) Verfahren erörtern sondern die intuitiv naheliegenste Methode erläutern.

Du weißt also das Dein Scharfschütze eine bestimmte Anzahl an Ressourcen verbaucht und Du hast den aktuellen Kontostand gegeben.

Spezifikation der ersten Hilfsfunktion

fun kaufen? : data ** ress -> boolean
in: Daten der Einheit und Kontostand
out: boolean wert der sagt ob man kaufen kann oder nicht

data sind in diesem Fall die Werte die die spezielle Einheit kostet. (Koks,Gold ,etc)

ress sind der aktuelle kontostand

def kaufen? (a,b)==
Ich betrachte a,b als lokal das heißt eine Veränderung dieser Variablen hat keinen Einfluss auf den tatsächlichen Kontostand. Sollte eine Einheit kaufbar sein also alle Werte der Variable b nach Abziehen von a > 0 sein liefert die Funktion true zurück, ansonsten false.

Spezifikation der zweiten Hilfsfunktion

fun teste: data**ress -> nat
in: Daten der Einheiten und Kontostand
out: Anzahl der kaufbaren Einheiten

def test(a,b) ==

-- java code --

code:
1:
2:
3:
4:
5:
6:
7:
8:
int tmp= 0;
while(kaufen?(a,b)){
tmp++;
b=kaufen(a,b);
}
return tmp;


Die Funktion kaufen führt dann tatsächlich das Kaufen durch wobei ich in diesem Fall wieder lokal betrachte! Sie liefert den aktualisierten Kontostand zurück. Wie gesagt, das ist das, was mir intuitiv sofort einfallen würde.

edit

Es bietet sich natürlich an, da die Daten logisch zusammengerhören Methoden und Daten in ein eigenes Objekt auszulagern bzw. direkt eine Klasse.

edit2

Ich betrachte hier natürlich exakt einen Einheitentyp für zugehörige Ressourcen. Willst Du mehrere Einheiten überprüfen müsstest Du nach meiner Methode mehrmals die Funktionen mit neuen Parametern aufrufen. Das Optimum wird dabei nicht ereicht. Um ein Optimum zu erreichen müsstest Du nach meiner Methode alle Möglichkeiten durchspielen, und dann das Perfekte raussuchen. Das funktioniert in sofern, als das die Eingabe endlich ist aber der Aufwand dürfte exponentiell (also gigantisch) sein.

edit3

Betrachtet man deine Spezifikation das Du die Preise für deine Einheiten ändern willst kann ich Dir nur nochmal ans Herz legen eine eigene Klasse/Objekt dafür zu schreiben mit geeigneten getter/setter Methoden, der algorithmus oben kommt damit auf jedenfall klar da die werte ja aus dem aktuellen objekt ausgelesen werden.
riwe Auf diesen Beitrag antworten »
RE: Für spezialisten
ist das nicht trivial?
sand und futter sind egal und nur schmückendes beiwerk,
von gold und koks hast du gkeich viel und du brauchst doppelt soviel gold wie koks, daher - da es keine halben scharfschützen gibt, zumindest lebende -

n = integer(200/80) = 2

werner
Joerghamster Auf diesen Beitrag antworten »

Weswegen so komplitziert, er will wissen wieviele truppen er maximal mit den resourcen kaufen kann und dafür ne einfache programmierlösung



du hast 4 rohstoffe und eine einheit kostet x von jedem


also fange mit dem ersten rohstoff an, teile das vorhandene durch das benötigte und runde es ab ( nachkommastellen abschneiden ) und lege es in eine zwischenvariable

danach beim zweiten rohstoff das vorhandene durch das benötigte, nachkommastellen abschneiden und ergebniss mit dem in der zwischenvariable vergleichen, wenn kleiner, dann speichere das ergebniss des zweiten rohstoffs in der zwischenvariable

genauso geht man für den 3.ten und den 4.ten rohstoff vor

zum schluß hat man in der variable die maximal mögliche anzahl an truppen drinnenstehen.

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
funktion ($ress1,$ress2,$ress3,$ress4,$kosten1,$kosten2,$kosten3,$kosten4)
{
$max_möglich 0;
/*$ress1 = 200;
$ress2 = 200;
$ress3 = 200;
$ress4 = 200;

$kosten1 = 80;
$kosten2 = 40;
$kosten3 = 0;
$kosten4 = 0;
*/

$max_möglich floor($ress1 $kosten1 );

if ((floor$ress2 $kosten2 )) < $max_möglich)
{
  $max_möglich floor($ress2 $kosten2 );
}

if ((floor$ress3 $kosten3 )) < $max_möglich)
{
  $max_möglich floor($ress3 $kosten3 );
}

if ((floor$ress4 $kosten4 )) < $max_möglich)
{
  $max_möglich floor($ress4 $kosten4 );
}

return ($max_möglich)
}


Is nu mal in PHP die grobe funktion
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »