Problem beim Euklidischen Algorithmus
-
marco025 schrieb:
Müsste ich dann nicht vorher irgendwo d oder i definiert haben??
Nein,, da haste was verwechselt.. Ein printf("%i",i) sagt "gibt i als integer aus".. Ein printf("%i",d) sagt "gib d als integer aus".. Ein printf("%f",i) sagt "gib i als float aus"..
Das Zeichen nach % gibt den Datentyp an.. Nicht den Variablennamen..
-
Das Zeichen (der Formatspecifier) muss aber zum Datentyp der Variablen passen.
printf("%f",i) klappt nicht, wenn i ein int ist.
-
Okay, dankeschön für die Hilfe, ich hoffe es wird alles funktionieren
-
marco025 schrieb:
Okay, dankeschön für die Hilfe, ich hoffe es wird alles funktionieren
Wenns dann klappt, bitte nochmal zeigen!
Dann geht der Spaß erst los und alle Schulmeister sagen, was man daran noch besser machen könnte. Das solltest Du übrigens immer machen. Willst ja nicht bei der Note 1 nur meistens landen, sondern eine sichere 1 verteidigen. Das geht am besten, wenn Du den Tread nochmal fütterst und die verrücktesten Optimierungen folgen. Optimalerweise lernst Du den binary gcd kennen und Knuths Argument, weshalb man nicht if(a>b) braucht.
-
So es klappt, leider aber mit dem falschen Ergebnis, d.h er gibt 32156 aus, wie am anfang definiert und nicht die richtige Lösung
hier der code:
#include <stdio.h> main () { int a = 45823; int b = 32156; int c; while (c!=0) { c=a%b; a=b; b=c; } printf ("Der größte gemeinsame Teiler ist %i\n", b); }
-
Was meinst du, welchen Wert c im ersten Durchlauf in Zeile 7 hat?
-
Spontan würde ich sagen 0, bzw garkeinen, weil ich ihn ja vorher nicht definiert habe. Also würde ich sagen, dass es vllt besser wäre ne do... while schleife einzubauen, oder?? Dann würde es so aussehen, gibt mir aber als antwort nur die 0.
#include <stdio.h> main () { int a = 45819; int b = 54873; int c; do { c=a%b; a=b; b=c; } while (c!=0); printf ("Der größte gemeinsame Teiler ist %i\n", b); }
-
c kann irgendeinen Wert aus dem int-Bereich haben, in deinem Fall wird es aber gerade 0 sein.
Dadurch wird die Schleife erst gar nicht durchlaufen und somit wird nichts berechnet.Wie wärs mit deinem ersten Programm (while-Schleife) und c vor der Schleife mit a%b initialisieren.
-
do-while statt while ist in diesem Fall schon mal besser, du hast das Abbruchkriterium aber falsch eingesetzt und auch die Ergebnisvariable ist falsch, hast also eigentlich ziemlich viel falsch in den wenigen Zeilen.
Probiere malwhile (b!=0); printf ("Der größte gemeinsame Teiler ist %i\n", a);
und denke über die Änderungen nach.
-
So es läuft jetzt endlich, und auch richtig:
#include <stdio.h> main () { int a = 2394; int b = 4242; int c; do { c=a%b; a=b; b=c; } while (b!=0); printf ("Der größte gemeinsame Teiler ist %i\n", a); }
Danke für die Hilfe von allen, und wenn ich noch Verbesserungsvorschläge habt nur her damit, ich kann ja nur dazu lernen, was mir hoffentlich bei den nächsten Sachen weiterhilft
-
Es ist viel üblicher, so einzurücken, daß die Klammern sich sehen können.
#include <stdio.h> int main () { int a = 2394; int b = 4242; int c; do { c=a%b; a=b; b=c; } while (b!=0); printf ("Der größte gemeinsame Teiler ist %i\n", a); }
[/quote]