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

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


psychuil

Recommended Posts

ישנו מערך של 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 של השורה הנוכחית, לכן הוא צריך להכיל את הממוצע.

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

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

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

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

מצד שני, חשבתי על להוסיף ב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;
}

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

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

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

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

ארכיון

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

×
  • צור חדש...