שאלה בC

שאלה בC

טוב אז ככה.. נתנו לנו שעורי בית והתחלתי אותם עכשיו.. אין לי מושג מה לא טוב בקוד שלי, אבל הוא אומר שהבעיה היא במערך הדו-מימדי... לא יודע למה זה ככה.. הינה הקוד (של הפונ' בלבד כרגע) :
#include<stdio.h> #define C 25 #define S 40 float FuncAvgClass(int a[][]) { int i,j,sum=0; float avg; for(i=0;i<S;i++) { sum+=a; } avg=sum/C return(avg); } ​
 
עדיין לא...

צודק בקשר לטעות (זה קרה כשעשיתי העתק הדבק לפה..מוזר
) בכל מקרה מחקתי את J אך מופיע אותה שגיאה באותו מקום.. הוא אומר בשגיאה: invalid use of array with unspecified bounds
 

vinney

Well-known member
רק מימד אחד יכול להיות לא ידוע בC

MSDN:
The definition of an array with multiple subscripts was missing a subscript value for a dimension other than the first dimension. The following is an example of this error: int func(a) char a[10][]; // error { } int func(a) char a[][5]; // OK { }​
 
תודה...עוד משהו בקשר לעניין..

הקוד המסודר והעובד הוא:
#include<stdio.h> #define C 25 #define S 5 float FuncAvgClass(int a[]) { int i,j,sum=0; float avg; for(i=0;i<S;i++) { sum+=a; } avg=(sum/C); return(avg); } void main() { int b,i; for(i=0;i<S;i++) { printf("%d) stud\n",i); scanf("%d",&b); } printf("%f",FuncAvgClass(b)); getch(); } ​

איך אני הופך את השורה הבולטת למספר עשרוני? אמרו לי להכניס אותם לתוך float אבל זה מציג שגיאה.. תודה מראש!
 

vinney

Well-known member
איזו שגיאה?

עקרונית sum/C יהיה מספר שלם חתוך, ז"א אם sum קטן מC תקבל 0. אתה צריך לעשות casting לfloat לאחד מהם.
 
אני יודע, אבל לא יודע איך עושים ...

את הCASTING... אפשר דוגמה בבקשה להמחשת העניין? תודה מראאש!
 

vinney

Well-known member
אתה שם את טיפוס בסוגריים לפני

למשל
int a; float b; b = ((float)a/5)​
 

Orbi

New member
נצל"ש

אם יש לי קטע קוד:
(double)(sum\C)​
סאמ וסי שניהם אינטג'רים, וסאם קטן מסי אז כמו שאמרת נקבל תמיד 0, אבל אם נעשה CAST רק לSUM התוצאה כן תהיה שונה מ0 נכון?
 

vinney

Well-known member
נכון, כנ"ל אם תעשה רק ל C

אם שני האופרנדים מאותו טיפוס - אז התוצאה מאותו טיפוס (CASTING נעשה בסוף, להזכירך, בגלל הסוגריים, ז"א על התוצאה). אם הטיפוסים של האופרנדים שונים - התוצאה תהיה בטיפוס הכי רחב.
 

zagzagzag

New member
כששולחים מערך עם יותר ממימד אחד

צריך לציין את הגודל של כל המימדים חוץ מהמימד הראשון. במקרה שלך -
float FuncAvgClass(int a[][20]) /* ... */​
 
אוי...אז למה הקוד שלי לא טוב?

אני אמור להכניס 2 ערכים לתוך מערך A, ואז הפונ' מחשבת עבורי את הממוצע. אין לי מושג למה החישוב לא פועל... הקוד עובד עד החלק של החיבור (בדקתי והוא מחבר את 2 המס' נכון), אבל כנראה שמשהו לא בסדר בחלק של הCASTING.
#include<stdio.h> #define C 25 #define S 2 float FuncAvgClass(int a[]) { int i,sum=0; float avg; for(i=0;i<S;i++) { sum+=a; } avg=((float)sum)/S; return(sum); } void main() { int b,i; for(i=0;i<S;i++) { printf(" stud\n"); scanf("%d",&b); } printf("the avg is: %d",FuncAvgClass(b)); getch(); } ​

אמממ...יש פתרון?
 
חשוב רק שתבינו..

אין שגיאה מצד הקומפילר (או איך שלא אומרים את זה
), אבל הבעיה הקיימת היא פשוט בחישוב..
 
מישהו? משהו? איכשהו? פליז?

עצה? משהו... מצטער שאני כזה קרציה (
) אבל ה פשוט דחוף לי..
 

gmorphus

New member
קודם כל תירגע

אנחנו לא עובדים בשבילך ואל תציק
בכל מקרה, הפונקציה נראית לי בסדר למעט זה שאתה מחזיר את sum ולא את avg. (וזאת בהנחה שכל המטרה הייתה לחשב את הממוצע של האיברים בa...)
 
תשובה פשוטה לשאלה שנראית מסובכת

לא להאמין כמה הסתבכת בדבר פשוט... בסך הכל תוריד את הסוגריים בשורה ; return sum כדי שהערך המוחזר לא יהיה 1 או 0 (כן או לא) האם יש ערך לsum אלא פשוט sum בעצמו!
 
למעלה