Avatar billede krukken Juniormester
09. juli 2007 - 12:23 Der er 7 kommentarer og
1 løsning

Indenfor interval

Jeg er ved at lave et ur, hvor jeg har brug for at sammenligne nogle timer.

Jeg har følgende værdier:
short watch_minuts =11; //urets opdaterede værdi
short watch_hours = 16; //urets opdaterede værdi
short Earliest_Minutes = 0; //tidligste værdi
short Earliest_Hours = 0;//tidligste værdi
short Latest_Minutes = 0; // seneste værdi
short Latest_Hours = 0;// seneste værdi

Det vil sige, at jeg gerne vil finde ud af, om urets tid, på nuværende tidspunkt er inden for intervallet Earliest_* til Latest_*
Avatar billede arne_v Ekspert
09. juli 2007 - 13:53 #1
Maaske du kunne konvertere hms'erne til time_t via mktime og lave et simpel:

start <= tid && tid <= slut

?
Avatar billede krukken Juniormester
09. juli 2007 - 14:20 #2
Det kan jeg desværre ikke. Jeg programmere på en Atmel Mega16 mikroprocessor, så det hele skal laves fra bunden:-(

Men jeg er selv nået frem til følgende, og det lader til at det virker.

*****************************
short watch_minuts =11;
    short watch_hours = 16;
    short Earliest_Minutes = 0;
    short Earliest_Hours = 0;
    short Latest_Minutes = 0;
    short Latest_Hours = 0;
    bool returnvalue = false;

    if(medicin_Interval % 2 == 0)
    {
        Latest_Hours = medicin_Hour + medicin_Interval/2;
    }
    else
    {
        Latest_Hours = medicin_Hour + (medicin_Interval-1)/2;
        Latest_Minutes = 30;
    }

    if(Latest_Hours >= 24)
        Latest_Hours = 24 - Latest_Hours;

    Earliest_Hours = Latest_Hours - medicin_Interval;
    if(Earliest_Hours <= 0)
        Earliest_Hours = 24 + Earliest_Hours;

    Earliest_Minutes = Latest_Minutes;

    if(Earliest_Hours < watch_hours && Latest_Hours > watch_hours)
        returnvalue = true;
   
    if(Earliest_Hours == watch_hours && Earliest_Minutes < watch_minuts && Earliest_Hours != Latest_Hours)
    {
            returnvalue = true;
    }

    if(Latest_Hours == watch_hours && Latest_Minutes > watch_minuts)
    {
            returnvalue = true;
    }
***********************
Avatar billede arne_v Ekspert
09. juli 2007 - 16:41 #3
saa lav din egen transformation:

t = 3600 * h + 60 * m + s

og test saa

start <= tid && tid <= slut
Avatar billede krukken Juniormester
10. juli 2007 - 09:48 #4
Du har helt ret. Mange tak for hjælpen. Jeg havde vist stirret mig blind på min egen løsning:-)

Mange tak for hjælpen. Ligger du et svar?
Avatar billede arne_v Ekspert
10. juli 2007 - 15:21 #5
gerne
Avatar billede bitmatic Nybegynder
10. juli 2007 - 16:13 #6
men husk på at hvis du gemmer 't' i et 16 bit register, så vil 't' lave overflow klokken lidt over 6 om aftenen.... :-)
Avatar billede arne_v Ekspert
22. september 2007 - 22:01 #7
Så mangler du bare at acceptere svaret.
Avatar billede krukken Juniormester
10. oktober 2007 - 21:05 #8
Sorry, at det har taget så lang tid. Endnu engang tak for hjælpen arne_v. Du ER eksperten.dk.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester