לוגו אתר Fresh          
 
 
  אפשרות תפריט  ראשי     אפשרות תפריט  צ'אט     אפשרות תפריט  מבזקים     אפשרות תפריט  צור קשר     חץ שמאלה ‎print ‎"Hello World!"; if‎ ‎not rules.‎know ‎then rules.‎read(); חץ ימינה  

לך אחורה   לובי הפורומים > מחשבים > תכנות ובניית אתרים
שמור לעצמך קישור לדף זה באתרי שמירת קישורים חברתיים
תגובה
 
כלי אשכול חפש באשכול זה



  #11  
ישן 15-07-2009, 18:00
  oc666 oc666 אינו מחובר  
 
חבר מתאריך: 26.01.04
הודעות: 613
שלח הודעה דרך ICQ אל oc666
בתגובה להודעה מספר 9 שנכתבה על ידי tsachibenezra שמתחילה ב "אני מבין מה עשית אבל אתה..."

ציטוט:
במקור נכתב על ידי tsachibenezra
אני מבין מה עשית אבל אתה משאיר את ההסתברות כל הזמן 1 מתוך 15

אני צריך להגריל 3 מספרים בכל לחיצה על כפתור ואני חייב שההסתברויות היהיו שונות

הוצאת מספר מסויים מתוך 15 זאת הסתברות נמוכה יותר מהוצאת מספר מתוך 14 וכו'

תודה


אני אכתוב לך את האלגוריתם במילים.
1. תיצור מערך בגודל 15 שיהיה מלא ב-true בהתחלה.
2. תגריל בין מספר 1 ל-15.
3. שים לב פה בא הטריק: תרוץ על התאים מהראשון עד למספר שהגרלת כאשר תאים שיש בהם false אינם נספרים.
4. תגריל שוב מספר בין 1 ל-14 ושוב תחזור על הטריק.
5. תבצע זאת עד שתגיע ל-0.

והנה הקוד (שים לב - הקוד לא נבדק; התייחס אליו כפסאודו קוד):
קוד PHP:
<?php
$max_value
=15;
$a=array_fill(1,$max_value,1);
$i=$max_value;
while(
$i)
{
     
$r=rand(1,$i);
     
$index=0
     
$true_index=0;
     while(
$r!=$true_index) if($a[++$index]==1$true_index++;
     
$a[$index]=0;
     echo 
"random no ".($max_value+1-$i)." is ".$index."<br/>";                            
     
$i--;
}
?>

האלגוריתם הזה די בזבזני (אם תשים מספר
_____________________________________
הבלוג החדש שלי
ג'ומלה ישראל

תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #20  
ישן 16-07-2009, 19:56
  GreenBerret GreenBerret אינו מחובר  
 
חבר מתאריך: 13.12.05
הודעות: 1,963
בתגובה להודעה מספר 19 שנכתבה על ידי dorM שמתחילה ב "למען האמת מעולה :) חוסך את..."

אני לא חושב שהפתרונות שלנו דומים.

הפתרון שלי מתבסס על קומבינטוריקה פשוטה.
כאשר PHP מערבב (shuffle) את המערך, למקום הראשון יש 15 מספרים (אפשרויות) שיכולים להיכנס.
למקום השני יש 14 מספרים שיכולים להיכנס, וכך הלאה.
כל מה שנשאר הוא פשוט לבחור את כמות האיברים הרצויה (array_slice).

האמת שזה גם לא משנה איזה איבר אתה בוחר. עצם הבחירה שלך משנה את ההסתברות.
אם תבחר את האיבר האחרון מהמערך, בגלל שהוא נבחר ראשון, יש לך 15 אפשרויות של מה שיצא בו כי אתה לא באמת יודע מה יש בו.
אם את האיבר השני שלך תוציא (אחרי שהוצאת את הראשון מהסוף) מתחילת המערך, יש רק 14 מספרים שהוא יכול להיות.

נערך לאחרונה ע"י GreenBerret בתאריך 16-07-2009 בשעה 20:00.
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #21  
ישן 18-07-2009, 19:38
  משתמש זכר tsachibenezra tsachibenezra אינו מחובר  
 
חבר מתאריך: 06.06.07
הודעות: 749
בתגובה להודעה מספר 20 שנכתבה על ידי GreenBerret שמתחילה ב "אני לא חושב שהפתרונות שלנו..."

אני לא חושב שהבנתם אותי

או שאני לא הבנתי אותכם

אבל זה מה שאני בניתי

אני חושב שיש לי טעות שאני לא עולה עליה

אשמח לקבל עזרה

תודה

קוד PHP:
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
<
meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<
title>Untitled Document</title>
</
head>

<
body>
<?
php
function random($max)
{
    return 
rand(1,$max);
}

$numbers 25;
$lotteries 7;

$v = array();

for(
$i=1;$i<=$numbers;$i++)
{
    
$v[$i] = 'F';
}

echo 
'<br />';
echo 
'v array - [';
for(
$q=1;$q<$numbers;$q++)
{
    echo 
$v[$q];
    echo 
' , ';
}
echo 
']';
echo 
'<br />';
echo 
'+++++++++++++++++++++++++++++++++++++++++++++++++  +++++++++++';
echo 
'<br />';

$max_num $numbers;

for(
$n=1;$n<=$lotteries;$n++)
{
    
    
$r random($max_num);
    
$nv = array();
    
$count 1;
    for(
$t=1;$t<=($numbers);$t++)
    {
        if(
$v[$t] == 'F')
        {
            
$nv[$count] = $t;
            
$count++;
        }
    }
    
    echo 
'max_num - ' .$count;
    echo 
'<br />';
    echo 
'random from max_num - ' $r;
    echo 
'<br />';
    echo 
'v aray - [';
    for(
$q=1;$q<$numbers;$q++)
    {
        echo 
$v[$q];
        echo 
' , ';
    }
    echo 
']';
    echo 
'<br />';
    echo 
'all numbers of nv array - [';
    for(
$q=1;$q<$count;$q++)
    {
        echo 
$nv[$q];
        echo 
' , ';
    }
    echo 
']';
    echo 
'<br />';
    echo 
'THE LOTTERY NUMBER - ' .$nv[$r];
    
$v[$nv[$r]] = 'T';
    echo 
'<br />';
    echo 
'------------------------------';
    echo 
'<br />';
    
$max_num $numbers $n;
}
?>
</body>
</html> 
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
  #25  
ישן 19-07-2009, 23:47
  משתמש זכר tsachibenezra tsachibenezra אינו מחובר  
 
חבר מתאריך: 06.06.07
הודעות: 749
בתגובה להודעה מספר 24 שנכתבה על ידי GreenBerret שמתחילה ב "אין צורך לערבב את המערך כל..."

מה שבעצם אני רוצה לעשות זה לדמות מערכת שמגרילה מספרים

תחשבו על לוטו

יש בתוך המכונה X כדורים

ההסתברות ליציאה של מספר היא 1/X

ברגע שיצא כדור

ההסתברות היא 1/X-1

וכו וכו

אני חושב שהצלחתי לתקן את הבעיה שלי

אשמח שמישהו יבדוק את הקוד

תודה

קוד PHP:
 <!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot; &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;>
<html xmlns=&quot;http://www.w3.org/1999/xhtml&quot;>
<head>
<
meta http-equiv=&quot;Content-Type&quotcontent=&quot;text/htmlcharset=utf-8&quot; />
<
title>Untitled Document</title>
</
head>

<
body>
<?
php
function random($max)
{
    return 
rand(1,$max);
}

$numbers 10;
$lotteries 3;

$v = array();

for(
$i=1;$i<=$numbers;$i++)
{
    
$v[$i] = 'F';
}

echo 
'<br />';
echo 
'v array - [';
//for($q=1;$q<=$numbers;$q++)
foreach($v as $v_num)
{
    
//echo $v[$q];
    
echo $v_num;
    echo 
' , ';
}
echo 
']';
echo 
'<br />';
echo 
'+++++++++++++++++++++++++++++++++++++++++++++++++  +++++++++++';
echo 
'<br />';

$max_num = ($numbers);

for(
$n=1;$n<=$lotteries;$n++)
{
    
    
$r random($max_num);
    
$nv = array();
    
$count 0;
    for(
$t=1;$t<=($numbers);$t++)
    {
        if(
$v[$t] == 'F')
        {
            
$nv[$count] = $t;
            
$count++;
        }
    }
    
    
shuffle($nv);
    
    echo 
'max_num - ' .$count;
    echo 
'<br />';
    echo 
'random from max_num - ' $r;
    echo 
'<br />';
    echo 
'v aray - [';
    
//for($q=1;$q<=$numbers;$q++)
    
foreach($v as $v_num)
    {
        echo 
$v_num;
        
//echo $v[$q];
        
echo ' , ';
    }
    echo 
']';
    echo 
'<br />';
    echo 
'all numbers of nv array - [';
    
//for($q=1;$q<=$count;$q++)
    
foreach($nv as $nv_num)
    {
        echo 
$nv_num;
        
//echo $nv[$q];
        
echo ' , ';
    }
    echo 
']';
    echo 
'<br />';
    echo 
'THE LOTTERY NUMBER - ' .$nv[$r-1];
    
$v[$nv[$r-1]] = 'T';
    echo 
'<br />';
    echo 
'------------------------------';
    echo 
'<br />';
    
$max_num $numbers $n;
}
?>
</body>
</html> 
תגובה ללא ציטוט תגובה עם ציטוט חזרה לפורום
תגובה

כלי אשכול חפש באשכול זה
חפש באשכול זה:

חיפוש מתקדם
מצבי תצוגה דרג אשכול זה
דרג אשכול זה:

מזער את תיבת המידע אפשרויות משלוח הודעות
אתה לא יכול לפתוח אשכולות חדשים
אתה לא יכול להגיב לאשכולות
אתה לא יכול לצרף קבצים
אתה לא יכול לערוך את ההודעות שלך

קוד vB פעיל
קוד [IMG] פעיל
קוד HTML כבוי
מעבר לפורום



כל הזמנים המוצגים בדף זה הם לפי איזור זמן GMT +2. השעה כעת היא 03:53

הדף נוצר ב 0.18 שניות עם 10 שאילתות

הפורום מבוסס על vBulletin, גירסא 3.0.6
כל הזכויות לתוכנת הפורומים שמורות © 2024 - 2000 לחברת Jelsoft Enterprises.
כל הזכויות שמורות ל Fresh.co.il ©

צור קשר | תקנון האתר