roulette
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
anfnger
bedingung
befehl
beispiel
beitrag
computer
datei
divisor
dokument
eins
folgende liste
konstrukt
listen
lsen
maxi
restwert
schreibfehler
semikolon
zeile
zufllige auswahl
-
PHP-Anfänger fragt:
Ich habe jetzt bspw. eine Liste. Und jetzt will ich ein kleines programm schreibe in PHP, dass es dann eine zufällige Zahl nimmt, wenn man auf einen button drückt.
Wie soll der PHP skript aussehen?? Und mit welchem programm muss ich die liste machen? Gehts auch wenn ich die Liste ein word dokument ist??
bsp: Wenn ich meine Klassenliste habe, will ich dass der rechner eine zufällige person nimmt!
Und ihr kennt doch sicher das spiel, wo der computer eine zufällige zahl nimmt z.b. zwischen 1 und 100. Wie kann ich das programm so umschreiben, dass er nur eine ungerade bzw. gerade zahl zwischen 1 und 100 nimmt??
Ich hoffe ihr habt beide fragen verstanden, und könnt mir helfen.
Danke schon im voraus
mfg
xasa$$$
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
als 1.es öffnest du die Datei in der die liste drin ist
2.mit rand(1,100); generierst du eine zufällige zahl zwischen 1und 100
3.dann einfach aus der lsite raussuchen (wenn d z.b nach id sotiert hast)
1|Müller Max|müller@max.at
2|Maxi Müller|müller@maxi.at
z.b !
dann rufst du 2 auf mit der generierten zahl -
und wie geht das, wenn er nur ungerade zahlen zwischen 1 und 100 wählen soll??
und wie, wenn er nur gerade zahlen zwischen 1 und 100 wählen soll?? -
Bin selber noch ganz am Anfang, aber das zweite Problem könntest du mit einem if-Konstrukt lösen.
Ungerade
<?php if ($zufallszahl % 2) { $zufallszahl ++; } ?>
Damit wird halt jede gerade Zufallszahl inkrementiert (um 1 erhöht).
Für nur gerade Zahlen:
<?php if ($zufallszahl !% 2) { $zufallszahl ++; } ?>
Jede ungerade Zahl wird inkrementiert.
Wie gesagt bin ich noch Anfänger und weiß nicht ob es noch leichter ginge ;)
Beitrag geaendert: 15.3.2007 21:54:43 von zwiebeldoener
Beitrag geaendert: 15.3.2007 21:55:20 von zwiebeldoener -
was ist das für ein zeichen vor der 2???
-
Das %-Zeichen berechnet den Restwert bei der Dividion. Bei geraden Zahlen durch 2 ist der also 0, wodurch die Bedingung also nicht erfüllt ist.
Also wenn ich mich nicht irre müsste man die beiden Möglichkeiten austauschen, also die erste für gerade Zahlen? Ich habe aber schon länger nicht mehr mit PHP gespielt, also keine Garantie.
Und !% war mir auch unbekannt. Geht das? -
hey zwiebedoener
ich habe nochmal nachgeschaut. am besten ich zeige dir ein beispiel:
<?php $zahl=rand(1,100); $rest=$zahl % 2; if ($rest==1) { echo "die Zahl ist ungerade" } if (rest==0) { echo "die zahl ist gerade" } ?>
das prozentzeichen rechnet den rest aus.
das bedeutet wenn $zahl eine ungerade zahl wäre, wäre der rest eins und somit schriebt der computer, dass es ungerade ist und der rest für die gerade zahl wäre ja 0, also schreibt es dann, dass es gerade ist, weil der rest bei einer geraden zahl, wäre ja 0. -
hey zwiebedoener
ich habe nochmal nachgeschaut. am besten ich zeige dir ein beispiel:
<?php $zahl=rand(1,100); $rest=$zahl % 2; if ($rest==1) { echo "die Zahl ist ungerade" } if (rest==0) { echo "die zahl ist gerade" } ?>
das prozentzeichen rechnet den rest aus.
das bedeutet wenn $zahl eine ungerade zahl wäre, wäre der rest eins und somit schriebt der computer, dass es ungerade ist und der rest für die gerade zahl wäre ja 0, also schreibt es dann, dass es gerade ist, weil der rest bei einer geraden zahl, wäre ja 0.
Nene, das ist so falsch..
1. Du hast das $ bei der zweiten if-Abfrage vergessen
2. Du hast das Semikolon nach echo vergessen:<?php echo "bla"; ?>
(3. Brauchst du die zweite if-Abfrage nicht...)
So ist es richtig:
<?php $zahl=rand(1,100); $rest=$zahl % 2; if ($rest == 0) { echo "die Zahl ist gerade"; } else { echo "die zahl ist ungerade"; } ?>
Beitrag geaendert: 16.3.2007 19:44:11 von sesch -
Gerade/Ungerade Zahl:
Irgendwie schwebt mir da eine Definition vor (von der ich mal gelesen habe), die gerade und ungerade Zahlen darstellt. Sowas in der Art von:
gerade Zahl: 2k (k ist eine beliebige natürliche Zahl);
ungerade Zahl: 2k+1 (k ist eine beliebige natürliche Zahl);
Angepasst an das Problem sieht ein einfaches PHP-Script so aus:
$k = mt_rand(1,50); // k von 1 bis 50 printf('gerade Zahl: %s<br />', $k + $k); printf('ungerade Zahl: %s<br />', $k + $k - 1);
Das dürfte schneller und einfacher sein, als mit dem Modulo-Divisor zu spielen ...
==============
Word-Dateien kann man mit PHP nicht sinnvoll einlesen. Es sei denn, du speicherst sie in Word als ".txt"- oder ".csv"-Dateien. Diese kann ein PHP-Script relativ einfach verarbeiten.
Nehmen wir mal an, folgende Liste läge als TXT-Datei vor:
Heinz
Franz
Fritz
Klaus
Karl
Das speichern wir als "liste.txt" im gleichen Verzeichnis, in dem auch unser folgendes PHP-Script liegt.
Die kann man in PHP so einlesen:
// Datei zum Lesen öffnen $datei = 'liste.txt'; if (!$fh = fopen($datei)) { exit(sprintf('Konnte Datei "%s" nicht öffnen!', realpath($datei))); } // Liste erstellen $liste = array (); while($zeile = fgets($datei)) { $liste[] = trim($zeile); } // Datei wieder zumachen close($fh); // jetzt kommt der interessantee Teil $max = count($liste) - 1; printf('Zufällige Auswahl: "%s"<br />', $liste[mt_rand(0, $max)]);
... und wenn ich jetzt keine Schusselfehler eingebaut habe, funktioniert das sogar.
Beitrag geaendert: 16.3.2007 19:59:24 von alopex -
das kommt mir ein bisschen komplizierter vor. Jenachdem hängt es immer noch vom Geschmack ab!!
-
sesch schrieb:
hey zwiebedoener
ich habe nochmal nachgeschaut. am besten ich zeige dir ein beispiel:
<?php $zahl=rand(1,100); $rest=$zahl % 2; if ($rest==1) { echo 'die Zahl ist ungerade' } if (rest==0) { echo 'die zahl ist gerade' } ?>
das prozentzeichen rechnet den rest aus.
das bedeutet wenn $zahl eine ungerade zahl wäre, wäre der rest eins und somit schriebt der computer, dass es ungerade ist und der rest für die gerade zahl wäre ja 0, also schreibt es dann, dass es gerade ist, weil der rest bei einer geraden zahl, wäre ja 0.
Nene, das ist so falsch..
1. Du hast das $ bei der zweiten if-Abfrage vergessen
2. Du hast das Semikolon nach echo vergessen:<?php echo 'bla'; ?>
(3. Brauchst du die zweite if-Abfrage nicht...)
So ist es richtig:
<?php $zahl=rand(1,100); $rest=$zahl % 2; if ($rest == 0) { echo 'die Zahl ist gerade'; } else { echo 'die zahl ist ungerade'; } ?>
Beitrag geaendert: 16.3.2007 19:44:11 von sesch
sesch schrieb:
hey zwiebedoener
ich habe nochmal nachgeschaut. am besten ich zeige dir ein beispiel:
<?php $zahl=rand(1,100); $rest=$zahl % 2; if ($rest==1) { echo 'die Zahl ist ungerade' } if (rest==0) { echo 'die zahl ist gerade' } ?>
das prozentzeichen rechnet den rest aus.
das bedeutet wenn $zahl eine ungerade zahl wäre, wäre der rest eins und somit schriebt der computer, dass es ungerade ist und der rest für die gerade zahl wäre ja 0, also schreibt es dann, dass es gerade ist, weil der rest bei einer geraden zahl, wäre ja 0.
Nene, das ist so falsch..
1. Du hast das $ bei der zweiten if-Abfrage vergessen
2. Du hast das Semikolon nach echo vergessen:<?php echo 'bla'; ?>
(3. Brauchst du die zweite if-Abfrage nicht...)
So ist es richtig:
<?php $zahl=rand(1,100); $rest=$zahl % 2; if ($rest == 0) { echo 'die Zahl ist gerade'; } else { echo 'die zahl ist ungerade'; } ?>
Danke, war nur schreibfehler
-
Wenn du den Modulo-Divisor verwenden willst, kann man das noch verkürzen:
<?php $zahl=rand(1,100); if ($zahl % 2) { echo 'die Zahl ist ungerade'; } else { echo 'die zahl ist gerade'; } ?>
-
das geht doch nicht. denn, du hast ihn den befehl gegeben den rest auszurechnen.
Und jetzt, was bringt dir dann der if befehl. er wird beide antworten schreiben.
du musst es abändern:
<?php if ($zahl % 2==1) { echo "zahl ist ungerade"; } else { echo "zahl ist gerade"; } ?>
-
das geht doch nicht. denn, du hast ihn den befehl gegeben den rest auszurechnen.
Und jetzt, was bringt dir dann der if befehl. er wird beide antworten schreiben.
du musst es abändern:
<?php if ($zahl % 2==1) { echo "zahl ist ungerade"; } else { echo "zahl ist gerade"; } ?>
Nein, meine Lösung stimmt schon so ;)
Wenn du mir nicht glaubst, dann probier es doch mal aus, indem du anstatt $zahl=rand(1,100); einfach $zahl=8; eingibst ;)
Er kann gar nicht beide Antworten schreiben: Es wird zuerst die if ($zahl % 2)-Bedingung abgearbeitet, und wenn diese true ist (sie ist true oder 1, wenn die Zahl ungerade ist, da dann Rest 1 rauskommt und 1 ist true), dann werden NUR die ersten geschweiften Klammern ausgeführt, ist die if ($zahl % 2)-Bedingung aber false (0 = false), dann wird else {...} abgearbeitet.
<?php $zahl=rand(1,100); if ($zahl % 2) { echo 'die Zahl ist ungerade'; } else { echo 'die zahl ist gerade'; } ?>
Beitrag geaendert: 17.3.2007 14:19:01 von sesch -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage