Читайте также:
|
|
Дан массив из 16 целых чисел. Найти суммы: 1-го и последнего элементов. 2-го и последнего н т.д. Из сумм создать новый массив и определить минимальное в этом массиве.
{$L l120.obj}
uses crt;
const n=10;
type mas=array[1..n] of integer;
var i,k,a,min:integer;
y,c:mas;
procedure l120(var y,c:mas;var i,a,min,k:integer);
external;
begin
randomize;
clrscr;
writeln('source array:');
for i:=1 to n do
begin
y[i]:=-50+random(100);
write(y[i]:4);
end;
writeln;
k:=n;
l120 (y,c,i,a,min,k);
writeln('massiv sum:');
a:=n div 2;
for i:=1 to a do
write(c[i]:4);
writeln;
writeln('min = ',min);
readkey;
end.
extrn y,c,i,a,min,k
public l120
cseg segment byte public
assume cs:cseg
l120 proc near
lea si,y
lea di,c
mov cx,k
xor bx,bx
mov bx,si; {adres nachala mas peresilaem v bx}
add bx,k; {nahodim adres konca massiva}
add bx,k
sub bx,2
lea si,y
@1: mov ax,[bx]; {znachenie konca mas v bp}
add ax,[si]; {skladivaem nachalo i konec}
mov [di],ax;{summu v nov mas}
add si,2
sub bx,2
add di,2
loop @1
lea di,c; {poisk min}
mov cx,k
ror cx,1
mov bx,[di]
@2: cmp bx,[di]
jle @3
mov bx,[di]
@3: add di,2
loop @2
mov min,bx
ret
l120 endp
cseg ends
end;
B матрице A[1..N,1..M] упорядочить элементы столбца. содержащего наибольшее количество отрицательных чисел, по убыванию.
{$L bilet.obj}
{
в матрице A[1..N,1..M] упорядочить элементы столбца,
содержащего наибольшее кол-во отриц-ых чисел, по убыванию
}
program bilet_9;
uses crt;
const n=5;
m=5;
type matr=array[1..n,1..m]of integer;
var a:matr; {матрица}
i,j:integer;
ind:integer; {номер cтолбца с максимальным кол-вом отр.чисел}
max:integer; {максимальное кол-во отр-ых чисел}
{---------------}
procedure bilet(var a:matr;n,m:integer;var ind,max:integer);
external;
{---------------}
BEGIN
clrscr;
randomize;
writeln('Матрица А: for i:=1 to n do
begin
for j:=1 to m do
begin
a[i,j]:=-5+random(11);
write(a[i,j]:3);
end;
writeln;
end;
bilet(a,n,m,ind,max);
writeln('Макс. кол-во отриц-ых чисел: ',max);
writeln('Номер столбца: ',ind);
writeln('Матрица А после перестановки: for i:=1 to n do
begin
for j:=1 to m do
write(a[i,j]:3);
writeln;
end;
readkey;
Writeln(' (c) & (p) orlic@udm.ru 2001');
END.
.286
public bilet
data segment byte public
assume ds:data
max dw 0;макс-ое кол-во отриц-ых чисел в столбце
ind dw 0;номер столбца с макс-ым кол-вом отр-ых
x dw 0;номер обрабат.286
public bilet
data segment byte public
assume ds:data
max dw 0;макс-ое кол-во отриц-ых чисел в столбце
ind dw 0;номер столбца с макс-ым кол-вом отр-ых
x dw 0;номер обрабатываемого столбца
data ends
code segment byte public
assume cs:code
bilet proc near
push bp
mov bp,sp
pusha
;-------------------------------
mov bx,[bp+12];кол-во столбцов для смещения
shl bx,1;умножили на 2 - смещение до след-го числа
;в столбце
mov cx,[bp+12];кол-во столбцов для внешнего цикла
mov x,1;номер обрабатываемого столбца
cycl1: lds si,[bp+16];адрес начала матрицы
mov dx,x;номер обрабатываемого столбца
dec dx
shl dx,1;смещение до начала столбца
add si,dx;встали на начало столбца
xor dx,dx;счетчик отр-ых чисел
push cx
mov cx,[bp+14];кол-во строк
cycl2: mov ax,[si]
cmp ax,0;сравниваем число с 0
jge next;если полож-ное
inc dx;считаем кол-во отр-ных
next: add si,bx;переадресация на след-щее число в столбце
loop cycl2
cmp dx,max;сравниваем кол-во отр-ых в столбце
;с максимальным
jle met1;если не больше максимума
mov max,dx;запомнили максимум отр-ых чисел
mov dx,x
mov ind,dx;запомнили номер столбца с макс-ым кол-вом
;отрицательных чисел
met1: pop cx;вспомнили сх для внешнего цикла
inc x;встали на следующий столбец
loop cycl1;на обработку следующего столбца
;-----------передача параметров в паскаль
lds si,[bp+8]
mov dx,ind
mov [si],dx;отправили номер столбца в паскаль
lds si,[bp+4]
mov dx,max
mov [si],dx;отправили макс-ное кол-во отр-ых в паскаль
;-----------сортировка столбца-----------------------
met3: lds si,[bp+16];адрес начала матрицы
mov cx,[bp+14];кол-во строк
mov bx,ind;номер столбца с макс-ным кол-вом отр.
dec bx
shl bx,1;смещение до начала столбца
add si,bx;встали на начало столбца
mov bx,[bp+12];кол-во столбцов для смещения
shl bx,1;умножили на 2 - смещение до след-го числа
dec cx;кол-во пар чисел (n-1) - для сортировки
xor dx,dx;признак сортировки
sort: mov ax,[si]
cmp ax,[si+bx];сравниваем число со след-щим в столбце
jge met2;если первое больше второго, то перестав-
;лять не надо - на переадресацию
xchg ax,[si+bx];перестановка
xchg ax,[si]
mov dx,1;изменили признак сортировки
met2: add si,bx;переадресацию
loop sort
cmp dx,0
jne met3
;-------------------------------
popa
pop bp
ret
bilet endp
code ends
end
ываемого столбца
data ends
code segment byte public
assume cs:code
bilet proc near
push bp
mov bp,sp
pusha
;-------------------------------
mov bx,[bp+12];кол-во столбцов для смещения
shl bx,1;умножили на 2 - смещение до след-го числа
;в столбце
mov cx,[bp+12];кол-во столбцов для внешнего цикла
mov x,1;номер обрабатываемого столбца
cycl1: lds si,[bp+16];адрес начала матрицы
mov dx,x;номер обрабатываемого столбца
dec dx
shl dx,1;смещение до начала столбца
add si,dx;встали на начало столбца
xor dx,dx;счетчик отр-ых чисел
push cx
mov cx,[bp+14];кол-во строк
cycl2: mov ax,[si]
cmp ax,0;сравниваем число с 0
jge next;если полож-ное
inc dx;считаем кол-во отр-ных
next: add si,bx;переадресация на след-щее число в столбце
loop cycl2
cmp dx,max;сравниваем кол-во отр-ых в столбце
;с максимальным
jle met1;если не больше максимума
mov max,dx;запомнили максимум отр-ых чисел
mov dx,x
mov ind,dx;запомнили номер столбца с макс-ым кол-вом
;отрицательных чисел
met1: pop cx;вспомнили сх для внешнего цикла
inc x;встали на следующий столбец
loop cycl1;на обработку следующего столбца
;-----------передача параметров в паскаль
lds si,[bp+8]
mov dx,ind
mov [si],dx;отправили номер столбца в паскаль
lds si,[bp+4]
mov dx,max
mov [si],dx;отправили макс-ное кол-во отр-ых в паскаль
;-----------сортировка столбца-----------------------
met3: lds si,[bp+16];адрес начала матрицы
mov cx,[bp+14];кол-во строк
mov bx,ind;номер столбца с макс-ным кол-вом отр.
dec bx
shl bx,1;смещение до начала столбца
add si,bx;встали на начало столбца
mov bx,[bp+12];кол-во столбцов для смещения
shl bx,1;умножили на 2 - смещение до след-го числа
dec cx;кол-во пар чисел (n-1) - для сортировки
xor dx,dx;признак сортировки
sort: mov ax,[si]
cmp ax,[si+bx];сравниваем число со след-щим в столбце
jge met2;если первое больше второго, то перестав-
;лять не надо - на переадресацию
xchg ax,[si+bx];перестановка
xchg ax,[si]
mov dx,1;изменили признак сортировки
met2: add si,bx;переадресацию
loop sort
cmp dx,0
jne met3
;-------------------------------
popa
pop bp
ret
bilet endp
code ends
end
В матрице F[1..N,1..N] упорядочить элементы главной диагонали в порядке возрастания. Определить сумму элементов, лежащих под главной диагональю.
{$L lab3.obj}
{ сортировка главной диагонали и сумма под ней }
uses crt;
const n=5;
type mat=array[1..n,1..n] of integer;
var i,j,sum:integer;
a:mat;
procedure matr (var a:mat; k:integer; var sum:integer); external;
begin randomize;
clrscr;
writeln ('Исходная матрица');
for i:=1 to n do begin writeln;
for j:=1 to n do
begin
a[i,j]:=random(10);
write(a[i,j]:4)
end;
end;
writeln; writeln; writeln;
matr (a,n,sum);
writeln ('Отсортированная матрица');
for i:=1 to n do begin writeln;
for j:=1 to n do
write(a[i,j]:4)
end;
writeln; writeln;
writeln ('Сумма элиментов лежащих под глав. диагональю = ',sum);
readkey;
end.
.286
public matr
code segment byte public
xor si,si
mov dx,[bx]
mov cx,[bp+8]
mm1: mov ax,[bx]
cmp ax,dx
je mm2
add si,ax
add bx,2
mov mm1
mm2: mov dx,[bx+di+2]
add bx,2
loop mm1
mov [bp+4],si
popa
pop bp
ret 10
matr endp
code ends
end
В матрице E[1..N,1..M] в строках, содержащих нуль, расположить элементы по убыванию.
{$L l16.obj}
Program Lab3;
Uses Crt;
Const N=6; M=8;
Type Mas=array[1..N,1..M] of integer;
Var i,j: integer;
E: Mas;
Procedure Sort(Var E:mas; var i,j:integer); external;
Begin
clrscr;
randomize;
writeln('Исходная матрица:');
for i:= 1 to n do
begin
for j:=1 to m do
begin
e[i,j]:=-15+random(25);
write(e[i,j]:4);
end;
writeln;
end;
i:=n; j:=m;
Sort(E,i,j);
writeln;
writeln('Полученная матрица:');
for i:= 1 to n do
begin
for j:=1 to m do write(e[i,j]:4);
writeln;
end;
readkey;
End.
.286
public Sort
code segment byte public
assume cs:code
M dw 0; Переменная для столбцов
N dw 0; Переменная для строк
Sort proc near
push bp; Сохраняю bp
mov bp,sp; Указатель базы в bp
pusha; Сохраняю регистры в стеке
lds bx,[bp+8]
mov ax,[bx]
mov N,ax; Заносим количество строк в N
lds bx,[bp+4]
mov ax,[bx]
mov M,ax; Заносим количество столбцов в M
lds bx,[bp+12]; В bx адрес матрицы
Cycl: mov si,0; Для движения по строке
mov cx,M; Заносим количество столбцов в сx
mov ax,0; Здесь хранится ноль для сравнения
Cycl1: cmp [bx][si],ax; Двигаемся по строке
jne m4; Если не 0 то на m4
; Сортировка по убыванию
mov dx,M; В di кол-во столбцов
m1: mov si,0; Встаю на первый элемент
mov cx,M; В сх кол-во столбцов
dec cx; Во внутреннем цикле прохожу m-1 раз
m2: mov ax,[bx][si]; Первый элемент в ax
add si,2
cmp ax,[bx][si]; Сравниваем со вторым
jge m3; Переход на m3 если менять не надо
push ax; Меняю местами
push [bx][si]
pop [bx][si-2]
pop [bx][si]
m3: loop m2; Внутренний цикл сортировки
dec dx
jne m1; Внешний цикл сортировки
jmp m5; Переход на следующую строку
m4: add si,2
loop Cycl1
m5: add bx,M; Встаю на следующую строку
add bx,M
dec N
jne Cycl; Основной цикл
popa; Восстанавливаю ранее сохраненые
pop bp; значения регистров
ret 12; Овсобождаю стек
Sort endp
code ends
end
Дата добавления: 2015-08-02; просмотров: 403 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Бескупонная облигация куплена на аукционе по курсу 40 и продана по курсу 58 через 90 дней. Рассчитать доходность вложения по схеме сложных и простых процентов. | | | В массиве C[1..N] все элементы, больше среднего арифметического положительных чисел, заменить на первое положительное значение массива. |