Среднее арифметическое

Тема в разделе "WASM.ZEN", создана пользователем t00x, 13 ноя 2010.

  1. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    подскажите, есть ли способ считать сабж не сложением элементов и итоговым делением на количество, а каким-либо другим способом?
     
  2. MSoft

    MSoft New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    2.854
    Если это не арифметическая прогрессия, то вроде бы нету
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    перебор, по всем значениям от min до max.
    проверять как сумму (xi - X), она должны быть 0.
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Делением каждого элемента на n и итоговым сложением. ^)
     
  5. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    av=((av*n++)+x)/n

    по действиям
    av*=n
    n++
    av+=x
    av/=n
     
  6. Ustus

    Ustus New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2005
    Сообщения:
    834
    Адрес:
    Харьков
    max7C4

    UB однако, лучше так не баловаться :)
     
  7. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    max7C4
    А на мой взгляд n++ будет выполняться последним действием.
     
  8. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    Black_mirror
    А скобочки зачем стоят
    Код (Text):
    1. //WATCOM 1.8
    2.  
    3. #include <windows>
    4. void average(long& a, unsigned long& n, long x)
    5. {
    6.  a=((a*n++)+x)/n;
    7. }
    8. /*
    9. 00401010  /$ 68 0C000000    PUSH 0C
    10. 00401015  |. E8 8F010000    CALL test.004011A9
    11. 0040101A  |. 51             PUSH ECX
    12. 0040101B  |. 56             PUSH ESI
    13. 0040101C  |. 89C1           MOV ECX,EAX
    14. 0040101E  |. 8B02           MOV EAX,DWORD PTR DS:[EDX]
    15. 00401020  |. 8D70 01        LEA ESI,DWORD PTR DS:[EAX+1]
    16. 00401023  |. 8932           MOV DWORD PTR DS:[EDX],ESI
    17. 00401025  |. 0FAF01         IMUL EAX,DWORD PTR DS:[ECX]
    18. 00401028  |. 01D8           ADD EAX,EBX
    19. 0040102A  |. 31D2           XOR EDX,EDX
    20. 0040102C  |. F7F6           DIV ESI
    21. 0040102E  |. 8901           MOV DWORD PTR DS:[ECX],EAX
    22. 00401030  |. 5E             POP ESI
    23. 00401031  |. 59             POP ECX
    24. 00401032  \. C3             RETN
    25. */
    26. int main()
    27. {
    28.  char g[1024];
    29.  long a=0; unsigned long n=0;
    30.  average(a,n,100);
    31.  average(a,n,200);
    32.  average(a,n,300);
    33.  average(a,n,10);
    34.  average(a,n,20);
    35.  average(a,n,30);
    36.  average(a,n,1);
    37.  average(a,n,2);
    38.  average(a,n,3);
    39.  AllocConsole();
    40.  WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), g, wsprintfA(g,"%u of %u",a,n), &n, NULL);
    41.  ReadFile(GetStdHandle(STD_INPUT_HANDLE), g, 1, &n, NULL);
    42.  return 0;
    43. }
     
  9. Black_mirror

    Black_mirror Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2002
    Сообщения:
    1.035
    max7C4
    под рукой только BC31 сейчас есть:
    Код (Text):
    1.    ;   
    2.    ;        for(int i=0;i<5;i++)
    3.    ;   
    4.     ?debug  L 11
    5.     xor si,si
    6.     jmp short @1@114
    7. @1@58:
    8.    ;   
    9.    ;        {
    10.    ;            av=av=((av*n++)+x[i])/n;
    11.    ;   
    12.     ?debug  L 13
    13.     mov bx,si
    14.     shl bx,1
    15.     lea ax,word ptr [bp-10]
    16.     add bx,ax
    17.     mov ax,word ptr [bp-14]
    18.     imul    word ptr [bp-12]
    19.     add ax,word ptr [bx]
    20.     cwd
    21.     idiv    word ptr [bp-12]
    22.     mov word ptr [bp-14],ax
    23.     mov word ptr [bp-14],ax
    24.     inc word ptr [bp-12]
    25.     ?debug  L 11
    26.     inc si
    27. @1@114:
    28.     cmp si,5
    29.     jl  short @1@58
    Так что видимо нужно смотреть стандарт.
     
  10. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    в 6ом посте написано же что UB
     
  11. vptrlx

    vptrlx New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2009
    Сообщения:
    15

    поделить и умножить на n, отлично )
     
  12. t00x

    t00x New Member

    Публикаций:
    0
    Регистрация:
    15 фев 2007
    Сообщения:
    1.921
    мм, если считать в целых числах под сумму одинаково придёться выделить переменную большей размерности :dntknw:
     
  13. drmad

    drmad New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    332
    Адрес:
    Russia

    Между прочим, n++ != n.

    З.Ы. Кста, метод вполне рабочий и в некоторых случаях (если можно закрыть глаза на накопление ошибки) - крайне рекомендуемый.
     
  14. vptrlx

    vptrlx New Member

    Публикаций:
    0
    Регистрация:
    2 сен 2009
    Сообщения:
    15
    зато n == n++