/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
Cirkulær buffer?
Fra : Stefan Kristensen


Dato : 04-04-05 13:46

Hej NG.

Jeg er ved at lave en kalender hvor jeg har lagt månedsnavnene i et array så
navn(1)="Januar" ... navn(12)="December".
Det virker jo fint nok. Men når jeg går en måned frem fra december, bliver
månedsnummeret 13, og det går jo ikke Det samme hvis jeg går en måned
tilbage fra januar så bliver månedsnummeret 0. Jeg har rodet lidt med ABS og
MOD, men kan ikke helt ramme noget der virker.
Er der en der kan komme med en funktion der tager et vilkårligt heltal
(positivt, negativt og nul) og returnerer et tal mellem 1 og 12 så det
svarer til det rigtige månedsnummer?

Mvh
Stefan



 
 
Jens Gyldenkærne Cla~ (04-04-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 04-04-05 14:23

Stefan Kristensen skrev:

> Er der en der kan komme med en funktion der tager et vilkårligt heltal
> (positivt, negativt og nul) og returnerer et tal mellem 1 og 12 så det
> svarer til det rigtige månedsnummer?

Du har ikke helt forklaret hvad der er "det rigtige månedsnummer".

Hvis du har en funktion der skal lægge et antal måneder til en
månedsværdi og så blot returnere den nye måned, kan du bruge modulo 12:

Function AddMonth(startM, numM)
   AddMonth = (startM + numM - 1) mod 12 + 1
End Function

Modulo 12 vil returnere 0 når måneden skal være 12 - det kan løses ved
at behandle værdien 0 særskilt, eller - som ovenstående funktion - ved
at trække 1 fra før vi beregner modulo-værdien og så lægge 1 til
bagefter.

--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Stefan Kristensen (04-04-2005)
Kommentar
Fra : Stefan Kristensen


Dato : 04-04-05 17:43

> > Er der en der kan komme med en funktion der tager et vilkårligt heltal
> > (positivt, negativt og nul) og returnerer et tal mellem 1 og 12 så det
> > svarer til det rigtige månedsnummer?
>
> Du har ikke helt forklaret hvad der er "det rigtige månedsnummer".

Input: 1-12 -> Output 1-12
Input: 13 -> Output: 1
Input: 14 -> Output: 2 osv.
Input: 0 -> Output: 12
Input: -1 -> Output 11 osv.

Jeg har på fornemmelsen at det er modulo 12 'plus lidt mere', men det er for
længe siden at jeg legede matematiker til at jeg lige kan finde det 'lidt
mere'

Mvh
Stefan



Jens Gyldenkærne Cla~ (04-04-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 04-04-05 21:59

Stefan Kristensen skrev:

> Jeg har på fornemmelsen at det er modulo 12 'plus lidt mere',
> men det er for længe siden at jeg legede matematiker til at
> jeg lige kan finde det 'lidt mere'

Den funktion jeg gav før, kan sådan set godt bruges til positive
værdier af input (hvis du sætter startM = 0).

Til negative værdier samt 0, kan man bruge følgende udregning:

         uddata = m mod 12 + 12

Modulo 12 vil give 0 eller et negativt tal fra -1 til -11. Lægger
man 12 til, kommer det ønskede resultat.

En flyvefærdig funktion kan ses her:

Function ModMonth(m)
   If m > 0 Then
      ModMonth = (m - 1) mod 12 + 1
   Else
      ModMonth = m mod 12 + 12
   End If
End Function
--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Stefan Kristensen (05-04-2005)
Kommentar
Fra : Stefan Kristensen


Dato : 05-04-05 06:36

> En flyvefærdig funktion kan ses her:
>
> Function ModMonth(m)
> If m > 0 Then
> ModMonth = (m - 1) mod 12 + 1
> Else
> ModMonth = m mod 12 + 12
> End If
> End Function

Det spiller jo en million
Jeg takker for hjælpen og den gode forklaring.

Mvh
Stefan



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste