php vraag

Status
Niet open voor verdere reacties.

jeel2008

Gebruiker
Lid geworden
30 okt 2008
Berichten
839
hallo, ik heb er lang op zitten broeden, maar kom ergens niet uit:

1. Schrijf een script dat 25 willekeurige getallen tussen 1 en 50 genereert en afdrukt.
2. Schrijf een script dat de getallen 1 t/m 100 afdrukt en een sterretje plaatst bij elk getal dat deelbaar is door 5.
3. Schrijf een script dat de tekst Hallo World 100 keer afdrukt op het scherm. vergroot de corpsgrootte elke keer met 1. begin met corpsgrootte 10.

dit zijn 3 vragen uit het boek van Arjen Burger, handboek php - 5.
hoewel ik het meeste kon volgen uit hfdst 1 kan ik hier geen wijs uit.
iemand een idee?

bij voorbaat dank, Jeel2008
 
Wat heb je zelf al geprobeerd? Je hebt er weinig aan als wij het voorzeggen.

Ga gewoon aan de slag en geef aan waar het mis gaat :)
 
php

hallo frats,

dit bijvoorbeeld voor vraag 1:

<?php
$nr = mt_rand(1, 50);
for ($a=1; $a<=25; $a++)
{
echo $nr[$a]."<br>\n";
}
?>

maar dan komt er HELEMAAL niets in beeld dus zal er wel iets niet goed zijn.
heb ook al geprobeerd met while en zo, maar ook lauw loene.
ps printopdracht weet ik niet in php, daarom heb ik maar echo gedaan.
 
Gelukkig heb je de juiste functie gevonden (mt_rand())
Echter geeft die maar 1x een getal.

Jij wilt 25x een random getal.

Dus je huidige code even in een andere volgorde plaatsen ;)

[edit]
echo en print doen in principe hetzelfde.
[/edit]
 
Laatst bewerkt:
PHP:
<?php
$nr = mt_rand(1, 50);
for ($a=1; $a<=25; $a++)
{
	echo $nr[$a]."<br>\n";
}
?>

Waarom je niks ziet, is omdat je $nr[$a] doet, dat betekend dat je de variabele $nr aanspreekt als een array... het is echter gewoon een INT, dus al zijn keys zijn leeg.

Je kunt dit soort dingen heel makkelijk vinden door error reporting aan te zetten:
http://nl3.php.net/manual/en/function.error-reporting.php

Bovenaan elk script zet je:
PHP:
error_reporting( E_ALL );

En dan zie je vaak precies wat je fout doet :)
 
mt_rand

hallo frats & tha devil,

ten eerste bedankt voor jullie tijd en moeite.

ten tweede: kan ik die error reporting er gewoon bijplakken zoals hier:
PHP:
<?php
error_reporting( E_ALL );
$nr = mt_rand(1, 50);
for ($a=1; $a<=25; $a++)

{
	echo $nr."<br>\n";
}
?>
of moet dat apart?

hoe dan ook, ik heb de [$a] gedeleted (zie boven) en krijg nu inderdaad 25 getallen. alleen wel allemaal dezelfde getallen. dat is ook niet helemaal de bedoeling. hoe maak ik dat ding wijs dat het 25 verschillende moeten zijn? dat had ik m toch gezegd met mt_rand en dan $a<=25? of zit ik er helemaal naast te klunen?

Jeel2008
 
Laatst bewerkt door een moderator:
Je kunt dat er gewoon bij zetten, dat zou moeten werken :)

De reden dat alle getallen hetzelfde zijn, is omdat je een willekeurig getal neemt, en daarna het getal gaat printen.

Wat je wilt, is iedere keer voor het printen een willekeurig getal nemen en dat printen... ofwel, je moet, zoals Tha Devil al zij, de mt_rand() in de loop zetten; zodat hij iedere keer een nieuw getal neemt.
 
mt_rand

hmm, echt ingewikkeld; wat mij betreft zijn jullie een soort buitenaardse wezens...:p

ik heb nu dit:

<?php
error_reporting( E_ALL );

for ($a=1; $a<=25; $a++);
$nr = mt_rand(1, 50);

{
echo $nr."<br>\n";
}
?>

maar krijg dan een foutmelding
hij staat nu toch IN de loop?
 
Nope.

Je loop zijn alle statements die komen na for ()

In jouw geval staat daar maar een statement, namelijk ;
Dat betekend voor de berekening simpelweg 'doe niets'.

Vervolgens kies je daarna 1x een random getal, en daarna open je een statement blok waarin je 1 echo doet.

Wat je moet doen is direct na for() al een blok openen, en daarin zowel de random keuze als de output zetten.

Dan komt het er zo uit te zien:

PHP:
for ($a=1; $a<=25; $a++) {
  $nr = mt_rand(1, 50);
  echo $nr."<br>\n";
}

Als je dit niet begrijpt is het belangrijk dat je het niet zomaar overneemt, maar dat aangeeft, zodat we het beter uit kunnen leggen ;) Het idee is dat je het snapt, niet dat je het kunt kopieren, dat is niet zo moeilijk maar daar heb je ook niks aan.
 
php

hallo frats,

wat betreft:

'ls je dit niet begrijpt is het belangrijk dat je het niet zomaar overneemt, maar dat aangeeft, zodat we het beter uit kunnen leggen Het idee is dat je het snapt, niet dat je het kunt kopieren, dat is niet zo moeilijk maar daar heb je ook niks aan. '

heb je helemaal gelijk.

ik wil het ook leren, begrijpen, aan papegaaien heb ik niks.
daarom ga ik het even goed bekijken, als ik er niet uitkom schrijf ik weer. voor deze maal bedankt. vraag 2 kom ik sowieso nog op terug, want ik weet niet hoe je aangeeft dat iets deelbaar moet zijn door een getal.

groeten jeel2008
 
Laatst bewerkt:
vraag 2, restwaarde

hallo frats, tha devil
ik heb vraag 2 'even' bekeken en kom tot dit:

<?php

$a = 1;
$a <=100;
$a++;

$b = 3;

$c =$a/$b;

if ($a%$b=0)

{
echo $c."<br>\n";
}


?>



het geheel uitdenken lukt nog wel enigszins, hoewel ik regelmatig uit de bocht vlieg.
het is meer de Syntaxis van PHP:
hoe schrijf je op wat je wilt bereiken, maw hoe vertaal je het in php.

trouwens, bovenstaande 'oplossing' leidt tot niets op de server. (behalve de melding:
Warning: Division by zero in C:\wamp\www\oefen2.php on line 34)

bij andere oplossingen kreeg ik dit:
Parse error: syntax error, unexpected ')', expecting ';' in C:\wamp\www\oefen2.php on line 34 (zie je: hij zegt het zelf al: syntax error)
 
Dit is een veelgemaakte beginnersfout :)

Wat jij hebt wordt gelezen als
PHP:
if ( ( $a % ( $b = 0 ) ))
betekend als je het uitschrijft:

1: $b = 0
2: $return = $a % $b
3: if ( $return )

De fout is dus dat hij nu $a % $b doet waarbij $b 0 is; en dus krijg je een division by zero, want je mag niet delen op 0.

Wat je bedoelt is waarschijnlijk:
if ( $a % $b == 0 ) {}

Daarbij vergelijk je de uitkomst van $a % $b met 0, ipv dat je de 0 in $b stopt.


Daarnaast heb je nu:

$a = 1;
$a <=100;
$a++;

Moet dat geen for loop zijn? Want zoals het er nu staat komt er gewoon $a = 2 uit, meer niet ;)
 
vraag 2, restwaarde

tjoew, moet ik weer ff bekijken hoor. wederom bedankt, kom ik nog op terug.
 
vraag 2

hallo frats, tha devil,

<?php

$b = 3;

$c = $a/$b;

$a%$b == 0;

for ($a=1;$a<=100;$a++)


{
echo $c."<br>\n";
}

?>

dit werd niks. letterlijk niks: alleen maar nullen als antwoord.

dit gaf een foutmelding in de regel while ($a<=100;$a%$b==0;a++)
mag ik deze conditie: $a%$b==0
daar niet plaatsen?

<?php

$a=1;
$b=3;

while ($a<=100;$a%$b==0;a++)
{
echo $c."<br>\n";
}


?>
 
Jeel2008, zou je in het vervolg php tags om je code willen zetten? Dan is het wat leesbaarder :)

Gewoon [ php ] aan het begin en [ /php ] aan het eind, zonder spaties.

Ik begrijp niet helemaal wat je in het eerste wat je schrijft probeert te bereiken, maar wat er bij de tweede mis gaat is dat je een for-syntax ( $i = 0 ; $i < 10 ; $i++ ) gebruikt, terwijl je een while () loop hebt, die accepteert maar 1 expressie en gaat door tot die expressie false oplevert.

Wat helpt is als je het programma met de hand helemaal doorloopt, dan krijg je een beetje een gevoel van wat er gebeurd.
Probeer het maar eens met het eerste programmatje:

1: b wordt 3
2: c wordt a gedeeld door b ( a bestaat niet, dus is 0 )
3: bereken of a modulo b 0 is, doe niets met het antwoord (wordt niet opgeslagen )
4: voor alle a van 1 tot 100: print c ( c = a gedeeld door b, met a = 0 en b = 3, dus c = 0 )

Als je er op die manier zelf doorheen loopt, leer je een boel over de 'control flow' van je programma; ofwel welke dingen hij doet en wanneer hij ze doet :)
 
Laatst bewerkt:
hallo frats,

ok, dus niet
<?php
?>

om de code heen zetten in de voorbeelden, maar

[ php ] [ /php ]

is dat wat je bedoelt?
 
Jep, als je dat doet (zonder de spaties in [ php ] en [ /php ] dus ) dan wordt het opgemaakt als een blok PHP code :)

Dat leest wat makkelijker.
 
gedeeld door 3

hallo frats, the devil,

volgens mij is het gelukt

PHP:
$b=3;
for ($a=1;$a<=100;$a++)
if ( $a % $b == 0 ) 


{
	echo $a."<br>\n";
}

ik wist niet dat je for en if gewoon achter elkaar kon gebruiken
 
sterretje

oh nee, wacht ff

de vraag was

Schrijf een script dat de getallen 1 t/m 100 afdrukt en een sterretje plaatst bij elk getal dat deelbaar is door 5.

maar het idee is er...

-----------
even later:

PHP:
<?php

$b=5;
for ($a=1;$a<=100;$a++)


{
	echo $a."<br>\n";
}

if ( $a%$b == 0 ) 

{
	echo "*".$a."<br>\n";
	}

?>

helaas, dit werkt niet. hij geeft wel keurig de getallen 1tm100 maar geen sterretjes
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan