Problem :)



  • Hi,
    komm bei meinem Prog nicht weiter. Es soll dynamisch Werte aufnehmen und dann das Max ausgeben...
    Es lässt sich kompilieren aber max ist immer o

    #pragma hdrstop
    #include <iostream>
    #include <stdlib>
    
    //---------------------------------------------------------------------------
    
    #pragma argsused
    
    using namespace std;
    
    float nmax(float**,int);
    
    int main(int argc, char* argv[])
    {
        static int n=0,a;
        cout<<"Gib die Anzahl der Werte ein (1-100): ";
        cin>>n;
        float* f=(float*) malloc(n);
    
        for(a=0;a<n;++a){
            cout<<"Wert "<<a+1<<": ";
            cin>>(f[a]);
        };
        cout<<"Max: "<<nmax(&f,n)<<endl;
        system("PAUSE");
        return 0;
    }
    //---------------------------------------------------------------------------
    float nmax(float** ff,int n)
    {
        float max=0.0;
        while(!n){
            if((*ff[n])>(*ff[n-1]))
                max=(*ff[n]);
            else max=(*ff[n-1]);
            --n;
        };
        return max;
    };
    

    Wenn man den Code verbessern kann, dann bitte alle Verbesserungsvorschläge posten. 😃
    Thx KaraHead



  • Du hättest diesen Beitrag im C-Forum posten sollen. Dein Code ist in reinem C (oder fast..). Nichtsdestotrotz würd ich die nmax Funktion so schreiben:

    float nmax(float* ff,int n)
    {
      float max=0.0;
      int i;
      for(i=0; i<n; i++)
      {
        if( ff[i] > max)
          max = ff[i];
      }
      return max;
    };
    


  • while(!n) bedeutet ja, das die While-Schleife nur durchgangen wird, wenn n null ist ... aber da du ja eine Zahl übergibst wird natürlich immer 0.0 (nmax) zurückgegeben

    ich würde while(n>0) nehmen



  • Das ist nur ne Frage des Stils. Dein Funktionsprototyp war falsch. Du übergibst
    statt eines Pointers auf float einen Pointer auf einen Pointer auf float (die zwei **)

    Edit:
    Oh, und ich seh grad, dass das innere in deiner Schleife auch Murks war, insbesondere
    die das if-Statement.



  • Danke für die Ansätze hab es jetzt hinbekommen 🙂



  • Aziz schrieb:

    Du hättest diesen Beitrag im C-Forum posten sollen. Dein Code ist in reinem C (oder fast..).

    Um dazu auch noch meinen Senf dazu zu geben: Warum ist das C-Code? Weil das nur
    ne kleine Übung ist, und der gute Mann sich wahrscheinlich noch nicht mit vectoren
    beschäftigt hat? Weil er keine Klasse geschrieben hat?

    Btw:
    Im C-Forum hätte er eins für die <iostream> auf den Deckel bekommen.



  • @Taurin

    Siehst du. Ich hatte vorher schon unheimliche Angst diesen Satz zu posten. Deswegen schrieb ich in Klammern "oder fast", weil so genau hab ich den Code auch nicht analysiert...



  • float max=0.0;
    

    Hier sollte stehen:
    float max = ff[0], sonst gibt die Funktion 0 zurück, wenn nur negative Wert im Array sind. :p


Anmelden zum Antworten