fließkommazahl in zeitangabe umwandel?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
crossroads
Beiträge: 244
Registriert: 29.08.2004 05:41
Wohnort: Rhine Main Area

Beitrag von crossroads »

Ich glaube, es hat keiner von Euch wirklich verstanden:

Eine Formel liefert einen String in der Form STD,MIN zurück - z.B. 2,78

Man könnte diesen Wert als Fließkomma ansehen - aber es ist keine Fließkommazahl, sondern eine eigenwillige Darstellung eines Zeitwertes.
Andersrum gesagt: Das zurückgegebene Resultat ist eine Zeitangabe mit der Syntax STD,MIN - wobei das Komma als Separator die Stunden von den Minuten trennt.
Demnach bedeutet 2,78 ==> 2 Std. 78 Min. oder 3 Std. 18 Min.

Fazit: auch wenn's wie eine Fließkommazahl aussieht - es ist keine! :wink:
Daher erübrigt sich auch eine Umwandlung:

Code: Alles auswählen

gm.f = ValF(ReplaceString(GetGadgetText(6), ",", ".", 2) ; kannste vergessen)
Stattdessen den Gadgettext splitten in einen Vorkomma- und Nachkommateil und damit weiterrechnen.

Ich könnte wetten, es geht noch einfacher (dazu müßte man aber mal Einsicht in den Source haben):
Irgendwo wird der Gadgettext gesetzt, etwa so

Code: Alles auswählen

SetGadgetText(6, x$)
und irgendwo davor wird x$ generiert - vielleicht so:

Code: Alles auswählen

x$ = Str(a) + "," + Str(b)
Damit ließe sich alles andere regeln; aber wie gesagt: den Source müßte man kennen ...
Man soll die Tür aufmachen, bevor man durchgeht ...
Benutzeravatar
Zerosurf
Beiträge: 131
Registriert: 11.10.2005 15:46

Beitrag von Zerosurf »

Die 2,78 bedeuten einfach 2.78 und das ist eine Fließkommazahl auf 2 Nachkommastellen beschränkt und diese Zahl würde ich gerne umwandeln ==> 2 Std. 78 Min. oder 3 Std. 18 Min.

Hier der komplette Source:

Code: Alles auswählen

 If OpenWindow(0, 216, 0, 400, 300,  #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered | #PB_Window_WindowCentered , "Medhelper")
    If CreateMenu(0, WindowID())
      MenuTitle("Programme")
      MenuItem(1, "Conzcalc")
      MenuItem(2, "Doseconv")
      MenuBar()
      MenuItem(3, "Ende")
      MenuTitle("Hilfe")
      MenuItem(4, "Conzcalc")
      MenuItem(5, "Doseconv")
      MenuBar()
      MenuItem(6, "Visit Website")
      MenuItem(7, "About")
    EndIf
    If CreateGadgetList(WindowID())
        Frame3DGadget(2, 10, 10, 380, 30, "", #PB_Frame3D_Single) 
        Frame3DGadget(0, -5, -5, 410, 310, "")
        Frame3DGadget(1, 10, 50, 380, 220, "")
        ProgressBarGadget(3, 20, 157, 360, 10, 1, 5000, #PB_ProgressBar_Smooth)
        TextGadget(12, 170, 18, 60, 20, "Conzcalc", #PB_Text_Center)
        TextGadget(20, 60, 70, 140, 20, "Gewünschte Menge:")
        TextGadget(4, 60, 100, 140, 20, "Ausgangskonzentration:")
        TextGadget(5, 60, 130, 140, 20, "Gewünschte Konzentration:")
        StringGadget(6, 240, 67, 70, 20, "", #PB_Text_Right)
        StringGadget(7, 240, 97, 70, 20, "", #PB_Text_Right)
        StringGadget(8, 240, 127, 70, 20, "", #PB_Text_Right)
        TextGadget(9, 315, 100, 30, 20, "in %")
        TextGadget(10, 315, 130, 30, 20, "in %")
        TextGadget(11, 315, 70, 30, 20, "in ml")
        TextGadget(13, 60, 180, 170, 20, "Menge der Ausgangskonzentration:")
        TextGadget(14, 60, 210, 160, 20, "Menge des Lösungsmittels:")
        ButtonGadget(15, 160, 240, 80, 20, "Berechnen", #PB_Button_Default)
        TextGadget(16, 315, 180, 20, 20, "ml")
        TextGadget(17, 315, 210, 20, 20, "ml")
        TextGadget(18, 240, 177, 70, 20, "", #PB_Text_Right | #PB_Text_Border)
        TextGadget(19, 240, 207, 70, 20, "", #PB_Text_Right | #PB_Text_Border)
        TextGadget(21, 170, 18, 60, 20, "Doseconv", #PB_Text_Center)
        TextGadget(22, 60, 70, 140, 20, "Körpergewicht:")
        TextGadget(23, 60, 100, 140, 20, "Gewünschte Dosierung:")
        TextGadget(24, 60, 130, 140, 20, "Medikamentenkonzentration:")
        StringGadget(25, 240, 67, 70, 20, "", #PB_Text_Right)
        StringGadget(26, 240, 97, 70, 20, "", #PB_Text_Right)
        StringGadget(27, 240, 127, 40, 20, "", #PB_Text_Right)
        StringGadget(28, 310, 127, 40, 20, "", #PB_Text_Right)
        TextGadget(29, 315, 70, 30, 20, "kg")
        TextGadget(30, 315, 100, 65, 20, "µg/kgKG/min")
        TextGadget(31, 285, 130, 25, 20, "mg/")
        TextGadget(32, 355, 130, 20, 20, "ml")
        TextGadget(33, 60, 180, 170, 20, "Flußrate:")
        TextGadget(34, 60, 210, 169, 20, "Infusionsdauer bei einer Menge von")
        TextGadget(45, 230, 210, 40, 20, "", #PB_Text_Center)
        TextGadget(46, 270, 210, 15, 20, "ml:")
        TextGadget(35, 255, 180, 25, 20, "ml/h")
        TextGadget(36, 355, 180, 25, 20, "mg/h")
        TextGadget(37, 355, 210, 25, 20, "h,min")
        TextGadget(38, 190, 177, 60, 20, "", #PB_Text_Right | #PB_Text_Border)
        TextGadget(39, 290, 177, 60, 20, "", #PB_Text_Right | #PB_Text_Border)
        TextGadget(40, 290, 207, 60, 20, "", #PB_Text_Right | #PB_Text_Border)
        ButtonGadget(41, 160, 240, 80, 20, "Berechnen", #PB_Button_Default)
        TextGadget(42, 130, 18, 140, 20, "Bitte Programm auswählen:", #PB_Text_Center)
        ButtonGadget(43, 70, 140, 100, 30, "Conzcalc")
        ButtonGadget(44, 230, 140, 100, 30, "Doseconv")
      EndIf
      
      For a=3 To 41
        HideGadget(a,1)
      Next
      HideGadget(45,1)
      HideGadget(46,1) 
       
      Repeat 
        EventID = WaitWindowEvent()
        If EventID = #PB_Event_CloseWindow 
          Quit = 1 
        ElseIf EventID = #PB_EventMenu
          If EventMenuID()=6
            RunProgram("http://www.marcotorskyj.com")
          EndIf
          If EventMenuID()=4
            MessageRequester("Über Conzcalc","Conzcalc - Conzentration-Calculator" + Chr(10) + Chr(10) + "Dieser Rechner hilft beim Umrechnen von Lösungen mit höheren Konzentrationen" + Chr(10) + "zu Lösungen mit niedrigeren Konzentrationen." + Chr(10) + Chr(10) + "Beispiel:" + Chr(10) + "Ein 2 prozentiges Medikament soll in eine 1,5 prozentige Lösung umgewandelt werden." + Chr(10) + "Die gewünschte Menge der 1,5 prozentigen Lösung soll 50ml betragen." + Chr(10) + Chr(10) + "Wieviel ml benötigt man von der 2 prozentigen Lösung und wieviel Lösungsmittel" + Chr(10) + "wird benötigt um eine 1,5 prozentige - 50ml Lösung herzustellen?", #MB_ICONASTERISK) 
          EndIf
          If EventMenuID()=5
            MessageRequester("Über Doseconv","Doseconv - Dose-Converter" + Chr(10) + Chr(10) + "Dieser Rechner hilft beim Umrechnen von µg/kgKG/min in ml/h bzw. in mg/h." +Chr(10) + "Es wird auch die Dauer der Infusion ausgerechnet.", #MB_ICONASTERISK)
          EndIf
          If EventMenuID()=7
            MessageRequester("Thanks...", "for using Medhelper v1.00" + Chr(10) + Chr(10) + "Written by Marco TORSKYJ" + Chr(10) + Chr(10) + "Supported by Dr. Andreas MAYER" + Chr(10) + "and Dr. Karl-Heinz STADLBAUER" + Chr(10) + Chr(10) + "Copyright © 2005 Marco TORSKYJ" + Chr(10) + "All rights reserved.", #MB_ICONASTERISK)
          EndIf
          
          If EventMenuID()=3
            Quit = 1
          EndIf 
          If  EventMenuID()=1
            SetGadgetText(6,"")
            SetGadgetText(7,"")
            SetGadgetText(8,"")
            SetGadgetText(18,"")
            SetGadgetText(19,"")
            SetGadgetText(25,"")
            SetGadgetText(26,"")
            SetGadgetText(27,"")
            SetGadgetText(28,"")
            SetGadgetText(45,"")
            SetGadgetText(38,"")
            SetGadgetText(39,"")
            SetGadgetText(40,"")
            For a=3 To 20
              HideGadget(a,0)
            Next
            For a=21 To 46
              HideGadget(a,1)
            Next
            ActivateGadget(15) 
          EndIf
          If  EventMenuID()=2
            SetGadgetText(6,"")
            SetGadgetText(7,"")
            SetGadgetText(8,"")
            SetGadgetText(18,"")
            SetGadgetText(19,"")
            SetGadgetText(25,"")
            SetGadgetText(26,"")
            SetGadgetText(27,"")
            SetGadgetText(28,"")
            SetGadgetText(45,"")
            SetGadgetText(38,"")
            SetGadgetText(39,"")
            SetGadgetText(40,"") 
            HideGadget(3,0)
            For a=4 To 20
              HideGadget(a,1)
            Next
            For a=21 To 46
              HideGadget(a,0)
            Next
            For a=42 To 44
              HideGadget(a,1)
            Next
            ActivateGadget(41) 
          EndIf
          
        EndIf
        
        If EventID = #PB_Event_Gadget
          If EventGadgetID()=43
            SetGadgetText(6,"")
            SetGadgetText(7,"")
            SetGadgetText(8,"")
            SetGadgetText(18,"")
            SetGadgetText(19,"")
            SetGadgetText(25,"")
            SetGadgetText(26,"")
            SetGadgetText(27,"")
            SetGadgetText(28,"")
            SetGadgetText(45,"")
            SetGadgetText(38,"")
            SetGadgetText(39,"")
            SetGadgetText(40,"")
            For a=3 To 20
              HideGadget(a,0)
            Next
            For a=21 To 46
              HideGadget(a,1)
            Next
            ActivateGadget(15) 
          EndIf
          If EventGadgetID()=44
            SetGadgetText(6,"")
            SetGadgetText(7,"")
            SetGadgetText(8,"")
            SetGadgetText(18,"")
            SetGadgetText(19,"")
            SetGadgetText(25,"")
            SetGadgetText(26,"")
            SetGadgetText(27,"")
            SetGadgetText(28,"")
            SetGadgetText(45,"")
            SetGadgetText(38,"")
            SetGadgetText(39,"")
            SetGadgetText(40,"") 
            HideGadget(3,0)
            For a=4 To 20
              HideGadget(a,1)
            Next
            For a=21 To 46
              HideGadget(a,0)
            Next
            For a=42 To 44
              HideGadget(a,1)
            Next
            ActivateGadget(41) 
          EndIf
          
          If EventGadgetID()=15
            SetGadgetText(18,"")
            SetGadgetText(19,"")
            
            gm.f = ValF(ReplaceString(GetGadgetText(6), ",", ".", 2))
            ak.f = ValF(ReplaceString(GetGadgetText(7), ",", ".", 2))
            gk.f = ValF(ReplaceString(GetGadgetText(8), ",", ".", 2))
            
            If gm = 0
              MessageRequester("Achtung!","Keine Angabe der gewünschten Menge!", #MB_ICONEXCLAMATION)
            ElseIf ak = 0
              MessageRequester("Achtung!","Keine Angabe der Ausgangskonzentration!", #MB_ICONEXCLAMATION)
            ElseIf ak >= 100
              MessageRequester("Achtung!","Ausgangskonzentration muß kleiner als 100 sein!", #MB_ICONEXCLAMATION)
            ElseIf gk = 0
              MessageRequester("Achtung!","Keine Angabe der gewünschten Konzentration!", #MB_ICONEXCLAMATION)
            ElseIf gk > ak
              MessageRequester("Achtung!","Gewünschte Konzentration muß kleiner sein!", #MB_ICONEXCLAMATION)
            Else
              
              mdak.f = (gm * gk) / ak
              mdlm.f = gm - mdak
              
              result1$ = ReplaceString(StrF(mdak,2), ".", ",", 2) 
              result2$ = ReplaceString(StrF(mdlm,2), ".", ",", 2) 
              
              For a=1 To 5000
                SetGadgetState(3,a)
              Next 
              
              SetGadgetText(18,result1$)
              SetGadgetText(19,result2$)
            EndIf
          EndIf
          If EventGadgetID()=41
            
            SetGadgetText(38,"")
            SetGadgetText(39,"")
            SetGadgetText(40,"")
            
              kg.f = ValF(ReplaceString(GetGadgetText(25), ",", ".", 2))
              gd.f = ValF(ReplaceString(GetGadgetText(26), ",", ".", 2))
              mkmg.f = ValF(ReplaceString(GetGadgetText(27), ",", ".", 2))
              mkml.f = ValF(ReplaceString(GetGadgetText(28), ",", ".", 2))
              
              If kg = 0
                MessageRequester("Achtung!","Keine Angabe des Körpergewichtes!", #MB_ICONEXCLAMATION)
              ElseIf gd = 0
                MessageRequester("Achtung!","Keine Angabe der gewünschten Dosierung!", #MB_ICONEXCLAMATION)
              ElseIf mkmg = 0
                MessageRequester("Achtung!","Keine Angabe der Medikamentenkonzentration (mg)!", #MB_ICONEXCLAMATION)
              ElseIf mkml = 0
                MessageRequester("Achtung!","Keine Angabe der Medikamentenkonzentration (ml)!", #MB_ICONEXCLAMATION)
              Else
                
                frmlh.f = (kg * gd * 0.06) / (mkmg / mkml)
                frmgh.f = (mkmg / mkml) * frmlh
                rz.f = mkml / frmlh
                m.f = mkml
                
                result3$ = ReplaceString(StrF(frmlh,2), ".", ",", 2) 
                result4$ = ReplaceString(StrF(frmgh,2), ".", ",", 2) 
                result5$ = ReplaceString(StrF(rz,2), ".", ",", 2) 
                result6$ = ReplaceString(StrF(m,2), ".", ",", 2) 
                
                For a=1 To 5000
                  SetGadgetState(3,a)
                Next 
                
                SetGadgetText(38,result3$)
                SetGadgetText(39,result4$)
                SetGadgetText(40,result5$)
                SetGadgetText(45,result6$)
              EndIf
            EndIf
        EndIf
      Until Quit=1
    EndIf
    End
Vielen Dank,
mfg. Zerosurf
Benutzeravatar
roherter
Beiträge: 1407
Registriert: 10.04.2005 18:58
Kontaktdaten:

Beitrag von roherter »

wir wärs so

du hast den wert 2.78
also wert =2.78 die

so nun machste
Ergebnis = Int(wert.f) ;gibt die ganzzahl(2) zurück
nun weiter
Minuten =(Ergebnis*60)+78
müsste Minuten=198 ergeben

so und jetzt haste das ergebniss

Stunden=Minuten/60
erbibt Stunden=3.18
Purebasic 5.0 32bit und 64 bit

I'm back from hell
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

@Zerosurf:

Code: Alles auswählen

Procedure$ Zeit(zeit$)
  stunden = Val( StringField(zeit$,1,",") )
  minuten = Val( StringField(zeit$,2,",") )
  
  If minuten
    stunden + ( minuten / 60 )
    minuten = ( minuten % 60 )
  EndIf
  
  ProcedureReturn StrU(stunden,#LONG) + "," + RSet(StrU(minuten,#LONG),2,"0")
EndProcedure


Debug Zeit("5,00")
Debug Zeit("2,13")
Debug Zeit("290,61")
Debug Zeit("2,78")
Debug Zeit("0,63")
Ich denke das kannst Du Dir noch selbst anpassen, wenn
Du es etwas anders brauchst.
Wichtig ist das bei der Rückgabe die Minuten mit RSet auf
2 Stellen erweitert werden. "0,63" soll ja "1,03" werden, und
nicht "1,3".
Vielleicht nimmst Du für die Rückgabe einfach einen Doppel-
punkt: "1:03" sieht meiner Meinung nach mehr nach einer
Zeitangabe aus.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Lupo
Beiträge: 147
Registriert: 16.02.2005 15:15

Beitrag von Lupo »

@zerosurf

Bist du gaaanz sicher dass der aus der Formel errechnete Wert
von 2,78 wirklich in der Form umgeandelt werden soll, daß die
Nachkommastellen ganze Minuten sind ? :shock:

Ich kenn die Formel nicht und liege daher vieleicht völlig falsch,
aber du rechnest doch von Anfang an mit floats und das Ergebnis
kann dann eigentlich nur *eine* Einheit haben, nämlich Stunden *oder* Minuten.

Also wären 2,78 Stunden nicht 3h 18min sondern nur 2h 46,8 min.
(1,5 Stunden ist ja auch 1h und 30min und nicht 1h und 50 min)

Ich begreife nicht wie es zu der Annahme kommt dass 2,78 nun 2h und
78 Minuten sind.

Da es sich um eine medizinische Sache handelt wäre es ev. fatal wenn
die Zeit zu lang ausgerechnet wird :o

Danke

LUPO
Benutzeravatar
Laurin
Beiträge: 1639
Registriert: 23.09.2004 18:04
Wohnort: /dev/eth0

Beitrag von Laurin »

> Ich begreife nicht wie es zu der Annahme kommt dass 2,78 nun 2h und
> 78 Minuten sind.
Deeem und mir ist das auch aufgefallen.

@zerosurf
Wie sieht den die Formel nun genau aus, die 2,78 als Ergebnis bringt? Ich meine die Originalformel, nicht das, was du programmiert hast.
Now these points of data make a beautiful line.
And we're out of beta. We're releasing on time.
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Beitrag von jear »

Code: Alles auswählen

mdak.f = (gm * gk) / ak 
mdlm.f = gm - mdak
So steht es in seiner Source. Das Ergebnis sind also wohl Stunden als Float.

Daraus einen auf die Sekunde genauen String zu machen geht einfach mit :

Code: Alles auswählen

result1$ = FormatDate("%hh:%ii:%ss", Round(mdak * 3600, 1))
result2$ = FormatDate("%hh:%ii:%ss", Round(mdlm * 3600, 1))
Einen Code für eine auf Hunderstel Sekunden genaue Ausgabe habe ich bereits gepostet.
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Benutzeravatar
crossroads
Beiträge: 244
Registriert: 29.08.2004 05:41
Wohnort: Rhine Main Area

Beitrag von crossroads »

@all
Zerosurf will das hier haben und nix anderes:
Zerosurf hat geschrieben:Die 2,78 bedeuten einfach 2.78 und das ist eine Fließkommazahl auf 2 Nachkommastellen beschränkt und diese Zahl würde ich gerne umwandeln ==> 2 Std. 78 Min. oder 3 Std. 18 Min.
@Zerosurf
Deshalb: mach's so, wie Danilo vorschlägt:

Code: Alles auswählen

; ####################################################
; #                Danilos Procedure                 #
; ####################################################
Procedure$ Zeit(zeit$) 
  stunden = Val( StringField(zeit$,1,",") ) 
  minuten = Val( StringField(zeit$,2,",") ) 
  
  If minuten 
    stunden + ( minuten / 60 ) 
    minuten = ( minuten % 60 ) 
  EndIf 
  
  ProcedureReturn StrU(stunden,#Long) + "," + RSet(StrU(minuten,#Long),2,"0") 
EndProcedure 
; ####################################################

If OpenWindow(0, 216, 0, 400, 300,  #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered | #PB_Window_WindowCentered , "Medhelper") 
  If CreateMenu(0, WindowID()) 
    MenuTitle("Programme") 
    MenuItem(1, "Conzcalc") 
    MenuItem(2, "Doseconv") 
    MenuBar() 
    MenuItem(3, "Ende") 
    MenuTitle("Hilfe") 
    MenuItem(4, "Conzcalc") 
    MenuItem(5, "Doseconv") 
    MenuBar() 
    MenuItem(6, "Visit Website") 
    MenuItem(7, "About") 
  EndIf 
  If CreateGadgetList(WindowID()) 
    Frame3DGadget(2, 10, 10, 380, 30, "", #PB_Frame3D_Single) 
    Frame3DGadget(0, -5, -5, 410, 310, "") 
    Frame3DGadget(1, 10, 50, 380, 220, "") 
    ProgressBarGadget(3, 20, 157, 360, 10, 1, 5000, #PB_ProgressBar_Smooth) 
    TextGadget(12, 170, 18, 60, 20, "Conzcalc", #PB_Text_Center) 
    TextGadget(20, 60, 70, 140, 20, "Gewünschte Menge:") 
    TextGadget(4, 60, 100, 140, 20, "Ausgangskonzentration:") 
    TextGadget(5, 60, 130, 140, 20, "Gewünschte Konzentration:") 
    StringGadget(6, 240, 67, 70, 20, "", #PB_Text_Right) 
    StringGadget(7, 240, 97, 70, 20, "", #PB_Text_Right) 
    StringGadget(8, 240, 127, 70, 20, "", #PB_Text_Right) 
    TextGadget(9, 315, 100, 30, 20, "in %") 
    TextGadget(10, 315, 130, 30, 20, "in %") 
    TextGadget(11, 315, 70, 30, 20, "in ml") 
    TextGadget(13, 60, 180, 170, 20, "Menge der Ausgangskonzentration:") 
    TextGadget(14, 60, 210, 160, 20, "Menge des Lösungsmittels:") 
    ButtonGadget(15, 160, 240, 80, 20, "Berechnen", #PB_Button_Default) 
    TextGadget(16, 315, 180, 20, 20, "ml") 
    TextGadget(17, 315, 210, 20, 20, "ml") 
    TextGadget(18, 240, 177, 70, 20, "", #PB_Text_Right | #PB_Text_Border) 
    TextGadget(19, 240, 207, 70, 20, "", #PB_Text_Right | #PB_Text_Border) 
    TextGadget(21, 170, 18, 60, 20, "Doseconv", #PB_Text_Center) 
    TextGadget(22, 60, 70, 140, 20, "Körpergewicht:") 
    TextGadget(23, 60, 100, 140, 20, "Gewünschte Dosierung:") 
    TextGadget(24, 60, 130, 140, 20, "Medikamentenkonzentration:") 
    StringGadget(25, 240, 67, 70, 20, "", #PB_Text_Right) 
    StringGadget(26, 240, 97, 70, 20, "", #PB_Text_Right) 
    StringGadget(27, 240, 127, 40, 20, "", #PB_Text_Right) 
    StringGadget(28, 310, 127, 40, 20, "", #PB_Text_Right) 
    TextGadget(29, 315, 70, 30, 20, "kg") 
    TextGadget(30, 315, 100, 65, 20, "µg/kgKG/min") 
    TextGadget(31, 285, 130, 25, 20, "mg/") 
    TextGadget(32, 355, 130, 20, 20, "ml") 
    TextGadget(33, 60, 180, 170, 20, "Flußrate:") 
    TextGadget(34, 60, 210, 169, 20, "Infusionsdauer bei einer Menge von") 
    TextGadget(45, 230, 210, 40, 20, "", #PB_Text_Center) 
    TextGadget(46, 270, 210, 15, 20, "ml:") 
    TextGadget(35, 255, 180, 25, 20, "ml/h") 
    TextGadget(36, 355, 180, 25, 20, "mg/h") 
    TextGadget(37, 355, 210, 25, 20, "h,min") 
    TextGadget(38, 190, 177, 60, 20, "", #PB_Text_Right | #PB_Text_Border) 
    TextGadget(39, 290, 177, 60, 20, "", #PB_Text_Right | #PB_Text_Border) 
    TextGadget(40, 290, 207, 60, 20, "", #PB_Text_Right | #PB_Text_Border) 
    ButtonGadget(41, 160, 240, 80, 20, "Berechnen", #PB_Button_Default) 
    TextGadget(42, 130, 18, 140, 20, "Bitte Programm auswählen:", #PB_Text_Center) 
    ButtonGadget(43, 70, 140, 100, 30, "Conzcalc") 
    ButtonGadget(44, 230, 140, 100, 30, "Doseconv") 
  EndIf 
  
  For a=3 To 41 
    HideGadget(a,1) 
  Next 
  HideGadget(45,1) 
  HideGadget(46,1) 
  
  Repeat 
    EventID = WaitWindowEvent() 
    If EventID = #PB_Event_CloseWindow 
      Quit = 1 
    ElseIf EventID = #PB_EventMenu 
      If EventMenuID()=6 
        RunProgram("http://www.marcotorskyj.com") 
      EndIf 
      If EventMenuID()=4 
        MessageRequester("Über Conzcalc","Conzcalc - Conzentration-Calculator" + Chr(10) + Chr(10) + "Dieser Rechner hilft beim Umrechnen von Lösungen mit höheren Konzentrationen" + Chr(10) + "zu Lösungen mit niedrigeren Konzentrationen." + Chr(10) + Chr(10) + "Beispiel:" + Chr(10) + "Ein 2 prozentiges Medikament soll in eine 1,5 prozentige Lösung umgewandelt werden." + Chr(10) + "Die gewünschte Menge der 1,5 prozentigen Lösung soll 50ml betragen." + Chr(10) + Chr(10) + "Wieviel ml benötigt man von der 2 prozentigen Lösung und wieviel Lösungsmittel" + Chr(10) + "wird benötigt um eine 1,5 prozentige - 50ml Lösung herzustellen?", #MB_ICONASTERISK) 
      EndIf 
      If EventMenuID()=5 
        MessageRequester("Über Doseconv","Doseconv - Dose-Converter" + Chr(10) + Chr(10) + "Dieser Rechner hilft beim Umrechnen von µg/kgKG/min in ml/h bzw. in mg/h." +Chr(10) + "Es wird auch die Dauer der Infusion ausgerechnet.", #MB_ICONASTERISK) 
      EndIf 
      If EventMenuID()=7 
        MessageRequester("Thanks...", "for using Medhelper v1.00" + Chr(10) + Chr(10) + "Written by Marco TORSKYJ" + Chr(10) + Chr(10) + "Supported by Dr. Andreas MAYER" + Chr(10) + "and Dr. Karl-Heinz STADLBAUER" + Chr(10) + Chr(10) + "Copyright © 2005 Marco TORSKYJ" + Chr(10) + "All rights reserved.", #MB_ICONASTERISK) 
      EndIf 
      
      If EventMenuID()=3 
        Quit = 1 
      EndIf 
      If  EventMenuID()=1 
        SetGadgetText(6,"") 
        SetGadgetText(7,"") 
        SetGadgetText(8,"") 
        SetGadgetText(18,"") 
        SetGadgetText(19,"") 
        SetGadgetText(25,"") 
        SetGadgetText(26,"") 
        SetGadgetText(27,"") 
        SetGadgetText(28,"") 
        SetGadgetText(45,"") 
        SetGadgetText(38,"") 
        SetGadgetText(39,"") 
        SetGadgetText(40,"") 
        For a=3 To 20 
          HideGadget(a,0) 
        Next 
        For a=21 To 46 
          HideGadget(a,1) 
        Next 
        ActivateGadget(15) 
      EndIf 
      If  EventMenuID()=2 
        SetGadgetText(6,"") 
        SetGadgetText(7,"") 
        SetGadgetText(8,"") 
        SetGadgetText(18,"") 
        SetGadgetText(19,"") 
        SetGadgetText(25,"") 
        SetGadgetText(26,"") 
        SetGadgetText(27,"") 
        SetGadgetText(28,"") 
        SetGadgetText(45,"") 
        SetGadgetText(38,"") 
        SetGadgetText(39,"") 
        SetGadgetText(40,"") 
        HideGadget(3,0) 
        For a=4 To 20 
          HideGadget(a,1) 
        Next 
        For a=21 To 46 
          HideGadget(a,0) 
        Next 
        For a=42 To 44 
          HideGadget(a,1) 
        Next 
        ActivateGadget(41) 
      EndIf 
      
    EndIf 
    
    If EventID = #PB_Event_Gadget 
      If EventGadgetID()=43 
        SetGadgetText(6,"") 
        SetGadgetText(7,"") 
        SetGadgetText(8,"") 
        SetGadgetText(18,"") 
        SetGadgetText(19,"") 
        SetGadgetText(25,"") 
        SetGadgetText(26,"") 
        SetGadgetText(27,"") 
        SetGadgetText(28,"") 
        SetGadgetText(45,"") 
        SetGadgetText(38,"") 
        SetGadgetText(39,"") 
        SetGadgetText(40,"") 
        For a=3 To 20 
          HideGadget(a,0) 
        Next 
        For a=21 To 46 
          HideGadget(a,1) 
        Next 
        ActivateGadget(15) 
      EndIf 
      If EventGadgetID()=44 
        SetGadgetText(6,"") 
        SetGadgetText(7,"") 
        SetGadgetText(8,"") 
        SetGadgetText(18,"") 
        SetGadgetText(19,"") 
        SetGadgetText(25,"") 
        SetGadgetText(26,"") 
        SetGadgetText(27,"") 
        SetGadgetText(28,"") 
        SetGadgetText(45,"") 
        SetGadgetText(38,"") 
        SetGadgetText(39,"") 
        SetGadgetText(40,"") 
        HideGadget(3,0) 
        For a=4 To 20 
          HideGadget(a,1) 
        Next 
        For a=21 To 46 
          HideGadget(a,0) 
        Next 
        For a=42 To 44 
          HideGadget(a,1) 
        Next 
        ActivateGadget(41) 
      EndIf 
      
      If EventGadgetID()=15 
        SetGadgetText(18,"") 
        SetGadgetText(19,"") 
        
        gm.f = ValF(ReplaceString(GetGadgetText(6), ",", ".", 2)) 
        ak.f = ValF(ReplaceString(GetGadgetText(7), ",", ".", 2)) 
        gk.f = ValF(ReplaceString(GetGadgetText(8), ",", ".", 2)) 
        
        If gm = 0 
          MessageRequester("Achtung!","Keine Angabe der gewünschten Menge!", #MB_ICONEXCLAMATION) 
        ElseIf ak = 0 
          MessageRequester("Achtung!","Keine Angabe der Ausgangskonzentration!", #MB_ICONEXCLAMATION) 
        ElseIf ak >= 100 
          MessageRequester("Achtung!","Ausgangskonzentration muß kleiner als 100 sein!", #MB_ICONEXCLAMATION) 
        ElseIf gk = 0 
          MessageRequester("Achtung!","Keine Angabe der gewünschten Konzentration!", #MB_ICONEXCLAMATION) 
        ElseIf gk > ak 
          MessageRequester("Achtung!","Gewünschte Konzentration muß kleiner sein!", #MB_ICONEXCLAMATION) 
        Else 
          
          mdak.f = (gm * gk) / ak 
          mdlm.f = gm - mdak 
          
          result1$ = ReplaceString(StrF(mdak,2), ".", ",", 2) 
          result2$ = ReplaceString(StrF(mdlm,2), ".", ",", 2) 
          
          For a=1 To 5000 
            SetGadgetState(3,a) 
          Next 
          
          SetGadgetText(18,result1$) 
          SetGadgetText(19,result2$) 
        EndIf 
      EndIf 
      If EventGadgetID()=41 
        
        SetGadgetText(38,"") 
        SetGadgetText(39,"") 
        SetGadgetText(40,"") 
        
        kg.f = ValF(ReplaceString(GetGadgetText(25), ",", ".", 2)) 
        gd.f = ValF(ReplaceString(GetGadgetText(26), ",", ".", 2)) 
        mkmg.f = ValF(ReplaceString(GetGadgetText(27), ",", ".", 2)) 
        mkml.f = ValF(ReplaceString(GetGadgetText(28), ",", ".", 2)) 
        
        If kg = 0 
          MessageRequester("Achtung!","Keine Angabe des Körpergewichtes!", #MB_ICONEXCLAMATION) 
        ElseIf gd = 0 
          MessageRequester("Achtung!","Keine Angabe der gewünschten Dosierung!", #MB_ICONEXCLAMATION) 
        ElseIf mkmg = 0 
          MessageRequester("Achtung!","Keine Angabe der Medikamentenkonzentration (mg)!", #MB_ICONEXCLAMATION) 
        ElseIf mkml = 0 
          MessageRequester("Achtung!","Keine Angabe der Medikamentenkonzentration (ml)!", #MB_ICONEXCLAMATION) 
        Else 
          
          frmlh.f = (kg * gd * 0.06) / (mkmg / mkml) 
          frmgh.f = (mkmg / mkml) * frmlh 
          rz.f = mkml / frmlh 
          m.f = mkml 
          
          result3$ = ReplaceString(StrF(frmlh,2), ".", ",", 2) 
          result4$ = ReplaceString(StrF(frmgh,2), ".", ",", 2) 
          result5$ = ReplaceString(StrF(rz,2), ".", ",", 2) 
          result6$ = ReplaceString(StrF(m,2), ".", ",", 2) 
          
          ; ####################################################
          ; #                Danilos Berechnung                #
          ; ####################################################
          x$ = Zeit(result5$)
          result5$ = StringField(x$,1,",") + " h "
          result5$ + StringField(x$,2,",") + " m"
          ; ####################################################
          
          For a=1 To 5000 
            SetGadgetState(3,a) 
          Next 
          
          SetGadgetText(38,result3$) 
          SetGadgetText(39,result4$) 
          SetGadgetText(40,result5$) 
          SetGadgetText(45,result6$)
          
          
        EndIf 
      EndIf 
    EndIf 
  Until Quit=1 
EndIf 
End 
Man soll die Tür aufmachen, bevor man durchgeht ...
Benutzeravatar
Lupo
Beiträge: 147
Registriert: 16.02.2005 15:15

Beitrag von Lupo »

Naja, was zerosurf haben will und was richtig ist sind zwei paar
Schuhe. Er kann sich ja auch geirrt haben und aus seiner
Berechnung geht klar hervor wie jear es als Codeschnippsel gepostet hat dass
wohl Stunden als float herauskommen. :roll:
Und das Proggi passt ja auch zu dem Screenshot. Also wird wohl
keine andere Berechnung dahinterstecken.

Es wäre auch total egal wenns nicht was medizinisches wäre und
im worst case könnte wer zuschaden kommen. Deshalb besser zweimal nachfragen :wink:

Danke Lupo
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

Hmm, wenn bei der Formel einmal also 1.99 rauskommt und ein zweites Mal 2.00 dann wäre das ein ziemlich krasser Sprung zurück.

1.99 => 1 Stunde 99min = 159min (Richtig wäre 119.4)
2.00 => 2 Stunden 0min = 120min

Das ergibt eine Differenz von 39 Minuten !!!

Ich denke, das dürfte den Rechenfehler für jeden offenlegen.
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Antworten