שאלות ב++C תודה על העזרה - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

שאלות ב++C תודה על העזרה


נעם:)

Recommended Posts

1. איך מגדירים דינמי למערך דו מימדי <לדוגמא: [ma[n][m > ???????

2. איך פותרים את השאלה ההבאה:

.

בחברת "לא להשמנה כן להרזיה " יש דיאטה חדישה. מותר לאכול כל מה שרוצים כל עוד שבמשך היום אוכלים 11 יחידות של ויטמין A, 31 יחידות של ויטמין B ו-20 יחידות של ויטמין C.

ניתן לקנות מהחברה חבילות ויטמינים כמפורט להלן:

חבילה 1 - המכילה יחידת אחת של ויטמין A, 4 יח' של B ו-2 יח' של .C

חבילה 2- המכילה 2 יח' של A, 5 של B ו-3 של C.

חבילה 3 -המכילה 3 יח' של A ו-3 של B ואפס יח' של C.

העלות של חבילה 1 היא 10 ¤ ושל החבילות האחרות 5 ¤.

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

אני לא יודעת מאיפה להתחיל???? ??? ??? :'(

קישור לתוכן
שתף באתרים אחרים

1) int **arr;

או

int arr[][];

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

תיצור COLLECTION כזה, שבו יהייה המידע על הויטמינים והערך שלהם.

תבנה אלגוריתם שמחשב אילו חבילות אתה יכול להכניס כדי לעמוד בדרישות של 11, 31, 20(תשלח אותם בתור פרמטרים שאם ישנו את הדרישות אז לא תצטרך לשנות את כל התוכנית).

עריכה: במקרה הזה יש לך 2^3 אפשרויות, מכיוון שיש לך 3 חבילות. אם יהיו לך N חבילות, אז אתה תצטרך ליצור 2^n אפשרויות, ולראות אם כל אחת מהן מתאימה.

קישור לתוכן
שתף באתרים אחרים

קודם כל, 1:

ככה רק מגדירים מערך דו מימדי, אבל לא מקצים לו .

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

על מנת להקצות למערך בגודל m*n צריך למעשה להקצות n מערכים בגודל m, כך:

int **arr = new *int[m]; // declare m pointers for m arrays
for (int i = 0 ; i < m ; ++i) {
arr[i] = new int[n]; // allocate a n-long array for each pointer
}

או לחילופין להקצות מערך אחד בגודל m*n ולחלק אותו ל-m מערכים שונים.

int **arr = new *int[m]; // declare m pointers for m arrays
arr[0] = new int[n*m]; // allocate all the memory needed for m n-long arrays
for (int i = 0 ; i < m ; ++i) {
arr[i] = arr[0] + n*i; // make sure each pointer points to the next n ints
}

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

שימי לב שבשני המקרים צריך מראש להקצות מערך של m מצביעים.

לגבי 2:

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

כל מה שצריך הוא struct שמייצג חבילה, שמכיל ארבעה ממברים - כמה כדורים יש מסוג A, כמה מסוג B, כמה מסוג C, ומה המחיר.

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

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

וזהו...

קישור לתוכן
שתף באתרים אחרים

אני מבין את הרצון להיות כמה שיותר גנרי, ואני בהחלט בעדו.

היית יכול גם להגדיר קלאס אבסטרקטי מסוג ויטמין ו-3 בנים שלו מסוג A, B ו-C...

אבל בכל זאת מדובר ב(מה שנראה כמו) תרגיל בית ספר.

אין צורך לסבך יתר על המידה.

קישור לתוכן
שתף באתרים אחרים

ארכיון

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

×
  • צור חדש...