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


Anmelden zum Antworten