מישהו יכול לעזור ?

כתוב פונקציה או אלגוריתם מילולי בסי שמקבל מספר שלם N>0 (גדול מאפס) ומדפיס את כל המספרים הבינאריים שניתן ליצג ע"י N סיביות לדוג': קלט N=3 פלט: 000 001 010 011 100 101 110 111 תודה מראש

אז מה בעצם הבעיה? האם ניסית? התחלת ונתקעת?

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

זה די פשוט

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

אז מה בעצם הבעיה? האם ניסית? התחלת ונתקעת?

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

תגובה

קודם כל זה לא את זה אתה!!!!!!!! ושנית אני לא כל כך מבין למה את מתכוונת?? הרעיון שלי הוא לקחת מערך ולאתחל אותו ב-N אפסים,ולהדפיס. אחר כך לשים 1 במקום הראשון ולהתחיל להחליף מקומות עד ש ה-1 יהיה במקום ה-N (אחרי כל החלפה להדפיס). כאשר נגמר סיבוב אחד להוסיף עוד 1 בתחילת המערך ושוב להחליף וכו' עד שכל המערך ממולא באחדים. זה נכון?

קודם כל - אני יודעת שאתה בן - וכתבתי לך בלשון זכר!

שנית - קשר לאלגוריתם שהצעת - ייתכן שהוא גם יעבוד, אבל לא הבנתי אותו עד הסוף: כשיש לך 1 אחד - זה בסדר, אבל אח"כ כשיהיו 2 אחדים או יותר - לפי איזה סדר "תחליף את המקומות" שלהם במערך? אתה צריך לחשוב על סדר החלפה שיתן לך את כל האופציות האפשריות. למשל כשתגיע למצב של שלושה 1-ים, אז בהתחלה זה יהיה: 1 1 1 0 0 0 0 0 0 0 0 ואח"כ מה? נניח תתחיל להזיז את ה-1 השמאלי: 1 1 0 1 0 0 0 0 0 0 0 ומתי תגיע נגיד לאופציה 0 0 1 0 1 0 0 0 1 0 0 ? אני מציעה לך לחשוב שוב על האלגוריתם שהצעתי לך - כי הוא בטוח עובד, וגם ייתן לך את התוצאות בדיוק בסדר המבוקש (כמו בדוגמה שהבאת). אתה פשוט מתחיל מ-0 וכל פעם עושה "פלוס 1" - בבסיס בינארי, עד שאתה מגיע למספר 11111111 (לפי ה-N הנתון)... תנסה את זה על דף, למשל עם N=3 או 4, ותראה שזה נותן לך את כל התוצאות ובסדר הרצוי.

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

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

השאלה הנשאלת היא - איך מדפיסים מספרים ביצוג בינארי ב- C? כמובן שזה יפשט את העניין...

עד כמה שנאי יודע

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

לא זה לא יעבוד...

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

מישהו יכול לעזור ?

כתוב פונקציה או אלגוריתם מילולי בסי שמקבל מספר שלם N>0 (גדול מאפס) ומדפיס את כל המספרים הבינאריים שניתן ליצג ע"י N סיביות לדוג': קלט N=3 פלט: 000 001 010 011 100 101 110 111 תודה מראש

עוד כמה אפשרויות..

אםשר להשתמש ברקורסיה. משהו בסגנון הדפס(N, מחרוזת [מאותחלת לריקה]) אם N>0 אז 2 קריאות רקורסיביות: הדפס(N-1, מחרוזת משורשרת עם 0 בסוף) הדפס(N-1, מחרוזת משורשרת עם 1 בסוף) אחרת- הדפס מחרוזת או ע"י שימוש במטריצה בגודל N על (2 בחזקת N) פחות 1 ולמלא אותה בערכים (הסדר למילוי ברור מאד) הבעיה של הגודל הלא סביר של המטריצה ניתנת לפתרון ע"י מטריצה בוליאנית (טייפדף)
עבור לעמוד
בחזרה לפורום
כרגע בפורום זה: אין משתמשים רשומים
עבור לפורום:
תיכנות
בחר
בחר