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