Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Grundsätzliches :-) Kategorie: Verschiedenes (von m8_nix - 29.04.2007 0:58)
Ich nutze:
C164CI-ControllerBoard
Hallo,

ich bin zwar noch nicht all zulange hier im Forum, jedoch sind mir ein paar Sachen aufgefallen, die ich hier
gerne loswerden möchte - (soll keine Kritik werden).

Zum ersten möchte ich eine Frage an die User stellen.
Ausgehend von meinen Projekten benötige ich
fast immer eine Funktion die einen "String-Wert" in eine Fliesskommazahl umwandelt.
(>> INPUT "Testkommawert"). Ich kann mir nicht vorstellen das Ihr alle nur mit "runden Zahlen" hantiert?!
Was mich dann wundert ist, das ich hierfür keine entsprechende Funktion finde (getNumfloat)??
Natürlich würde sich eine Routine schreiben lassen die entsprechendes bereits während des Eintippens
erledigt und Fehleingaben wie Beispielsweise zwei Kommas nacheinander unterbindet.
Nur denke ich sollte es auch möglich sein, über Schnittstellen empfangene Werte, auf Richtigkeit hin
überprüfen zu können.
Ausgehend davon denke ich, das Ihr alle schon mal so eine Funktion geschrieben habt, die einen String
in eine Fliesskommazahl wandelt?! (Oder seh ich den Wald im Moment vor lauter Bäumen nicht??)

Also daher hier mein erster Wunsch (auch wenn Anrdé mir jetzt nen Vogel zeigt)
Wäre es denn nicht möglich hier eine Rubrik "UserModule" "UserProgramme" "UserProjekte"
zu veröffentlichen (ohne Gewähr auf Funktionali- und Orginali -tät)? In der einfach jeder seine Projekte vorstellen
darf? Das würde natürlich auch bedeuten das man "hier" auch Bilder hochladen kann. Vielleicht wäre
eine PDF-Implematation der einfachste Weg, da es hierfür inzwischen viele entsprechend freie Converter gibt
die sich bei der Ausgabe wie ein "stink-normaler" Drucker verhalten.
Wie sagt es sich so schön, ein Bild sagt mehr als 1000 words ;-)

Mein nächstes Anliegen ist schon fast unverschämt *grins
Wie schön es doch war, zu Turbo-Pascals-Zeiten, mit Zeigern zu arbeiten *schwäm
Ein Zeiger selbst ist eine Variable die nicht etwa einen Wert beinhaltet , nein - sie beinhaltet den
Speicherort einer Variablen dessen Wert mich Interessiert, deren Datentyp aber erst bei "Gebrauch"
festgelegt wird. Also quasi eine undeffinierte Variable in der Variable.
Dabei ist der Speicherort selbst für den Programmierer unerheblich. Wichtig ist nur das sich mit Hilfe
einer solchen Funktion wiederkehrende, verschachtelte Strukturen
(wie sie Beispielsweise in Menüs zu  finden sind)  oft benötigte, wiederkehrende Programmteile sparen kann.
Zur Verdeutlichung: Eine "gemeine" Tastaureingabefunktion "function (getinteger) returns int"
könnte mit Hilfe von Zeigern jede Art Datenstruktur zurückgeben "function(get) returns int^z"
"z" Repräsentiert hierbei nicht etwa das Funktionsergebnins sondern nur den den "Aufenthaltsort" von "z"
Dabei kann "z" sowohl byte, int, long als auch string sein. (Je nach dem wie sie vor dem Aufruf
deklariert wurde "int^ z;"..... "byte^ z;" "string^ z".
Kompliziert ... ich weiss. Aber jeder der schon mal  ein aufwendiges Menü programmiert hat wird sich
hier gerne an Turbo Pascal zurückerinnern - da bin ich mir sicher:-)...
Das ganze schimpft sich dann "neudeutsch" auch noch dynamische Variable. Phüüü!!!

Eine vielleicht letzte saudoofe frage hab ich noch... Laut Handbuch hat ein "float" hier 8 byte... und einen
Wertebereich von 1.7*10(308) .... Wie definiere ich jedoch hier einen Exponenten? 5.2e-100? oder
wieso führt x (float)... also x=0x8000000000000000 zu x=0.000?


Wie auch immer... hier stell ich mal meine Routine von "getNumfloat"  rein...
(Da ich nicht in der Lage war einen kleinstmöglichen negativen Wert für einen "falschen" String zu deffinieren
hab ich den von "long" hergenommen?! >>  -2147483647


//--String in Floatzahl konvertieren---------------------------
  function getNumfloat (byte s[]) returns float
// Die zurückgegebene Zahl kann in
// float gespeichert werden
//--------------------------------------------------------
{byte i;float x,y;
 y=0.0;
 x=0.1;
 if s[31]==0 return 0;
 if s[0]!='-' and s[0]!='.' and not(s[0]>=0x30 and s[0]<=0x39) return -2147483647; // keine Zahl
 if s[0]!='-' and s[0]!='.' y=s[0]-0x30;
 i=1;
 while (s[i]!='.' and i!=s[31])
 {
  if s[i]<0x30 or s[i]>0x39 return -2147483647; // keine Zahl
  y=y*10.0 + (s[i]-0x30);
  i=i+1;
 }
 if (s[i]=='.' and i<s[31]) i=i+1;
 while i!=s[31]
 {
  if s[i]<0x30 or s[i]>0x39 return -2147483647; // keine Zahl
  y=y+((s[i]-0x30)*x);
  x=x/10.0;
  i=i+1;
 }
 if s[0]=='-' y=y*(-1.0);
 return y;
}


Das ganze dann sinnvollerweise im Modul STRX.C2 untergebracht.

Danke das Ihr das jetzt alles duchgelesen habt :-) ......Nun würde mich eure Meinung dazu interessieren:-)


    Antwort schreiben


Antworten:

Re: Grundsätzliches :-) (von André H. - 30.04.2007 11:23)
    Re: Grundsätzliches :-) (von m8_nix - 30.04.2007 17:14)
        Re: Grundsätzliches :-) (von André H. - 14.05.2007 10:44)