Programm funktioniert für n = 20, aber für n = 50 nicht!
-
Nochmal Danke an euch,
also ich denke die Zahlen sind einfach zu groß. Ich versuch da anscheinend zu viel rauszukitzeln. Ich lasse das Programm jetzt so wie es ist. Kann leider nicht mehr so viel Zeit in das Programm investieren. Ich lass einfach nur Werte für a bis 30 zu am besten...
50 über 8 ist zum Beispiel eine 9 stellige Zahl
50 über 25 ist 15 stellige Zahl.@essio
Rauskommt
bin ist 50
bin ist 1225
bin ist 19600
bin ist 230300
bin ist 2118760
bin ist 15890700
bin ist 99884400
bin ist 7738
c ist 7738
Process returned 0 (0x0) execution time : 0.177 s
Press any key to continue.Warum wird die Zahl plötzlich kleiner? Liegt es an der Größe von "int"?
Eigentlich muss der Wert ja nach 15890700 noch größer werden
-
Das ist ein Integer-Überlauf, verwende uintmax_t statt int.
-
essio schrieb:
War die Deklaration nicht das erstellen eines Speichers für die Variable und Definition die Wertzuweisung?
Deklaration:
int bin;
Definition:
bin = 1;
Nein.
Deine "Deklaration" ist auch eine Definition, angenommen, sie steht in einem Block oder Global.
Das ist eine Deklaration:extern int bin;
-
Deine "Deklaration" ist auch eine Definition, angenommen, sie steht in einem Block oder Global.
Hm. Interessant.
-
Quatsch.
-
wima_carsi38 schrieb:
Nochmal Danke an euch,
also ich denke die Zahlen sind einfach zu groß. Ich versuch da anscheinend zu viel rauszukitzeln. Ich lasse das Programm jetzt so wie es ist. Kann leider nicht mehr so viel Zeit in das Programm investieren. Ich lass einfach nur Werte für a bis 30 zu am besten...
50 über 8 ist zum Beispiel eine 9 stellige Zahl
50 über 25 ist 15 stellige Zahl.@essio
Rauskommt
bin ist 50
bin ist 1225
bin ist 19600
bin ist 230300
bin ist 2118760
bin ist 15890700
bin ist 99884400
bin ist 7738
c ist 7738
Process returned 0 (0x0) execution time : 0.177 s
Press any key to continue.Warum wird die Zahl plötzlich kleiner? Liegt es an der Größe von "int"?
Eigentlich muss der Wert ja nach 15890700 noch größer werdenJo das liegt an int, int stellt glaube ich den kleinsten Speicherplatz für eine Zahl zur verfügung.
Ändere mal einfach das int auf long long.
Bei mir hats so geklappt
-
essio schrieb:
Jo das liegt an int, int stellt glaube ich den kleinsten Speicherplatz für eine Zahl zur verfügung.
Nein, diese Ehre gebührt den verschiedenen char-Datentypen. Oder bool, wenn man das noch Zahl nennen will. Und dazwischen gibt es noch short.
-
Ok, vielleicht ungenau ausgedrückt. Ich bin kein Experte, vorallem nicht in den Begriffen. Was ich meinte:
// global, vielleicht heisst das ja auch "block", keine Ahnung int foo = 42; int main() { // block int bar = 13; }
Das sind jedenfalls zwei Variablendefinitionen.
Ich habe das so komisch ausgedrückt, da ich mir nicht sicher war, wie sich das z.b. in Klassen (jaja, ich weiß, C-Forum) verhält:
class foo { int bar; // ist das eine Definition? Es gibt ja noch kein Objekt der Klasse foo. };
Ich freue mich über eine genau Aufklärung. Ein "Quatsch" ist nicht sehr hilfreich.
Ist es nicht irgendwie bescheuert, dass erwartet wird, dass gute, recherchierte Fragen gestellt werden, man dann aber auch mal eine ein-Wort-Antwort gibt?
-
Hyde++ schrieb:
Ist es nicht irgendwie bescheuert [...]?
Nee, das ist Wutz
-
Hab mir jetzt nicht alle Antworten durchgelesen und bitte daher um Verzeihung, sollte Dich schon jemand darauf hingewiesen haben:
Du Dividierst zwei float und speicherst das in ein Integer. Du subtrahierst ein float von einem integer. In der Regel macht der Compiler das auch mit, aber ich würde trotzdem darauf verzichten. Wenn es garnicht anders geht, caste es:float a=5., b=7.; int Result = (int)(a/b);
Zum Thema Code Aufräumen. Du kannst auch in einer Zeile mehrere Variablen eines Type definieren:
float a=5., b=7., *pa=&a; int ai = 5, bi = 7; /*Und so weiter*/
Wenn Du natives C programmieren willst, darst Du erst nach der letzten Deklaration einen Wert übergeben.