C/C++

Тема: указатели. Условие задачи описано ниже:

Дана размерность матрицы (строки, столбцы) и сама матрица. Рассортировать отрицательные элементы каждого столбца матрицы по возрастанию. Положительные элементы оставить на своих местах. Вывести полученную матрицу. Дополнительных массивов не использовать. Разбивать на функции. Помогите переписать мой код так, чтобы:
1) память для массива выделялась динамически;
2) используя указатели (имею в виду следующее: *(* (a+i)+j) <=> a[i] [j] ;
3) разбить код на отдельные функции (ввод исходного массива, его вывод на экран, сортировка, вывод отсортированного массива на экран).

#include // используемые библиотеки: stdlib, time, stdio, locale, conio //
#include
#include
#include
#include
int main()
{
int A[100][100];
int j, i, N, M, tmp;
setlocale(LC_ALL, "ru");
printf("\nКол-во строк: ");
scanf_s("%d", &N);
printf("\nКол-во столбцов: ");
scanf_s("%d", &M);
printf("\n\n Введите элементы массива: \n\n");
for (i = 0; i < N; i++)
{
for (j = 0; j < M; j++)
{
scanf_s("%d", &A[i][j]);
}
}
printf("\n\n Исходный массив: \n\n");
for (i = 0; i < N; i++)
{
for (j = 0; j < M; j++)
{
printf("%d\t", A[i][j]);
}
printf("\n");
}
for (i = 0; i < N; i++)
{
for (j = 0; j < M; j++)
{
for (int k = j; k < M; k++)
{
if (A[j][i] < A[k][i] && A[j][i] < 0 && A[k][i] < 0)
{
tmp = A[k][i];
A[k][i] = A[j][i];
A[j][i] = tmp;
}
}
}
}
printf("\n\n Преобразованный массив: \n\n");
for (i = 0; i < N; i++)
{
for (j = 0; j < M; j++)
{
printf("%d\t", A[i][j]);
}
printf("\n");
}
printf("\n");
system("PAUSE");
return 0;
}
#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#include <locale.h>
#include <conio.h>
#include <malloc.h>

// печать массива
void PrintMatrix(int* ar, int row, int column) {
for (int i = 0; i < row; ++i) {
for (int j = 0; j < column; ++j) {
printf("%d\t", *(ar+column*i + j));
//printf("%d\t", ar[column*i + j]);
}
printf("\n");
}
}

// сортировка
void Sort (int* ar, int row, int column) {
for (int i = 0; i < column; ++i){
for (int j = 0; j < row; ++j) {
for (int k = j; k < row; ++k) {
if (*(ar+column*j + i) > *(ar+column*k + i) && *(ar+column*j + i) < 0 && *(ar+column*k + i) < 0) {
int tmp = *(ar+column*k + i);
*(ar+column*k + i) = *(ar+column*j + i);
*(ar+column*j + i) = tmp;
}
}
}
}
}

// ввод элементов матрицы
void InputMatrix(int* ar, int row, int column) {
for (int i = 0; i < row; ++i) {
for (int j = 0; j < column; ++j) {
scanf("%d", ar+column*i + j);
}
}
}

int main() {
int row, column;
printf("\nКол-во строк: ");
scanf("%d", &row);
printf("\nКол-во столбцов: ");
scanf("%d", &column);
int* ar = (int*) malloc(row*column*sizeof(int));

setlocale(LC_ALL, "ru");

printf("\n\n Введите элементы массива: \n\n");
InputMatrix(ar, row, column);

printf("\n\n Исходный массив: \n\n");
PrintMatrix(ar, row, column);

Sort(ar, row, column);

printf("\n\n Преобразованный массив: \n\n");
PrintMatrix(ar, row, column);

free(ar);

system("PAUSE");
return 0;
}
Семён Тюнин
Семён Тюнин
6 243
Лучший ответ