Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2016, 10:13   #1
numberonee
Новичок
Джуниор
 
Регистрация: 19.06.2016
Сообщений: 4
По умолчанию Удаляет из квадратной матрицы a главную диагональ, при этом элементы верхнего треугольника смещаются влево.

void removeDiagT (Matrix *a);
Удаляет из квадратной матрицы a главную диагональ, при этом элементы верхнего треугольника смещаются влево.

Код:
#include <stdio.h>
#include <stdlib.h>

void* myrealloc(void *ptr, size_t size);
void* mymalloc(size_t size);

typedef struct Matrix {
int *data;
int m, n;
} Matrix;

Matrix* newMatrix(int m, int n);
Matrix* copyMatrix(const Matrix *matrix);
void destroyMatrix(Matrix *matrix);
void removeDiagT(Matrix *a);
void printMatrix(const Matrix *matrix);
int main() {
printf("Введите размер матрицы:\n");
printf("n = ");
int n;
if (scanf("%d", &n) != 1) {
printf("Ошибка ввода");
exit(EXIT_FAILURE);
}

printf("m = ");
int m;
if (scanf("%d", &m) != 1) {
printf("Ошибка ввода");
exit(EXIT_FAILURE);
}

printf("Введите элементы матрицы:\n");
Matrix * matrix = newMatrix(n, m);
for (int i = 0; i < (matrix -> m * matrix -> n); i++) {
if (scanf("%d", &matrix -> data[i]) != 1) {
printf("Ошибка ввода");
exit(EXIT_FAILURE);
}
}
printMatrix(matrix);
printf("\n");
removeDiagT(matrix);
printMatrix(matrix);
printf("\n");
destroyMatrix(matrix);
system("pause");
return 0;
}

void removeDiagT(Matrix *a) {
if (a -> m != a -> n) {
printf("Ошибка ввода");
exit(EXIT_FAILURE);
}

Matrix * temp = newMatrix(a -> m, a -> n-1);
int index = 0; 
for (int i = 0; i < a -> m; i++) {
for (int j = 0; j < a -> n; j++) {
if (i != j) {
temp -> data[index] = a -> data[i * a -> m + j];
int b = a -> data[i * a -> m + j];
++index;
}
}
}
myrealloc(a -> data, sizeof(int)*a -> m * (a -> n - 1));
a -> n = a -> n - 1;
index = 0;
for (int i = 0; i < a -> n; i++) {
for (int j = 0; j < a -> n; j++) {
a -> data[i * a -> n + j] = temp -> data[index];
int a = temp -> data[index];
++index;
}
}
destroyMatrix(temp);
}

void *mymalloc(size_t size) {
void *result = malloc(size);
if (result == NULL) {
fprintf(stderr, "mymalloc: не удалось выделить %zd байт\n", size);
exit(EXIT_FAILURE);

}
return result;
}

void* myrealloc(void *ptr, size_t size) {
void *res = realloc(ptr, size);
if (res == NULL && size != 0) {
fprintf(stderr, "myrealloc: не удалось выделить %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;
}

void printMatrix(const Matrix *matrix) {
int m = matrix -> m, n = matrix -> n;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
printf("%d", matrix -> data[i * n + j]);
}
printf("\n");
}
}

Пример. Исходная матрица:
1 2 3
4 5 6
7 8 9
Вызов:
2 3
4 6
7 8

Не работает. Что не так с free?

Последний раз редактировалось Serge_Bliznykov; 19.06.2016 в 15:22.
numberonee вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Элементы квадратной матрицы FroZko C# (си шарп) 3 13.03.2013 18:09
2. Получить элементы квадратной матрицы Annyska Паскаль, Turbo Pascal, PascalABC.NET 2 11.12.2012 09:38
главную диагональ матрицы умножить на модуль её минимального элемента delphi Antidelphik_) Помощь студентам 10 23.03.2011 14:41
На главную диагональ матрицы поместить наибольшие элементы этой матрицы mivel Помощь студентам 2 23.12.2009 21:19