Изчисляване на квадратни уравнения
Ето едно кратко скриптче, което сътворих, докато нямаше какво да правя. За сега само пускам кода, а после ще добавя и обясненията:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>Изчисляване на квадратни уравнения</title>
</head>
<body>
<?php if($_POST['submit']){ ?>
<?php
if($_POST['k1']==''){die('Не сте въвели коефициент за x<sup>2</sup> !');}
if($_POST['k2']==''){die('Не сте въвели за x<sup>1</sup> !');}

$prov = 0;
$obsht = 0;
while(list($var1,$var11)=each($_POST['k3_n'])){
$prov++;
if($var11==''){die('Не сте попълнили числото за x<sup>0</sup> номер '.$prov.'!');}
$obsht += $var11;
$prov = 0;
}

$k1 = $_POST['k1'];
$k2 = $_POST['k2'];
$k3 = $obsht;
$a = $k1;
$b = $k2;
$c = $k3;
$ac4 = 4*$a*$c;
$d = $b*$b - $ac4;
$dve = 2;
if($a!=0){
echo($k1."x<sup>2</sup> + ".$k2."x + ".$k3." = 0 <br/>a = $a, b = $b, c = $c; <br/><br/>");
echo("D = b<sup>2</sup> - 4.a.c <br/> ");
echo("D = $b<sup>2</sup> - 4.$a.$c <br/>D = ".$b*$b." - $ac4<br/> D = $d <br/> ");

if($d<0){die('Дискриминантата е отрицателна, за това квадратното уравнение няма решение!');}else{echo('<br>');}
$ds = sqrt($d);
$x1 = ((-1*$b) + $ds)/(2*$a);
$x2 = ((-1*$b) - $ds)/(2*$a);
echo("x<sub>1</sub> = (-b + √D) / 2.a <br/>");
echo("x<sub>1</sub> = (-$b + √$d) / 2.$a <br/>");
echo("x<sub>1</sub> = (-$b + $ds) / ".$a*$dve." <br/>");
echo("x<sub>1</sub> = $x1<br/><br/>");

echo("x<sub>2</sub> = (-b - √D) / 2.a <br/>");
echo("x<sub>2</sub> = (-$b - √$d) / 2.$a <br/>");
echo("x<sub>2</sub> = (-$b - $ds) / ".$a*$dve." <br/>");
echo("x<sub>2</sub> = $x2<br/><br/>");

$fv11 = $x1 + $x2;
$fv12 = -1*($b/$a);
$fv21 = $x1*$x2;
$fv22 = $c/$a;

echo("Проверка по формулата на Виет:<br>
<br>
x<sub>1</sub> + x<sub>2</sub> = -1(b/a)<br>
$x1 + $x2 = -1*($b/$a)<br>
$fv11 = $fv12 - √<br>
<br>
x<sub>1</sub>.x<sub>2</sub> = b/c<br>
$x1.$x2 = b/c<br>
$fv21 = $fv22 - √<br>
<br>");

}else{echo('a e 0!!!');}
echo('<br><br>');
?>
<?php } ?>
<form action="" method="post"><input type="text" size="1" maxlength="10" name="k1" >x<sup>2</sup> + <input type="text" size="1" maxlength="10" name="k2" >
x<sup>1</sup> +<?php if($_GET['pat']){
$pat1 = $_GET['pat']-1;
for($i = 0; $i < $_GET['pat']; $i++){
if($i==$pat1){echo(' <input type="text" size="1" maxlength="10" name="k3_n[]" >');}else{echo(' <input type="text" size="1" maxlength="10" name="k3_n[]" > +');}
}}else{echo(' <input type="text" size="1" maxlength="10" name="k3_n[]" >');}?> = 0<br>
<br>
<input type="submit" name="submit" value="Go!">
</form><br>
<br>
<form method="get" action="">
Искам да има <input type="text" maxlength="3" size="5" name="pat" value="<?php if($_GET['pat']){echo($_GET['pat']);}else{echo('1');} ?>">
места за въвеждане на цифри за x<sup>0</sup>
<input type="submit" value="Изпълни">
</form>
</body>
</html>


1. Използваме
<?php if($_POST['submit']){ ?>

за да проверим дали бутона Go! е натиснат, следователно ако е се изпълнява скрипта, а ако не е се показват формите за въвеждането на самото уравнение. $k1, $k2 и $k3 ще са ни коефициентите за съответно x(2), x(1) и x(0) (понеже в сайта няма опция за HTML и не мога да направя квадратите на x, за това ги пиша в скоби :) )

2. Проверяваме дали $k1 и $k2 са попълнени в самата форма с
if($_POST['k1']==''){die('Не сте въвели коефициент за x<sup>2</sup> !');}
if($_POST['k2']==''){die('Не сте въвели за x<sup>1</sup> !');}

и ако не са попълнени, скрипта се прекратява и се изкарва съобщение да се попълнят.

3.
$prov = 0;
$obsht = 0;
while(list($var1,$var11)=each($_POST['k3_n'])){
$prov++;
if($var11==''){die('Не сте попълнили числото за x<sup>0</sup> номер '.$prov.'!');}
$obsht += $var11;
$prov = 0;
}

$k1 = $_POST['k1'];
$k2 = $_POST['k2'];
$k3 = $obsht;


С този код събираме информацията от формата за x(0), като първо създаваме две променливи, които служат за временни променливи. $prov прави проверка за числото на формата, което се обрабова в момента, като в началото е 0, по време на събирането на информация, при всяко повтаряне на цикъла се увеличава с 1 и по този начин разбираме кое по ред число е това, коео цикъла обработва, a $obsht събира стойностите при всяко едно повторение на цикъла и ги съхранява в себе си. След това се присвояват стойностите на променливите, които ще ползваме за напред

4.
$a = $k1;
$b = $k2;
$c = $k3;


Тук си създаваме променливи за a, b, c, които ни трябват при намирането на дискриминантата.

5.
$ac4 = 4*$a*$c;
$d = $b*$b - $ac4;
$dve = 2;


С този код се изчислява самата дискриминанта по нейнаа формула - D = b(2) - 4.a.c, като променливата $dve ще ни трябва по-нататък.

6.
if($a!=0){
echo($k1."x<sup>2</sup> + ".$k2."x + ".$k3." = 0 <br/>a = $a, b = $b, c = $c; <br/><br/>");
echo("D = b<sup>2</sup> - 4.a.c <br/> ");
echo("D = $b<sup>2</sup> - 4.$a.$c <br/>D = ".$b*$b." - $ac4<br/> D = $d <br/> ");


Извеждаме изчисленията, като преди това трябва да проверим дали a е 0, защото както знаете ако а е 0, то уравнението не е квадратно.

7.
if($d<0){die('Дискриминантата е отрицателна, за това квадратното уравнение няма решение!');}else{echo('<br>');}
$ds = sqrt($d);
$x1 = ((-1*$b) + $ds)/(2*$a);
$x2 = ((-1*$b) - $ds)/(2*$a);


Важно е да се провери дали дискриминантата е отрицателна, защото ако е, то уравнението няма решение. Следва намирането на корените на уравнението x1 и x2 - те се намират по формулата x1,2 = (-b +- √D)/(2.a) - тук няма нищо сложно, само математика :)


8.
echo("x<sub>1</sub> = (-b + √D) / 2.a <br/>");
echo("x<sub>1</sub> = (-$b + √$d) / 2.$a <br/>");
echo("x<sub>1</sub> = (-$b + $ds) / ".$a*$dve." <br/>");
echo("x<sub>1</sub> = $x1<br/><br/>");

echo("x<sub>2</sub> = (-b - √D) / 2.a <br/>");
echo("x<sub>2</sub> = (-$b - √$d) / 2.$a <br/>");
echo("x<sub>2</sub> = (-$b - $ds) / ".$a*$dve." <br/>");
echo("x<sub>2</sub> = $x2<br/><br/>");


Отново извеждаме изчисленията :)

9.
$fv11 = $x1 + $x2;
$fv12 = -1*($b/$a);
$fv21 = $x1*$x2;
$fv22 = $c/$a;


С този код проверяваме с формулите на Виет (9 клас) дали x1 и x2 са корени на уравнението

10.
echo("Проверка по формулата на Виет:<br>
<br>
x<sub>1</sub> + x<sub>2</sub> = -1(b/a)<br>
$x1 + $x2 = -1*($b/$a)<br>
$fv11 = $fv12 - √<br>
<br>
x<sub>1</sub>.x<sub>2</sub> = b/c<br>
$x1.$x2 = b/c<br>
$fv21 = $fv22 - √<br>
<br>");


Тук само изваждаме изчисленията

11.
}else{echo('a e 0!!!');}
echo('<br><br>');
?>
<?php } ?>


Затваряме проверката за а!=0 и дали бутона Go! е натиснат

12.
<form action="" method="post"><input type="text" size="1" maxlength="10" name="k1" >x<sup>2</sup> + <input type="text" size="1" maxlength="10" name="k2" >
x<sup>1</sup> +<?php if($_GET['pat']){
$pat1 = $_GET['pat']-1;
for($i = 0; $i < $_GET['pat']; $i++){
if($i==$pat1){echo(' <input type="text" size="1" maxlength="10" name="k3_n[]" >');}else{echo(' <input type="text" size="1" maxlength="10" name="k3_n[]" > +');}
}}else{echo(' <input type="text" size="1" maxlength="10" name="k3_n[]" >');}?> = 0<br>
<br>
<input type="submit" name="submit" value="Go!">
</form><br>
<br>
<form method="get" action="">
Искам да има <input type="text" maxlength="3" size="5" name="pat" value="<?php if($_GET['pat']){echo($_GET['pat']);}else{echo('1');} ?>">
места за въвеждане на цифри за x<sup>0</sup>
<input type="submit" value="Изпълни">
</form>
</body>
</html>


Тук показваме формите за въвеждане на информация и затваряме Body и HTML таговете...

В крайна сметка се оказа, че не е толкова сложно, колкото изглежда, нали :)

Урока е авторски, моля, не го преписвайте без да дадете следния линк:

http://web-tourist.net/login/login/view.php?st=2356


Демо





/ Трябва да сте регистриран за да напишете коментар /