Homepage selbermachen 7.852 Themen, 35.619 Beiträge

PHP: Durch 2 Teilen...Ergebnis wieder durch 2 teilen usw.

Schnurbart / 9 Antworten / Baumansicht Nickles

Hallo, ich habe eine Zahl. diese ist z.b. 1000.

Nun soll diese Zahl durch 2 geteilt werden. Das daraus folgende Ergebnis wieder durch 2
und so weiter.

Das Ergebnis ist, dass die Anzahl der Teilungen angegeben werden sollen.

ALso zum Beispiel so:

Läuft im Hintergrund ab:
1000 / 2 = 500
500 / 2 = 250
250 / 2 = 125
.
.
.
---------------------------------

Gleichzeitig soll dazu dies dementsprechend ausgegeben werden.

1
2
3
.
.
.
----------------------------------

habe es schon auf zig Arten versucht

z.b.
$wert = 1000;
while($wert = 0)
{
$wert = $wert / 2;
}

oder auch
for($wert=1000;$wert>=0;$wert/2)
{ echo $wert; }

habe keine Ahnung wieso das nicht geht

Please help me

bei Antwort benachrichtigen
xafford Schnurbart „PHP: Durch 2 Teilen...Ergebnis wieder durch 2 teilen usw.“
Optionen

$c=0;
while($zahl>2&&$zahl%2==0)
{
$zahl=$zahl/2;
$c++
echo "$c<br />";
}

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Schnurbart xafford „ c 0 while zahl 2 zahl 2 0 zahl zahl/2 c echo c “
Optionen

wieso nutzt du denn % also Prozent stat dem geteilt /

bei Antwort benachrichtigen
xafford Schnurbart „wieso nutzt du denn also Prozent stat dem geteilt /“
Optionen

das % ist der modulus. ich ging davon aus, daß du nur ganzzahlig teilen willst, also nicht z.b. 3/2 berechnen wolltest, sondern die zahl nur so lange teilen willst, wie das ergebnis ganzzahlig ist.
falls das nicht deine absicht war, so mußt du natürlich eine andere abbruchbedingugn wählen, so wie Apro es angesprochen hat.

Pauschalurteile sind immer falsch!!!
bei Antwort benachrichtigen
Apro Schnurbart „PHP: Durch 2 Teilen...Ergebnis wieder durch 2 teilen usw.“
Optionen

Wenn man eine Zahl immer wieder durch 2 dividiert, wird die Zahl immer kleiner, wird jedoch nie null! Irgenwas muss als Abbruchbedingung dienen. Z.b. Solange, bis die Zahl kleiner als 1 wird. Oder bis die Zahl mit 3 Kommastellen anzeigbar ist. Etc.
Ich weiß nicht genau was das Ziel der Funktion sein soll.

Die Schleife von xafford läuft so lange, bis die Division keinen ganzzahligen Wert ergibt, bzw. bis die Zahl den Wert 2 erreicht.

greetings...
bei Antwort benachrichtigen
Heinz_Malcher Schnurbart „PHP: Durch 2 Teilen...Ergebnis wieder durch 2 teilen usw.“
Optionen

Hmm, kann es sein, dass dein Vorschlag sehr engständig arbeitet Xafford?
Bei Ungeraden Zahlen beispielsweise sollte es probleme geben.

bei Antwort benachrichtigen
Apro Heinz_Malcher „Hmm, kann es sein, dass dein Vorschlag sehr engständig arbeitet Xafford? Bei...“
Optionen

wenn 'Schnurrbart' keine abbruchbedingung angiebt ist er selber schuld

greetings...
bei Antwort benachrichtigen
Heinz_Malcher Apro „wenn Schnurrbart keine abbruchbedingung angiebt ist er selber schuld“
Optionen

sorry, aber eine abbruchbedingung (break) hat doch nix mit der teilbarkeit ungerader tahlen zu tun ;)

bei Antwort benachrichtigen
Apro Heinz_Malcher „sorry, aber eine abbruchbedingung break hat doch nix mit der teilbarkeit...“
Optionen

ich mein den allgemeinen begriff abbruchbedingung (nicht nur break). in einem algorithmus kommen oft schleifen und rekursive prozeduren vor. die alle arbeiten auf ein ziel hin. ob jetzt der abbruch durch "break" statt findet wie bei einer endlos-schleife oder durch den 2. therm einer for-schleife (for(anfangswert;negierte_abbruchbedingung;aktion)) ist dabei gleichgültig.

greetings, Apro

greetings...
bei Antwort benachrichtigen
computerschlumpf Schnurbart „PHP: Durch 2 Teilen...Ergebnis wieder durch 2 teilen usw.“
Optionen

Hi,

so wie ich Dich verstanden habe willst Du eine beliebige Zahl durch 2 teilen, bis das Ergebnis grösser 2 ist. Was hälst Du hiervon?

$zahl=1000;
$ergebnis=(log($zahl)/log(2));
$rund_ergebnis=floor($ergebnis);
echo $rund_ergebnis;

Damit kriegst Du das Ergebnis wie oft es geht und kannst dann notfalls eine Schleife drumherum bauen, die Zwischenergebnisse anzeigt?

gruß
computerschlumpf

There are only 10 types of people in the world: Those who understand binary and those who don't.
bei Antwort benachrichtigen