Springen naar inhoud

Php/html praktische opdracht, scriptje schrijven


  • Log in om te kunnen reageren

#1

Informaticavw6

    Informaticavw6


  • 0 - 25 berichten
  • 3 berichten
  • Gebruiker

Geplaatst op 18 januari 2011 - 21:03

Hallo,

volgende week staat mij een Praktische Opdracht te wachten voor het vak Informatica.
Het onderwerp is PHP en HTML, volgens het boek Enigma.
Tijdens het examen moeten we een aantal programma's schrijven aan de computer. Het examen duurt 1 uur en we krijgen de beschikking over een overzicht van PHP en HTML codes.
Als voorbereiding hebben we soortgelijke opdrachten meegekregen waar we een code bij moeten schrijven, wegens het feit dat ik veel moeite heb met dit onderwerp vroeg ik me af of iemand handig is met PHP/HTML en mij kan/wil helpen met het begrijpen van deze scripts.

Opdracht;
Maak een script dat de eerste 1000 getallen van de rij van Fibonacci onder elkaar zet.

(De rij van Fibonacci is genoemd naar Leonardo van Pisa, bijgenaamd Fibonacci, die de rij noemt in zijn boer Liber abaci. In woorden is elk element van de rij steeds de som van de twee voorgaande elementen, beginnend met 0 en 1. De eerste elementen van de rij zijn dan als volgt:
0,1,1,2,3,5,8,13,21,34,55 etc..

Sla het script op als een php bestand

Wie kan hierbij een script schrijven met PHP/HTML code en kan mij hierbij een toelichting geven?
Mvg en bij voorbaat dank,
VWO6 leerling

Dit forum kan gratis blijven vanwege banners als deze. Door te registeren zal de onderstaande banner overigens verdwijnen.

#2

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 18 januari 2011 - 21:29

PHP codes kan ik je niet geven. Die zou je zelf moeten kunnen vinden. Als je zo'n opdracht krijgt denk ik dat je de basis welk gezien hebt.

Het moeilijkste is meestal bedenken hoe je de code gaat schrijven.

Er staat hier dat je 1000 getallen moet printen. Dan zou je al direct moeten denken aan een loop-constructie.

Om een fibonacci-getal te berekenen heb je de 2 vorige nodig.

Je hebt dus 2 variabelen nodig die de 2 laatst berekende waardes bevatten.
Noem deze bijvoorbeeld fib1 en fib2.

Het programma begint met deze te initialiseren:
fib1 = 0 en fib2 = 1.

Je hebt er al 2 van de 1000 die je moet hebben, nu moet je dus een loop schrijven die de volgende 998 berekent.

Dat gebeurt heel eenvoudig:

fib3 = fib1 + fib2

Nu moet je ook nog zien dat die waardes netjes opschuiven zodat je in de volgende stap van je loop verder kan.
fib1 is de laatst berekende waarde en die heb je niet meer nodig.

fib1 = fib2
fib2 = fib3

En nu kan je loop weer verder.

Begrijp je hoe dit werkt?

#3

Informaticavw6

    Informaticavw6


  • 0 - 25 berichten
  • 3 berichten
  • Gebruiker

Geplaatst op 19 januari 2011 - 14:22

Ten eerste Harstikke bedankt voor je nuttige antwoord.
Ik (her)ken de loop-constructie inderdaad, de php codes krijgen wij er ook bij tijdens het examen (gelukkig)
Helaas zou ik hierbij nog steeds geen juist script kunnen schrijven, ik zal een poging wagen;

<?php

$fib1 = 0;
$fib2 = 1;

for($i=0;$i<1000;$i++);{

print("<br>");

}
?>

je ziet dat ik hierbij nog niks gedaan heb met de formule die bij de Fibonaccireeks hoort, dit komt omdat ik eerlijk gezegd geen idee heb hoe ik dit zou moeten doen. Ik begrijp het idee achter de reeks wel maar hoe ik dit zou moeten schrijven in php codes, geen idee. Er komt verder ook niks uit dus je zult begrijpen dat ik nog echt een groentje ben wat betreft PHP:P
Ik hoop dat iemand me hier nog verder mee kan helpen, alvast bedankt!

Mvg informaticavw6

#4

Rogier

    Rogier


  • >5k berichten
  • 5679 berichten
  • VIP

Geplaatst op 19 januari 2011 - 14:40

Je hebt de eerste twee Fibonacci-getallen in de variabelen $fib1 en $fib2 gestopt. Dat is goed. Kun je nu ook binnen je loop ťťn van deze twee printen?

Doordat je verder nog niks met een formule doet zal je dan 1000 keer hetzelfde getal krijgen, maar dat geeft niet, dat wordt dan de volgende stap.

Om het overzichtelijk te houden zou ik trouwens even testen met 10 in plaats van 1000, en uiteindelijk als alles werkt zet je het weer terug naar 1000.
In theory, there's no difference between theory and practice. In practice, there is.

#5

In physics I trust

    In physics I trust


  • >5k berichten
  • 7384 berichten
  • Moderator

Geplaatst op 19 januari 2011 - 14:42

<?php
Verborgen inhoud
$fib1 = 0;
print("<br>");
$fib2 = 1;
print("<br>");


for($i=0;$i<1000;$i++){ \\ hier moet geen puntkomma staan, je beŽindigt geen opdracht
Verborgen inhoud

$fib1=$fib1+$fib2;

Verborgen inhoud

echo $fib1;
print("<br>");


Verborgen inhoud

$fib1=$fib1+$fib2;
$fib2=$fib1-$fib2;
$fib1=$fib1-$fib2;


}
?>

Dit is het efficiŽnste script (omdat je slechts 2 variabelen gebruikt en geen 3).

Nu verwacht ik dat je elke stap hierboven verklaart, zodat ik kan zien of je het begrepen hebt.

Doe je dat even?
"C++ : Where friends have access to your private members." — Gavin Russell Baker.

#6

Rogier

    Rogier


  • >5k berichten
  • 5679 berichten
  • VIP

Geplaatst op 19 januari 2011 - 16:18

Dit is het efficiŽnste script (omdat je slechts 2 variabelen gebruikt en geen 3).

Op dat niveau gaan optimaliseren* is overigens een slecht idee voor beginners, die maken het zich daarmee gegarandeerd moeilijker ;)

(* waarbij het in dit geval zelfs nog de vraag is of het efficienter is: 2 variabelen die je vaker achter elkaar overschrijft kan -afhankelijk van de CPU waarop het runt- i.v.m. pipelining en register caching zelfs trager zijn dan die met 3, plus dat je hier meer bewerkingen voor nodig hebt dan simpelweg tmp=fib1; fib1=fib2; fib2+=tmp; )
In theory, there's no difference between theory and practice. In practice, there is.

#7

Informaticavw6

    Informaticavw6


  • 0 - 25 berichten
  • 3 berichten
  • Gebruiker

Geplaatst op 19 januari 2011 - 16:35

Bedankt voor jullie reacties,
ik ben het geheel eens met Rogier; het hoeft van mij niet efficiŽnt, zolang het maar begrijpelijk is.
In hapklare brokken dus:P
wat betreft de code van 'In fysics i trust':

$fib1 = 0;
print("<br>");
$fib2 = 1;
print("<br>");

\\Waarvoor dient die print("<br>"); na beide variabelen?
ik weet dat hetgeen wat na print komt op het scherm verschijnt en dat <br> een enter/volgende regel betekent.
Maar beide variabelen verschijnen toch niet in beeld dus wat heeft dat verder voor effect?

for($i=0;$i<1000;$i++){

\\Dit stuk begrijp ik (volgens mij) wel, for geeft de voorwaarde aan, in dit geval dus: indien er geen waarde wordt ingevoerd (kan ook niet, aangezien er verder geen handeling wordt gedaan door degene die de php uitvoert) en het aantal gegevens kleiner is dan 1000 (het aantal dat moet worden weergeven volgens de opdracht) zal er telkens 1 getal bij worden geschreven totdat de 1000 wordt bereikt.

$fib1=$fib1+$fib2;

\\Dit wil naar mijn weten zeggen dat variabele $fib1 een nieuwe waarde aanneemt, namelijk de som van 2 eerder gegeven variabelen $fib1 en $fib2 (0 en 1)

echo $fib1;
print("<br>");

\\ ik ben niet bekend met de term echo, al verwacht ik dat dit wil zeggen dat het de nieuwe variabele plaatst en dit herhaalt, print("<br>"); wil dan simpelweg zeggen dat het telkens een volgende regel begint nadat het getal is geplaatst


$fib1=$fib1+$fib2;
$fib2=$fib1-$fib2;
$fib1=$fib1-$fib2;

\\ dit is redelijk onduidelijk voor mij

ik hoop nog meer nuttige reacties te kunnen ontvangen!
Mvg informaticavw6

#8

In physics I trust

    In physics I trust


  • >5k berichten
  • 7384 berichten
  • Moderator

Geplaatst op 19 januari 2011 - 17:08

\\Waarvoor dient die print("<br>"); na beide variabelen?
ik weet dat hetgeen wat na print komt op het scherm verschijnt en dat <br> een enter/volgende regel betekent.
Maar beide variabelen verschijnen toch niet in beeld dus wat heeft dat verder voor effect?


br is de html-tag die zorgt voor een nieuwe lijn, in php zelf kan je eenvoudig "\n" gebruiken. Het zorgt er dus eenvoudig voor dat al je getallen niet aaneen worden geplakt: 0112358...

or($i=0;$i<1000;$i++){

\\Dit stuk begrijp ik (volgens mij) wel, for geeft de voorwaarde aan, in dit geval dus: indien er geen waarde wordt ingevoerd (kan ook niet, aangezien er verder geen handeling wordt gedaan door degene die de php uitvoert) en het aantal gegevens kleiner is dan 1000 (het aantal dat moet worden weergeven volgens de opdracht) zal er telkens 1 getal bij worden geschreven totdat de 1000 wordt bereikt.


De i is de variabele die telt en bij elke lusuitvoering eentje wordt verhoogd. Je wil dus 1000 elementen afprinten, dus die i laten we tellen tot 1000, de voorwaarde die wordt gecontroleerd is of deze variabele kleiner is dan 1000, zolang dat het geval is, wordt de lus uitgevoerd (en dus een volgend fib-getal berekend en getoond).

$fib1=$fib1+$fib2;

\\Dit wil naar mijn weten zeggen dat variabele $fib1 een nieuwe waarde aanneemt, namelijk de som van 2 eerder gegeven variabelen $fib1 en $fib2 (0 en 1)

Klopt. En die nieuwe waarde is de som van de twee vorige zoals je opdracht eist.

echo $fib1;
print("<br>");

\\ ik ben niet bekend met de term echo, al verwacht ik dat dit wil zeggen dat het de nieuwe variabele plaatst en dit herhaalt, print("<br>"); wil dan simpelweg zeggen dat het telkens een volgende regel begint nadat het getal is geplaatst

echo is een php-commando dat iets plaatst in het html document. Deze echo kan zowel tekst, variabelen of html doorsturen. De lijn laat dus de waarde van de variabele neerschrijven in je browservenster.


$fib1=$fib1+$fib2;
$fib2=$fib1-$fib2;
$fib1=$fib1-$fib2;


Wisselt fib1 en fib2 van waarde (ga na met een voorbeeldje), zodat fib1 en fib 2 opnieuw opeenvolgende getallen uit de serie voorstellen en dus klaar zijn om eventuee de lus opnieuw te doorlopen en een volgende waarde te berekenen en te printen.



@Rogier: Daar was ik niet van op de hoogte, maar het aantal bewerkingen is toch niet groter? Ik ben wel geÔnteresseerd in het mechanisme hierachter, dus als je een goede link/extra info erover hebt, is die welkom ;)
"C++ : Where friends have access to your private members." — Gavin Russell Baker.

#9

Xenion

    Xenion


  • >1k berichten
  • 2606 berichten
  • Moderator

Geplaatst op 19 januari 2011 - 17:16

\\Waarvoor dient die print("<br>"); na beide variabelen?

\\ ik ben niet bekend met de term echo, al verwacht ik dat dit wil zeggen dat het de nieuwe variabele plaatst en dit herhaalt, print("<br>"); wil dan simpelweg zeggen dat het telkens een volgende regel begint nadat het getal is geplaatst

$fib1=$fib1+$fib2;
$fib2=$fib1-$fib2;
$fib1=$fib1-$fib2;

\\ dit is redelijk onduidelijk voor mij


Ik stel voor dat je eerst eens rustig de basis van php bekijkt. Schrijf eens een aantal simpele scriptjes. Begin eens met een "Hello World" script, maak dan eens een loopje dat de getallen van 1 tot 10 toont, etc...

Als je die elementaire zaken nog niet goed snapt, dan kan je geen ingewikkeldere functies schrijven.

In mijn eerste post geef ik aan hoe de code er structureel moet uitzien.

Dat laatste stukje is een variant die hetzelfde doet door maar 2 variabelen te gebruiken ipv 3. Zoals Rogier aangeeft is dit niet per se performanter, aangezien je ook veel meer bewerkingen doet.

@Rogier: Daar was ik niet van op de hoogte, maar het aantal bewerkingen is toch niet groter? Ik ben wel geÔnteresseerd in het mechanisme hierachter, dus als je een goede link/extra info erover hebt, is die welkom ;)


$fib1=$fib1+$fib2;
$fib2=$fib1-$fib2;
$fib1=$fib1-$fib2;

Dat zijn 3 optelbewerkingen.


$fib3=$fib1+$fib2;
$fib1=$fib2;
$fib2=$fib3;

Dit is slechts 1 optelling.

Als je volgend jaar EIT kiest, dan krijg je een cursus Computersystemen. Daar zie je wat High Level instructies op machine-niveau doen.

#10

In physics I trust

    In physics I trust


  • >5k berichten
  • 7384 berichten
  • Moderator

Geplaatst op 19 januari 2011 - 17:34

$fib1=$fib1+$fib2;
$fib2=$fib1-$fib2;
$fib1=$fib1-$fib2;

Dat zijn 3 optelbewerkingen.


$fib3=$fib1+$fib2;
$fib1=$fib2;
$fib2=$fib3;

Dit is slechts 1 optelling.

Als je volgend jaar EIT kiest, dan krijg je een cursus Computersystemen. Daar zie je wat High Level instructies op machine-niveau doen.


Dank je, nu zie ik het ook ;) Daar had ik zo nog niet aan gedacht.
"C++ : Where friends have access to your private members." — Gavin Russell Baker.





0 gebruiker(s) lezen dit onderwerp

0 leden, 0 bezoekers, 0 anonieme gebruikers

Ook adverteren op onze website? Lees hier meer!

Gesponsorde vacatures

Vacatures