AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

"Zeichen" im Integer

Ein Thema von xZise · begonnen am 19. Jan 2007 · letzter Beitrag vom 19. Jan 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#1

"Zeichen" im Integer

  Alt 19. Jan 2007, 14:25
Wie kann man am schnellsten an die Länge eines Integers kommen, ohne Kommazahlen zu benutzen?
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Antigo

Registriert seit: 14. Mär 2005
274 Beiträge
 
#2

Re: "Zeichen" im Integer

  Alt 19. Jan 2007, 14:29
meinst du wieviele Ziffern eine Integer Zahl hat?

anzziffern:=length(inttostr(zahl));

aber ist nicht so grad die feine mathematische Art
Michael
"How should I know if it works? That's what beta testers are for. I only coded it."
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: "Zeichen" im Integer

  Alt 19. Jan 2007, 14:30
Moin Fabian,

ein integer ist auf einem 32-Bit-System immer 4 Byte lang.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

Re: "Zeichen" im Integer

  Alt 19. Jan 2007, 14:32
Ein Interger ist immer 4 Byte lang. Oder was verstehst du unter "Länge eines Integer"? Ich befrage mal meine Glaskugel und die meint du willst die Anzahl der Ziffern einer Zahl wissen. Bitte vor dem Posten etwas nachdenken, was man eigentlich will und / oder wo konkret das Problem ist. Dann kann man auch die Frage gescheit formulieren. Meist ergibst sich dann schon von selbst die Lösung, wenn man mal etwas darüber nachgedacht hat.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: "Zeichen" im Integer

  Alt 19. Jan 2007, 14:33
Du meinst die Länge der String-Repräsentation des Integers?

Würd ich so machen:

Delphi-Quellcode:
function GetStrToIntLength(x: Integer): Integer;
begin
  if x<0 then
  begin
    Result:=1;
    x:=abs(x);
  end
    else Result:=0;
  while x>0 do
  begin
    x:=x div 10;
    inc(Result);
  end;
end;
Müsste klappen.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#6

Re: "Zeichen" im Integer

  Alt 19. Jan 2007, 14:36
Okay... Also das meinet ich nicht @ Seehase
Ich meinte, wie viele Ziffern ein Integer ohne die führenden Nullen hat.

(Ich hoffe jetzt ist es verständlich )

z.B.
12345
wäre dann
5 als Ergebnis

@ Antigo:
So geht es, aber ist es schnell genug?
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#7

Re: "Zeichen" im Integer

  Alt 19. Jan 2007, 14:39
Zitat von xZise:
@ Antigo:
So geht es, aber ist es schnell genug?
Das musst du uns sagen, ob es für deine Zwecke schnell genug ist. Vor allem hängt es von der durchschnittlichen Grösse deiner Zahlen ab, ob sich nun eine Divisionsschleife eher lohnt als eine String-Wandlung.

Vor allem: wozu brauchst du diese Information, wenn man fragen darf?
  Mit Zitat antworten Zitat
Jürgen Thomas

Registriert seit: 13. Jul 2006
Ort: Berlin
750 Beiträge
 
#8

Re: "Zeichen" im Integer

  Alt 19. Jan 2007, 14:42
Tut mir leid, ich verstehe überhaupt nicht, was Du willst - vor allem, weil Du bei integer auf einmal von Kommazahlen sprichst. Du bist ja nicht "neu im Geschäft"; deshalb nehme ich an, Du meinst nicht:
iLaenge := SizeOf(integer); Folgendes dürfte ziemlich langsam sein:
iLaenge := Length(IntToStr(iZahl)); Ich würde es vermutlich so machen:
Delphi-Quellcode:
function AnzahlZiffern(const iZahl: int): integer;
var i0: integer;
begin
  Result := 1;
  i0 := iZahl div 10;
  while (i0 >= 0)
  do begin
    Inc(Result);
    i0 := i0 div 10;
  end;
end;
Ich vermute, dass einer der Fachleute für ASM oder Bit-Manipulation eine schnellere Lösung kennt. Jürgen

PS. Bitte nicht sauer sein, wenn ich mit C#-Schreibweisen durcheinander gekommen bin.

PS2. Das war ja klar, dass ich langsam bin; aber meine Antwort ist noch nicht überflüssig.
#D mit C# für NET, dazu Firebird
früher: Delphi 5 Pro, Delphi 2005 Pro mit C# (also NET 1.1)
Bitte nicht sauer sein, wenn ich mich bei Delphi-Schreibweisen verhaue; ich bin inzwischen an C# gewöhnt.
  Mit Zitat antworten Zitat
Eichhoernchen

Registriert seit: 22. Apr 2004
Ort: Hagen
322 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: "Zeichen" im Integer

  Alt 19. Jan 2007, 14:42
wie wärs mit dem 10er Logarithmus?


Delphi-Quellcode:
uses math;

{...}

function GetDigitLength(x: integer): integer;
begin
 if x <> 0 then
   result := trunc(1+Log10(abs(x)));
end;
Jan
  Mit Zitat antworten Zitat
Benutzerbild von xZise
xZise

Registriert seit: 3. Mär 2006
Ort: Waldbronn
4.303 Beiträge
 
Delphi 2009 Professional
 
#10

Re: "Zeichen" im Integer

  Alt 19. Jan 2007, 14:54
Zitat von Jürgen Thomas:
Tut mir leid, ich verstehe überhaupt nicht, was Du willst - vor allem, weil Du bei integer auf einmal von Kommazahlen sprichst.
Wo ist das Problem? Ich will die Anzahl der Ziffern ohne führenden Nullen einer Ganzzahl.
Und bei der Berechnung möchte ich auf Kommazahlen verzichten.

Zitat von Jürgen Thomas:
Du bist ja nicht "neu im Geschäft"; deshalb nehme ich an, Du meinst nicht:
iLaenge := SizeOf(integer);
Sry, aber mit der SizeOf Methode arbeite ich eigentlich nicht.
Würde es mir die Bitgröße (= 4 Byte) wiedergeben=?

Folgendes dürfte ziemlich langsam sein:
iLaenge := Length(IntToStr(iZahl));
Zitat von Jürgen Thomas:
Ich würde es vermutlich so machen:
Delphi-Quellcode:
function AnzahlZiffern(const iZahl: int): integer;
var i0: integer;
begin
  Result := 1;
  i0 := iZahl div 10;
  while (i0 >= 0)
  do begin
    Inc(Result);
    i0 := i0 div 10;
  end;
end;
Ist ja fast 3 of 8 Methode.

Zitat von Jürgen Thomas:
Ich vermute, dass einer der Fachleute für ASM oder Bit-Manipulation eine schnellere Lösung kennt.
Da sich bisher niemand dazu geäußert hat... Ist es wahrschienlich eure (deine und 3 of 8) Lösung!

Zitat von Jürgen Thomas:
PS. Bitte nicht sauer sein, wenn ich mit C#-Schreibweisen durcheinander gekommen bin.
Außer die Klammern in der "while"-Zeile sieht da nichts falsch aus... (Wobei die Klammern kein Fehler sind, aber eigentlich doch in c# Pflicht sind...)

Zitat von Jürgen Thomas:
PS2. Das war ja klar, dass ich langsam bin; aber meine Antwort ist noch nicht überflüssig.


Ich sehe schon... Ich werde das mit den Methoden versuchen... und Testen wer schnell ist und wer nicht...
Fabian
Eigentlich hat MS Windows ab Vista den Hang zur Selbstzerstörung abgewöhnt – mkinzler
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:40 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz