Hilfe zu C-Programm (näherungsweises berechnen des dekadischen logarithmus)



  • Ich suche dringend hilfe für ein C-Programm das ich schreiben muss. Das Programm soll von einer Zahl näherungsweise den dekadischen logarithmus berechnen. Man soll eine Funktion schreiben int logstar (double x) die von einer Zahl solange den natürlichen logarithmus berechnet bis <=1 rauskommt und die Anzahl der ln Berechnungen ist dann der dekadische log.

    Als Beispiel log(1000)---ln(ln(ln(1000)))=3 Ich habe probiert das Programm zu schreiben nur muss ich irgendwo einen Fehler gemacht haben. Ich bin für jede Hilfe dankbar! 😉

    Hier mein Code:

    #include <math.h>
    #include <stdio.h>

    int logstar (double x);
    main()
    {

    double a;

    scanf("%f",&a);
    printf("%f\n", logstar (a));
    getchar();
    system("Pause");
    }

    int logstar (double x)

    {

    int i;

    for(i=0;x>1;i++)
    {
    x=log(x);

    }
    return (x);

    }



  • akteeee schrieb:

    #include <math.h>
    #include <stdio.h>
    
    int logstar (double x);
    main()
    {
         
         double a;
          
         
         scanf("%f",&a);
         printf("%f\n", logstar (a));
         getchar();
         system("Pause");
    }
    
    int logstar (double x)
          
          {
                
                int i;
                
                for(i=0;x>1;i++)
                {
                                x=log(x);
                    
                }               
                                return (x);
                                
                                }
    

    Bei scanf() steht %f für ein float. Bei double musst du %lf nehmen.
    Bei printf() steht %f für double und float . Dein logstar() gibt jedoch ein int zurück.

    Statt der Bei der for-Schleife können die Parameter auch leer sein: for(;x>1; )
    Dann kannst du auch gleich die while-Schleife nehmen.

    Das du getchar() und system("PAUSE") brauchst, liegt daran, dass das getchar() erst noch das '\n' (die Entertaste) einliest. Die bleibt vom scanf() übrig. Lösung hier: http://www.c-plusplus.net/forum/p1146014#1146014
    Dann kannst du das system() weglassen.

    Es heisst int main() : http://www.c-plusplus.net/forum/viewtopic.php?t=39346

    Und nutze beim nächsten mal die C/C++ Tags. Dann wird dein Code farbig und die Formatierung bleibt erhalten. (Text markieren und den [ C/C++ ] Button unter den 🙂 😃 markieren.



  • "Der Standard verbietet 'void main()' nicht explizit, aber ein standardkonformer Compiler darf bei 'void main()' undefiniertes verhalten an den Tag legen."
    http://www.c-plusplus.net/forum/viewtopic.php?t=39346

    Nach C99 dann doch gleich "int main(void)" bzw. "int main(int,char**)" nehmen.

    Edit: "main()" wird doch eigentlich sowieso auf "int main()" getauft, oder?



  • DaRe schrieb:

    Edit: "main()" wird doch eigentlich sowieso auf "int main()" getauft, oder?

    Nicht zwangsläufig. Default int gibt's zumindest in C99 soweit ich weiß nicht mehr.



  • Dankeschön für die superschnelle Hilfe! 🙂



  • Ich fühle mich verpflichtet, darauf hinzuweisen, dass nach dieser Methode der dekadische Logarithmus von 10100 ungefähr 4 wäre.


Anmelden zum Antworten