Дана размерность матрицы (строки, столбцы) и сама матрица. Рассортировать отрицательные элементы каждого столбца матрицы по возрастанию. Положительные элементы оставить на своих местах. Вывести полученную матрицу. Дополнительных массивов не использовать. Разбивать на функции. Помогите переписать мой код так, чтобы:
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;
}
C/C++
Тема: указатели. Условие задачи описано ниже:
#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;
}
#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;
}
Юрий Батраев
спасибо
Похожие вопросы
- Составьте алгоритм и напишите программу вычисления суммы n членов ряда согласно условию задачи
- Что значит условие задачи?
- Задачи с указателями С++
- Различие указателей int *; и char *;
- Не совсем понял как работает C++ код с указателями
- Если указатель уже объявлен как указатель то при повторном объявлении мы обращаемся не к указателю а к адресу ссылки?
- Передача в метод класса указателя на функцию C++
- C/C++ Как устроена память, выделенная для структуры с указателем *next?
- В чём причина? Понторезов с очень высшим образованием слушать не буду. Только тех, кто практикует работу с указателями вС++
- Указатели. Типизированные указатели. Указатели та массивы. Функции пользователя