AGB  ·  Datenschutz  ·  Impressum  







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

Zahlen zerlegen

Ein Thema von jensw_2000 · begonnen am 10. Okt 2013 · letzter Beitrag vom 11. Okt 2013
Antwort Antwort
jensw_2000
(Gast)

n/a Beiträge
 
#1

Zahlen zerlegen

  Alt 10. Okt 2013, 23:50
Kann man unsigned Integer im Bereich von 0-999 effektiver (also mit weniger Code, Performance nicht sehr relevant) in Einer, Zehner und Hunderter zerlegen?

-----------
PS: optimierte Version
-----------

Delphi-Quellcode:

interface

type
  TZahlSplitter = class(TObject)
  public
    class function getEiner(aZahl: UInt): UInt;
    class function getZehner(aZahl: UInt): UInt;
    class function getHunderter(aZahl: UInt): UInt;
  end;

implementation

{ TZahlSplitter }

class function TZahlSplitter.getEiner(aZahl: UInt): UInt;
begin
  Result := aZahl mod 10;
end;

class function TZahlSplitter.getZehner(aZahl: UInt): UInt;
begin
  Result := (Zahl div 10) mod 10;
end;

class function TZahlSplitter.getHunderter(aZahl: UInt): UInt;
begin
  Result := (Zahl div 100) mod 10;
end;

Geändert von jensw_2000 (11. Okt 2013 um 00:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

AW: Zahlen zerlegen

  Alt 10. Okt 2013, 23:54
Ja. Abgesehen davon, dass ein Uint8 nicht bis 999 reicht:

Delphi-Quellcode:
Einer := Zahl mod 10;
Zehner := (Zahl div 10) mod 10;
Hunderter := (Zahl div 100) mod 10;
  Mit Zitat antworten Zitat
arnof

Registriert seit: 25. Apr 2013
1.254 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

AW: Zahlen zerlegen

  Alt 10. Okt 2013, 23:57
Ich würde das über die Länge machen:

Mit Trunk die ganzzahlermittel in String wandeln dann haste je stelle Milliarden,Millionen bis einer
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#4

AW: Zahlen zerlegen

  Alt 11. Okt 2013, 00:14
Ja. Abgesehen davon, dass ein Uint8 nicht bis 999 reicht:
auch gerade festgestellt..
Habe den Code oben umgebaut.
Kürzer geht's vermutlich wirklich nicht und die String Konvertierungen sind auch überflüssig.

Geändert von jensw_2000 (11. Okt 2013 um 00:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.062 Beiträge
 
Delphi 12 Athens
 
#5

AW: Zahlen zerlegen

  Alt 11. Okt 2013, 00:20
Notfalls schaltest du einfach mal die Bereichs-/Indexprüfungen in deinen Projektoptionen an, damit du sowas wie mit der 999 selber mitbekommst.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#6

AW: Zahlen zerlegen

  Alt 11. Okt 2013, 00:52
Delphi-Quellcode:
function getNthDigit(Number: UInt; N: Byte): Integer;
begin
  if N > 10 then // "4294967296" ist 2^31 (größte Zahl) und hat 10 Stellen
    Result := -1 // Fehler
  else
  begin
    while N > 1 do
    begin
      Number := Number div 10;
      dec(N);
    end;
    Result := Number mod 10;
  end;
end;
Nicht getestet, ingame geschrieben!
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.686 Beiträge
 
Delphi 2007 Enterprise
 
#7

AW: Zahlen zerlegen

  Alt 11. Okt 2013, 01:16
Dann aber so:
Delphi-Quellcode:
type
  TDigitPosition = 1..10; // Da sollte die Bereichsprüfung zuschlagen
  TDecimalDigit = 0..9; // Einfach ums abzurunden :D

function getNthDigit(Number: UInt; N: TDigitPosition): TDecimalDigit;
begin
  Result := (Number div Integer(Power(10, N-1))) mod 10; // Cast ggf. nicht nötig, weiss gerade nicht ob's ne Int-Überladung gibt
end;
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)

Geändert von Medium (11. Okt 2013 um 01:24 Uhr)
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#8

AW: Zahlen zerlegen

  Alt 11. Okt 2013, 01:27
Quält euch nicht länger.
3stellig reicht in diesem kleinen Experiment völlig aus und ich habe gelernt, das der Modulus zu mehr zu gebrauchen ist, als zum Realisieren von Seitennummerierungen


Danke.
  Mit Zitat antworten Zitat
Benutzerbild von Aphton
Aphton

Registriert seit: 31. Mai 2009
1.198 Beiträge
 
Turbo Delphi für Win32
 
#9

AW: Zahlen zerlegen

  Alt 11. Okt 2013, 03:24
Dann aber so:
Delphi-Quellcode:
type
  TDigitPosition = 1..10; // Da sollte die Bereichsprüfung zuschlagen
  TDecimalDigit = 0..9; // Einfach ums abzurunden :D

function getNthDigit(Number: UInt; N: TDigitPosition): TDecimalDigit;
begin
  Result := (Number div Integer(Power(10, N-1))) mod 10; // Cast ggf. nicht nötig, weiss gerade nicht ob's ne Int-Überladung gibt
end;
Nein, also ja, so gehts zwar auch, aber dafür brauchste "Power".. Für meine Variante brauchste nichts - daher ist sie auch anfängerfreundlicher (hab ingame kB gehabt, der Person zu erklären, dass Math noch eingebunden werden muss usw..)
das Erkennen beginnt, wenn der Erkennende vom zu Erkennenden Abstand nimmt
MfG
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:51 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