Читайте также:
|
|
{$L t.obj}
program text_4;
Uses crt;
var t,temp: string;
kp1,i,kp,k1,k2,addr1,addr2: Integer; {kp - kol-vo predlozheniy}
Procedure sort(var t: String; var kp: Integer); External;
Begin
ClrScr;
t:= 'and anguish animal.aircraft.angular anode.anoint anthill antelope antics.*';
Writeln('Data:',t);
sort(t,kp);
Writeln;
Writeln('Kol-vo predlozheniy ', kp);
Writeln(t);
readkey;
End.
.286
public sort
data segment
addr1 dw 0
addr2 dw 0
k1 dw 0
k2 dw 0
kp1 dw 0
temp db 255 dup (?)
endS
code segment byte public
assume cs:code
assume ds:data
sort proc near
push bp
mov bp,sp
pusha
lds di,[bp+8]
inc di
xor dx,dx;v dx - kp}
@cycl:mov ah,[di]
cmp ah,46
je @1
inc di
jmp @cycl
@1: inc dx
inc di
mov ah,[di]
cmp ah,42
jne @cycl
mov bx,[bp+4]
mov [bx],dx
mov kp1,dx
@BC1: lds di,[bp+8];{current sentex}
inc di
mov addr1,di
mov k1,0
xor bx,bx
@c: inc di
inc k1
mov ah,[di]
cmp ah,46
je @endp
cmp ah,32
je @sl
jmp @c
@sl: inc bx
jmp @c
@endp:inc bx
inc k1;{+ '.'}
inc di
@cicl: xor dx,dx;{next sentex}
mov addr2,di
mov k2,0
add di,1
inc k2
@c1: inc di
inc k2
mov ah,[di]
cmp ah,46
je @endp1
cmp ah,32
je @sl1
jmp @c1
@sl1: inc dx
jmp @c1
@endp1:inc dx
inc k2
inc di
cmp bx,dx
jg @ch
mov ah,[di]
cmp ah,42
je @konec
sub di,1
mov ax,k2
mov k1,ax
mov ax,addr2
mov addr1,ax
mov di,addr1
jmp @N
@BC: jmp @BC1
@n:
add di,k2
mov bx,dx
jmp @cicl
@ch: lea si,temp
inc si
mov di,addr2
mov cx,k2
@ch1: mov ax,[di]
mov [si],ax
inc di
inc si
loop @ch1
mov di,addr1
mov cx,k1
@ch2: mov ax,[di]
mov [si],ax
inc di
inc si
loop @ch2
lea si,temp
inc si
mov di,addr1
mov cx,k1
add cx,k2
@ch3: mov ax,[si]
mov [di],ax
inc di
inc si
loop @ch3
mov ax,addr1
add ax,k2
mov addr1,ax
mov di,addr1
add di,k1
mov bx,dx
inc di
mov ah,[di]
cmp ah,42
je @konec
sub di,1
jmp @cicl
@konec:sub kp1,1
cmp kp1,0
jg @BC
popa
pop bp
ret 100
sort endp
code ends
end
Создать массив А[1..N]. Если количество положительных меньше чем отрицательных, то каждое положительное число увеличить на первое положительное. Определить минимальное и максимальное значения и их порядковые номера.
{$L l12.obj}
program p06;
Uses crt;
const n=10;
type mytype = array [1..n] of integer;
var a: mytype;
i, k: integer;
indmin, indmax, min, max:integer;
procedure work(var a:mytype; var indmin, indmax, min, max:integer; Kol:integer);
external;
Begin
Randomize;
clrscr;
{Заполнение и вывод}
for i:=1 to n do begin
k:=random (20);
a[i]:= k-10;
write (a[i]:4);
end;
writeln;
work (a, indmin, indmax, min, max, n);
{вывод}
for i:=1 to n do
write (a[i]:4);
writeln;
writeln ('min=', min:4, [',indmin,']');
assume cs:code,ds:data
work proc near
push bp
mov bp,sp
pusha
mov cx,[bp+4];Кол-во чисел
mov si,[bp+22];Адрес начала матрицы
xor bx, bx;Начинаем с первого числа
cycl101: mov ax, bx[si];взять число
cmp ax, 0;Оно меньше 0?
jl lesszero; если да, то обрабатываем
; как отрицательное
cmp ax, 0;Оно равно 0?
je zero;Если да, то вообще не обрабатываем
greitzero:;Если больше 0
inc numpos;Увеличить сч-к положительных
cmp numpos, 1;Если это первое положительное
jne firstgeted
mov firstpos, ax; то запомнить его
firstgeted: jmp zero
lesszero:;Если меньше 0
inc numneg;Увеличить сч-к отрицательных
zero:
add bx, 2;Перейти к след. числу
loop cycl101
;===============================================
mov ax, numpos;Сумма положительных
mov bx, numneg;Сумма отрицательных
cmp ax, bx;Если кол-воо положит-х больше
jge noadd; кол-ва отриц-х, то переход на
;поиск минимума и максимума
;Иначе прбавить ко всем положительным первое положительное
mov cx,[bp+4];Кол-во чисел
mov si,[bp+22];Адрес начала матрицы
xor bx, bx;Начинаем с первого числа
cycl102: mov ax, bx[si];взять число
cmp ax, 0;Оно меньше 0?
jle lesszero2; если да, то обрабатываем
; как отрицательное
;Если больше 0
add ax, firstpos;Прибавить первое положительное
mov bx[si], ax;Записать в массив
lesszero2:;Если меньше 0
add bx, 2;Перейти к след. числу
loop cycl102
noadd:
;======================================================
;Поиск максимума
mov cx,[bp+4];Кол-во чисел
mov si,[bp+22];Адрес начала матрицы
xor bx, bx;Начинаем с первого числа
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 si,[bp+6];Адрес Max
mov [si], dx;Записать туда найденный максимум
mov si,[bp+14];Адрес IndMax (позиция максимума)
mov dx, pos;Смещение до максисмума в массиве
shr dx, 1;Разделить на 2 (в integer 2 байта)
inc dx;Прибавить 1 (Визуально первый элемент
; имеет индекс 1, а не 0)
mov [si],dx;Записать индекс
;======================================================
;Поиск минимума
mov cx,[bp+4];Кол-во чисел
mov si,[bp+22];Адрес начала матрицы
xor bx, bx;Начинаем с первого числа
mov dx, 0FFFh;Максимальное положительное число
cycl103: mov ax, bx[si];Взять число
cmp ax, dx;Сравнить с минимумом
jge nonmax;Если меньше, то переход
mov dx, ax; иначе запомнить новый минимум
mov pos, bx; и его расположение
nonmax: add bx, 2;Перейти к след. числу
loop cycl103
;Прошли по всему массиву
mov si,[bp+10];Адрес Min
mov [si], dx;Записать туда найденный минимум
mov si,[bp+18];Адрес IndMin (позиция минимума)
mov dx, pos;Смещение до минимума в массиве
shr dx, 1;Разделить на 2 (в integer 2 байта)
inc dx;Прибавить 1 (Визуально первый элемент
; имеет индекс 1, а не 0)
mov [si],dx;Записать индекс
popa
pop bp
ret 24
work endp
code ends
end
Дата добавления: 2015-08-02; просмотров: 161 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
В массиве C[1..N] все элементы, больше среднего арифметического положительных чисел, заменить на первое положительное значение массива. | | | Определить среднее арифметическое четных элементов, лежащих после максимального значения в массиве D[I..N]. Все нечетные рассортировать по возрастанию. |