![]() |
AW: Maßeinheiten als Typen
Zitat:
![]() |
AW: Maßeinheiten als Typen
Wir sind doch erst auf Seite 7, da kommt noch mehr :-]
|
AW: Maßeinheiten als Typen
Zitat:
|
AW: Maßeinheiten als Typen
Verstehe ich das richtig, daß hier die eierlegende Wollmilchsau gesucht wird? Das ist sowas von nicht KISS, jeder Vorschlag dafür würde bei uns im Keim erstickt werden. Aber für akademische Diskussionen sicherlich schön.
Sherlock |
AW: Maßeinheiten als Typen
Zitat:
"Ich hätte gerne minus 3 kg Gehacktes!" Hoffentlich sieht kein Kollege von dir diesen Thread. |
AW: Maßeinheiten als Typen
Zitat:
Wirft zwar eine ENotHygienicException, aber was solls ;-) |
AW: Maßeinheiten als Typen
@TiGü
Wie ich bereits, gefühlte 1000 mal geschrieben hab, ist das ein Beispiel. Ob du nun Gewichte, Zeit, Längen oder Engström nutzt ist fürs prinzipielle Vorgehen relativ wurscht. @freimatz Nein, da es kein "class const" gibt. Um die umrechnerei in den Class Operatoren unter zu kriegen, muss man den Umweg über "class var" in Verbindung mit dem Class Constructor gehen. Emba hats in TTimespan z.B. auch so gemacht. |
AW: Maßeinheiten als Typen
Zitat:
Delphi-Quellcode:
Konstante von einer gemeinen
class const
Delphi-Quellcode:
Konstante unterscheiden? :gruebel:
const
Delphi-Quellcode:
TGewicht = Record
private const GrammPerKilo = 1000; GrammPerTonne = 1000+GrammPerKilo; GrammPerMegat = 1000*1000*GrammPerTonne; End; |
AW: Maßeinheiten als Typen
Hallo zusammen,
ich habe mal einen record für Werte mit SI-Einheit umgesetzt.
Code:
die Einheit TSIUnit setzt sich dabei aus einem Einheitentyp (m, sec, g, ...), einem Faktor (TSIPraefix G, M, k, ...) und einer Potenz zusammen. Die Potenz ist wichtig für zB. m² oder für Einheiten im Nenner.TSIValue = record Value : double; UnitExpr : TSIUnitExpression; ... TSIUnitExpression = record private FUnitArray :TSIUnitArray; ... TSIUnitArray = TArray<TSIUnit>; TSIUnit = record Praefix :TSIPraefix; UnitTyp :TSIUnitTyp; Power :shortint; ... {$SCOPEDENUMS ON} TSIPraefix = ( Yotta, Zetta, Exa, Peta, Tera, Giga, Mega, Kilo, Hekto, Deka, None, Dezi, Zenti, Milli, Mikro, Nano, Piko, Femto, Atto, Zepto, Yokto); TSIUnitTyp = ( None, //SI Basiseinheiten Metre, Gramm, Second, Ampere, Kelvin, Mole, Candela, //nicht SI Basiseinheiten Euro, //Abgeleitete SI-Einheiten Newton, Joule, Watt, Coulomb, Volt, Ohm, Farad, &Pascal, Bar ); {$SCOPEDENUMS OFF} TSIUnitExpression definiert eine Liste von TSIUnit die miteinander Multipliziert die eigentliche Einheit darstellt. Hier kann dann z.B N = kg*m/sec² realisiert werden. Möchte man zwei TSIValue miteinander verrechnen müssen auch die TSIUnitExpression mathematisch korrekt verrechnet werden. Beispiel:
Code:
var
Masse:TSIValue; Laenge:TSIValue; Zeit:TSIValue; Kraft:TSIValue; Text:string; begin Masse := '5 kg' Laenge:= '123 cm'; Zeit := '10 s'; Kraft := Masse * Laenge / (Zeit * Zeit); Text := Kraft; // Text='0.06 m*kg/s²' Bei Interesse könnte ich den Code auch zur Verfügung stellen. Allerdings benötige ich dann etwas Hilfe bei Lizenzierungsfragen. |
AW: Maßeinheiten als Typen
Zitat:
Bei "private const" stehen die Konstanten nur in einer konkreten Instanz (sprich Variable) zur Verfügung. Folglich (und das hat mir der Delphi-Compiler recht deutlich mitgeteilt) kann man sie so nicht in den Operatoren verwenden. Also hab ich mir ein Beispiel an Emba genommen und das ganze wie oben umgesetzt. Damit kann ich die Konstanten auch in den Operatoren verwenden. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:34 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 by Thomas Breitkreuz