Kodune ülesanne

By Ivari at 20.02.2010

Proovige lahedada ülesanne kiirenduse valemis puuduvate väärtuste leidmise kohta:

http://study.risk.ee/prog/ylesanded/kiirendus/

Ülesande teeb keerulisemaks see, et lubatakse sisestada kolm muutujat neljast: a, v, v0 või t ning puuduv tuleb välja arvutada. Muutujad sisestatakse jällegi aadressiribalt.

Ilmselt koosneb kogu PHP kood sektsioonidest, millest igaüks tegeleb ühe konkreetse variandi väljaarvutamisega. Kõigi juhtude jaoks tuleb koostada vastavad valemid, mida koodis kasutada (ehk siis avaldada kiirenduse valemist parasjagu tundmatuna esinev komponent).

Kui muutujat ei ole aadressiribal olemas, siis tuleks käivitada see osa koodist, mis tegeleks just antud juhule vastava võrrandi lahendamisega. Lisaks tuleks enne lahendamist kontrollida, kas kõik ülejäänud muutujad on ikkagi sisestatud või mitte ning on numbrilisel kujul. Numbrilise kuju kontrollimiseks saab kasutada funktsiooni is_numeric(). Viimane väljastab TRUE, kui muutuja on numbriline, vastasel korral FALSE. Manuaalist leiab selle funktsiooni kirjelduse peatükist Variable handling -> Variable handling Functions:

http://ee.php.net/manual/en/ref.var.php

Viimase valikuna tuleks kontrollida, kas kõik neli parameetrit on sisestatud. Kui on, siis tuleb nad asendada algvalemisse ning kontrollida võrduse kehtimist ja väljastada vastav teade tulemuse kohta. Ka siis tuleb kontrollida, et andmed oleksid numbrilisel kujul, sest kõik eelnevad kontrollid olid varasemate if-lausete sees ning seetõttu pole neid täidetud, sest ükski if-lauses olev tingimus pole realiseerunud.

Ülevaatlikult võiks skript välja näha nii:

if(!isset($a)) {
	if(is_numeric($t)&&is_numeric($v0)&&is_numeric($v)) {
		//Arvutada välja a väärtus
		print "Kiirendus a=$a";
	}
	else {
		print "Arvutada pole võimalik, lähteandmed on ebakorrektsed";
	}

	return;
}

if(!isset($t)) {
	if(is_numeric() .... ) {
		//Arvutada välja t väärtus
		print "Aeg t=$t";
	}
	else {
		print "Arvutda pole võimalik, lähteandmed on ebakorrektsed";
	}

	return;
}

if (!isset($v)) {
	//Kontrollida teisi parameetreid ning arvutada välja v väärtus

	return;
}

if (!isset($v0)) {
	//Kontrollida teisi parameetreid ning arvutada välja v0 väärtus

	return;
}

//Kõik argumendid on sisestatud, kontrollime võrduse õigsust
if(is_numeric($a) .... ) {
	//Kontrollime ja teatame tulemuse
}
else {
	print "Arvutada pole võimalik, lähteandmed on ebakorrektsed";
}

Kasutage korrektseid muutujaid (ma võtsin lühiduse huvides suvalised) ning samuti tuleb if-lausete tingimused lõpuni kirjutada ning kommentaarides märgitud arvutused ja väljastamised teha!

Jälgige koodi korrektset kirjutust (taandeid, loogeliste sulgude asukohta jms.)!

Mõelge välja, kuidas oleks veateadet mõistlikum näidata. Ei ole hea idee kirjutada lähtekoodis ühte ja sama teksti korduvalt.