עבור לתוכן

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

Featured Replies

פורסם

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 (אפשר גם שיהיה דינמי, אם רוצים לשנות את מספר החבילות) שמייצג את סוגי החבילות האפשריות, ואת הדרישות למספר הכדורים הסופי.

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

וזהו...

פורסם

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

כי מחר יגלו את ויטמין D.

פורסם

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

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

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

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

פורסם

השאלה היא למה התכוון המשורר.

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

ארכיון

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

דיונים חדשים