Добавить динамическое выделение памяти в программе - C (СИ)
Формулировка задачи:
В этой программе нужно предусмотреть динамичное выделение памяти:
#include <stdio.h> #include <stdlib.h> #define M 6 #define N 5 int Matr[M][N]; /* Проверка, является ли n числом Фибоначчи */ int isFib(int n) { int c=1, p=1,q; while (1) { if (c==n) return 1; if (c > n) return 0; q=c; c=c+p; p=q; } } int isMark(int k) { int i, c=0; for (i=0; i<M; i++) if (isFib(Matr[i][k])) c++; return (c > (M/2)); } int main (int argc, char *argv[]) { int i,j,p=0,max; /* ввод матрицы */ for (i=0; i<M; i++) { for (j=0; j<N; j++) { printf ("M[%d,%d]=",i,j); scanf ("%d",&Matr[i] [j]); } printf("\n"); } /* Поиск максимума в отмеченных */ for (j=0; j<N; j++) if (isMark(j)) { if (p==0) max=Matr[0][j]; for (i=0; i<M; i++) if (Matr[i][j] > max) max=Matr[i][j]; p=1; } /* Вывод результата */ printf("max=%d\n",max); system("PAUSE"); return 0; }
Решение задачи: «Добавить динамическое выделение памяти в программе»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <malloc.h> int M,N; int *Matr; /* Проверка, является ли n числом Фибоначчи */ int isFib(int n) { int c=1, p=1,q; while (1) { if (c==n) return 1; if (c > n) return 0; q=c; c=c+p; p=q; } } int isMark(int k) { int i,q,c=0; for (i=0; i<M; i++) { q=index(i,k); if (isFib(Matr[q])) c++; } return (c > (M/2)); } int index(int i, int j) { return i*M+j; } int main (int argc, char *argv[]) { int Sz,q,f; int i,j,p=0,max; /* Создание матрицы */ printf("M="); scanf("%d",&M); printf("N="); scanf("%d",&N); Sz=M*N; Matr=(int *) calloc(Sz,sizeof(int)); /* ввод матрицы */ for (i=0; i<M; i++) { for (j=0; j<N; j++) { printf ("M[%d,%d]=",i,j); scanf ("%d",&q); Matr[index(i,j)]=q; } printf("\n"); } /* Поиск максимума в отмеченных */ f=0; for (j=0; j<N; j++) if (isMark(j)) { f=1; if (p==0) max=Matr[index(0,j)]; for (i=0; i<M; i++) if (Matr[index(i,j)] > max) max=Matr[index(i,j)]; p=1; } /* Вывод результата */ if (f==0) printf("No such columns\n"); else printf("max=%d\n",max); free(Matr); system("PAUSE"); return 0; }
Объяснение кода листинга программы
- Объявление переменных:
- M, N - переменные для ввода размеров матрицы
- Sz - переменная для хранения размера матрицы (произведение M и N)
- Matr - указатель на память, выделенную для матрицы
- i, j, p, q, f, max - переменные для выполнения различных операций
- Функция isFib - проверяет, является ли число n числом Фибоначчи
- Функция isMark - проверяет, есть ли в колонке k число, являющееся числом Фибоначчи
- Функция index - возвращает индекс элемента матрицы
- В функции main происходит следующее:
- Ввод размеров матрицы
- Выделение памяти под матрицу с помощью calloc
- Ввод матрицы
- Поиск максимального числа в отмеченных колонках
- Вывод результата
- Освобождение памяти с помощью free
- Ожидание нажатия клавиши с помощью system(
PAUSE
) - Возвращение 0, что означает успешное выполнение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д