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 //über ASCII-Tabelle prüfen
  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>47and (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

user profile iconDeddyH hat folgendes geschrieben Zum zitierten Posting springen:
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.