Verfügbare Informationen zu "Falsche Daten bei großen Zahlen"
Qualität des Beitrags: 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:43Falsche 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)