Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
kingler1
0 / 0 / 1
Регистрация: 08.04.2016
Сообщений: 21
1

Изменить размеры матрицы

22.06.2016, 10:05. Просмотров 844. Ответов 2
Метки си (Все метки)

void reallocMatrix (Matrix *a, int m, int n);
Изменяет размеры матрицы a так, чтобы у неё было m строк и n столбцов.
Лишние столбцы и строки удаляются, новые столбцы или строки добавляют-
ся в конец. Новые строки и столбцы инициализировать нулями.
Пример. Исходная матрица:
1 2
3 4
5 6
Вызов:
reallocMatrix(a, 2, 4);
Результат:
1 2 0 0
3 4 0 0
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2016, 10:05
Ответы с готовыми решениями:

Проверить, все ли строки матрицы содержат хотя бы один отрицательный элемент Если да, то изменить знаки всех элементов м
Проверить, все ли строки матрицы содержат хотя бы один отрицательный элемент...

Размеры всех прямоугольников
Найти размеры всех прямоугольников, площадь которых задано натуральным числом s...

Размеры int и long
Подскажите почему максимальные unsigned int и unsigned long равны -1 ,...

Вернуть массивы и их размеры из void-функции
Всем привет, я в этом деле новичок. void func(int num,int *arr1, int *arr2)...

Как задать размеры массива пользователем, не используя динамическое выделение памяти
хм...интересный "финт ушами": #include <stdio.h> #include <stdlib.h> int...

2
Mycola
23 / 13 / 47
Регистрация: 23.03.2013
Сообщений: 157
23.06.2016, 03:08 2
Лучший ответ Сообщение было отмечено kingler1 как решение

Решение

указатель передается на одномерную матрицу
C
1
void reallocMatrix (Matrix *a, int m, int n);
а обрабатывать ее как двумерную, правильно понимаю?
или Matrix это ваша какая-то структура?
0
kingler1
0 / 0 / 1
Регистрация: 08.04.2016
Сообщений: 21
24.06.2016, 15:58  [ТС] 3
Работа с динамической матрицей Matrix:
C
1
2
3
4
typedef struct Matrix {
int *data;
int m, n;
} Matrix;
где m и n — количество строк и столбцов матрицы, data — указатель на массив
с элементами матрицы.
Для Array реализовать также функции (общее часть).
1.
C
1
Array* newArray (int n);
Создаёт новый массив размера n, массив и память под структуру выделяются
динамически.
2.
C
1
Array* copyArray (const Array *array);
Создаёт новую структуру типа Array, выделяет память под ещё один массив
размера array->n и копирует в новый массив содержимое старого array->data.
3.
C
1
void destroyArray (Array *array);
Освобождает память, выделённую под массив (array->data), и саму струк-
туру array. В случае если в качестве указателя array передано значение NULL
ничего делать не нужно.
Функция readArray из примеров использует функцию newArray, при правильной
реализации должно работать. Сами функции readArray, pprintLineArray и т.д.
можно свободно использовать в своих программах.
Для Matrix реализовать также функции (общая часть).
1.
C
1
Matrix* newMatrix (int m, int n);
Создаёт новую матрицу из m строк и n столбцов, массив и память под струк-
туру выделяются динамически.
2.
C
1
Matrix* copyMatrix (const Matrix *matrix);
Создаёт новую матрицу того же размера и копирует её содержимое в новую
матрицу. Массивы с данными (поле data) должны быть различными.
3.
C
1
void destroyMatrix (Matrix *matrix);
Освобождает память, выделённую под массив (matrix->data), и саму струк-
туру matrix. В случае если в качестве указателя matrix передано значение
NULL ничего делать не нужно.

Добавлено через 7 часов 46 минут
Вот код.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
 
 
typedef struct Matrix {
 int *data;
 int m, n;
} Matrix;
 
void* mymalloc (size_t size);
void* myrealloc (void *ptr, size_t size);
 
Matrix* newMatrix (int m, int n);
 
Matrix* copyMatrix (const Matrix *matrix);
 
void destroyMatrix (Matrix *matrix);
 
 
 
Matrix* readMatrix (const char *str);
 
void pprintMatrix (const Matrix *matrix);
 
void* myrealloc (void *ptr, size_t size) {
void *res = realloc(ptr, size); 
    if (res == NULL && size != 0) { 
        fprintf(stderr, " \n", size); 
        exit(EXIT_FAILURE);
    }
    return res; 
}
 
void* mymalloc (size_t size) { 
    void *res = malloc(size); 
    if (res == NULL) { 
        fprintf(stderr, "mymalloc: неспособен выделять %zd байты\n ", size); 
        exit(EXIT_FAILURE); 
    } 
    return res; 
}
 
 
Matrix* newMatrix(int m, int n) {
Matrix * new_matrix = (Matrix *)mymalloc(sizeof(Matrix));
new_matrix -> m = m;
new_matrix -> n = n;
new_matrix -> data = (int *)mymalloc(n*m*sizeof(int));
return new_matrix;
}
 
Matrix* copyMatrix(const Matrix *matrix) {
Matrix* copy = newMatrix(matrix -> m, matrix -> n);
for (int i = 0; i < matrix -> m * matrix -> n; i++) {
copy -> data[i] = matrix -> data[i];
}
return copy;
}
 
void destroyMatrix (Matrix *matrix){
     free(matrix->data); 
    free(matrix); 
}
 
Matrix* readMatrix (const char *str) {
 
Matrix *matrix = NULL;
 
int m, n;
 
printf("Введите количество столбцов и строк для %s через пробел: ", str);
 
if (scanf("%d %d", &m, &n) != 2 || m < 0 || n < 0) goto fail;
 
matrix = newMatrix(m, n);
 
int *data = matrix->data;
 
int len = m * n;
 
for (int i = 0; i < len; i++) {
 
if (scanf("%d", data + i) != 1) goto fail;
 
 }
 
return matrix;
 
fail:
 
fprintf(stderr, "readMatrix: ошибка при чтениии %s\n", str);
 
destroyMatrix(matrix);
 
return NULL;
 
 }
 
void pprintMatrix (const Matrix *matrix) {
int *data = matrix->data;
int m = matrix->m, n = matrix->n;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
printf(" %4d", *data);
data++;
}
 printf("\n");
  }
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2016, 15:58

Изменить размеры изображения
Здравствуйте. Пытаюсь изменить размеры изображения: public static Image...

Изменить размеры окна
На главном окне MainWindow есть кнопка. Нужно удлинить главное окно при нажатии...

Не получается изменить размеры
На меленьком разрешении все выходит за свои рамки, а что делать?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru