AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Variablenwert Bestandteil einer Menge ? wie Zeitkritisch ???
Thema durchsuchen
Ansicht
Themen-Optionen

Variablenwert Bestandteil einer Menge ? wie Zeitkritisch ???

Ein Thema von richard_boderich · begonnen am 23. Jul 2004 · letzter Beitrag vom 23. Jul 2004
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#1

Variablenwert Bestandteil einer Menge ? wie Zeitkritisch ???

  Alt 23. Jul 2004, 00:50
hallo leute!

ich hab mal wieder ein problem also:

ich hab verschiedene Mengen, die asciicodes von zeichen als dezimalwerte enthalten.

z. B.
Delphi-Quellcode:
test = set of byte;

test:=96,97,98 steht für a,b,c laut ascii tabelle
teste jetz in einer for next schleife mit einer if abfrage , ob ein variablenwert x, in der menge enthalten ist

was ist nun aber , wenn die mengen größer werden, sagen wir mal 255 werte? wuerde das die ausführungszeit
meiner for next schleife nachhaltig beeinflussen (wenn das ganze ne sekunde dauert, kann ich das vergessen,da
ich die for next zur bildschirmausgabe nutze, und eine stringgrid mit daten fuettere)

PS: waehre nett, wenn mir jemand mal, die codepages für intels little und big-endian, macintosh, Ebcdic und asci 7 bit
zukommen lassen koennte

danke schon mal im vorraus
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#2

Re: Variablenwert Bestandteil einer Menge ? wie Zeitkritisch

  Alt 23. Jul 2004, 05:44
Sets duerfen nur 256 Elemente haben und der Test ist einfach eine Bitverknuepfung, also sehr effizient.
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#3

Re: Variablenwert Bestandteil einer Menge ? wie Zeitkritisch

  Alt 23. Jul 2004, 11:26
Danke Robert,

hab es einfach mal probiert, und es läuft super. eine frage haett ich noch

ich hab jetz meine menge folgendermaßen deklariert:
Delphi-Quellcode:
var
    charset1,charset2,charset3 : set of byte;
    i:integer;
...

begin
    i:=1; // aktuelles charset setzen
    charset1 := [46..255];
    charset2 := [46..200];
    charset3 := [21..255];
ich will aber das entsprechende set dynamisch auswaehlen koennen.

geht das so ???
if x in charset[i] then bla,blab,bla... ich bekomme immer ne meldung inkompatible typen,damit weis ich nix anzufangen
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.251 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Variablenwert Bestandteil einer Menge ? wie Zeitkritisch

  Alt 23. Jul 2004, 11:29
Hai Richard,

ungetestet:
Delphi-Quellcode:
var
    aktcharset : set of byte;
    charset1,charset2,charset3 : set of byte;
    i:integer;
...

begin
  i:=1; // aktuelles charset setzen
  charset1 := [46..255];
  charset2 := [46..200];
  charset3 := [21..255];
  case i of
    1 : aktcharset := charset1;
    2 : aktcharset := charset2;
    3 : aktcharset := charset3;
  end;
 if x in aktcharset then bla,blab,bla...
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#5

Re: Variablenwert Bestandteil einer Menge ? wie Zeitkritisch

  Alt 23. Jul 2004, 11:40
Hallo richard_boderich,

wenn ich Dich richtig verstehe, ist Deine Variable x ein Char und Deine Sets Mengen vom Typ Byte. Wusstest Du, dass Du Sets auch vom Typ Char anlegen kannst um Konstrukte der Art
Delphi-Quellcode:
var
  myChar: Char;
  myLetters: Set of Char;
  myDigitsAndOperators: Set of Char;
begin
  myChar := ObtainAChar;
  myLetters := ['A'..'Z'];
  myDigitsAndOperators := ['0'..'9', '+', '-', '/', '*'];

  if myChar in myLetters then
    DoSth(myChar)
  else
    if myChar in myDigitsAndOperators then
      DoSthElse(myChar, ASecondParameter)
    else
      DoDefaultBehavior;
end;
zu realisieren?

Solche Sets können selbstverständlich auch zur Laufzeit berechnet werden (siehe auch OH zu Include, Exclude), zB so
Delphi-Quellcode:
type
  TCharSet = set of Char;

function AdditionalChars: TCharSet;
begin
  Result := [ObtainAChar];
end;
//...
begin
  myLetters := ['A'..'Z'] + AdditionalChars;
Wenn die Sets hingegen, wie in meinem ersten Beispiel, fest sind, könntest Du auch eine einfache Case-Anweisung verwenden:
Delphi-Quellcode:
case myChar of
  'A'..'Z': DoSth(myChar);
  '0'..'9', '+', '-', '/', '*': DoSthElse(myChar, ASecondParameter);
else
  DoDefaultBehavior;
end;
gruß, choose
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Variablenwert Bestandteil einer Menge ? wie Zeitkritisch

  Alt 23. Jul 2004, 11:41
Oder gleich so:

Delphi-Quellcode:
var
    charset : Array of set of byte;
    i:integer;
begin
    i:=0; // aktuelles charset setzen
    charset[0] := [46..255];
    charset[1] := [46..200];
    charset[2] := [21..255];
    if x in charset[i] then bla,blab,bla...
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#7

Re: Variablenwert Bestandteil einer Menge ? wie Zeitkritisch

  Alt 23. Jul 2004, 12:01
@choose ,

ne ,das haste wat falsch verstanden, x ist eine dezimaler bytewert z.b. 245.
ich muss testen ob dieser wert in der aktuellen menge vorkommt

ich weis das ich auch solche charsets anlegen kann 'a','b', 'c' usw.
aber definiere da mal die ganzen sonderzeichen, da wird es dann schon eng
(schau dir mal die ascii tabelle an)

deswegen nehm ich die bytewerte und wandel sie zu laufzeit in chars

das, das berechnen von sets zur laufzeit moeglich ist , wusst ich noch nich, wirklich faszinierend , danke hab wiederwas dazugelernt

aber trotzdem many thank's

@chewie,

deine loesung sieht supi aus,kurz und geradlinieg, scheinen aehnlich zu denken, meine code war fast genauso werd ich ma testen

thanks


meine loesung war:
Delphi-Quellcode:
   charset1,charset2,charset3 : set of byte;
   i:integer;
begin
    i:=0; // aktuelles charset setzen
    charset[0] := [46..255];
    charset[1] := [46..200];
    charset[2] := [21..255];
    if x in charset[i] then bla,blab,bla...
hatt aber nicht funktioniert, weis jemand wieso charset hab ich doch als dynamische oder indexvariable angesrochen?
will aber verstehen wo mein fehler war, denke mal das deplhi indexvariablen anders kennzeichnet im syntax oder ?
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#8

Re: Variablenwert Bestandteil einer Menge ? wie Zeitkritisch

  Alt 23. Jul 2004, 12:26
@chewie,

deine loesung funzt nich, bekomme eine exeption

bei der zuweisung der setwerte
Delphi-Quellcode:
var

charset: array of set of byte;

...

begin

 charset[0] := [46..255]; <- exeption
 charset[1] := [46..200];
 charset[2] := [21..255];
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
choose

Registriert seit: 2. Nov 2003
Ort: Bei Kiel, SH
729 Beiträge
 
Delphi 2006 Architect
 
#9

Re: Variablenwert Bestandteil einer Menge ? wie Zeitkritisch

  Alt 23. Jul 2004, 12:29
Zitat von richard_boderich:
ich weis das ich auch solche charsets anlegen kann 'a','b', 'c' usw.
aber definiere da mal die ganzen sonderzeichen, da wird es dann schon eng
(schau dir mal die ascii tabelle an)

deswegen nehm ich die bytewerte und wandel sie zu laufzeit in chars
Solche Sets kannst Du wie folgt anlegen:
myLetters := [#65..#67, 'D'..'E']; // eq ['A'..'E']; und ersparst damit den Cast von Char zu Byte und umgekehrt. Insgesamt also wesentlich übersichtlicher und ggf sicherer durch die Typenstrenge...

EDIT: Selbiges gilt selbstverständlich auch für die Lösung via Case
gruß, choose
  Mit Zitat antworten Zitat
Benutzerbild von richard_boderich
richard_boderich

Registriert seit: 21. Jun 2004
Ort: Berlin
1.067 Beiträge
 
Delphi 7 Architect
 
#10

Re: Variablenwert Bestandteil einer Menge ? wie Zeitkritisch

  Alt 23. Jul 2004, 12:32
@chewie,

deine loesung funzt nich, bekomme eine exeption

bei der zuweisung der setwerte
Delphi-Quellcode:
var

charset: array of set of byte;

...

begin

 charset[0] := [46..255]; <- exeption
 charset[1] := [46..200];
 charset[2] := [21..255];
mfG Richard

Cimmams schrieb "das einzige was an ArmA gut ist, ist die Grafik bis 100m und der Rest ist so unreal wie unsere Demokratie."
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 05:43 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