Форум программистов, компьютерный форум, киберфорум
Assembler для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 02.12.2018
Сообщений: 192
1

Найти минимальный элемент матрицы и заменились все нулевые элементы главной диагонали на минимальный элемент

13.11.2019, 11:14. Показов 1521. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
В функцию на ассемблере вводится матрица
Я записал код так.
Assembler
1
2
3
4
5
6
7
.MODEL FLAT, C
.DATA
.CODE
FUNK PROC C a:dword, n:dword
mov esi,a
mov edi,a
mov adx,n
Как написать на ассемблере так, чтобы находился минимальный элемент матрицы и заменились все нулевые элементы главной диагонали на минимальный элемент массива.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.11.2019, 11:14
Ответы с готовыми решениями:

Найти минимальный элемент под главной диагональю матрицы
Очень нужна помощь, за символическое вознаграждение (бесплатно тоже не откажусь=))! Надо...

Найти минимальный элемент матрицы и проверить четность его индексов
а этот код как выглядеть будет? Он находит минимальный элемент и проверяет четность его индексов ...

Найти в массиве минимальный по модулю элемент. Заменить им элементы с нечетными номерами
Найти в массиве минимальный по модулю элемент. Заменить им элементы с нечетными номерами - Assembler

Найти в массиве минимальный по модулю элемент. Заменить им элементы с нечетными номерами
Написать процедуру и функцию, которая находит в массиве минимальный по модулю элемент и заменяет им...

7
Ушел с форума
Автор FAQ
16338 / 7659 / 1075
Регистрация: 11.11.2010
Сообщений: 13,697
13.11.2019, 12:13 2
ConLenov,
а как бы ты искал минимальный элемент матрицы и заменял все нулевые элементы главной диагонали на минимальный элемент массива на языке С/Pascal/Basic? Попробуй написать программу на одном из этих языков и выложи ее сюда, а перевести на язык ассемблера поможем...
0
0 / 0 / 0
Регистрация: 02.12.2018
Сообщений: 192
13.11.2019, 12:39  [ТС] 3
C++
1
2
3
4
5
6
7
8
9
10
int mine=a[1][1];
for (i=0;i<n;i++)
{for (j=0;j<n;j++)
{if (a[i][j]<mine)
{mine=a[i][j];}}}
for (i=0;i<n;i++)
{for (j=0;j<n;j++)
{if (i==j && a[i][j]==0)
{a[i][j]==mine;}}
}
0
Ушел с форума
Автор FAQ
16338 / 7659 / 1075
Регистрация: 11.11.2010
Сообщений: 13,697
13.11.2019, 12:53 4
ConLenov,
Электронный учебник главы
  • 13. ПЕРЕХОДЫ И ЦИКЛЫ
  • 14. МАССИВЫ
  • 15. ПОДПРОГРАММЫ-ПРОЦЕДУРЫ
0
0 / 0 / 0
Регистрация: 02.12.2018
Сообщений: 192
13.11.2019, 12:56  [ТС] 5
Можно просто перевести?
0
Эксперт CЭксперт С++
5118 / 4557 / 854
Регистрация: 07.10.2015
Сообщений: 9,462
13.11.2019, 12:57 6
ConLenov, реализация доступа к элементам матрицы зависит от того, что представляет собой матрица:
одномерный массив адресов строк или строки размещены последовательно одна за одной.
Отсюда вопрос: как в вызывающей программе задается матрица?
0
0 / 0 / 0
Регистрация: 02.12.2018
Сообщений: 192
13.11.2019, 13:09  [ТС] 7
Это матрица чисел. Матрица размера n*n

Добавлено через 3 минуты
Квадратная матрица
0
Модератор
Эксперт по электронике
8516 / 4370 / 1648
Регистрация: 01.02.2015
Сообщений: 13,577
Записей в блоге: 9
14.11.2019, 23:55 8
ConLenov, смотрите, данный код сильно зависит от изучаемой темы.
Наиболее оптимально его решать представив матрицу в виде линейного массива длиной n2.
Тогда поиск минимального будет следующим
Assembler
1
2
3
4
5
6
7
8
9
10
mov esi, [a]
mov eax, [n]
mul eax
mov ecx, eax
mov ebx, [esi] ;текущее значение минимума
@@for:
  lodsd
  cmp ebx, eax
  cmovg ebx, eax  ;(ebx>eax)?eax:ebx или ebx=min(ebx, eax)
loop @@for
Теперь нужно "пройтись" по диагонали.
Таких чисел будет ровно n.
Начнётся "просмотр" с самого первого числа - по указателю в переменной "a".
Представим матрицу в виде непрерывного массива. Через сколько чисел будет рассмотрен самый первый элемент следующей строки? А через n элементов. И если перейдём на 1 элемент дальше (т.е. на n+1), то окажемся на элементе главной диагонали. Нужно ещё учесть, что при косвенно-регистровой адресации имеем дело не с индексами массива, а с адресами, т.е. к указателю прибавлять не (n+1), а 4*(n+1), где 4 - размер элемента массива. Вот этот переход можно сделать множеством вариантов.
Так
Assembler
1
2
3
4
5
6
7
8
9
10
mov esi, [a]
mov ecx, [n]
@@forD:
.........
  mov eax, [n]
  inc eax
  mov ebx, 4
  mul ebx
  add esi, eax  ;esi=esi+4*(n+1)
loop @@forD
А есть вариант красивее
Assembler
1
2
3
4
5
6
7
8
mov esi, [a]
mov ecx, [n]
@@forD:
.........
  mov eax, [n]
  inc eax
  lea esi, [esi+4*eax]
loop @@forD
или
Assembler
1
2
3
4
5
6
7
mov esi, [a]
mov ecx, [n]
lea edi, [4*ecx+4]
@@forD:
.........
  add esi, edi
loop @@forD
Думаю, что понятно объяснил
0
14.11.2019, 23:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.11.2019, 23:55
Помогаю со студенческими работами здесь

Найти максимальный элемент на главной диагонали матрицы и заменить его на 1
Дан массив элементов 6х6. Найти максимальный элемент на главной диагонали и заменить его на 1

Заменить элементы главной диагонали матрицы на максимальный элемент побочной диагонали на минимальный элемент
в квадратной матрице находящейся в файле найти максимальный и минимальный элементы и заменить...

Найти минимальный элемент матрицы и заменить на него элементы главной диагонали
17)Найти минимальный элемент матрицы и заменить на него элементы главной диагонали.

Найти минимальный элемент главной диагонали матрицы, и заменить им элементы первого столбца
пусть m=n найти минимальный элемент главной диагонали и заменить им элементы первого столбца


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru