Для заданной целой матрицы размером n x m напечатать индексы всех её седловых точек - Assembler
Формулировка задачи:
Элемент матрицы назовем седловой точкой, если он является наименьшим в
своей строке и одновременно наибольшим в своем столбце или, наоборот, является
наибольшим в своей строке и наименьшим в своем столбце. Для заданной целой матрицы
размером n x m напечатать индексы всех её седловых точек. Использовать .model tiny.
Решение задачи: «Для заданной целой матрицы размером n x m напечатать индексы всех её седловых точек»
textual
Листинг программы
#include <iostream> using namespace std; int main() { setlocale(LC_ALL,"RUS"); int x,y,min1,min2,max1,max2; cin >>x >>y; int a[100][100]; for (int i=0; i<x; ++i) { for (int j=0; j<y; ++j) cin >>a[i][j]; } _asm { mov eax,a mov max1,-2147483648 mov ecx,x mov esi,0 M2: mov ebx,esi push ecx mov eax,a[esi] mov min1,eax mov ecx,y M5: mov eax,min1 cmp eax,a[esi] jl N mov eax,a[esi] mov min1,eax N: add esi,4 loop M5 mov eax,max1 cmp eax,min1 jg N2 mov eax,min1 mov max1,eax N2: add ebx,400 mov esi,ebx pop ecx loop M2 mov eax,a mov min2,07fffffffh mov ecx,y mov esi,0 M4: push ecx mov ebx,esi mov eax,a[esi] mov max2,eax mov ecx,x M3: mov eax,max2 cmp eax,a[esi] jg N3 mov eax,a[esi] mov max2,eax N3: add esi,400 loop M3 mov eax,min2 cmp eax,max2 jl N4 mov eax,max2 mov min2,eax N4: add ebx,4 mov esi,ebx pop ecx loop M4 } if (min2==max1) cout <<"Седловая точка со значением " <<min2<<"\n"; else cout <<"Седловых точек нет"; system("PAUSE"); return 0; }
Объяснение кода листинга программы
- В начале программы объявляются переменные x, y, min1, min2, max1, max2 и массив a размером x на y.
- Пользователю предлагается ввести значения x и y, а затем и заполнить массив a.
- Далее следует код на ассемблере, который выполняет следующие действия:
- Начинает работу с первой строки массива и запоминает её минимальное значение в min1.
- Затем проверяет каждую ячейку текущей строки и если она меньше min1, то обновляет min1.
- После прохода по всем ячейкам текущей строки, min1 содержит минимальное значение этой строки.
- Затем код переходит к следующей строке и повторяет описанные выше действия, пока не будет пройдена последняя строка.
- В результате получается, что min1 содержит минимальное значение последнего столбца.
- Аналогично, начиная с первой колонки, код находит максимальное значение последней строки и сохраняет его в max1.
- Затем код переходит к первой строке и повторяет описанные выше действия, пока не будет пройдена последняя строка.
- В результате получается, что max1 содержит максимальное значение первой колонки.
- Если min2 (которое инициализируется как максимальное значение) равно max1, то это означает, что седловая точка находится в этой ячейке и её значение выводится на экран.
- Если min2 не равно max1, то выводится сообщение о том, что седловых точек нет.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д