#1 26. Juni 2010 benutzer eingabe problem Code: using System; class Program { public static void Main () { Random a = new Random(); // zwei zufallszahlen Random b = new Random(29); double zzahl1; double zzahl2; int treffer = 0; int anz; // Anzahl der Zufallszahlen, Anzahl der Schleifendurchläufe, vom Benutzer eingegeben double proz; // Der Prozentwert der Fläche, als Ergebnis ausgegeben char c; Console.WriteLine(" ****************** "); Console.WriteLine(" Willkommen zu einer kleinen Anwendung der Monte-Carlo-Flächenberechnung "); Console.WriteLine(" ****************** "); neustart2: Console.WriteLine(" Die verwendete Funktion ist f(x)= x² "); Console.WriteLine(" ****************** "); Console.WriteLine(" \n \n Bitte geben Sie ein, wieviele Zufallszahlen Sie verwenden wollen! "); Console.WriteLine(" ( Zwischen 1000 - 64.000.000) "); neustart: anz = Convert.ToInt32(Console.ReadLine() ); //Anzahl der Zufallszahlen, die für den Zufallsregen verwendet werden sollen if ( anz > 64000000) // Fehler bei einer Eingabe von einer zu großen Zahl goto erste_fehlermeldung; else { if ( anz < 1000) // Fehler bei einer Eingabe von einer zu kleinen Zahl goto zweite_fehlermeldung; else goto program_weiter; } erste_fehlermeldung: Console.WriteLine(" \n Fehler: Ungültige Eingabe"); Console.WriteLine(" Die Zahl war zu groß"); Console.WriteLine(" \n Wiederholen Sie die Eingabe, diesmal eine Zahl zwischen 1000 und 64.000.000:"); goto neustart; zweite_fehlermeldung: Console.WriteLine(" \n Fehler: Zu ungenaues Ergebnis"); Console.WriteLine(" Die Zahl war zu klein"); Console.WriteLine(" \n Wiederholen Sie die Eingabe, diesmal eine Zahl zwischen 1000 und 64.000.000:"); goto neustart; dritte_fehlermeldung: Console.WriteLine(" \n Fehler: Ungültige Eingabe"); goto neustart3; program_weiter: //Programm weiter bei gültiger Eingabe Console.WriteLine(" \n Es wird nun die Fläche von y = x² mit {0} Zufallszahlen berechnet..", anz); for ( int i = 1; i <= anz; i++) // Algorithmus { // Zwei Zufallszahlen mit den Koordinaten (x,y) zzahl1 = a.NextDouble(); // f(x)=x² --> x zzahl2 = b.NextDouble(); // f(x)=x² --> y if ( zzahl2 <= zzahl1 * zzahl1 ) // Prüfung ob der Zufallspunkt unter der Funktion liegt, für f(x)=x² treffer = treffer + 1; // Wenn ja, dann zähle ein Treffer else treffer = treffer; // Wenn nein, dann zähle kein Treffer } proz = (treffer * 100) / anz; //Prozentwert der errechneten Fläche Console.WriteLine(" \n \n \n * Von {0} Zufallszahlen, liegen {1} unter der Funktion! *", anz, treffer); Console.WriteLine(" \n Also beträgt die Fläche unter Funktion im Einheitsquadrat \n von \"0\" bis \"1\" rund {0} %", proz); Console.WriteLine(" Das entspricht 0,{0} Flächeneinheiten!!!", proz); // in Flächenheiten umgerechnet Console.WriteLine(" \n \n \n ****************** "); Console.WriteLine(" Vielen Dank, dass Sie sich für die Benutzung des Programms entschieden haben!"); Console.WriteLine(" ****************** "); neustart3: Console.WriteLine(" Wollen Sie das Programm mit einer neuen Eingabe wiederholen? "); Console.WriteLine("y/n? "); c = Convert.ToChar(Console.ReadLine() ); switch (c) { case 'y': goto neustart2; case 'n': Console.WriteLine("Schade.."); break; default: goto dritte_fehlermeldung; } Console.WriteLine("***********Auf Wiedersehen..!!!!***********"); Console.ReadLine(); } } hi kollege und ich sind grade am coden und haben ein paar probleme... ist unser erstes "projekt" und daher noch ziemlich noobig unterwegs 1. ab einer eingabe von >64.400.000 kommt ein minus wert als ausgabe. 2. wir möchten alles bei der eingabe ausschließen bis auf den von uns angegeben bereich von int zahlen bsp. 1000 -100.000.000, also keine stings etc. hoffen auf hilfe!!! danke + Multi-Zitat Zitieren
#2 26. Juni 2010 AW: benutzer eingabe problem Solange keiner einer bessere Antwort liefert, schreib ich hier meine Vermutung. Es könnte daran liegen das du den Datentyp "int" genommen hast, ich weiss jetzt nicht bis wieviel bei int geht, aber versuch es mal mit einem anderem Datentyp wie z.B. "long". + Multi-Zitat Zitieren
#3 26. Juni 2010 AW: benutzer eingabe problem Du solltest dir auf jedenfall das goto abgewöhnen und lieber mit schleifen arbeiten, ansonsten dürfte xmischax rechthaben. Da sollte das Zauberwort "unsigned" hilfreich sein. Was bewirkt das der Wertebereich bei 0 beginnt und nich bei Minus irgendwas. + Multi-Zitat Zitieren
#4 27. Juni 2010 AW: benutzer eingabe problem Der normale Integer in C# hat aber 4 Byte, also 32 Bit und hat damit den Wertbereich von -2.147.483.648 bis 2.147.483.647. Daher sollte es kein Problem darstellen die 64 Mio einzugeben. Warum das bei euch Probleme macht kann ich mir nicht erklären. Wenn du wirklich willst, dass man nru eine Zahl eingeben kann und diese eine bestimmte Größe nicht überschreitet, dann solltet ihre die Eingabe mit einem regulären Ausdruck parsen. Wenn ihr nicht wisst, wie ihr vorgehen sollt, dann meldet euch bei mir und ich schreibe da mal was für. (Dabei fällt mir ein, dass eine Klasse dafür gar nicht mal so schlecht wäre...) greez + Multi-Zitat Zitieren
#5 27. Juni 2010 AW: benutzer eingabe problem hmm, vielleicht vergessen zu speichern vorm kompilieren? vs übernimmt änderungen nicht automatisch, kann man aber einstellen. habs grad mal getestet: Code: Bitte geben Sie ein, wieviele Zufallszahlen Sie verwenden wollen! ( Zwischen 1000 - 64.000.000) 999999999 Fehler: Ungültige Eingabe Die Zahl war zu groß Wiederholen Sie die Eingabe, diesmal eine Zahl zwischen 1000 und 64.000.000: passt ja soweit. bei zu kleinen/großen werten, die nicht in int passen, wird ne exception geworfen. kann eigentlich nur am speichern liegen. + Multi-Zitat Zitieren