Vega פורסם 2004 בספטמבר 18 Share פורסם 2004 בספטמבר 18 משימה:כתוב תכנית מודולרית שמגדירה מערך דו-ממדי בגודל NxN (n יוגדר כקבוע(.התוכנית תאתחל את המערך במספרים אקראיים שבין 100-0. התוכנית תדפיס על המסך את ההודעה "ריבוע קסם". אם סכום כל השורות, כל העמודות ושני האלכסונים בעלי ערך זהה.תת-משימות:יש לבנות תוכנית שכולה בנויה מפונקציות, כלומר שבפונקציית main יהיו רק זימונים וקריאות למשתנים. את הערך N יש להגדיר ב-define על מנת שיהיה קל לעשות tweaking לתוכנה.פונקציות נדרשות:פונקציית איפוס פונקציה זו מכניסה ערכים אקראיים בין 1-100 בתוך כל אחד מהתאים במטריצה.פונקציית שורה בודק את סכום שורה מסויימת במטריצהפונקציית עמודה בודק סכום עמודה מסויימת במטריצהפונקציית אלכסון בודק את סכום האלכסון משמאל-לימיןפונקציית אלכנוס בודקת את סכום האלכנוס (ימין->שמאל)בפונקציית main יש להריץ לולאות:לולאה שתרוץ מ-0 עד n ותעשה השמה של סכום העמודות במשתנה sum1.לולאה שתרוץ מ-0 עד n ותעשה השמה של סכום השורות בשמתנה sum2.בדיקת if:תנאי לוגי: אםsum1 שווה לsum2 וגם אלכסון שווה לאלכנוסהדפס("ריבוע קסם!")**לא סיימתי את פונקציית InitSqr.שפת C **מעודכן**: #include<stdio.h> #include<stdlib.h> #include<conio.h> #define N 3 /*Sets the number of ColummsxRows [nXn]*/ void initSqr(int a[N][N]); /*Inserts random values in the Matrix*/ int colSum(int a[N][N],int col); /* Receives the Matrix and returns the sum of a given columm*/ int rowSum(int a[N][N],int row); /* Receives the Matrix and return a given row's sum. int mainDiag(int a[N][N]); /*Calculates the sum of the left-to-right diag.*/ int ScndDiag(int a[N][N]); /*Calculates the sum of the right-to-left diag.*/ void main() { int a[N][N]; int sum1=0, sum2=0,h,x, trigger=2; int i; initSqr(a); /*Inserts random values*/ for(i=0;i<N;i++) sum1=sum1+ colSum(a,i); /*Calls the loop to check all of the Columms.*/ for (i=0;i<N;i++) sum2=sum2+rowSum(a,i); if (mainDiag(a)==ScndDiag(a)) trigger=1; if (sum1==sum2 && trigger==1) printf("Ribua Qesem!"); } int colSum(int a[N][N], int col) { int i,sum=0; for(i=0;i<N;i++) sum=sum+a[col];return(sum); } int rowSum(int a[N][N], int row) { int i,sum=0; for(i=0;i<n;i++) sum=sum+a[row];return(sum); } int mainDiag(int a[N][N]) { int i,sum=0; for(i=0;i<n;i++) sum=sum+a;return(sum); } int scndDiag(int a[N][N]) { int i,j=n,sum=0; for(i=0;i<n;i--) { sum=sum+a[j]; j++; }return(sum); } void initSqr(int a) { int i,j; for(i=0;i<n;i++) { for(j=;j<n;j++) { /*randomize(0-100) a[j]; */ }שגיאות debugger **מעודכן**: 1. error 25: function 'mainDiag' shuold have a prototype in function main()2. error 28 Expression syntax in function main()3. warning 31: 'trigger' is an assigned value that is never used בקשר לתלונה השלישית אני לא מבין את זה כי יש שימוש ב-trigger. אני כמעט בטוח שזה בגלל איזהשהי טעות שעשיתי עם השימוש בפונקציות בתור תנאי לוגי ב-if בפונקציית main אבל אני לא יודע מה עשיתי לא בסדר. תודה! קישור לתוכן שתף באתרים אחרים More sharing options...
Holy פורסם 2004 בספטמבר 18 Share פורסם 2004 בספטמבר 18 תתחיל מלשנות את הn בdefine לאות גדולה וליישר את הקוד כמו שצריךאחרי זה, כשפונקציה מקבל 2 פרמטרים מאותו טיפוס אתה עדיין צריך לכתוב לפני כל אחד מה הטיפוס שלוint rowSum(int a[n][n],row) -> int rowSum(int a[n][n],int row)כשאתה קורא לפונקציה עם מארך אתה צריך להעביר רק את השם שלו, ולא את הגודל שלו.sum2=sum2+rowSum(a[n][n],i) -> sum2=sum2+rowSum(a,i); קישור לתוכן שתף באתרים אחרים More sharing options...
infer73 פורסם 2004 בספטמבר 18 Share פורסם 2004 בספטמבר 18 הפונקציה init פעם אחרת קראת לה init ופעם initsqrוגם בפונקציה עצמה (לא ההצהרה על הפונקציה,אלא למטה איפה שהפונקציה כתובה)חסר לך Int בסוגריים לפני המשתנה a (חסרה הצהרה איזה סוג משתנה זה)+מה שHOLY כתבבקשר לשאר השגיאות,מצטער אבל אין לי כוח להסתכל על התוכנית עכשיוזה מעצבן להסתכל על זה ככה (יישור לשמאל! תסדר אותו בבקשה)וגם אין לי קומפיילר C כרגע אז אני לא יכול לבדוק את הקוד קישור לתוכן שתף באתרים אחרים More sharing options...
Vega פורסם 2004 בספטמבר 18 מחבר Share פורסם 2004 בספטמבר 18 זה מעצבן להסתכל על זה ככה (יישור לשמאל! תסדר אותו בבקשה)אממ.. נשבע לך שיישרתי את זה לשמאל, אני מסתכל על הדיון ברגע זה ורואה שהקוד מוצמד לצד שמאל של השורה.. זה רק אצלי ככה?עשיתי איזה 20 פעם "תצוגה מקדימה" עד שזה יצא נורמלי. קישור לתוכן שתף באתרים אחרים More sharing options...
Holy פורסם 2004 בספטמבר 18 Share פורסם 2004 בספטמבר 18 הקוד מיושר לשמאל הבעיה היא עם ה-scoping שלך (הרוחים מהקצה שמגדירים בלוק קוד)הקוד במצב הנוכחי ממש לא קריא קישור לתוכן שתף באתרים אחרים More sharing options...
Vega פורסם 2004 בספטמבר 18 מחבר Share פורסם 2004 בספטמבר 18 עברתי על כל הקוד ועשיתי רווחים לפי מה שנראה לי הגיוני, אני מתנצל אם זה לא ברור.**** את הקוד ששמתי פה עכשיו אני מוסיף להודעה הראשונה כך שיהיה קל לקרוא, וגם בקוד הזה יש שינויים אז אני מוסיף את תלונות הdebugger גם פה וגם בהודעה הראשונה*** #include<stdio.h> #include<stdlib.h> #include<conio.h> #define N 3 /*Sets the number of ColummsxRows [nXn]*/ void initSqr(int a[N][N]); /*Inserts random values in the Matrix*/ int colSum(int a[N][N],int col); /* Receives the Matrix and returns the sum of a given columm*/ int rowSum(int a[N][N],int row); /* Receives the Matrix and return a given row's sum. int mainDiag(int a[N][N]); /*Calculates the sum of the left-to-right diag.*/ int ScndDiag(int a[N][N]); /*Calculates the sum of the right-to-left diag.*/ void main() { int a[N][N]; int sum1=0, sum2=0,h,x, trigger=2; int i; initSqr(a); /*Inserts random values*/ for(i=0;i<N;i++) sum1=sum1+ colSum(a,i); /*Calls the loop to check all of the Columms.*/ for (i=0;i<N;i++) sum2=sum2+rowSum(a,i); if (mainDiag(a)==ScndDiag(a)) trigger=1; if (sum1==sum2&&sum2==sum3 && trigger==1) printf("Ribua Qesem!"); } int colSum(int a[N][N], int col) { int i,sum=0; for(i=0;i<N;i++) sum=sum+a[col];return(sum); } int rowSum(int a[N][N], int row) { int i,sum=0; for(i=0;i<n;i++) sum=sum+a[row];return(sum); } int mainDiag(int a[N][N]) { int i,sum=0; for(i=0;i<n;i++) sum=sum+a;return(sum); } int scndDiag(int a[N][N]) { int i,j=n,sum=0; for(i=0;i<n;i--) { sum=sum+a[j]; j++; }return(sum); } void initSqr(int a) { int i,j; for(i=0;i<n;i++) { for(j=;j<n;j++) { /*randomize(0-100) a[j]; */ }debugger:1. error 25: function 'mainDiag' shuold have a prototype in function main()2. error 28 Expression syntax in function main()3. warning 31: 'trigger' is an assigned value that is never used חבר'ה, אם זה עדיין בלתי-קריא תגידו לי, I'm trying my best... קישור לתוכן שתף באתרים אחרים More sharing options...
infer73 פורסם 2004 בספטמבר 18 Share פורסם 2004 בספטמבר 18 לגבי 2 הטעויות הראשונות שהוא נותן,אין לי מושג...לגבי השלישית,זאת לא באמת טעותהוא פשוט אומר שאתה נותן לtrigger ערך (2) שאףפעם לא משתמשים בו,אבל זה לא קריטיזה ירוץ בלי קשר לזהעכשיו הייתי מנסה את התוכנית שכתבת בקומפיילר אבל איןלי אז אני מצטער שאני לא יכול לעזור בקשר ל-2 השגיאות האחרותיכול להיות שהטעות השנייה היא בשורה הזאת:(sum1==sum2&&sum2==sum3 && trigger==1) => (sum1==sum2 && sum2==sum3 && trigger==1)חסר לך רווחים שם,תנסה עם התיקון ששמתי ותראה אם זה יעבודאבל עדיין אין לי מושג מה הבעיה הראשונה שהוא מדווח עליה קישור לתוכן שתף באתרים אחרים More sharing options...
Vega פורסם 2004 בספטמבר 18 מחבר Share פורסם 2004 בספטמבר 18 תיקנתי את ה-if ועכשיו יש לי רק שגיאה אחת, שאני ממש לא מבין מה הבעיה:Error 25: Function 'mainDiag' should have a prototype in function mainהשורה המדוברת היא:if(mainDiag)a)==ScndDiag(a))העליתי כבר השערה בקשר לשורה הספציפית הזו שישנה טעות Syntax, אך אני מכיר טוב מספיק את השימוש בפונקציות על מנת לאתר מהי.תודה קישור לתוכן שתף באתרים אחרים More sharing options...
Holy פורסם 2004 בספטמבר 18 Share פורסם 2004 בספטמבר 18 בשורה int rowSum(int a[N][N],int row); /* Receives the Matrix and return a given row's sum.לא סגרת את ההערה לכן ההשורה שאחריה שמכריזה על mainDiag עדיין נחשבת כהערהכדאי לך לעבוד בסביבה גרפית, בה יש צבע מיוחד לכל סוג של פקודה (למשל הערה בירוק). ככה תראה את הבעיה הזאת מיד קישור לתוכן שתף באתרים אחרים More sharing options...
Vega פורסם 2004 בספטמבר 18 מחבר Share פורסם 2004 בספטמבר 18 תודה רבה לכולכם, התוכנה עובדת עכשיו בלי שגיאות.. אני אנסה להבין איך לעשות את הפונקציה האחרונה ע"פי הדיונים שכבר היו פה בפורום (אני מקווה).כדאי לך לעבוד בסביבה גרפית, בה יש צבע מיוחד לכל סוג של פקודה (למשל הערה בירוק). ככה תראה את הבעיה הזאת מידהאם תוכל להמליץ לי על סביבה גרפית מסוימת עבור Windows XP? אני משתמש כרגע ב-Turbo C.אני לא בטוח אם מעבר כזה יהיה לי טוב כיוון שבסופו של דבר את הבגרות בשפת C אני עושה בלי הרבה עזרה מקומפיילרים, על דף ועט...Vega. קישור לתוכן שתף באתרים אחרים More sharing options...
infer73 פורסם 2004 בספטמבר 18 Share פורסם 2004 בספטמבר 18 וואלה צודק לא ראיתי את זה עד עכשיו...ואם כבר,עם איזה קומפיילר אתה ממליץ לעבוד Holy? (+לינק אם אפשר) קישור לתוכן שתף באתרים אחרים More sharing options...
surfface פורסם 2004 בספטמבר 18 Share פורסם 2004 בספטמבר 18 אני עובד עם TCLITE ואצלי זה לא צובע את המילים תביא לינק לקופילר שעושה את זה כפי שאמרת נ''ב בבית ספר יש לנו כזה אני לא בטוח מה השם נראה לי MINEC נכון? קישור לתוכן שתף באתרים אחרים More sharing options...
Vega פורסם 2004 בספטמבר 18 מחבר Share פורסם 2004 בספטמבר 18 יש לי עכשיו בעיה שאני מקבל שגיאה שנקראת Linker error.הקוד הוא: #include<stdio.h> #include<stdlib.h> #include<conio.h> #define N 3 /*Sets the number of ColummsxRows [nXn]*/ void initSqr(int a[N][N]); /*Inserts random values in the Matrix*/ int colSum(int a[N][N],int col); /* Receives the Matrix and returns the sum of a given columm*/ int rowSum(int a[N][N],int row); /* Receives the Matrix and return a given row's sum. int mainDiag(int a[N][N]); /*Calculates the sum of the left-to-right diag.*/ int ScndDiag(int a[N][N]); /*Calculates the sum of the right-to-left diag.*/ void main() { int a[N][N]; int sum1=0, sum2=0,h,x, trigger=2; int i; initSqr(a); /*Inserts random values*/ for(i=0;i<N;i++) sum1=sum1+ colSum(a,i); /*Calls the loop to check all of the Columms.*/ for (i=0;i<N;i++) sum2=sum2+rowSum(a,i); if (mainDiag(a)==ScndDiag(a)) trigger=1; if (sum1==sum2&&sum2==sum3 && trigger==1) printf("Ribua Qesem!"); } int colSum(int a[N][N], int col) { int i,sum=0; for(i=0;i<N;i++) sum=sum+a[col];return(sum); } int rowSum(int a[N][N], int row) { int i,sum=0; for(i=0;i<n;i++) sum=sum+a[row];return(sum); } int mainDiag(int a[N][N]) { int i,sum=0; for(i=0;i<n;i++) sum=sum+a;return(sum); } int scndDiag(int a[N][N]) { int i,j=n,sum=0; for(i=0;i<n;i--) { sum=sum+a[j]; j++; }return(sum); } void initSqr(int a) { int i,j; for(i=0;i<n;i++) { for(j=;j<n;j++) { /*randomize(0-100) a[j]; */ }השגיאה היא: Linker error: undefined symbol ScndDiag(int[3]near*) in module a:\qesem.cppאין לי מושג מה זה linker ובכלל מאיפה באה השגיאה הזו.. מישהו מוכן להאיר את עיניי? קישור לתוכן שתף באתרים אחרים More sharing options...
Holy פורסם 2004 בספטמבר 18 Share פורסם 2004 בספטמבר 18 יש לך כמויות של שגיאות, אי אפשר לעבור איתך עליהן אחת אחת, אתה צריך לעבור על הקוד שלךסתם לדוגמא sum3 לא מוגדר, השתמשת בלולאה ב-n במקום N, לא סגרת את הפונקציה האחרונה, הפונקציה initSqr מוצהרת כמקבלת a[N][N] אבל במימוש מקבלת רק a ועוד מלא שגיעותהמטרה של הפורום הזה הוא לא להיות פורום דיבאגינג קישור לתוכן שתף באתרים אחרים More sharing options...
Vega פורסם 2004 בספטמבר 18 מחבר Share פורסם 2004 בספטמבר 18 אני באמת מתנצל על ההצפה, ובגלל זה גם לא פתחתי לדיון חדש כמו ששמת לב - פשוט שיניתי כותרת. בכל אופן ביקשתי מלא מעט חברים שלי לבדוק את הקוד ולעבור עליו, ובאמת שאין לי מושג מה זה Linker error. בקשר לsum3 זה כבר לא קיים, מחקתי אותו מזמן, זה פשוט היה ניסיון לשיטה אחרת שחשבתי עליה. בכל מקרה, אתה רוצה תנעל, מצידי תעשה מה שבראש שלך. אני אמשיך לחפש ברשת וב-IRC מה לעזאזל פשר ה-linker error הזה.שיהיה לך המשך עבודה נעימה קישור לתוכן שתף באתרים אחרים More sharing options...
Recommended Posts
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.