C++ Funkcja rekurencyjna dla obliczania N-Silni i N-tego wyrazu ciagu fibonaciego
Ostatnio zmodyfikowano 2021-03-25 19:33
Verathus Temat założony przez niniejszego użytkownika |
C++ Funkcja rekurencyjna dla obliczania N-Silni i N-tego wyrazu ciagu fibonaciego » 2021-03-25 19:11:04 Cześć. Chciałem napisać prosty program który umożliwi obliczanie pól kilku figur, oraz za pomocą funkcji rekurencyjnej n-ty wyraz ciagu fibonaciego i silnie podanej liczby. Z polami wiekszych problemow nie miałem. Rozumiem juz koncept funkcji rekurencyjnej, ale mam zagwozdke z pisaniem kodu. Udało mi się zmodyfikować znaleziony kod by wyświetlał cały ciąg do podanego wyrazu a zalezymi by podawał tylko wybrany wyraz ciagu. A z silnią to już za bardzo sie zagmatwałem bo nie wiem jak to zrobić. Każda rada, wskazówka mile widziana. Korzystam z CodeBlocksa.Mój kod: #include <iostream> #include <cmath> #include <iomanip>
using namespace std; int main() { cout << "Wybierz cel obliczen: " << endl; cout << "---------------- " << endl; cout << "1. Pole Kola" << endl; cout << "2. Pole Trapezu" << endl; cout << "3. Pole Trojkata" << endl; cout << "4. Ciag Fibbonaciego" << endl; cout << "5. N-Silnia" << endl; int wybor; cin >> wybor; switch( wybor ) { case 1: { double r, p; cout << "Podaj promien: r" << endl; cin >> r; cout << "Pole kola:" << endl; cout << setprecision( 2 ) << fixed; p = M_PI * r * r; cout << p << endl; break; return 0; } case 2: { double a, b, h, p; cout << "Podaj dlugosc podstawy a:" << endl; cin >> a; cout << "Podaj dlugosc podstawy b:" << endl; cin >> b; cout << "Podaj wysokosc h:" << endl; cin >> h; cout << setprecision( 2 ) << fixed; p =(( a + b ) * h ) / 2; cout << "Pole trapezu:" << endl; cout << p << endl; break; return 0; } case 3: { double a, b, h, p; cout << "Podaj dlugosc podstawy a:" << endl; cin >> a; cout << "Podaj wysokosc h:" << endl; cin >> h; cout << setprecision( 2 ) << fixed; p = 0.5 * a * h; cout << "Pole trojkata:" << endl; cout << p << endl; break; return 0; } case 4: { int n, f1 = 0, f2 = 1, liczba = 0; cout << "Podaj liczbe wyrazow ciagu do wyswietlenia: "; cin >> n; cout << "Ciag Fibbonaciego: "; for( int i = 1; i <= n; ++i ) { if( i == 1 ) { cout << f1 << ", "; continue; } if( i == 2 ) { cout << f2 << ", "; continue; } liczba = f1 + f2; f1 = f2; f2 = liczba; cout << liczba << ", "; } return 0; } case 5: { int n, wynik, silnia( int n ); cout << "Podaj calkowita liczbe dodatnia: "; cin >> n; if( n < 0 ) cout << "BLAD. Nie mozna obliczyc silni dla liczby ujemnej!"; if( n <= 1 ) return 1; return n * silnia( n - 1 ); wynik = silnia( n ); cout << "Factorial of " << n << " = " << wynik; return 0; if( n > 1 ) { return n * silnia( n - 1 ); } else { return 1; } return 0; } } }
|
|
DejaVu |
» 2021-03-25 19:25:32 Niestety tutaj nie ma w czym pomóc. Zrobiłeś zlepek losowych instrukcji z Internetu. W Twoim kodzie istnieje tylko jedna funkcja i jest nią main. Fibonaci nie jest zaimplementowany rekurencyjnie. Materiały: Poziom 2Rekurencja <- tu masz rozwiązania. |
|
Verathus Temat założony przez niniejszego użytkownika |
» 2021-03-25 19:29:30 Ok, dzięki. To jest moje pierwsze spotkanie z C++ i mam wrażenie ze odrazu zostałęm wrzucony na głeboką wode. |
|
pekfos |
» 2021-03-25 19:33:15 Tego kodu nawet nie da się skompilować. Nie masz też w nim żadnej funkcji rekurencyjnej. Udało mi się zmodyfikować znaleziony kod by wyświetlał cały ciąg do podanego wyrazu a zalezymi by podawał tylko wybrany wyraz ciagu. Lepiej się z tym kodem nie pokazuj u prowadzącego (jeśli to na studia), bo z miejsca dostaniesz dwóję! Miałeś napisać obliczanie wyrazu ciągu Fibonacciego funkcją rekurencyjną, czyli najgorsze możliwe podejście do problemu, a Ty znalazłeś w internecie coś co nawet ma sens. Tego się nie da wybronić. |
|
« 1 » |