Треугольник Паскаля с использованием функции

ну, я понял, как построить треугольник Паскаля, и приведенный ниже код безупречен, но ... в этом коде я заставляю 1 отображаться в первой строке, создавая новый цикл for специально для него ... есть ли способ сгенерировать треугольник Паскаля без использования эксклюзивного цикла for для первого появления 1 ... любая помощь очень ценится :)

//pascal triangle with ncr function
        #include <stdio.h>
        #include <conio.h>
        int ncr(int i,int j);
        int main()
        {
            int i,j,v,n,f,s;
            printf("Enter the number of rows required\n");
            scanf("%d",&n);
            f=n;
     //this is what i am exclusively using for printing 1 in 1st row
            for(;f>0;f--)
            {
                printf(" ");
            }
            printf("1\n");
     //is there a way to generate the above 1 using only the below for loop
            for(i=1;i<=n;i++)
            {
                for(s=n-i;s>0;s--)
                {
                    printf(" ");
                }
                for(j=0;j<=i;j++)
                {
                    v=ncr(i,j);
                    printf("%d ",v);
                }
                printf("\n");
            }
        }
        int ncr(int i,int j)
        {
            int k;
            float ans=1;
            for(;j>=1;j--)
                {
                    ans=((ans*i)/j);
                    i--;
                }
                k=ans;
                return(k);
        }

person Cherubim    schedule 24.10.2015    source источник
comment
Почему похоже, что ваша реализация ncr внутри метода main?   -  person Arc676    schedule 24.10.2015
comment
ах! я понял ... ты прав, я реализовал это внутри основной функции ... спасибо @ Arc676   -  person Cherubim    schedule 24.10.2015
comment
и int ncr(int i,int j); { удалить ;   -  person BLUEPIXY    schedule 24.10.2015
comment
я проверил ... я понял, как это построить идеально, но я использую эксклюзивный цикл для генерации 1 в первой строке ... есть ли способ изменить его   -  person Cherubim    schedule 25.10.2015


Ответы (1)


Если вы посмотрите внимательно, то заметите, что функция ncr определена внутри метода main. Перенести реализацию ncr за пределы main.

Также, как заметил @BLUEPIXY, ваша реализация ncr имеет избыток ;:

int ncr(int i,int j); //<<right here
{
//...

EDIT Решение второй проблемы (см. Треугольник Паскаля в Википедии)

«Первая» строка треугольника на самом деле является нулевой строкой. Ваш внешний цикл начинается с i = 1, и поэтому «первая» строка содержит 1C0 и 1C1. «Первая» или нулевая строка должна фактически содержать только 0C0. Новый цикл:

//notice how the i here has changed to 0
for(i=0;i<=n;i++)
{
    for(s=n-i;s>0;s--)
    {
        printf(" ");
    }
    for(j=0;j<=i;j++)
    {
        v=ncr(i,j);
        printf("%d ",v);
    }
    printf("\n");
}
person Arc676    schedule 24.10.2015
comment
и, как вы сказали ранее, следует ли определять функцию ncr перед основной функцией? - person Cherubim; 24.10.2015
comment
Это один из вариантов. Однако, как заметил @Mukit Chowdhury, у вас уже есть прототип над вашим main методом, поэтому его можно разместить после. @Mukit, почему ты не отправил ответ, если увидел ошибку? - person Arc676; 24.10.2015
comment
я внес изменения ... и ошибки не отображаются, но нет вывода ... есть ли логическая ошибка? - person Cherubim; 24.10.2015
comment
На самом деле, просто скопировав ваш код (и удалив conio.h, потому что я нахожусь на Mac), я получаю бесконечные 1 распечатанные - person Arc676; 24.10.2015
comment
понял человек! мне нужно упомянуть j ++ и j = 0, а не 1 ... в 8-й строке основной функции, если нет, он отправится в путешествие в бесконечность и дальше :) ... но это сделает печать 2 1 в первой строке - person Cherubim; 24.10.2015
comment
@ ch3rub7 Я заметил, что вы отклонили мой ответ. Что-то не работает? - person Arc676; 28.10.2015
comment
Нет ... функция решена, но здесь ... Я не могу напечатать 1 в первой строке, используя цикл, я создаю для него еще один цикл ... Итак, я хотел узнать программу который строит всю программу без того, чтобы я вручную ставил 1 сверху ... Разве такое изменение вопроса не принято? - person Cherubim; 28.10.2015
comment
Точно сказать не могу. Я посмотрю на это - person Arc676; 28.10.2015
comment
Я нашел решение. Кроме того, поскольку факториалы становятся большими очень быстро, используйте double, если вам нужно поддерживать большие значения, потому что он может содержать большие числа. - person Arc676; 28.10.2015