פורסם 2009 ביוני 2216 שנים ישנו מערך של 36*8. בכל אחד מהמקומות במערך ישנו ערך בין 1- ל20.צריך לחשב ממוצע לכל שמונת השורות של 0-34 ולשים את זה בעמודה 35. (אם מופיע 1-, יש להתעלם)הקוד שניתן הוא:int q,s,calc,num;for (q=0;q<8;q++){...for (__________)...{......if (__________)......{......... ___________ ;......... ___________ ;......}...}...points[35][q]=calc;}בבקשה תעזרו לי, אני מתחרפן כי אני לא מצליח למצוא תשובה..
פורסם 2009 ביוני 2216 שנים שים לב:הלולאה החיצונים עוברת על השורות. זה אומר שהלולאה הפנימית צריכה לעבור על העמודות.בסופו של דבר, הערך שב-calc מושם בתוך העמודה ה-35 של השורה הנוכחית, לכן הוא צריך להכיל את הממוצע.זה אמור להיות די פשוט...
פורסם 2009 ביוני 2216 שנים מחבר עמודות, שורות, מה זה משנה?ואני מבין טוב מאד שבcalc אמור להיות הממוצע, אבל איך אני שם אותו שם אם אני לא יודע לכמה ערכים אני עושה ממוצע?
פורסם 2009 ביוני 2216 שנים מחבר שניצל, אני לא אדיוט, וכבר עברתי על כל אפשרות שאני יכול לחשוב עליה, בבקשה תראה לי את הפתרון שלך.
פורסם 2009 ביוני 2216 שנים צודק, אם calc הוא מטיפוס int אז אין מה לעשות, אלא אם מותר לך לשנות את הקוד הקיים (כלומר לשים בסוף calc/num, או להוסיף משתנה מטיפוס double).
פורסם 2009 ביוני 2216 שנים מחבר אי אפשר לשנות את הקוד הקיים.אז ישנה טעות בשאלה?מצד שני, חשבתי על להוסיף בblank הראשון משהו בסגנון של s=0;s<35;s++,points[s][q]>=0?num++אבל אין לי מושג איפה אני יכול להשתמש בזה אח"כ..
פורסם 2009 ביוני 2216 שנים // ProgMain.cppvoid main(){ // Const definition const int ROWS = 36; const int COLS = 8; const int IGNORE_NUM = -1; // Array definition int arrnMatrix[ROWS][COLS]; // Variable definition int nRowsIndex; int nColsIndex; int nColSum; int nNumsCount; // Code Section // Loop for each avarage in row in the matrix for (nRowsIndex = 0; nRowsIndex < COLS; ++nRowsIndex) { nColSum = 0; nNumsCount = 0; for (nColsIndex = 0; nColsIndex < (ROWS - 1); ++nColsIndex) { if (arrnMatrix[nColsIndex][nRowsIndex] != IGNORE_NUM) { nColSum += arrnMatrix[nColsIndex][nRowsIndex]; ++nNumsCount; } } arrnMatrix[ROWS - 1][nRowsIndex] = (nColSum / nNumsCount); }}מצטער על הסטנדרטים ועל השמות של המשתנים - אני רגיל מהצבא..
פורסם 2009 ביוני 2216 שנים את הבדיקה ש-0<[points[ s][q אתה יכול לשים ב-if, לא צריך את ה-for בשביל זה.אם מותר לך להוסיף if בתוך אחת מהשורות החסרות, אז יש דרך לפתור:int q,s,calc,num;for (q=0;q<8;q++){...for (s=0,num=0,calc=0;s<35;++s)...{......if (points[s][q] != -1)......{......... calc += points[s][q]; ++num;......... if (s == 34) calc /= num ;......}...}...points[35][q]=calc;}
פורסם 2009 ביוני 2516 שנים את הבדיקה ש-0<[points[ s][q אתה יכול לשים ב-if, לא צריך את ה-for בשביל זה.אם מותר לך להוסיף if בתוך אחת מהשורות החסרות, אז יש דרך לפתור:int q,s,calc,num;for (q=0;q<8;q++){...for (s=0,num=0,calc=0;s<35;++s)...{......if (points[s][q] != -1)......{......... calc += points[s][q]; ++num;......... if (s == 34) calc /= num ;......}...}...points[35][q]=calc;}אני חושב שקצת רימית בזה שהוספת ++num יעני על הדרך עם עוד ";". יש דרך להמנע מזה וגם מה ifint q,s,calc,num;for (q=0;q<8;q++){...for (s=0,num=0,calc=0;s<35;++s)...{......if (points[s][q] != -1)......{......... calc += points[s][q];......... calc = (s == 34) ? calc / (q*35 + s) : calc;......}...}...points[35][q]=calc;}אני יודע. איכס.
פורסם 2009 ביוני 2516 שנים קודם כל, לא הבנתי למה אתה מכניס את q לחישוב של הממוצע. הממוצע על כל שורה אמור להיות מחושב בנפרד.חוץ מזה, החישוב שלך מכניס לממוצע גם את התאים שבהם יש 1- (הוא לא מוסיף אותם לסכום, אבל הוא כן מחשב את הממוצע כאילו הם נכנסו). בשביל זה צריך את num, שיספור כמה ערכים במערך באמת נכנסו לסכום.
פורסם 2009 ביוני 2516 שנים שיט! נכון! תיקון:int q,s,calc,num;for (q=0;q<8;q++){...for (s=0,num=0,calc=0;s<35;++s)...{......if (points[s][q] != -1)......{......... calc += (points[s][q] + num - num++);......... calc = (s == 34) ? calc / num : calc;......}...}...points[35][q]=calc;}זה נהיה יותר ויותר מפגר, רק כדי לשמור על התבנית. כשאצלנו נותנים תרגיל השלמת קוד אפשר להוסיף כמה קוד שרוצים, כל עוד זה שומר על התבנית.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.