Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Symbol newtona

Ostatnio zmodyfikowano 2016-10-27 22:48
Autor Wiadomość
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:
C/C++
#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?
P-152988
kmlkamilek
» 2016-10-27 21:19:43
Najpierw wstaw kod pomiędzy znaczniki:
[cpp][/cpp]
 ;)
P-152990
wojtii
Temat założony przez niniejszego użytkownika
» 2016-10-27 21:21:07
zrobione dzieki :)
P-152991
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?
P-152993
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.
P-152994
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:
C/C++
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ę
C/C++
std::vector < int > calculatePascalsTriangle( int level )
{
    return { 1, 3, 3, 1 };
}

pamiętaj tylko żeby ustawić n = 3;
P-152997
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
P-153002
« 1 »
  Strona 1 z 1