Falsche Daten bei großen Zahlen

Tutorials.at
Verfügbare Informationen zu "Falsche Daten bei großen Zahlen"

  • Qualität des Beitrags: 0 Sterne
  • Beteiligte Poster: DrPhil_Guth - exbs - X
  • Forum: Tutorials.at
  • Forenbeschreibung: Programmierforum
  • aus dem Unterforum: C / C++
  • Antworten: 9
  • Forum gestartet am: Mittwoch 19.04.2006
  • Sprache: deutsch
  • Link zum Originaltopic: Falsche Daten bei großen Zahlen
  • Letzte Antwort: vor 17 Jahren, 6 Monaten, 11 Tagen, 11 Stunden, 45 Minuten
  • Alle Beiträge und Antworten zu "Falsche Daten bei großen Zahlen"

    Re: Falsche Daten bei großen Zahlen

    DrPhil_Guth - 08.10.2006, 11:43

    Falsche Daten bei großen Zahlen
    Hi!

    Ich hab folgendes problem:

    Mein programm sollte die Fakultät und den Binomialkoeffizienten berechnen können.
    Das funktioniert bei werten bis 12 recht gut, allerdings stimmen sie ab 13 nicht mehr.
    Ab 30 oder so zeigt er immer 0 an.

    Ich vermute, dass unsigned long nicht reicht, um solche großen zahlen aufzunehmen.
    Als ich das allerdings auf double geändert habe, ging gar nichts mehr, denn anscheinend konnte er die eingabe nicht richtig interpretieren. Ich habe versucht statt %d %f zu nehmen, allerdings ohne erfolg.

    Könnte mir bitte jemand helfen? Ich hab echt keine ahnung was ich machen soll....

    bitte helft mir

    Code:

    // INCLUDES ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <math.h>

    // DEFINES ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    typedef unsigned long int ULINT;

    // GLOBALS ////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    // FUNCTION HEADERS ///////////////////////////////////////////////////////////////////////////////////////////////////////

    //Computes the Factorial of an integer
    ULINT factorial(ULINT);

    // Function to compute Binomial Coefficient, if n over k,
    //n is the first, k is the second argument
    ULINT nCr(ULINT, ULINT);


    // FUNCTIONS ///////////////////////////////////////////////////////////////////////////////////////////////////////
    int _tmain(int argc, char* argv[])
    {
       ULINT x;
       ULINT n, k;
       int cOp;

       do {
          printf ("Drücken sie die jeweilige Taste für die gewuenschte Operation: ");
          printf ("\n\n1: Fakultaet\n2: Binomialkoeffizent\n\n");

          scanf ("%u", &cOp);
          fflush (stdin);
          }  while( !(cOp >= 0 || cOp <=1) );

       switch(cOp)
       {
          case 1:
             do {
                printf ("\nGeben Sie die Ganzzahl an, von der die Fakultaet berechnet werden soll, diese muss zwischen 0 und 30 liegen.");
                scanf ("%f", &x);
                fflush(stdin);
                } while( !(x >= 0 || x <= 30) );

             printf ("\n\nDie fakultaet von %u ist %u", x, factorial(x));
             break;
          
          
          case 2:
             do {
                printf ("\nGeben Sie n und k ein, wobei gilt: n <= 30, n >= k");
                scanf ("%u %u", &n, &k);
                fflush(stdin);
                } while(  !(n >= k) || !(n <= 30) );
          
             printf ("Das ergebnis lautet %u", nCr(n, k) );

             break;
          default:
             break;

       }


       getch();
       return 0;
    }

    ULINT factorial(ULINT x)
    {
       ULINT result = 1;

       for (int i = x; i > 0; i--)
          result *= i;

       return result;

    }

    ULINT nCr(ULINT n, ULINT k)
    {
       ULINT result;

       result = factorial(n) / ( factorial(k) * factorial (n-k) );

       return result;

    }



    Re: Falsche Daten bei großen Zahlen

    exbs - 08.10.2006, 12:01


    Ich konnte den Code leider nicht compilieren! :roll:

    Aber wenn du vermutest, dass dein Dateityp nicht lang genug ist ... schau dir doch mal das Projekt LNC (Large Number Class) bei Sourceforge an.

    http://lnc.sourceforge.net/

    greetzz exbs



    Re: Falsche Daten bei großen Zahlen

    DrPhil_Guth - 08.10.2006, 12:03


    nicht? was für fehler spuckt dein compiler aus? ich kanns dann ändern



    Re: Falsche Daten bei großen Zahlen

    exbs - 08.10.2006, 12:08


    Also:
    Code: for (int i = x; i > 0; i--) "'for' loop initial declaration used outside C99 mode"
    aber das lässt sich ja leicht ab ändern Code: int i;
    for (i = x; i > 0; i--)

    nur dann kommt "[Linker error] undefined reference to `WinMain@16'" ... das konnte ich nicht beheben :roll: !

    greetzz exbs

    [edit] ich sollte evtl noch sagen, ich verwende DEV-Cpp



    Re: Falsche Daten bei großen Zahlen

    DrPhil_Guth - 08.10.2006, 12:20


    Ah, ich weiß schon.

    das kommt davon, wenn man mal Visual Studio seinen willen lässt.

    das Problem liegt daran, dass ich statt wie immer

    int main()

    int _tmain()

    verwendet habe. Ich dachte mir, meine güte wenn der Compiler das so gern hat...

    wenn du int main() schreibst, sollte es kompilierbar sein



    Re: Falsche Daten bei großen Zahlen

    exbs - 08.10.2006, 13:15


    Ja stimmt! Also lässt sich compilieren :) !
    Die Vermutung, dass der Dateityp "unsigned long int" nicht gross genug ist stimmt. Ich habe es mit "float" versucht, aber das brachte net viel. Meine "Lösung" war es das Ergebnis einfach so zum Bsp. durch 1000 zu teilen, dann hst du alle Zehlen, aber mit Komma, was ja eigl auch scheisse ist. :roll:

    greetzz exbs



    Re: Falsche Daten bei großen Zahlen

    X - 08.10.2006, 14:20


    HI

    probiers mal mit dem Datentyp "long double".

    Sonst gib mal die Fehlermeldung durch die du erhälst.

    Gruß



    Re: Falsche Daten bei großen Zahlen

    exbs - 08.10.2006, 15:27


    Code: #include <stdio.h>

    int main()
    {
        int zahl, x;
        float fakultaet = 1;
       
        printf("Geben Sie die Zahl an, von welcher Sie die Fakultaet haben wollen!\n");
        scanf("%i", &zahl);
       
        if (zahl > 34)
        {
                 printf("Zahl zu gross !!");
                 exit(0);
        }
       
        for(x = 1; x <= zahl; x++)
        {
              fakultaet = fakultaet * x;
        }
       
        printf("Die fakultaet von %i betraegt %.0f.", zahl, fakultaet);
        fflush(stdin);
        getchar();
    }

    also das geht bis zur 34!

    Ich hoffe das ist etwas in deine Richtung.

    greetzz exbs



    Re: Falsche Daten bei großen Zahlen

    DrPhil_Guth - 08.10.2006, 18:59


    danke, aber ich habs schon gelöst.
    Man muss die Variablen als double deklarieren, und dann richtig einlesen.
    Das hat jetzt mit cin gut funktioniert, ich versuche trotzdem noch ein rein C- Konforme lösung zu finden.



    Mit folgendem Code, können Sie den Beitrag ganz bequem auf ihrer Homepage verlinken



    Weitere Beiträge aus dem Forum Tutorials.at

    Textdatei - Zufallszeile auslesen. - gepostet von Bene am Freitag 28.07.2006
    Grafikspielereien - gepostet von Dirty Oerty am Samstag 13.01.2007
    Turbo C - gepostet von Mei$ter A^ am Montag 24.04.2006
    char / schleife - gepostet von Michael am Samstag 11.11.2006
    Großes Blender Problem!!! - gepostet von vpascal am Donnerstag 06.09.2007
    Sound über die Bios BOX (Alle meine Entchen) - gepostet von Tro1aner am Montag 22.01.2007
    PROGRAMMSAMMLUNG - gepostet von DrPhil_Guth am Freitag 25.08.2006



    Ähnliche Beiträge wie "Falsche Daten bei großen Zahlen"

    zahlen Q 1 / 05 - stockmarket (Mittwoch 04.05.2005)
    Zahlen Thread - Sunny (Donnerstag 23.11.2006)
    Zahlen-Thread - AmericanPsycho (Mittwoch 30.05.2007)
    zahlen spam rückwärts - gotmog (Samstag 10.02.2007)
    Daten aktualisiert - MaxG4 (Mittwoch 06.04.2005)
    Der Zahlen-Thread - Daniel Linter (Sonntag 04.06.2006)
    Falsche Namen und Fragen wegen 1. Seminar - Olee Starstone (Donnerstag 11.10.2007)
    Wichtige Links/Daten/Adressen - Deluxesys (Freitag 07.09.2007)
    Zahlen-Spiel - DonAndinho (Mittwoch 09.05.2007)
    zu große zahlen - dani93 (Freitag 14.12.2007)