Вопрос задан 24.09.2023 в 00:06. Предмет Информатика. Спрашивает Бельков Максим.

#include using namespace std; int main(){ // ФОРМУВАННЯ МАТРИЦІ int n; cout << "Введіть n :

"; cin >> n; int** a = new int* [n]; // матриця А int** b = new int* [n]; // матриця В int** res = new int* [n]; // результуюча матриця cout << "Введіть елементи матриці А : "; for (int i = 0; i < n; i++){ a[i] = new int[n]; b[i] = new int[n]; res[i] = new int[n]; for (int j = 0; j < n; j++) { cin >> a[i][j]; b[i][j] = i + j -1; res[i][j] = 0; } } // ВІЗУАЛІЗАЦІЯ СФОРМОВАНИХ МАТРИЦЬ cout << " A : " << endl; for (int i = 0; i < n; i++){ for (int j = 0; j < n; j++) { cout << a[i][j] << " "; } cout << endl; } cout << endl; cout << " B : " << endl; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cout << b[i][j] << " "; } cout << endl; }cout << endl; // АСЕМБЛЕРНА ВСТАВКА (алгоритм множення матриць) __asm { mov ecx, 0 start1: mov edi, 0 start2 : mov edx, res // edx = res mov esi, ecx imul esi, 4 add edx, esi // edx = &res[i] push [edx] pop edx // edx = res[i] mov esi, edi imul esi, 4 add edx, esi // edx = &res[i][j] push edx xor esi, esi start : mov eax, a mov ebx, b a_to_eax : mov edx, ecx mov eax, [eax + 4 * edx] // eax = a[i] mov edx, esi mov eax, [eax + 4 * edx] // eax = a[i][esi] b_to_ebx : mov edx, esi mov ebx, [ebx + 4 * edx] // ebx = b[esi] mov edx, edi mov ebx, [ebx + 4 * edx] // ebx =b[esi][j] end : pop edx imul eax, ebx // eax = a[i][esi]*b[esi][j] add[edx], eax push edx inc esi cmp esi, n jne start pop edx inc edi cmp edi, n jne start2 inc ecx cmp ecx, n jne start1 } // ВИВЕДЕННЯ РЕЗУЛЬТАТУ cout << " A * B: " << endl; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { cout << res[i][j] << " "; } cout << endl; } cout << res << endl; system("pause"); } Замінити тільки частину асемблера так, щоб він підходив під це завдання: Для квадратної матриці A= {aij} порядку nобчислити різницю між максимальним елементом рядків з парними номерами і мінімальним елементом рядків з непарними номерами. В с+++
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Мельникова Инна.

#include <iostream>

using namespace std;

int main()

{

// ФОРМУВАННЯ МАТРИЦІ

int n;

cout << "Введіть n: ";

cin >> n;

int** a = new int*[n]; // матриця A

cout << "Введіть елементи матриці A: " << endl;

for (int i = 0; i < n; i++) {

a[i] = new int[n];

for (int j = 0; j < n; j++) {

cin >> a[i][j];

}

}

// Обчислення різниці між максимальним елементом рядків з парними номерами і мінімальним елементом рядків з непарними номерами

int max_even = INT_MIN;

int min_odd = INT_MAX;

__asm {

mov ecx, 0 // індекс рядка

// Цикл обходу рядків

start1 :

mov edi, 0 // індекс стовпця

xor eax, eax // eax = 0 (максимальний елемент рядка)

xor ebx, ebx // ebx = 0 (мінімальний елемент рядка)

// Цикл обходу елементів у рядку

start2 :

mov edx, a // edx = a

mov esi, ecx

imul esi, 4

add edx, esi // edx = &a[i]

mov esi, edi

imul esi, 4

add edx, esi // edx = &a[i][j]

mov esi, [edx] // esi = a[i][j]

// Знаходження максимального елемента у рядку з парним номером

cmp ecx, 1

jne check_min

cmp esi, eax

jle check_min

mov eax, esi

jmp check_min

check_min :

// Знаходження мінімального елемента у рядку з непарним номером

cmp ecx, 0

jne end_check

cmp esi, ebx

jge end_check

mov ebx, esi

end_check :

inc edi

cmp edi, n

jne start2

// Оновлення максимального елемента рядків з парними номерами

cmp ecx, 1

jne end_update_max

cmp eax, max_even

jle end_update_max

mov max_even, eax

end_update_max :

// Оновлення мінімального елемента ряд

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Вам потрібно змінити частину асемблерного коду, щоб обчислити різницю між максимальними елементами рядків з парними номерами та мінімальними елементами рядків з непарними номерами. Ось змінений асемблерний код для цього завдання:

assembly
__asm { mov ecx, 0 ; ініціалізуємо індекс рядка mov eax, 0 ; eax - для збереження максимального елемента mov ebx, 0 ; ebx - для збереження мінімального елемента start1 : mov edx, a ; edx = a mov esi, ecx ; esi = i imul esi, 4 ; esi = i * 4 (розмір int) add edx, esi ; edx = &a[i] push [edx] ; зберігаємо адресу a[i] pop edx ; edx = a[i] ; Знайти максимальний елемент у рядку з парним номером xor esi, esi ; esi - індекс стовпця (знову) mov edi, 0 ; edi - для збереження максимального елемента рядка find_max : mov eax, [edx + 4 * esi] ; eax = a[i][esi] cmp eax, edi jg update_max inc esi cmp esi, n jl find_max jmp check_odd_row update_max : mov edi, eax inc esi cmp esi, n jl find_max check_odd_row : mov eax, ecx test eax, 1 ; перевірка на парність i jnz odd_row ; перехід до обробки рядка з непарним номером sub [res], edi ; віднімання максимального з результуючого числа jmp next_row odd_row : add [res], edi ; додавання максимального до результуючого числа next_row : inc ecx ; збільшуємо індекс рядка cmp ecx, n jne start1 ; Виведення результату mov eax, [res] sub ebx, eax ; ebx = мінімальний - максимальний mov edx, ebx ; edx = результат (різниця) }

Цей асемблерний код обчислює різницю між максимальними елементами рядків з парними номерами і мінімальними елементами рядків з непарними номерами. Результат зберігається в реєстрі edx.

0 0

Похожие вопросы

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос