עבור לתוכן

שאלה ב-C

Featured Replies

פורסם

צריך סיוע במימוש התכנית הבאה:

נתון מערך a בגודל N (הגדירו את N ב-define). כתבו תוכנית שמסדרת לתוך מערך b שאף הוא בגודל N את המספרים ממערך a כך שהשליליים נמצאים בתחילת המערך, החיוביים בסופו והאפסים ביניהם.

שימו לב! סדר המספרים בתוך המערך בין החיוביים לבין עצמם ובין השליליים לבין עצמם לא אמור להשתנות.

יש לקלוט ערכים למערך a. לאחר מכן יש לעבור על המערך a לכל היותר פעמיים ליצירת המערך b.

זה הקוד שלי, שהבעיה איתו, שהוא עובר על המערך 3 פעמים, אך מותר רק פעמיים:

#include<stdio.h> 
#define N 5
void sort_array(int a[], int b[], int n);

int main()
{

int a[N],b[N],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("\The sorted array is: \n");
sort_array(a,b,N);

return 0;
}

void sort_array(int a[], int b[], int n)
{
int i=0,j=0;

for(i=0;i<n;i++)
  if (a[i]<0)
  {
  b[j]=a[i];
  printf("%d ",b[j]);j++;
  }

for(i=0;i<n;i++)
  if (a[i]==0)
  {
  b[j]=a[i];
  printf("%d ",b[j]);j++;
  }
       
for(i=0;i<n;i++)
  if (a[i]>0)
  {
  b[j]=a[i];
  printf("%d ",b[j]);j++;
  }
}

פורסם

מה הקטע , אתה מתכוון שמותר לך להשתמש אך ורק בשניי לולאות בפונקציה ?

פורסם
  • מחבר

לא בדיוק, זה אומר, שאפשר לעבור על מספרי המערך, שנקלט, מקסימום פעמיים.

פורסם

אז זה לא אמור להוות בעיה פשוט תאתחל את המערך השני מראש ( ככה תחסוך את הצבת האפסים ) . :xyxthumbs:

פורסם
  • מחבר

ענק!!! פשוט וגאוני :yelclap:

פורסם

אתה גם יכול בפעם הראשונה לספור כמה חיוביים, שליליים ואפשים יש.

ובלולאה השניה פשוט לשים כל אחד במקום המתאים לו.

למשל אם יש לך את המערך הבא:

1 0 -2 5 -1 0 30

אז יש לך 3 חיוביים, 2 אפסים ו- 2 שליליים.

לכן, בלולאה השניה, את הראשון שתשים(1) תשים במקום ה- 2(אפסים)+2(שליליים)=4

יש לך 0, ולכן תשים אותו במקום 2. אחר כך יש 0, ותשים אותו ב- 0.

אחר כך יש לך 5, תשים אותו במקום 2(אפסים)+2(שליליים)+1(החיובי ששמנו מקודם)=5

ארכיון

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

דיונים חדשים