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

C++ Funkcja rekurencyjna dla obliczania N-Silni i N-tego wyrazu ciagu fibonaciego

Ostatnio zmodyfikowano 2021-03-25 19:33
Autor Wiadomość
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:
C/C++
#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; }
       
       
       
       
       
    } }
P-178349
» 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:
» Kurs C++Poziom 2 dział kursu
» Kurs C++» Poziom 5Rekurencja lekcja <- tu masz rozwiązania.
P-178350
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.
P-178351
» 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ć.
P-178352
« 1 »
  Strona 1 z 1