Двухмерный массив
int arr [ ] [ ],
одно значение строки, которое можно не заполнять, а второе значение столбцы, значение столбцов должно быть константой, тогда как мне сделать так, чтобы я мог вводить с клавиатуры количество столбцов, если второе число константа
C/C++
Двухмерный массив с++
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main()
{
int n,m;
printf("Введите количество строк: ");
scanf("%d", &n);
printf("Введите количество столбцов: ");
scanf("%d", &m);
int **arr;
/* выделение памяти */
arr = (int **) malloc(n * sizeof(int*));
for(int x = 0; x < n; x++)
{
arr[x] = (int *) malloc(m * sizeof(int));
}
/* заполнение массива */
srand(time(NULL));
for(int x = 0; x < n; x++)
{
for(int y = 0; y < m; y++)
{
arr[x][y] = rand() % 11;
printf("%d\t", arr[x][y]);
}
putchar('\n');
}
/* удаление памяти */
for(int x = 0; x < n; x++)
{
free(arr[x]);
}
free(arr);
arr = NULL;
return 0;
}
#include <stdio.h>
#include <time.h>
int main()
{
int n,m;
printf("Введите количество строк: ");
scanf("%d", &n);
printf("Введите количество столбцов: ");
scanf("%d", &m);
int **arr;
/* выделение памяти */
arr = (int **) malloc(n * sizeof(int*));
for(int x = 0; x < n; x++)
{
arr[x] = (int *) malloc(m * sizeof(int));
}
/* заполнение массива */
srand(time(NULL));
for(int x = 0; x < n; x++)
{
for(int y = 0; y < m; y++)
{
arr[x][y] = rand() % 11;
printf("%d\t", arr[x][y]);
}
putchar('\n');
}
/* удаление памяти */
for(int x = 0; x < n; x++)
{
free(arr[x]);
}
free(arr);
arr = NULL;
return 0;
}
Мурат К
Также рекомендуют работать с векторами. Но я подзабыл, как с ними работать. Пусть приведёт пример кто-то более опытный.
Богдан Максимец
зачем нужно выделение памяти и удаление памяти и что значит int **arr(звездочки)
#include
#include
#include
int main()
{
int **a; // указатель на указатель на строку элементов
int i, j, n, m;
system("chcp 1251");
system("cls");
printf("Введите количество строк: ");
scanf("%d", &n);
printf("Введите количество столбцов: ");
scanf("%d", &m);
// Выделение памяти под указатели на строки
a = (int**)malloc(n * sizeof(int*));
if (a==NULL) { printf("Память не выделена\n"); exit(1); }
// Ввод элементов массива
for (i = 0; i<n; i++) // цикл по строкам
{
// Выделение памяти под хранение строк
a[i] = (int*)malloc(m * sizeof(int));
if (a[i]== NULL) { printf("Память не выделена\n"); n= i; goto ALARM; }
for (j = 0; j<m; j++) // цикл по столбцам
{
printf("a[%d][%d] = ", i, j);
scanf("%d", &a[i][j]);
}
}
// Вывод элементов массива
for (i = 0; i < n; i++) // цикл по строкам
{
for (j = 0; j < m; j++) // цикл по столбцам
{
printf("%5d ", a[i][j]); // 5 знакомест под элемент массива
}
printf("\n");
}
// Очистка
ALARM:
for (int ii = 0; ii < n; ii++) // цикл по строкам
free(a[ii]); // освобождение памяти под строку
free(a);
getchar(); getchar();
return 0;
}
#include
#include
int main()
{
int **a; // указатель на указатель на строку элементов
int i, j, n, m;
system("chcp 1251");
system("cls");
printf("Введите количество строк: ");
scanf("%d", &n);
printf("Введите количество столбцов: ");
scanf("%d", &m);
// Выделение памяти под указатели на строки
a = (int**)malloc(n * sizeof(int*));
if (a==NULL) { printf("Память не выделена\n"); exit(1); }
// Ввод элементов массива
for (i = 0; i<n; i++) // цикл по строкам
{
// Выделение памяти под хранение строк
a[i] = (int*)malloc(m * sizeof(int));
if (a[i]== NULL) { printf("Память не выделена\n"); n= i; goto ALARM; }
for (j = 0; j<m; j++) // цикл по столбцам
{
printf("a[%d][%d] = ", i, j);
scanf("%d", &a[i][j]);
}
}
// Вывод элементов массива
for (i = 0; i < n; i++) // цикл по строкам
{
for (j = 0; j < m; j++) // цикл по столбцам
{
printf("%5d ", a[i][j]); // 5 знакомест под элемент массива
}
printf("\n");
}
// Очистка
ALARM:
for (int ii = 0; ii < n; ii++) // цикл по строкам
free(a[ii]); // освобождение памяти под строку
free(a);
getchar(); getchar();
return 0;
}
Сережа ***q**
Снйчас поищу вектор из векторов - простая матрица и там в случае чего STL уже обеспечил правильное завершение работы
Сережа ***q**
можно и свою библиотеку набросать из действий над матрицей
Похожие вопросы
- Как передать двухмерный массив в качестве аргумента через указатель.
- Написать РЕКУРСИВНУЮ функцию, которая принимает двухмерный массив целых чисел и выполняет круговой сдвиг массива ВЛЕВО.
- Напишите рекурсивную функцию, которая принимает двухмерный массив целых чисел и количество сдвигов и выполняет
- Помогите написать программу по обработке двухмерного массива в с++
- Двухмерный массив 4x4
- С++ | Надо отсортировать двухмерный массив N*M в порядке возрастания и спадания ПО КАЖДОМУ СТОЛБЦУ ОТДЕЛЬНО
- Программирование на языке C++. Двухмерные массивы чисел
- Задача C++ с двухмерными массивами
- В файле дана двухмерная матрица, сформировать одномерный массив длинной N из чётных элементов квадратной матрицы
- Указатели. Программирование с использованием динамических двухмерным масивов.