Вывести треугольник Паскаля, используя динамический массив. Ошибка "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;
}

Объяснение кода листинга программы

  1. Включаются необходимые заголовочные файлы: assert.h, printf.h и stdlib.h.
  2. Определяется функция fact, которая вычисляет факториал числа n.
  3. В функции main создается динамический массив coeff размером n+1 для хранения n*n матрицы.
  4. В цикле for заполняются все элементы матрицы coeff нулями.
  5. Вычисляется и выводится на экран факториал числа 5.
  6. В цикле for для каждого элемента матрицы coeff вычисляется его значение как факториал соответствующего числа.
  7. Для каждого элемента наружного цикла вычисляется значение факториала соответствующего числа и результат делится на значение факториала внутреннего цикла.
  8. Все элементы матрицы выводятся на экран через пробел.
  9. Все динамические памяти освобождаются.
  10. Функция main возвращает 0, что означает успешное завершение работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.643 из 5
Похожие ответы