Problem mit einer Schleife



  • 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