Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi zählen mit buchstaben? (https://www.delphipraxis.net/11210-zaehlen-mit-buchstaben.html)

Pseudemys Nelsoni 2. Nov 2003 08:45


zählen mit buchstaben?
 
hoi, wie kann ich mit buchstaben zählen?

also das A = 1, Z = 26, das z.b A+Z = 27 ist?

Stanlay Hanks 2. Nov 2003 08:50

Re: zählen mit buchstaben?
 
Hallo. Trag doch einfach die Buchstaben in ein Array ein...Dann hast du über den Index Zugriff auf die Buchstaben.

Man liest sich, Stanlay :hi:

r_kerber 2. Nov 2003 08:51

Re: zählen mit buchstaben?
 
Hallo silent,

dann schau Dir doch mal die Funktion Ord an. A liefert den Wert 65 und Z den Wert 90.

SirThornberry 2. Nov 2003 08:52

Re: zählen mit buchstaben?
 
(ORD('A') - 64) + (ORD('Z') - 64)

Pseudemys Nelsoni 2. Nov 2003 09:36

Re: zählen mit buchstaben?
 
hoi, sorry das ich als ergebnis ne zahl angegeben hab, ich meinte eigentlich das das ergebnis auch ausbuchstaben bestehen soll,

z.b das Z+Z = AX

also das gleiche wie 9+9 = 18


ne idee?

r_kerber 2. Nov 2003 09:44

Re: zählen mit buchstaben?
 
Dann mußt Du das Ergebnis hinterher mit Chr wieder in Buchstaben umwandeln. Chr (90) liefert Dir ein Z.

Pseudemys Nelsoni 2. Nov 2003 09:59

Re: zählen mit buchstaben?
 
wenn ich es so mache:

(ORD('Z') - 64) + (ORD('Z') - 64)

dann ist das ergebnis ja 52(26+26), wie sollte ich daraus das ergebnis bekommen ? :|
ich muss ja ein 2stelliges buchstaben ergebnis rausbekommen

himitsu 2. Nov 2003 10:03

Re: zählen mit buchstaben?
 
Ist etwas schwieriger, kommt aber gleich. :mrgreen:

fkerber 2. Nov 2003 10:09

Re: zählen mit buchstaben?
 
Hi!

Zitat:

Zitat von Silent
z.b das Z+Z = AX

Nach welchem Prinzip ist den z+z gleich ax?
Sehe da grad keinen Zusammenhang!

Ciao fkerber

r_kerber 2. Nov 2003 10:14

Re: zählen mit buchstaben?
 
Hallo fkerber,

das entspricht einem Zahlensystem zur Basis 26.

Dagon 2. Nov 2003 10:20

Re: zählen mit buchstaben?
 
@r_kerber: Das wollte ich auch gerade schreiben! :cry:

@silent: Das würde bedeuten, das Z + Z = B ist, da Z = 26 -> 26 + 26 = 52. Und 52 = 2*26^1 und 2 = B.


EDIT: Ich habe mich da wohl verrechnet, wie ich gerade gemerkt habe. Ich musses nochmal kontrollieren.

Dagon 2. Nov 2003 10:26

Re: zählen mit buchstaben?
 
Also, ich habe mir alles noch mal durch den Kopf gehen lassen und habe gererkt: in diesem System fehlt die Null! Solang es keine Null hat, wirst du wohl auch keine Rechungen durchführen können.

himitsu 2. Nov 2003 10:31

Re: zählen mit buchstaben?
 
Es geht, war auch schon fertig.
Mir ist aber leider der Rechnerabgestürtzt, bevor ich speichern konnte. :cry: :wall:
Also in 5 Minuten nochmal.

himitsu 2. Nov 2003 11:00

Re: zählen mit buchstaben?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hat 'en bissl länger gedauert.
Dafür jetzt auch noch verbessert. :mrgreen:

:idea: Einfach etwas abstrakt denken und "ohne" Nullen rechnen.
Eine Null "@" ist zwar vorhanden, damit aber das gewünschte Ergebnis raus kommt wurde sie in der Ausgabe übersprungen. :thuimb:

Also dann noch viel Spaß damit :firejump:

scp 2. Nov 2003 11:14

Re: zählen mit buchstaben?
 
Hier noch die 35er Variante mit 0 bis 9 und A bis Z (Buchstabe O weggelassen wegen Ähnlichkeit zu Zahl 0):

Delphi-Quellcode:
function IntPowerInt(ABaseNum, AExponent : Integer) : Integer;
var
  MultCount : Integer;
begin
  Result := 1;
  for MultCount := 1 to AExponent do
    Result := Result * ABaseNum;
end;

function AlphaToNum(ATNstr : String ) : LongWord;
const
  ValidChars : set of Char = ['0'..'9', 'A'..'N', 'P'..'Z'];
var
  ACount : Integer;

  function CharNum(CNchr : Char) : Byte;
    begin
      Case Ord(UpCase(CNchr)) Of
        48..57: CharNum := Ord(UpCase(CNchr)) - 48;
        65..78: CharNum := Ord(UpCase(CNchr)) - 55;
        80..90: CharNum := Ord(UpCase(CNchr)) - 56;
      end;
    end;
begin
  AlphaToNum := 0;
  for ACount := 1 to length(ATNstr) do
    begin
      If not (UpCase(ATNstr[ACount]) in ValidChars) then
        begin
          result := 0;
          Break;
        end;
      result := result + (CharNum(ATNstr[ACount]) * IntPowerInt(35, length(ATNstr) - ACount));
    end;
end;

function NumToAlpha(NTAnum : LongWord ) : String;
var
  NumChar : array[0..34] Of Char;
  NumCount : Word;
begin
  for NumCount := 0 to 9 do NumChar[NumCount] := Chr(48 + NumCount);
  for NumCount := 10 to 23 do NumChar[NumCount] := Chr(55 + NumCount);
  for NumCount := 24 to 34 do NumChar[NumCount] := Chr(56 + NumCount);

  // max 35 hoch (7-1)
  result := '';
  for NumCount := 7 downto 1 do
    If (NTAnum < IntPowerInt(35, NumCount)) then
      begin
        result := result + NumChar[NTAnum div IntPowerInt(35, NumCount-1)];
        NTAnum := NTAnum mod IntPowerInt(35, NumCount-1);
      end;

end;
Delphi-Quellcode:
s1 := 'AZGE';
s2 := 'X45B';
s3 := NumToAlpha(AlphaToNum(s1) + AlphaToNum(s2));

r_kerber 2. Nov 2003 11:28

Re: zählen mit buchstaben?
 
Zitat:

Zitat von himitsu
Eine Null "@" ist zwar vorhanden, damit aber das gewünschte Ergebnis raus kommt wurde sie in der Ausgabe übersprungen.

Geht das überhaupt? Z+A sollte doch eigentlich A0 ergeben, oder?

himitsu 2. Nov 2003 11:38

Re: zählen mit buchstaben?
 
Meintest wohl "A@".

Da die Null ("@") übersprungen wird, ist "Z" (26) + "A" (1) nicht "A@" (1.0) sondern "AA" (1.1).

Logischer währe es gewesen "A" = 0 ... "Z" = 25 zu setzen, dann ist aber "A" (0) + "A" (0) = "A" (0) und nicht "A" (1) + "A" (1) = "B" (2).
Deshalb gibt es bei diesem Zahlensystem auch nur die Wertigkeiten 1 bis 26.


Add:
Ist vieleicht etwas schwer zu erklären, da wir ja sonst "nur" mit Zahlensystem die eine 0 enthalen arbeiten:
Binär = 0 und 1
Oktal = 0 bis 7
Hexadezimal = 0 bis 15
und natürlich das dezimale = 0 bis 9
...

Dagon 2. Nov 2003 11:40

Re: zählen mit buchstaben?
 
Das Problem ist ja, ein Zahlensystem ohne die Null ist nicht wirklich ein Zahlensystem, wenn man es mathematisch betrachtet.

himitsu 2. Nov 2003 12:01

Re: zählen mit buchstaben?
 
Das ist schon ein, es kennt halt nur die Werte 1 bis unendlich.

Das geht doch schon in die Richtung, wie:
Wenn 3 Menschen in einem Raum sind
und 5 diesen verlassen,
müssen 2 wieder rein gehen,
damit niemand mehr drin ist.

Christian Seehase 2. Nov 2003 13:27

Re: zählen mit buchstaben?
 
Moin The Master,

Zitat:

Zitat von the_master
Das Problem ist ja, ein Zahlensystem ohne die Null ist nicht wirklich ein Zahlensystem, wenn man es mathematisch betrachtet.

Das dürfte wohl Definitionssache sein.
Bei den römischen Zahlen gibt es auch keine 0.
Da man erst mit der 0 sinnvoll rechnen konnte, haben wir heute wohl auch die arabischen Ziffern, denn die Araber haben die 0 eingeführt. (Übrigens sifr ist das arabische Wort für 0, aus dem dann bei uns das Wort Ziffer geworden ist).

scp 2. Nov 2003 13:37

Re: zählen mit buchstaben?
 
Deswegen denke ich auch , am logischsten ist es ähnlich wie beim Hex-System '0' bis '9' und 'A' bis 'Z' zu verwenden, wie in meinem Beispiel weiter oben. Dann hat A den Dezimalwert 10 und Z den Dezimalwert 35.
'A' + 'Z' ergibt '19', während '1' + 'Z' zusammen '10' ist.

Dagon 2. Nov 2003 14:51

Re: zählen mit buchstaben?
 
Hallo Christian Seehase,

Zitat:

Zitat von Christian Seehase
Da man erst mit der 0 sinnvoll rechnen konnte, haben wir heute wohl auch die arabischen Ziffern, denn die Araber haben die 0 eingeführt. (Übrigens sifr ist das arabische Wort für 0, aus dem dann bei uns das Wort Ziffer geworden ist).

Das stimmt so auch nicht ganz. Die Inder waren die Erfinder der Null (so wie wir sie heute kennen). Die Araber haben sie lediglich übernommen. :P :wink:

Pseudemys Nelsoni 2. Nov 2003 18:55

Re: zählen mit buchstaben?
 
hoi^^

Zitat:

@silent: Das würde bedeuten, das Z + Z = B ist, da Z = 26 -> 26 + 26 = 52. Und 52 = 2*26^1 und 2 = B.
kann ja garnicht, B ist ja 2, da kann Z(26) +Z ja nicht auch 2 sein ^^...

ok machen wirs mal anders.... sagen wir das 26(Z) = 0 ist dann wäre y+y = 50, also ergibt das AX
falls jemand fragt wieso "AX"... bei Y+A wäre das ergebnis AZ (z steht für 0, A für 1)

ich brauch das ganze nur einmalig für ein prog das mir eine textdatei generiert in der alle Buchstaben kombinationen (4stellen lang) vorhanden sind dazu muss das prog immer so in die datei schreiben:

AAAA
AAAB
AAAC
...
AAAY
AABA
AABB


usw, das möchte ich gerne hinkriegen, hat jemand dafür eine idee?

danke nochmal an die angehängten codes und progs ;)

Christian Seehase 2. Nov 2003 19:03

Re: zählen mit buchstaben?
 
Moin Silent,

an anderer Stelle hatten Himitsu und ich Dir jeweils einen kompletten Source für so eine Routine gepostet.
Nimm doch die.

Pseudemys Nelsoni 2. Nov 2003 19:06

Re: zählen mit buchstaben?
 
stimmt, sorry

dein code guck ich mir nochmal genauer an, himitsus versteh ich nicht ganz, soviele schleifen

scp 2. Nov 2003 19:28

Re: zählen mit buchstaben?
 
Na, dann so:

Delphi-Quellcode:
function LongPowerLong(ABaseNum, AExponent : Word) : LongWord;
var
  MultCount : Integer;
begin
  Result := 1;
  for MultCount := 1 to AExponent do
    Result := Result * ABaseNum;
end;

const
  AlphaBase = 26;
  AlphaMax = 4;

function AlphaToNum(ATNstr : String ) : LongWord;
const
  ValidChars : set of Char = ['A'..'Z'];
var
  ACount : Integer;

  function CharNum(CNchr : Char) : Byte;
    begin
      Case Ord(UpCase(CNchr)) Of
        65..90: CharNum := Ord(UpCase(CNchr)) - 65;
      end;
    end;
begin
  AlphaToNum := 0;
  for ACount := 1 to Min(length(ATNstr), AlphaMax+1) do
    begin
      If not (UpCase(ATNstr[ACount]) in ValidChars) then
        begin
          result := 0;
          Break;
        end;
      result := result + (CharNum(ATNstr[ACount]) * LongPowerLong(AlphaBase, Min(length(ATNstr), AlphaMax+1) - ACount));
    end;
end;

function NumToAlpha(NTAnum : LongWord ) : String;
var
  NumChar : array[0..AlphaBase-1] Of Char;
  NumCount : Word;
begin
  for NumCount := 0 to (AlphaBase-1) do NumChar[NumCount] := Chr(65 + NumCount);

  // max 26 hoch (5-1)
  result := '';
  for NumCount := (AlphaMax+1) downto 1 do
    If (NTAnum < LongPowerLong(AlphaBase, NumCount)) then
      begin
        If not (NumCount = (AlphaMax+1)) then
          result := result + NumChar[NTAnum div LongPowerLong(AlphaBase, NumCount-1)];
        NTAnum := NTAnum mod LongPowerLong(AlphaBase, NumCount-1);
      end;

end;
Delphi-Quellcode:
var
  ATextFile : TextFile;
  bucount : LongWord;
begin
  AssignFile(ATextFile, 'C:\buchstab.txt');
  ReWrite(ATextFile);

  for bucount := AlphaToNum('AAAA') to AlphaToNum('ZZZZ') do
    WriteLn(ATextFile, NumToAlpha(bucount));

  CloseFile(ATextFile);
end;
Macht 456976 Möglichkeiten * 6 Bytes (#13#10 dabei) = 2741856 Bytes

himitsu 2. Nov 2003 21:34

Re: zählen mit buchstaben?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

himitsus versteh ich nicht ganz, soviele schleifen
:gruebel: ist doch nur EINE Schleife, die anderen Beiden (1. & 2. Schleife) sind nur zur Kontrolle ob ungültige Zeichen (nicht im Bereich "A" bis "Z") vorhanden sind.

Wenn das etwas mit dem Beitrag "alle Kombinationen 00000000..ZZZZZZZZ in textfile?" zu tun hat, ist das ja sowieso beendet.

Hab den Code nochmal angehängt - mit extra vielen Kommentaren.




Zitat:

ich brauch das ganze nur einmalig für ein prog das mir eine textdatei generiert in der alle Buchstaben kombinationen (4stellen lang) vorhanden sind
Die beiden folgenden Sources machen das Gleiche - Und erstellen das: AAAA, AAAB, AAAC ... ZZZZ
Delphi-Quellcode:
Function StringAddition... {von mir}

Var Datei: TextFile;
  S: String;

S := 'AAAA';
Repeat
  WriteLn(Datei, S);
  S := StringAddition(S, 'A');
Until Length(S) > 4;
Delphi-Quellcode:
Var Datei: TextFile;
  a, b, c, d: Byte;

For a := 65 to 90 do
  For b := 65 to 90 do
    For c := 65 to 90 do
      For d := 65 to 90 do
        WriteLn(Datei, Chr(a) + Chr(b) + Chr(c) + Chr(d));


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:51 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz