Читайте также:
|
|
{$L l06.obj}
uses crt;
const
N = 10;
type
row = array[1..N] of integer;
var
m: row;
i, k: integer;
procedure count3 (var a: row; var min: integer; razm: integer); external;
begin
clrscr;
writeln;
write('Исходный массив:');
randomize;
for i:=1 to N do begin
m[i]:= random(100);
write(' ',m[i]);
end;
count3(m,k,N);
writeln;
writeln('Минимальный элемент: ',k);
write('Результат замены: ');
for i:= 1 to N do write(' ',m[i]);
end.
public count3
code segment byte public
assume cs: code
.286
count3 proc near
push bp
mov bp,sp
pusha
lds si,[bp+10]; адрес массива
mov cx,[bp+4]; размер массива
shr cx,1; N div 2
mov ax,[si]; принимаем первый элемент за минимальный
; поиск минимума
cycl: cmp ax,[si]; сравниваем минимальный с текущим
jle next; если текущий больше, переходим к следующему
mov ax,[si]; сохраняем минимальный элемент
next: add si,2; продвигаем адрес
dec cx; уменьшаем счетчик
jnz cycl; пока не 0, выполняем поиск
lds di,[bp+6]
mov [di],ax; отписываем минимальный элемент
; далее нужно отыскать максимальный элемент
mov si,[bp+10]; адрес массива
mov cx,[bp+4]; размер массива
mov dx,[si]; принимаем первый элемент за максимум
mov di,si; запоминаем его адрес
cycl2: cmp dx,[si]; сравниваем с текущим
jge next2; если текущий меньше, переходим к следующему
mov dx,[si]; запоминаем максимум
mov di,si; и его адрес
next2: add si,2; продвигаем адрес
dec cx; уменьшаем счетчик
jnz cycl2; пока не 0, выполняем поиск
mov [di],ax; заменяем max на min
popa
pop bp
ret 10
count3 endp
code ends
end
В массиве A[1..N| определить максимальное значение. Все элементы лежащие до максимального, увеличить на первое значение массива а все числа после максимального, рассортировать по убыванию
{$L l07.obj}
program p06;
Uses crt;
const n=10;
type mytype = array [1..n] of integer;
var a: mytype;
i, k: integer;
procedure work(var a:mytype; Kol:integer);
external;
Begin
Randomize;
clrscr;
{Заполнение и вывод}
for i:=1 to n do begin
k:=random (40);
a[i]:= k;
a[3]:=50;
write (a[i]:4);
end;
writeln;
work (a, n);
{вывод}
for i:=1 to n do
write (a[i]:4);
writeln;
readkey;
End.
.286
public work
data segment public
firstnum dw?
pos dw?
count dw?
data ends
;==========================================
code segment byte public
assume cs:code,ds:data
work proc near
push bp
mov bp,sp
pusha
;======================================================
;Поиск максимума
mov cx,[bp+4];Кол-во чисел
mov si,[bp+6];Адрес начала матрицы
xor bx, bx;Начинаем с первого числа
mov ax, [si];Запоминаем первое число массива
mov firstnum, ax; в переменной
mov dx, 0FFFFh;Максимальное отрицательное число
cycl103: mov ax, bx[si];Взять число
cmp ax, dx;Сравнить с максимумом
jle nonmax;Если меньше, то переход
mov dx, ax; иначе запомнить новый максимум
mov pos, bx; и его расположение
nonmax: add bx, 2;Перейти к след. числу
loop cycl103
;Прошли по всему массиву
;======================================================
;Уменьшение всего до максимума
mov cx, pos;Смещение до максимума
shr cx, 1;Переводим в индекс - де6лим на 2
; т.к. (integer это 2 байта)
mov si,[bp+6];Адрес начала матрицы
xor bx,bx;Начинаем с первого числа
cycl201: mov ax,bx[si];Взять число
add ax,firstnum;Прибавить к нему первое число
mov bx[si],ax;Записать в массив
add bx,2;ПЕрейти к след. числу
loop cycl201
;======================================================
;Сортировка всего после максимума
mov ax, pos;Смещение до максимума
mov si, [bp+6];Адрес начала матрицы
add si, ax;Добавляем к адресу смещение
add si, 2;Переходим к числу за максимумом
mov cx, [bp+4];Количество чисел
mov ax, pos;Смещение до максимума
shr ax, 1;Переводим в индекс
sub cx, ax;Из общего числа вычитаем номер
sub cx, 2; максимума и еще вычитаем 2
mov count, cx;Получаем необходимое кол-во просмотров
cycl302:
xor bx,bx;Начинаем с текущего числа
; (следующее после максимума)
push cx;Сохраняем внешний счетчик
mov cx, count;Устанавливаем внутренний сч-к
cycl301:
mov ax, bx[si];Взять текущее число
mov dx, bx[si+2];И следующее
cmp ax, dx;сравниваем их
jge noswap;Если не надо менять местами, то перход
mov bx[si+2],ax; иначе меняем эти числа
mov bx[si], dx; местами
noswap: add bx, 2;Переходим к след. паре чисел
loop cycl301;Конец внутреннего цикла
pop cx;Восстанавливаем сч-к внешнего цикла
loop cycl302;Конец внешнего цикла
popa
pop bp
ret 6
work endp
code ends
end
Дата добавления: 2015-08-02; просмотров: 208 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Определить среднее арифметическое четных элементов, лежащих после максимального значения в массиве D[I..N]. Все нечетные рассортировать по возрастанию. | | | Определить, сколько нулей лежит между минимальным и максимальным значениями массива H[1..N]. До и после экстремумов массив отсортировать по убыванию. |