[php] ABC formule

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

Onderwerpen


  • Gromba
  • Registratie: Mei 2003
  • Laatst online: 11-09 22:29

Gromba

Tijdreiziger @ 1sec/sec

Topicstarter
Ik heb geen (lees: weinig) ervaring met PHP tot nu toe, maar ik heb wel een script kunnen maken:

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
29
30
31
<?PHP

//symmetrieas berekenen

$a = $_GET['a'];
$b = $_GET['b'];
$c = $_GET['c'];

$x = -1;
$b1 = $x * $b;
$a1 = 2 * $a;

$antwoord = $b1 / $a1;

// nulpunten berekenen

$b_macht = pow($b,2);
$a_4     = 4*$a*$c;
$a_2     = 2*$a;

$bof = $b_macht - $a_4;
$boven = sqrt($bof);
$onder = $a_2;
$antwoord2 = $boven / $onder;

$nulpunt1 = $antwoord - $antwoord2;
$nulpunt2 = $antwoord + $antwoord2;

echo "Nulpunt1: $nulpunt1 Nulpunt2: $nulpunt2 Symmetrieas: $antwoord";

?>


De script werkt perfect, alleen er zit 1 nadeel in. Wanneer je getallen invult zodat het niet precies uitkomt, krijg je ongeveer 10 getallen achter te komma.

Weet iemand hier een oplossing voor? Zo ja, wil iemand het me dan duidelijk (voor mij begrijpbaar) uitleggen?


Oja, en misschien meteen ook hoe ik via een formulier kan laten invullen, in plaats van ?a=1&b=2 etc.

[ Voor 4% gewijzigd door Gromba op 11-12-2003 22:08 ]

Gromba.nl


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18-09 17:06

gorgi_19

Kruimeltjes zijn weer op :9

De script werkt perfect, alleen er zit 1 groot nadeel in. Wanneer je getallen invult zodat het niet precies uitkomt, krijg je ongeveer 10 getallen achter te komma.
Afronden; (ROUND-functie); alleen waarom zou je willen afronden? Zorgt er alleen maar voor dat je formule niet meer klopt.
Oja, en misschien meteen ook hoe ik via een formulier kan laten invullen, in plaats van ?a=1&b=2 etc.
Ipv $_GET te gebruiken, moet je $_POST gebruiken. Dan kan je via POST een formulier submitten.

[ Voor 27% gewijzigd door gorgi_19 op 11-12-2003 22:09 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • BobDay
  • Registratie: December 2001
  • Laatst online: 11-08 21:02
Ook zou ik een check inbouwen om te kijken of de discriminant niet negatief is en anders evt een complexe oplossing berekenen

[ Voor 3% gewijzigd door BobDay op 12-12-2003 17:22 ]

43% of all statistics are worthless


  • Gromba
  • Registratie: Mei 2003
  • Laatst online: 11-09 22:29

Gromba

Tijdreiziger @ 1sec/sec

Topicstarter
Bedankt!! _/-\o_ , ik kan weer verder "klooien" :+

Gromba.nl


  • Gromba
  • Registratie: Mei 2003
  • Laatst online: 11-09 22:29

Gromba

Tijdreiziger @ 1sec/sec

Topicstarter
Voor de mensen die hem nog willen zien http://213.73.175.36/GEBLAAT/form.html


Request: Slotje :Y)

Gromba.nl


  • Macros
  • Registratie: Februari 2000
  • Laatst online: 15-05 16:29

Macros

I'm watching...

Zorg dat je nooit door 0 deelt.

"Beauty is the ultimate defence against complexity." David Gelernter


  • jvdmeer
  • Registratie: April 2000
  • Nu online
Warning: Division by zero in C:\Program Files\Apache Group\Apache2\htdocs\GEBLAAT\abc_formule.php on line 13

Warning: Division by zero in C:\Program Files\Apache Group\Apache2\htdocs\GEBLAAT\abc_formule.php on line 24
Nulpunt1: 0 Nulpunt2: 0 Symmetrieas:
Ik zou toch controleren of A <> 0.

  • Dala
  • Registratie: November 2000
  • Laatst online: 15-09 20:39
Nulpunt1: -1.#IND Nulpunt2: -1.#IND Symmetrieas: -0.376404494382
.... hoge getalen vind ie ook niet tof :D

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

kortom, je moet de input nog checken op geldigheid ;)

never trust (user)input ;)

[ Voor 23% gewijzigd door Erkens op 11-12-2003 23:05 ]


  • Suepahfly
  • Registratie: Juni 2001
  • Laatst online: 17-09 17:05
Leuk script, ik zou allen nog even kijken naar de bcmath functies in php (berekenen van precieze getallen) als verder wilt gaan met berekeningsscripts in php.

Acties:
  • 0 Henk 'm!

  • Gromba
  • Registratie: Mei 2003
  • Laatst online: 11-09 22:29

Gromba

Tijdreiziger @ 1sec/sec

Topicstarter
Zorg dat je nooit door 0 deelt.
Als je 0 hebt, heb je geen formule! :+

Gromba.nl


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

PeterBroere schreef op 12 december 2003 @ 06:45:
[...]


Als je 0 hebt, heb je geen formule! :+
daarom moet je dat er ook uitfilteren en een melding geven hiervan ;)

Acties:
  • 0 Henk 'm!

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 15-05 16:29

Macros

I'm watching...

Als a 0 is heb je een lineare formule. Ik vind dat je die dan ook gewoom moet oplossen.

"Beauty is the ultimate defence against complexity." David Gelernter


Acties:
  • 0 Henk 'm!

  • WimB
  • Registratie: Juli 2001
  • Laatst online: 30-03-2024
Als ik 6, 6 en 6 invul krijg ik:
Nulpunt1: -1.#IND Nulpunt2: -1.#IND Symmetrieas: -0.5
Vanwaar komt die #IND?

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Leukste zou natuurlijk zijn als je in een tekstveld een functie in kan vullen, en dat het script ff die formule parsed.

Misschien een beetje over-the-top, maar wel leuk :) Uiteraard zou ie alle soorten functies moeten aan kunnen...

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

  • Gromba
  • Registratie: Mei 2003
  • Laatst online: 11-09 22:29

Gromba

Tijdreiziger @ 1sec/sec

Topicstarter
Als ik 6, 6 en 6 invul krijg ik:
quote: Nulpunt1: -1.#IND Nulpunt2: -1.#IND Symmetrieas: -0.5
Vanwaar komt die #IND?
Geen idee, iemand een idee? :'(

Gromba.nl


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 18-09 16:51
Is dat wel geldige data voor een ABC formule?

Acties:
  • 0 Henk 'm!

  • Gromba
  • Registratie: Mei 2003
  • Laatst online: 11-09 22:29

Gromba

Tijdreiziger @ 1sec/sec

Topicstarter
Ik heb het al opgelost,

PHP:
1
2
3
4
if ($D < "0" ) {
print ("Je formule heeft geen 0 punten!" );
}
else {


Je kan namelijk geen worteltrekken met - getallen!
Typ maar eens in je rekenmachine in: √-1
Krijg je een error :+

Gromba.nl


Acties:
  • 0 Henk 'm!

  • Suepahfly
  • Registratie: Juni 2001
  • Laatst online: 17-09 17:05
PeterBroere schreef op 12 december 2003 @ 17:18:
[...]


Geen idee, iemand een idee? :'(
Dat komt omdat de discriminant minder als 0 is. Dat komt er teministe hier uit. (ben niet zo'n wiskunde held]

offtopic:
beveiliging van je webserver al aan gescherpt?

Acties:
  • 0 Henk 'm!

  • Gromba
  • Registratie: Mei 2003
  • Laatst online: 11-09 22:29

Gromba

Tijdreiziger @ 1sec/sec

Topicstarter
Dat komt omdat de discriminant minder als 0 is. Dat komt er teministe hier uit. (ben niet zo'n wiskunde held]


offtopic:
beveiliging van je webserver al aan gescherpt?
Jip, bedankt, opgelost!

Beveiliging? Dacht dat het best veilig was :)

PHP:
1
2
3
4
5
6
//bij liniair verband

if ($a == "0" ) {
print ("Je lijn is liniair, hij loopt op $antwoord" );
}
else {


Klein editje! :)

Gromba.nl


Acties:
  • 0 Henk 'm!

Verwijderd

PeterBroere schreef op 12 december 2003 @ 17:23:
[...]
Je kan namelijk geen worteltrekken met - getallen!
Typ maar eens in je rekenmachine in: √-1
Krijg je een error :+
Gelukkig hebben we de complexe getallen nog

Acties:
  • 0 Henk 'm!

Verwijderd

PeterBroere schreef op 12 december 2003 @ 17:23:
Ik heb het al opgelost,

PHP:
1
2
3
4
if ($D < "0" ) {
print ("Je formule heeft geen 0 punten!" );
}
else {


Je kan namelijk geen worteltrekken met - getallen!
Typ maar eens in je rekenmachine in: √-1
Krijg je een error :+
Wat d8 je can imaginaire getallen, als je een goeie rekenmachine hebt dan krijg je geen error maar een melding dat je een complex getal krijgt ;)

edit:

shit te laat

[ Voor 7% gewijzigd door Verwijderd op 12-12-2003 17:36 ]


Acties:
  • 0 Henk 'm!

  • eamelink
  • Registratie: Juni 2001
  • Niet online

eamelink

Droptikkels

Dat is ook wel interessante optie voor je scriptje, als de discriminant < 0 is, dan neem je de absolute waarde, berekent de uitkomst, en zet je gewoon 'i' erachter.

Misschien wel handig dan om ook er duidelijk bij te zetten dat dat een complex antwoord is :)

Acties:
  • 0 Henk 'm!

  • Gromba
  • Registratie: Mei 2003
  • Laatst online: 11-09 22:29

Gromba

Tijdreiziger @ 1sec/sec

Topicstarter
Kort vraagje:
Hoe doe ik een "enter" in de echo?

<BR> ;)

[ Voor 23% gewijzigd door Gromba op 12-12-2003 18:15 ]

Gromba.nl


Acties:
  • 0 Henk 'm!

Verwijderd

of \n natuurlijk

Acties:
  • 0 Henk 'm!

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 15-05 16:29

Macros

I'm watching...

PeterBroere schreef op 12 december 2003 @ 17:30:
PHP:
1
2
3
4
5
6
//bij liniair verband

if ($a == "0" ) {
print ("Je lijn is liniair, hij loopt op $antwoord" );
}
else {


Klein editje! :)
Je antwoord is fout man. Je geeft waar x=0 maar niet waar y=0. x=0 is triviaal natuurlijk.

"Beauty is the ultimate defence against complexity." David Gelernter


Acties:
  • 0 Henk 'm!

  • mabarto
  • Registratie: Februari 2001
  • Laatst online: 06-02 12:37
bugreport:

vul bij a "0-5" in.

[mierenneukerij]
bij 0.1 en 0.2 is het "berekent"
[/mierenneukerij]

[ Voor 59% gewijzigd door mabarto op 12-12-2003 19:42 ]


Acties:
  • 0 Henk 'm!

  • MisterData
  • Registratie: September 2001
  • Laatst online: 29-08 20:29
Wat wij bij wiskunde (VWO-4) doen als een getal een hoop cijfers achter de komma heeft, is de breuk met de wortel D laten staan, dus:
code:
1
2
3
4
5
6
7
8
9
10
       -b + sqrt(D)
x =  ------------------
                2a


of

       -b - sqrt(D)
x =  ------------------
                2a


Als je die er even onder zet bij een lang getal, dan kan de gebruiker (als ie dat wil) eventueel met hogere precisie werken :)

Acties:
  • 0 Henk 'm!

  • WimB
  • Registratie: Juli 2001
  • Laatst online: 30-03-2024
Je moet nog een controle op de invoer doen met isnumeric. Want als ik jan, piet en flup als waarden ingeef, krijg ik een lelijke error.

Acties:
  • 0 Henk 'm!

  • Suepahfly
  • Registratie: Juni 2001
  • Laatst online: 17-09 17:05
WimB schreef op 13 december 2003 @ 15:35:
Je moet nog een controle op de invoer doen met isnumeric. Want als ik jan, piet en flup als waarden ingeef, krijg ik een lelijke error.
[zeurpiet-modus]
het moet `is_numeric` zijn met een underscore
[/zeurppiet-modus]

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
PeterBroere schreef op 12 december 2003 @ 17:23:
Ik heb het al opgelost,

PHP:
1
2
3
4
if ($D < "0" ) {
print ("Je formule heeft geen 0 punten!" );
}
else {


Je kan namelijk geen worteltrekken met - getallen!
Typ maar eens in je rekenmachine in: √-1
Krijg je een error :+
Mijn rekenmachine zegt dan:
Afbeeldingslocatie: http://www.pandemic.nl/~greyfox/sqrt-1.jpg

[ Voor 11% gewijzigd door Grijze Vos op 13-12-2003 17:16 ]

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info


Acties:
  • 0 Henk 'm!

Verwijderd

d

[ Voor 100% gewijzigd door Verwijderd op 12-02-2004 17:20 ]


Acties:
  • 0 Henk 'm!

  • Dala
  • Registratie: November 2000
  • Laatst online: 15-09 20:39
PeterBroere schreef op 12 december 2003 @ 17:18:
[...]


Geen idee, iemand een idee? :'(
die -1.#IND ... heeft dat er niet mee te maken, dat php het niet ziet als een 1, maar als een 1 met heeel veel nullen, en vandaar de #IND ... dus oneindig veel nullen.

Ti heeft dat intern ook, maar zegt gewoon, meer als 10(ofzo) nullen = 0.
dus misschien het reële getal begrenzen op aantal tekens achter de comma, want meer als 10 tekens boeit toch niet echt veel mensen.

Acties:
  • 0 Henk 'm!

  • Grijze Vos
  • Registratie: December 2002
  • Laatst online: 28-02 22:17
Je verhaal klopt niet precies, Dala. Elke rekendoos (dus ook een PC), heeft gewoon een bepaalde floating point nauwkeurigheid hardwarematig ingebakken. De Ti-83, plus, en silver edition, en ook nog een flink aantal andere Ti-calculatoren, hebben een representatie voor floats, in 9 bytes. De OP-register (interne geheugenplekken) zijn 11 bytes groot, voor wat extra precisie.

Van die 9 bytes, is er 1 bezet voor het weergeven of het om een complex of reeel getal gaat, of andere zaken, dit is puur voor de interne administratie. (een complex getal neemt overigens 2*9 bytes in beslag). Het tweede byte geeft de exponent aan, van het getal. Inclusief of dit een positieve of negatieve exponent is. De overige getallen staan voor de cijfers in het getal. Overigens wordt het gewoon decimaal opgeslagen, niet hexadecimaal.

Een rekenmachine zal in wezen nooit zeggen 10,0000000000000001 is gelijk aan 10, je moet het eerder interpreteren als "geachte gebruiker, met mijn maximale precisie, kan ik je zeggen, dat dit getal 10,0000000000 is".

Hoop dat dit wat duidelijkheid schept :) Verder is het wel hopeloos offtopic.

-----
Oh, en die error heeft absoluut niets te maken met afronding, maar gewoon met het onvermogen van php om met complexe getallen om te gaan.

Op zoek naar een nieuwe collega, .NET webdev, voornamelijk productontwikkeling. DM voor meer info

Pagina: 1