Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Anzahl der Stellen einer Zahl? (ohne String-Klasse)

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 < [ 2 ]
000
30.04.2005, 00:17 Uhr
~Mike-xp
Gast


Hallo zusammen!

Wir müssen als Aufgabe in C++ die Klasse String selber programmieren. Leider hapert's bei mir jetzt an der append-Funktion.
Wie kann ich die Anzahl Stellen einer int-Zahl bzw. einer double-Zahl herausfinden? Oder gibt es eventuell eine einfachere Möglichkeit, dass ich gleich die ganze int-Zahl in ein char bekomme? Leider dürfen wir eben keine Funktionen aus der Klasse string verwenden...

Wäre super, wenn jemand was wüsste!

Vielen Dank und Gruss, Mike
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
30.04.2005, 00:54 Uhr
~CDW
Gast


Anzahl der Stellen:
möglich wäre z.B sowas:

Code:
Variablen:stellenzaheler,Zahl

Solange Zahl größer 10 wiederhole:
     Zahl gleich Zahl durch zehn;
     erhöhe den Stellenzaeler;


als letztes nochmal den Stellenzaehler erhöhen (weil die letze Stelle (0 bis 9) nicht berücksichtigt wird.

Pseudo C

Code:

while(zahl>10){
zahl=zahl/10;
stellenzaehler:=stellenzaehler+1;
}
stellenzaehler:=stellenzaehler+1;



wenn man die schleife noch in der Art erweitert, dass das ergebnis einer Modulo devision+48 in z.B
einem CharArray gespeichert wird, hat man gleich auch noch praktisch die Zahl in eine C-String konvertiert (und kennt auch die Länge des Strings).
Beispiel:

Zahl:144563 Modulo 10
Rest = 3;Rest=3+48; damit ist schon eine ASCII Zifferdarstellung
14456 Modulo 10
Rest=6; Rest=6+48

und so weiter... wenn man z,B ein Array füllen würde, dann:
3 6 5 4 1
also komplett umgekehrt... braucht man noch umzustellen und schon hat man seine ASCII Zahl.


Bearbeitung von typecast:
Tags korrigiert

Dieser Post wurde am 30.04.2005 um 10:31 Uhr von typecast editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
30.04.2005, 01:53 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

Wie kann ich die Anzahl Stellen einer int-Zahl bzw. einer double-Zahl herausfinden?


für ne Ganzzahl
Wenn 0 dann 1 an sonst log(abs(Zahl))+1

für double müsste man sich was sinnvoles überlegen denn da sind ja fast immer rundungfehler drin
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
30.04.2005, 07:44 Uhr
~Mike-xp
Gast



Zitat von ~CDW:
wenn man die schleife noch in der Art erweitert, dass das ergebnis einer Modulo devision+48 in z.B
einem CharArray gespeichert wird, hat man gleich auch noch praktisch die Zahl in eine C-String konvertiert (und kennt auch die Länge des Strings).


Das wäre natürlich genial! Aber wie weiss ich, wie gross ich das char-Array machen muss? Oder gibt es da eine Möglichkeit, dass ich das dynamisch vergrössern kann??

Sorry, wenn das jetzt eine blöde Frage war, aber ich bin leider noch blutiger Anfänger...

Vielen Dank für eure Hilfe!

Gruss Mike
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
30.04.2005, 19:20 Uhr
Pablo
Supertux
(Operator)


Die Anzahl der Stellen einer int Zahl? Mit dem 10log.


C++:
#include <math.h>

int anzahl(int zahl)
{
    return 1 + (int) (log(abs(zahl))/log(10));
}



//edit: windalf hat auch die Lösung hingeschrieben, allerdings ist log der natürliche und nicht der 10er log.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 30.04.2005 um 19:23 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
30.04.2005, 20:03 Uhr
~Mike-xp
Gast


Hallo Pablo!

Cool, vielen Dank für den Hinweis!

Ich verwende folgenden Code:


C++:
int totalDigits = 1 + (int)(log(val)/log(10));


Leider spuckt mir der Compiler aber folgenden Fehler aus:

fFHBB\C++\Cstring\Cstring\cstring.cpp(95): error C2668: 'log': Mehrdeutiger Aufruf einer überladenen Funktion

OK, ich weiss, was überladene Funktionen sind usw, aber wie ist die Abhilfe hier??

Vielen Dank und Gruss
Mike
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
30.04.2005, 20:25 Uhr
Pablo
Supertux
(Operator)


hast du cmath includiert? Oder hast du using namespace std; irgendwo?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
30.04.2005, 23:58 Uhr
~Mike-xp
Gast


Hallo Pablo

Ich bin einfach zu doof zum programmieren... log erwartet einen double - ich aber hab einen integer.

C++:
int totalDigits = 1 + (int)(log((double)val)/log((double)10));

Schon funzt es

Danke für die Hilfe!!!

Hättest du eventuell noch einen Tipp, wie ich so was ähnliches bei double machen könnte?

Vielen Dank und Gruss, Mike
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
01.05.2005, 00:04 Uhr
Pablo
Supertux
(Operator)


Mit double habe ich keine Ahnung, so etwas (die Geschichte mit dem log) ist nicht möglich.

Ich denke, du einzige Form ist, wenn du Bit für Bit die Variable untersuchst, also unterusche die Exponente Bits und die Mantisse.

Übrigens, ich würde es so ändern:


C++:
int totalDigits = (val < 0 ? 1 : 0) + 1 + (int)(log((double) abs(val))/log(10.0));



das abs(val) ist notwendig, oder hast du schon mal einen Logarithmus einer negativen Zahl gesehen, die in |R liegt?
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 01.05.2005 um 01:05 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
01.05.2005, 00:46 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)



Zitat:

das abs(val) ist notwendig, oder hast du schon mal ein Logarithmus einer negativen Zahl gesehen, die in |R liegt


Mir ist gestern einer über den Weg gelaufen aber der war so schnell wieder im Undefiniert das ich ihn nichts fragen konnte...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ 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: