Problem bei Potenzierung



  • ja, das weis ich schon 😉

    aber wenn ich int zu long long int umändere, müsste sich eigentlich der datenbereich ändern, oder sehe ich das falsch?

    wenn ich das mache, rechnet mir das programm immernoch maximal bis 2^30 zuverlässig.

    lg



  • Hast du den Formatspezifierer vom printf und scanf geändert?



  • meinst du %lli ?

    wenn ja, dann ja, hatte ich gemacht



  • Steffen93 schrieb:

    aber wenn ich int zu long long int umändere, müsste sich eigentlich der datenbereich ändern, oder sehe ich das falsch?

    wenn ich das mache, rechnet mir das programm immernoch maximal bis 2^30 zuverlässig.

    Zeig mal.



  • ich habe mir das so gedacht, müsste ja eigentlich reichen:

    #include <stdio.h>
    #include <string.h>
    
    int quadrat(long long int i)
    {
        i=i*i;
        return i;
    }
    
    int vielfaches(long long int i, long long int n)
    {
        long long int c=i;
    
        if(i!=0 && n>0)
        {
            while (n>1)
            {
                c=i*c;
                n--;
            }
        return c;
        }
        else if(i!=0 && n==0)
        {
            return 1;
        }
        else {return 0;}
    }
    
    int main (int argc, char *argv[])
    {
        long long int i, n;
        char q[] = {"quadrat"};
        char v[] = {"vielfaches"};
    
        if (argc != 2)
        {
            printf("Bitte geben Sie einen Parameter an!");
        }
        else
        {
            if(strcmp(argv[1], q) == 0)
            {
                printf("\nGeben Sie die zu quadrierende Zahl ein: ");
                scanf("%lli", &i);
                if (getchar()=='\n')
                {
                    i = quadrat(i);
                }
                else{i=0;}
            }
            else if(strcmp(argv[1], v) == 0)
            {
                printf("Geben Sie die zu vervielfachende Zahl ein: ");
                scanf("%lli", &i);
                if (getchar()=='\n')
                {
                    printf("\nGeben Sie die Potenz an: ");
                    scanf("%lli", &n);
                    if(getchar()=='\n')
                    {
                        i = vielfaches(i, n);
                    }
                    else{i=0;}
                }
                else{i=0;}
            }
            else {i=0;}
    
        if (i == 0)
        {
            printf("\nUngueltige Eingabe, Programm wird beendet");
        }
        else
        {
            printf("\n\nDas Ergebnis ist %lli\n", i);
        }
        }
    return 0;
    }
    


  • Wenn quadrat ein long long als Parameter hat, dann sollte es auch ein long long als Rueckgabewert haben.
    Ebenso fuer vielfaches .

    Da warnt aber auch der Compiler (wenn man ihn laesst) und man es liest.



  • cool, danke, jetzt klappts 🙂



  • Steffen93 schrieb:

    cool, danke, jetzt klappts 🙂

    Kleiner Tipp am Rande:
    Ich fahre mneistens immer recht gut damit, daß ich die Sonderfälle vorher wegprüfe und unten dann den "Normalfall" programmiere.

    long long int vielfaches(long long int i, long long int n)
    {
        if(i==0)
            return 0;
    
        if(n==0)
            return 1;
    
        long long int c=i;
        while (n>1)
        {
            c=i*c;
            n--;
        }
        return c;
    }
    


  • Kleiner Tipp am Rande:
    Ich fahre mneistens immer recht gut damit, daß ich möglichst viele Sonderfälle in den "Normalfall" integriere.

    long long int vielfaches(long long int i, long long int n)
    {
        if(i==0)
            return 0;
    
        long long int c=1;
        while (n>1)
        {
            c=i*c;
            n--;
        }
        return c;
    }
    

    [/quote]



  • Ich wollte am Verfahren wenig ändern.

    Dein Code ist nebenbei falsch.


Anmelden zum Antworten