פורסם 2009 ביולי 1416 שנים היי כתוצאה מהשיעמום של החופש וחיפושי מקומות תעסוקה אני מנסה לפתח את התוכנה הבאה:תוכנה שתגריל 8 מספרים בין 1 ל25 ואלו יהיו המספרים הזוכים , לאחר מכן התוכנה תצטרך להגריל 8 מספרים נוספים כל פעם בבת אחת עד שתגיע שוב למספרים הזוכים. שם היא תגיד כמה פעמים היא הייתה צריכה להגריל מערכים כאלה.הנה מה שעשיתי עד עכשיו : הבעיה המוזרה היא ששני המערכים הראשונים מקבלים את אותם ערכים בדיוק ואפילו באותו הסדר:using System;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { int[] arr = ReturnRandomArr(7); int[] WinArr = ReturnRandomArr(8); for (int i = 0; i < arr.Length; i++) { Console.Write(arr[i]+","); } Console.WriteLine(); for (int i = 0; i < WinArr.Length; i++) { Console.Write(WinArr[i] + ","); } Console.WriteLine(); //int count = 0; //for (int i = 0; i < arr.Length; i++) //{ // for (int j = 0; j < WinArr.Length; j++) // { // if(arr[i]==WinArr[j]) // count++; // } //} //if (count > 3) // Console.WriteLine("3 correct numbers!"); } public static int[] ReturnRandomArr(int arrLenght) //Generates an array with { //differnet random numbers int[] randArr = new int[arrLenght]; for(int i=0;i<randArr.Length;i++) { randArr[i]=0; } Random rand = new Random(); int count=0,x; bool flag; while(count<randArr.Length) { flag = true; x = rand.Next(1, 26); for (int i = 0; i < randArr.Length; i++) { if (x == randArr[i]) { flag = false; } } if (flag) { randArr[count] = x; count++; } } return randArr; } }}
פורסם 2009 ביולי 1416 שנים בלי לקרוא את הקוד שלך ידעתי מה הבעיה אל תיצור אובייקט Random בתוך הפונקציה ReturnRandomArr, במקום זה תיצור אובייקט Random סטטי אחד, ותשתמש רק בו. הסבר: מנגנון ה-random לא באמת יודע לייצר מספרים אקראים. הוא למעשה מייצר סדרה של מספרים לפי נוסחה מתמטית כלשהי. בשביל זה הוא צריך מספר ראשוני, שנקרא הגרעין (seed). כברירת מחדל, המספר הזה נוצר מהשעה הנוכחית (כולל מילישניות). אם אתה יוצר שני אובייקטי Random בהפרש זמן מזערי (כלומר הפרש זמן שבו השעון של המחשב לא מספיק להתעדכן) אז שניהם ייטענו באותו גרעין, ולכן שניהם ייצרו את אותה סדרת מספרים.
פורסם 2009 ביולי 1416 שנים מחבר תודה לך אתה יכול להסביר איך עושים את זה? (אני בטוח שזה עניין של שורה אחת רק אני לא יודע מהו הSYNTAX)
פורסם 2009 ביולי 1516 שנים הכי פשוט - תוסיף את המילה static בתחילת השורה שבה אתה מגדיר את ה-Random.זה יגרום לכך שהוא ייווצר רק פעם אחת עבור הפונקציה הזו (כל פעם שתקרא לפונקציה היא תשתמש באותו אובייקט).אופציה קצת יותר טובה היא להגדיר את הרנדום כאיבר סטטי של המחלקה. תוסיף ,מחוץ להגדרה של הפונקציות (נניח, לפני השורה static void main), את ההגדרה הבאה:private static Random rand = new Random();וכמובן תמחק את ההגדרה שבתוך הפונקציה.
פורסם 2009 ביולי 1516 שנים מחבר אוקיי תודה הסדרתי.. עכשיו יש לי משהו חדש שאני רוצה להוסיף :איך אפשר שברגע שהוא מגריל מערך דומה אז הוא יהבהב בTASKBAR? (כמו שמקבלים הודעה במסנג'ר)חיפשתי בגוגל לגבי זה וזה הביא אותי למשהו שקוראים לו FlashWindow , רק אני לא יודע איך לשלב את זה בתוך הCONSOLE APP..כי כמובן יקח הרבה זמן לתוכנה להגריל מערך דומה למערך הזוכה (אם בכלל)
פורסם 2009 ביולי 1516 שנים Google to the rescue!http://www.google.co.il/search?q=c%23+flashwindowאגב, הסיכוי להגריל שני מערכים זהים הוא די קלוש (בהנחה שהאורכים שלהם לא ממש ממש קצרים).
פורסם 2009 ביולי 1616 שנים מחבר לא הצלחתי להתסדר עם זה :s05: אולי בגלל שזה עובד רק בWINDOWS APPLICATION ולא בCONSOLE הפשוט יותר..בכל מקרה מה דעתכם על התוכנית הזו: (התוכנה עצמה נמצאת פה)using System;namespace Lottery{ class Program { private static Random rand = new Random(); //public Random rand; static void Main(string[] args) { int x = 0; do { Console.WriteLine("How many numbers do you want to be guessed? from 1 to 8"); x = int.Parse(Console.ReadLine()); } while ((x > 8) && (x < 1)); int count = 0; double timesCount = 0; System.Diagnostics.Stopwatch stopWatch = new System.Diagnostics.Stopwatch(); int[] WinArr = ReturnRandomArr(8); while (count < x) { stopWatch.Start(); timesCount++; count = 0; int[] arr = ReturnRandomArr(8); Console.WriteLine("-------{0}-------", timesCount); for (int i = 0; i < arr.Length; i++) { Console.Write(arr[i] + ","); } Console.WriteLine(); for (int i = 0; i < arr.Length; i++) { for (int j = 0; j < WinArr.Length; j++) { if (arr[i] == WinArr[j]) count++; } } } stopWatch.Stop(); Console.WriteLine(); Console.WriteLine("WinTicket:"); for (int i = 0; i < WinArr.Length; i++) { Console.Write(WinArr[i] + ","); } Console.WriteLine(); Console.WriteLine("----------------"); //Console.WriteLine(count+" correct numbers!"); Console.WriteLine("Time Passed: " + stopWatch.Elapsed); Console.WriteLine(NumWithCommmas(timesCount) + " times the lottery has been done."); Console.WriteLine("----------------"); Console.WriteLine("The chance of getting {0} right numbers is: {1}", x, 1 / timesCount); Console.ReadLine(); } public static int[] ReturnRandomArr(int arrLenght) //Generates an array with { //differnet random numbers int[] randArr = new int[arrLenght]; for (int i = 0; i < randArr.Length; i++) { randArr[i] = 0; } // Random rand = new Random(); int count = 0, x; bool flag; while (count < randArr.Length) { flag = true; x = rand.Next(1, 46); for (int i = 0; i < randArr.Length; i++) { if (x == randArr[i]) { flag = false; } } if (flag) { randArr[count] = x; count++; } } return randArr; } public static string NumWithCommmas(double num) { string PartA = ""; string PartB = ""; string growingstring = ""; //double MyInteger = num; string whatihave = num.ToString(); int Length = whatihave.Length; if (num > 999) { do { PartA = whatihave.Substring(0, Length - 3); PartB = whatihave.Substring(Length - 3, 3); growingstring = "," + PartB + growingstring; whatihave = PartA; Length = whatihave.Length; } while (Length > 3); if (whatihave == "") { growingstring = growingstring.Substring(1, growingstring.Length); } else { growingstring = whatihave + growingstring; } return growingstring; } else { return num.ToString(); } } } }[attachment deleted by admin]
פורסם 2009 ביולי 1616 שנים סבבה.טיפ קטן - את הפונקציה NumWithCommas יכלת להחליף בזה:num.ToString("N");
פורסם 2009 ביולי 1616 שנים וואי פעם נתקלתי בדיוק באותה הבעיה. בניתי משחק בין 2 רובוטים שנעים קדימה ואחורה והראשון שמגיע ל-100 מנצח (התנועה שלהם נקבעת ע"י הגרלה) ולא הצלחתי להבין למה הרובוט השני עושה בדיוק אותו דבר שעושה הרובוט הראשון עכשיו זה עובד
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.