Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #define N 10
- double TotalAvg(int a[]);
- double UpdateAvg(int a[], double avg, int number, char op, int index);
- int FindBestPartition(int a[]);
- int main()
- {
- int i=0, partition=-1;
- int a[N] = {0};
- printf("Please enter %d elements to find their best partition:\n", N);
- for(i=0; i<N; i++) /*קליטת ערכים לאיברי המערך*/
- {
- scanf("%d", &a[i]);
- }
- partition = FindBestPartition(a); /*קריאה לפונקציה המחשבת את אינדקס החלוקה הטוב ביותר*/
- printf("Best partition for the given array is at index: %d\n", partition);
- return 0;
- }
- double TotalAvg(int a[]) /*פונקציה לחישוב הממוצע הכללי של המערך*/
- {
- int i=0;
- double avg=0, sum=0;
- for (i=0; i<N; i++)
- {
- sum+=a[i];
- }
- avg=sum/N;
- return avg;
- }
- double UpdateAvg(int *a, double avg, int number, char op, int index) /*פונקציה לחישוב ממוצע עדכני, בהתאם לאופרטור שמתקבל*/
- {
- if (op=='+')
- {
- avg= ((avg*number)+a[index])/(number+1);
- return avg;
- }
- if (op=='-')
- {
- avg= ((avg*number)-a[index])/(number-1);
- return avg;
- }
- return avg;
- }
- int FindBestPartition(int a[]) /*הגדרת פונקציה FindBestPartition*/
- {
- int index=0, i=0;
- double avgl=0, avgr=(TotalAvg(a)), maxdiff=0, middiff=0;
- for (index=0; index<N; index++) /*לולאה הפועלת עבור אינדקס רץ */
- {
- avgl=UpdateAvg(a,avgl,index,'+',index); /* חישוב הממוצע העדכני של הצד השמאלי של המערך באמצעות הפונקציה UpdateAvg*/
- avgr=UpdateAvg(a,avgr,N-index,'-',index); /* חישוב הממוצע העדכני של הצד הימני של המערך באמצעות הפונקציה UpdateAvg*/
- if (index==N-1) /* עדכון ערך הממוצע של הצד הימני של המערך כאשר האינדקס מסיים לרוץ על כל המערך (0 איברים בצד ימין*/
- {
- avgr=0;
- }
- middiff=avgl-avgr; /*משתנה ביניים השווה להפרש בין ממוצע צד שמאל לממוצע צד ימין*/
- if (middiff<0) /*בדיקת אי שליליות ההפרש וביצוע פעולת ערך מוחלט במידה ואי שלילי*/
- {
- middiff*=-1;
- }
- if (middiff>maxdiff) /*אם ערך משתנה הביניים גדול מערך המשתנה שמכיל
- את ההפרש המקסימלי, ביצוע הצבה למשתנה המקסימלי של משתנה הביניים*/
- {
- maxdiff=middiff;
- i=index; /*עדכון ערך המשתנה המוחזר לערך האינדקס שעבורו מתקבל הפרש מקסימלי*/
- }
- }
- return i;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement