2013-10-13 111 views
1

我想「翻譯」我的舊C++代碼爲C#代碼,因爲標題會建議。問題是,我在C#中是新的,並不是所有的東西都是在C++中很好的解決了這些問題,但是在c#中只是不可以。我會告訴你我的舊C++代碼已經在工作,而c#代碼中的「應該」正在工作。如果我使用for循環,結果總是爲0(零)。當我使用(arrayname).Sum()。我嘗試了一些其他的解決方案在網上找到,但沒有一個工作。它的任何一個顯示(零)作爲結果或引發exception.Help! 這裏是我的C++代碼以及c#,並不是所有的函數都是可用的,因爲我一直只測試第一個。如果它不適用於第一個,那麼不會在其他工作。我想「翻譯」我的舊C++代碼到C#代碼

這裏是我的C#代碼:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

class BrojniNiz { 
    decimal b; 
    public static int i; 
    public decimal[] broj = new decimal[i]; 
    public Decimal Unos_brojeva() { 
    Console.WriteLine("Unesi broj clanova niza: "); 
    decimal[] broj = 
      new decimal[Convert.ToInt32(Console.ReadLine())]; 

    // odredjuje se tip niza,tj. tip promenljive koje ce biti primane u niz 
    // (ovo se odnosi na " broj "). 

    Console.WriteLine("Unesi brojeve: "); 

    for (i = 0; i < broj.Length; i++) { 
     // " i " je broj clanova niza(njegova " duzina "),tj. konacan indeks. 
     broj[i] = (Convert.ToDecimal (Console.ReadLine())); 
    } 

    Console.WriteLine("Unos brojeva je zavrsen"); 
    return 0; 
    } 

    Decimal Aritmeticka_sredina() { 
    // for (i = 0; i < broj.Length; i++) 
    // b = broj[i]; 
    // b = b + broj[i]; 
    // b += broj[i]; 

    b = broj.Sum(); 

    // i++; 
    //Console.WriteLine(i); 

    Console.WriteLine(b); 

    //Console.WriteLine(broj.Length); 
    return 0; 
    } 

    public int Meni() { 
    Console.WriteLine("Unesi broj operacije po zelji: \n "); 
    int a =Convert.ToInt32(Console.ReadLine()); 
    switch (a) { 
     case 1: 
     Aritmeticka_sredina(); 
     break; 
     case 2: 
     // Harmonijska_sredina(); 
     break; 
     case 3: 
     // Geometrijska_sredina(); 
     break; 
     case 4: 
     // Kvadratna_sredina(); 
     break; 
     default: 
     Console.WriteLine("\nUneli ste pogresne parametre..._\a\a\a\n"); 
     break; 
    } 
    return 0; 
    } 

    static int Main() { 
    BrojniNiz brojka; 
    brojka=new BrojniNiz(); 
    brojka.Unos_brojeva(); 
    brojka.Meni(); 
    return 0; 
    } 
} 

這裏我的C++代碼:

#include <cstdlib> 
#include <iostream> 
#include <cmath> 
#include <string> 
#include <windows.h> 
#include <MMSystem.h> 
using namespace std; 

class Racniz { 
    public: 
    Racniz(); 
    ~Racniz(); 
    string lozinka; 
    float unos_brojeva(); 
    int Meni(); 
    float Aritmeticka_sredina(); 
    float Harmonijska_sredina(); 
    double Geometrijska_sredina(); 
    float Kvadratna_sredina(); 
    void Pauza(); 
    private: 
    int a; 
    float unos [30]; 
    int n; 
    float A; 
    float sumaA; 
    float H; 
    float sumaH; 
    double sumaG; 
    double stepen; 
    double G; 
    double n1; 
    float sumaK; 
    float medjusuma; 
    float K; 
    }; 

    int main() { 
    Racniz racunanje; 
    racunanje.unos_brojeva(); 
    racunanje.Meni(); 
    racunanje.Pauza(); 
    } 

    Racniz::Racniz() { 
    sndPlaySound("Crysis 2 menu music-theme.wav", SND_ASYNC); 
    cout<<"Uneti sifru za rad u programu..._\n"<<endl; 
    cin>>lozinka; 
    if(lozinka=="struwellpeter") { 
     cout<<"\nSada ce se startovati program za statisticke proracune:\n"<<endl; 
    } else { 
     cout<<"\nPogresili ste lozinku,program ce sada izaci..._\a\a\a\n"<<endl; 
     exit (0); 
    } 
    } 

    Racniz::~Racniz() { 
    cout<<"Kraj izvrsenja proracuna..._\n"<<endl; 
    } 

    float Racniz::unos_brojeva() { 
    cout<<"Unesi 30 brojeva:\n"<<endl; 
    for(n=0;n<30;n++) 
    cin>>unos[n]; 
    cout<<"\n"<<endl; 
    return 0; 
    } 

    int Racniz::Meni() { 
    cout<<"Unesi broj operacije po zelji: \n "<<endl; 
    cout<<"------------------------------\n"<<endl; 
    cout<<"1.Aritmeticka sredina: \n "<<endl; 
    cout<<"2.Harmonijska sredina: \n "<<endl; 
    cout<<"3.Geometrijska sredina: \n "<<endl; 
    cout<<"4.Kvadratna sredina: \n "<<endl; 
    cin>>a; 
    switch(a) { 
     case 1: 
     Aritmeticka_sredina(); 
     break; 
     case 2: 
     Harmonijska_sredina(); 
     break; 
     case 3: 
     Geometrijska_sredina(); 
     break; 
     case 4: 
     Kvadratna_sredina(); 
     break; 
     default: 
     cout<<"\nUneli ste pogresne parametre..._\a\a\a\n"<<endl; 
     break; 
    } 
    return 0; 
    } 

    float Racniz::Aritmeticka_sredina(){ 
    float A=0; 
    float sumaA=0; 
    for(n=0;n<30;n++) 
     sumaA=sumaA + unos[n]; 
    A=sumaA/n; 
    cout<<"-------------------------"<<endl; 
    cout<<"SumaA je = "<<sumaA<<"\n"<<endl; 
    cout<<"-------------------------"<<endl; 
    cout<<"Aritmeticka sredina je = "<<A<<"\n"<<endl; 
    return 0;   
    } 

    float Racniz::Harmonijska_sredina() { 
    float H=0; 
    float sumaH=0; 
    for(n=0;n<30;n++) 
    sumaH=sumaH + 1/unos[n]; 
    H=n/sumaH; 
    cout<<"-------------------------"<<endl; 
    cout<<"SumaH je = "<<sumaH<<"\n"<<endl; 
    cout<<"-------------------------"<<endl; 
    cout<<"Harmonijska sredina je = "<<H<<"\n"<<endl; 
    return 0; 
    } 

    double Racniz::Geometrijska_sredina() { 
    //Interval od ~ -19.2 do ~ 19.2 ,da ne bi doslo do "overflow-a". 
    double sumaG=unos[0]; 
    double stepen=0; 
    double G=0; 
    for(n=1;n<30;n++) 
     sumaG=sumaG * unos[n]; 
    double n1=n; 
    stepen=stepen+1/n1; 
    G=pow(sumaG,stepen); 
    cout<<"-------------------------"<<endl; 
    cout<<"SumaG je = "<<sumaG<<"\n"<<endl; 
    cout<<"-------------------------"<<endl; 
    cout<<"Geometrijska sredina je = "<<G<<"\n"<<endl; 
    return 0; 
    } 

    float Racniz::Kvadratna_sredina(){ 
    float sumaK=0; 
    float medjusuma=0; 
    float K=0; 
    for(n=0;n<30;n++) 
     sumaK=sumaK + pow(unos[n],2); 
    medjusuma=medjusuma + sumaK/n; 
    K=K + sqrt(medjusuma); 
    cout<<"-------------------------"<<endl; 
    cout<<"SumaK je = "<<sumaK<<"\n"<<endl; 
    cout<<"-------------------------"<<endl; 
    cout<<"Medjusuma je = "<<medjusuma<<"\n"<<endl; 
    cout<<"-------------------------"<<endl; 
    cout<<"Kvadratna sredina je = "<<K<<"\n"<<endl; 
    return 0; 
    } 

    void Racniz::Pauza(){ 
    system("pause"); 
    } 

感謝的人從這個論壇help.I成功地轉換過來的C++代碼轉換爲C#。在這裏,它是:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 



    class BrojniNiz 
    { 


     public static int i=0; 
     public double[] broj = new double[i]; 



     public double Unos_brojeva() 
     { 

     Console.WriteLine("Unesi broj clanova niza: "); 
     broj = new double[Convert.ToInt32(Console.ReadLine())]; // odredjuje se tip niza,tj. tip promenljive koje ce biti primane u niz(ovo se odnosi na " broj "). 
     Console.WriteLine("Unesi brojeve: "); 
      for (i = 0; i < broj.Length; i++) // " i " je broj clanova niza(njegova " duzina "),tj. konacan indeks. 
      { 
       broj[i] = (Convert.ToDouble(Console.ReadLine())); 

      } 

      Console.WriteLine("Unos brojeva je zavrsen"); 
      return 0; 
      } 


    double Aritmeticka_sredina() 
     { 

      double b = 0; 
      for (i = 0; i < broj.Length; i++) 
      b = (b + broj[i]); 
      Console.WriteLine("Rezultat je sledeci: " + (b/i)); 
      return 0; 


     } 

     double Harmonijska_sredina() 
     { 

      double H = 0; 
      double sumaH = 0; 
      for(i=0;i<broj.Length;i++) 
      sumaH=sumaH + 1/broj[i]; 
      H=i/sumaH; 
      Console.WriteLine("Rezultat je sledeci: " + H); 
      return 0; 


     } 
     double Geometrijska_sredina() 
     { 

      double sumaG = broj[0]; 
      double stepen = 0; 
      double G = 0; 
      for (i = 1; i < broj.Length; i++) 
      sumaG = sumaG * broj[i]; 
      double n1 = i; 
      stepen = stepen + 1/n1; 
      G = Math.Pow(sumaG, stepen); 
      Console.WriteLine("Rezultat je sledeci: " + G); 
      return 0; 

     } 

     double Kvadratna_sredina() 
     { 

     double sumaK = 0; 
     double medjusuma = 0; 
     double K = 0; 
     for(i=0;i<broj.Length;i++) 
     sumaK = sumaK + Math.Pow(broj[i], 2); 
     medjusuma=medjusuma + sumaK/i; 
     K=K + Math.Sqrt(medjusuma); 
     Console.WriteLine("Rezultat je sledeci: " + K); 
     return 0; 

     } 

    public int Meni() 
     { 

     Console.WriteLine("Unesi broj operacije po zelji: \n "); 
     int a =Convert.ToInt32(Console.ReadLine()); 

     switch (a) 
     { 

      case 1: 
       Aritmeticka_sredina(); 
       break; 
      case 2: 
        Harmonijska_sredina(); 
       break; 
      case 3: 
        Geometrijska_sredina(); 
       break; 
      case 4: 
        Kvadratna_sredina(); 
       break; 
      default: 
       Console.WriteLine("\nUneli ste pogresne parametre..._\a\a\a\n"); 
       break; 

     } 
     return 0; 
    } 






     static int Main() 
     { 

      BrojniNiz brojka; 
      brojka=new BrojniNiz(); 
      brojka.Unos_brojeva(); 
      brojka.Meni(); 
      return 0; 
      } 

    } 
+0

?他們主要用於財務計算。更好地使用雙。 – undefined

+0

你可以把它變成一個小樣本嗎?你自己調試過嗎?你期望的輸入/輸出等是什麼? –

回答

3

問題出在Unos_brojeva函數中。您正在定義名爲broj的新本地作用域變量,而不是修改您爲BrojniNiz類定義的broj數組。

那麼,爲什麼您使用小數代替

decimal[] broj = new decimal[Convert.ToInt32(Console.ReadLine())]; 

broj = new decimal[Convert.ToInt32(Console.ReadLine())]; 
+0

謝謝brother.Thanks的答案和耐心。我刪除了我以前的意見,試圖提出確切的問題,但失敗了。英語aint我的母語。你的答案解決了一下。我是c#的新手,並再次感謝耐心user2798869.Just讓你知道我也編輯過函數Aritmeticka_sredina:Decimal Aritmeticka_sredina()。現在在c#中工作,就像在我的C++代碼中一樣,也給出了相同的結果。對於(i = 0; i