P.roblem s.olved :)
-
Programm:
/* * BinäresSuchen.c * * Created on: 14.09.2009 * Author: benn1 */ #include<stdio.h> #define N 10 int contain( double feld[N], double z, double o, double u); void zahl(double *za); int main() { double array[N]={0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0}; double xzahl, obergrenze = N, untergrenze = 0, erg; zahl(&xzahl); erg = contain(array, xzahl, obergrenze, untergrenze); printf("Ergebiss: %lf", erg); return 0; } void zahl (double *za) { printf(" Bitte zu suchende Zahl eingeben:\n"); fflush(stdout); scanf("%lf", za); } int contain( double feld[N], double z, double o, double u) { int m=0, rueckgabe = 0; m=(o+u)/2; if(feld[m] == z) // Abbruchbedingung return m; if(feld[m] > z) // Entscheiden in welchen Strang gesprungen wird { // Links (kleiner als m) u = 0; o = m-1; rueckgabe = contain(feld,z,o,u); return rueckgabe; } else // Rechts (größer als m) { u = m; o = N-1; rueckgabe = contain(feld,z,o,u); return rueckgabe; } }
-
Im
else
-Zweig ist die Untergrenze falsch. Außerdem kannst du das viel kürzer schreiben:... if(feld[m] > z) // Entscheiden in welchen Strang gesprungen wird { // Links (kleiner als m) return contain(feld,z,m-1,u); } else // Rechts (größer als m) { return contain(feld,z,o,m+1); } ...
Du solltest außerdem berücksichtigen, dass die Zahl evtl. nicht gefunden werden kann:
if (u > o) return -1;
Hoffe, man konnte helfen
Gez. monstermunchkin