Problem mit einer Schleife



  • Also ich hab mir heut mal angeschaut wie c++ so n bissl funktioniert und habe dann versucht etwas zu programmieren um Fibonacci-Zahlen zu berechnen
    es funktioniert auch so weit, aber wenn man 47 als Zahl eingibt kommt nicht die erwartete Zahl heraus...

    Außerdem wollt ich mal wissen, wie ich das Programm nachdem die Lösung rauskommt, wieder eine neue Zahl eingeben kann, also quasie das Programm wiederholen...

    #include<iostream>
      using namespace std;
    
      int main()
      {
          int y=0;
    	  int z=1;
    	  int e=y;
    	  int f=z;
    	  int b;
    	  int a;
    		  cout<<"Gebe eine Zahl ein\n";
    		  cin>>a;
    		  if(a>0)
    		  {
    			  for(int i=0;i<a-1;i=i+1)
    			  {
    				  b=e+f;
    				  e=f;
    				  f=b;
    			  }
    		  }
    		  if(a==0)
    		  {
    			  b=y;
    		  }
    		  if(a==1)
    		  {
    			  b=z;
    		  }
    		  cout<<b<<"\n";
      }
    

    Danke für die Hilfe



  • moelle92 schrieb:

    Außerdem wollt ich mal wissen, wie ich das Programm nachdem die Lösung rauskommt, wieder eine neue Zahl eingeben kann, also quasie das Programm wiederholen...

    Ja, einfach ne while oder do/while Schleife um alles machen.



  • hatte ich auch schon versucht, aber als ich es denn ausprobiert hab, ging es gar nicht, sondern es wiederholten sich nur ein paar Zeilen, immer und immer wieder und ziemlich schnell^^



  • Frage komm raus, du bist umzingelt!



  • Ich frage mich, wieso es b=e+f heisst. Es muss doch z=f-y heissen. Das geht doch aus dem Code Glasklar hervor.



  • moelle92 schrieb:

    es funktioniert auch so weit, aber wenn man 47 als Zahl eingibt kommt nicht die erwartete Zahl heraus...

    Weil das Ergebnis nicht in einen int paßt. Das ist ok so.



  • Also des mit dem int hab ich verstanden... Ich habe jetzt statt dem int ein unsigned long drinne. Aber jetzt funktionierts nur bis zu 48 ...
    Ist unsigned long auch zu kurz?? gibts da noch andre möglichkeiten?

    die Funktion müsste soweit stimmen...
    ich hab jetzt auch ein return mit eigebaut innerhalb while/do

    #include<iostream>
      using namespace std;
    
      unsigned long main()
      {
          unsigned long y=0;
    	  unsigned long z=1;
    	  unsigned long e=y;
    	  unsigned long f=z;
    	  unsigned long b;
    	  unsigned long a;
    	  char m;
    			  cout<<"Gebe eine Zahl ein\n";
    			  cin>>a;
    			  if(a>0)
    			  {
    				  for(unsigned long i=0;i<a-1;i=i+1)
    				  {
    					  b=e+f;
    					  cout<<b<<"\n";
    					  e=f;
    					  f=b;
    				  }
    			  }
    			  if(a==0)
    			  {
    				  b=y;
    			  }
    			  if(a==1)
    			  {
    				  b=z;
    			  }
    			  cout<<b<<"\n";
    			  cin.clear();
    			  cout<<"Nochmal? j/n\n";
    			  cin>>m;
    			  if(m=='j')
    			  {
    				  return main();
    			  }
    			  else if(m=='n')
    			  {
    				  return 0;
    			  }
      }
    

    Aber irgendiwe funktioniert es noch nich so ganz mit dem return, bei manchen kommt dann wieder ein anderes Ergebnis raus.
    Also wäre ein User so freundlich und könnte mal nen Blick drauf werfen und mir sagen was ich falsch gemacht habe....



  • moelle92 schrieb:

    Also des mit dem int hab ich verstanden... Ich habe jetzt statt dem int ein unsigned long drinne. Aber jetzt funktionierts nur bis zu 48 ...
    Ist unsigned long auch zu kurz?? gibts da noch andre möglichkeiten?

    Wieviele Stellen brauchst Du denn?



  • naja theoretisch so viel wies geht...
    wie lang gehts denn bei c++ ??



  • Je nach Compiler könntest du "unsigned long long" bzw. "unsigned __int64" benutzen.



  • vielen Dank Th69 ich habs etz mit ner 13-stelligen Zahl versucht und es hat geklappt

    ich benutze Visual C++ wie lang sind dann die variablen Th69 maximal?



  • moelle92 schrieb:

    naja theoretisch so viel wies geht...
    wie lang gehts denn bei c++ ??

    C++ selbst hat mit unsignes long long 19 Stellen (je nach Compiler auch weniger, eher nicht mehr). Mit sowas http://gmplib.org/ gehen aber auch Millionen und abermillionen von Stellen. long double hat in der Mantisse auch nur 64 Bit, kann also nicht mehr.



  • Also mehr geht mit visual nicht oder?



  • moelle92 schrieb:

    Also mehr geht mit visual nicht oder?

    Mit eingebauten Typen nicht. Nein. Aber eben mit volkard's Link hast du etwas, was lediglich auf Ressourcen Ebene beschränkt ist. Also wenn es dir da dann noch zu ungenau wird, dann kannst du dir einfach das System aufrüsten und weiter arbeiten. 😉


Anmelden zum Antworten