ABA


"יש לכם אולי דרך יותר פשוטה מזה לחשב ממוצע משוקלל?"
גירסת הדפסה        
קבוצות דיון פיתוח, תיכנות ובניית אתרים נושא #11155 מנהל    סגן המנהל    מפקח   Winner    צל"ש   מומחה  
אשכול מספר 11155
Kennyz 
חבר מתאריך 2.9.12
615 הודעות
   12:14   31.01.13   
אל הפורום  
  יש לכם אולי דרך יותר פשוטה מזה לחשב ממוצע משוקלל?  
 
   יש לי פונקציה שמחשבת עמלות לאנשי מכירות, הפונקציה מבצעת ממוצע משוקלל לפי כמות מכירות, זה נראה לדעתי על הפנים
איך אפשר לשפר את זה?

תמונה מצורפת (לא הצלחתי לצרף את הקוד כי יצא בלאגן)



                                שתף        
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

  האשכול     מחבר     תאריך כתיבה     מספר  
  הנתונים יושבים בDB? יוחאי 31.01.13 12:25 1
     לא :/ זה יושב במערך Kennyz  31.01.13 12:31 2
  אני לא מכיר משהו כזה, אבל נראה ממש בסדר asco88  01.02.13 08:35 3
     למה אני אומר שאני מחפש קוד יותר דינאמי וקל כי .. Kennyz  01.02.13 11:37 4
         הכנתי לך משהו, יוחאי 01.02.13 13:02 6
  מכתב חומוס 01.02.13 12:28 5
  מבחינת יעילוות אין מה לשפר.. מה שכן, יש בדיקות מיותרות inno3D 01.02.13 21:15 7
     מה דעתך על מה שהכנתי לו?(כמה תגובות למעלה) יוחאי 01.02.13 21:44 8
         אם מה שהוא עשה מספיק לו והוא לא הולך להוסיף מדרגות נגיד inno3D 01.02.13 21:54 9
  קח משהו בסי שארפ.. VeNom  01.02.13 22:02 10
  תודה חברים אני ינסה את הקודים שכתבתם :) Kennyz  02.02.13 20:40 11

       
יוחאי
חבר מתאריך 30.12.15
163 הודעות
   12:25   31.01.13   
אל הפורום  
  1. הנתונים יושבים בDB?  
בתגובה להודעה מספר 0
 
   אתה יכול פשוט לחסוך את כל הקוד המיותר הזה בשאילתא אחת פשוטה מול הדטאבייס.

http://stackoverflow.com/questions/3887063/weighted-average-calculation-in-mysql


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Kennyz 
חבר מתאריך 2.9.12
615 הודעות
   12:31   31.01.13   
אל הפורום  
  2. לא :/ זה יושב במערך  
בתגובה להודעה מספר 1
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
asco88 
חבר מתאריך 17.6.04
26757 הודעות
   08:35   01.02.13   
אל הפורום  
  3. אני לא מכיר משהו כזה, אבל נראה ממש בסדר  
בתגובה להודעה מספר 0
 
זה מאוד ברור


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Kennyz 
חבר מתאריך 2.9.12
615 הודעות
   11:37   01.02.13   
אל הפורום  
  4. למה אני אומר שאני מחפש קוד יותר דינאמי וקל כי ..  
בתגובה להודעה מספר 3
 
   עכשיו יש 4 שלבים למכירות, תחשוב עוד חודש אומרים לי אנחנו צריכים 100 שלבים למכירות
אתה יודע כמה שורות כאלה אני יצטרך לכתוב? זה יהיה בלתי הגיוני


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
יוחאי
חבר מתאריך 30.12.15
163 הודעות
   13:02   01.02.13   
אל הפורום  
  6. הכנתי לך משהו,  
בתגובה להודעה מספר 4
 
  

<?php
function CalculateAverage(array $data) {
//return array with the firs item from every group and make sum from this array
$sum = array_sum(array_map(function ($item) {
return $item[0];
}, $data));

//temp variable for calculate the average
$temp = 0;

//itreate through the group
for ($i = 0; $i < sizeof($data); ++$i) {
$temp += ($data[$i][0] * $data[$i][1]);
}

//get the average
return $temp / $sum;
}

function GetGroup($size, $total, $decrease, $stages) {
$group = array();

for ($i = 0; $i < $size - 1; ++$i) {
array_push($group, array($decrease, $stages[$i]));
}

array_push($group, array($total - (($size - 1) * $decrease), $stages[$size - 1]));

return $group;
}

$sales = 200;
$stages = array(0.3, 0.35, 0.5, 0.75);

$main_factor = 20;
$max_stage = 3;


$stages_params = array(0 => $stages[0]);

for ($i = 1; $i <= $max_stage; ++$i) {
array_push($stages_params, GetGroup($i + 1, $sales, $main_factor, $stages));
}

$stage_index = (floor($sales / $main_factor) > $max_stage) ? $max_stage : floor($sales / $main_factor);


if (!isset($avg) && $stage_index !== 0) {
$avg = CalculateAverage($stages_params[$stage_index]);
}

echo "<pre>";
print_r( $stages_params);
echo $avg;
?>

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


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
חומוס לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 22.4.02
13069 הודעות, 5 פידבק
   12:28   01.02.13   
אל הפורום  
  5. מכתב  
בתגובה להודעה מספר 0
 
לא יצא לי להתעסק עם php אבל נראה כאילו אפשר לעשות את זה עם לולאת for/while פשוטה או עם רקורסיה


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
inno3D
חבר מתאריך 21.4.02
4533 הודעות
   21:15   01.02.13   
אל הפורום  
  7. מבחינת יעילוות אין מה לשפר.. מה שכן, יש בדיקות מיותרות  
בתגובה להודעה מספר 0
 
   אבל הבעיה היחידה זה לא מספיק דינמי להוספת דרגות


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
יוחאי
חבר מתאריך 30.12.15
163 הודעות
   21:44   01.02.13   
אל הפורום  
  8. מה דעתך על מה שהכנתי לו?(כמה תגובות למעלה)  
בתגובה להודעה מספר 7
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
inno3D
חבר מתאריך 21.4.02
4533 הודעות
   21:54   01.02.13   
אל הפורום  
  9. אם מה שהוא עשה מספיק לו והוא לא הולך להוסיף מדרגות נגיד  
בתגובה להודעה מספר 8
 
   אני לא רואה סיבה להאריך ולסבך

למרות שמה שהוא כתב זה טיפה עם חזרות ויש פה פעולות מיותרות


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
VeNom  לחץ כאן להצגת דירוג המשתמש
חבר מתאריך 7.6.02
7922 הודעות, 1 פידבק
   22:02   01.02.13   
אל הפורום  
  10. קח משהו בסי שארפ..  
בתגובה להודעה מספר 0
 
   ערכתי לאחרונה בתאריך 01.02.13 בשעה 22:08 בברכה, VeNom
 
לא בדקתי קומפילציה ומקרי קצה..אבל נראה לי שזה יעבוד..

private double calcSales(int sales)
{
List<double> stages = new List<double> { 0.3, 0.35, 0.5, 0.75 };
const int interval = 20;

int tempSales = sales;
int iteration = 0;
double sum = 0;

while (tempSales > 0)
{
if (iteration < stages.Count - 1 && tempSales > interval)
{
sum += interval * stages[iteration];
tempSales -= interval;
iteration++;
}
else
{
sum += tempSales * stages[iteration];
break;
}
}

return sum / sales;
}


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד
Kennyz 
חבר מתאריך 2.9.12
615 הודעות
   20:40   02.02.13   
אל הפורום  
  11. תודה חברים אני ינסה את הקודים שכתבתם :)  
בתגובה להודעה מספר 0
 
  


                                                         (ניהול: מחק תגובה)
מכתב זה והנלווה אליו, על אחריות ועל דעת הכותב בלבד

תגובה מהירה  למכתב מספר: 
 
___________________________________________________________________

___________________________________________________________________
למנהלים:  נעל | תייק בארכיון | מחק | העבר לפורום אחר | מחק תגובות | עגן אשכול
       



© כל הזכויות שמורות ל-רוטר.נט בע"מ rotter.net