Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2014, 20:19   #1
andrew_ryaba
Пользователь
 
Регистрация: 29.12.2013
Сообщений: 21
По умолчанию В матрице макс.элемент заменить средним арифм. элементов строки, в к-рой находится макс.элемент

Здравствуйте! Помогите пожалуйста с решением такой задачи: В матрице 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.
andrew_ryaba вне форума Ответить с цитированием
Старый 11.04.2014, 11:26   #2
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Цитата:
div dx
Делимое размещается в паре axx
Соответственно, делить на dx нельзя.
Код:
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,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
 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],' ');
 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;}
end.
Сделано через ... вспомогательную паскалевскую переменную. Перераспределите регистры.

И второе: среднее арифметическое подразумевает вещественное число, а вам по условию задачи нужно будет заменять им элемент массива, который у вас целочисленный.
ZX Spectrum-128 вне форума Ответить с цитированием
Старый 15.04.2014, 22:25   #3
andrew_ryaba
Пользователь
 
Регистрация: 29.12.2013
Сообщений: 21
По умолчанию

Пусть даже со вспомогательной переменной...
Помогите, пожалуйста, найти ошибку: вылетает программа почему-то
Код:
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.
andrew_ryaba вне форума Ответить с цитированием
Старый 15.04.2014, 22:57   #4
ZX Spectrum-128
Участник клуба
 
Регистрация: 05.11.2013
Сообщений: 1,601
По умолчанию

Не виснет. И максимум правильно ищет.
Изображения
Тип файла: jpg 2014-04-15 22-56-12 Скриншот экрана.jpg (12.9 Кб, 116 просмотров)
ZX Spectrum-128 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
макс. и мин. элемент массива С++ Danil_59 Фриланс 3 27.12.2011 19:19
макс. и мин. элемент массива Danil_59 Помощь студентам 2 26.12.2011 21:28
Мин Макс элемент в файле. iCaesy Помощь студентам 8 14.11.2011 08:16
Макс элемент в одномерном массиве igabenu Общие вопросы Delphi 9 03.03.2011 11:38
Массив в Си. как определить и удалить строчку в которой находится макс элемент Софья9 Помощь студентам 15 11.06.2009 18:46