IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Peter Večera
Brigádník
Avatar
Peter Večera:8.3.2020 19:44

Ahoj potrebujem radu tu je časť kódu na ktorom pracujem, len nechapem výsledok ktorý z kodu vychádza. skusim v komentaroch u programu popisat o čo ide.

Zkusil jsem: všetko možné

Chci docílit: aby to počítalo spravne

 
Odpovědět
8.3.2020 19:44
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:9.3.2020 10:50

Mozna by bylo dobre napsat, co ten kod ma delat a co to dela ted. A jake hodnoty jsou v jednotlivych promennych. Jestli je umis vypsat pro kazdy radek cyklu, treba. V php to delam pres scho nebo var_dump, vsude, kde se ma zmenit nejaka promena.

Podle mne, z toho kodu neni jasne ani to, jake hodnoty jsou na zacatku.
Zkus na chvilku zapomenout na db a zkus tam dat cisla, vyrobit jednoduchy spustitelny priklad.
A ted by bylo moc fajn, kdybys ten kod vlozit sem, aby slo udelat copy paste.Z obrazku to neudelas. Takhle to neni mozne otestovat, jake to dava vysledky.

A bylo by mozna dobre, aby sis na vysledky polic udelal funkci.

function xxx($dopyt)
    {
    $v = $dopyt->...;
    return $v>240 && $v<250 ? 5 : ($v>=250 && $v<265 ? 6 : false);
    }

$pocet_polic = xxx($dopyt);
----
$a = 97,6 * (60 - 10) / 10000 * 9,55 = 4,6604
$b = 4,6604 * 6 + ??? = 27,9624 + ??? = 27,9624
$suma1 = $suma1 + $b = ??? + $b
$suma1 = $suma1 + $b = ??? + $b // pises, ze 2x
$suma1 = 55,9248
$a = 97,6 * (60 - 10) / 10000 * 9,55 = 4,6604
$c = 4,6604 * 6 + ??? = 27,9624 + ??? = 27,9624
$suma6 = $suma6 + $b = ??? + $b = 27,9624
$suma = $suma6 = 27,9624 // ty pises o jakemsi 83? To mas odkud?
// A vubec, zamysli se nad kazdym otaznikem.
// A co je v suma1 a 6 predtim. Jestli tam nejsou data z jineho cyklu, vyrobku
 
Nahoru Odpovědět
9.3.2020 10:50
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:9.3.2020 10:54

Jinak, ten cuklus bych stavel takto:

$suma = 0;
cyklus()
    {
    if (...)
        {
        ...
        $suma += ...
       }
    elseif (...)
        {
        ...
        $suma += ...
        }
}
echo $suma;
 
Nahoru Odpovědět
9.3.2020 10:54
Avatar
Peter Večera
Brigádník
Avatar
Peter Večera:9.3.2020 18:36
<?php
$pole = ['http://localhost/bibi/public/img/vypln/1.png','http://localhost/bibi/public/img/vypln/1.png','http://localhost/bibi/public/img/vypln/6.png'];
$cena_vnutro1 = 0;
$cena_vnutro6 = 0;
$cena6 = 0;
$cena1 = 0;
for($i = 0; $i < 3; $i++ ){// cyklus prebehne 3 krat 1,2,3

            if( $pole[$i] == 'http://localhost/bibi/public/img/vypln/1.png' ){ //tento obrazok je vo výsledoku 2x

                $pocet_polic = 6;
                $cena_polica1 =  ( 97.6 * (60 - 10) / 10000 ) * 9.55;
                $cena1 = $cena_polica1 * 6;//vysledok je 27,9624 + hranovanie


            }
            $cena_vnutro1 += $cena1;
// koniec obr1 http://localhost/bibi/public/img/vypln/1.png

            if( $pole[$i] == 'http://localhost/bibi/public/img/vypln/6.png' ){ //tento obrazok je vo výsledoku 1x

                $pocet_polic = 6;
                $cena_polica6 =  ( 97.6 * (60 - 10) / 10000 ) * 9.55;
                $cena6 = $cena_polica6 * 6;//vysledok je 27,9624 + hranovanie


            }
            $cena_vnutro6 += $cena6; // 27.96 ok

        }
        echo $cena_vnutro = $cena_vnutro1 + $cena_vnutro6; //to je po cykly

Tak ze som kod zjednodusil v cyklus prebehne 3x , 2x s jednou podmienkou (obrazkom), 1x jednou podmienkou. Výsledok kazdej podmienky je 27,9624 x 3 = 83,8872.
Ale môj výsledok je ešte o jednu otácku vyšší 83,8872 + 27,9624 = 111,8496 prečo ?

 
Nahoru Odpovědět
9.3.2020 18:36
Avatar
Peter Večera
Brigádník
Avatar
Odpovídá na Peter Večera
Peter Večera:9.3.2020 18:47

float(27.9624) int(0) float(55.9248) int(0) float(83.8872) float(27.9624) 111.8496
tak že prvá podmienka platí 27.9624
druha neplati 0
------------------------------------------------------ 1. krok cyklu
prvá podmienka platí 55.9248
druha neplati 0
------------------------------------------------------ 2. krok cyklu
prvá podmienka neplatí ale hodnota sa navýšila 83.8872
druha platí 27.9624
------------------------------------------------------ 3. krok cyklu
výsledok 111.8496

 
Nahoru Odpovědět
9.3.2020 18:47
Avatar
Peter Večera
Brigádník
Avatar
Odpovídá na Peter Večera
Peter Večera:9.3.2020 18:51

tak asi si si odpoviem sám ... posunul som cena1 = 0 pred prvu podmienku
a cena6 = 0 pred druhu podmienku a myslim ze uz to rata spravne :)

<?php
$pole = ['http://localhost/bibi/public/img/vypln/1.png','http://localhost/bibi/public/img/vypln/1.png','http://localhost/bibi/public/img/vypln/6.png'];
$cena_vnutro1 = 0;
$cena_vnutro6 = 0;


for($i = 0; $i < 3; $i++ ){// cyklus prebehne 3 krat 1,2,3
            $cena1 = 0;
            if( $pole[$i] == 'http://localhost/bibi/public/img/vypln/1.png' ){ //tento obrazok je vo výsledoku 2x

                $pocet_polic = 6;
                $cena_polica1 =  ( 97.6 * (60 - 10) / 10000 ) * 9.55;
                $cena1 = $cena_polica1 * 6;//vysledok je 27,9624 + hranovanie


            }
            var_dump($cena_vnutro1 += $cena1);
// koniec obr1 http://localhost/bibi/public/img/vypln/1.png
            $cena6 = 0;
            if( $pole[$i] == 'http://localhost/bibi/public/img/vypln/6.png' ){ //tento obrazok je vo výsledoku 1x

                $pocet_polic = 6;
                $cena_polica6 =  ( 97.6 * (60 - 10) / 10000 ) * 9.55;
                $cena6 = $cena_polica6 * 6;//vysledok je 27,9624 + hranovanie


            }
            var_dump($cena_vnutro6 += $cena6); // 27.96 ok

        }
        echo $cena_vnutro = $cena_vnutro1 + $cena_vnutro6; //to je po cykly
Editováno 9.3.2020 18:52
 
Nahoru Odpovědět
9.3.2020 18:51
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:10.3.2020 7:52

Tak, uz to vidim. A bylo to nejspis i v te puvodni verzi. Az na to, ze tam cast kodu chybela.
Problem je ten, co jsem zminil s tim if-elseif.

c1 = 0
cyklus (1,1,0)

if=true {c1 = 123}
if=false {c2 = 234}
c += c1 + c2 // c1=123, c2 = 0 // ty to mas pod kazdym ifem c+=c1, c+=c2, ale to melo byt uvnitr ifu!

if=true {c1 = 123}
if=false {c2 = 234}
c += c1 + c2 // c1=123, c2 = 0

if=false {c1 = 123}
if=true {c2 = 234}
c += c1 + c2 // c1=123, c2 = 234 // c1 zustalo z predchoziho cyklu 123, ale ty ocekavas nulu
---
// Cili tohle
if=true {c1 = 123}
c += c1
if=false {c2 = 234}
c += c2

// a tohle je uplne neco jineho
if=true {c1 = 123; c += c1}
if=false {c2 = 234; c += c2}

// nebo
if=true {c1 = 123; c += c1}
elseif=false {c2 = 234; c += c2}

V tom prvnim pripade pripocitavas c1 a c2 vzdy, ikdyz if nebyl true a hodnotu nenulujes, takze beres z prechoziho cyklu. Podobne bys dopadl, kdybys to v array otocil, zas by tam bylo navic 234 a dokonce 2x.

Editováno 10.3.2020 7:53
 
Nahoru Odpovědět
10.3.2020 7:52
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:10.3.2020 7:57

Ono, cele si to tim c1 a c2 komplikujes, to je zbytecne navic.

//$cena1 = $cena_polica1 * 6
//$cena_vnutro1 +=  $cena1
$cena_vnutro1 +=  $cena_polica1 * 6 // to je totez, az na to, ze tohle budes
// mit uvnitr ifu, takze ti nenastane stejny pripad
 
Nahoru Odpovědět
10.3.2020 7:57
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.