Читайте также:
|
|
{$L l05.obj}
uses crt;
const
N = 10;
type
row = array[1..N] of integer;
var
b: row;
i, k: integer;
procedure count5 (var a: row; var sred: integer; razm: integer); external;
begin
clrscr;
writeln;
write('Исходный массив:');
randomize;
for i:=1 to N do begin
b[i]:= random(10);
write(' ',b[i]);
end;
count5(b,k,N);
writeln;
writeln('Среднее арифметическое: ',k);
write(' Результат:');
for i:= 1 to N do write(' ',b[i]);
end.
public count5
code segment byte public
assume cs: code
.286
count5 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]; сравниваем максимум с текущим
jge 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; ставим адрес на след. за max элемент
mov cx,dx; кол-во элементов за max
dec cx
cmp cx,0; избавимся от случая, когда max последний
jle zero; и считать нечего
cycl2: test word ptr [si],1; проверка на четность
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]; размер массива
xor dx,dx; подсчитаем кол-во нечетных элементов
cycl3: test word ptr [di],1; проверка на нечетность
jz next3
inc dx; подсчет
next3: add di,2
loop cycl3
dec dx
cmp dx,0; если нечетных одно или меньше, выходим
jle exit; так как сортировка не нужна
mov cx,dx; сохраним в cx кол-во нечетных - 1
lds bx,[bp+10]; сохраним в bx адрес массива
; сортировка методом пузырька
cycl4: mov si,bx
push cx
cycl5: test word ptr [si],1; ищем первый нечетный
jnz next5
add si,2
jmp cycl5
next5: mov di,si
add di,2
cycl6: test word ptr [di],1; ищем следующий нечетный
jnz next6
add di,2
jmp cycl6
next6: mov ax,[si]
cmp ax,[di]; сравниваем их
jle next7
mov dx,[di]; если нужно, переставляем
mov [di],ax
mov [si],dx
next7: mov si,di
loop cycl5
pop cx
loop cycl4
exit:
popa
pop bp
ret 10
count5 endp
code ends
end
Дата добавления: 2015-08-02; просмотров: 220 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Подсчитать количество предложений. Расставить предложения по возрастанию количества слов в каждом | | | Создать массив М[ 1 ..N]. Определить минимальное значение среди первых N DIV 2 чисел. Максимальное всего массива заменить в массиве на это минимальное значение. |