Fibonacci Numbers and Lucas Numbers

Discussion in 'C++' started by Andrew Tatum, May 26, 2007.

  1. Andrew Tatum

    Andrew Tatum Guest

    I'm having some problems with the below equation.

    I have no problems when it comes to positives. Negatives create the
    problem..

    C
    2 1
    4

    However, this doesn't work:

    C
    -60 37
    -5

    Any help? I appreciate it greatly!!!


    #include <iostream>
    #include <cstdlib>
    #include <cmath>
    using namespace std;

    bool isFibonacciNumber (int);
    unsigned findFibonacciNumber (int);
    bool isLucasNumber (int);
    unsigned findLucasNumber (int);
    bool isInSequence (int, int, int);
    unsigned findInSequence (int, int, int);

    int main()
    {
    char choice;
    int n, i;
    int var1;
    int var2;

    cout <<
    "**********************************************************************"
    << endl;
    cout << "* CGS2425 C++ Project 3 - Functions and Control
    Structures *" << endl;
    cout << "* Fibonacci Numbers and Lucas
    Numbers *" << endl;
    cout <<
    "**********************************************************************"
    << endl;
    do{
    cout <<
    "**********************************************************************"
    << endl;
    cout << "* A - Find Fibonacci
    Number *" << endl;
    cout << "* B - Find Lucas
    Number *" << endl;
    cout << "* C - Find Term in a Similar
    Sequence *" << endl;
    cout << "* Q -
    Quit *" <<
    endl;
    cout <<
    "**********************************************************************"
    << endl;
    cout << " Enter menu selection : ";
    cin >> choice;
    cout << endl;


    if(choice == 'A'|| choice == 'a'){


    cout << "Enter integer : ";
    cin >> n;


    if(isFibonacciNumber (n)){
    unsigned termNum = findFibonacciNumber(n);
    cout << n << " is term " << termNum << " in the
    Fibonacci sequence." << endl;
    cout << endl;
    }
    else{
    cout << n << " is not a Fibonacci number." <<
    endl;
    cout << endl;
    }

    }


    else if(choice == 'B' || choice == 'b'){

    cout << "Enter integer : ";
    cin >> n;


    if(isLucasNumber (n)){
    unsigned termNum = findLucasNumber (n);
    cout << n << " is term " << termNum << " in the Lucas
    sequence." << endl;
    cout << endl;

    }
    else{
    cout << n << " is not a Lucas number." << endl;
    cout << endl;
    }
    }



    else if(choice == 'C' || choice == 'c'){

    int var1, var2;
    cout << "Enter the first 2 terms of the integer sequence,
    separated by a space : ";
    cin >> var1 >> var2;
    cout << endl;
    cout << "Enter integer : ";
    cin >> n;

    if(isInSequence (var1, var2, n)){
    unsigned termNum = findInSequence (var1,var2,n);
    cout << n << " is term " << termNum << " in the sequence
    with seeds " << var1 << ' ' << var2 << endl;
    cout << endl;
    }
    else{
    cout << endl << n << " is not a term in the sequence with
    seeds " << var1 << ' ' << var2 << endl;
    cout << endl;
    }
    }


    else if(choice != 'q' && choice != 'Q'){
    cout << " ERROR: Invalid choice. Please enter A, B, C, or Q."
    << endl;
    }


    }while(choice != 'Q' && choice != 'q');
    return(0);
    }


    bool isFibonacciNumber (int n){

    //bool goat = true;
    if(n == 0){
    return(true);
    }

    else if(n == 1){
    return(true);
    }

    else if(n>=2)
    {
    int i=1;
    cout << endl;
    int var1 = 0, var2 = 1;
    int fib=0;
    while(n >= fib){

    fib = var1 + var2;
    var1 = var2;
    var2 = fib;
    i++;
    if(n == fib){
    return(true);
    }
    }
    }
    return(false);

    }

    unsigned findFibonacciNumber(int n)
    {
    unsigned termNum;
    if(n == 0){
    termNum = 0;
    }

    else if(n == 1){
    termNum = 1;
    }

    else if(n>=2)
    {
    int i=1;
    cout << endl;
    int var1 = 0, var2 = 1;
    int fib;
    while(n >= fib){

    fib = var1 + var2;
    var1 = var2;
    var2 = fib;
    i++;

    }
    if(n == fib){
    termNum = i;
    }

    return termNum;

    }
    }

    bool isLucasNumber (int n){

    //bool horse = true;
    if(n == 2){
    return(true);
    }

    else if(n == 1){
    return(true);
    }

    else if(n>=2)
    {

    int i=1;
    cout << endl;
    int var1 = 2, var2 = 1;
    int lucas=0;
    while(n >= lucas){
    lucas = var1 + var2;
    var1 = var2;
    var2 = lucas;
    i++;
    if(n == lucas){
    return(true);
    }
    }

    }
    return(false);
    }

    unsigned findLucasNumber (int n){
    unsigned termNum;
    if(n == 2){
    termNum = 0;
    }

    else if(n == 1){
    termNum = 1;
    }

    else if(n>=2)
    {
    int i=1;
    cout << endl;
    int var1 = 2, var2 = 1;
    int lucas;
    while(n >= lucas){
    lucas = var1 + var2;
    var1 = var2;
    var2 = lucas;
    i++;

    }

    if(n == lucas){
    termNum = i;
    }
    return termNum;
    }
    }

    bool isInSequence (int var1, int var2, int n)
    {

    //bool cow = true;

    if(n == var1){
    return(true);
    }
    else if(n == var2){
    return(true);
    }


    else if(n>=2)
    {
    int i=1;
    cout << endl;
    int seq=0;
    while(n >= seq){
    seq = var1 + var2;
    var1 = var2;
    var2 = seq;
    i++;
    if(n == seq){
    return(true);
    }
    }
    }

    if(var1<0 && var2>0){
    if(.5*var1<= fabs(var2)){
    int i=1;
    int seq = 0;
    while(n>=seq){
    seq = var1 + var2;
    var1 = var2;
    var2 = seq;
    i++;
    if(n == seq){
    return(true);
    }
    }
    }
    }
    else if(var1>0 && var2<0){
    if(.5*var2<=fabs(var1)){
    int i=1;
    int seq = 0;
    while(n<=seq){
    seq = var1 + var2;
    var1 = var2;
    var2 = seq;
    i++;
    if(n == seq){
    return(true);
    }
    }
    }
    }

    return(false);
    }



    unsigned findInSequence (int var1, int var2, int n){

    unsigned termNum;
    if(n ==var1){
    termNum = 0;
    }
    else if(n == var2){
    termNum = 1;
    }

    if(n>=2)
    {
    int i=1;
    cout << endl;
    int seq=0;
    while(n >= seq){
    seq = var1 + var2;
    var1 = var2;
    var2 = seq;
    i++;
    }
    if(n == seq){
    termNum = i;
    }
    return termNum;
    }


    if(var1<0 && var2>0){
    if(.5*var1<= fabs(var2)){
    int i=1;
    int seq = 1;
    while(n>=seq){
    seq = var1 + var2;
    var1 = var2;
    var2 = seq;
    i++;
    if(n == seq){
    return(true);
    }
    }
    if(n == seq){
    termNum = i;
    }
    return termNum;
    }
    }
    else if(var1>0 && var2<0){
    if(.5*var2<=fabs(var1)){
    int i=1;
    int seq = 1;
    while(n<=seq){
    seq = var1 + var2;
    var1 = var2;
    var2 = seq;
    i++;
    if(n == seq){
    return(true);
    }
    }
    if(n == seq){
    termNum = i;
    }
    return termNum;
    }
    }


    }
     
    Andrew Tatum, May 26, 2007
    #1
    1. Advertising

  2. Andrew Tatum wrote:
    > I'm having some problems with the below equation.


    So instead of trying to work out on the problem yourself you copypaste
    the overly long code here and hope that someone will go through it for
    you?

    People will probably be more eager to help you if you show that you
    have done something yourself towards finding the answers to your
    questions. One thing which shows this is that you post a minimal
    (but working) piece of code which is the core of the problem and is
    the part you don't understand. Copypasting the entire lengthy code,
    with no attempt at isolating the problem, shows just laziness.
     
    Juha Nieminen, May 26, 2007
    #2
    1. Advertising

  3. Andrew Tatum

    Andrew Tatum Guest

    I'm sorry. I wasn't trying to show laziness...

    To be honest, I know more PHP/ASP than anything else.

    My friend is working on this C++ project and was looking for my help.
    I looked over it and don't see anything that sticks out in my mind.

    So, I figured I would see if someone here with a TON more knowledge
    and background in C++ could help me out.

    I'm hoping you respect my honesty...
     
    Andrew Tatum, May 26, 2007
    #3
  4. On Fri, 25 May 2007 16:16:38 -0700, Andrew Tatum wrote:
    > unsigned findLucasNumber (int n){
    > unsigned termNum;
    > if(n == 2){
    > termNum = 0;
    > }
    >
    > else if(n == 1){
    > termNum = 1;
    > }
    >
    > else if(n>=2)
    > {
    > int i=1;
    > cout << endl;
    > int var1 = 2, var2 = 1;
    > int lucas;


    Uninitialized variable.

    > while(n >= lucas){
    > lucas = var1 + var2;
    > var1 = var2;
    > var2 = lucas;
    > i++;
    >
    > }
    >
    > if(n == lucas){
    > termNum = i;
    > }
    > return termNum;
    > }
    > }


    --
    Markus Schoder
     
    Markus Schoder, May 26, 2007
    #4
  5. Andrew Tatum

    Andrew Tatum Guest

    I appreciate the help Markus! However, I believe the problem lies
    within the unsigned FindInSequence... particularly the last part.

    unsigned findInSequence (int var1, int var2, int n){

    unsigned termNum;
    if(n ==var1){
    termNum = 0;
    }
    else if(n == var2){
    termNum = 1;
    }

    if(n>=2)
    {
    int i=1;
    cout << endl;
    int seq=0;
    while(n >= seq){
    seq = var1 + var2;
    var1 = var2;
    var2 = seq;
    i++;
    }
    if(n == seq){
    termNum = i;
    }
    return termNum;
    }

    if(var1<0 && var2>0){
    if(.5*var1<= fabs(var2)){
    int i=1;
    int seq = 1;
    while(n>=seq){
    seq = var1 + var2;
    var1 = var2;
    var2 = seq;
    i++;
    if(n == seq){
    return(true);
    }
    }
    if(n == seq){
    termNum = i;
    }
    return termNum;
    }
    }
    else if(var1>0 && var2<0){
    if(.5*var2<=fabs(var1)){
    int i=1;
    int seq = 1;
    while(n<=seq){
    seq = var1 + var2;
    var1 = var2;
    var2 = seq;
    i++;
    if(n == seq){
    return(true);
    }
    }
    if(n == seq){
    termNum = i;
    }
    return termNum;
    }
    }
     
    Andrew Tatum, May 26, 2007
    #5
  6. Andrew Tatum

    Andrew Tatum Guest

    These are the errors I'm getting:

    1>------ Build started: Project: fibonacci, Configuration: Debug Win32
    ------
    1>Compiling...
    1>fib.cpp
    1>.\fib.cpp(260) : error C2668: 'fabs' : ambiguous call to overloaded
    function
    1> C:\Program Files\Microsoft Visual Studio 8\VC\include
    \math.h(557): could be 'long double fabs(long double)'
    1> C:\Program Files\Microsoft Visual Studio 8\VC\include
    \math.h(509): or 'float fabs(float)'
    1> C:\Program Files\Microsoft Visual Studio 8\VC\include
    \math.h(119): or 'double fabs(double)'
    1> while trying to match the argument list '(int)'
    1>.\fib.cpp(276) : error C2668: 'fabs' : ambiguous call to overloaded
    function
    1> C:\Program Files\Microsoft Visual Studio 8\VC\include
    \math.h(557): could be 'long double fabs(long double)'
    1> C:\Program Files\Microsoft Visual Studio 8\VC\include
    \math.h(509): or 'float fabs(float)'
    1> C:\Program Files\Microsoft Visual Studio 8\VC\include
    \math.h(119): or 'double fabs(double)'
    1> while trying to match the argument list '(int)'
    1>.\fib.cpp(324) : error C2668: 'fabs' : ambiguous call to overloaded
    function
    1> C:\Program Files\Microsoft Visual Studio 8\VC\include
    \math.h(557): could be 'long double fabs(long double)'
    1> C:\Program Files\Microsoft Visual Studio 8\VC\include
    \math.h(509): or 'float fabs(float)'
    1> C:\Program Files\Microsoft Visual Studio 8\VC\include
    \math.h(119): or 'double fabs(double)'
    1> while trying to match the argument list '(int)'
    1>.\fib.cpp(343) : error C2668: 'fabs' : ambiguous call to overloaded
    function
    1> C:\Program Files\Microsoft Visual Studio 8\VC\include
    \math.h(557): could be 'long double fabs(long double)'
    1> C:\Program Files\Microsoft Visual Studio 8\VC\include
    \math.h(509): or 'float fabs(float)'
    1> C:\Program Files\Microsoft Visual Studio 8\VC\include
    \math.h(119): or 'double fabs(double)'
    1> while trying to match the argument list '(int)'
    1>Build log was saved at "file://c:\Users\Andrew\Documents\Visual
    Studio 2005\Projects\fibonacci\fibonacci\Debug\BuildLog.htm"
    1>fibonacci - 4 error(s), 0 warning(s)
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped
    ==========
     
    Andrew Tatum, May 26, 2007
    #6
  7. Andrew Tatum

    Howard Guest

    "Andrew Tatum" <> wrote in message
    news:...
    > These are the errors I'm getting:
    >
    > 1>------ Build started: Project: fibonacci, Configuration: Debug Win32
    > ------
    > 1>Compiling...
    > 1>fib.cpp
    > 1>.\fib.cpp(260) : error C2668: 'fabs' : ambiguous call to overloaded
    > function
    > 1> C:\Program Files\Microsoft Visual Studio 8\VC\include
    > \math.h(557): could be 'long double fabs(long double)'
    > 1> C:\Program Files\Microsoft Visual Studio 8\VC\include
    > \math.h(509): or 'float fabs(float)'
    > 1> C:\Program Files\Microsoft Visual Studio 8\VC\include
    > \math.h(119): or 'double fabs(double)'
    > 1> while trying to match the argument list '(int)'


    Ok, so what do those tell you?

    The compiler doesn't know which version of fabs to use, because you're
    passing an int, not a float. The fabs function expects a floating-point
    value (thus, the preceding 'f' in the name). Either use abs(), or pass a
    floating-point value (such as by using "1.0 * var1"), or cast the parameter
    to a float (or double).

    -Howard
     
    Howard, May 27, 2007
    #7
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Fibonacci numbers

    , Oct 10, 2003, in forum: C++
    Replies:
    28
    Views:
    1,397
    yousafzai
    Jun 5, 2011
  2. Alex Vinokur
    Replies:
    0
    Views:
    474
    Alex Vinokur
    Oct 29, 2003
  3. Alex Vinokur
    Replies:
    0
    Views:
    447
    Alex Vinokur
    Jul 26, 2004
  4. CplusplusNewbie
    Replies:
    5
    Views:
    571
    Frank Bergemann
    Jun 27, 2009
  5. RJB
    Replies:
    23
    Views:
    1,144
    Raymond Hettinger
    May 25, 2011
Loading...

Share This Page