הוסטס - פורום אחסון האתרים הגדול בישראל

הוסטס - פורום אחסון האתרים הגדול בישראל (https://hosts.co.il/forums/index.php)
-   פורום תיכנות (https://hosts.co.il/forums/forumdisplay.php?f=14)
-   -   עזרה [php] - תפריט אקראי (https://hosts.co.il/forums/showthread.php?t=18786)

amirs_5 31-03-06 20:02

עזרה [php] - תפריט אקראי
 
אתם זוכרים תאשכול הקודם שלי , אז חשבתי שהצלחתי אבל לא , אז ניסיתי אני ליצור מחדש קוד ולא הצליח לי ...
אממ .. אז ככה למי שלא יודע את הבעיה אני יפרט :
אני רוצה שכל פעם הפלט יהיה 5 מספרים רנדומליים.
לא יהיה אותו מספר פעמיים.
וכל המספרים המוגדרים חייבים להראות .
לדוגמא :
12534
25413
23154
וכו..

טוב אז הקוד שרשמתי זה...
PHP קוד:

$cheak = array( '1'   => "0",
          
'2'  => "0",
          
'3'  => "0",
          
'4'  => "0",
          
'5' => "0"
                       
);

$p 1;
 for(
$i=1;$i<=5;$i++) { 
    
$r rand (1,5);
    
$cheak['$r'] = $cheak['$r']++; 
 if(
$cheak['$r'] != $p) { 
    
$cheak['$r'] = $cheak['$r']--;
    
$r rand (1,5);
    
$cheak['$r'] = $cheak['$r']++; 
}
  echo 
$r."<br />";
 } 

עכשיו אני יסביר את המטרה שלו .
הוא רץ 5 פעמים .(בשביל שיהיה את ה5 מספרים.)
אח"כ הגרלת מס' רנדומלי .
לדוגמא יצא 3 , אז במערך cheak['3']; יהיה 1.
ואז הוא ידפיס על המסף את המספר הזה .
אח"כ בסיבוב השני של הלולאה אם ברנד יצא עוד פעם 3 , אז הcheak['3']; יהיה 2.
ואז בתנאי הוא יבדוק שבמקום ש cheak['3']; לא שווה ל1.
אז הוא יוריד את ה 2 ל 1 .
ואז הוא יגריל מס' רנדומלי אחר , שכאשר יצא נגיד 4 הוא יעשה לו ++ . וידפיס אותו וככה הקוד שרציתי יעבוד .
עכשיו יש לי מזה בעיה עם זה תמיד יוצאים לי פלטים כגון:
2
2
4
5
5

למה ?!

mlnn 31-03-06 20:10

אתה רוצה שהמספרים יכילו רק את 12345?
או שאפשר גם מספרים אחרים?

טוב, הנה קוד פשוט שלא בודק אם כבר יש את המספר אבל אני בספק אם זה יצא שיהיה אותו מספר פעמיים.
ההסתברות מאוד מאוד קטנה.

קוד:

for($x=1;$x<=5;$x++) {
for($i=1;$i<=5;$i++) {
echo rand (1,5);
}
echo "<br>";
}


LosNir 31-03-06 20:44

תנסה ככה:

PHP קוד:

<?
$min 
1;
$max 5;
$rand[1] = rand ($min,$max);
$rand[2] = rand ($min,$max);
$rand[3] = rand ($min,$max);
$rand[4] = rand ($min,$max);
$rand[5] = rand ($min,$max);
while(
$rand[1] == $rand[2] OR $rand[1] == $rand[3] OR $rand[1] == $rand[4] OR $rand[1] == $rand[5])
{
$rand[1] = rand ($min,$max);
}
while(
$rand[2] == $rand[1] OR $rand[2] == $rand[3] OR $rand[2] == $rand[4] OR $rand[2] == $rand[5])
{
$rand[2] = rand ($min,$max);
}
while(
$rand[3] == $rand[2] OR $rand[3] == $rand[1] OR $rand[3] == $rand[4] OR $rand[3] == $rand[5])
{
$rand[3] = rand ($min,$max);
}
while(
$rand[4] == $rand[2] OR $rand[4] == $rand[3] OR $rand[4] == $rand[1] OR $rand[4] == $rand[5])
{
$rand[4] = rand ($min,$max);
}
while(
$rand[5] == $rand[2] OR $rand[5] == $rand[3] OR $rand[5] == $rand[4] OR $rand[5] == $rand[1])
{
$rand[5] = rand ($min,$max);
}
$final "$rand[1]$rand[2]$rand[3]$rand[4]$rand[5]";
echo 
"$final";
?>

סקריפט טיפה מסובך לכתיבה, אבל להבנה די קל,
אבל זה הרעיון היחיד והיעיל שמצאתי, הוא בחיים לא יחזיר מספר פעמים,
רצוי לאנקלד את הקובץ כי הוא יסבך לך את הסקריפט.
וחשוב לציין שהוא לא לוקח כ"כ הרבה זמן לטעינה.

הערה: אני הבאתי קוד מכיוון שסקריפט כזה די קשה לכתוב במילים, אבל הכוונה שלי כאן, שתלמד מהסקריפט ואם אתה רוצה גם להשתמש בו.

דוגמה: http://lol.israel-serv.net/rand.php
שים לב שהוא בחיים לא יחזיר את אותה התוצאה פעמים.

עריכה: הקוד עודכן

amirs_5 31-03-06 21:16

פש ניר אחי תודה רבה, אבל האמת יש לי קצת בעיה עם הקוד ..
לא אמרתי בהתחלה כי זה לא היה חשוב , אבל זה נועד לתפריט שכל פעם מוסיפים דברים , וזה לא יהיה דווקא 5 , יכול להיות 7 או 10 ותמיד לעדכן זה בעיה , אם לא יהיה לי פתרון אני ישתמש בזה תודה רבה :)
ואם אתה יודע מה הבעיה בקוד שלי כי הוא גם נראה לי בסדר ואני מסתבך איתו כל כך ..

LosNir 31-03-06 21:20

ציטוט:

נכתב במקור על ידי amirs_5
פש ניר אחי תודה רבה, אבל האמת יש לי קצת בעיה עם הקוד ..
לא אמרתי בהתחלה כי זה לא היה חשוב , אבל זה נועד לתפריט שכל פעם מוסיפים דברים , וזה לא יהיה דווקא 5 , יכול להיות 7 או 10 ותמיד לעדכן זה בעיה , אם לא יהיה לי פתרון אני ישתמש בזה תודה רבה :)
ואם אתה יודע מה הבעיה בקוד שלי כי הוא גם נראה לי בסדר ואני מסתבך איתו כל כך ..

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

עריכה:

למה אתה מתכוון שלא יהיה תמיד חמש?
חמש משתנים? או עד חמש מספרים בכל משתנה?

amirs_5 31-03-06 21:28

ציטוט:

נכתב במקור על ידי LosNir
אני לא יודע מה הבעיה בקוד שלך, כי הסתבכתי איתו ואני גם לא יתכוון לבדוק (בזבוז זמן).
ואני ישדרג את הסקריפט ויערוך.

עריכה:

למה אתה מתכוון שלא יהיה תמיד חמש?
חמש משתנים? או עד חמש מספרים בכל משתנה?

לא הבנת אחי , אתה עשית קוד מצויין , אבל הוא ל5 .
ואני כל פעם יצטרך להוסיף משהו לתפריט וזה יככול להגיע גם ל 10 ול 12.
כאילו שלא כל פעם אני יעשה
PHP קוד:

$rand[1] = rand ($min,$max);
.........
.........
.........
.........
.........
.........
.........
.........
$rand[12] = rand ($min,$max); 

מבין ?

LosNir 31-03-06 21:31

ציטוט:

נכתב במקור על ידי amirs_5
לא הבנת אחי , אתה עשית קוד מצויין , אבל הוא ל5 .
ואני כל פעם יצטרך להוסיף משהו לתפריט וזה יככול להגיע גם ל 10 ול 12.
כאילו שלא כל פעם אני יעשה
PHP קוד:

$rand[1] = rand ($min,$max);
.................
$rand[12] = rand ($min,$max); 

מבין ?

אוקיי אז אתה מתכוון מספר משתנים.
כי תיראה, יש חמישה משתנים, בכל משתנה מוצב ערך רנדומלי בין 1 ל 5,
לאחר מכן יש לולאות שבודקות אם המספר חזר פעמים, אם כן אז הם מציבים שום ערך רנדומלי עד ששום מספר לא יוצא פעמים, אחר כך אני מכניס את כל המשתנים למשתנה אחד ומדפיס אותו,
ככה שאם תשים עוד משתנה ועוד לולאה, אז הקוד שהוא ידפיס יהיה פשוט יותר ערוך, לדוגמה:

במקום להדפיס: 123456
הוא יכול להדפיס: 1234563
מבין?
ככה שהמספר הנוסף שהוא יכניס יהיה 3, והערך שלו יהיה רק מ 1 עד 5,
אני מקווה שהבנת ושזה בסדר בשבילך, אני מתחיל עכשיו בעריכת הקוד.


עריכה:

אני מצטער אך זה לא אפשרי בדרך שהשתמשתי, כי צריך לערוך את הקוד בהתאם למשתנים, וזה לא אפשרי.

amirs_5 31-03-06 21:35

ציטוט:

נכתב במקור על ידי LosNir
אוקיי אז אתה מתכוון מספר משתנים.
כי תיראה, יש חמישה משתנים, בכל משתנה מוצב ערך רנדומלי בין 1 ל 5,
לאחר מכן יש לולאות שבודקות אם המספר חזר פעמים, אם כן אז הם מציבים שום ערך רנדומלי עד ששום מספר לא יוצא פעמים, אחר כך אני מכניס את כל המשתנים למשתנה אחד ומדפיס אותו,
ככה שאם תשים עוד משתנה ועוד לולאה, אז הקוד שהוא ידפיס יהיה פשוט יותר ערוך, לדוגמה:

במקום להדפיס: 123456
הוא יכול להדפיס: 1234563
מבין?
ככה שהמספר הנוסף שהוא יכניס יהיה 3, והערך שלו יהיה רק מ 1 עד 5,
אני מקווה שהבנת ושזה בסדר בשבילך, אני מתחיל עכשיו בעריכת הקוד.

לאא, אסור שיהיה 3 פעמים.
תחשוב ש3 זה בתפפריט משחקים .
אז פתאום יהיה :
תוכנות
משחקים
סרטים
משחקים
גראפיקה..
כאילו זה יופיע לי פעמיים XD וזה בעיה .. =]]

LosNir 31-03-06 21:40

ציטוט:

נכתב במקור על ידי amirs_5
לאא, אסור שיהיה 3 פעמים.
תחשוב ש3 זה בתפפריט משחקים .
אז פתאום יהיה :
תוכנות
משחקים
סרטים
משחקים
גראפיקה..
כאילו זה יופיע לי פעמיים XD וזה בעיה .. =]]

מצטער זו היתה פשוט דוגמה לא טובה..
נגיד במקום 3 בסוף יהיה 8

amirs_5 31-03-06 21:42

ציטוט:

נכתב במקור על ידי LosNir
מצטער זו היתה פשוט דוגמה לא טובה..
נגיד במקום 3 בסוף יהיה 8

למה 8 ולא 7 ?!

LosNir 31-03-06 21:47

ציטוט:

נכתב במקור על ידי amirs_5
למה 8 ולא 7 ?!

7 אוקיי? זה רק דוגמה!

amirs_5 31-03-06 21:49

ציטוט:

נכתב במקור על ידי LosNir
7 אוקיי? זה רק דוגמה!

|Lol| חחח =]
טוב .. אז איך זה הולך , תוכל לנסות להגיד לי מה הבעיה בקוד שלי ?

somebody 31-03-06 21:49

למה לא לעשות פשוט שני פונקציות, אחת שמוצאת מספר רנדומלי ובודקת לאורך כל המערך עד המקום אליו הגעת אליו את המספר הרנדומלי שיצא, אם הוא כבר קיים היא מחזירה FALSE ואתה מוצאי מספר חדש וגם אותו בודק, ואם אין אותו אתה מכניס אותו למערכת במקום המצאים וככה מתקדם בין התאים.

זאת הדרך לדעתי הכי יעילה.

אני לא אוכל לעזור לך כי אני לא יודע PHP אבל הרעיון בכל השפות הוא אותו הרעיון.

LosNir 31-03-06 22:05

ציטוט:

נכתב במקור על ידי somebody
למה לא לעשות פשוט שני פונקציות, אחת שמוצאת מספר רנדומלי ובודקת לאורך כל המערך עד המקום אליו הגעת אליו את המספר הרנדומלי שיצא, אם הוא כבר קיים היא מחזירה FALSE ואתה מוצאי מספר חדש וגם אותו בודק, ואם אין אותו אתה מכניס אותו למערכת במקום המצאים וככה מתקדם בין התאים.

זאת הדרך לדעתי הכי יעילה.

אני לא אוכל לעזור לך כי אני לא יודע PHP אבל הרעיון בכל השפות הוא אותו הרעיון.

זה בדיוק מה שעשיתי, אבל הוא רוצה גם שיוכלו להגדיר את מספר המשתנים, ולעשות לכל אחד בדיקה, אבל הבעיה שהבדיקה מתבצע בלולאה, ובלולאה אני בודק את כל המספרים חוץ ממה שאני משווה אליו, אבל הבעיה שאני לא יכול להוסיף כל פעם
PHP קוד:

.... OR $rand[6] == $rand[7

אז זה הבעיה, וזה פשוט לא אפשרי.

Eye-Soft 31-03-06 22:07

אממ, זה הרעיון הכללי. אני לא מתכנת PHP, אז עשיתי את זה לפי הידע הדל שיש לי בPHP.
PHP קוד:

$bottom=1;
$top=5;
$n=bottom;
$rann[5]=0;
//איפוס המערך
for ($n=$bottom;$n<$top+1;$n++) {
$rann[$n]=0;
}
$n=1;
$i=1;
while 
n<{
$rann[$n]=rand($bottom,$max);
$same=false;
while ((
$i<$n+1) && ($same==false) {
if (
$rann[i]==$rann[n]) {
    
$same=true
}
}
if (
$same==false) {
$n++;
}



meshuga 31-03-06 22:19

כותרת עניינית, לשלוח לי בפרטי, נעול עד אז.

amirs_5 01-04-06 00:20

אוקיי תודה שי , עכשיו אני רוצה לחזור לתגובה של Eye-Soft .
תסתכל אחי אתה רשמת
if ($rann[i]==$rann[n]) {
$same=true
}
תמיד יהיה true .

ובסוף הקוד רשמת

if ($same==false) {
$n++;

מוזר... אתה בטוח?

yarin 01-04-06 00:29

תראה אני לא מבין בPhp אבל הגיונית אתה יכול לשים שדה שירשמו בו כמה מספרים הם כותבים..ואז לפי זה הלולא תרוץ..
הבנתה אחי?

Eye-Soft 01-04-06 00:51

ציטוט:

נכתב במקור על ידי amirs_5
אוקיי תודה שי , עכשיו אני רוצה לחזור לתגובה של Eye-Soft .
תסתכל אחי אתה רשמת
if ($rann[i]==$rann[n]) {
$same=true
}
תמיד יהיה true .

ובסוף הקוד רשמת

if ($same==false) {
$n++;

מוזר... אתה בטוח?

כן, אני בטוח. זה לא יהיה true אלא אם זה אותו המספר. ראה שאני תמיד "מאפס" את המשתנה בכל תחילת לולאת תנאי (while).
הקוד תקין, הבעיה (אם יש כזו) היא העובדה שאני לא יודע PHP טוב ויש סיכוי שכתבתי משהו לא נכון, אבל כל המשתנים והקוד נכון. הדבר היחידי שיהיה לא נכון זה אם כתבתי את המילות קוד לא נכון.
רק צריך לשנות את הקוד ב"while (($i<$n+1) && ($same==false) {"
ל
while (($i<$n) && ($same==false) {

amirs_5 01-04-06 18:22

אבל התנאי
if ($rann[i]==$rann[n]) {
$same=true
}
תמיד יהיה true .
בגלל זה הקוד לא יעבוד.

Eye-Soft 01-04-06 20:57

לא הוא לא :|
I לא שווה לN...
ו ל1 ועד N, לא כולל N....


כל הזמנים הם GMT +2. הזמן כעת הוא 03:21.

מופעל באמצעות VBulletin גרסה 3.8.6
כל הזכויות שמורות ©
כל הזכויות שמורות לסולל יבוא ורשתות (1997) בע"מ