2013-10-13 2 views
1

헤드 라인이 suggests.Problem이라는 코드를 C# 코드로 "번역"하려고합니다. C#의 새로운 기능이며 모든 것이 아닌 C++에서 이러한 솔루션을 잘 사용할 수 있지만 C# 그냥 cant.I 작동하고있는 내 이전 C++ 코드 및 "있어야합니다"C# 코드를 보여줄 것입니다. for 루프를 사용할 경우 결과는 항상 0입니다). 또한 사용할 때 (arrayname) .Sum(). 나는 다른 해결책을 온라인에서 찾았지만 아무 것도 작동하지 않는다. 결과가 표시되거나 예외가 throw됩니다. 여기에 내 C + + 코드뿐만 아니라 모든 기능을 사용할 수 있습니다 어디 첫 번째 one.If 작동하지 않는 경우 첫 번째 작동하지 않는 다음 다른 사람들을 위해 작동하지 않습니다.내 오래된 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++ 코드 : 여기

내 C# 코드입니다 도와 준거 성공적으로 번역 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"); 
    } 

감사 사람들 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

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

를 대체? 그들은 주로 재무 계산을위한 것입니다. 두 배 사용하는 것이 좋습니다. – undefined

+0

작은 샘플로 전환 할 수 있습니까? 이걸 직접 디버깅 해 봤니? 예상 입/출력은 무엇입니까? –

답변

3

문제는 Unos_brojeva 기능입니다. BrojniNiz 클래스에 대해 정의한 broj 배열을 수정하는 대신 broj라는 새 로컬 범위 변수를 정의합니다.

그럼, 왜 당신은 소수를 사용하는

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

감사의 형제. 대답과 인내심에 감사드립니다. 정확한 질문을하려고했지만 이전 질문에 대한 답변을 삭제했지만 실패했습니다. 영어가 모국어가 아닙니다. 대답이 조금 해결되었습니다. 인내심을 갖고 초심자입니다. 사용자 2798869. 그냥 내가 또한 함수 Aritmeticka_sredina : Decimal Aritmeticka_sredina()를 편집했다는 사실을 알리십시오. 이제 C#에서와 마찬가지로 C++ 코드에서도 같은 결과가 나타납니다. (i = 0; i

관련 문제