*** Триъгълник на Паскал

Да се напише програма, която изчислява и извежда на екрана стойността на дадена позиция в триъгълника на Паскал по въведени от потребителя ред и позиция в него. Да се провери дали входните данни са валидни преди да се продължи с изчисляването на позицията.

PascalTriangleAnimated2

Всяко число от вътрешността на триъгълника е сума от двете числа, непосредствено разположени над него.

Бонусче: Да се състави двумерен масив с всички стойности на триъгълника до въведения ред (включително) и да се изведе на екрана.

Не се притеснявайте да използвате функции :)

Публикувано в 10а, 10в, 11а, 11в, 2012-2013, C++, Паскал с етикети , , . Постоянна връзка.

2 Responses to *** Триъгълник на Паскал

  1. dreanor каза:
    #include <iostream>
    
    using namespace std;
    
    int stoinost(int red, int poziciq)
    {
    	if(poziciq==1)
    		return 1;
    	else if(poziciq==red)
    		return 1;
    	else
    		return stoinost(red-1, poziciq-1) + stoinost(red-1, poziciq);
    }
    int main()
    {
            int red, poziciq;
            cout<<"Wuwedete red i poziciq po nego: ";
            cin>>red>>poziciq;
            if(red<poziciq)
            {
                    cout<<"Newaliden whod.  Poziciqta trqbwa da e rawna ili po-malka ot reda.";
                    return 0;
            }
            cout<<"Stoinostta na red "<<red<<" i poziciq " <<poziciq<<" e "<<stoinost(red, poziciq)<<endl;
            return 0;
    }
    
    

    Решение използващо рекурсия. Фактически това решение е споменато в условието: „Всяко число от вътрешността на триъгълника е сума от двете числа, непосредствено разположени над него.“ или изразено математически с формула

    C(n, k) = C(n-1, k-1) + C(n-1, k)
    с начални стойности
    C(n, 0) = 1 за всички цели числа n по-големи или равни на 0
    C(0, k) = 0 за всички цели числа k по-големи от 0
    т.е. комбинация на k от n елемента.

    Възможно е да се реши и с цикъл for използвайки нерекурсивна формула.

    • Данаил каза:

      Ха, супер решение, и колко просто! Рекурсивните често са такива попадения. Интересна задача, стига човек да може да отдели времето да помисли по нея. Като гледам обаче задачата не получи вниманието, което заслужаваше – може би заради изпитите по английски или заради това, че условието беше малко по-сложно (въпреки страхотната анимация, която си добавил :-). Нищо, другия път…

Вашият коментар