php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger

PHP Einsteiger PHP Problemlösungen für Spracheinsteiger
Archive: 2004, 2004/2, 2005, 2005/2, 2006, 2007, 2008, 2009, 2010,

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 23.01.2012, 08:12  
Neuer Benutzer
 
Registriert seit: 23.01.2012
Beiträge: 15
PHP-Kenntnisse:
Anfänger
Momk befindet sich auf einem aufstrebenden Ast
Standard Problem mit einer Schleife

Ich habe ein Problem, ich habe eine Schleife gemacht, diese soll länger als 30 Sekunden laufen, was ja nur erfolgen kann wenn der Browser zwichendurch eine Rückmeldung bekommt. Das ist mein Problem momentan, villeicht kann mir ja jemand sagen wie ich das machen könnte...
Es soll halt am Ende bei allen eine Positive Zahl rauskommen, bzw. bei den Unwissenden soll keiner mehr übrig sein. So das alle am Ende wissend sind, oder halt schweigend...
PHP-Code:
<?php
    $anzahlWissende 
1;
    
$anzahlUnwissende 349;
    
$anzahlSchweiger 0;
    
$anzahlDurchgänge 0;
    
$wissendePositiv 1;
    while(
$wissendePositiv == 1)
        {
        while(
$anzahlUnwissende)
            {
                
$zufall rand(1,9);
                
$anzahlDurchgänge $anzahlDurchgänge 1;
                if(
$wissendePositiv 0//w-w = s-s
                    
{
                        
$anzahlWissende $anzahlWissende 2;
                        
$anzahlSchweiger $anzahlSchweiger 2;
                    }
                    else if(
$zufall == 2//w-u = w-w
                        
{
                            
$anzahlWissende $anzahlWissende 1;
                            
$anzahlUnwissende $anzahlUnwissende 1;
                        }
                    else if(
$zufall == 3//w-s = s-s
                        
{
                            
$anzahlWissende $anzahlWissende 1;
                            
$anzahlSchweiger $anzahlSchweiger 1;
                        }
                    else if(
$zufall == 4//u-w = u-w
                        
{
                            
//nichts
                        
}
                    else if(
$zufall == 5//u-u = u-u
                        
{
                            
//nichts
                        
}
                    else if(
$zufall == 6//u-s = u-s
                        
{
                            
//nichts
                        
}
                    else if(
$zufall == 7//s-w = s-s
                        
{
                            
$anzahlSchweiger $anzahlSchweiger 1;
                            
$anzahlWissende $anzahlWissende 1;
                        }
                    else if(
$zufall == 8//s-u = s-u
                        
{
                            
//nichts
                        
}
                    else if(
$zufall == 9//s-s = s-s
                        
{
                            
//nichts
                        
}
                        if(
$anzahlWissende 0)
                            {
                                
$wissendePositiv 0;
                            }
                            echo 
"1"//Die 1 dient als Ausgabe, damit der Browser nicht nach 30 Sekunden streikt.
            
}
            echo 
"1"//Die 1 wieder als Ausgabe für den Browser.
        
}
        
    echo 
"<p>Die Zahl der Wissenden lautet:</p>";
        echo 
$anzahlWissende;
    echo 
"<p>Die Zahl der Unwissenden lautet:</p>";
        echo 
$anzahlUnwissende;
    echo 
"<p>Die Zahl der Schweiger lautet:</p>";
        echo 
$anzahlSchweiger;
    echo 
"<p>Die Anzahl der Durchgänge lautet</p>";
        echo 
$anzahlDurchgänge;
?>
Momk ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 23.01.2012, 08:44  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Zitat:
Zitat von Momk Beitrag anzeigen
was ja nur erfolgen kann wenn der Browser zwichendurch eine Rückmeldung bekommt.
Warum?

Zitat:
Zitat von Momk Beitrag anzeigen
villeicht kann mir ja jemand sagen wie ich das machen könnte...
flush (dabei auch den Hinweis zum Internet Explorer beachten!)
fab ist offline   Mit Zitat antworten
Alt 23.01.2012, 08:45  
Erfahrener Benutzer
 
Benutzerbild von Arne Drews
 
Registriert seit: 22.04.2009
Beiträge: 3.486
PHP-Kenntnisse:
Anfänger
Arne Drews wird schon bald berühmt werdenArne Drews wird schon bald berühmt werden
Arne Drews eine Nachricht über Skype™ schicken
Standard

Die gewünschte Rückmeldung kannst Du erreichen, wenn Du es über einen ajax-request löst.
Allerdings verstehe ich nicht, warum die Schleife min. 30sek. laufen soll.
Wenn die 3sek. braucht ist die schon lahm...
__________________
Phantasie ist wichtiger als Wissen, denn Wissen ist begrenzt.
Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.
Albert Einstein
Arne Drews ist offline   Mit Zitat antworten
Alt 23.01.2012, 08:49  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

@Arne: Dachte ich auf den ersten Blick auch aber ich lasse das Skript gerade in der Konsole laufen, weil mich interessiert, was da überhaupt passiert. Bis jetzt ist es noch nicht fertig, trotz Millionen von Einsen
fab ist offline   Mit Zitat antworten
Alt 23.01.2012, 08:50  
Neuer Benutzer
 
Registriert seit: 23.01.2012
Beiträge: 15
PHP-Kenntnisse:
Anfänger
Momk befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von fab Beitrag anzeigen
Warum?
Weil sonst die Schleife nach 30 Sekunden streikt, was zu keinem Ergebnis führt...


flush (dabei auch den Hinweis zum Internet Explorer beachten!)
Danke, ich sehe mir das mal an
Momk ist offline   Mit Zitat antworten
Alt 23.01.2012, 08:57  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

So, und jetzt habe ich mir den Code auch näher angesehen und das Skript daraufhin abgebrochen, das kann gar nicht mehr terminieren! Deine Abbruchbedingung enthält, dass $anzahlWissende größer als 0 ist, du ziehst allerdings doppelt so häufig 1 ab wie du 1 addierst. Wenn also nicht gerade am Anfang, als $anzahlWissende noch 1 ist (oder nach einigen wenigen Durchgängen in denen noch mehr addiert als subtrahiert wurde) die 9 getroffen wird, hast du keine Chance mehr.

Anders gesagt: Entweder ist das Skript nach MAXIMAL wenigen Sekunden fertig oder es rennt in eine Endlosschleife.
fab ist offline   Mit Zitat antworten
Alt 23.01.2012, 08:59  
Neuer Benutzer
 
Registriert seit: 23.01.2012
Beiträge: 15
PHP-Kenntnisse:
Anfänger
Momk befindet sich auf einem aufstrebenden Ast
Standard Es ist möglich...

Es ist möglich, ein Freund hat die gleiche Aufgabe, er löst sie mit Java - und er hat jedes mal erfolg...

Leider hat das mit dem Flush auch nicht geklappt...

PS:
Es ist auch egal wenn die Zaheln während der Rechung ins Minus geraten, solange sie am Ende wieder Positiv sind, bzw die Unwissenden auf 0...

Geändert von Momk (23.01.2012 um 09:02 Uhr).
Momk ist offline   Mit Zitat antworten
Alt 23.01.2012, 09:01  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Vielleicht hat er die gleiche Aufgabe aber sicher nicht den selben Algorithmus. Ich weiß nicht, was du da darstellen willst, daher kann ich dir nicht sagen, WO der Bug ist aber irgendein Detail hast du offenbar verkehrt.
fab ist offline   Mit Zitat antworten
Alt 23.01.2012, 09:09  
Neuer Benutzer
 
Registriert seit: 23.01.2012
Beiträge: 15
PHP-Kenntnisse:
Anfänger
Momk befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von fab Beitrag anzeigen
Vielleicht hat er die gleiche Aufgabe aber sicher nicht den selben Algorithmus. Ich weiß nicht, was du da darstellen willst, daher kann ich dir nicht sagen, WO der Bug ist aber irgendein Detail hast du offenbar verkehrt.
Also, die Aufgabe:
Ich habe 350 Mitarbeiter, einer davon weiss etwas (z.b. ein Gerücht) und soll dies weiter geben. 349 sind demnach unwissend.
Nun soll ich einen Code machen, der es mir erlaubt zu sehen wie viele Gespräche zwischen Unwissenden, Wissenden und Schweigern vollbracht werden müssen, damit JEDER entweder Schweiger oder Wissender ist.

Schweiger haben eigenschaften:
Sie Wissen es, verschweigen es aber, aus Desinteresse.
Unwissende bzw. Wissende sollten sich selbst erklären...

Bei den Gesprächen gelten folgende Regeln:
(w=Wissender u=Unwissender s=Schweiger)
vorher = nacher
w-w = s-s
w-u = w-w
w-s = s-s
u-w = w-w
u-u = u-u
u-s = u-s
s-w = s-s
s-u = s-u
s-s = s-s

€dit:
Ich probiere es nun mal mit Arrays, villeicht habe ich da mehr erfolg

Geändert von Momk (23.01.2012 um 09:42 Uhr).
Momk ist offline   Mit Zitat antworten
Alt 23.01.2012, 09:53  
fab
Erfahrener Benutzer
 
Benutzerbild von fab
 
Registriert seit: 28.07.2010
Beiträge: 2.308
PHP-Kenntnisse:
Fortgeschritten
fab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblickfab ist ein Lichtblick
Standard

Dann steckt der Fehler aber schon ganz tief im Konzept, du kannst nicht einfach davon ausgehen dass die Wahrscheinlichkeiten von (wissend, unwissend, schweigend) bei zwei Personen die sich treffen, die ganze Zeit über gleich verteilt ist. Die ist immer davon abhängig, wie viele es jeweils gibt. Beispiele:

Code:
1 Wissender
99 Unwissende
0 Schweigende

p(w-u) =  1 %
p(u-u) = 99 %
Code:
2 Wissende
98 Unwissende
0 Schweigende

p(w-w) = ~ 0,01 %
p(w-u) = ~ 3,97 %
p(u-u) = ~96,02 %
fab ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] While Schleife Link Problem Quarcs PHP Tipps 2010 11 30.10.2010 23:22
Schleife Problem wahrscheinlich .... amadeus75 PHP Tipps 2010 31 30.09.2010 23:03
Problem mit Zufallszahl und Schleife in Sql Datenbank sanofiaaventis PHP Tipps 2010 7 05.09.2010 21:09
[Erledigt] Problem mit function in FPDF Schleife fulltilt PHP Tipps 2010 3 26.04.2010 19:33
[Erledigt] Problem mit Schleife in der Schleife 1234d1 PHP Tipps 2009 4 16.06.2009 10:31
Formular in Schleife Problem deathhholly PHP Tipps 2009 10 16.06.2009 08:32
Problem mit while schleife adrian2005 PHP Tipps 2009 6 20.02.2009 15:51
Problem mit While Schleife: Daten aus 2 Tabellen ausgeben Tele10 PHP Tipps 2009 11 10.01.2009 14:15
[Erledigt] Problem: PHP Selbe Datei mehr als 1 Mal soulan PHP Tipps 2008 13 28.11.2008 22:51
Problem mit einer Schleife? petja PHP Tipps 2008 8 25.11.2008 18:52
Problem bei einer while Schleife Sini PHP Tipps 2008 5 22.11.2008 20:03
schleifen problem amsele1986 PHP Tipps 2008 3 21.06.2008 17:45
While schleife mit Datenbank in ein Dropdown Feld (Umlaut Problem) kintaro PHP Tipps 2008 6 28.08.2007 19:11
Problem mit FOR Schleife PHP Tipps 2007 4 02.12.2005 13:18
problem mit for schleife und str_replace PHP Tipps 2005 7 23.01.2005 23:51


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:35 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum