Avatar billede alfabeta Nybegynder
17. januar 2003 - 10:23 Der er 14 kommentarer og
1 løsning

Gennemløb af kalender

Jeg skal bruge en liste der består af følgende:

Jan 2000 x antal dage
feb 2000 x antal dage
.....
jan 2010 x antal dage

Jeg har tænkt mig at bruge Tmonthcalender fra Borland.
Hvordan kan man nemmest lave dette gennemløb.
Avatar billede borrisholt Novice
17. januar 2003 - 10:37 #1
Du er nok nød til at komme det lidt nærmer .. Jeg er overhoved ikke med på hvad du mener med

Jan 2000 x antal dage
etc

Jens B
Avatar billede hreiff Nybegynder
17. januar 2003 - 12:02 #2
procedure TForm1.Button1Click(Sender: TObject);
Const
  Aar: Array[1..12] of string[3] = ('Jan','Feb','Mar','Apr','Maj','Jun','Jul','Aug','Sep','Okt','Nov','Dec');
  Start = 2000;
  Slut = 2010;
Var
  i,j,dage: integer;
begin
  Listbox1.clear;
  for i := Start to Slut do
    for j := 1 to 12 do
    begin
      case j of
      1,3,5,7,8,10,12: dage := 31;
      4,6,9,11: dage := 30;
      2: begin
          if (i mod 4) = 0 then
            If (i mod 100) = 0 then
              If (i mod 1000) = 0 then
                dage := 29
              else
                dage := 28
            else
              dage := 29
          else
            dage := 28;
        end;
      end;
      Listbox1.items.add(Aar[j]+' '+IntToStr(i)+' '+IntToStr(dage)+' antal dage');
    end;
end;
Avatar billede nop Nybegynder
17. januar 2003 - 12:59 #3
Der er da fejl i ovenstående.
Skudår hvis 4 går op, men ikke hvis 100 går op men dog hvis 400 går op (og ikke 1000). Correkt me if I'm wrong!!!
Avatar billede borrisholt Novice
17. januar 2003 - 13:02 #4
Reglerne for skud år er som følger :

function IsLeapYear(Year: Word): Boolean;
begin
  Result := (Year mod 4 = 0) and ((Year mod 100 <> 0) or (Year mod 400 = 0));
end;


Jens B
Avatar billede borrisholt Novice
17. januar 2003 - 13:13 #5
Her er en lille function til at bestemme antallet af dage i en måned i et givent år :

function GetDaysInMonth(const Month, Year : Integer) : Integer;
const
  MonthArray : array[1..12] of integer = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
begin
  Result := MonthArray[Month];
  if Month = 2 then
    Result := Result + Integer(IsLeapYear(Year));
end;


Hvis du så vil vide hvormange dage der er i et år kan du gøre således :

function DaysInYear(const Year : Integer) : Integer;
begin
  Result := 365 + Integer(IsLeapYear(Year));
end;

Jens B
Avatar billede borrisholt Novice
17. januar 2003 - 13:16 #6
eller endnu simplere :

function GetDaysInMonth(const Month, Year : Integer) : Integer;
const
  MonthArray : array[1..12] of integer = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
begin
  Result := MonthArray[Month] + Integer( (IsLeapYear(Year)) and (Month = 2) );
end;


Jens B
Avatar billede borrisholt Novice
17. januar 2003 - 13:19 #7
Fra en artikkel jeg skriver på :

2.2 Hvad er den Gregorianske kalender ?
Den Gregorianske kalender, der den almindelige brugte i dag.. Den blev foreslået af Aloysius Lilius, en psykolog fra Naples, og blev taget i brug af pave Gregory XIII, med instruktioner fra rådet i Trent (1545-1563), for at kunne rette de fejl der var i den gamle Julianske kalender.
Det blev befalet af pave Gregory XIII den 24. Februar 1582. Denne befaling blev kaldt  ”Inter Gravissimas”, efter de første to ord i befalingen.
I den Gregorianske kalender, er det tropiske år beregnet til 365 97/400 dage » 365.2425 dage. Det tager cirka 3300 år før det tropiske år flytte sig 1 dag, i forhold til kalenderen.
At  et år er 365.2425, giver 97 skudår på 400 år.
2.2.1 Hvilke år er skudår ?
Den Gregorianske kalender har 97 skudår på 400 år.

    Alle årstal delelige med 4 er skudår.
    Alle årstal er delelige med 100 er ikke skudår,
    dog hvis årstalet også er deleligt med 400 er det skudår alligevel.
Så 1700, 1800, 1900, 2100, 2200 og 2300 er ikke skudår, mens 1600, 2000 og 2400 er.

En myte til trods, har der ikke været , og er der ikke, år med dobbelt skudår, altså ingen år med 367 dage i. Sverige 1712, dog undtaget, se noten til afsnit 2.2.4

2.2.2 Hvad med 4000 års reglen ?
Det er foreslået,  af astronom John Herschel (1792-1871) med flere, at en bedre beregning for længden på et tropisk år skulle være 365 969/4000 dage  » 365.24225 dage. Det giver 969 skudår for hvert 4000 år, og ikke 970 som den Gregorianske kalender foreskriver. Denne ændring kan laves ved at fjerne et skudår fra den Gregorianske kalender hver 4000. år, feks. ved  at undlade skudår når årstallet er deleligt med 4000.

Det skal lige bemærkes at denne regel ikke er officiel indført.

2.2.3 Gør grækerne det ikke anderledes?
Da den ortodokse kirke i Grækenland, langt om længe besluttede  sig for at skifte til den Gregorianske kalender, i 1920’erne,  forsøgte de at forbedre den Gregorianske kalenders regler for skudår, ved at erstatte 400 års reglen med det følgende :

  Hvert årstal delt med 900 som giver en divisionsrest på 200 eller 600 er et skudår.

Det gør 1900, 2100, 2200, 2300, 2500, 2600, 2700, 2800 til ikke skudår, mens  2000, 2400 og 2900  er. Denne regel giver 218 skudår for hver 900 år, og længden på et år bliver således 365 218/900 dage  » 365.24222, hvilket er mere korrekt end de officielle 365.2425 fra den Gregorianske kalender.

Denne regel er ikke officiel i Grækenland.


Jens B
Avatar billede nop Nybegynder
11. februar 2003 - 12:49 #8
borrisholt>

function GetDaysInMonth(const Month, Year : Integer) : Integer;
const
  MonthArray : array[1..12] of integer = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
begin
  Result := MonthArray[Month];
  if month=2 then
    if IsLeapYear(Year) then inc(result);
end;
Avatar billede alfabeta Nybegynder
16. april 2004 - 11:32 #9
hmmm
Avatar billede alfabeta Nybegynder
16. april 2004 - 11:32 #10
lukker sp
Avatar billede nop Nybegynder
16. april 2004 - 11:36 #11
Ok men hvorfor det????? Selvom jeg ikke kan se 100% hvad du mener så er et "gennemløb" noget med at en dag er = 1 (heltal) osv, og det kan vi hjælpe med, og har hjulpet men du afviser bare uden begrundelse, lidt nederen synes jeg.
Avatar billede borrisholt Novice
16. april 2004 - 11:41 #12
alfabeta>> Dit spøtgsmål gik på hvormange dage der er i et bestemt år.

Den 17/01-2003 klokken 13:13:05 besvarede jeg dette spørgsmål Både med antal dage i et bestemt år samt antal dage i en måned.

Så sank du i jorden ind til dd. hvor du pludselig uden grund lukker dit spørgsmål, til trods for spørgsmåled særdeles fyldesgørende er besvaret af bla. undertegnet.

Jens B
Avatar billede borrisholt Novice
16. april 2004 - 11:50 #13
nop>> Jeg har giver ham dårlig Karma, af ovenævnte grund. Du kan gøre det samme.

Jens B
Avatar billede nop Nybegynder
16. april 2004 - 12:10 #14
borrisholt>
ja det burde man. (jens>Hvad var det med den mail for længe siden?)
Avatar billede borrisholt Novice
16. april 2004 - 12:12 #15
Kan jeg ikke huske .. Send det igen ....

Jens B
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