Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Problem Sortieren einer natürlichen Zahl

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
02.06.2004, 10:48 Uhr
chrisuni



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 ;)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
02.06.2004, 10:53 Uhr
typecast
aka loddab
(Operator)


Ungetestet:

C++:
unsigned funkt(unsigned x)
{
  unsinged ret = 0;
  unsigned a = x % 10;
  while (x > 0) {
     if (a > ret) ret = a;
     x /= 10;
     a = x % 10;
  }
  return ret;
}


--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
02.06.2004, 10:56 Uhr
chrisuni



Pefekt funzt.. danke´.
--
gruß chris

nehmts mir net übel ich bin nen Anfänger und seh manchmal den Wald vor lauter Bäumen nicht mehr ;)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
02.06.2004, 11:00 Uhr
typecast
aka loddab
(Operator)


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)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
02.06.2004, 11:21 Uhr
chrisuni



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 ;)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
02.06.2004, 11:33 Uhr
chrisuni



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 ;)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
02.06.2004, 12:51 Uhr
typecast
aka loddab
(Operator)


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)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
02.06.2004, 12:54 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


nehmen wir mal 4712...
am anfang ist ret=0;

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
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
02.06.2004, 13:06 Uhr
chrisuni



oki habs verstanden... danke, hab nur das else in dem code gesucht

C++:
unsigned funkt(unsigned x)              
{
  unsinged ret = 0;                          
  unsigned a = x % 10;                    
  while (x > 0) {                        
     if (a > ret) ret = a;               //wenn a >ret "nicht wahr ist"
                                            
// dann geht es hier weiter, dachte dann müsste nen 'else' hierhin
     x /= 10;                              
     a = x % 10;
  }
  return ret;
}





danke
--
gruß chris

nehmts mir net übel ich bin nen Anfänger und seh manchmal den Wald vor lauter Bäumen nicht mehr ;)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
02.06.2004, 15:10 Uhr
0xdeadbeef
Gott
(Operator)



C++:
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>

int main() {
  int x;
  std::string s;
  std::stringstream sin;

  std::cout << "Zahl: " << std::flush;
  std::cin >> x;

  sin << x;
  s = sin.str();

  std::sort(s.begin(), s.end());

  std::cout << "Höchste Ziffer: " << *(s.rbegin()) << std::endl;
  
  return 0;
}


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: