Создайте структуру для сохранения информации про матрицу - 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
, заполнения его данными, вывода этих данных и последующего освобождения памяти.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д