Ankündigung

Einklappen
Keine Ankündigung bisher.

Zufällige Zahl in LaTeX Code mit PHP

Einklappen

Neue Werbung 2019

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

  • Zufällige Zahl in LaTeX Code mit PHP

    Guten Abend zusammen,

    ich bastle gerade an einem kleinen Projekt.
    Die Idee ist es zufällige Zahlen in Formeln zu erzeugen.

    Ich ziehe mir da einen LaTeX Code zuhilfe. Klappt auch ganz gut.

    Hier ein kleines Beispiel:
    <?php $x = rand(1,9); echo('$$\frac{1}{x}$$') ?>

    Die Darstellung der Formel 1/x ist (fast) so wie sie sein soll!

    Wie schaffe ich es den LaTeX-Code die zuvor generierte Zahl für x einsetzen zu lassen?
    Habe schon viel ausprobiert. Ich denke dass durch die vor dem LaTeX-Code stehenden $-Zeichen die Variable nicht richtig übergeben lassen.

    Vielen Dank schonmal im Voraus.

  • #2
    Willkommen im Forum.

    Die Frage ist eine Variation von: „Wie füge ich eine Variable in einen String/eine Ausgabe ein.“ Da gibt es unzählige Möglichkeiten.

    Eine Variante ist Verkettung:

    PHP-Code:
    echo '$$\frac{1}{' $x '}$$'
    Eine andere wäre mit sprintf oder printf:

    PHP-Code:
    echo sprintf('$$\frac{1}{%s}$$'$x);
    printf('$$\frac{1}{%s}$$'$x); // spart das echo 
    Es gibt weitere.

    Kommentar


    • #3
      Sehr schön!
      Vielen Dank, das läuft und hilft erst einmal weiter.

      In dem Kontext gibt es zwei weitere Fragen:
      Gibt es eine Alternative zur rand() Funktion?
      Die Ausgabe ist zwar zufällig, allerdings kommen einige Zahlen viel öfter als andere.

      Und, gibt es eine Anleitung für "Buttons", sodass auf Klick eine zufällige Zahl generiert wird, ohne dass die komplette Seite neu geladen wird?

      Ich finde im Dateiwirrwarr gerade nicht meinen Quelltext, aber gerade in Hinblick auf die Buttons hatte ich genanntes Problem.

      Kommentar


      • #4
        Zitat von Freumel Beitrag anzeigen
        In dem Kontext gibt es zwei weitere Fragen:
        Gibt es eine Alternative zur rand() Funktion?
        Die Ausgabe ist zwar zufällig, allerdings kommen einige Zahlen viel öfter als andere.
        Falls du PHP < 7.1 verwendest, dann [MAN]mt_rand[/MAN]. Ab 7.1 tun diese Funktionen das gleiche.


        Zitat von Freumel Beitrag anzeigen
        Und, gibt es eine Anleitung für "Buttons", sodass auf Klick eine zufällige Zahl generiert wird, ohne dass die komplette Seite neu geladen wird?
        Wenn du das Problem mit PHP lösen möchtest, musst du eine neue Anfrage schicken, damit das Script ausgeführt werden kann. Du kannst mit Javascript aber sogenannte AJAX-Requests machen und dann entsprechende Ergebnisse ändern. In deinem Fall wo du aber nichts vom Server brauchst (z.B. Datenbankinhalte) macht es aber mehr Sinn gleich alles in JavaScript zu erledigen.

        Kommentar


        • #5
          mt_rand liefert gemeinhin bessere Werte: http://php.net/manual/en/function.mt-rand.php (Edit: siehe Anmerkung von Tropi dazu)

          Für weitere Alternativen siehe gegebenenfalls die verlinkte Dokuseite.

          Wenn du beim Klick auf den Button etwas ausführen möchtest, ohne die gesamte Seite neu zu laden, brauchst du clientseitiges JavaScript. Dort gibt es natürlich auch eine Random-Funktion.

          Wenn du beim Klick trotzdem noch Daten vom Server nachladen möchtest, benötigst du einen XHR/Ajax-Request.

          Spätestens dazu würde ich dann nachdrücklich eine Library wie jQuery empfehlen, um Unterschiede in verschiedenen Browsern auszugleichen und um lesbareren Code schreiben zu können.

          Kommentar


          • #6
            Okay, damit setze ich mich auseinander, wenn ich soweit bin, war lediglich ein spontaner Einfall.
            Ich bin jetzt dazu übergegangen mir Funktionen zu definieren.

            Und ich möchte mir diese Funktionen zufällig ausgeben lassen.
            Meine Idee:

            PHP-Code:
            <?php function fkt_1(){}?>
            <?php 
            function fkt_1(){}?>

            <?php rand(fkt_1(), fkt_2();?>
            Das Problem:
            Es werden beide Funktionen ausgegeben. Ich habe auch eine Alternative ausprobiert:

            PHP-Code:
            <?php function fkt_1(){}?>
            <?php 
            function fkt_1(){}?>

            <?php $fkt[1]=fkt_1(); $fkt[2]=fkt_2(); fkt_zufall=rand(1,2); echo'$fkt[fkt_zufall]';?>
            Aber auch die zweite Methode will nicht so wie ich.

            Gibt es einen Vorschlag?

            Vielen Dank!
            Die Hilfe hier ist echt super.

            Kommentar


            • #7
              Beide deine Versuche legen nahe, dass dir einige Grundlagen fehlen. Vielleicht ist es erstmal sinnvoller ein Tutorial durchzuarbeiten.

              PHP-Code:
              <?php
              if(random_int(0,1) == 0) {
                
              func1();
              } else {
                
              func2();
              }

              Kommentar


              • #8
                Zitat von Freumel Beitrag anzeigen
                Gibt es eine Alternative zur rand() Funktion?
                Die Ausgabe ist zwar zufällig, allerdings kommen einige Zahlen viel öfter als andere.
                Das ist Unsinn den ich hier so nicht stehen lassen kann. Dazu ein kurzer Test der die Häufigkeit von erzeugten Zahlen zeigt:
                PHP-Code:
                $counts = array(
                  
                'rand' => array_fill(0,5,0),
                  
                'mt_rand' => array_fill(0,5,0)
                );
                for(
                $i=0;$i<1000000;$i++){
                  
                $counts['rand'][rand(0,4)]++;
                  
                $counts['mt_rand'][mt_rand(0,4)]++;
                }
                debug::write($counts); 
                Ein Ergebnis unter der Uraltversion php 5.3.8 (welche ich noch zu Testzwecken vorhalte):
                Code:
                array (
                'rand'    => array ( 0 => 200010, 1 => 200006, 2 => 199953, 3 => 200012, 4 => 200019, ),
                'mt_rand' => array ( 0 => 199733, 1 => 199850, 2 => 199717, 3 => 200336, 4 => 200364, ),
                )
                Weniger mit mathematischen Grundkenntnissen ausgestattete Leser könnten sogar beim Anblick des Resultats zu der Meinung kommen,
                rand() sei hier sogar besser. Das Gegenteil ist aber der Fall. Ein Problem von rand() bei PHP Versionen vor 5.6 liegt in einer gewissen Periodizität der erzeugten Sequenzen.
                Ein weiterer Test mit grafischer Ausgabe den ich aus dem Netz geholt habe macht dies anschaulich:

                randtestphp55.png

                Der Test mit rand() unter PHP 5.6.23 (wie auch für die 7er PHP Versionen) zeigt bereits folgendes Bild

                randtestphp5623.png

                Mit mt_rand() bekomme ich unter allen PHP-Versionen Bilder wie das 2.Bild hier.

                LG jspit

                Kommentar


                • #9
                  Zitat von Freumel Beitrag anzeigen

                  In dem Kontext gibt es zwei weitere Fragen:
                  Gibt es eine Alternative zur rand() Funktion?
                  Die Ausgabe ist zwar zufällig, allerdings kommen einige Zahlen viel öfter als andere.
                  LateX hat ja auch ein pseuso random generator
                  https://www.ctan.org/pkg/lcg/

                  sonst kannst du auf unix mal nach getrandom() gehört zur glibc, oder opennssl rand [args] was zu opensssl gehört.

                  Kommentar

                  Lädt...
                  X