В матрице макс.элемент заменить средним арифм. элементов строки, в к-рой находится макс.элемент - Assembler

Узнай цену своей работы

Формулировка задачи:

Здравствуйте! Помогите пожалуйста с решением такой задачи: В матрице D[1..N,1..M] максимальный элемент заменить средним арифметическим элементов строки, в которой находится максимальный элемент. У себя я сначала пытаюсь найти среднее арифметическое каждой из строк, затем ищу максимальный элемент. Но при выполнении даже первой части выводит ошибку (деление на ноль)... Мои наработки:
 uses crt;
 const n=5;m=6;
 type mas=array[1..n,1..m] of integer;
 var a:mas;b:array[1..n]of integer; i,j,sr,max:integer;
 begin
 randomize; clrscr;
 for i:=1 to n do
 for j:=1 to m do
 a[i,j]:=random(100)-50;
 writeln('original mas');
 for i:=1 to n do begin
 for j:=1 to m do
 write(a[i,j]:5);
 writeln;
 end;
 writeln;
 asm
 lea bx,a
 lea di,b
 mov dx,m
 mov cx,n
 @1: mov ax,0
 mov bp,cx
 mov cx,m
 @2: add ax,[bx]
 add bx,2
 loop @2
 div dx
 mov [di],ax
 add di,2
 mov cx,bp
 loop @1
 end;
 for i:=1 to n do
 write (b[i],' ');
 readkey;
 asm
 lea bx,a
 lea bx,b
 mov cx,m
 @3: mov bp,cx
 mov cx,a
 mov si,0
 mov ax,[bx+si]
 @4: cmp ax,[bx+si]
 jge @5
 mov ax,[bx+si]
 @5: add si,2*m
 loop @4
 mov [di],ax
 add di,2
 mov cx,bp
 add bx,2
 loop @3
 end.

Решение задачи: «В матрице макс.элемент заменить средним арифм. элементов строки, в к-рой находится макс.элемент»

textual
Листинг программы
uses crt;
 const n=5;m=6;
 type mas=array[1..n,1..m] of integer;
 var a:mas;b:array[1..n]of integer; temp,sr,i,j:integer;
 
 begin
 randomize; clrscr;
 for i:=1 to n do
 for j:=1 to m do
 a[i,j]:=random(100)-50;
 writeln('original mas');
 for i:=1 to n do begin
 for j:=1 to m do
 write(a[i,j]:5);
 writeln;
 end;
 writeln;
 
 asm
 lea bx,a
 lea di,b
 mov dx,m
 mov cx,n
 @1: mov ax,0
 mov bp,cx
 mov cx,m
 @2: add ax,[bx]
 add bx,2
 loop @2
 mov temp,bx
 mov bx,dx
 mov cx,dx
 mov dx,0
 cwd
 idiv bx
 mov dx,cx
 mov bx,temp
 mov [di],ax
 add di,2
 mov cx,bp
 loop @1
 end;
 
 for i:=1 to n do
 write (b[i],' ');
 writeln;
 temp:=0;
 readkey;
 
 asm
 lea bx,a
 lea di,b
 mov cx,m
 @3: mov sp,cx
 mov cx,n
 mov si,0
 mov ax,[bx+si]
 @4: cmp ax,[bx+si]
 jge @5
 mov ax,[bx+si]
 @5: add si,2*m
 loop @4
 cmp temp,ax
 jge @6
 mov temp,ax
 mov dx,bx
 mov bp,si
 mov ax,[di]
 mov sr,ax
 mov ax,temp
 @6: mov cx,sp
 add bx,2
 add di,2
 loop @3
 mov ax,sr
 mov di,dx
 mov [bp+di],ax
 end;
 
 writeln (temp);
 for i:=1 to n do begin
 for j:=1 to m do
 write (a[i,j]:5);
 writeln;
 end;
 readkey;
 end.

Объяснение кода листинга программы

  1. Объявлены переменные: n, m, a, b, temp, sr, i, j.
  2. Заполнение матрицы a случайными числами от 0 до 99.
  3. Вывод исходной матрицы a на экран.
  4. Нахождение максимального элемента в строке, в которой он находится, и сохранение его в переменной temp.
  5. Замена найденного максимального элемента на среднее арифметическое элементов строки, в которой он находится.
  6. Вывод полученной матрицы a на экран.
  7. Ввод с клавиатуры ключа.
  8. Вывод на экран найденного максимального элемента и его позиции.
  9. Вывод полученной матрицы a на экран.

Оцени полезность:

6   голосов , оценка 4.5 из 5
Похожие ответы