Ankündigung

Einklappen
Keine Ankündigung bisher.

(n über k)

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • (n über k)

    halllo...

    wie schreibe ich die mathematische Funktion n über k im php??

    oder auch

    n!
    ---------
    k!(n-k)!

    habe auch unter Fakultätsschreibweise nichts gefunden...


  • #2
    Hi,

    vielleicht so:

    PHP-Code:
    <?php

       
    // calculate binomial coefficient
       
    function binomial_coeff($n$k) {

         
    $j $res 1;

         if(
    $k || $k $n)
             return 
    0;
         if((
    $n $k) < $k)
             
    $k $n $k;

         while(
    $j <= $k) {
             
    $res *= $n--;
             
    $res /= $j++;
         }

         return 
    $res;

       }
    ?>
    Gruß

    Kommentar


    • #3
      habe noch eine kürzere Variante:

      PHP-Code:
      <?php

         
      // calculates the binomial coefficient "n over k" of 2 positive int values
         // f�r n >= k
         
      function iBinCoeff($a_iN$a_iK)
         {
             
      // the binomial coefficient is defined as n! / [ (n-k)! * k! ]
             
      return $this->iFaculty($a_iN) / ($this->iFaculty($a_iN $a_iK) * $this->iFaculty($a_iK));   
         } 

      ?>
      hoffe es hilft...

      gruß

      Kommentar


      • #4
        danke...

        aber ich komme damit gar nicht klar...
        ich habe die variablen n und k deklariert und versucht einenen wert auszugeben.. aber nichts passiert...

        kannst du mir vielleicht einfach zeigen wie ich einen Fakultät ausgebe...
        also was für n! steht...

        zb:
        echo n!;

        dann würde ich sicher auch den rest verstehen

        Kommentar


        • #5
          Dann zeig doch mal, wie du es versucht hast.

          Kommentar


          • #6
            @TravisB: Spitzensache, dass Deine Version kürzer ist. Ist ja auch nur ein kleiner Teil aus einer Klasse herauskopiert. Wo ist iFaculty()?

            Die andere Version ist aus den User Contributed Notes von http://de3.php.net/math
            monte at ohrt dot com
            18-Oct-2005 03:37
            This is an efficient method of calculating the binomial coefficient C(n,k). This code was derived from Owant: Mastering Algorithms with Perl.

            PHP-Code:
            <?php
               
            // calculate binomial coefficient
               
            function binomial_coeff($n$k) {

                 
            $j $res 1;

                 if(
            $k || $k $n)
                     return 
            0;
                 if((
            $n $k) < $k)
                     
            $k $n $k;

                 while(
            $j <= $k) {
                     
            $res *= $n--;
                     
            $res /= $j++;
                 }

                 return 
            $res;

               }
            ?>
            If you compiled php with --enable-bcmath, you can get full integer values of extremely large numbers by replacing:

            $res *= $n--;
            $res /= $j++;

            with:

            $res = bcmul($res, $n--);
            $res = bcdiv($res, $j++);

            Kommentar


            • #7
              oops, bytheway, die längere version ist auch von mir gepostet...

              ich depp habe wohl da was übersehen.....

              PHP-Code:
              <?php
                 
              // Calculate the Faculty of a positive int-value
                 
              function iFaculty($a_iFac)
                 {
                   if (
              $a_iFac 0)
                   {
                       return 
              $a_iFac $this->iFaculty($a_iFac 1);
                   }
                   elseif (
              $a_iFac == 0)
                   {
                       return 
              1;
                   }
                   else
                   {
                       return 
              0;  // Wrong argument!
                   
              }
                 } 
              ?>
              tausendmal sorry......

              Kommentar


              • #8
                <?php
                // calculates the binomial coefficient "n over k" of 2 positive int values
                // f�r n >= k

                $a_iN = 6;
                $a_iK = 4;

                function iBinCoeff($a_iN, $a_iK)
                {
                // the binomial coefficient is defined as n! / [ (n-k)! * k! ]
                return $this->iFaculty($a_iN) / ($this->iFaculty($a_iN - $a_iK) * $this->iFaculty($a_iK));

                }

                ?>

                ich habe versucht $this auszugeben und die ganze zeile, aber nichts
                kann mir auch die bunt makierten stellen nicht erklären

                Kommentar


                • #9
                  also martin86, tut mir leid wahr mein fehler,
                  mit $this->iFaculty(Parameter) rufe ich die funktion iFaculty in der funktion iBinCoeff(Para1,Para2) auf,
                  da diese funktion fehlt, geht es auch nicht....

                  passiert wenn man eine klasse anschaut und eine funktion heraus postet wärend man noch arbeitet und mit einem kollegen diskutiert...

                  du übergibst deine zahlen der funktion iBinCoeff($n, $k) und dort werden die zahlen wiederum der funktion iFaculty übergeben ,
                  jetzt da es die funktion gibt sollte es gehen


                  gruß

                  Kommentar


                  • #10
                    also so?

                    return iBinCoeff($a_iN) / (iBinCoeff($a_iN - $a_iK) * iBinCoeff($a_iK));

                    aber was gebe ich dann aus???
                    bei mir klapt das alles nicht...

                    Kommentar


                    • #11
                      So ich habe es jetzt nochmal selber versucht und es klapt...
                      aber mein Quelltext ist ein bisschen groß...

                      -----------
                      <?php
                      $n = 8;
                      $z = 0;
                      $ergebnis = 1;

                      while($z < $n)
                      {

                      $ergebnis = ($n - $z) * $ergebnis;

                      $z = $z + 1;
                      if ($z == $n)
                      {
                      $nfak = $ergebnis;
                      }
                      }

                      //-------------------------------------

                      $k = 4;
                      $z1 = 0;
                      $ergebnis1 = 1;

                      while($z1 < $k)
                      {

                      $ergebnis1 = ($k - $z1) * $ergebnis1;

                      $z1 = $z1 + 1;
                      if ($z1 == $k)
                      {
                      $kfak = $ergebnis1;
                      }
                      }


                      //-------------------------------------

                      $nk = $n - $k;
                      $z2 = 0;
                      $ergebnis2 = 1;

                      while($z2 < $nk)
                      {

                      $ergebnis2 = ($nk - $z2) * $ergebnis2;

                      $z2 = $z2 + 1;
                      if ($z2 == $nk)
                      {
                      $nkfak = $ergebnis2;
                      }
                      }
                      echo "
                      n Fakultät ";
                      echo $nfak;
                      echo "
                      k Fakultät ";
                      echo $kfak;
                      echo "
                      n - k Fakultät ";
                      echo $nkfak;
                      echo "
                      n Über k ";

                      $nueberk = $nfak / ($kfak * $nkfak);
                      echo $nueberk;

                      ?>

                      Kommentar


                      • #12
                        .. und nicht eingerückt. Rücke den Code mal ein, dadurch wird er nicht nur für dich viel übersichtilcher..

                        Kommentar


                        • #13
                          jo kommt noch...
                          bin noch am rumprobieren...
                          dachte nicht, dass das so klappt

                          Kommentar

                          Lädt...
                          X