Schleife

Hallo,

Bin noch ein Anfänger in PHP, aber verweist mich bitte trotzdem nicht auf irgendwelche Tutorials, habe die schon durchgeschaut und die Antwort nicht gefunden.
Also nun zum Problem, folgende Aufgabe:

Es gibts ein Anfangskapital von 1000 Euro.
Zwei Leute, A und B haben Zugriff auf das Geld, während A jeden 7. Tag 15 Euros abhebt, hebt B alle 10 Tage 10 Euro ab. Anmerkung: am "0. Tag" heben beide gleich ab)
Die Frage ist nun, wann das Anfangskapital < 0 ist, also wieviele Tage vergehen. Bin leider nicht weiter als bis zu einem, ich glaube richtigen Ansatz gekommen:

$anfangskapital = 1000;
$a = 15 Euro;
$b = 10 Euro;

while ($anfangskapital > 0) {

for( keine ahnung was hier rein gehört^^ ) {

if($h%7 == 0 OR $h == 0) {
$anfangskapital = $anfangskapital - $a ;
}
if($h%10 == 0 OR $h == 0) {
$anfangskapital = $anfangskapital - $b;
}
}
}

Ich glaube, dass beim noch ein paar Sachen fehlen, aber kein Plan was ergänzt werden muss.
Also Danke schon mal im vorraus

MfG
 
Hi,

einen kleinen Hinweis vorweg. Verwende bitte die code-tags, da der Quelltext dann viel lesbarer wird ;)

Nun zu deiner Frage:

Deine Idee sieht ja schonmal ganz gut aus. Einige Sachen hätte ich dann aber doch noch:

- wofür machst du eine while und eine for-schleife? Eigentlich müsste die while-Schleife reichen.
- es reicht ein if($h % 7 == 0) , da 0 % 7 = 0 ;) (gleiches gilt für die 10 )
- wo kommt das $h her? Also ich weiß natürlich, was es sein soll, aber schreib das auf und überlege, wann und wie du es ändern musst.
- was willst du als Ergebnis? Die Anzahl der Tage? Wann und wo gibst du das aus?

Mit den vier Punkten müsste der Code eigentlich schon lauffähig sein. Interessant sind so Punkte wie: Wenn beide am gleichen Tag abholen, wer könnte zuerst? Was passiert, wenn das Kapital nicht mehr reicht? Sagen wir es sind noch 5? da und B will Geld abheben. Soll das gehen?
Solche Fälle hast du hier noch nicht benannt, daher sind die natürlich auch noch nicht im Code berücksichtigt. Könntest du aber als nächstes Ziel nehmen ;)
 
Code:
<?php
$anfangskapital = 1000;
$a = 15;
$b = 10;
$x = 1; ### Zähler für While-Schleife

while(1)
{	
	###checken für A
	if($anfangkapital ==$a)
	{
	echo "A kann nichts mehr abheben und ist nach" . $x . " Tagen pleite :P ";
	break;
	}
	
	###checken für B
	if($anfangkapital ==$b)
	{
	echo "B kann nichts mehr abheben und ist nach" . $x . " Tagen pleite :P ";
	break;
	}

	### A hebt Geld ab
	if($x % 7==0)
	{
		$anfangkapital = $anfangskapital - $a;
	}
	
	### B hebt Geld ab
	if($x % 10==0)
	{
		$anfangkapital = $anfangskapital - $b;
	}	
	
	### Zähler erhöhen
	$x++;
}

?>

Sollte eigentlich so laufen, wobei ich es jetzt nicht getestet habe und auch schon sehr lange kein PHP mehr programmiert habe.
 
@weau:

Wieso schreibst du hier den kompletten Code? Damit ist doch der Lerneffekt fürn Popo ;) zumal die Idee vom Threadersteller doch schon gut und ausbaufähig war.
 
Gibt da selbstverständlich mehrere Möglichkeiten dieses Problem zu lösen.
Ich habs halt mit einer Endlosschleife gemacht und die wird dann mit break; verlassen.

Den Quellcode habe ich überigens gepostet, damit der Threadersteller mal einen kleinen Überblick bekommt, wie man solche Probleme angehen kann und nicht stundenlang alleine am rumbasteln ist und die Motivation verliert.
 
@Lemon: Merk dir das mit den Endlosschleifen erst gar nicht. Sowas macht man nur wenns gar nicht anders geht. Ich bau mittlerweile in Endlosschleifen schon Zähler ein, um zu verhindern daß sie wirklich endlos läuft sollte irgendwo ein logischer Fehler drin sein.
 
Original von odigo
@Lemon: Merk dir das mit den Endlosschleifen erst gar nicht. Sowas macht man nur wenns gar nicht anders geht. Ich bau mittlerweile in Endlosschleifen schon Zähler ein, um zu verhindern daß sie wirklich endlos läuft sollte irgendwo ein logischer Fehler drin sein.

OT:

bricht php nicht nach max ausführungszeit das script alleine ab? sofern in der php.ini die zeit dafür gesetz wurden ist?

/OT
 
Selbst wenn, dann ist das immer noch ein Mechanismus, der den Server retten soll, wenn wirklich alles schiefgeht. Von Haus aus in seiner Software auf sowas zu hoffen ist schon sehr fragwürdig.
 
@Lemon: Merk dir das mit den Endlosschleifen erst gar nicht. Sowas macht man nur wenns gar nicht anders geht. Ich bau mittlerweile in Endlosschleifen schon Zähler ein, um zu verhindern daß sie wirklich endlos läuft sollte irgendwo ein logischer Fehler drin
sein.

Dem kann ich nur zustimmen. @weau in deiner Schleife ist nämlich genau so ein logik Fehler drin :P

Code:
###checken für A
if($anfangkapital == $a)
{
	echo "A kann nichts mehr abheben und ist nach" . $x . " Tagen pleite :P ";
	break;
}

Besser:

Code:
###checken für A
if($anfangkapital < $a)
{
	echo "A kann nichts mehr abheben und ist nach" . $x . " Tagen pleite :P ";
	break;
}

Es muss ein kleiner als (<) sein. Ansonsten läuft die Schleife endlos, wenn sich das Anfangskapital nicht ohne REST durch $a bzw. $b teilen lässt.

Sorry bin grad in Klugscheißerstimmung :D
 
Zurück
Oben