Entwickler-Ecke
Algorithmen, Optimierung und Assembler - Wo ist hier der Fehler?
HashProt - So 21.12.08 18:26
Titel: Wo ist hier der Fehler?
Hab hier n prüf Algorithmus gemacht der testen soll ob ein Char die Zahl 0 oder 1 oder 2,...,9 enthält.
Ich mach das über ASCII, also muss der Wert zwischen 47 (/) oder 57 (:) liegen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| function TVLInt.Possible(test:Byte):Boolean; begin If test>47 and test<57 then result:=true else result:=false; end; |
Da liefert aber der Compiler die Meldung:
[Fehler] mTVLInt.pas(124): Inkompatible Typen
//124 ist die Zeile im Programm, also hier im Code Zeile 3
Für Alternative Algorithmen wär ich auch dankbar, weil ich denke das über ASCII zu machen ist schon sehr grob^^
Kroko - So 21.12.08 18:29
einfach in klammern setzen
Kroko - So 21.12.08 18:29
Delphi-Quelltext
1: 2: 3: 4:
| function TVLInt.Possible(test:Byte):Boolean; begin Result := (test>47) and (test<57); end; |
oder so
Delete - So 21.12.08 18:33
Oder
Delphi-Quelltext
1: 2: 3: 4:
| function TVLInt.Possible(test:Byte):Boolean; begin Result := test in [48..56]; end; |
alzaimar - So 21.12.08 18:43
Da Du prüfst, ob der ASCII-Wert eines Bytes einer Ziffer entspricht, würde ich das auch genauso im Code darstellen (selbstdokumentierender Code):
Delphi-Quelltext
1: 2: 3: 4:
| Function IsAsciiDigit (aByte : Byte) : Boolean; Begin Result := Chr (aByte) in ['0'..'9']; End; |
Delete - So 21.12.08 18:47
Dann übergib doch gleich das Zeichen als Zeichen.
Delphi-Quelltext
1: 2: 3: 4:
| Function IsAsciiDigit (aChar : Char) : Boolean; Begin Result := aChar in ['0'..'9']; End; |
Hidden - So 21.12.08 20:18
Hi :)
Diese Ver5sion ist eindeutig Vorzuziehen: Das wichtigste beim Programmieren ist, dass jeder, der deinen Quelltext liest, sieht, was du machst. Deshalb ist ['0'..'9'] in jedem Fall gegenüber [47..57] vorzuziehen. Diese Variante ist auch in keiner Weise langsamer oder so, einfach besser lesbar.
mfG,
alzaimar - So 21.12.08 20:32
DeddyH hat folgendes geschrieben : |
Dann übergib doch gleich das Zeichen als Zeichen. |
Er liest Bytes ein (jedenfalls habe ich das so verstanden) und will Bytes irgendwie verarbeiten. Weshalb dann einer Funktion dann ein Char übergeben werden soll, würde ich dann nicht verstehen. Aber klar, kommt eh auf den Kontext an.
Delete - So 21.12.08 20:46
Zitat: |
Hab hier n prüf Algorithmus gemacht der testen soll ob ein Char die Zahl 0 oder 1 oder 2,...,9 enthält.
Ich mach das über ASCII, also muss der Wert zwischen 47 (/) oder 57 (:) liegen. |
In dem Kontext finde ich Char angebrachter. Aber ist eh Sache des TE, wie er seine Daten interpretieren will.
HashProt - So 21.12.08 20:56
Danke für die zahlreichen Antworten. Mal schauen welche der Möglichkeiten am besten passt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!