פורסם 2004 באוקטובר 1221 שנים יש לך פה לא מעט טעויות if (cheak[c]=x) צריך להיות == (בדיקת שוויון ולא הצבה) cheak(i*total+j)=x; צריך להיות עם סוגריים מרובעים אתה יודע שאתה יכול לעשות מארך חד מימדי בגודל M*N במקום לעשות מארך של מצביעים שמצביעים למארכים בדיוק כמו שיצרת את check? פשוט בשביל לגשת לאיבר i,j תצטרך לגשת לאיבר i*M+j או משהו בסיגנון עריכה - להבא
פורסם 2004 באוקטובר 1221 שנים מחבר זה התוכנית אני עכשיו יריץ אותה אם יהיו טעוית אני יבדוק בכל אופן זה ללא הGOTO#include <stdio.h>#include <alloc.h>#include <stdlib.h>void main(){int i,total,j,x,c,stop;int **line,*cheak;randomize();printf("please insert the line of the riboa");scanf("%d",&total);line=(int**)malloc(total*sizeof(int*));for (i=0;i<total;i++)line=(int*)malloc(total*sizeof(int));cheak=(int*)calloc(total*total,sizeof(int));for(i=0;i<total;i++)for(j=0;j<total;j++) {x=random(total*total+1); for(c=0;c<(i*total+j);c++) if (cheak[c]==x) stop=1; if (stop==1) { J-- break; } else { line[j]=x; cheak[i*total+j]=x; } }}האם יש איזה דברים מוסכמים מראש בערך לדבי הסידור של התוכנית רווחים וכאלה...האם FOR שמים קדימה ואת הפקודות הפנימיות האם לשים רווח ....אני פשוט מעט מסתבך עם כל הרווחים בשביל שזה יראה מסודר..
פורסם 2004 באוקטובר 1221 שנים בשביל מה ה-stop הזה בכלל?אם אתה עושה j-- אחרי break אתה בחיים לא תגיע לפקודה הזאתבכלל כל ה-stop מיותר, במקום לעשות stop=1 אתה יכול ישר לעשות j--; braek;אם אתה מתעקש לעשות stop אתה חייב לאפס אותו כל פעם.אני הייתי עושה את ה-j ב-while, בתכנות נכון יותר לא נהוג לשנות את המונה של הלולאה בתוך הלולאה עצמה, אלה רק באיבר השלישי ב-for. ה-j-- שלך בתוך הלולאה גורם לקוד להיות פחות מובן.
פורסם 2004 באוקטובר 1221 שנים מחבר לא ראיתי את ההודעה שלך וכבר תיקנתיכל התוכנה הזאת נעשתה החופזה רבה...התיקנונים נעשו במספר שניות...התכוונתי לעשות עריכה אבל בטעות עשיתי צטט/אני עכשיו ישנה את זה לWHILE ......ורעיון נחמד מה שאמרת עם המערך החד מימדי.....
פורסם 2004 באוקטובר 1221 שנים תראה, אני מנסה לא להפוך את הפורום הזה לפורום debuging.נסה לכתוב קוד בעצמך, תריץ אותו עד שאתה נתקע ואז תבוא לפה.אני לא רואה טעם לזרוק כל פעם קוד ביניים פה ושאחרים שימצאו לך את השגיאות שאתה יכול למצוא לבד.כשיש לך קוד סופי אם יש לך עוד בעיות או שאלות תכתוב פה.
פורסם 2004 באוקטובר 1221 שנים מחבר הקוד הזה הוא לא סופי אבל הוא לא מבצע מה שהוא אמור לעשות.............הקוד הזה אמור בסופו של דבר ליצור לי ריבוע שיומקמו בו המספרים כמספר המקומות בו וכל מספר ימוקם פעם אחת...לדוגמא לקלט 3 אני יקבל משהו כמו........ 8 6 4 5 1 3 2 7 9 הנה הקוד הנוכחי ומשום מה הוא עושה לי בעיות.. אין בו שגיאות אבל הוא לא מבצע מה שהוא צריךךך#include <stdio.h>#include <alloc.h>#include <stdlib.h>void main(){int i,total,j,x,c,h;int **line,*cheak;randomize();printf("please insert the line of the riboa\n");scanf("%d",&total);line=(int**)malloc(total*sizeof(int*));for (i=0;i<total;i++)line=(int*)malloc(total*sizeof(int));cheak=(int*)calloc(total*total,sizeof(int));j=0;for(i=0;i<total;i++)while (j<total) {x=random(total*total+1);c=0;h=0; while(c<total*total) if (cheak[c]==x || c==(i*total+j)) { h=c; c=total*total; } else c++; if (cheak[h]!=x) { line[j]=x; cheak[i*total+j]=x; j++; } }for(i=0;i<total;i++) { for(j=0;j<total;j++) printf("%d ",line[j]); printf("\n"); }free(line);free(cheak);}
פורסם 2004 באוקטובר 1221 שנים כל התכנות הזה שכיביכול מתחכם פשוט גורם לקוד שלך להיות הרבה פחות ברור, ובגלל זה קשה לך למצוא בו בעיותכל המשחק עם c=total*total בשביל לעצור את הלולאה פשוט מכוער, למה לא לעשות break?למה c לא הולך מראש עד i*total+j במקום total*total?השימוש שלך ב-check גם די מעפן, למה שלא תעשה אותו מארך שמקבל 0 או 1?check שווה 0 אם לא השתמשת עדיין במספר icheck שווה 1 אם השתמשת כבר במספר iעריכה -יעזור אם תיישר את הקוד כמו שצריך, הוא יהיה הרבה יותר קריאהנה כמה תיקונים, אני לא בטוח אם הכל עובד עכשיו#include <stdio.h>#include <alloc.h>#include <stdlib.h>void main(){ int i,total,j,x,c,h; int **line,*cheak; randomize(); printf("please insert the line of the riboa\n"); scanf("%d",&total); line=(int**)malloc(total*sizeof(int*)); for (i=0;i<total;i++) line=(int*)malloc(total*sizeof(int)); cheak=(int*)calloc(total*total,sizeof(int)); j=0; for(i=0;i<total;i++) while (j<total) { x=random(total*total+1); while(c=0;c<i*total+j;c++) if (cheak[c]==x) break; if (c!=total*total && cheak[c]!=x) { line[j]=x; cheak[i*total+j]=x; j++; } } for(i=0;i<total;i++) { for(j=0;j<total;j++) printf("%d ",line[j]); printf("\n"); } free(line); free(cheak);}
פורסם 2004 באוקטובר 1221 שנים מחבר אוקיי מה שרה זה שפשוט התבלבלתי בין הפקודות חשבתי שBREAK מפסיק רק את הסיבוב הנוכחי....C הולך עד i*total+j בשביל יעילות למה לסרוק בפעם החמישית את כל המערך שהוכנסו רק ארבע מספרים.ההצעה האחרונה שלך עם הCHEAK טובה אני יעשה אותה אחרי שאני יראה שהתוכנית הזאת תעבוד...בכל אופן המהדר לא מאשר את התוכנית יש בה שלוש שגיאות...וכולם באותה שורה של הWHILE השני
פורסם 2004 באוקטובר 1221 שנים מחבר מין הסתם כי זה צריך להיות for ולא whileאני פשוט ממש חדש בשפה וגם לא ממש משקיע.....ובאמת שראיתי שהבאת לי WHILE זה נראה לי מאוד מוזר כי לא ראיתי כזה דבר..בכל אופן כל השינויים הקוסמטיים שעשית לתוכנית לא פתרו את הבעיה זה נשאר בדיוק אותו דבר...אבל אני חייב לציין שכל העזרה שלך פה פשוט מצויינת אתה מלמד אותי המון יסודות בתכנות צורת הכתיבה ..וגם עכשיו דרכים לפשט את הבעיה ..אתה פשוט מצויין HOLYאז איך אני סוף סוף יזכה לראות ריבוע יפה...
פורסם 2004 באוקטובר 1221 שנים טעות אחת קטנהאחרי שעברת עם j מ-for ל-while שכחת לאפס את j בתחילת כל לולאה ואיתחלת אותו רק פעם אחת בהתחלהקוד סופי ועובד, יכול להיות טוב יותר אם תעשה את השינוי שאמרתי לך עם check.#include <stdio.h>#include <stdlib.h>#include <stdlib.h>void main(){ int i,total,j,x,c; int **line,*cheak; randomize(); printf("please insert the line of the riboa\n"); scanf("%d",&total); line=(int**)malloc(total*sizeof(int*)); for (i=0;i<total;i++) line=(int*)malloc(total*sizeof(int)); cheak=(int*)calloc(total*total,sizeof(int)); for(i=0;i<total;i++) { for(j=0;j<total;) { x=random(total*total+1); for(c=0;c<i*total+j;c++) if (cheak[c]==x) break; if (c!=total*total && cheak[c]!=x) { line[j]=x; cheak[i*total+j]=x; j++; } } } for(i=0;i<total;i++) { for(j=0;j<total;j++) printf("%d ",line[j]); printf("\n"); } free(line); free(cheak);}השינוי היחיד הוא שעברתי ל-for במקום while ודגאתי לאפס את j ב-for הזה. שים לב שאני לא מקדם את j בפקודה עצמה של ה-for אלה רק במקרה הצורך בהמשך
פורסם 2004 באוקטובר 1221 שנים מחבר טעות אחת קטנהאחרי שעברת עם j מ-for ל-while שכחת לאפס את j בתחילת כל לולאה ואיתחלת אותו רק פעם אחת בהתחלהקוד סופי ועובד, יכול להיות טוב יותר אם תעשה את השינוי שאמרתי לך עם check.כל תוכנית בסופו של דבר לא עובדת בגלל טעויות "קטנות"...............אני חייב לרשום יפה את התוכנית לפעם הבאה ראיתי איך שרשמת הכל יפה ומסודר.....ומובן(כמו מתכנת רציני).עכשיו אני יכול להמשיך לרשום את התוכנית שלי(חצי כבר שלך)....עכשיו אני צריך לסדר עוד משהו בתוכנית כבר יש לי רעיון מקומי(שבמספרים גבוהים הרווחים בין המספרים בריבוע יהיו יפים כך שזה יראה ריבוע.) ועכשיו אני ימשיך את התוכנית כמה משפטי תנאי המטרה שלה זה שהיא תעשה ריבוע שכל שורות והטורים והאלכסונים שווים לאותו מספר..זה אפשרי....וכך אני יוכל לצחוק על חברים שלי שניסו ולא הצליחו אני אישית הצלחתי של 3 ו4(זה קשה-הרבה טכניקה).
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.