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

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
trække 2 datoer fra hinanden
Fra : JH


Dato : 21-11-02 17:10

Davs,

Er der mon nogen der kunne sige mig om der findes en
lettere/ha-med-at-gøre - metode til at beregne om en person er over eller
under fx. 50 år i henhold til dags dato, ved hjælp af date() el. lign.

Jeg syntes ikke det er lige til at finde ud af. Man kan jo konvertere en
dato til string ved: DateToStr(Date()); - Over det punkt har jeg ikke haft
success

Kunne man forestille sig at man kunne konvertere en string fx. myDate =
"10-12-1952" til date og så fratrække myDate fra systems date og få et år
tilbage ?

På forhånd tak, hvis jeg skulle være så heldig at nogen kan hjælpe.

Jeg var begyndt at lave nogen kæmpe beregninger, hvor jeg sætter hver måned
med en værdi, men det kan ikke være den rigtige måde, jeg fik et mindre
sammenbrud da jeg kom i tanke om skudår også ... gisp. Det går ikke.

Jens



 
 
Morten F. Hansen (21-11-2002)
Kommentar
Fra : Morten F. Hansen


Dato : 21-11-02 17:21

> Er der mon nogen der kunne sige mig om der findes en
> lettere/ha-med-at-gøre - metode til at beregne om en person
> er over eller under fx. 50 år i henhold til dags dato, ved
> hjælp af date() el. lign.

Du skal lave en funktion til at regne en dato om til antal
dage siden f.eks. år 1900.

Start med at lave en liste over hvormange dage inde i året
den 1. i hver måned er.

Januar = 0, Februar = 31, Marts = 59 etc.

Lav også en sådan liste for skud-år.

Når du så skal beregne antal dage ud fra en dato, skal du
finde ud af hvormange skud-år og normale år der har været
siden år 1900 (hvis dette er udgangs-året).

Antal dage er så:
antal_skud_år * 366 +
antal_normale_år * 365 +
liste[måned] +
dag

"liste" er enten dags-listen over normale år eller skud-år
afhængigt om det pågældende år er skud-år.

"antal_skud_år" er hvormange skud-år det er mellem udgangs-
året og det pågældende år.

"antal_normale_år" er hvormange normale år det er mellem
udgangs-året og det pågældende år.

"måned" er den pågældende måned

"dag" er den pågældende dag

Det værste er således at regne antallet af skud-år og
normale år ud mellem to givne årstal. Hvis man roder lidt
med DIV og MOD er dette ikke så svært.

Reglen for skud-år er som følger:

* Et år er skud-år hvis det kan deles med 4
* Dog er det ikke skud-år hvis det kan deles med 100
* Kan det deles med 400 er det ALLIGEVEL skud-år

1600, 2000, 2400 er således skud-år mens 1700, 1800, 1900,
2100 ikke er.



JH (21-11-2002)
Kommentar
Fra : JH


Dato : 21-11-02 18:07


Mange tak for at have skubbet mig igang, så jeg ikke er helt lost - det
lyder spændende/omsonst - arrhhh, jeg savner VB, der var der funktioner til
alt (ved dog ej med denne).



jens

"Morten F. Hansen" <info@127.0.0.1> wrote in message
news:arj16d$8ah$1@sunsite.dk...
> > Er der mon nogen der kunne sige mig om der findes en
> > lettere/ha-med-at-gøre - metode til at beregne om en person
> > er over eller under fx. 50 år i henhold til dags dato, ved
> > hjælp af date() el. lign.
>
> Du skal lave en funktion til at regne en dato om til antal
> dage siden f.eks. år 1900.
>
> Start med at lave en liste over hvormange dage inde i året
> den 1. i hver måned er.
>
> Januar = 0, Februar = 31, Marts = 59 etc.
>
> Lav også en sådan liste for skud-år.
>
> Når du så skal beregne antal dage ud fra en dato, skal du
> finde ud af hvormange skud-år og normale år der har været
> siden år 1900 (hvis dette er udgangs-året).
>
> Antal dage er så:
> antal_skud_år * 366 +
> antal_normale_år * 365 +
> liste[måned] +
> dag
>
> "liste" er enten dags-listen over normale år eller skud-år
> afhængigt om det pågældende år er skud-år.
>
> "antal_skud_år" er hvormange skud-år det er mellem udgangs-
> året og det pågældende år.
>
> "antal_normale_år" er hvormange normale år det er mellem
> udgangs-året og det pågældende år.
>
> "måned" er den pågældende måned
>
> "dag" er den pågældende dag
>
> Det værste er således at regne antallet af skud-år og
> normale år ud mellem to givne årstal. Hvis man roder lidt
> med DIV og MOD er dette ikke så svært.
>
> Reglen for skud-år er som følger:
>
> * Et år er skud-år hvis det kan deles med 4
> * Dog er det ikke skud-år hvis det kan deles med 100
> * Kan det deles med 400 er det ALLIGEVEL skud-år
>
> 1600, 2000, 2400 er således skud-år mens 1700, 1800, 1900,
> 2100 ikke er.
>
>



Morten F. Hansen (21-11-2002)
Kommentar
Fra : Morten F. Hansen


Dato : 21-11-02 17:51

> Er der mon nogen der kunne sige mig om der findes en
> lettere/ha-med-at-gøre - metode til at beregne om en person er over eller
> under fx. 50 år i henhold til dags dato, ved hjælp af date() el. lign.

Hvis man bare ønsker at finde ud af hvor gammel en person er, så er det
jo rimilig nemt (det har ikke noget med skud-år at gøre):

int Age(int cuDay, int cuMonth, int cuYear, int birthDay, birthMonth, birthYear)
{
if (cuMonth > birthMonth || (cuMonth == birthMonth && cuDay >= birthDay))
return (cuYear - birthYear);
else
return (cuYear - birthYear - 1);
}

cuDay, cuMonth, cuYear er den aktuelle dato
birthDay, birthMonth, birthYear er personens fødselsdag

I den lidt underlige situation at personen er født den
29. feb på et skud-år, regner funktionen med at personen
fylder år den 1. marts på ikke-skud-år.



JH (21-11-2002)
Kommentar
Fra : JH


Dato : 21-11-02 19:22


Mange tak, den tror jeg jeg kan bruge.

Nu når jeg står her med sådan en genial funktion så vil jeg altså have den
til at virke, du trækker dig nok i skæget af min håbløshed som neewbie, men
jeg kan ej få den til at køre alligevel (fejl: declaration syntax error) -
jeg kan simpelthen ikke se hvad jeg har gjort galt. For en sikkerheds skyld
lister jeg de 3 step jeg har taget. Endvidere et skudårsspm. nederst.


----top deklaration----
#pragma package(smart_init)
#pragma resource "*.dfm"
using namespace std;
TFormMain *FormMain;

int Age(int, int, int, int, int, int);
-----slut top deklaration------

----kald fra main-----

int result = Age(20, 11, 2002, 08, 09, 1984);
ShowMessage(result);

----slut kald------


---function ----
int Age(int cuDay, int cuMonth, int cuYear, int birthDay, int birthMonth,
int birthYear)

{

if (cuMonth > birthMonth || (cuMonth == birthMonth && cuDay >=
birthDay))
return (cuYear - birthYear);
else
return (cuYear - birthYear - 1);
}
---function end----


Og så en anden ting jeg undrer mig over.

Jeg husker det ej helt, men jeg mener 2000 var skudår.

År 2000 er skudår fordi det er deleligt med 4. Men ikke hvis det er
deleligt med 100. Det er deleligt med 100, så det er ikke skudår. Men som
jeg læser det du har skrevet - hvis den sidste betingelse så alligevel er
sand (delelig med 400) så overrider den alt, ergo er år 2000 skudår?.

Selvom jeg forventer mig alt af din funktion vil jeg skam kigge viddere på
skudårsberegningen, det er meget interessandt og jeg er glad for at have
fået den med, det er helt sikkert!

JEns


"Morten F. Hansen" <info@127.0.0.1> wrote in message
news:arj2vj$ksq$1@sunsite.dk...
> > Er der mon nogen der kunne sige mig om der findes en
> > lettere/ha-med-at-gøre - metode til at beregne om en person er over
eller
> > under fx. 50 år i henhold til dags dato, ved hjælp af date() el. lign.
>
> Hvis man bare ønsker at finde ud af hvor gammel en person er, så er det
> jo rimilig nemt (det har ikke noget med skud-år at gøre):
>
> int Age(int cuDay, int cuMonth, int cuYear, int birthDay, birthMonth,
birthYear)
> {
> if (cuMonth > birthMonth || (cuMonth == birthMonth && cuDay >=
birthDay))
> return (cuYear - birthYear);
> else
> return (cuYear - birthYear - 1);
> }
>
> cuDay, cuMonth, cuYear er den aktuelle dato
> birthDay, birthMonth, birthYear er personens fødselsdag
>
> I den lidt underlige situation at personen er født den
> 29. feb på et skud-år, regner funktionen med at personen
> fylder år den 1. marts på ikke-skud-år.
>
>



Morten F. Hansen (21-11-2002)
Kommentar
Fra : Morten F. Hansen


Dato : 21-11-02 21:16

> men jeg kan ej få den til at køre alligevel (fejl: declaration syntax error)
> int result = Age(20, 11, 2002, 08, 09, 1984);

Hmm.. mon ikke det er en dårlig ide at starte med et '0' i 08 eller 09.. Hvis
det ikke hjælper, så skriv lige præcis hvilken linie der fremkalder fejlen.

> År 2000 er skudår fordi det er deleligt med 4. Men ikke hvis det er
> deleligt med 100. Det er deleligt med 100, så det er ikke skudår. Men som
> jeg læser det du har skrevet - hvis den sidste betingelse så alligevel er
> sand (delelig med 400) så overrider den alt, ergo er år 2000 skudår?.

You got it! 2000 var skudår fordi 400-reglen overrider de to forrige regler.



JH (21-11-2002)
Kommentar
Fra : JH


Dato : 21-11-02 22:19


hold da op en amatør jeg er, tror du ikke jeg havde sat din function
indenfor min test-buttons-click slut - krølparentes }
Det virker - du er genial!!

Jeg er meget taknemmelig og jeg syntes det er fedt jeg har fået det andet
eksempel også, det er bestemt værd at kigge på.

med venlig hilsen

Jens


"Morten F. Hansen" <info@127.0.0.1> wrote in message
news:arjeud$qpl$1@sunsite.dk...
> > men jeg kan ej få den til at køre alligevel (fejl: declaration syntax
error)
> > int result = Age(20, 11, 2002, 08, 09, 1984);
>
> Hmm.. mon ikke det er en dårlig ide at starte med et '0' i 08 eller 09..
Hvis
> det ikke hjælper, så skriv lige præcis hvilken linie der fremkalder
fejlen.
>
> > År 2000 er skudår fordi det er deleligt med 4. Men ikke hvis det er
> > deleligt med 100. Det er deleligt med 100, så det er ikke skudår. Men
som
> > jeg læser det du har skrevet - hvis den sidste betingelse så alligevel
er
> > sand (delelig med 400) så overrider den alt, ergo er år 2000 skudår?.
>
> You got it! 2000 var skudår fordi 400-reglen overrider de to forrige
regler.
>
>



Søg
Reklame
Statistik
Spørgsmål : 177491
Tips : 31966
Nyheder : 719565
Indlæg : 6408458
Brugere : 218886

Månedens bedste
Årets bedste
Sidste års bedste