Binäre Suche



  • Hallo,

    Ich habe ein Programm in C++ geschrieben.

    Sieht so aus:

    
        #include <iostream>
        #include <cmath>
        #include <math.h>
        using namespace std;
    
        void sinuss(){
            double a  [16] ;
    
    
    
            for(int i = 0; i<=15; ++i){
    
    
                a[i] = sin((M_PI*(i-7))/15);
                cout<<a<<endl;
            }
    
        }
    
        int main(){
            sinuss();
            }
    
    
    

    Ich muss es berechnen und in einer Liste a ausgeben. Aber mein Programm gibt nur hexadezimahlzahlen aus und nicht in einem Array..:(
    Könnt ihr mir bitte helfen?
    Vielen Dank!



  • Du gibst die Adresse von a aus.

    cout<<a[i]<<endl;
    

    Es stellt sich natürlich die Frage, warum du die Werte in dem Array speichern möchtest.



  • @sanjarbekova da wird die Adresse von dem Array ausgegeben.

    Die Ausgabe ist in der Schleife. Dann gib doch da das Element aus.

    Wenn aber eh nur eine Ausgabe machst, warum dann noch das Array?



  • @yahendrik

    ich möchte in einem Array speichern, weil ich noch ein Unterprogramm schreiebn möchte, was eine sortierte Liste als Parameter erwartet und mit binärer Suche den kleinen Wert (nicht kleiner als 0.0)findet und ausgibt. Dazu brauche ich ja die Liste , habe ich richtig verstanden?



  • @yahendrik

    wenn ich cout<<a[i]<<endl; schreibe , bekomme ich nur einen Wert. (Dazu habe ich i im Programm sinuss initialisiert)
    Aber ich brauche ja alle 15 Werte in einer Liste. für i =0,1,...,15



  • @sanjarbekova dann musst du das Array aber auch aus der Funktion wieder raus bekommen.

    Darauf ist deine Funktion gerade nicht ausgelegt.

    Bedenke das du gerade C-Arrays bebutzt.



  • @sanjarbekova sagte in Binäre Suche:

    @yahendrik

    wenn ich cout<<a[i]<<endl; schreibe , bekomme ich nur einen Wert.
    Dann imachst du das nicht mehr in der Schleife.

    (Dazu habe ich i im Programm sinuss initialisiert)
    das wird doch durch for erledigt.

    sinuss ist eine Funktion



  • @sanjarbekova so, ich bekomme alle Werte. ich habe cout<<a[i] in for Schleife heschrieben. Aber bekomme nicht als Liste.

    Ich brauche ja für mein weiteres Programm [alle Werte] , damit ich auf diese Werte zugreifen kann..



  • @DirkB
    mmh, wie kann ich aus der Funktion raus bekommen? Jetzt kann ich nur alle einzelne Elemente in for Schleife ausgeben:(



  • @sanjarbekova sagte in Binäre Suche:

    @DirkB
    mmh, wie kann ich aus der Funktion raus bekommen? Jetzt kann ich nur alle einzelne Elemente in for Schleife ausgeben:(

    Das sind C++ Grundlagen.
    Die musst du lernen.

    du kannst std::array oder std::vector nehmen



  • Hi sanjarbekova!

    Sieh dir folgendes Beispiel an:

    #include <iostream>
    #include <cmath>
    #include <math.h>
    
    using namespace std;
    
    // nur fuer die B erechnung der Werte, schreibt diese ins Array (Argument 1)
    void calc_sinuss(double (*a)[16])
    {
    for(int i = 0; i<=15; ++i)
     {
      (*a)[i] = sin((M_PI*(i-7))/15);
      cout<<(*a)[i]<<endl;
     }
    }
    
    // Ausgabe der Werte
    void show_sinuss(double a[])
    {
      for(int i = 0; i<=15; ++i)
       cout<<a[i]<<endl;
    }
    
    int main()
    {
     double werte[16];        // dieses Array wird dann....
      calc_sinuss(&werte);    // hier als Argument und die Adresse des Arrays mit dem Adressoperator uebergeben
      show_sinuss(werte);
    
     return 0;
    }
    
    

    Lies mal mehr über Parameter bei Funktionen und über den Adress-Operator sowie
    Call by Reference und Call by Value
    Bedenke auch das sin cos und tan nur Winkel die im Bogenmass angegeben werden richtig verarbeitet.
    Hierzu als Beispiel folgende Funktionen(diesmal ohne M_PI):

    // Wandelt Bogenmass in Grad um
    double radtograd(double boma)
    {
     double grad, pi = 3.141592653589793;
    
     grad = ((boma * 180) / pi);
     return grad;
    }
    
    // Wandelt grad in Bogenmass um
    double bogenmass(double grad)
    {
     double boma, pi = 3.141592653589793;
    
     boma = (grad * pi)  / 180;
     return boma;
    }
    


  • @rustyoldguy Das ist C mit cout aus und funktioniert nur mit arrays in der fest angegebenen Größe.

    @sanjarbekova Es gibt ja nicht nur "void" Funktionen 😉


Log in to reply