Dit is de code die ik nu heb.
alleen dit is ontzettend traag. weet iemand een duidelijk en sneller algorithme ?
stappen per jaar gaat niet, je zit dan met schrikkeljaar, en het kan zijn dat je in een schrikkeljaarbegint maar al onder de 29-02 zit. als je dat 365 dagen naar beneden gaat kom je niet langs de schrikkel.
Ook per 4 jaar is geen oplossing want ook dat is niet een constant aantal dagen (bij eeuwwisselingen (1900) mist een schrikkeljaar !)
per 400 jaar kan wel, is wel constant maar dan hebbie zulke grote stappen dat de 1 daga stapjes binnen de 400 jaar toch weer tijdrovend zijn !
Probleem definitie
Ik heb een datum bv 17-02-5004 en daar wil ik 36503 dagen vanaf halen. (elke willekeurige datum en aantal dagen moet gebruikt kunnen worden).
de uitkomst is een nieuwe datum.
hoe kan ik deze berekening snel uitvoeren ?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
| ADatum &ADatum::operator-(const int dagen) const
{
ADatum temp(12,12,2002); //evt 0-0-000 constructor maken of bij tijd over zelfs huidige dag !
temp = *this;
int i=0;
static int aantdagenSCHRIK[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
static int aantdagen[13] ={0,31,28,31,30,31,30,31,31,30,31,30,31};
while(i<dagen)
{
if(temp.IsSchrikkeljaar())
{
temp.pData->dag--;
if(temp.pData->dag < 1)
{
temp.pData->maand--;
if(temp.pData->maand < 1)
{
temp.pData->jaar--;
temp.pData->maand = 12;
}
temp.pData->dag = aantdagenSCHRIK[temp.pData->maand];
}
}
else
{
temp.pData->dag--;
if(temp.pData->dag < 1)
{
temp.pData->maand--;
if(temp.pData->maand < 1)
{
temp.pData->jaar--;
temp.pData->maand = 12;
}
temp.pData->dag = aantdagen[temp.pData->maand];
}
}
i++;
}
return temp;
} |
alleen dit is ontzettend traag. weet iemand een duidelijk en sneller algorithme ?
stappen per jaar gaat niet, je zit dan met schrikkeljaar, en het kan zijn dat je in een schrikkeljaarbegint maar al onder de 29-02 zit. als je dat 365 dagen naar beneden gaat kom je niet langs de schrikkel.
Ook per 4 jaar is geen oplossing want ook dat is niet een constant aantal dagen (bij eeuwwisselingen (1900) mist een schrikkeljaar !)
per 400 jaar kan wel, is wel constant maar dan hebbie zulke grote stappen dat de 1 daga stapjes binnen de 400 jaar toch weer tijdrovend zijn !
Probleem definitie
Ik heb een datum bv 17-02-5004 en daar wil ik 36503 dagen vanaf halen. (elke willekeurige datum en aantal dagen moet gebruikt kunnen worden).
de uitkomst is een nieuwe datum.
hoe kan ik deze berekening snel uitvoeren ?
Every failure offers you a new opportunity! | Lokatie database|GoT - Notepad