עבור לתוכן
View in the app

A better way to browse. Learn more.

HWzone

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

הגדרת טיפוס ב typedef ב C

Featured Replies

פורסם

אני צריך לייצר טיפוס בשם set שמסוגל להחזיק קבוצת שלמים בתחום [127....0] ,על המבנה להיות יעיל מבחינת כמות הזכרון הנדרשת לשמירתו (עבודה עם סביות).

איך אני עושה את זה הכי יעיל?

תודה.

  • תגובות 126
  • צפיות 11.1k
  • נוצר
  • תגובה אחרונה
פורסם

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

פורסם
  • מחבר

אני אמור לקבל מהמשתמש רשימה של מספרים שהמספר הכי גבוהה יכול להיות 127 והכי נמוך 0

כל איבר בקבוצה מופיע רק פעם אחת.

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

לכן חשבתי על מערך בגודל 127 ואז כל מספר שאני מקבל מהמשתמש אני מכניס למשל 1 בתא של אותו מספר

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

השאלה אם זה נכון ואם זה יעיל?

פורסם

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

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

פורסם
  • מחבר

אפשר לייעל על ידי מערך של char

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

פורסם

על איזה אתה צריך לחשוב בעצמך.

כמה מידע צריך לשמור לכל מספר בין 0 ל-127? כמה מידע צריך סה"כ?

פורסם
  • מחבר

בסופו של דבר שורת פלט לקבוצה תיהיה לכל היותר עד 16 איברים.

אז ההגיון אומר לעשות מערך של 16

נראה לי שצריך בסופו של דבר לדחוס 128 בייטים ל 16 בייטים.

אבל אני לא יודע מה קורה עם המשתמש מכניס מעל ל16 מספרים שונים...

פורסם

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

איזה מידע צריך להחזיק עבור כל מספר בין 0 ל-127? כמה מידע זה? (ביט? בייט? int?)

פורסם
  • מחבר

הכי יעיל....

כנראה בייט

פורסם
  • מחבר

אוקיי אני יודע שזה אמור להיות:


#defin size 16
typedef unsigned char set [size];

יצרתי למשל קבוצה A מהסוג הזה. וקבלתי מהמשתמש 18מספרים שונים. איך זה מוכל במערך?

פורסם
  • מחבר

8 ביטים לפחות

טווח ערכים מינימאלי 0~127

פורסם

לא לפחות - בדיוק.

אז תחשוב איך אתה יכול באמצעות char אחד להחזיק את המידע עבור 8 איברים (לדוגמה, עבור המספרים 0 עד 7). אפילו בהודעה הראשונה שלך ציינת שזה צריך להיעשות ע"י עבודה עם סיביות.

פורסם
  • מחבר

אין לי מושג ....

הידע שלי בעבודה עם סיביות נמוך מאוד

פורסם

יש בשפת C כמה אופרטורים שנקראים bitwise operations (למשל, | ו->>).

אני ממליץ לך לקרוא עליהם, ובעיקר - על מה אפשר לעשות איתם.

ארכיון

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

דיונים חדשים

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.