Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
 
Jura5_ik
0 / 0 / 1
Регистрация: 08.04.2016
Сообщений: 22
1

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

24.05.2016, 21:16. Просмотров 392. Ответов 6
Метки нет (Все метки)

Добрый вечер уважаемые знатоки
Столкнулся я с проблемой в одной учебной задаче и решить мне ее почему-то не удается, прога должна считать и выводить среднее с десятыми 6 чисел. Это она и делает, но работает к сожалению не правильно. К примеру среднее чисел (1+2+3+4+5+6)/6 = 3.3
Вопрос: что я делаю не так?

/* Не обращайте внимания на польский язык, учусь на данный момент в Польше и должен писать на польском */

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
  int main(){
 
         __int16 zme1 = 0;
         __int16 zme2 = 0;
         __int16 zme3 = 0;
         __int16 zme4 = 0;
         __int16 zme5 = 0;
         __int16 zme6 = 0;
         __int32 zme7 = 0;
 
    cout << "Podaj liczby 1 : " << endl;
    cin >> zme1;
    cout << "Podaj liczbu 2 : " << endl;
    cin >> zme2;
    cout << "Podaj liczby 3 : " << endl;
    cin >> zme3;
    cout << "Podaj liczbu 4 : " << endl;
    cin >> zme4;
    cout << "Podaj liczby 5 : " << endl;
    cin >> zme5;
    cout << "Podaj liczbu 6 : " << endl;
    cin >> zme6;
    
    _asm {
        mov ax, zme1;
        push ax;
        mov ax, zme2;
        push ax;
        mov ax, zme3;
        push ax;
        mov ax, zme4;
        push ax;
        mov ax, zme5;
        push ax;
        mov ax, zme6;
        push ax;
        call proc;
 
        add ESP, 12;
        jmp finish;
 
    proc:
        mov BX, 0;
        mov ECX, 6;
        add ESP, 4;
    cykl:
        pop AX;
        add BX, AX;
        loop cykl;
        xor EDX, EDX;
        mov CX, 6;
        mov AX, BX;
        div CX;
        sub ESP, 16;
        ret;
    finish:
        mov zme1, AX;
        mov zme7, edx;
        
    }
 
    cout << "Wynik to : " << zme1 << '.' << zme7 << endl;
 
        system("pause");
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2016, 21:16
Ответы с готовыми решениями:

В матрице A[1..N,1..M] определить среднее арифметическое значение чисел в столбцах, находящихся до среднего столбца (SR1) и среднее арифметическое зна
Написать прогу на паскале со вставкой ассемблера, т.е. создание и вывод матрицы и средних сделать в...

В массиве определить среднее арифметическое положительных чисел, все отрицательные элементы увеличить на это среднее
Добрый день. Нужно написать программу которая создаёт массив А . Которая определяет среднее...

Найти среднее арифметическое чисел
Здравствуйте, мне задали задачи по асемблеру и я не могу её решить. Помогите пожалуйста. Вот...

Найти среднее арифметическое чисел
Здравствуйте, уважаемые программисты! Помогите, пожалуйста, решить задачку: нужно найти среднее...

Найти среднее арифметическое отрицательных чисел
.model tiny .code .startup Org 100h Jmp Short Start Vector Dw -2,...

6
R71MT
5789 / 1545 / 320
Регистрация: 29.07.2014
Сообщений: 2,569
Записей в блоге: 5
25.05.2016, 08:20 2
Jura5_ik, попробуй так:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
_asm {
        xor  eax,eax
        xor  ebx,ebx
        xor  ecx,ecx
        mov  ax,zme1;
        push ax;
        mov  ax,zme2;
        push ax;
        mov  ax,zme3;
        push ax;
        mov  ax,zme4;
        push ax;
        mov  ax,zme5;
        push ax;
        mov  ax,zme6;
        push ax;
 
        xor  ax,ax
        mov  cx,6;
 cykl:
        pop  bx;
        add  ax,bx;
        loop cykl;
 
        mov  bx,6
        xor  edx,edx;
        div  bx
 
        mov zme1,ax;
        mov zme7,dx;
        }
0
Jura5_ik
0 / 0 / 1
Регистрация: 08.04.2016
Сообщений: 22
26.05.2016, 00:53  [ТС] 3
та же ошибка. число после запятой меньше на 2 десятых

Добавлено через 10 минут
Ошибка с недостачей двух десятых устранилась так то очень легко:
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
_asm {
                xor  eax, eax
        xor  ebx, ebx
        xor  ecx, ecx
        mov  ax, zme1;
        push ax;
        mov  ax, zme2;
        push ax;
        mov  ax, zme3;
        push ax;
        mov  ax, zme4;
        push ax;
        mov  ax, zme5;
        push ax;
        mov  ax, zme6;
        push ax;
 
        xor  ax, ax
        mov  cx, 6;
    cykl:
        pop  bx;
        add  ax, bx;
        loop cykl;
 
        mov  bx, 6
        xor edx, edx;
        div  bx
        
        mov zme1, ax;
        add edx, 2;
        mov zme7, edx;
}
предпоследней строчкой, но вот решение не очень красивое, как-то просто плюсовать 2 не совсем то что хотелось бы...
0
R71MT
5789 / 1545 / 320
Регистрация: 29.07.2014
Сообщений: 2,569
Записей в блоге: 5
26.05.2016, 04:20 4
..у меня правильно считает.
0
Constantin Cat
3600 / 1152 / 381
Регистрация: 28.02.2015
Сообщений: 2,533
Завершенные тесты: 1
26.05.2016, 09:22 5
Jura5_ik, R71MT,

(1+2+3+4+5+6)/6 = 21/6 = 18/6 + 3/6 = 3 + 1/2
Вспомнили дроби? Преобразование дробей?
Добавляете умножение остатка на 10 и деление результата на 6.
0
R71MT
5789 / 1545 / 320
Регистрация: 29.07.2014
Сообщений: 2,569
Записей в блоге: 5
26.05.2016, 09:53 6
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
C:\>debug
-a
13A2:0100 mov ax,15
13A2:0103 mov bx,6
13A2:0106 xor dx,dx
13A2:0108 div bx
13A2:010A
-r
AX=0000  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=13A2  ES=13A2  SS=13A2  CS=13A2  IP=0100   NV UP EI PL NZ NA PO NC
13A2:0100 B81500        MOV     AX,0015
-t
AX=0015  BX=0000  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=13A2  ES=13A2  SS=13A2  CS=13A2  IP=0103   NV UP EI PL NZ NA PO NC
13A2:0103 BB0600        MOV     BX,0006
-t
AX=0015  BX=0006  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=13A2  ES=13A2  SS=13A2  CS=13A2  IP=0106   NV UP EI PL NZ NA PO NC
13A2:0106 31D2          XOR     DX,DX
-t
AX=0015  BX=0006  CX=0000  DX=0000  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=13A2  ES=13A2  SS=13A2  CS=13A2  IP=0108   NV UP EI PL ZR NA PE NC
13A2:0108 F7F3          DIV     BX
-t
AX=0003  BX=0006  CX=0000  DX=0003  SP=FFEE  BP=0000  SI=0000  DI=0000
DS=13A2  ES=13A2  SS=13A2  CS=13A2  IP=010A   NV UP EI PL ZR NA PE NC
13A2:010A 0000          ADD     [BX+SI],AL                         DS:0006=EE
-
Результат: AX = 3, DX = 3
0
Constantin Cat
3600 / 1152 / 381
Регистрация: 28.02.2015
Сообщений: 2,533
Завершенные тесты: 1
26.05.2016, 10:00 7
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
model tiny
.code
org 100h
szMass  equ 8
start:  lea di,mass
 
    xor ax,ax
    mov cx,szMass
@@01:   add al,[di]
    adc ah,0
    inc di
    loop    @@01
;
    mov ax,321
    xor si,si
    mov bx,10
@@02:   mov cx,szMass
    xor dx,dx
    div cx
    push    dx
    call    outNum
    pop ax
    or  ax,ax
    jz  @@03
    or  si,si
    jnz @@1
    push    ax
    mov al,'.'
    int 29h
    mov si,1
    pop ax
@@1:    xor dx,dx
    mul bx
    jmp @@02
@@03:   ret
OutNum: xor cx,cx
@@04:   xor dx,dx
    div bx
    push    dx
    inc cx
    or  ax,ax
    jnz @@04
@@05:   pop ax
    add ax,'0'
    int 29h
    loop    @@05
    ret
;
Mass    label   byte
i_mass  =   1
    rept    szMass
    db  i_mass
i_mass  =   i_mass + 1
    endm
Добавлено через 54 секунды
Цитата Сообщение от R71MT Посмотреть сообщение
Результат: AX = 3, DX = 3
Это 3/6, а не 3/10.
0
26.05.2016, 10:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.05.2016, 10:00

Вычислить среднее арифметическое четных чисел последовательности
Дана последовательность из 10 целых чисел от 250 до 269. Вычислить среднее арифметическое четных...

Найти среднее арифметическое массива целых чисел
Найти среднее арифмитическое суммы массива 64элемента целых размером в 1byte написать команды для...

В массиве слов найти среднее арифметическое чисел, больших 10
Здравствуйте! Помогите пожалуйста, не понимаю, в чем ошибка! Найти среднее арифметическое...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru