В матрице макс.элемент заменить средним арифм. элементов строки, в к-рой находится макс.элемент - 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.
Объяснение кода листинга программы
- Объявлены переменные: n, m, a, b, temp, sr, i, j.
- Заполнение матрицы a случайными числами от 0 до 99.
- Вывод исходной матрицы a на экран.
- Нахождение максимального элемента в строке, в которой он находится, и сохранение его в переменной temp.
- Замена найденного максимального элемента на среднее арифметическое элементов строки, в которой он находится.
- Вывод полученной матрицы a на экран.
- Ввод с клавиатуры ключа.
- Вывод на экран найденного максимального элемента и его позиции.
- Вывод полученной матрицы a на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д