Подсчитать количество элементов, меньших среднего
арифметического. Вот я нашел среднее арифметическое, а сравнить не получается никак и вывести элементы:
data segment
mass dw 2,1,0,2,4,0,1,3,6,1,4,1
Sred_ar dw ?
Kolichestvo dw ?
code segment
start:
mov ax,data
mov ds,ax;
lea bx,mass;
mov cx,12;
xor ax,ax;
L1:add ax,[bx];
inc bx;
inc bx;
loop L1
xor dx,dx;
mov cx,12;
idiv cx;
mov sred_ar,ax;
exit:
mov ax, 4c00h
int 21h
end start
Можете доделать прогу? Подсчитайте пожалуйста количество элементов, меньших среднего арифметического.
Другие языки программирования и технологии
Можете помочь дополнить код в ассемблере. Что-то не получается до конца сделать.
Вы нашли не среднее арифметическое, а только его целую часть.
Чтобы получить правильный результат, нужно проверить остаток от деления на равенство нулю. Если он ненулевой, то необходимо увеличить целую часть среднего арифметического на единицу, иначе при сравнении программа будет выдавать количество элементов, удовлетворяющих условию, меньше, чем это есть в действительности.
Например среднее арифметическое вашего массива 2,083. Вы сохраняете только целую часть, поэтому получите в результате 6, хотя на самом деле элементов, меньших среднего арифметического, 8.
data segment
Array dw 2,1,0,2,4,0,1,3,6,1,4,1
LenArr equ ($ - Array) shr 1
Average dw ?
Counter dw ?
data ends
code segment
assume cs: code, ds: data
start:
mov ax, data
mov ds, ax
lea bx, Array
mov cx, LenArr
xor ax, ax
L1:
add ax, [bx]
add bx, 2
loop L1
xor dx, dx
mov Counter, dx
mov cx, LenArr
div cx
test dx, dx
jz Integer
inc ax
Integer:
mov Average, ax
mov cx, LenArr
lea si, Array
Repeat:
lodsw
cmp ax, Average
jae NotLess
inc Counter
NotLess:
loop Repeat
xor cx, cx
mov bx, 10
mov ax, Counter
Prepare:
xor dx, dx
div bx
push dx
inc cx
test ax, ax
jnz Prepare
PutChar:
pop ax
or al, 30h
int 29h
loop PutChar
mov ah, 8
int 21h
mov ax, 4C00h
int 21h
code ends
end start
Чтобы получить правильный результат, нужно проверить остаток от деления на равенство нулю. Если он ненулевой, то необходимо увеличить целую часть среднего арифметического на единицу, иначе при сравнении программа будет выдавать количество элементов, удовлетворяющих условию, меньше, чем это есть в действительности.
Например среднее арифметическое вашего массива 2,083. Вы сохраняете только целую часть, поэтому получите в результате 6, хотя на самом деле элементов, меньших среднего арифметического, 8.
data segment
Array dw 2,1,0,2,4,0,1,3,6,1,4,1
LenArr equ ($ - Array) shr 1
Average dw ?
Counter dw ?
data ends
code segment
assume cs: code, ds: data
start:
mov ax, data
mov ds, ax
lea bx, Array
mov cx, LenArr
xor ax, ax
L1:
add ax, [bx]
add bx, 2
loop L1
xor dx, dx
mov Counter, dx
mov cx, LenArr
div cx
test dx, dx
jz Integer
inc ax
Integer:
mov Average, ax
mov cx, LenArr
lea si, Array
Repeat:
lodsw
cmp ax, Average
jae NotLess
inc Counter
NotLess:
loop Repeat
xor cx, cx
mov bx, 10
mov ax, Counter
Prepare:
xor dx, dx
div bx
push dx
inc cx
test ax, ax
jnz Prepare
PutChar:
pop ax
or al, 30h
int 29h
loop PutChar
mov ah, 8
int 21h
mov ax, 4C00h
int 21h
code ends
end start
получили среднее и снова гоните цикл и сравниваете со средним
Похожие вопросы
- Помогите, нужен код на ассемблере. Вывод меньшего из введенных чисел
- как в Microsoft Visual Studio 2010 в C# в системе счисления, перевести в десятеричную? Как дополнить код? Помогите плиз
- помогите построить алгоритм и программный код в ассемблере
- Нужен срочно код на ассемблере FASM для рисования красного креста на белом фоне!
- Почему скомпилированный код на Ассемблер занимает меньше места чем на C, а на C меньше чем на C++?
- Помогите написать программу на ассемблере, завтра экзамен а я в нём совсем не шарю.
- помогите написать программы в ассемблере
- Помогите с программой на Ассемблере
- Помогите решить задачу на языке c++. Не понимаю условия в конце кода.
- Помогите исправить код чтобы он считал балы теста Pascal