Anfänger Bsp.
-
Hallo!
Da mir hier schon einmal so gut weitergeholfen wurde, wende ich mich nun wieder an euch. Ich versuche mir anhand eines Buches C++ selbst beizubringen. Ich steh noch ziemlich am Anfang, genauergesagt bei den Funktionen
Ich soll jetzt hier folgendes Bsp lösen und hab irgendwie noch keine Ahnung wie ich das anpacken soll:
"Schreiben Sie eine Funktion int ggt(int a, int b), die den größten gemeinsamen Teiler der beiden natürlichen Zahlen a und b berechnet. Verwenden Sie dazu keine Schleifen"also a und b sollen eingelesen werden, ich darf auch keine externen bibliotheken verwenden.
Bitte helft mir das Bsp zu lösen.
danke
MFG
-
Wie weit bist du denn selber schon gekommen?
-
So langsam koennte man doch ins Forum einbauen, dass automatisch auf jedes Thema, in dessen Titel 'Anfaenger' vorkommt, automatisch mit folgendem Satz geantwortet wird:
Hier wird keiner deine Aufgaben machen, sondern dir nur bei konkreten Problemen helfen, welche du anhand deines Quelltexts schildern kannst.
-
Der Link oben soll wahrscheinlich http://de.wikipedia.org/wiki/Gr%C3%B6%C3%9Fter_gemeinsamer_Teiler_und_kleinstes_gemeinsames_Vielfaches heissen.
-
Ich habs halt nicht so mit URLs und Forensoftware und so.
-
Ich hab dir mal deine Hausaufgaben gemacht:
int ggt(int a,int b) { int teiler=0; if (a < b) teiler = a; if (a > b) teiler = b; if (a == b || a < 1 || b < 1 ) {return -1;} // bei ungültiger Eingabe wird -1 ausgegeben for (;(a%teiler!=0)||(b%teiler!=0);teiler--) // wenn der rest von Zahl1 oder Zahl2 / teiler NICHT 0 ist, // teiler um 1 verkleinern und erneut versuchen { if (teiler == 1) {return 1;} // wenn teiler 1 -> return 1 } return teiler; }
-
franz_c++ schrieb:
"[...]Verwenden Sie dazu keine Schleifen"
-
Leicht am Ziel vorbeigeschossen.
Verwenden Sie dazu keine Schleifen
-
Nabend,
er soll es rekursiv berechnen. Schau auf die gepostete Wikiseite, du findest
dort uebrigens auch den entsprechenden rekursiven Algorithmus (Euklidischer
Algorithmus).gruss
v R
-
unsigned int ggT(unsigned int a, unsigned int b){ if(b == 0) return a; else return ggT(b, a % b); }
-
Hmm Euklidischer Algorithmus wäre das was am einfachsten zu implementieren ist.
unsigned long gcd(unsigned long a, unsigned long b) { return (b == 0 ? a : gcd(b, a % b)); }
...
-
t3amkill3r schrieb:
So langsam koennte man doch ins Forum einbauen, dass automatisch auf jedes Thema, in dessen Titel 'Anfaenger' vorkommt, automatisch mit folgendem Satz geantwortet wird:
Hier wird keiner deine Aufgaben machen, sondern dir nur bei konkreten Problemen helfen, welche du anhand deines Quelltexts schildern kannst.
sei gusch bub!
-
naja, geht aber noch kürzer, außerdem sind bei ggT und kgV auch negative Zahlen zulässig, also wird das "unsigned" nicht wirklich benötigt:
long ggT(long a, long b) { return (b == 0 ? a : ggT(b, a % b)); } long _abs(long x) { return (x < 0 ? x * -1 : x); } long kgV(long a, long b) { return (_abs(a * b) / ggT(a, b)); }
-
Am besten bringst Du mal die typischen mathematischen Grundlagenspielchen hinter Dich, schau mal bei Volkard vorbei. http://www.volkard.de/vcppkold/inhalt.html
z.B. http://www.volkard.de/vcppkold/rekursion.html