Avatar billede trophymanager Nybegynder
27. januar 2005 - 21:38 Der er 5 kommentarer og
2 løsninger

Basic array samt fordelingsfunktion.

Jeg må nok indrømme jeg er en del på bar bund her.

Jeg skal bruge et array med for eksempel 180 'sæt'.
I hvert af disse skal være et tilfældigt tal mellem 1 og 20 med 1 decimal.

Når dette er lavet skal en funktion tjekke den samlede værdi af disse 20 sæt og se om det er under et tal X. Hvis det er dette skal forskellen mellem den samlede værdi og X tilfældigt deles ud mellem de 180 sæt i arrayet, dog må ingen af de enkelte sæt overstige 20 i værdi.

På forhånd tak.
Avatar billede trophymanager Nybegynder
27. januar 2005 - 21:38 #1
mener selvfølgelig:

Når dette er lavet skal en funktion tjekke den samlede værdi af disse ->180<- sæt og se om det er under et tal X. Hvis det er dette skal forskellen mellem den samlede værdi og X tilfældigt deles ud mellem de 180 sæt i arrayet, dog må ingen af de enkelte sæt overstige 20 i værdi.
Avatar billede hmortensen Nybegynder
27. januar 2005 - 22:15 #2
Jeg forstår ikke den sidste del.

Det her laver et array med 180 poster, og et til mellem 1 og 20 i hver post.

Det tester om summen af arrayet er større eller mindre end variablen $tal.

<pre>
<?php

$tal = 1850;

$result = array();

for ($x=0;$x<180;$x++)
{
    $result[] = rand(100, 2000)/100;
}

$sum = array_sum($result);

$forskel = $sum - $tal;

if ($forskel > 0)
{
    echo "Array summen overstiger \$tal";
} else {
    echo "Array summen er mindre en \$tal";
}

?>
</pre>
Avatar billede trophymanager Nybegynder
27. januar 2005 - 22:28 #3
den er sq accepteret for de to gode ting jeg manglede. nemlig at dividere med 10 for at få decimaler samt funktionen array_sum..

smid et svar, hvis du fortæller hvad <pre> står for?
Avatar billede hmortensen Nybegynder
27. januar 2005 - 22:30 #4
Det er for at vise pre-formateret text.

Bruger jeg altid for at teste med print_r().

Prøv at skrive print_r($result); under $forskel = $sum - $tal;
Avatar billede detox Nybegynder
27. januar 2005 - 22:35 #5
Her  deler den en evt. forskel ud på de enkelte værdier (uden at overstige 20):

<?
$x = 2200; // eks.
$antal = 180;

// Lav array
for ($i=0;$i<$antal;$i++) {
    $arr[] = round(rand(10,200)/10 ,1);
}

// Find gennemsnit
$ialt = array_sum($arr);

// Hvis gennemsnit er mindre end x
if ($ialt<$x) {
    $diff = round(($x-$ialt)/$antal, 1);
    array_map('more', $arr);
}

// Funktion til array_map
function more(&$item) {
    global $diff;
    $item += $diff;
    $item = $item>=20 ? 20 : $item;
    echo "$item<br />";
}
?>
Avatar billede trophymanager Nybegynder
27. januar 2005 - 22:40 #6
Perfekt Detox. Hvis du også smider svar må i deles. En utrolig lælkker funktion den sidste. Super mange gange tak.
Avatar billede detox Nybegynder
27. januar 2005 - 22:41 #7
Her lige finpudset lidt:

<?
$x = 2200; // eks.
$antal = 180;

// Lav array
for ($i=0;$i<$antal;$i++) {
    $arr[] = round(rand(10,200)/10 ,1);
}

// Find sum af array
$ialt = array_sum($arr);
echo "I alt før: $ialt<br />";

// Hvis summen er mindre end x
if ($ialt<$x) {
    $diff = round(($x-$ialt)/$antal, 1);
    array_map('more', $arr);
}
// $arr indeholder nu det færdige array
$ialt = array_sum($arr);
echo "I alt efter: $ialt<br />";


// Funktion til array_map
function more(&$item) {
    global $diff;
    $item += $diff;
    $item = $item>=20 ? 20 : $item;
}
?>
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester