Obliczanie Fibbonacciego

0

Witam. Mam taki kod w C++ i potrzebuję przerobić go na C#. Wwala mi błąd przy string &a, string &b, String&c

#include <iostream>
#include <string>

using namespace std;

void Dodaj(string &a, string &b, string &c)
{
  int ia,ib,p,s;

  ia = a.length()-1; ib = b.length()-1;
  c = ""; p = 0;
  do
  {
    s = 0;
    if(ia >= 0) s  = a[ia--] - 48;
    if(ib >= 0) s += b[ib--] - 48;
    s += p;
    if(s > 9)
    {
      p = 1; s -= 10;
    }
    else p = 0;
    c = (char)(s + 48) + c;
  } while((ia >= 0) || (ib >= 0) || (p != 0));
}

int main()
{
  string f,f0,f1;
  int n,i;

  cin >> n;
  f0 = "0"; f1 = "1"; 
  for(i = 0; i <= n; i++)
  {
    if(i <= 1) f = (char)(i + 48);
    else
    {
      Dodaj(f0,f1,f); f0 = f1; f1 = f;
    }
  }
  cout << f << endl;
  return 0;
}  
0

No to usuń te ampersandy, w C# ich się nie używa w ten sposób.

0

No i ma takie coś, a wywala mi, że nie ma odwołania do obiektu w Dodaj(f0, f1, f). Jak to zrobić, żeby działało? W sumie sam nie rozumiem dlaczego w C++ taki zapis działał...

 void Dodaj(string a, string b, string c)
{
  int ia,ib,p,s;

  ia = a.Length-1; ib = b.Length-1;
  c = ""; p = 0;
  do
  {
    s = 0;
    if(ia >= 0) s  = a[ia--] - 48;
    if(ib >= 0) s += b[ib--] - 48;
    s += p;
    if(s > 9)
    {
      p = 1; s -= 10;
    }
    else p = 0;
    c = (char)(s + 48) + c;
  } while((ia >= 0) || (ib >= 0) || (p != 0));
}


        private static double Metoda3(int n)
        {
            string f="", f0, f1;
            f0 = "0"; f1 = "1";
            for (int i = 0; i <= n; i++)
            {
                if (i <= 1)
                {
                    f = (i + 48).ToString();
                }
                else
                {
                    Dodaj(f0, f1, f); f0 = f1; f1 = f;
                }
            }
            double wynik = Convert.ToDouble(f);
            return wynik;
        }
0

Radziłbym najpierw poczytać o składni, a później zacząć pisać. Ciąg fibonacciego da się streścić do http://pl.wikisource.org/wiki/Ci%C4%85g_Fibonacciego/kod#C.23

0

Pewnie wyświetla się taki błąd:
"Error 2 An object reference is required for the non-static field, method, or property..."

To oznacza, że w statycznej metodzie musisz przekazać referencje do klasy, w której znajduje się używana metoda. Poniżej masz przykład przekazania referencji:

public class Form1 : Form
{
...
public string getMe()
{
      return "Zmienna przekazana";
}

private static string getTestString1(Form1 f)
{            
      return f.getMe();
}

//wywołanie funkcji w buttonie
private void button5_Click(object sender, EventArgs e)
{
            button5.Text=getTestString1(this);
}
...
}
1

Dodaj() powinno też być static.
poza tym program wygląda jakby… ktoś go przetłumaczył z C++ /no offence ;-)/.

void Dodaj(string a, string b, string c)

w funkcji modyfikujesz c, ale jest ono teraz przekazywane przez wartość, więc nic to nie da... przekaż przez referencję:

static void Dodaj(string a, string b, out string c) // out albo ref

ale w zasadzie to string powinien być zwracany, a nie modyfikowany:

static string Dodaj(string a, string b) {
  string c = " ala ma kota";
  return c;
}

Ale proponuję przepisać to na nowo. wersję w C++ również.

1 użytkowników online, w tym zalogowanych: 0, gości: 1