פורסם 2005 ביוני 520 שנים שלום לכולם זקוק לעזרתכם בתרגיל הבא: כתוב פונקציה המקבלת שני מערכים בגודל זהה (n) ומספר שלם k ומחזירה ערך שונה מ-0 (לדוגמא 1) אם קיימים שני אברים, אחד במערך a ואחד במערך b, a, b[j], כך שמתקיים a-b[j]=k . במקרה זה על הפונקציה להחזיר את שני האינדקסים שלהם (באמצעות הפרמטרים: index1 , index2). במידה ולא קיימים שני איברים כאלו הפונקציה תחזיר 0. חתימת הפונקציה: int find_elements(int a[], int b[], int n, int k, int *index1, int *index2). לדוגמא: 2 14 2 12 4 :a 9 3 7 11 14 :b עבור k= 3 למשל, הפונקציה תחזיר 1 ואילו עבור k= 6 הפונקציה תחזיר 0. כתוב תכנית main שתקרא מהמשתמש ערכים לתוך המערך ואת הערך k, תבדוק תקינות הקלט, ותקרא לפונקצית find_elements. לאחר החזרה מהפונקציה, עליה להדפיס את שני האיברים ואת האינדקסים שלהם - אם קיימים, אחרת להודיע שאין כאלה. במידה וקיימים יותר משני איברים, הפונקציה תחזיר זוג כלשהוא. הערות: - לשם בדיקה והגשה, עליכם להגדיר 5=N. - תזכורת: עליכם להשתמש ב- #define N 5 אבל אין להשתמש ב-N בתוך הפונקציה (אלא רק ב-n). כאן נתקעתי: #include<stdio.h>#define N 5int main(){int a[N],b[N],i,j,n=N,k,element_num,index1,index2,value1,value2;find_elements (a,b,n,k,element_num,&index1,&index2,&value1,&value2);printf("\n%d elements exist",element_num);printf("\nThe index in the first array is: %d, the value is: %d",index1,value1);printf("\nThe index in the second array is: %d, the value is: %d",index2,value2);return 0;}int find_elements(int a[],int b[],int n,int k,int element_num,int *index1,int *index2,int *value1,int *value2){int i,j,result;printf("Please insert the first array (5 numbers): \n");for(i=0;i<n-1;i++) if (scanf("%d ",&a[i])!=1) { printf("\nInput error!"); return 1; }printf("\nPlease insert the second array (5 numbers): \n");for(j=0;j<n;j++) if (scanf("%d ",&b[j])!=1) { printf("\nInput error!"); return 1; }printf("\nPlease insert k: \n"); if (scanf("%d\n",k)!=1) { printf("\nInput error!"); return 1; }for(i=0,element_num=0;i<n-1;i++)for(j=0,element_num=0;j<n-1;j++) { if (a[i]-b[j]!=k) result=0; else { element_num++; *value1=a[i]; *value2=b[j]; index1=&i; index2=&j; result=1; } }return result;} תודה מראש על העזרה
פורסם 2005 ביוני 520 שנים index1=&i;index2=&j;למה?אינדקס 1 שווה לכתובת של איי, אינדקס 2 שווה לכתובת של ג'יימה שאומר שברגע שאתה יוצא מהפונקציה וחזר למיין שני האינדקסים מצביעים לשטח זיכרון שלא שייך יותר לתוכנית שלך
פורסם 2005 ביוני 520 שנים אני מרגיש כמו זקן שדורכים לו על הדשא אבל כמה פעמים אפשר להגיד לכם לא להעביר מערכים על ה- stack . כמה?!ועוד להשתמש בפרמטרים עם אותם שמות כמו משתנים גלובליים.isildur צודק, וגם הלולאה שלך לא יוצאת כשהיא מוצאת את האינדקסים הנכונים.
פורסם 2005 ביוני 520 שנים מחבר במקום להגיב בהגדלת פונטים אולי תגיב בתיקון? לדעתי, הרבה יותר מועיל :-\
פורסם 2005 ביוני 520 שנים מחבר תיקנתי קצת, אבל התוכנית לא מגיעה ל-printf-ים למטה: #include<stdio.h>#define N 5int i,j,result,k,n,*index1,*index2;int main(){int a[N],b[N],k,*index1,*index2;printf("\nPlease insert the first array (5 numbers): \n");for(i=0;i<N-1;i++) if (scanf("%d ",&a[i])!=1) { printf("\nInput error!"); return 1; }printf("\nPlease insert the second array (5 numbers): \n");for(j=0;j<N;j++) if (scanf("%d ",&b[j])!=1) { printf("\nInput error!"); return 1; }printf("\nPlease insert k: \n"); if (scanf("%d\n",k)!=1) { printf("\nInput error!"); return 1; }find_elements (a,b,N,k,index1,index2);return 0;}int find_elements(int a[],int b[],int n,int k,int *index1,int *index2){for(i=0;i<n-1;i++) { for(j=0;j<n-1;j++) if (a[i]-b[j]!=k) return 0; else { *index1=a[i]; *index2=b[j]; a[i]=i; b[j]=j; result=i+1; } }printf("\n%d elements exist",result);printf("\nThe index in the first array is: %d, the value is: %d",a[i],*index1);printf("\nThe index in the second array is: %d, the value is: %d",b[j],*index2);return result;}
פורסם 2005 ביוני 620 שנים תיקנתי את התוכנית שלך, תעבור על הקוד ואם משהו לא יהיה מובן תשאל#include<cstdio>#define N 5int find_elements(int a[],int b[],int n,int k,int *index1,int *index2);int main(){ int a[N],b[N],k,index1,index2; int i,j; printf("\nPlease insert the first array (5 numbers): \n"); for(i=0;i<N;i++) if (scanf("%d",&a[i])!=1) { printf("\nInput error!"); return 1; } printf("\nPlease insert the second array (5 numbers): \n"); for(j=0;j<N;j++) if (scanf("%d",&b[j])!=1) { printf("\nInput error!"); return 1; } printf("\nPlease insert k: \n"); if (scanf("%d",&k)!=1) { printf("\nInput error!"); return 1; } find_elements(a,b,N,k,&index1,&index2); return 0;}int find_elements(int a[],int b[],int n,int k,int *index1,int *index2){ int i,j,result1=0; for(i=0;i<n;i++) { for(j=0;j<n;j++) if ((a[i]-b[j])==k) { *index1=a[i]; *index2=b[j]; result1=i+1; printf("%d elements exist\n",result1); printf("The index in the first array is: %d, the value is: %d\n",i,*index1); printf("The index in the second array is: %d, the value is: %d\n",j,*index2); return result1; } } return result1;}
פורסם 2005 ביוני 620 שנים מחבר תודה רבה :-* התכנית כמעט מושלמת למעט ה-result1 , שאמנם נותן תוצאה נכונה עבור הדוגמה הספציפית בתרגיל אך לא נותן תוצאה נכונה עבור מקרים אחרים, כמו: a: 4 4 4 4 4 b: 2 2 2 2 2 k=2 אבל עדיין, כל הכבוד. עזרת לי מאד
פורסם 2005 ביוני 620 שנים מחבר תודה רבה, עזרתם לי מאד קוד סופי עובד: #include<stdio.h>#define N 5int find_elements(int a[],int b[],int n,int k,int *index1,int *index2);int main(){int a[N],b[N],k,index1,index2;int i,j;printf("\nPlease insert the first array (5 numbers): \n");for(i=0;i<N;i++)if (scanf("%d",&a[i])!=1) { printf("\nInput error!"); return 1; }printf("\nPlease insert the second array (5 numbers): \n");for(j=0;j<N;j++) if (scanf("%d",&b[j])!=1) { printf("\nInput error!"); return 1; }printf("\nPlease insert k: \n");if (scanf("%d",&k)!=1) { printf("\nInput error!"); return 1; }find_elements(a,b,N,k,&index1,&index2);return 0;}int find_elements(int a[],int b[],int n,int k,int *index1,int *index2){int i,j,result=0,x,y;for(i=0;i<n;i++) { for(j=0;j<n;j++) if ((a[i]-b[j])==k) { *index1=a[i];x=i; *index2=b[j];y=j; result++; } }if (result!=0) { printf("%d elements exist\n",result); printf("The index in the first array is: %d, the value is: %d\n",x,*index1); printf("The index in the second array is: %d, the value is: %d\n",y,*index2); }return result;}
פורסם 2005 ביוני 620 שנים מחבר אכן הבנתי, תודה, למרות, שלקח לי קצת זמן למצוא ולתקן את השגיאה בקוד האחרון שלך .
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.