Для заданной целой матрицы размером 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;
}

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

  1. В начале программы объявляются переменные x, y, min1, min2, max1, max2 и массив a размером x на y.
  2. Пользователю предлагается ввести значения x и y, а затем и заполнить массив a.
  3. Далее следует код на ассемблере, который выполняет следующие действия:
    • Начинает работу с первой строки массива и запоминает её минимальное значение в min1.
    • Затем проверяет каждую ячейку текущей строки и если она меньше min1, то обновляет min1.
    • После прохода по всем ячейкам текущей строки, min1 содержит минимальное значение этой строки.
    • Затем код переходит к следующей строке и повторяет описанные выше действия, пока не будет пройдена последняя строка.
    • В результате получается, что min1 содержит минимальное значение последнего столбца.
    • Аналогично, начиная с первой колонки, код находит максимальное значение последней строки и сохраняет его в max1.
    • Затем код переходит к первой строке и повторяет описанные выше действия, пока не будет пройдена последняя строка.
    • В результате получается, что max1 содержит максимальное значение первой колонки.
    • Если min2 (которое инициализируется как максимальное значение) равно max1, то это означает, что седловая точка находится в этой ячейке и её значение выводится на экран.
    • Если min2 не равно max1, то выводится сообщение о том, что седловых точек нет.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

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