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

Problem z pętlą while. Wypisywanie ciągu

Ostatnio zmodyfikowano 2015-11-12 23:49
Autor Wiadomość
kiereso
Temat założony przez niniejszego użytkownika
Problem z pętlą while. Wypisywanie ciągu
» 2015-11-03 10:53:16
Witam, mam problem z takim oto zadaniem.
Wypisz n-ty element ciągu Fn gdzie:
F0 = 0
F1 = 1
Fi+2 = Fi+i+2 dla i>=0

Mój kod:

C/C++
#include <stdio.h>

int main()
{
    int i = 0;
    int f = 0;
    int n;
    scanf( "%d", & n );
    while( i < n )
    {
        i++;
        f = f + i + 2;
       
    }
    printf( "%d\n", f );
    return 0;
}
Problem polega na tym, że nie wiem gdzie popełniam błąd. Proszę o pomoc :)
P-139537
carlosmay
» 2015-11-03 14:01:35
Problem polega na tym, że nie wiem gdzie popełniam błąd.
 Konkretnie. Jaki błąd?
Czy źle wylicza?
Czy program nie startuje?
Czy coś innego?
P-139543
kiereso
Temat założony przez niniejszego użytkownika
» 2015-11-03 14:11:23
Program wylicza nie poprawny wynik.
P-139544
carlosmay
» 2015-11-03 14:21:38
C/C++
f = f + i + 2;
++i;
 a teraz?
P-139546
kiereso
Temat założony przez niniejszego użytkownika
» 2015-11-03 14:31:50
Nadal nic. W zadaniu gdy wpiszę 2 ma wyjść liczba 2, jak 3 to liczba 4, jak 4 to 6 itp.
P-139547
Rashmistrz
» 2015-11-03 16:36:34
W trakcie edycji...
Machnąłem się trochę za daleko. xD


f = f + i + 2;

U ciebie błąd polegał na tym,
że niepoprawnie zapisałeś wzór:
g(n) = g(n-1) + n + 2

A oryginał wygląda tak:
f(n+2) = f(n) + n + 2

Odpowiednio przekształcając:
f(n+2) = f(n) + n + 2 // pod n podstawiamy n - 2
f(n-2+2) = f(n-2) + n - 2 + 2 // oczyszczamy

Uzyskujemy:
f(n) = f(n-2) + n

Będziesz musiał przechowywać dwie ostatnie wartości,
jeśli chcesz liczyć krokowo wartości dla kolejnych argumentów.

Oczywiście jeśli będziesz chciał uzyskać od razu konkretną
wartość f(n) to musisz rozwiązać rekurencję tej funkcji...

______________________________________________

WolframAlpha mi wypluło:
f(n) = 1/8( 2n( n + 2 ) - (-1)n + 1)

Wykorzystując rozwiązanie
tego rekurencyjnego wzoru,
zapisałem coś takiego:
C/C++
#include <stdio.h>

int main()
{
    int n, f;
    scanf( "%d", & n );
   
    f = 2 * n;
    f *= n + 2;
    n % 2 ? f += 2: f;
    f /= 8;
   
    printf( "%d\n", f );
    return 0;
}

P-139551
michal11
» 2015-11-03 22:50:18
Fi+2 = Fi+i+2
Mi to wygląda na wzór rekurencyjny, napisz funkcję.
P-139608
kiereso
Temat założony przez niniejszego użytkownika
» 2015-11-04 17:42:15
Nadal nie chce działać.
P-139638
« 1 » 2
  Strona 1 z 2 Następna strona