[php] hoe automatisch waarden in array stoppen

Pagina: 1
Acties:
  • 163 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • freyk
  • Registratie: September 2003
  • Laatst online: 18-09 22:46
Mensen,

Ik probeer mezelf te verdiepen in php, doormiddel van een aantal opdrachten.
Maar met de volgende opdracht, zit ik met een probleem:
"Maak een formulier waar men 2 hele getallen in kan geven, koppel hieraan een PHP-file die de som berekent van alle even gehele getallen tussen die twee ingegeven getallen en die som met begeleidende tekst laat afdrukken.
Voorbeeld:
als wordt ingegeven de getallen 4 en 13, dan zijn de even gehele getallen daartussen: 6, 8, 10 en 12. De gevraagde som is dus: 6+8+10+12=36."

Zelf ben ik er al achtergekomen dat ik met functions, ranges en array's moet werken, maar de werking van arrays vind ik nogal vaag.

Ik heb het al zo ver voor elkaar gekregen dat hij alle evengetallen uit een bepaalde reeks haalt
(dmv een "foreach" en een "if").
Helaas heb ik op het net nog geen manier kunnen vinden, hoe je de gevonden evengetallen automatisch in een array kan stoppen om het later op te kunnen tellen.

Kunnen jullie met helpen met de volgende code?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
function isoneven($getal) {
                return $getal & 1;
                # als oneven is dan geef hij als antwoord 1
               }
$alleevengetallen=array();

#Voor iedere getal tussen 0 en 23, doe het volgende
foreach(range(0,23) as $getal) {
    # controleer of getal even is
    if (isoneven($getal) == 0)
        {
        #zo ja, stop getal in de array, maar hoe??
        };
}

# Tel de gevonden getallen in de array op en geef het antwoord weer
$antwoord=count($alleevengetallen); #alle getallen in array optellen
echo "$antwoord"
?>

Acties:
  • 0 Henk 'm!

  • Shadowman
  • Registratie: Januari 2002
  • Niet online
Met count tel je alle elementen in de array, daarmee krijg je niet de som van alle elementen terug.

http://ie.php.net/manual/en/function.array-push.php

Acties:
  • 0 Henk 'm!

  • Spockz
  • Registratie: Augustus 2003
  • Laatst online: 21-09 10:08

Spockz

Live and Let Live

PHP:
1
2
3
$array[] = $getal;
//of
array_push($array, $getal);


en dan later:
PHP:
1
echo array_sum($array);

[ Voor 59% gewijzigd door Spockz op 07-04-2007 12:31 ]

C'est le ton qui fait la musique. | Blog | @linkedin
R8 | 18-55 IS | 50mm 1.8 2 | 70-200 2.8 APO EX HSM | 85 1.8


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

freyk schreef op zaterdag 07 april 2007 @ 12:20:
Zelf ben ik er al achtergekomen dat ik met functions, ranges en array's moet werken, maar de werking van arrays vind ik nogal vaag.
Waarom moet dat? Overigens zijn arrays niet zo vaag hoor, ik vind het eigenlijk wel grappig dat je de rest van je code wel voor elkaar kon krijgen (inclusief een bit-and voor een even-bepaling), maar geen array kan vullen... :P

Maar je hebt range, foreach en functions allemaal niet nodig, imho denk je veel te moeilijk. Je hoeft zelfs niet in je loop te checken of een getal even is:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$start = 4;
$end = 13;

if($start % 2 > 0)
  $start += 1;
else
  $start += 2;

$values = array();
$sum = 0;
for($i = $start; $i < $end; $i += 2)
{
  $sum += $i;
  $values[] = $i;
}

echo implode('+', $values) . '=' . $sum;

Acties:
  • 0 Henk 'm!

  • Onbekend
  • Registratie: Juni 2005
  • Laatst online: 23:19

Onbekend

...

Off topic:
Staan die opdrachten ergens op het internet? Zo ja, kan je de link geven?
Het lijkt mij dan handig om mensen die iets van php willen leren ook deze link door te geven.

Speel ook Balls Connect en Repeat


Acties:
  • 0 Henk 'm!

  • GlowMouse
  • Registratie: November 2002
  • Niet online
Met range kan het een stuk korter, omdat je als derde parameter de stapgrootte op kunt geven.
PHP:
1
2
3
4
$start = 15;
$end = 41;
$sumelements = range($start + 2 - ($start % 2), $end - 2 + ($end % 2), 2);
echo implode('+', $sumelements) . '=' . array_sum($sumelements);

[ Voor 1% gewijzigd door GlowMouse op 07-04-2007 12:59 . Reden: strict ertussen ]


Acties:
  • 0 Henk 'm!

  • freyk
  • Registratie: September 2003
  • Laatst online: 18-09 22:46
Met de coderegels van Spockz is het gelukt.

De uiteindelijke code:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<? 
$getal1=$_POST["getal1"];
$getal2=$_POST["getal2"];
$evengetallen=array();

function isoneven($getal) {
                return $getal & 1;
                # als oneven is dan geeftie als antwoord 1
               }
#Voor iedere getal tussen $getal1 en $getal2, doe het volgende
foreach(range($getal1,$getal2) as $getal) {
    # controleer of getal even is
    if (isoneven($getal) == 0)
        {
        #zo ja, stop getal in de array
        $evengetallen[] = $getal;
        };
}
echo '<br />';
echo "Controle <br />";
echo '<br />';
echo "De eventallen tussen $getal1 en $getal2 zijn:";
echo '<br />';
foreach ($evengetallen as $evengetal) {
    echo "$evengetal + ";
}
echo "0 = "; echo array_sum($evengetallen);
?>
Pagina: 1