Вывести треугольник Паскаля, используя динамический массив. Ошибка "Segmentation fault (core dumped)" - C (СИ)
Формулировка задачи:
Задача такова: вывести треугольник паскаля используя динамический массив. Я написала, но выдает ошибку: "Segmentation fault (core dumped)"
Листинг программы
- #include <assert.h>
- #include <stdio.h>
- int fact (int n)
- {
- if (n==0)
- return 1;
- else
- if (n>0)
- {
- int i, y=1;
- for (i=1; i<=n; i++)
- {
- y=y*i;
- }
- return y;
- }
- else
- return 0;
- }
- int main (void)
- {
- int i=0, j=0,n,fa;
- scanf ("%i",&n);
- int k=n+1;
- int **coeff;
- coeff=(int **)malloc(n*sizeof(int *));
- printf("hello");
- for (i=0; i<n; i++)
- {
- coeff[i]=(int *) malloc(n*sizeof(int));
- }
- for (i=0; i<=n; i++)
- for (j=0; j<=i; j++)
- {
- coeff[i][j]=0;
- }
- printf("tr1 %d", fact(5));
- for (i=0; i<=n; i++)
- for (j=0; j<=i; j++)
- {
- coeff[i][j]=fact(i);
- fa=(fact(j)*fact(i-j));
- coeff[i][j]/=fa;
- }
- for (i=0; i<=n; i++)
- for (j=0; j<=n; j++)
- printf ("%d", coeff[i][j]);
- for (i=0; i<n; i++)
- free (coeff[i]);
- free(coeff);
- return 0;
- }
Решение задачи: «Вывести треугольник Паскаля, используя динамический массив. Ошибка "Segmentation fault (core dumped)"»
textual
Листинг программы
- #include <assert.h>
- #include <stdio.h>
- #include <stdlib.h>
- int fact (int n) {
- if (n==0)
- return 1;
- else if (n>0) {
- int i, y=1;
- for (i=1; i<=n; i++) {
- y=y*i;
- }
- return y;
- }
- else
- return 0;
- }
- int main (void) {
- int i=0, j=0,n,fa;
- scanf ("%i",&n);
- int k=n+1;
- int **coeff;
- coeff=(int **)malloc(n*sizeof(int *));
- printf("hello");
- for (i=0; i<n; i++) {
- coeff[i]=(int *) malloc(n*sizeof(int));
- }
- for (i=0; i<n; i++) // <<
- for (j=0; j<i; j++) { // <<
- coeff[i][j]=0;
- }
- printf("tr1 %d", fact(5));
- for (i=0; i<n; i++) // <<
- for (j=0; j<i; j++) { // <<
- coeff[i][j]=fact(i);
- fa=(fact(j)*fact(i-j));
- coeff[i][j]/=fa;
- }
- for (i=0; i<n; i++){ // <<
- for (j=0; j<n; j++) // <<
- printf ("%d ", coeff[i][j]);
- printf("\n");
- }
- for (i=0; i<n; i++)
- free (coeff[i]);
- free(coeff);
- return 0;
- }
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы: assert.h, printf.h и stdlib.h.
- Определяется функция fact, которая вычисляет факториал числа n.
- В функции main создается динамический массив coeff размером n+1 для хранения n*n матрицы.
- В цикле for заполняются все элементы матрицы coeff нулями.
- Вычисляется и выводится на экран факториал числа 5.
- В цикле for для каждого элемента матрицы coeff вычисляется его значение как факториал соответствующего числа.
- Для каждого элемента наружного цикла вычисляется значение факториала соответствующего числа и результат делится на значение факториала внутреннего цикла.
- Все элементы матрицы выводятся на экран через пробел.
- Все динамические памяти освобождаются.
- Функция main возвращает 0, что означает успешное завершение работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д