עבור לתוכן

השלמת קטע קוד בC

Featured Replies

פורסם

ישנו מערך של 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;
}

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

פורסם

שים לב:

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

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

זה אמור להיות די פשוט...

פורסם
  • מחבר

עמודות, שורות, מה זה משנה?

ואני מבין טוב מאד שבcalc אמור להיות הממוצע, אבל איך אני שם אותו שם אם אני לא יודע לכמה ערכים אני עושה ממוצע?

פורסם
  • מחבר

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

פורסם

צודק, אם calc הוא מטיפוס int אז אין מה לעשות, אלא אם מותר לך לשנות את הקוד הקיים (כלומר לשים בסוף calc/num, או להוסיף משתנה מטיפוס double).

פורסם
  • מחבר

אי אפשר לשנות את הקוד הקיים.

אז ישנה טעות בשאלה?

מצד שני, חשבתי על להוסיף בblank הראשון משהו בסגנון של


s=0;s<35;s++,points[s][q]>=0?num++

אבל אין לי מושג איפה אני יכול להשתמש בזה אח"כ..

פורסם

// ProgMain.cpp

void 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);
}
}

מצטער על הסטנדרטים ועל השמות של המשתנים - אני רגיל מהצבא..

פורסם

את הבדיקה ש-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;
}

פורסם

לא הצליחו להמציא לכם שאלה יותר נורמלית? ;D

פורסם

את הבדיקה ש-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 יעני על הדרך עם עוד ";". יש דרך להמנע מזה וגם מה 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];
......... calc = (s == 34) ? calc / (q*35 + s) : calc;
......}
...}
...points[35][q]=calc;
}

אני יודע. איכס.

פורסם

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

חוץ מזה, החישוב שלך מכניס לממוצע גם את התאים שבהם יש 1- (הוא לא מוסיף אותם לסכום, אבל הוא כן מחשב את הממוצע כאילו הם נכנסו). בשביל זה צריך את num, שיספור כמה ערכים במערך באמת נכנסו לסכום.

פורסם

שיט! נכון!

תיקון:

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;
}

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

פורסם

זה אכן נהיה מפגר, באותה מידה אפשר היה להשתמש ב-; או סתם בפסיק.

ארכיון

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

דיונים חדשים