![]() |
Killogramm, Gramm und milligram
Hallo Leser,
ich soll ein Programm (dank Schule) schreiben, welches aus 2 Werten das Gewicht berechnet je nach grösse des Ergbinss soll darüberhinaus der Wert umgerechnete werden in in mg, g, kg oder t. Also Beispiel. Der Bauer hat 4 Eier á 15 g = 60g Dieser wert ist zu klein also in mg ausgeben oder der Bauer hat 8 Euer á 974 g = 7792 g zu gross also in kg 7,792 kg na ja und so weiter ;) leider habe ich keine Ansatzplan udn auch keine Idee. Im Forum nach kg oder mg zu suchen bringt nicht viel ;) Vielleicht hat jemand ein Code Beispiel für mich mit welchem ich dann weiterarbeiten kann... ich wäre sehr Dankbar.... |
Re: Killogramm, Gramm und milligram
Hi, naja, du musst doch einfach nur umrechnen.
1000 mg = 1 g 1000 g = 1 kg Mal nur so ein fetzen:
Delphi-Quellcode:
hm, oder so in der Art :zwinker:
Kilo = Wert div 1000;
Gramm = (Wert - Kilo) div 1000 |
Re: Killogramm, Gramm und milligram
Moin TheCatcher,
als erstes könnte mal die gesamte Aufgabe hilfreich sein, denn das was Du uns da genannt hast kann es ja eigentlich nicht gewesen sein. |
Re: Killogramm, Gramm und milligram
Danke Matze aber so weit war ich auch schon aber leider
habe ich z.B. Komma Probleme 0 Fehlt hin und wieder mal gerne! und an Christian... Du wirst lachen aber das ist meine Aufgabe nicht mehr nicht weniger - soll nur zur eine Anfänger Übung sein. So lautet der Satz der Lehrerin |
Re: Killogramm, Gramm und milligram
hatten wir doch vor kurzem schonmal solche Umrechnungen:
Delphi-Quellcode:
function xFloatToSym(Value : Extended) : String;
const S_UNITS = 'afpnµm kMGTP'; var Wert: Extended; Einheit : Integer; begin wert := Value; Einheit := 7; while ( wert < 1 ) and (Einheit > 1) do begin Wert := Wert * 1000; dec(Einheit); end; while (Wert >= 1000) and (Einheit < 12) do begin Wert := Wert / 1000; inc(Einheit) end; Result := Format('%g%s', [Wert, S_Units[Einheit]]); end; // xFloatToSym ![]() |
Re: Killogramm, Gramm und milligram
Hi,
wenn Du Vorlagen für ein Konvertierprogramm brauchst und zufällig Delphi7 einsetzt: Im Demo-Verzeichnis von Delphi7 gibt es ein Programm namens "ConvertIt" - das rechnet alles mögliche um ;-) Nur so als Tipp... |
Re: Killogramm, Gramm und milligram
Nee habe kein D7 Danke ;)
@stoxx danke ich experimentiere schon damit |
Re: Killogramm, Gramm und milligram
Moin TheCatcher,
und nach welcher Gewichtung soll entschieden werden, ab wann ein Wert umgerechnet werden soll? |
Re: Killogramm, Gramm und milligram
Zitat:
In diesen Units sind viele Konvertiermöglichkeiten vorhanden... |
Re: Killogramm, Gramm und milligram
Ab wann umgerechnete werden soll - immer dann wenn Tausend VOR dem Komma voll sind!
Das heisst 9mg sind 9 mg - 99 mg 99mg 999mg auch 999mg aber dann 1001mg sind dann 1,001g na ja und so weiter - 999g sind 999g aber 1001g sind 1,001 kg das ist mir einfch zu hoch in Delphi.... ps. ConvUtils.pas und/oder StdConvs.pas habe ich beide NICHT (Delphi 5 Std) |
Re: Killogramm, Gramm und milligram
kann man nicht einfach eine Prozedur schreiben dass wenn(while) der Wert mehr als 3 Stellen vor dem Komma hat dann soll er durch 1000 dividieren?!
|
Re: Killogramm, Gramm und milligram
Ja versuchte ich schon nur stelle ich mir zwei fragen bzw. ein Problem
a) Wie sage ich delphi das er NICHT auch die nachkomma stellen zählen soll? StrLn geht nicht b) habe ich bei einigen Werten ein NULL zu wenig bei dem nachkomme also 6565,5 <- statt 6565,50 |
Re: Killogramm, Gramm und milligram
Also dein erstes Problem kannst du beheben in dem du schreibst dass er alles bis zum Komma zählen soll hab grad kein Delphi da das müsste aber mit Delimiter gehen ansonsten über [er soll sagen wo pos(vom ,)] und wenn die Zahl größer 3 ist dann wie gesagt. Bei deinem 2. Problem würde ich sagen solltest du eine Prozedur schreiben die das überprüft, bzw. einfügt
|
Re: Killogramm, Gramm und milligram
sollte doch nicht so schwer sein.
ist der errechnete Wert < 1 dann nehme eine Einheit kleiner als die jetzige und multipliziere den Wert mit 1000 ist der errechnete Wert > 1000 dann nehme eine Einheit größer als die jetzige und teile den Wert durch 1000 Beispiel: 4 x 15g = 60g nichts ändert sich 8 x 150g = 1200g Einheit ändert sich auf 1,2 kg 4 x 0,15 = 0,6g Einheit ändert sich auf 600 mg Grüße Klaus |
Re: Killogramm, Gramm und milligram
Ich bin ja mal nett ;)
Zitat:
Wenn du das als String einliest musst du das dann einfach in eine Fließkommazahl (Extended) umwandeln. Zitat:
Also z.B. 1,000 g? Dann könntest du das in einer Schleife (ich finde eine for-schleife schön ;) ): SValue = Wert als String ('123,45') Value = Wert (123,45) Nachkomma = Nachkommastellen (0,45) Laenge = Länge der Nachkommstellen (2)
Delphi-Quellcode:
Zusammenfassend zu der Aufgabe: Du musst einfach nur ein bisschen rechnen lassen, allerdings nicht mit Strings. Die Strings solltest du nur verwenden, wenn du es ausgeben willst, oder (wie es bei Fall B der fall war ^^) wenn du etwas hinzufügen willst (Nullen vor/nach allen Ziffer (001,200)), was beim Integer/Extended eiskalt (^^) gelöscht werden würde.
Value := StrToFloat(SValue);
//Nachkommastellen "errechnen" Nachkomma := Value - Round(Value); // Länge bestimmen { Entweder du wandelst es in einen String um und überprüfst die Länge } Laenge := FloatToStr(Nachkomma) - 2; // - 2 wegen dem komma und der führenden null: [0,]45 { Du könntest es auch ausrechnen (is komplizierter), werde es aber nicht hier erklären, da es über den String auch funktionieren sollte } // Nullen "ansetzen" for i := Laenge to 3 do SValue := SValue + '0'; // Aus diesem Code kann man dann auch einen einzeiler machen (ACHTUNG: Komplizierter ;) ) for i := FloatToStr(StrToFloat(SValue) - Round(StrToFloat(SValue))) - 2 to 3 do SValue := SValue + '0'; Ich hoffe mal ich konnte weiterhelfen. Eine Frage: Sollte es nur von Tonnen - Milligramm gehen? Oder auch darüber? Ich möchte ungerne das fertige Programm jetzt posten, aber ich geben einen Anstoß: (weitere Erklärung siehe oben)
Delphi-Quellcode:
// Zuerst den Wert IMMER in ein Extended umwandeln ;) Damit lässt sich alles besser berechnen
Value := StrToFloat(SValue); if Value >= 1000 then begin // in Kilogramm if Value / 1000 >= 1000 then begin // in Tonnen/Megagramm // Umrechnung in Tonnen (aufpassen: Umwandlung Gramm >>> Tonnen ist 1 Gramm * 1.000.000 = 1 Tonne!) end else begin // Umrechnung in Kilogramm end; end else if Value < 1 begin // in Milligramm // Umrechnung in Milligramm end else begin // so lassen (GRamm) //keine Umrechnung end; xZise hat folgendes hinzugefügt: Übrigends musst du es nachher wieder umwandeln und in ein Label/Edit eintragen. |
Re: Killogramm, Gramm und milligram
Hallo, TheCatcher,
Ich hatte das mal so gelöst Ursprünglich wurden 3 signifikante Ziffern ausgegeben. So wie es jetzt ist, bis zu 18 signikanten Ziffern nach dem Dezimalpunkt. Hab ich aber nicht ausgiebig getestet.
Delphi-Quellcode:
FUNCTION Normalize(v:extended; baseunit:string):string;
type TNumberUnit=(nuYocto,nuZepto,nuAtta,nuFemto,nuPiko,nuNano,nuMicro,nuMilli, nuNone,nuKilo,nuMega,nuGiga,nuTera,nuPeta,nuExa,nuZetta,nuYotta); const numberunits:Array[TNumberUnit] of char='yzafpn'#181'm kMGTPEZY'; var i,d:integer; nu:TNumberUnit; begin nu:=nuNone; if v<>0 then begin while v<1 do begin v:=v*1000; nu:=Pred(nu); end; while v>=1000 do begin v:=v/1000; nu:=Succ(nu); end; // Einstellung auf 3 signifikante Ziffern // if (nu=nuNone) or (v>99.95 {>=100}) then d:=0 // else if v>9.95 {>=10} then d:=1 // else d:=2; end; // str(v:0:d,result); d:=18; str(v:0:d,result); for i:=Length(result) downto 1 do if result[i]='0' then dec(d) else break; str(v:0:d,result); if nu=nuNone then result:=result+' '+baseunit else result:=result+' '+numberunits[nu]+baseunit; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 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