В
Все
Б
Биология
Б
Беларуская мова
У
Українська мова
А
Алгебра
Р
Русский язык
О
ОБЖ
И
История
Ф
Физика
Қ
Қазақ тiлi
О
Окружающий мир
Э
Экономика
Н
Немецкий язык
Х
Химия
П
Право
П
Психология
Д
Другие предметы
Л
Литература
Г
География
Ф
Французский язык
М
Математика
М
Музыка
А
Английский язык
М
МХК
У
Українська література
И
Информатика
О
Обществознание
Г
Геометрия
ebusuruna
ebusuruna
23.04.2022 16:32 •  Информатика

нужна . С++

Мне нужно превратить (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;

}

Показать ответ
Ответ:
lololo781
lololo781
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 элементов)

0,0(0 оценок)
Ответ:
lvo2010w
lvo2010w
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;

}

0,0(0 оценок)
Популярные вопросы: Информатика
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота