פורסם 2007 בספטמבר 518 שנים אמ, זה לא באמת יעבוד...הביטוי הזה:sizeof(arr[n-1])בעצם שקול לביטוי הזה:sizeof(float)והוא תמיד יחזיר 4.אתה מוזמן לנסות מערכים בגדלים שונים ותראה מה קורה.ולגבי 0 או 1 - תשנה את תנאי העצירה ל n!=1, וככה לא תצטרך להדפיס את המערך במקום n-1 אלא תוכל להדפיס את המערך במקום n. זה גם יותר אסתטי.UI - הוא לא יכול להעביר ל-printArray פרמטר נוסף, כי זה נוגד את הדרישות של התרגיל:חייב להשתמש בפונקציות הבאות:void printArray(const float [],int ,?); //פונקציה מקבלת מערך וכמות האברים שלו ומצביע לפונקצית ההדפסה (הסימן שאלה)void printMat(const float mat[][N],int ,?);//פונקציה מקבלת מטריצה וכמות השורות, ומצביע לפונקצית ההדפסה
פורסם 2007 בספטמבר 518 שנים אז אתה יכול לעשות משהו דומה למה שעושים במחרוזות. התקן של FLOAT מחייב שייצוג בינארי מסויים יהייה NaN(ערך שהוא לא מספר). למה שלא תבדוק מה הייצוג הזה, ותרוץ בלולאה ותדפיס עד אליו?
פורסם 2007 בספטמבר 518 שנים מחבר unsigninterger - לא הבנתי מה שהצעת עם הNANשניצל- התנאי הוא כבר n!=1וכן שמתי לב שזה לא עובד למטריצות באורך אחר...צירפתי את התרגילשים לב שיש אלמנטים נוספים כמו מיון ומציאת איבר אבל כרגע אני מתעסק רק בחלק בתרגיל של ההדפסה[attachment deleted by admin]
פורסם 2007 בספטמבר 518 שנים קבל תיקון, התכוונתי n!=0.קראתי את התרגיל, ולא הבנתי למה אתה מתעקש להגדיר N=20. אני לא מוצא סיבה שלא יהיה מוגדר N=4.
פורסם 2007 בספטמבר 518 שנים מחבר קודם כל כשאני מציב בתנאי n!=0 זה עובר על המטריצה 7 פעמים (ולא 6) מה שאומר שזה גם יחזור 7 פעמים ואז זה ידפיס לי שורה של זבל. לכן עשיתי מהתחלה אם n!=1 ושלחתי mat[n-1] מבין? בקשר ללמה אני מתעקש לעשות N 20 , זה כי התכנית צריכה להיות כללי ואם אני יעשה N 4 לא עשינו כלום. כי אם מטריצות בגודל יותר מ4 לא יתקמפלו ומטריצות בגודל פחות מ4 לא יודפסו כהלכה. אגב חשבתי לעשות קאונטר כמשתנה גלובלי ולרוץ עליו ואז הוא יתן לי את גודל המערך אבל המרצה לא מסכים שנשתמש במשתמשים גלובלים (כן גם זה לא) בעיה
פורסם 2007 בספטמבר 518 שנים מחבר כן כבר ניסיתי אבל הקבוע מתאפס כל סיבוב של הרקורסיה כי הוא חוזר על האיתחול =0 ככה שזה לא עוזר
פורסם 2007 בספטמבר 518 שנים מחבר לא הבנתי אותךאתה מתכוון למשתנה סטטי?בכל אופן הגעתי למסקנה של קאונטר לא משנה איזה לא יעזור לי כי בכל מקרה התוצאה שלו תהיה 20אני מתחיל להגיע למסקנה שזה בלתי אפשרי. כי ברגע שאני נכנס לפונקציה הראשונה מהמיין הN הוא 20 ואי אפשר לחשב את אורך המערכים
פורסם 2007 בספטמבר 518 שנים קודם כל כשאני מציב בתנאי n!=0 זה עובר על המטריצה 7 פעמים (ולא 6) מה שאומר שזה גם יחזור 7 פעמים ואז זה ידפיס לי שורה של זבל. לכן עשיתי מהתחלה אם n!=1 ושלחתי mat[n-1] מבין? צודק, שכחתי שאתה לא יכול לומר ל-printArray להתחיל מ-n-1, אלא הוא חייב להתחיל מ-n. בקשר ללמה אני מתעקש לעשות N 20 , זה כי התכנית צריכה להיות כללי ואם אני יעשה N 4 לא עשינו כלום. כי אם מטריצות בגודל יותר מ4 לא יתקמפלו ומטריצות בגודל פחות מ4 לא יודפסו כהלכה. אגב חשבתי לעשות קאונטר כמשתנה גלובלי ולרוץ עליו ואז הוא יתן לי את גודל המערך אבל המרצה לא מסכים שנשתמש במשתמשים גלובלים (כן גם זה לא) בעיה בהחלט בעיה. אבל אין פתרון אחר, והתרגיל לא דרש לטפל במטריצות מגודל אחר, אלא רק במטריצות מהגודל הזה... העניין הוא שאין שום דרך להסיק את גודלו של המערך מתוך המערך עצמו. אני אסביר - הביטוי הזה: int arr[5] = { 1,2,3 }; בעצם מתורגם לביטוי הזה: int arr[5] = { 1,2,3,0,0 }; כלומר, בשני המקרים הקומפיילר ייצור מערך בגודל 5, וה-sizeof שלו יהיה 20. אין דרך לגרום לו להבין שבעצם מדובר במערך בגודל 3 ולא 5, למעט באמצעות העברת פרמטר. כיוון ש-printMat מקבלת כפרמטר רק את מספר השורות במטריצה, היא לא יכולה להעביר ל-printArray את מספר האיברים בכל שורה. לכן, printArray חייבת לדעת מבעוד מועד (באמצעות const) את המספר הזה. התרגיל עצמו לא דרש להיות כללי - הוא דרש לטפל במטריצה הספציפית (אם יש לך בעיה, אתה תמיד מוזמן לפנות למורה שלך ולבקש שיבאר את התרגיל). לכן, אין סיבה להכריח את עצמך ש-N יהיה 20.
פורסם 2007 בספטמבר 518 שנים מחבר כן זה באמת נראה דרך ללא מוצא. למרות שלא נראה לי הגיוני להגדיר N 4 כי הוא טען שבזמן הבדיקה הוא יעשה copy paste למטריצות משלו ואני בטוח שלא כולם יהיו בגודל 4 והתרגיל כן דורש להיות כללי שים לב ל"משימה" בקובץ ששלחתי "(התוכנית כמובן צריכה להיות כללית עבור כל מטריצה אחרת מאותו הטיפוס.)" . בכל מקרה אני ישאל אותו בממייל ונראה מה הוא יגיד בנתיים אני יציב 4 ואמשיך בתרגיל. תודה בנתיים לשניכם, אולי נפגש עוד בהמשך כי חוץ מהתרגיל הזה יש לי עוד 2 וכמו שראית הם לא פשוטים ישר כוח.
פורסם 2007 בספטמבר 618 שנים התוכנית כמובן צריכה להיות כללית עבור כל מטריצה אחרת מאותו הטיפוס.אם הטיפוס הואfloat[][N]אז "אותו טיפוס" אומר מטריצה עם N עמודות וכמה שורות שאתה רוצה, כלומר הוא כנראה לא יבדוק את זה עם מטריצות עם מספר עמודות שונה.אבל באמת הכי כדאי לשאול אותו.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.