פורסם 2012 בדצמבר 3012 שנים שלום לכולם, אני חדש כאן קיבלתי תרגיל לכתוב פונקציה יעילה המקבלת מערך ממוין בגודל 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 תודה רבה מראש!!
פורסם 2012 בדצמבר 3112 שנים כי מלמדים אותך לכתוב קוד לא נכון.א. אסור לכתוב void main, אלא צריך int main, ובסוף ה-main יש לכתוב ;return 0.ב. לא משתמשים ב-assert בשביל לוודא שהקצאת זכרון הצליחה. assert נועד לבדוק אך ורק תנאים שלעולם לא אמורים להתרחש (כשל בהקצאת זכרון אינו תנאי כזה).
פורסם 2012 בדצמבר 3112 שנים מחבר קודם כל תודה שאתה מגיב לי!לגבי void - הבנתי מהמרצה שכל עוד הפונקציה הראשית לא מחזירה ערך אין צורך לציין Int או טיפוס מסוג אחר. (ברוב ההרצאות הקוד רשום כך).assert - אז אני כן אמור להשתמש בו או לא? ואם כן איפה לציין אותו.אני חייב לציין שאין לי ידע קודם בתיכנות.
פורסם 2012 בדצמבר 3112 שנים לגבי 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 כי בד"כ שגיאה בהקצאת זכרון היא שגיאה שאי אפשר להתגבר עליה, אבל כמובן בתוכניות יותר מחוכמות יש דרכים יותר טובות להתמודד עם זה)
פורסם 2012 בדצמבר 3112 שנים אני מניח שלבדוק כמה ערכים שונים יש אתה יודע בקלות.לגבי הזזת הערכים - תחשוב איך שימוש בשני מצביעים (כלומר לעקוב במקביל אחרי 2 תאים שונים במערך) יכול לעזור.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.