Создайте структуру для сохранения информации про матрицу - C (СИ)
Формулировка задачи:
Помогите пожайлуста решить проблему: Создайте структуру для сохранения информации про матрицу.
Напишите функции
для выделения памяти под массив, ввод и вывод данных, умножение матриц.
Struct Matr {
int m, n;
int * ptr;
};Решение задачи: «Создайте структуру для сохранения информации про матрицу»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
struct Matr {
int m, n;
int * ptr;
};
struct Matr* mat_alloc(int m,int n){
struct Matr *ptr;
ptr=(struct Matr*)malloc(sizeof(struct Matr));
ptr->ptr=(int*)malloc(sizeof(int)*m*n);
ptr->m=m;
ptr->n=n;
return ptr;
}
//Mojet vmesto n ->m
#define mat_acces(p,x,y) p->ptr[x+y*p->m]
void mat_free(struct Matr *p){
if (p) {
if (p->ptr) free(p->ptr);
free(p);
}
}
void mat_input(struct Matr*p){
int x,y,v;
for (y=0;y<p->n;y++)
for (x=0;x<p->m;x++){
printf("\nread at %i:%i = ",x,y);
scanf("%i",&v);
mat_acces(p,x,y)=v;
}
}
void mat_output(struct Matr*p){
int x,y,v;
printf("\noutput:\n");
for (y=0;y<p->n;y++){
for (x=0;x<p->m;x++){
v=mat_acces(p,x,y);
printf("%i ",v);
}
printf("\n");
}
}
int main()
{
struct Matr *p;
int m,n;
m=n=3;
p=mat_alloc(m,n);
mat_input(p);
mat_output(p);
mat_free(p);
printf("\nHello world!\n");
return 0;
}
Объяснение кода листинга программы
- Объявление структуры
Matrс полямиm,nиptr. - Функция
mat_allocдля выделения памяти под структуруMatrи её поля. - Макро
mat_accesдля доступа к элементу матрицы по индексамxиy. - Функция
mat_freeдля освобождения выделенной памяти. - Функция
mat_inputдля ввода данных в матрицу с помощью циклаfor. - Функция
mat_outputдля вывода данных из матрицы с помощью циклаfor. - Главная функция
mainдля создания экземпляра структурыMatr, заполнения его данными, вывода этих данных и последующего освобождения памяти.