Читайте также:
|
|
uses crt;
const
N = 10;
type
row = array[1..N] of integer;
var
b: row;
i, k: integer;
procedure count4 (var a: row; var sred: integer; razm: integer); external;
begin
clrscr;
writeln;
write('Исходный массив:');
randomize;
for i:=1 to N do begin
b[i]:= -10 + random(20);
write(' ',b[i]);
end;
count4(b,k,N);
writeln;
writeln('Среднее арифметическое: ',k);
write('Результат:
for i:= 1 to N do write(' ',b[i]);
end.
public count4
code segment byte public
assume cs: code
.286
count4 proc near
push bp
mov bp,sp
pusha
lds si,[bp+10]; адрес массива
mov cx,[bp+4]; размер массива
mov ax,[si]; принимаем первый элемент за минимальный
mov di,si; сохраняем его адрес
mov dx,cx; и кол-во оставшихся за ним
; поиск минимума
cycl: cmp ax,[si]; сравниваем минимальный с текущим
jle next; если текущий больше, переходим к следующему
mov ax,[si]; сохраняем минимальный элемент
mov di,si; и его адрес
mov dx,cx; и кол-во оставшихся за ним элементов
next: add si,2; продвигаем адрес
loop cycl
xor ax,ax
xor bx,bx
mov si,di; будем искать ср. арифм. полож. чисел
add si,2; ставим адрес на след. за min элемент
mov cx,dx; кол-во элементов за минимальным
dec cx
cmp cx,0; избавимся от случая, когда min последний
jle zero; и считать нечего
cycl2: test word ptr [si],8000h; проверка на положительность числа
jnz next2; переход, если отрицательное
add ax,[si]; суммируем
inc bx; считаем количество положит. чисел
next2: add si,2
loop cycl2
div bl; делим сумму на количество
xor ah,ah; избавимся от остатка, частное в al
zero:
lds si,[bp+6]
mov [si],ax; записываем среднее арифметическое
; займемся сортировкой чисел до минимума
lds di,[bp+10]; адрес массива
mov cx,[bp+4]; размер массива
sub cx,dx; определим число элементов перед минимальным
dec cx
cmp cx,0; избавимся от случая, когда min первый
jle exit; или второй и сортировка не нужна
mov dx,cx
cycl3: push cx; внешний цикл сортировки пузырьком
mov cx,dx
mov si,di
cycl4: mov ax,[si]; внутренний цикл сортировки пузырьком
cmp ax,[si+2]
jle next4; no comments:-)
mov bx,[si+2]
mov [si+2],ax
mov [si],bx
next4: add si,2
loop cycl4
pop cx
loop cycl3
exit:
popa
pop bp
ret 10
count4 endp
code ends
end
Дата добавления: 2015-08-02; просмотров: 106 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
В массиве A[1..15] определить минимальное значение. Все числа, лежащие за минимальным записать в новый массив В и определить в нем среднее арифметическое положительных чисел. | | | В матрице D[1..N.1..M] максимальный элемент заменить средним арифметическим элементов строки в которой находится максимальный элемент. |