Как заменить на динамический массив

задание состояло в том, чтобы заменить первую строку на первый столбец в матрице, если их суммы равно, данное задание нужно было сделать используя С++ и Ассемблер. Сделала данное задание, но преподаватель сказал исправить, чтобы размер массива вводился с клавиатуры и потом динамически выделялась память, а как это исправить не знаю. Спасибо всем кто откликнется.

Код с++:

    #include <iostream>
#include <ctime>
#include <cstdlib>
#include <iomanip>
#include <conio.h>

extern "C" void asm_proc(int *a, int); // описание прототипа ASM-подпрограммы

using namespace std;

void Input(int arr[3][3]);
void Output(int arr[3][3]);

int main()
{
    setlocale(LC_ALL, "russian");
    int a[3][3] = { 0 };

    cout << "Задание: Если сумма элементов первой строки = сумме элементов первого столбца, " << endl << "обмнять элементы первой строки с элементами первого столбца " << endl << endl;
    cout << "Исходный массив: " << endl;
    Input(a);
    Output(a);

    asm_proc(&a[0][0], 3);
    cout << "Массив после оброботки: " << endl;
    Output(a);
    system("pause");
    return 0;
}

void Input(int arr[3][3])//функция заполнения массива с входными параметрами: массив и ограничение
{
    srand(time(NULL)); // "инициализация" генератора случайных чисел
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++)
            arr[i][j] = rand() % 10;
    }
}
void Output(int arr[3][3])//функция вывода массива в консоль
{
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++)
            cout << setw( 5)  << arr[i][j];
        cout << endl;//переход на следующую строку
    }
}

Код асм:

.386
.model flat, c

public  asm_proc

.data
    summ    dd  0
.code
asm_proc    proc
    push    ebp
    mov     ebp, esp


    mov     esi, [ebp + 8]
    mov     ecx, [ebp + 12] 
@add_summ:
    lodsd
    add     [summ], eax
loop @add_summ

    mov     esi, [ebp + 8]
    mov     ecx, [ebp + 12]
    mov     ebx, ecx
    shl     ebx, 2
@sub_summ:
    mov     eax, [esi]
    sub     [summ], eax
    add     esi, ebx
loop @sub_summ

; проверка равенства строк через разность суммы

  cmp     summ, 0
  jne     @exit


    mov     esi, [ebp + 8]
    mov     edi, [ebp + 8]
    mov     ecx, [ebp + 12]
;делаем обмен
@swap:
    push    [edi]
    push    [esi]
    pop     [edi]
    pop     [esi]
    add     esi, 4
    add     edi, ebx
loop @swap

@exit:
    leave
    retn
asm_proc    endp
end

Ответы (1 шт):

Автор решения: Harry

Заменяем ваше

int a[3][3] = { 0 };

на что-то типа

int **a = new int*[n];
for(int i = 0; i < n; ++i)
    a[i] = new int[n];

и работаем с a почти так же, как с двумерным массивом - передавая его в функции как int**a, и обращаясь к элементам, как и ранее - a[i][j].

→ Ссылка