[C#] benutzer eingabe problem

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Rump3l, 26. Juni 2010 .

Schlagworte:
  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
     
  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".
     
  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.
     
  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
     
  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.
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.