Читайте также:
|
|
{$l zero.obj}
Program massiv; {}
uses {}
crt; {для стирания}
const {}
n1 = 10; {количество элементов}
type {}
mas = array [1..n1] of integer; {массивы}
var {}
x: mas; {х массив}
a,s,i,n,temp1,e,d: integer; {доп переменные}
procedure zero(x:mas; d,temp1,e,s,a,n:integer); external;
begin {}
clrscr; {стираем}
randomize; {случайно}
for i:=1 to n1 do begin
x[i]:=random(2*n1); x[6]:=0;
write(x[i]:4);
end;
d:=0;
n:=n1;
writeln;
zero(x,d,temp1,e,s,a,n);
writeln;
for i:=1 to n1 do write(x[i]:4);
writeln;
writeln(s);
writeln(a);
repeat until keypressed;
end.
extrn x,d,temp1,e,s,a,n
public zero
code segment byte public
assume cs:code
zero proc near
lea si,x
mov bp,n
mov cx,0
@met1: mov ax,[si]
add si,2
cmp ax,0
jne @met2
mov temp1,si
@met2: dec bp
cmp bp,0
jne @met1
lea si,x
@met11: inc d
mov ax,[si]
add si,2
cmp temp1,si
je @m3
shr ax,1
jnc @met11
add cx,[si-2]
mov s,cx
cmp temp1,si
je @m3
jmp @met11
mov cx,0
@m3: mov cx,0
inc d
mov ax,[si]
add si,2
shr ax,1
jc @m3
inc e
mov cx,[si-2]
add a,cx
mov bp,n
cmp d,bp
jle @m3
sub a,cx
mov ax,a
cwd
dec e
idiv e
mov a,ax
ret
zero endp
code ends
end
Дан массив целых чисел К(1..25). Отсортировать по возрастанию только числа меньшие порога, введенного заранее. Сортировку производить в массиве К. Числа большие порога, должны оставаться на своих местах.
{$l lab2.obj}
uses crt;
const n=20;
type mas=array[1..n] of integer;
var d:mas;
i,porog,k:integer;
procedure lab2(var d:mas; var porog,k:integer);external;
begin
clrscr;
writeln('Исходный массив');
randomize;
for i:=1 to n do begin
d[i]:=-50+random(100);
write(d[i],' ');
end;
writeln;
writeln('Введи пороговое значение');
readln(porog);
k:=n;
lab2(d,porog,k);
writeln('Отсортированный массив');
for i:=1 to n do
write(d[i],' ');
end.
extrn d,porog,k; внешние параметры
public lab2; имя процедуры, доступной извне
code segment byte public; объявление сегмента кода
assume cs:code; связывание сегмента с сегментным регистром
lab2 proc near; процедура (ближний вызов)
LEA BX,D; загружаем адрес массива
mov ax,k; размерность массива (число элементов)
sub ax,1; умножаем на 2 - так как integer
MOV CX,ax; счетчик циклов
@1: PUSH CX
MOV AX,[BX]
CMP AX,POROG
JGE @4
MOV SI,BX
MOV AX,[SI]
MOV DI,SI
@2: ADD SI,2
CMP AX,[SI]
JLE @3
MOV AX,[SI]
MOV DI,SI
@3: LOOP @2
XCHG AX,[BX]
XCHG AX,[DI]
@4: ADD BX,2
POP CX
LOOP @1
ret
lab2 endp
code ends
end
Дата добавления: 2015-08-02; просмотров: 128 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Определить, сколько нулей лежит между минимальным и максимальным значениями массива H[1..N]. До и после экстремумов массив отсортировать по убыванию. | | | Дан массив из 40 символов, содержащий слова, разделенные одним пробелом. Определить, сколько раз каждое слово встречается в этом массиве. |