Webmaster общности: Predpriemach.com | SearchEngines.bg

    Изчисляване на квадратни уравнения

    Автор: smeshko2008

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

    <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>

    Използваме

    <?php if($_POST['submit']){ ?>

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

    1. Проверяваме дали $k1 и $k2 са попълнени в самата форма с
    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;

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

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

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

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

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

    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, то уравнението не е квадратно.

    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) – тук няма нищо сложно, само математика 🙂

    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;

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

    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 } ?>

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

    <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

    Оставете коментар