פקודת Random, יש אפשרות לדלג על מספר? [C#] - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

פקודת Random, יש אפשרות לדלג על מספר? [C#]


Excel

Recommended Posts

אני כותב תוכנת לומדה בחשבון בסיגנון שאלון אמריקאי, לכן עשיתי שהתשובה לתרגיל נכנסת באופן רנדומאלי לאחד המקומות של התשובה [שארבעתם בתוך מערך] ובשאר מוגרלים מספרים רנדומלים. הבעיה נוצרה כאשר באחת מהתשובות הלא נכונות הייתה כפילות. האם יש אפשרות להגריל מספר רנדומלי בין טווח מסוים אך ש"ידלג" על מספרים מסוימים? ואם לא, מהי הדרך הכי יעילה לדאוג שלא תהיה כפילות? בנוסף אני לא בטוח שכתבתי את הקוד בצורה הכי יעילה, אם למישהו יש רעיון אני אשמח לשמוע, בתודה.

        RandomNumber = MyRandom.Next(4);
Options[RandomNumber] = Answer;
switch (RandomNumber)
{
case 0: Options[1] = MyRandom.Next(DifficultLevel); Options[2] = MyRandom.Next(DifficultLevel); Options[3] = MyRandom.Next(DifficultLevel); break;
case 1: Options[0] = MyRandom.Next(DifficultLevel); Options[2] = MyRandom.Next(DifficultLevel); Options[3] = MyRandom.Next(DifficultLevel); break;
case 2: Options[0] = MyRandom.Next(DifficultLevel); Options[1] = MyRandom.Next(DifficultLevel); Options[3] = MyRandom.Next(DifficultLevel); break;
case 3: Options[0] = MyRandom.Next(DifficultLevel); Options[1] = MyRandom.Next(DifficultLevel); Options[2] = MyRandom.Next(DifficultLevel); break;
}


Console.WriteLine("Exercise number {0} from {1}:", i + 1, ExNumber);//מדפיס מס' תרגיל
Console.WriteLine("{0, 35} {1} {2}", Number1, Action, Number2);//מדפיס תרגיל
Console.WriteLine("A) {0} B) {1} C) {2} D) {3}", Options[0], Options[1], Options[2], Options[3]);

קישור לתוכן
שתף באתרים אחרים

לא בדקתי לך את הקוד אבל בעיקרון אפשר לגרום לו לדלג על מספר אם תגיד לו שאם המספר שהוגרל שווה למספר X אז שיגריל שוב.

ואני חושב שכדאי שזה יהיה מסוג לולאת While למיקרה שאותו המספר הוגרל שוב.

קישור לתוכן
שתף באתרים אחרים

כן חשבתי על הרעיון הזה, פשוט חשבתי שזה טיפה מטופש ולא יעיל "לקוות" שהמספר לא יצא שוב ואם הוא יצא להגריל עוד פעם, וקוויתי שישנו משהו מובנה במטודה של הראנדום שיפתור את זה, באיחוד בצורה שכתבתי את הקוד, אני צריך להוסיף בכל case לכל מספר While שבודק על המספרים הקודמים, האין שיטה טובה יותר?

קישור לתוכן
שתף באתרים אחרים

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

הייצוג הבינארי של המשתנה שלך הוא:

0110(ועוד מספר אפסים אחרי, אני לא ארשום את כולם).

הגרלת 4.

אתה צריך לרוץ על 4 ביטים(מצד ימין) - 0 עד 3(אם היית מגריל 2, היית צריך לרוץ מ- 0 עד 1). יש לך 2 מונים - אחד שאתה מגדיל כל פעם, ועוד אחד שתלוי בבדיקה מסויימת שתעשה.

אתה הולך לאיבר הראשון(מימין) ורואה שיש בו 0, אז אתה ממשיך, ולא מעלה את המונה שלך.

אתב הולך לאיבר השני, ומוצא בו 1. אתה שומר את המיקום שלו(1) במשתנה שמייצג את האחד האחרון שמצאת. עכשיו אתה יכול להעלות את המונה שלך.

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

עכשיו אתה מבקר באיבר האחרון. מצאת בו 0, ולכן אתה לא צריך לעדכן את המקום שאחרון שמצאת בו 1(הרי יש כאן 0). כאן אתה גם לא צריך להגדיל את 2 המונים שלך, אלא רק אחד מהם.

שים לב שיש לך במונה עכשיו 4, כמספר האפשרויות שלך, ולכן אתה צריך לצאת מהלולאה.

המספר של התשובה הבאה שאתה יכול לקחת הוא 2, מכיוון שהוא ה1 האחרון שמצאת.

יש עוד דרך - ליצור את המספר 1234.

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

אם לדוגמא הגרלת את הספרה 2, אז המספר שישאר לך הוא 134, וכעת אתה צריך להגריל מספר בין 1 ל- 3.

ככה אתה עושה כל עוד המספר שלך גדול מ-0.

קישור לתוכן
שתף באתרים אחרים

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...