ABA


"צריך עזרה בעבודת הגשה בשפת C"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #10215 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 10215
bodipo
חבר מתאריך 18.2.06
3976 הודעות
   14:14   03.01.11   
אל הפורום  
  צריך עזרה בעבודת הגשה בשפת C  
 
   אני צריך לעשות את זה:
לוח המשחק מתואר ע"י מערך דו-ממדי (מטריצה) בגודל NxM כאשר כל משבצת במערך יכולה להיות במצב alive או dead.

בכל שלב של המשחק המטריצה תיעודכן לפי הכללים הבאים:
עבור כל אחד מהתאים במטריצה בודקים:

עבור משבצת במצב alive :
1) אם מספר השכנים שלו קטן/שווה ל-1 או גדול/שווה ל-4, הוא יהפוך ל-dead.
2) אם מספר השכנים שלו שווה ל-2 או 3, אז הוא נשאר במצב בו היה.

עבור משבצת במצב dead:
1) אם מספר השכנים שלו שווה ל-3, הוא יהפוך ל-alive.
2) אם מספר השכנים שלו לא שווה ל-3, הוא נשאר במצב בו היה.

בסוף כל שלב יש להדפיס את המטריצה שהתקבלה (ניתן לציין את המצב alive ע"י כוכבית ואת המצב dead ע"י משבצת ריקה). המשתמש יחליט האם להמשיך את המשחק או לא.
במקרה שמטריצה זהה למטריצה קודמת יש להפסיק את המשחק.

יש לבצע קליטת נתונים למטריצה ההתחלתית בשתי דרכים: באופן רנדומלי ובהקשת נתונים ע"י המשתמש.

בונוס: במקרה שמטריצה זהה למטריצה קודמת שהייתה לפני k שלבים (k>1) יש להפסיק את המשחק.

תודה לעוזרים


                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  אתה מצפה שתכתוב פה תרגיל ואנשים פשוט יפתרו ג'וני הקטן 03.01.11 17:04 1
     צודק bodipo 03.01.11 17:10 2
         כמו הטלת מטבע.. VeNom  03.01.11 17:22 3
             אני מכיר את הפקודה rand bodipo 03.01.11 17:30 4
                 כי צריך להוסיף משהו VeNom  03.01.11 17:52 5
  נתקעתי בשלב האחרון של התרגיל bodipo 04.01.11 23:20 6
     מכתב VeNom  05.01.11 01:08 7
         תודה bodipo 05.01.11 13:07 8
             לא קריטי בכלל בשבילך לדעת מה ההבדל, akoka2 05.01.11 23:43 9
                 כמה תיקונים Net_Boy  06.01.11 00:38 10
                     אני לא הכי בקיא בנושא, אבל לגבי 3 אני לא סגור akoka2 06.01.11 12:59 11
                         אוקי אני לא יודע כמה זה רלוונטי אבל ביצעתי בדיקה קטנה, akoka2 06.01.11 13:44 12
                             קיצר rand עשה אצלי עבודה ממש גרועה, akoka2 06.01.11 13:58 13
                             אבל לא מודדים סדרה רק ב-5 איברים וגם לא מודדים בטווח Net_Boy  07.01.11 15:36 15
  ד''א זה אלגוריתם מוכר, נקרא Game Of Life :) Dotan  06.01.11 18:40 14

       
ג'וני הקטן
חבר מתאריך 24.6.10
1166 הודעות
   17:04   03.01.11   
אל הפורום  
  1. אתה מצפה שתכתוב פה תרגיל ואנשים פשוט יפתרו  
בתגובה להודעה מספר 0
 
   תגיד תודה רבה ותגיש? זה לא עובד ככה וככה לא תלמד, לטובתך!
תגיד איפה נתקעת מה אתה לא מבין איפה אתה לא מצליח וישמחו לעזור לך

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
bodipo
חבר מתאריך 18.2.06
3976 הודעות
   17:10   03.01.11   
אל הפורום  
  2. צודק  
בתגובה להודעה מספר 1
 
   כהתחלה איך אני מגדיר למטריצה לקבל * או 0 בצורה רנדומלית?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
VeNom  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 7.6.02
7922 הודעות, 1 פידבק
   17:22   03.01.11   
אל הפורום  
  3. כמו הטלת מטבע..  
בתגובה להודעה מספר 2
 
   לא התעמקתי במשימה שנתנו לך..
אבל אתה יכול לבקש מהמחשב לעשות random ולבדוק..אם זה מעל חצי לשים * אחרת 0..


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
bodipo
חבר מתאריך 18.2.06
3976 הודעות
   17:30   03.01.11   
אל הפורום  
  4. אני מכיר את הפקודה rand  
בתגובה להודעה מספר 3
 
   אבל הבעיה היא שכל פעם שאני רושם לו טווח מסויים נגיד 0-1 אז הוא לא משנה את הערכים בהרצה חדשה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
VeNom  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 7.6.02
7922 הודעות, 1 פידבק
   17:52   03.01.11   
אל הפורום  
  5. כי צריך להוסיף משהו  
בתגובה להודעה מספר 4
 
   נגיד קח את זה:

int a , b, c;
srand ( time(NULL) );
a = rand() % 100;
b = rand() % 100;
c = rand() % 100;
printf("%d\n%d\n%d\n",a,b,c);
//how to put 0's and *'s in a random way.
if(a >= 50) printf("*\n");
else printf("0\n");


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
bodipo
חבר מתאריך 18.2.06
3976 הודעות
   23:20   04.01.11   
אל הפורום  
  6. נתקעתי בשלב האחרון של התרגיל  
בתגובה להודעה מספר 0
 
   void random_board(int board,int row, int col)
{
int x, y, tmp;
for (y = 0; y < row; y++)
for (x = 0; x < col; x++)
{
srand(time(NULL));
tmp=rand()%100;
if(tmp<50)
board=1;
else
board=0;
}

}

אני רוצה לקבל רנדומלית לוח מלא ב 1 ואפסים הבעיה בפונקציה הזו שאני מקבל לוח מלא או רק אחדים או רק אפסים.
איך אפשר לתקן בעיה זו?

תודה.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
VeNom  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 7.6.02
7922 הודעות, 1 פידבק
   01:08   05.01.11   
אל הפורום  
  7. מכתב  
בתגובה להודעה מספר 6
 
  

void random_board(int** board,int row, int col)
{
int x, y, tmp;
srand(time(NULL));
for (y = 0; y < row; y++)
for (x = 0; x < col; x++)
{
tmp = rand()%100;
if(tmp<50)
board[y][x]=1;
else
board[y][x]=0;
}
}


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
bodipo
חבר מתאריך 18.2.06
3976 הודעות
   13:07   05.01.11   
אל הפורום  
  8. תודה  
בתגובה להודעה מספר 7
 
   למה זה משנה אם ה-SRAND לפני הלולאה או בתוכה?


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka2

   23:43   05.01.11   
אל הפורום  
  9. לא קריטי בכלל בשבילך לדעת מה ההבדל,  
בתגובה להודעה מספר 8
 
   הדבר העיקרי שאני אגיד לך שאם הsrand היה בתוך הלולאה, זה היה עובד פחות מהר, ותופס יותר זיכרון, למרות שהמהירות זניחה במקרה הזה.

srand בתוך הלולאה היה מחזיר כול פעם seed שונה, והיה נותן לך רנדומליות טיפה יותר טובה.

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   00:38   06.01.11   
אל הפורום  
  10. כמה תיקונים  
בתגובה להודעה מספר 9
 
   1) אם יוסיף בלולאה זה לא יתפוס יותר מקום, זה אומנם יבצע עוד פעולה אבל כמובן שמבחינת זמן ריצה זה לא ישפיע.
2) אני לא יודע מה אתה מחשיב כרנדומליות טיפה יותר טובה , אבל זה לא משנה כלום. ההתפלגות תהיה אותה התפלגות.
3) אם תריץ SRAND עם SEED קבוע , תמיד הסדרה תהיה זהה.
ברגע ששמים TIME שזה מספר רץ שמייצג את הזמן שעבר מהראשון לראשון 1970 בשניות אתה תקבל תמיד סדרות שונות.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka2

   12:59   06.01.11   
אל הפורום  
  11. אני לא הכי בקיא בנושא, אבל לגבי 3 אני לא סגור  
בתגובה להודעה מספר 10
 
   על מה שאתה אומר, או שלא התנסחת נכון, אם אנחנו נשים את srand=TIME מחוץ ללולאה, ונדפיס מיליון מטריצות אחת אחרי השניה, מתי שהוא אנחנו נקבל מטריצות זהות לחלוטין.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka2

   13:44   06.01.11   
אל הפורום  
  12. אוקי אני לא יודע כמה זה רלוונטי אבל ביצעתי בדיקה קטנה,  
בתגובה להודעה מספר 11
 
   יצרתי לולאה עם 20K ריצות, בתוך הלולאה יצרתי עוד לולאה שרצה מ1 עד 5, יצרתי קבוצות בנות 5 מספרים "רנדומליים" כול אחת(כשמספרים יכולים ליהיות בין 0 לtime שהגדרנו בsrand).

אחרי 6553 ריצות, הסדרה התחילה לחזור על עצמה.

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

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
akoka2

   13:58   06.01.11   
אל הפורום  
  13. קיצר rand עשה אצלי עבודה ממש גרועה,  
בתגובה להודעה מספר 12
 
   עם time seed, עברתי להשתמש בmt_rand גם בקבוצות של 10 מספרים לא ראיתי חזרה אחת.

אין לי מושג איך זה עובד.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Net_Boy  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 1.4.02
17151 הודעות, 1 פידבק
   15:36   07.01.11   
אל הפורום  
  15. אבל לא מודדים סדרה רק ב-5 איברים וגם לא מודדים בטווח  
בתגובה להודעה מספר 12
 
   מצומצם.
התחום של rand הוא כגודלו המקסימלי והמינימלי של int.
כלומר כל מספר בין -2^32 עד 2^32
יש לך טווח של כ-4.3 מיליארד מספרים.

עבור כל מספר ב SEED תקבל סדרה אחרת (כאשר סדרה היא רצף של כל ה-4.3 מיליארד מספרים האלו)

קח סדרה קטנה יחסית (50) ותראה שאתה לא תגיע לאותה סדרה בזמן שתקציב לעצמך.


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Dotan  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 19.10.03
2849 הודעות, 2 פידבק
   18:40   06.01.11   
אל הפורום  
  14. ד''א זה אלגוריתם מוכר, נקרא Game Of Life :)  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net