PHP Kalulator, pętla

0

Chciałbym przerobić to:

   <?php
$a = 100; 
$b = 20; 
$koszta = 1/pow($a,1/2);
$kosztb = 1/pow($b ,1/2);
echo "$koszta";
   ?>

tak, aby było to zawarte w pętli.
I jeśli koszta > kosztb to echo "1"
jeśli kosztb > koszta to echo "2"
za każdym razem, gdy dany koszt jest mniejszy od drugiego do liczebnika dodawane tego mniejszego dodawane "1"
i sprawdzanie dalej który jest większy a który mniejszy i pokazywanie "echo ..." aż do momentu, gdy dwa razy pod rząd będzie
echo "2"
echo "2"
lub
echo "1"
echo "1"

Przykład:

$a = 100
$b = 324
$koszta = 1/100^0,5 = 1/10
$kosztb = 1/324^0,5 = 1/18
jeśli koszta > kosztb to echo 1
jeśli kosztb > koszt a to echo 2

1/10 > 1/18
echo 1
(dodajemy 1 do liczebnika mniejszego)
1/10 < 2/18
echo 2
2/10 > 2/18
echo 1
2/10 > 3/18
echo 1

i tutaj stop. Echo 1 powtórzyło się 2 razy. Jak zrobić taką pętlę posługując się tym, co mam?

0

musisz zapamiętać stan porównania poprzedniego i aktualnego i warunkiem wyjścia z pętli dać aktualne === poprzednie, a w pętli w pierwszej instrukcji do poprzedniego przypisać aktualne i kontynuować pętlę

a teraz pokaż swoją próbę

0

Racja. Znasz może jeszcze odpowiedź na moje pytanie? :D
Totalnie nie wiem jak sie za to zabrać. Próbowałem pętli for, ale nie wychodzi mi to zupełnie
robiłem coś takiego

for( $a = 50;
$b = 20;
$koszta = 1/pow($a,1/2);
$kosztb = 1/pow($b ,1/2);
if ($koszta > $kosztb)
echo "test2";
elseif ($kosztb > $koszta)
echo "test1";

Zaznaczam jestem laikiem.

1
do
{
   $poprzednie = $aktualne;
   // TU TWÓJ KOD
   $aktualne = $koszta > $kosztb ? "2" : "1"
}
while($poprzednie !== $aktualne);
0

A mógłbyś też rzucić okiem na ten mój kod, bo z nim coś też jest nie tak.

1
$a = 100;
$b = 233;
 
$aktualne = $i = $j = 1;
do
{
    $poprzednie = $aktualne;
    $koszta = $i / sqrt($a);
    $kosztb = $j / sqrt($b);
 
    ($aktualne = $koszta > $kosztb) ? $j ++ : $i ++;
    echo $aktualne ? "test1" : "test2";
}
while($aktualne !== $poprzednie);
0

Ok, super. A jeszcze jedno pytanko. Jak mogę do tego dodać zliczanie par.
pierwsze echo obojętnie czy to test1 czy to test2 = 1
Potem każde kolejne test1 i test2 to para.

Załóżmy, że skrypt zwraca nam:
test1 test2 test1 test2 test1 test1
to
test1 to jedna para (bo pierwsze echo to zawsze 1)
potem test 2 test 1 - kolejna para
test2 test 1 - kolejna para.
I chciałbym, aby zwracało mi liczbę par - tutaj są 3 czyli powinno zwrócić liczbę 3.

1

floor(($i + $j) / 2) ?

0

Tylko, że zawsze pierwsze echo ma być jako jedna cała para choć jest tylko jeden a dopiero potem ma zliczać faktyczne pary.

0

To zlicza liczebniki $i i $j a powinno komentarze, które są wynikiem działania skryptu. Zwrócił mi on wartość "4", a powinno być "3".
test1test2test1test2test1test1
Zwrócił 4

1

aha, no to min($i, $j) chyba będzie ok
ogólnie kombinuj z $i i $j bo tu już masz zliczoną liczbę komentarzy - wystarczy rozpisać na kartce i ułożyć sobie wzór

0

Ok, super!
A da się zrobić w jakiś prosty sposób to w drugą stronę znając $a i znając ilość par i zmienną która jest wyższa tym samym?, aby obliczyło zakres jaki może mieć $b?
Bo np.
Jeśli
test1
test2
test1
test2
test1
test1
to warunek, który wywołuje test1 jest większy niż test2 więc wiedząc, że test1 jest mniejsze lub większe i jest = 100 możemy obliczyć zakres jaki może przyjąć $b?

I co zrobić jakbym chciał, aby pokazywało jeszcze jedno echo tuż za tym powtórzonym
test1test2test1test2test1test1 aktualnie kończy tutaj
a chciałbym, aby pokazywalo jeszcze jedno
test1test2test1test2test1test1test2
Nie zaburzy to zlicznych par?

0

Jest ktoś w stanie pomóc?

0

Zrobiłem to w drugą stronę używając innego wzoru.:)
A powiesz mi może jak zrobić, aby widoczne była kolejna seria par, aż do ponownego powtórzenia?

0

Pomoże ktoś?

0

bump

0
ememem napisał(a)

A powiesz mi może jak zrobić, aby widoczne była kolejna seria par, aż do ponownego powtórzenia?

powtórz pętlę jeszcze raz, bez resetowania zmiennych $i i $j
o to chodzi?

0

Wystarczy tak:

<?php
$a = $_POST['a'];
$b = $_POST['b'];
 if(empty($_POST['a']['b'])){
echo "<font color=red>Wypełnij puste pole</font>";}

$aktualne = $i = $j = 1;
do
{
    $poprzednie = $aktualne;
    $koszta = $i / sqrt($a);
    $kosztb = $j / sqrt($b);
 
    ($aktualne = $koszta > $kosztb) ? $j ++ : $i ++;
    echo $aktualne ? "<font color=red>test2</font> <br>" : "<font color=green>test1 </font><br>";
}

while($aktualne !== $poprzednie);
do
{
    $poprzednie = $aktualne;
    $koszta = $i / sqrt($a);
    $kosztb = $j / sqrt($b);
 
    ($aktualne = $koszta > $kosztb) ? $j ++ : $i ++;
    echo $aktualne ? "<font color=red>test2</font> <br>" : "<font color=green>test1</font><br>";
}

while($aktualne !== $poprzednie);
echo min($i, $j);

?

0

Nie rozumiem. Jak cokolwiek zmieniam to pętla robi się w nieskończoność :D

0

hm?

0

bump

0

A co ty w ogóle liczysz? Ten algorytm który próbujesz zastosować wydaje się być kiepski.

0

KosztA - 1/$a^0,5
KosztB - 1/$b^0,5
Jeśli A<B
echo A
Jeśli B<A
echo B
Za każdym razem, gdy któreś mniejsze do liczebnika dodajemy "1".
Wzór stworzony na własne potrzeby. Jest ktoś w stanie powiedzieć jak dwa razy wykonać tą pętlę?

0

a tak konkretniej powiesz w realnym świecie co to ma liczyć? może coś robisz na około
jak nie działa ten kod z twojego ostatniego postu to go zdebuguj - choćby przy pomocy echo sprawdź czemu się zapętla w nieskończoność

0

Częstotliwość ataków do pewnej gry internetowej. Kiedy występuje podwójny atak.

ustaw jeszcze "$aktualne" na cokolwiek innego przed drugą pętlą -

Mógłbyś mi pokazać jak Ty byś to zrobił, bo może coś knocę?

0

Więc? Pomożecie?

0

bump

0

pokaż może jak TY to robisz

0

tak

<?php
$a = $_POST['a'];
$b = $_POST['b'];
 if(empty($_POST['a']['b'])){
echo "<font color=red>Wypełnij puste pole</font>";}
 
$aktualne = $i = $j = 1;
do
{
    $poprzednie = $aktualne;
    $koszta = $i / sqrt($a);
    $kosztb = $j / sqrt($b);
 
    ($aktualne = $koszta > $kosztb) ? $j ++ : $i ++;
    echo $aktualne ? "<font color=red>test2</font> <br>" : "<font color=green>test1 </font><br>";
}
 
while($aaa !== $poprzednie);
do
{
    $poprzednie = $aktualne;
    $koszta = $i / sqrt($a);
    $kosztb = $j / sqrt($b);
 
    ($aktualne = $koszta > $kosztb) ? $j ++ : $i ++;
    echo $aktualne ? "<font color=red>test2</font> <br>" : "<font color=green>test1</font><br>";
}
 
while($aktualne !== $poprzednie);
echo min($i, $j);
0

miałeś zmienić $aktualne przed wejściem do drugiej pętli, ale w sensie zmiany jego wartości :|

while($aktualne !== $poprzednie);
$aktualne = NULL;
do

1 użytkowników online, w tym zalogowanych: 0, gości: 1