Fibonacci Reihe
-
Ich mache gerade meine Hausübung und habe damit ein kleines Problem.
Das programm (mit devc++ geschrieben)soll die Fibonacci Reihe mit
1 beginnend bis zu einem bestimmten Höchstwert aufgezählen und diesen
nicht überschreiten. Jetzt zu meinen Problem:
Wenn ich mein Programm Ausführe beginnt das Programm mit 3
und lässt 1,1 und 2 aus und es wird nicht bis zum Höchstwert
gerechnet sondern genau 1-Mal zu viel.
Hier mein Programm:#include <stdio.h>
#include <stdlib.h>int main()
{
int a, b, c, h;
printf("H\x94""chstwert eingeben: ");
scanf("%d", &h);
a=1;
b=1;
if(h >= 0)
{
while(c <= h)
{
a=b;
b=c;
c=a+b;
printf("%d", c);
printf("\n");
}
printf("\n");
}else
{
printf("Der H\x94""chstwert muss mindestens 1 betragen\n\n");
}
system("pause");
}
-
möchtest du C oder C++ programmieren?
-
Wir programmieren in der Schule mit devc++
allerdings nur mit c begriffen
-
...
-
in C:
#include <stdio.h> #include <stdlib.h> void swap( int* a, int* b ) { int tmp = *a; *a = *b; *b = tmp; } int main() { int prev = 0, fibo, h; int output = 0; printf("H\x94""chstwert eingeben: "); scanf("%d", &h); for( fibo = 1; fibo <= h; swap( &(prev += fibo), &fibo ), output = 1 ) printf( "%d\n", fibo ); if( !output ) printf("Der H\x94""chstwert muss mindestens 1 betragen\n\n"); system("pause"); }
-
_) schrieb:
Ich mache gerade meine Hausübung und habe damit ein kleines Problem.
Das programm (mit devc++ geschrieben)soll die Fibonacci Reihe mit
1 beginnend bis zu einem bestimmten Höchstwert aufgezählen und diesen
nicht überschreiten. Jetzt zu meinen Problem:
Wenn ich mein Programm Ausführe beginnt das Programm mit 3
und lässt 1,1 und 2 aus und es wird nicht bis zum Höchstwert
gerechnet sondern genau 1-Mal zu viel.Ein großes Problem ist, dass c am Beginn der
while()
-Schleife nicht initialisiert ist - es kann also jeden möglichen int-Wert angenommen haben.Ansonsten: Nimm Dir Stift und Papier und mal Dir auf, welche Variable wann welchen Wert annimmt und ausgegeben wird.
Vielleicht kannst Du an der Initialisierung was ändern, evtl. die Ausgabe nach hinten schieben, oder nach vorne ziehen...printf("%d", c); printf("\n");
ziehst Du zusammen zu
printf("%d\n", c);
-
danke für die hilfe funktioniert wirklich einwandfrei
-
Ich denke nicht das eher nicht stört da wir es in der schule
schon öfters so gemacht haben aber ich werde es mal versuchen
-
Dieser Thread wurde von Moderator/in volkard aus dem Forum C++ (auch C++0x und C++11) in das Forum C (C89, C99 und C11) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Ich habe mit meinen programm immer noch das selbe problem und zwar wenn ich
es ausführe sollte es so aussehen:
Ich nehm jetzt als Höchstwert 15 anHöchstwert eingeben : 15
1
1
2
3
5
8
13
bei mir sieht es allerdings so ausHöchstwert eingeben : 15
3
5
8
13
21
-
Erstes problem behoben jetzt funktioniert nur noch das mit dem höchstwert nicht richtig also wenn der z.B 15 ist dann hört das programm nicht bei 13 sondern bei der nächsten zahl darüber also 21 auf weiß da jemand wie man das behebt
-
Swordfish schrieb:
while( ( c = a + b ) < max )
Oder b ausgeben.
-
Hab das jetzt auch geschafft danke an alle die mir geholfen haben
Hier das fertige programm falls jemand das selbe problem hat:#include <stdio.h>
#include <stdlib.h>int main()
{
int a, b, c, h;
printf("H\x94""chstwert eingeben: ");
scanf("%d", &h);
a=1;
b=1;
c=1;
if(h >= 1)
{
printf("1\n");
printf("1\n");
while(c <= h -a)
{
a=b;
b=c;
c=a+b;
printf("%d", c);
printf("\n");
}
printf("\n");
}else
{
printf("Der H\x94""chstwert muss mindestens 1 betragen\n\n");
}
system("pause");
}
-
Furble Wurble hat's Dir gesagt. Die Variable c ist am Anfang der while-Schleife nicht initialiesert. Sie kann also jeden Wert innehaben. Initialisiere dort, wo Du die Variablen a und b mit Werten belegts, c mit 0.
-
so:
#include <stdio.h> #include <stdlib.h> int main() { int a, b, c, h; printf("H\x94""chstwert eingeben: "); scanf("%d", &h); //a=1; braucht es nicht, da a mit b überschrieben wird b=0; // b ist der Vorgänger von c also =0; -> 0 1 1 2 3 5 ... c=1; // c ist die erste Fibonaccizahl, also =1 if(h >= 0) { while(c <= h) { printf("%d", c); // zunächst die aktuelle Fibo-Zahl ausgeben printf("\n"); a=b; // ... danach erst eine neue berechnen b=c; c=a+b; } // am Anfang der Schleife wird geprüft, ob diese Zahl (c) nicht zu groß wird printf("\n"); } else { printf("Der H\x94""chstwert muss mindestens 1 betragen\n\n"); } system("pause"); }
-
Werner_logoff schrieb:
so:
#include <stdio.h> #include <stdlib.h> int main() { int a, b, c, h; printf("H\x94""chstwert eingeben: "); scanf("%d", &h); //a=1; braucht es nicht, da a mit b überschrieben wird b=0; // b ist der Vorgänger von c also =0; -> 0 1 1 2 3 5 ... c=1; // c ist die erste Fibonaccizahl, also =1 if(h >= 0) { while(c <= h) { printf("%d", c); // zunächst die aktuelle Fibo-Zahl ausgeben printf("\n"); a=b; // ... danach erst eine neue berechnen b=c; c=a+b; } // am Anfang der Schleife wird geprüft, ob diese Zahl (c) nicht zu groß wird printf("\n"); } else { printf("Der H\x94""chstwert muss mindestens 1 betragen\n\n"); } system("pause"); }
danke das du mein programm verbessert hast
kommt sicher besser rüber als wenn ich dem lehrer mein programm zeige
-
kommt sicher besser rüber als wenn ich dem lehrer mein programm zeige
Noch besser ist, wenn du etwas gelernt hast.