Hallo alle zusammen.
Ich habe eine Frage bezüglich dieses Quellcodes hier.
static void Main(string[] args)
{
int[] Reihe = new int[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; // Anlegen eines Arrays
int max; // Bestimmung der Variablen
int min;
int mid;
int Zahl;
bool erfolgreich = false;
min = 0;
max = Reihe[9];
foreach(int write in Reihe) // Ausgabe der vorhandenen Zahlen
{
Console.WriteLine(write);
}
Console.WriteLine("Geben Sie Ihre Zahl ein, damit wir überprüfen können, ob diese im System hinterlegt ist."); // Abfrage der gesuchten Zahl
Zahl = Convert.ToInt32(Console.ReadLine());
while (min <= max) // Mittelwert ermitteln
{
mid = (min + max) / 2;
mid = Reihe[mid];
if (mid < Zahl) // Wenn gesuchte Zahl größer als der Mittelwert, befindet sich der Wert in der rechten Hälfte
{
min = mid + 1;
}
if (mid > Zahl) // Wenn gesuchte Zahl kleiner als der Mittewert, befindet sich der Wert in der linken Hälfte
{
max = mid - 1;
}
if (mid == Zahl) // Wenn gesuchte Zahl gleich dem Mittelwert = Suche erfolgreich
{
erfolgreich = true;
break;
}
}
if (erfolgreich == true) // Ausgabe, ob die Zahl gefunden wurde oder nicht
{
Console.WriteLine("Ihre Zahl, die Sie eingegeben haben, ist im System hinterlegt.");
Console.ReadLine();
}
else
{
Console.WriteLine("Ihre Zahl, die Sie eingegeben haben, ist NICHT im System hinterlegt.");
Console.ReadLine();
}
Und zwar möchte ich ein Programm schreiben, welches eine binäre Suche in einem Programm durchführt. Aber ich bekomme es nicht genau hin.
Die Funktion soll sein, dass, wenn ich das Programm starte eine Abfrage kommt, wo man dann eine gewünschte Zahl eingibt und danach Bescheid bekommt, ob diese in der Reihe vorhanden ist.
Wenn ich dort eine falsche Zahl eingebe, die nicht in der Reihe ist, kommt eine Fehlermeldung. Außerdem klappt das Programm wirklich nur, wenn im Array {1, 2, 3, 4, 5, 6, 7, 8, 9, 10 } steht. Aber hier hätte ich auch gerne andere Werte.
Danke im Voraus.
MfG
Hier wäre nochmal ein Weg ohne diesen unnötigen do-while loop:
/*Auf eine Überprüfung der Richtigkeit der Arumente wird mal aus Faulheit verzichtet, und zudem sollte der Weg klar sein...*/
iResult = (rand() % (max - min)) + min;
//Der Rest kann gleich bleiben
Bin mal ein paar Beispiele im Kopf durchgegangen, und der Weg sollte sogar auch mit negativen Zahlen funktionieren. Ist aber schon so spät, dass ich keine Garantie mehr geben kann ;)