Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Реализация функции. 
:(
    Опции темы
kingler
Дата 24.6.2016, 11:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 5.6.2016

Репутация: нет
Всего: нет



Код

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
Вот код на си без этой функции и мейна.
Код

#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");
  }
}

void reallocMatrix (Matrix *a, int m, int n);









Это сообщение отредактировал(а) kingler - 24.6.2016, 15:44
PM MAIL   Вверх
tierswar
Дата 24.6.2016, 14:36 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Код

оформите в теги и будет ОК


Этот ответ добавлен с нового Винграда - http://vingrad.com
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0431 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.