Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Prosek brojeva u nizu

[es] :: PHP :: Prosek brojeva u nizu

[ Pregleda: 2590 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

CoaPsyFactor
Aleksandar Zivanovic
SoliterInc
Beograd, Srbija

Član broj: 270256
Poruke: 7
*.ptt.rs.

Sajt: coa.soliterinc.com/skloni..


Profil

icon Prosek brojeva u nizu29.06.2015. u 11:37 - pre 107 meseci
Pozdrav dragi es clanovi :)

Dakle imam jedan zadatak, a to je da napunim niz sa N clanova koji sadrze random broj od MIN do MAX, ali da prosek tog niza (kad se sve sabere i podeli za duzinom) bude odredjena cifra, npr 2.3

Dakle skripta dobija sledece parametre $min = 0, $max = 50, $length = 100, $average = 2.3;

pa bi mi dobro dosla bilo kakva pomoc posto sam zapeo u jednom delu. :)

Hvala.
bolje deset odmah, nego soma ko zna kad.
 
Odgovor na temu

svepomalo

Član broj: 306404
Poruke: 196



+21 Profil

icon Re: Prosek brojeva u nizu29.06.2015. u 11:43 - pre 107 meseci
a kako mi da znamo u kom delu si zapeo ako ne pokazes f-ju? :)
 
Odgovor na temu

CoaPsyFactor
Aleksandar Zivanovic
SoliterInc
Beograd, Srbija

Član broj: 270256
Poruke: 7
*.ptt.rs.

Sajt: coa.soliterinc.com/skloni..


Profil

icon Re: Prosek brojeva u nizu29.06.2015. u 11:58 - pre 107 meseci
Code:

    function getRandomArray($min, $max, $count, $average)
    {
        $array = array();
        $sum = 0;

        for ($i = 0; $i < $count; $i++) {
            $n = mt_rand($min, $max);
            $sum += $n;
            $array[] = $n;
        }

        $currentAvg = $sum / $count;

        if ($currentAvg == $average) {
            return $array;
        }

        $diff = $currentAvg / $average;
        $sum = 0;
        $mul = 1;

        foreach ($array as $key => $value) {
            $smul = $mul;

            while ($mul) {
                $newVal = $value / ($diff * $mul);
                echo "{$newVal} \n";

                if ($newVal >= $min) {
                    $array[$key] = $newVal;
                    $sum += $newVal;

                    break;
                } else if (false == $mul - 1) {
                    $mul = $smul + 1;
                    echo "Next array element\n";
                    break;
                }

                $mul--;
            }
        }

        return $array;
    }


ali ovo ne radi xD , mozda sam ja imao pogresnu zamisao kako ovo da uradim - tako da je bilo kakva pomoc dobro dosla :D

bolje deset odmah, nego soma ko zna kad.
 
Odgovor na temu

deZio
Inđija

Član broj: 150608
Poruke: 345
*.dynamic.isp.telekom.rs.



+38 Profil

icon Re: Prosek brojeva u nizu29.06.2015. u 12:57 - pre 107 meseci
Zadatak nema smisla, ili ti nisi dobro objasnio.

Da li u tvom primeru dužina niza mora biti 100? Ako da, onda ne vidim svrhu koristiti random za članove niza. Pošto postoji mogućnost da pre skripta pukne nego da se od 100 elemenata potrefi baš 2.3 kao prosečan broj.

Dakle jako je mala verovatnoća da ćeš potrefiti srednju vrednost 2.3 ako je svaki član niza vrednost 0-50, i to sa 100 članova.

Kada bismo znali koja je svrha zadatka, možda bismo i mogli bolje pomoći.
 
Odgovor na temu

CoaPsyFactor
Aleksandar Zivanovic
SoliterInc
Beograd, Srbija

Član broj: 270256
Poruke: 7
*.ptt.rs.

Sajt: coa.soliterinc.com/skloni..


Profil

icon Re: Prosek brojeva u nizu29.06.2015. u 13:18 - pre 107 meseci
nije mi tacno receno koja je svrha zadatka, samo mi je receno da trebam da izgenerisem niz od N brojeva (float, int) ciji je prosek na kraju zadata vrednos, primer 2.3
bolje deset odmah, nego soma ko zna kad.
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3453

Jabber: djoka_l


+1462 Profil

icon Re: Prosek brojeva u nizu29.06.2015. u 14:20 - pre 107 meseci
Da li razumeš da zadatak, ovako kako si ga postavio, nema smisla?

Ako generišeš slučajne brojeve sa UNIFORMNOM raspodelom u opsegu 0-50, tada će ti srednja vrednost biti oko 25.
Da bi dobio srednju vrednost 2.3, treba da generišeš ili slučajne brojeve sa uniformnom raspodelom u opsegu 0-4.6 ili da napraviš generator sa NEUNIFORMNOM raspodelom slučajnih brojeva (recimo sa normalnom ili nekom drugom).
 
Odgovor na temu

CoaPsyFactor
Aleksandar Zivanovic
SoliterInc
Beograd, Srbija

Član broj: 270256
Poruke: 7
*.ptt.rs.

Sajt: coa.soliterinc.com/skloni..


Profil

icon Re: Prosek brojeva u nizu29.06.2015. u 15:19 - pre 107 meseci
Trebam da generisem random niz sa 100 clanova, ciji prosek zbira svih clanova na kraju je neka cifra.

Primer:

/** Jedan clan moze biti izmedju 0 i 50 */
$min = 0;
$max = 50;

/** Broj clanova koje moram da imam */
$lenght = 100;

/** Prosecna vrednost koju na kraju moram da dobijem */
$average = 20.3;

tako da na kraju kada saberem sve clanove niza i podelim ih sa $count dobijem $average, a pri tome da ni jedan clan ne sme da ispadne iz opsega 0-50
bolje deset odmah, nego soma ko zna kad.
 
Odgovor na temu

deZio
Inđija

Član broj: 150608
Poruke: 345
*.dynamic.isp.telekom.rs.



+38 Profil

icon Re: Prosek brojeva u nizu29.06.2015. u 15:49 - pre 107 meseci
Evo neko osnovno rešenje koje nije idealno ali radi posao. Probaj da ga prilagodiš ako je potrebno:

Code (php):

     
     function getRandomArray( $min, $max, $count, $average ){
         
          // KREIRAJ NIZ SA $count DUZINOM
          $result_array = array_fill( 0, $count, 0 );
         
          // KREIRAJ FUNKCIJU KOJA VRACA NASUMICAN DECIMALAN BROJ
          $random_float_callback = function() use( $min, $max ){ return round( mt_rand( $min, $max ) + 1 / mt_rand( 1, 10 ), 1 ); };
         
          // POPUNI POSTOJECI NIZ SA NASUMICNIM BROJEVIMA
          $result_array = array_map( $random_float_callback, $result_array );
         
          // ZBIR VREDNOSTI ELEMENATA NIZA
          $result_sum = array_sum( $result_array );
         
          // ZBIR VREDNOSTI ELEMENATA NIZA KOJI NAM TREBA
          $target_sum = round( $average * $count, 1 );
         
          // SMANJUJ NASUMIČNO ELEMENTE NIZA ZA 0.1, SVE DOK NE DOBIJEMO TRAŽENI ZBIR
          while( $target_sum < $result_sum ){
               
               $rand_array_index = mt_rand( 0, $count - 1 );
               
               // SMANJUJ SAMO VREDNOSTI KOJI SE MOGU SMANJIVATI - DA NE DOBIJEMO NULU ZA NOVU VREDNOST AKO JE PRETHODNA VREDNOST 0.1
               if( $result_array[ $rand_array_index ] > 0.1 ){
                   
                    // SMANJI NASUMICNU VREDNOST NIZA ZA 0.1
                    $result_array[ $rand_array_index ] = round( $result_array[ $rand_array_index ] - 0.1, 1 );
                   
                    // SMANJI ZBIR VREDNOSTI ELEMENATA NIZA ZA 0.1 JER SMO UPRAVO JEDAN ELEMENT NIZA SMANJILI ZA 0.1
                    $result_sum = round( $result_sum - 0.1, 1 );
                   
               }
               
          }
         
          echo '<pre>' . print_r( $result_array, true ) . '</pre>';
         
          echo 'Result: ' . $result_sum;
         
     }
     
     getRandomArray( 0, 50, 100, 2.8 );
     
 


Trebalo bi da dobiješ ovako nešto kao rezultat:

Code:
Array
(
    [0] => 4.2
    [1] => 8.2
    [2] => 0.1
    [3] => 0.1
    [4] => 11.9
    [5] => 7.1
    [6] => 0.1
    [7] => 1.9
    [8] => 0.1
    [9] => 0.1
    [10] => 0.1
    [11] => 0.1
    [12] => 0.1
    [13] => 0.1
    [14] => 0.1
    [15] => 0.1
    [16] => 3
    [17] => 0.1
    [18] => 0.1
    [19] => 0.1
    [20] => 0.1
    [21] => 13.7
    [22] => 10
    [23] => 0.1
    [24] => 0.1
    [25] => 4.2
    [26] => 0.1
    [27] => 0.1
    [28] => 0.1
    [29] => 0.1
    [30] => 0.1
    [31] => 0.1
    [32] => 0.1
    [33] => 15.2
    [34] => 0.1
    [35] => 0.1
    [36] => 19.8
    [37] => 0.1
    [38] => 0.1
    [39] => 0.1
    [40] => 0.1
    [41] => 0.1
    [42] => 0.1
    [43] => 0.1
    [44] => 5
    [45] => 0.1
    [46] => 0.1
    [47] => 4.4
    [48] => 0.1
    [49] => 0.1
    [50] => 11
    [51] => 10
    [52] => 6.6
    [53] => 0.1
    [54] => 0.1
    [55] => 0.1
    [56] => 8.8
    [57] => 0.1
    [58] => 0.1
    [59] => 14.9
    [60] => 0.1
    [61] => 0.1
    [62] => 3.1
    [63] => 0.1
    [64] => 15.4
    [65] => 0.1
    [66] => 0.1
    [67] => 0.1
    [68] => 0.1
    [69] => 0.1
    [70] => 0.1
    [71] => 0.1
    [72] => 0.1
    [73] => 0.1
    [74] => 0.1
    [75] => 15.7
    [76] => 16.7
    [77] => 7.7
    [78] => 0.1
    [79] => 0.1
    [80] => 2.3
    [81] => 3.4
    [82] => 12.5
    [83] => 0.1
    [84] => 0.1
    [85] => 0.1
    [86] => 6.9
    [87] => 0.1
    [88] => 12.9
    [89] => 9
    [90] => 0.1
    [91] => 0.1
    [92] => 0.1
    [93] => 0.1
    [94] => 0.1
    [95] => 7.5
    [96] => 0.1
    [97] => 0.1
    [98] => 0.1
    [99] => 0.1
)
Result: 280
 
Odgovor na temu

CoaPsyFactor
Aleksandar Zivanovic
SoliterInc
Beograd, Srbija

Član broj: 270256
Poruke: 7
*.ptt.rs.

Sajt: coa.soliterinc.com/skloni..


Profil

icon Re: Prosek brojeva u nizu29.06.2015. u 17:41 - pre 107 meseci
Hvala :)
bolje deset odmah, nego soma ko zna kad.
 
Odgovor na temu

[es] :: PHP :: Prosek brojeva u nizu

[ Pregleda: 2590 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.