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.htmlUnser 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.