עבור לתוכן
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.

עזרה עם מערכים ב- C

Featured Replies

פורסם

שלום לכולם, אני חדש כאן :yelclap:

קיבלתי תרגיל לכתוב פונקציה יעילה המקבלת מערך ממוין בגודל n של מספרים שלמים.

על הפונקציה להסיר איברים כפולים מהמערך ע"י הזזת האיברים הנותרים.

דוגמא:

עבור המערך:

93 93 81 81 81 81 72 60 60 50

הפונקציה תשנה את המערך המקורי כך שיראה כך:

0 0 0 0 0 93 81 72 60 50

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

אסור להשתמש במערך עזר!

על הפונקציה לרוץ בסדר גודל של n.

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

עשיתי כבר הקצאה דינאמית וקלטתי מערך, השאלה שלי היא איך בת'כלס פותרים את התרגיל.

זה מה שיש לי בינתיים:

http://pastie.org/5599435

תודה רבה מראש!!

פורסם
  • מחבר

H.I.T, למה אתה שואל?

פורסם

כי מלמדים אותך לכתוב קוד לא נכון.

א. אסור לכתוב void main, אלא צריך int main, ובסוף ה-main יש לכתוב ;return 0.

ב. לא משתמשים ב-assert בשביל לוודא שהקצאת זכרון הצליחה. assert נועד לבדוק אך ורק תנאים שלעולם לא אמורים להתרחש (כשל בהקצאת זכרון אינו תנאי כזה).

פורסם
  • מחבר

קודם כל תודה שאתה מגיב לי!

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

assert - אז אני כן אמור להשתמש בו או לא? ואם כן איפה לציין אותו.

אני חייב לציין שאין לי ידע קודם בתיכנות.

פורסם

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

המרצה טועה. לפי התקן של C, פונקציית ה-main חייבת להחזיר int. קומפיילרים מסויימים (אפילו רוב הקומפיילרים) מאפשרים void, אבל זה נוגד את התקן.

assert - אז אני כן אמור להשתמש בו או לא? ואם כן איפה לציין אותו.

מצאתי מאמר לא רע שמסביר מתי מומלץ להשתמש ב-assert:

http://bugawareness.com/when_to_prove_you_are_right

שים לב לכלל האצבע הראשון: "אל תשתמשו ב-Assert לבדוק משהו שיכול להשתבש – גם אם בסבירות נמוכה מאוד". הקצאת זכרון כושלת היא בדיוק מצב כזה - היא יכולה להשתבש, אם כי בסבירות נמוכה.

שגיאות כמו הקצאת זכרון כושלת צריך פשוט לבדוק באמצעות if והדפסת שגיאה. דהיינו משהו כזה:

a = (int*)malloc(sizeof(int)*n);
if (a == NULL) {
printf("Memory allocation failed!\n");
exit(1);
}

(אנחנו יוצאים מהתכנית ע"י הפונקציה exit כי בד"כ שגיאה בהקצאת זכרון היא שגיאה שאי אפשר להתגבר עליה, אבל כמובן בתוכניות יותר מחוכמות יש דרכים יותר טובות להתמודד עם זה)

פורסם
  • מחבר

בכל מקרה, איך אני ניגש לתרגיל הנ"ל?

פורסם

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

לגבי הזזת הערכים - תחשוב איך שימוש בשני מצביעים (כלומר לעקוב במקביל אחרי 2 תאים שונים במערך) יכול לעזור.

ארכיון

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

דיונים חדשים

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.