עבור לתוכן
View in the app

A better way to browse. Learn more.

HWzone

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

עזרה ב-C

Featured Replies

פורסם

שלום לכולם

זקוק לעזרתכם בתרגיל הבא:

  כתוב פונקציה המקבלת שני מערכים  בגודל זהה (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 5

int 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;
}

תודה מראש על העזרה   :)

פורסם


index1=&i;
index2=&j;

למה?

אינדקס 1 שווה לכתובת של איי, אינדקס 2 שווה לכתובת של ג'יי

מה שאומר שברגע שאתה יוצא מהפונקציה וחזר למיין שני האינדקסים מצביעים לשטח זיכרון שלא שייך יותר לתוכנית שלך

פורסם
  • מחבר

איך אפשר לתקן?

פורסם

אני מרגיש כמו זקן שדורכים לו על הדשא אבל כמה פעמים אפשר להגיד לכם לא להעביר מערכים על ה- stack . כמה?!

ועוד להשתמש בפרמטרים עם אותם שמות כמו משתנים גלובליים.

isildur צודק, וגם הלולאה שלך לא יוצאת כשהיא מוצאת את האינדקסים הנכונים.

פורסם
  • מחבר

במקום להגיב בהגדלת פונטים אולי תגיב בתיקון? לדעתי, הרבה יותר מועיל :-\

פורסם
  • מחבר

תיקנתי קצת, אבל התוכנית לא מגיעה ל-printf-ים למטה:

 #include<stdio.h>
#define N 5
int 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;
}

פורסם

תיקנתי את התוכנית שלך, תעבור על הקוד ואם משהו לא יהיה מובן תשאל

#include<cstdio>
#define N 5

int 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;
}

פורסם
  • מחבר

תודה רבה :-*

התכנית כמעט מושלמת למעט ה-result1 , שאמנם נותן תוצאה נכונה עבור הדוגמה הספציפית בתרגיל אך לא נותן תוצאה נכונה עבור מקרים אחרים, כמו:

a: 4 4 4 4 4

b: 2 2 2 2 2

k=2

אבל עדיין, כל הכבוד. עזרת לי מאד :yelclap:

פורסם

תעשה result+=1;

בלי קשר לi.

פורסם
  • מחבר

תודה רבה, עזרתם לי מאד  :xyxthumbs:

קוד סופי עובד:

 #include<stdio.h>
#define N 5

int 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;
}

פורסם

אני מקווה שאתה גם מבין מה היו הטעויות שלך

פורסם
  • מחבר

אכן הבנתי, תודה, למרות, שלקח לי קצת זמן למצוא ולתקן את השגיאה בקוד האחרון שלך :P.

ארכיון

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

דיונים חדשים

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.