[C#] Problem mit Interpolationssuche

nachtfrost23

Lieutenant
Registriert
März 2008
Beiträge
644
Hi, ich versuche gerade eine Interpolationssuche einzubauen, doch die Funktion, zum errechnen der nächsten Suchposition, gibt immer "0" zurück.

Aufruf der Funktion:
Code:
int a=neuerort(suchzahl, ug, og, zahlen);
Console.WriteLine(a);
Hiermir, will ich erst mal grundsätzlich testen, ob die Funktion funktioniert.
Deswegen wird a, also die neue Position, ausgegeben.

Die besagte Funktion:
Code:
public static int neuerort(int k, int ug, int og, int[] array)
		{
			int pos;
			pos=(ug+((k-array[ug])/(array[og]-ug))*(og-ug));
			return pos;
		}

k=gesuchte Zahl
ug=erste, noch zu durchsuchende, Stelle (am Anfang 0)
og=letzte, noch zu durchsuchende, Stelle (bei einem 200-stelligem Array am Anfang eben 200)
array=der Array mit den Zahlen

Der komplette Code:
Code:
class Program
	{
		public static void Main(string[] args)
		{
			Random zahl=new Random();
			int anzahl;
			int [] zahlen;
				
			Console.WriteLine("Geben Sie ein, wie viele Zahlen sie durchsuchen möchten.");
			anzahl=int.Parse(Console.ReadLine());
			zahlen=new int[anzahl+1];
			for(int i=0; i<(anzahl+1); i++)
			{
				zahlen[i]=i;
			}
			Console.WriteLine(zahlen[0]+"+"+zahlen[anzahl]);
			Console.WriteLine("Welche Zahl möchten Sie suchen?");
				int suchzahl=int.Parse(Console.ReadLine());
			
			if(suchzahl<=anzahl)
				{
					
				
				
					Console.WriteLine("Möchten Sie die Interpolationssuche [1] oder die Serielle Suche [2] verwenden?");
						int suche=int.Parse(Console.ReadLine());
				
						if(suche==1)
						{
							int gefunden=0;
							int ug=0, og=anzahl;
						
							while(gefunden==0)
							{
								int a=neuerort(suchzahl, ug, og, zahlen);
								Console.WriteLine(a);
								gefunden=1;
							}
						}
				}
			
			Console.Write("Press any key to exit . . . ");
			Console.ReadKey(true);
		}
		public static int neuerort(int k, int ug, int og, int[] array)
		{
			int pos;
			pos=(ug+((k-array[ug])/(array[og]-ug))*(og-ug));
			return pos;
		}


Wenn ich noch etwas erklären muss, gebt mir einfach kurz Bescheid.
Danke schonmal :)

Gruß, nachtfrost
 
Zuletzt bearbeitet:
Wofür initialisierst du pos erst mit 1, um es direkt danach neu zu initialisieren?

Wenn pos zurückgegeben wird und pos 0 ist stimmt da wohl was in der Berechnung nicht.
ug+((k-array[ug])/(array[og]-ug))*(og-ug)
Damit da 0 rauskommt müsste ug und der Teil rechts neben dem + 0 sein. Hast du ma überprüft, ob ug usw. auch wirklich mit einem Wert ungleich 0 übergeben wird?
 
Wenn bei deiner Division eine Kommazahl rauskommt die größer 0,0 aber kleiner als 1,0 ist, dann kommt da wieder 0 raus, weil du es in einem Int speicherst und beim cast zu int, die kommastellen abgeschnitten werden.
 
AP Nova schrieb:
Wofür initialisierst du pos erst mit 1, um es direkt danach neu zu initialisieren?

Hmm... vielleicht hatte ich ausprobiert, ob der Wert 0 errechnet oder einfach nur unverändert von der Deklaration herrührt...weiß ich nicht mehr^^ habe es auf "int pos;" geändert.

@AP Nova: Wenn ich die Berechnung selbst durchführe, komme ich auf das jewils richtige Ergebnis.
Ich überprüf jetzt mal die Schritte davor.

@toeffi: Ich teste immer mir 200, und suche 100, da kommt also genau 100 herraus.
 
Zurück
Oben