Advertisement
Guest User

Untitled

a guest
Jan 17th, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.94 KB | None | 0 0
  1. #include <stdio.h>
  2. #define N 10
  3.  
  4. double TotalAvg(int a[]);
  5. double UpdateAvg(int a[], double avg, int number, char op, int index);
  6. int FindBestPartition(int a[]);
  7.  
  8. int main()
  9. {
  10. int i=0, partition=-1;
  11. int a[N] = {0};
  12. printf("Please enter %d elements to find their best partition:\n", N);
  13. for(i=0; i<N; i++) /*קליטת ערכים לאיברי המערך*/
  14. {
  15. scanf("%d", &a[i]);
  16. }
  17. partition = FindBestPartition(a); /*קריאה לפונקציה המחשבת את אינדקס החלוקה הטוב ביותר*/
  18. printf("Best partition for the given array is at index: %d\n", partition);
  19. return 0;
  20. }
  21.  
  22. double TotalAvg(int a[]) /*פונקציה לחישוב הממוצע הכללי של המערך*/
  23. {
  24. int i=0;
  25. double avg=0, sum=0;
  26. for (i=0; i<N; i++)
  27. {
  28. sum+=a[i];
  29. }
  30. avg=sum/N;
  31. return avg;
  32. }
  33.  
  34. double UpdateAvg(int *a, double avg, int number, char op, int index) /*פונקציה לחישוב ממוצע עדכני, בהתאם לאופרטור שמתקבל*/
  35. {
  36.  
  37. if (op=='+')
  38. {
  39. avg= ((avg*number)+a[index])/(number+1);
  40. return avg;
  41. }
  42.  
  43. if (op=='-')
  44. {
  45. avg= ((avg*number)-a[index])/(number-1);
  46. return avg;
  47. }
  48. return avg;
  49.  
  50. }
  51.  
  52. int FindBestPartition(int a[]) /*הגדרת פונקציה FindBestPartition*/
  53. {
  54. int index=0, i=0;
  55. double avgl=0, avgr=(TotalAvg(a)), maxdiff=0, middiff=0;
  56. for (index=0; index<N; index++) /*לולאה הפועלת עבור אינדקס רץ */
  57. {
  58. avgl=UpdateAvg(a,avgl,index,'+',index); /* חישוב הממוצע העדכני של הצד השמאלי של המערך באמצעות הפונקציה UpdateAvg*/
  59. avgr=UpdateAvg(a,avgr,N-index,'-',index); /* חישוב הממוצע העדכני של הצד הימני של המערך באמצעות הפונקציה UpdateAvg*/
  60. if (index==N-1) /* עדכון ערך הממוצע של הצד הימני של המערך כאשר האינדקס מסיים לרוץ על כל המערך (0 איברים בצד ימין*/
  61. {
  62. avgr=0;
  63. }
  64. middiff=avgl-avgr; /*משתנה ביניים השווה להפרש בין ממוצע צד שמאל לממוצע צד ימין*/
  65. if (middiff<0) /*בדיקת אי שליליות ההפרש וביצוע פעולת ערך מוחלט במידה ואי שלילי*/
  66. {
  67. middiff*=-1;
  68. }
  69. if (middiff>maxdiff) /*אם ערך משתנה הביניים גדול מערך המשתנה שמכיל
  70. את ההפרש המקסימלי, ביצוע הצבה למשתנה המקסימלי של משתנה הביניים*/
  71. {
  72. maxdiff=middiff;
  73. i=index; /*עדכון ערך המשתנה המוחזר לערך האינדקס שעבורו מתקבל הפרש מקסימלי*/
  74. }
  75. }
  76.  
  77. return i;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement