Einfaches programmieren?
-
Ich bin wohl ein hoffnungsloser Fall
Ich habe einen Onlinekurs in cpp gemacht und verstehe nicht was genau da falsch ist
sorry falls ich das falsche Forum ausgewählt habe.Beispiel:
// Es wurde 5 7 9 11 12 eingegeben
Ausgabe:
Zahl 5 ist eine Fibonaccizahl
Zahl 7 ist keine Fibonaccizahl
Zahl 9 ist keine Fibonaccizahl
Zahl 11 ist keine Fibonaccizahl
Zahl 12 ist keine Fibonaccizahlund geschrieben hab ich:
#include <iostream>
#include <cstdio>using namespace std;
int main() {
int wert, wert2, wert3, wert4, wert5;
cout << "Bitte geben Sie 5 Zahlen zwischen 1 und 50 ein:";
cin >> wert;
cin >> wert2;
cin >> wert3;
cin >> wert4;
cin >> wert5;
switch(wert, wert2, wert3, wert4, wert5) {
{
case 0:
case 1:
case 2:
case 3:
case 5:
case 8:
case 13:
case 21:
case 34:
cout << "ist eine Fibonaccizahl" << endl;
break;
case 4:
case 6:
case 7:
case 9:
case 10:
case 11:
case 12:
case 14:
case 15:
case 16:
case 17:
case 18:
case 19:
case 20:
case 22:
case 23:
case 24:
case 25:
case 26:
case 27:
case 28:
case 29:
case 30:
case 31:
case 32:
case 33:
case 35:
case 36:
case 37:
case 38:
case 39:
case 40:
case 41:
case 42:
case 43:
case 44:
case 45:
case 46:
case 47:
case 48:
case 49:
case 50:
cout << " keine Fib.Zahl" << endl;
break;
default:
cout << " Wert ungueltig!" << endl;
}}
fflush(stdin);
getchar();
return 0;
}
Wieso nur ein Satz ausgegeben wird ist mir rätzenhaft, könnt ihr mir helfen?
-
topfklee2 schrieb:
Ausgabe:
Zahl 5 ist eine Fibonaccizahl
Zahl 7 ist keine Fibonaccizahl
Zahl 9 ist keine Fibonaccizahl
Zahl 11 ist keine Fibonaccizahl
Zahl 12 ist keine FibonaccizahlAlso die Ausgabe macht doch genau das, was sie soll
Die Ausgabe bei 5 ist eine andere als beim Rest.
-
topfklee2 schrieb:
Ich bin wohl ein hoffnungsloser Fall
Unwahrscheinlich.
topfklee2 schrieb:
Ich habe einen Onlinekurs in cpp gemacht und verstehe nicht was genau da falsch ist
Vielleicht ist der Onlinekurs hoffnungslos.
topfklee2 schrieb:
sorry falls ich das falsche Forum ausgewählt habe.
Vermutlich. Soll es C oder C++ sein?
Vielleicht war eher sowas gemeint?
#include <iostream> using namespace std; bool istFibonacciZahl(int n){ int a=1,b=1; while(b>=a){ if(b==n) return true; int c=a+b; a=b; b=c; } return false; } int main() { cout << "Bitte geben Sie 5 Zahlen zwischen 1 und 50 ein:"; for(int i=0;i<5;++i){ int kandidat; cin>>kandidat; cout<<kandidat<<" ist "; if(istFibonacciZahl(kandidat)) cout<<'k'; cout<<"eine Fibonacci-Zahl.\n"; } return 0; }
Aber die Aufgabenstellung halte ich für recht ungeschickt, zu viele Fallstricke, viel zu viele anscheinend offensichtliche Lösungen, die einen nicht weit tragen.
Bitte geben Sie 5 Zahlen zwischen 1 und 50 ein:5 7 13 20 21 5 ist keine Fibonacci-Zahl. 7 ist eine Fibonacci-Zahl. 13 ist keine Fibonacci-Zahl. 20 ist eine Fibonacci-Zahl. 21 ist keine Fibonacci-Zahl. Process returned 0 (0x0) execution time : 4324.554 s Press any key to continue.
Jo, klappt vermutlich. Sollte es aber noch testen mit den beiden kleinstmöglichen und den beiden größtmöglichen Fibonacci-Zahlen, die in einen in passen und deren Nachbarn, nur zur Sicherheit.
-
Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum C++ (auch C++0x und C++11) verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
volkard schrieb:
Bitte geben Sie 5 Zahlen zwischen 1 und 50 ein:5 7 13 20 21 5 ist keine Fibonacci-Zahl. 7 ist eine Fibonacci-Zahl. 13 ist keine Fibonacci-Zahl. 20 ist eine Fibonacci-Zahl. 21 ist keine Fibonacci-Zahl. Process returned 0 (0x0) execution time : 4324.554 s Press any key to continue.
Jo, klappt vermutlich. Sollte es aber noch testen mit den beiden kleinstmöglichen und den beiden größtmöglichen Fibonacci-Zahlen, die in einen in passen und deren Nachbarn, nur zur Sicherheit.
die ausgabe hier ist aber falsch! 5 ist eine Fibonacci-Zahl, 7 aber nicht.
also alles genau falsch rum
-
int fibonaccis[99]; fibonaccis[0] = 0; fibonaccis[1] = 1; fibonaccis[2] = 2; for (int i = 3; i <= 99; i++) { fibonaccis[i] = (fibonaccis[i - 1] + fibonaccis[i - 2]); // dein fibonacci - array } bool isfib(int eingabe){ // testet ob zahl im array vorkommt for (int c = 0; c <= eingabe; c++) { if (fibonaccis[c] == eingabe) { return true; } } return false; }
du kannst dann über:
bool fibonacci_ja_oder_nein = isfib(7); //statt 7 jede beliebige zahl, sollte klappen
herausfinden, ob es eine fibonacci - zahl aus dem array ist.
geht wohl noch eleganter, da du ja hier eine array begrenzung von 100 hast, aber
da du eh nur bis 50 abfragst egal.Gruß
Player894
-
Wenn es nur um ints geht, die Wertemenge also sehr begrenzt ist, dürfte die einfachste Methode ein std::set sein, etwa
#include <algorithm> #include <iostream> #include <limits> #include <set> std::set<int> generate_fibonacci_numbers() { std::set<int> fibs; unsigned i = 1, j = 1; do { fibs.insert(static_cast<int>(j)); i += j; std::swap(i, j); } while(j <= static_cast<unsigned>(std::numeric_limits<int>::max())); return fibs; } int main() { std::set<int> fibonacci_numbers = generate_fibonacci_numbers(); int x; while(std::cin >> x) { bool x_ist_fib = fibonacci_numbers.find(x) != fibonacci_numbers.end(); std::cout << x << " ist " << (x_ist_fib ? "" : "k") << "eine Fibonacci-Zahl.\n"; } }
Wenn es um größere Zahlenbereiche geht, die Wertemenge also unbegrenzt ist, ist dieser Weg allerdings nicht mehr sinnvoll. In dem Fall dürfte der Weg über den goldenen Schnitt sinnvoller sein -- da
F(n) = floor(φn / sqrt(5) + 0.5)
und im Umkehrschluss
n(F) = floor(log(F * sqrt(5) + 0.5) / logφ)
ist, ist eine Zahl x eine Fibonacci-Zahl, wenn
F(n(x)) = x
gilt.