c++ hilfe bitte
-
heute in der schule hat mir der lehrer einen arbeitsauftrag gegeben, bei dem ich ein programm schreiben sollte das den ggT von 2 Zahlen heraus findet. Das hab ich dazu geschrieben:
#include <iostream> using namespace std; int main() { int Prim , a ; int b, i, j; cout <<"Groessere Zahl eingeben! \n" ; cin >> Prim ; int e[Prim]; int d[Prim]; cout <<"Kleinere Zahl eingeben! \n" ; cin >> a; for (b = 1; b < Prim; b++) //einfach alle Zahlen die kleiner als Prim und größer 0 { if ( Prim % b == 0) //will die Zahlen bei denen der Rest wenn man die größere Zahl durch sie dividiert 0 ist e[i] = b; i++; } if ( a % e[j] == 0) //jetzt dasselbe mit denen bei denen der Rest 0 war bei der kleineren Zahl { d[j] = e[j]; j++; } } //nun bräuchte ich einen Befehl der macht dass die größte Zahl davon übrig bleibt :( cout << "GGT von " << Prim <<" und " <<a <<" ist: \n"<< d[j] << endl; return 0; }Leider hats Fehler und stürtzt jedes mal ab wenn ichs starte

Wenn jemand Fehler findet oder den fehlenden Befehl kennt, helft mir bitte
-
Ich hab keine Ahnung wieso du Arrays benutzt...

Das geht so viel einfacher, mit dem modernen euklidischen Algorithmus (benutzt du den nicht ohnehin schon?).#include <iostream> int main() { int a, b; std::cin >> a >> b; if(a < b) //Wenn a kleiner b, dann vertausche std::swap(a, b); int rest; while(rest = a % b) //Während ein Rest übrig bleibt, lege diesen Rest in der Variable rest ab ... { a = b; //Und vertausche hier die Variablen b = rest; } std::cout << "GGT: " << b; }Natürlich ohne Null-Check oder Stream-Prüfung, das kannst du dann ja einbauen.
-
Sone schrieb:
Ich hab keine Ahnung wieso du Arrays benutzt...

Das geht so viel einfacher, mit dem modernen euklidischen Algorithmus (benutzt du den nicht ohnehin schon?).#include <iostream> int main() { int a, b; std::cin >> a >> b; if(a < b) //Wenn a kleiner b, dann vertausche std::swap(a, b); int rest; while(rest = a % b) //Während ein Rest übrig bleibt, lege diesen Rest in der Variable rest ab ... { a = b; //Und vertausche hier die Variablen b = rest; } std::cout << "GGT: " << b; }Natürlich ohne Null-Check oder Stream-Prüfung, das kannst du dann ja einbauen.
vielen dank

versteh euklidsicher algorithmus nicht und kannte auch die std dinger nicht
-
P.S.: VLAs sind nicht im Standard.
Was sind VLAs?
Das hier:int a[variable];Laut Standard muss zwischen diesen eckigen Klammern ein konstanter Ausdruck stehen (also ein zur Compile-Zeit bekannter). Das ist so gut wie immer ein Literal wie
500usw.Wahrscheinlich hast du als Compiler einen GCC, oder? Der unterstützt das.
Versuch also, dir sobald wie möglic dynamische Arrays wie
std::vectorund die anderen STL-Container anzusehen.Newble schrieb:
versteh euklidsicher algorithmus nicht und kannte auch die std dinger nicht

Der euklidische Algorithmus ist wie du siehst sehr einfach

Und da im Namensraum std die Standardbibliothek enthalten ist, wäre es definitiv nicht schlecht, sich das ebenfalls mal anzusehen.