Anpassung von C++ Programm an C#



  • Moin,

    es geht um dieses Problem hier:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-207450-and-postdays-is-0-and-postorder-is-asc-and-start-is-10.html

    Unser C++ Programm läuft auch einwandfrei:

    #include <iostream>
    using namespace std;
    #include <string>
    #include <stdlib.h>
    #include <math.h>
    
    bool check_digits(long n);
    
    bool check_digits(long n)
    {
        bool digits[10] = { true };
    
    	for ( int i = 0; i < 9; ++i )
        {
            int j = n % 10;
    
            if ( digits[j] )
                return false;
            digits[j] = true;
            n /= 10;
    	}
        return n == 0;
    }
    
    void main()
    {
    	double untere_grenze, obere_grenze, testzahl;
    	long ergebnis;
    	static int counter = 1;
    
    	untere_grenze = sqrt(123456789);
    	obere_grenze = sqrt(987654321);
    
    	untere_grenze = floor(untere_grenze);
    	obere_grenze = floor(obere_grenze);
    	testzahl = untere_grenze;
    
    	while(testzahl >= untere_grenze && testzahl <= obere_grenze )
    	{
    		ergebnis = testzahl * testzahl;
    
    		if(check_digits(ergebnis))
    		{
    			cout << counter << ".Zahl " << testzahl << " * " << testzahl << " = " << ergebnis << "\n";
    			counter++;
    		}
    
    		testzahl++;
    	}
    }
    

    Nun haben wir probiert es an C# anzupassen, da will es aber noch nicht so ganz..sieht jemand woran das liegen könnte ?? Danke!!

    using System;
    
    public static bool check_digits(long n)
    		{
    			bool[] digits = new bool[10];
    			digits[0] = true;
    			for ( int i = 0; i < 9; ++i )
    			{
    				int j = (int)n % 10;
    				if (digits[j] == true)
    				{
    					return false;
    				}
    				digits[j] = true;
    				n /= 10;
    				}
    			return n == 0;
    		}
    
    		static void Main(string[] args)
    		{
    			double untere_grenze, obere_grenze, testzahl;
    			long ergebnis;
    			int counter = 1;
    
    			untere_grenze = Math.Sqrt(123456789);
    			obere_grenze = Math.Sqrt(987654321);
    
    			untere_grenze = Math.Floor(untere_grenze);
    			obere_grenze = Math.Floor(obere_grenze);
    			testzahl = untere_grenze;
    
    			while(testzahl >= untere_grenze && testzahl <= obere_grenze )
    			{
    				ergebnis = (long)(testzahl * testzahl);
    
    				if(check_digits(ergebnis))
    				{
    					Console.Write("ZahlNr");
    					Console.Write(counter);
    					Console.Write(testzahl);
    					Console.Write("*");
    					Console.Write(testzahl);
    					Console.Write("=");
    					Console.Write(ergebnis);
    
    					counter++;
    				}
    
    				testzahl = testzahl + 1;
    			} 
    		}
    


  • Was mir auf den 1. Blick auffaellt ist, dass du in C++ digits initialisierst in C# aber nicht. Debuggen haette hier sehr geholfen...



  • Hallo

    Desweiteren wäre eine korrekte Fehlerbeschreibung auch nicht schlecht.

    chrische



  • Kommentare im Code

    using System;
    
    namespace ConsoleApplication1
    {
        class Program // Das hier fehlt bei euch incl. der Klammern
        {
            public static bool check_digits(int n) // long in C# == 64bit signed integer
            {
                bool[] digits = new bool[10];
                digits[0] = true;
                for ( int i = 0; i < 9; ++i )
                {
                    int j = (int)n % 10;
                    if (digits[j] == true)
                    {
                        return false;
                    }
                    digits[j] = true;
                    n /= 10;
                    }
                return n == 0;
            }
    
            static void Main(string[] args)
            {
                double untere_grenze, obere_grenze, testzahl;
                int ergebnis;
                int counter = 1;
    
                untere_grenze = Math.Sqrt(123456789);
                obere_grenze = Math.Sqrt(987654321);
    
                untere_grenze = Math.Floor(untere_grenze);
                obere_grenze = Math.Floor(obere_grenze);
                testzahl = untere_grenze;
    
                while(testzahl >= untere_grenze && testzahl <= obere_grenze )
                {
                    ergebnis = (int)(testzahl * testzahl);
    
                    if(check_digits(ergebnis))
                    {
                        Console.WriteLine("ZahlNr {0}: {1} * {1} = {2}", counter, testzahl, ergebnis);
                        //Console.Write(counter);
                        //Console.Write(testzahl);
                        //Console.Write("*");
                        //Console.Write(testzahl);
                        //Console.Write("=");
                        //Console.Write(ergebnis);
    
                        counter++;
                    }
    
                    testzahl++; // = testzahl + 1;
                }
    
                Console.Read();
            }
        }
    }
    

    So funktioniert es und gibt die Ergebnisse Formatiert aus.


Anmelden zum Antworten