нужна . С++

Мне нужно превратить (int mat[n][m]) в указатель так чтобі это работало((

#include

#include

#include

#include

#include

using namespace std;

int main()

{

setlocale(LC_ALL, "Ukr");

const int n = 3, m = 3;

printf("Кiлькiсть рядкiв матрицi = ");

scanf_s("%d", &n);

printf("Кiлькiсть стовпцiв матрицi = ");

scanf_s("%d", &m);

int mat[n][m];

srand(time(NULL));

printf("Була:\n ");

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

for (int j = 0; j < m; j++)

mat[i][j] = rand() % 21 - 10;

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

{

for (int j = 0; j < m; j++)

printf("%d ", mat[i][j]);

printf("\n");

}

printf("Cтала:\n ");

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

{

int* temp = new int[n];

temp[i] = mat[n - 1][i];

mat[n - 1][i] = mat[i][0];

mat[i][0] = temp[i];

}

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

{

for (int j = 0; j < m; j++)

printf("%d ", mat[i][j]);

printf("\n");

}

return 0;

}

Djilsi Djilsi    2   18.06.2021 01:37    3

Ответы
djdhd1 djdhd1  18.07.2021 01:56

Так работать оно никак не будет по 2 причинам

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

{

int* temp = new int[n];

temp[i] = mat[n - 1][i];

mat[n - 1][i] = mat[i][0];

mat[i][0] = temp[i];

}

1. у тебя mat[n][m], а ты пытаешься че-то там обратиться к mat[n - 1][i], а i бегает по n. Ты не написал че должна делать прога, потому сам приведи индексы в чувство.

2. ты зачем то создаёшь новый масив temp, не очищаешь память, но ладно это, так ты создаёшь его для хранения 1 значения. mat[x][y] в данном случае вернёт просто int, потому и делай int temp = mat[x][y] или если так нужен указатель, то int* temp =&mat[x][y] , а ещё лучше почитай про std::swap (как я понял, это надо чтоб поменять местами значения 2 элементов)

ПОКАЗАТЬ ОТВЕТЫ
stendec stendec  18.07.2021 01:56

Объяснение:

С использованием арифметики указателей будет так на чистом С:

В программе, я так понимаю, требовалось поменять 1-ю и последнюю строку в матрице?

#include <stdio.h>

#include <time.h>

#include <stdlib.h>

#include <locale>

#include <new> //для new

using namespace std;

int main()

{

setlocale(LC_ALL, "Ukr");

int n = 3, m = 3;

printf("Кiлькiсть рядкiв матрицi = ");

scanf_s("%d", &n);

printf("Кiлькiсть стовпцiв матрицi = ");

scanf_s("%d", &m);

 

int** mat;

// Динамічне виділення пам'яті в кучі для матриці

// за до malloc() в стилі С або

// за до new в С++

mat = (int**)malloc(sizeof(int*) * n);

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

 *(mat + i) = (int*)malloc(sizeof(int) * m);

srand(time(NULL));

printf("Була:\n");

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

 for (int j = 0; j < m; j++)

  *(*(mat + i) + j) = (int) rand() % 21 - 10;

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

{

 for (int j = 0; j < m; j++)

  printf("%5d", *(*(mat + i) + j));

 printf("\n");

}

// Переставити 1-й та останній рядок

printf("Cтала:\n");

int* temp = *mat;

*mat = *(mat + n - 1);

*(mat + n - 1) = temp;  

 

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

{

 for (int j = 0; j < m; j++)

  printf("%5d", *(*(mat + i) + j));

 printf("\n");

}

// Звільнення пам'яті з кучі (якщо було new, то delete)

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

 free(*(mat + i));

free(mat);

 

return 0;

}

ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика