kostenloser Webspace werbefrei: lima-city


Dreiecksberechnungen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    p*******e

    Hi Leute,
    ich komme von der Realschule Extertal. Dort sollten wir im Infounterricht Dreiecksberechnungen mit PHP machen. Hier habt ihr meine Dateien:

    Das Formular:

    ------------------------------------------------------------ -----
    <html>
    <head>
    <title>Dreiecksberechnungen</title>
    <meta name="author" content="Johannes Nazarov">
    <link rel="stylesheet" type="text/css" href="css/website.css">
    </head>
    <body text="#000000" bgcolor="#FFFFFF" >
    <h1>Berechnung eines Dreiecks</h1>
    <form action="dreieck.php" method="get">
    <fieldset>
    <legend>Fl?chenberechnung</legend>
    <table border="0" cellspacing="5" width="70%">
    <tr>
    <td colspan="4">Bitte geben Sie die gew?nschten Werte in das Formular ein. <b>Lassen Sie
    das Feld frei, dessen Wert Sie berechnen m?chten</b>!<br>
    </td>
    </tr>
    <tr>
    <td>Fl?che (A):</td>
    <td><input name="wert[]" size="10" type="text">cm?</input></td>
    <td rowspan="4"><img src="flachdrei.jpg"></td>
    </tr>
    <tr>
    <td>Grundseite (g):</td>
    <td><input name="wert[]" type="text" size="10">cm</input></td>
    </tr>
    <tr>
    <td>H?he (h):</td>
    <td><input name="wert[]" type="text" size="10">cm</input></td>
    </tr>
    </table>
    </fieldset>
    <!--Ein anderes Formular-->
    <fieldset>
    <legend>Umfangsberechnung</legend>
    <table cellspacing="5" width="70%">
    <tr>
    <td colspan="4">Bitte geben Sie die gew?nschten Werte in das Formular ein. <b>Lassen Sie
    das Feld frei, dessen Wert Sie berechnen m?chten</b>!<br></td>
    </tr>
    <tr>
    <td>Umfang (U):</td>
    <td><input name="wert[]" size="10" type="text">cm?</input></td>
    <td rowspan="4"><img src="umdrei.jpg"></td>
    </tr>
    <tr>
    <td>Seite a:</td>
    <td><input name="wert[]" type="text" size="10">cm</input></td>
    </tr>
    <tr>
    <td>Seite b:</td>
    <td><input name="wert[]" type="text" size="10">cm</input></td>
    </tr>
    <tr>
    <td>Seite c:</td>
    <td><input name="wert[]" type="text" size="10">cm</input></td>
    </tr>
    </table>
    </fieldset>
    <input type="submit" value="Berechnen"></input>
    </form>
    </body>
    </html>
    ------------------------------------------------------------ -----

    Das Script (noch auskommentiert):

    ------------------------------------------------------------ -----
    <?php

    /*********************************************************** ********************
    BITTE kopiert dieses Script nicht einfach in euren Ordner.
    Das waere ganz gemein. Fuer dieses Script habe ich um die drei Stunden gesessen und moechte nicht, dass das jetzt einfach so publiziert wird.
    DANKESCHOEN!

    Vor jedem Block habe ich Kommentare geschrieben, die durchnummeriert sind. Hinter einigen Zeilen des Programms sind als einzeilige Kommentare Nummern angegeben. Wenn ihr die Kommentare liest, dann schaut zu der jeweils angegebenen Nummer, um den Text zu verstehen.

    Euer Johannes Nazarov ************************************************************ ********************/

    /* Anfang des Scriptes: Kontrolle der Eingaben
    01 = Eine Variable mit einem Text wird definiert. Spaeter muss man nur den Namen
    der Variablen eingeben und nicht den ganzen Text.
    02 = Die Ueberschrift wird ausgegeben
    03 = WENN der Wert (ich habe zur Uebung Arrays verwendet, die Variable kann ja auch
    anders heissen) ungleich NICHTS ist,
    04 = DANN wird Variable $i0 auf TRUE (wahr) gesetzt.
    05 = siehe NR 03 nur mit anderen Werten
    06 = siehe NR 04 nur mit anderen Werten
    usw. Es iwrd fuer alle Eingaben eine Variable definiert. HINWEIS: Normalerweise sind alle
    Variablen auf FALSE gesetzt.
    */

    $Satzteil = "Das Ergebnis f?r die Berechnung "; //01
    echo ("<h1>Berechnung eines Dreiecks</h1>"); //02
    if ($wert[0] != "") //03
    $i0 = true; //04
    if ($wert[1] != "") //05
    $i1 = true; //06
    if ($wert[2] != "")
    $i2 = true;
    if ($wert[3] != "")
    $i3 = true;
    if ($wert[4] != "")
    $i4 = true;
    if ($wert[5] != "")
    $i5 = true;
    if ($wert[6] != "")
    $i6 = true;

    /* Anfang der Berechnung fuer die Flaeche
    07 = Ueberschrift wird ausgegeben
    08 = Bedingung1: WENN entweder ($i0 UND $i1) wahr sind, ODER ($i0 UND $i2) ODER ($i1 UND $i2)
    es wird also kontrolliert, ob nur jeweils ZWEI Eingaben vorhanden sind. Wenn es
    naemlich nur eine oder keine Eingaben gibt, kann ja kein Wert berechnet werden!
    WENN es also nur zwei Angaben gibt, DANN folgt Bedingung2
    09 = DANN Bedingung2: WENN die Laenge der Eingegebenen Zeichen fuer $wert[0] kleiner oder
    gleich 0 ist,
    10 = DANN wird der Variable $aflach der berechnete Wert zugewiesen und
    11 = der Satzteil von NR 01 zusammen mit weiterem Text ausgegeben und
    12 = und der Inhalt der Variable $aflach formatiert ausgegeben
    13 = SONST folgt Bedingung3
    14 = Bedingung3: WENN die Laenge der Eingegebenen Zeichen fuer $wert[1] kleiner oder
    gleich 0 ist,
    15 = DANN genauso wie bei NR 10, nur mit einer anderen Formel
    usw. den Rest braucht man nicht zu erklaeren.
    16 = Bedingung4: usw.
    17 = Bedingung4 wird geschlossen
    18 = Bedingung3 wird geschlossen
    19 = Bedingung2 wird geschlossen
    20 = Bedingung1 wird geschlossen und SONST, wenn also NICHT NR 08 zutrifft
    21 = Fehlermeldung ausgeben.
    22 = Ausserdem: WENN alle drei Felder ausgefuellt sind,
    23 = auch Fehlermeldung
    24 = Ausgabe, um den Text richtig formatiert erscheinen zu lassen
    */

    echo ("<h2>Fl?che</h2>"); //07

    if (($i0 AND $i1) OR ($i0 AND $i2)OR ($i1 And $i2)) { //08
    if (strlen($wert[0]) <= 0){ //09
    $aflach = ($wert[1]*$wert[2])/2; //10
    print ($Satzteil."der <b>Fl?che</b> lautet: <b>"); //11
    printf ("%05.3f",$aflach); //12
    } else { //13
    if (strlen($wert[1]) <= 0) { //14
    $agrund = (2*$wert[0])/$wert[2]; //15
    print ($Satzteil."der <b>Grundseite</b> lautet: <b>");
    printf ("%05.3f", $agrund);
    } else {
    if (strlen($wert[2]) <= 0) { //16
    $ahoch =(2*$wert[0])/$wert[1];
    print ($Satzteil."der <b>H?he</b> lautet; <b>");
    printf ("%05.3f",$ahoch);
    } //17
    } //18
    } //19
    } else { //20
    print ("<br>Ihre Eingabe ist nicht eindeutig. Bitte geben Sie genau <b>zwei</b> Werte ein!"); //21
    }
    if ($i0 AND $i1 AND $i2) { //22
    echo ("Ihre Eingabe ist nicht eindeutig. Bitte geben Sie genau <b>zwei</b> Werte ein!"); //23
    }
    echo ("</b>"); //24

    /* Anfang der Berechnung fuer den Umfang
    Hiermuss nichts mehr erklaert werden. Es wird fuer den Umfang genauso verfahren wie oben
    ab NR 07, nurr wird jeweils ein Wert mehr kontrolliert. Anhand des obigen Beispiels ist es
    nun ein Leichtes, die Funktionsweise des unteren Abschnitts nach zu vollziehen.
    Viel Glueck!
    */

    echo ("<h2>Umfang</h2>");
    if (($i3 AND $i4 AND $i5) OR ($i3 AND $i5 AND $i6)OR ($i3 AND $i4 AND $i6) OR ($i4 AND $i5 AND $i6)) {
    if (strlen($wert[6]) <= 0){
    $ac = $wert[3]-($wert[4]+$wert[5]);
    print ($Satzteil."der Seite <b>c</b> lautet: <b>");
    printf ("%05.3f",$ac);
    }else {
    if (strlen($wert[3]) <= 0){
    $aumfang = $wert[4]+$wert[5]+$wert[6];
    print ($Satzteil."des <b>Umfangs</b> lautet: <b>");
    printf ("%05.3f",$aumfang);
    } else {
    if (strlen($wert[4]) <= 0){
    $aa = $wert[3]-($wert[5]+$wert[6]);
    print ($Satzteil."der Seite <b>a</b> lautet: <b>");
    printf ("%05.3f",$aa);
    }else {
    if (strlen($wert[5]) <= 0){
    $ab = $wert[3]-($wert[4]+$wert[6]);
    print ($Satzteil."der Seite <b>b</b> lautet: <b>");
    printf ("%05.3f",$ab);
    }
    }
    }
    }
    }else {
    print ("Ihre Eingabe ist nicht eindeutig. Bitte geben Sie genau <b>drei</b> Werte ein!");
    }
    if ($i3 AND $i4 AND $i5 AND $i6) {
    echo ("Ihre Eingabe ist nicht eindeutig. Bitte geben Sie genau <b>drei</b> Werte ein!");
    }

    echo ("</b><br><br><a href=\"dreieck.html\">Neue Berechnung</a>"); //Schlussausgabe, mit einem Link, um zurueck zu kommen

    ?>
    ------------------------------------------------------------ -----
    Ich bin kein Profi und m?chte bitten, dass ihr mir sagt, wie man eine Division durch 0 unterbindet und ganz wichtig: wie kann ich Anhand von weniger Eingaben Fl?che und umfang berechnen. Geht es nicht, dass man ein paar Eingaben wegl?sst?

    Vielen Dank im voraus
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hallo profihome!

    Eine Division durch Null unterbindest du, indem du jede Variable, die als Divisor in Frage kommt, (vor der Division) daraufhin ?berp?fst, ob sie gr??er als Null ist. Am besten machst du das gleich bei der Parameter-Eingabe. Dann sollte das PHP-Skript einfach eine Fehlermeldung ausgeben und einen Verweis auf die Formularseite setzen, damit man die Eingaben wiederholen kann. Willst du das ganze f?r den Benutzer komfortabler gestalten, brauchst du ein so genanntes Affenformular: Ein PHP-Skript, das das HTML-Formular ausgibt und sich im Fehlerfall selbst wieder aufruft.

    MfG
    alopex
  4. leg die einzelnen formulare in einzelne Arrays
    = Umfang -> ...name="umfang[]"
    /*
    Nur zur information was die einzelnen Arrays enthalten
    $flaeche[0] = Fl?che
    $flaeche[1] = Grundkante
    $flaeche[2] = H?he
    
    $umfang[0] = a
    $umfang[1] = b
    $umfang[2] = c
    $umfang[3] = Umfang
    */
    function flaeche($grundkante = 0, $hoehe = 0, $flaeche = 0){
    if (($grundkante != 0) &&($hoehe != 0)){
      $output = ( $grundkante * $hoehe ) / 3;
    }else if(($grundkante != 0) && ($flaeche != 0)){
      $output = ( 3 * $flaeche ) / $grundkante;
    }else if(($hoehe != 0) && ($flaeche != 0)){
      $output = ( 3 * $flaeche ) / $hoehe;
    }else{
      $output = "Falsche Eingabe [Fl?che]";
    }
    return $output;
    }
    function umfang($a = 0, $b = 0, $c = 0, $umfang = 0){
    if (($a != 0) &&($b != 0) && $c != 0){
      $output = $a + $b + $c;
    }else if(($umfang != 0) && ($a != 0) && ($b != 0)){
      $output = $umfang - ( $a + $b );
    }else if(($umfang != 0) && ($a != 0) && ($c != 0)){
      $output = $umfang - ( $a + $c );
    }else if(($umfang != 0) && ($b != 0) && ($c != 0)){
      $output = $umfang - ( $b + $c );
    }else{
      $output = "Falsche Eingabe [Umfang]";
    }
    return $output;
    }
    /*Von $_GET[] abrufen -> Array $umfang && Array $flaeche*/
    if (isset($umfang)){
    echo umfang($umfang[0], $umfang[1], $umfang[2], $umfang[3])
    }
    if (isset($flaeche)){
    echo flaeche($flaeche[0], $flaeche[1], $flaeche[2], $flaeche[3])
    }
  5. Autor dieses Themas

    p*******e

    Ich verstehe nicht ganz, was du mit Affenformular meinst. Ist das das, was ich im Tutorial unter "Formular und PHP in einer Datei" beschrieben habe?
  6. Hallo profihome!

    Keine Ahnung, aber unter
    http://www.lima-city.de/tutorials?m=show&id=1167
    habe ich das Wort "Affe" nicht gefunden (Es ist ganz einfach grausam, PHP-Quelltexte zu lesen, die hier in den Boards oder in den Tutorials ver?ffentlich werden, weil die Formatierung meist verlorengegangen ist).

    Aber hier:
    http://www.php-faq.de/q/q-formular-verarbeitung.html

    Und da wird sch?n beschrieben, wie man Formulare neu sendet, um fehlerhafte Eingaben zu korrigieren, ohne schon gemachte (richtige) Eingaben zu zerst?ren.

    MfG
    alopex
  7. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!