Ich will eine natürliche Zahl eingeben z.B. 5261 und möchte mir durch eine Funktion die größte Zahl ausgeben lassen, die in der Zahl vorkommt. In diesem Fall sollte die Ausgabe 6 lauten.
wenn ich jetzt so deklariere:
C++:
int zahl= 5261;
kann ich ja nicht eine Abfrage in der Form:
C++:
for (int i=0;i<5;i++) { if (zahl[i]<zahl[i+1]) ....... ...... }
gibt es da eine andere Möglichkeit oder muss ich bei dieser Aufgabe mit nem Array arbeiten. Weil in der aufgabe steht:"... von einer gegebenen natürlichen Zahl".. und das heißt für mich zahl = x und nicht int zahl[]={x,....,..} -- gruß chris
nehmts mir net übel ich bin nen Anfänger und seh manchmal den Wald vor lauter Bäumen nicht mehr ;)
Hast du auch verstanden, was das macht? -- All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
Naja, ich bin die ganze Zeit noch dran versuchen es zu verstehen... ich denke mal es geht nach dem Prinzip das eine Zahl aufgeteilt wird, aber ganz verstanden hab ich es noch nicht
Zitat:
typecast postete Ungetestet:
C++:
unsigned funkt(unsigned x) { unsinged ret = 0; unsigned a = x % 10; // Zahl modulo 10, das heißt wenn // die Zahl durch 10 glatt teilen lässt ist a = 0, ansonsten rest. while (x > 0) { //solange x >0 if (a > ret) ret = a; // wenn a>0 dann übernimmt ret den wert von a x /= 10; // x = x / 10 a = x % 10; } return ret; }
-- gruß chris
nehmts mir net übel ich bin nen Anfänger und seh manchmal den Wald vor lauter Bäumen nicht mehr ;)
Also ich kann es jetzt nachvollziehen... nur bei zweistelligen Zahlen.. ich habe ein Problem.. wenn ich bspw. 120 habe
C++:
unsigned funkt(unsigned x) // x =120 { unsinged ret = 0; // ret = 0 unsigned a = x % 10; // a = 0 while (x > 0) { //ja if (a > ret) ret = a; // nein a = 0 und ret ist gleich 0 //und was passiert jetzt???wo gehts weiter
x /= 10; a = x % 10; } return ret; }
x =120 ret = 0 a = 0 -- gruß chris
nehmts mir net übel ich bin nen Anfänger und seh manchmal den Wald vor lauter Bäumen nicht mehr ;)
Als nächstest wir x durch 10 geteilt. D.h. die letzte Stelle verschwindet (Achtung Ganzzahldivision: aus 105 würde 10 und nicht 10.5 werden). Dann wird wieder x modulo 10 gemacht, was 2 ergibt. Es wird also immer die letze Stelle der Zahl genommen. Das läuft solange, bis x == 0 ist. Dann bricht die Schleife ab. -- All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
dann wird die zahl %10 gerechnet... das heisst die vorderen stellen werden weggeschmissen übrig bleibt die 2... wenn die 2 grösser ist als aktuelles ret (was ja am anfang 0 ist) übernimmt er die 2...
so nächster schritt: x wird durch 10 geteilt (beim integerrechnungen werden die nachkommastellen einfach weggeschmissen) es bleibt also 471 übrig... hiervon wird wird nur die letzte stelle genommen (indem man %10 rechnet) und vergleicht dann die 1 mit der 2 int ret... diesmal ist 2 grösser bleibt also unverändert...
der selbe spass wird so lange gemacht bis x/10 null ergibt... was dann passiert wenn ich x zum 5.mal durch 10 teile weil in dem beispiel die zahl ja nur 4 stellen hat... -- ...fleißig wie zwei Weißbrote