Symbol newtona
Ostatnio zmodyfikowano 2016-10-27 22:48
wojtii Temat założony przez niniejszego użytkownika |
Symbol newtona » 2016-10-27 21:09:47 Cześć, ostatnio troche programuje i zaciąłem się (10h nad tym siedze i nic nie przychodzi do głowy) na dwóch zadaniach. To drugie z nich: Dla zadanego n, wyprowadź na standardowe wyjście znany wzór: (a + b)^n Wiadomo chodzi o dwumian newtona itd. jednak nie potrafie tego dokonczyc, mam obecnie cos takiego: #include "stdafx.h" #include <iostream> #include <string> using namespace std; int silnia( int n ) { if( n == 0 ) return 1; else return n * silnia( n - 1 ); } int npok( int n, int k ) { return silnia( n ) /( silnia( k ) * silnia( n - k ) ); } void d_N( int n ) { int w; for( int k = 3; k <= n; k++ ) w = npok( n, k ); cout << w << " " << endl; }
int main() { int n, k; cout << "wczytaj n"; cin >> n; cout << "wczytaj k"; cin >> k; cout << "wynik: " << endl; d_N( n ); return 0; }
Jakies sugestie co dalej? |
|
kmlkamilek |
» 2016-10-27 21:19:43 Najpierw wstaw kod pomiędzy znaczniki: [cpp][/cpp] ;) |
|
wojtii Temat założony przez niniejszego użytkownika |
» 2016-10-27 21:21:07 zrobione dzieki :) |
|
michal11 |
» 2016-10-27 21:44:29 Nie rozumiem treści zadania, czyli masz dla np. n == 2 wypisać a^2 + 2ab + b^2 a dla n == 3 a^3 + 3a^2*b + 3ab^2 + b^3 itd. ? Czy masz coś faktycznie obliczać ? Po co w twoim programie wczytujesz k skoro nigdzie z tego nie korzystasz a w treści zadania masz tylko wczytywać n? |
|
wojtii Temat założony przez niniejszego użytkownika |
» 2016-10-27 21:46:05 dobrze rozumiesz, mam wyswietlic wzory skroconego mnozenia dla wybranej potęgi. Nic nie muszę obliczać. k miałem wczytane bo n po k obliczalem wczesniej. |
|
michal11 |
» 2016-10-27 22:16:21 Będziesz potrzebował trójkąta Pascala https://pl.wikipedia.org/wiki/Tr%C3%B3jk%C4%85t_Pascala. Ciekawy temat znajdziesz tutaj http://stackoverflow.com/questions/19898756/pascals-triangle-using-mainly-functions-in-c. Musisz też wymyślić jakiś mechanizm generowania potęg i sprytnego ich printowania, generalnie będzie to zabawa z forami jedna pętla na wszystkie składowe równania, bierzesz kolejną liczbę z trójkąta Pascala, dopisujesz a w odpowiedniej potędze, dopisujesz b w odpowiedniej potędze (będziesz potrzebował 2 int na trzymanie wartości potęg dla a i b, odpowiednio zainicjowane a=n i b=0) i przechodzisz do kolejnej składowej równania, w gruncie rzeczy najtrudniejsze będzie tu chyba wygenerowanie trójkąta. łap jakiś pseudo kod: std::vector < int > calculatePascalsTriangle( int level );
std::string getPowerString( char paramName, int power ) { if( power == 0 ) { return ""; } else if( power == 1 ) { return std::string( 1, paramName ); } else { return "(" + std::string( 1, paramName ) + "^" + std::to_string( power ) + ")"; } }
std::vector < int > pascalsValues = calculatePascalsTriangle( n );
int aPow = n; int bPow = 0;
for( int i = 0; i < pascalsValues.size(); ++i ) { const int pascalValue = pascalsValues[ i ]; std::cout <<( pascalValue == 1 ? "": std::to_string( pascalValue ) ) << getPowerString( 'a', aPow-- ) << getPowerString( 'b', bPow++ ) << " + "; }
w sumie wyszedł gotowy program brakuje tylko implementacji calculatePascalsTriangle której mi się nie chciało pisać. Edit. Jeżeli chcesz szybko sprawdzić czy działa to ja sobie napisałem taką testową funkcję std::vector < int > calculatePascalsTriangle( int level ) { return { 1, 3, 3, 1 }; }
pamiętaj tylko żeby ustawić n = 3; |
|
wojtii Temat założony przez niniejszego użytkownika |
» 2016-10-27 22:48:12 Dzięki wielkie ! działa mi już. temat do zamknięcia |
|
« 1 » |