Вывести треугольник Паскаля, используя динамический массив. Ошибка "Segmentation fault (core dumped)" - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Задача такова: вывести треугольник паскаля используя динамический массив. Я написала, но выдает ошибку: "Segmentation fault (core dumped)"
Листинг программы
  1. #include <assert.h>
  2. #include <stdio.h>
  3. int fact (int n)
  4. {
  5. if (n==0)
  6. return 1;
  7. else
  8. if (n>0)
  9. {
  10. int i, y=1;
  11. for (i=1; i<=n; i++)
  12. {
  13. y=y*i;
  14. }
  15. return y;
  16. }
  17. else
  18. return 0;
  19. }
  20.  
  21. int main (void)
  22. {
  23. int i=0, j=0,n,fa;
  24. scanf ("%i",&n);
  25. int k=n+1;
  26. int **coeff;
  27. coeff=(int **)malloc(n*sizeof(int *));
  28. printf("hello");
  29. for (i=0; i<n; i++)
  30. {
  31. coeff[i]=(int *) malloc(n*sizeof(int));
  32. }
  33. for (i=0; i<=n; i++)
  34. for (j=0; j<=i; j++)
  35. {
  36. coeff[i][j]=0;
  37. }
  38. printf("tr1 %d", fact(5));
  39. for (i=0; i<=n; i++)
  40. for (j=0; j<=i; j++)
  41. {
  42. coeff[i][j]=fact(i);
  43. fa=(fact(j)*fact(i-j));
  44. coeff[i][j]/=fa;
  45. }
  46. for (i=0; i<=n; i++)
  47. for (j=0; j<=n; j++)
  48. printf ("%d", coeff[i][j]);
  49. for (i=0; i<n; i++)
  50. free (coeff[i]);
  51. free(coeff);
  52. return 0;
  53. }

Решение задачи: «Вывести треугольник Паскаля, используя динамический массив. Ошибка "Segmentation fault (core dumped)"»

textual
Листинг программы
  1. #include <assert.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4.  
  5. int fact (int n) {
  6.     if (n==0)
  7.         return 1;
  8.     else if (n>0) {
  9.         int i, y=1;
  10.         for (i=1; i<=n; i++) {
  11.             y=y*i;
  12.         }
  13.         return y;
  14.     }
  15.     else
  16.         return 0;
  17. }
  18.  
  19.  
  20. int main (void) {
  21.     int i=0, j=0,n,fa;
  22.     scanf ("%i",&n);
  23.     int k=n+1;
  24.     int **coeff;
  25.     coeff=(int **)malloc(n*sizeof(int *));
  26.     printf("hello");
  27.     for (i=0; i<n; i++) {
  28.         coeff[i]=(int *) malloc(n*sizeof(int));
  29.     }
  30.     for (i=0; i<n; i++) // <<
  31.         for (j=0; j<i; j++) { // <<
  32.             coeff[i][j]=0;
  33.         }
  34.     printf("tr1 %d", fact(5));
  35.     for (i=0; i<n; i++) // <<
  36.         for (j=0; j<i; j++) { // <<
  37.             coeff[i][j]=fact(i);
  38.             fa=(fact(j)*fact(i-j));
  39.             coeff[i][j]/=fa;
  40.         }
  41.     for (i=0; i<n; i++){ // <<
  42.         for (j=0; j<n; j++) // <<
  43.             printf ("%d ", coeff[i][j]);
  44.         printf("\n");
  45.     }
  46.     for (i=0; i<n; i++)
  47.         free (coeff[i]);
  48.     free(coeff);
  49.     return 0;
  50. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы