Keresés

Aktív témák

  • Rover623

    félisten

    válasz netboy #14 üzenetére

    program DayOfWee;

    var
    ev,
    ho,
    nap : integer;

    begin

    {ezek az értékadások csak a példa kedvéért...inkább valami bekéréssel csináld!}
    ev:=2005;
    ho:=3;
    nap:=2;

    ho := ho - 2;
    if (ho<=0) then begin
    ho := ho + 12;
    ev := ev - 1;
    end;
    case ( (nap + ( 13*ho - 6) div 5 + ev + ev div 4 - ev div 100 + ev div 400) mod 7 ) of
    0: writeln('hétfő');
    1: writeln('kedd');
    2: writeln('szerda');
    3: writeln('csütörtök');
    4: writeln('péntek');
    5: writeln('szombat');
    6: writeln('vasárnap');
    end;

    end.

    primus inter pares

  • Rover623

    félisten

    válasz Rolly #35 üzenetére

    És az elvet is meg tudnád osztani a topicnyitóval...?
    Mert a tanerő első kérdése az lesz...;]

    primus inter pares

  • Rover623

    félisten

    válasz Rici #42 üzenetére

    legfeljebb saját megnyugtatására beláthatja (bebizonyíthatja), hogy a dolog mindig jó.
    Épp ezen dolgozom...;]
    Az biztos hogy a tancsi nem véletlenül emlegette 1901 január elsejét...
    Hét különböző típusú közönséges 365 napos év van, mert január 1. a hét különböző napjainak mindegyikére eshet (és esik). Ugyanígy hétféle különböző szökőév lehetséges. Mivel minden negyedik év szökőév, a naptár évről évre változik, bonyolult rendszer szerint, huszonnyolc éven át. Aztán elölről kezdődik a sorozat.
    Tehát 1901, 1929, 1957, 1985, 2013, 2041, 2069 és 2097 naptárai azonosak. Ezek mind közönséges évek, amelyekben január 1. keddre esik.
    Ebben a 28 éves sorozatban huszonegy közönséges év van, amelyekből három-három kezdődik a hétnek ugyanazzal a napjával, s hét szökőév, amelyek a hétnek hét különböző napjával kezdődnek.
    Ez mindaddig beválik, amíg kivétel nélkül minden negyedik év szökőév. 1900 és 2100 között nincs is bökkenő, de általában minden négy évszázadban van három olyan negyedik év, amely nem szökőév, s ilyenkor hét közönséges év követi egymást, mint például 1897-től 1903-ig.

    És itt elakadtam...van egy olyan sejtésem hogy a megadott algoritmus csak 1900 és 2100 között műx:U

    primus inter pares

  • Rover623

    félisten

    válasz F-ECT$ #44 üzenetére

    Kicsi huszár...!
    Olvasd el figyelmesen amit írtam:

    Ez mindaddig beválik, amíg kivétel nélkül minden negyedik év szökőév.

    primus inter pares

  • Rover623

    félisten

    Itt egy másik megoldás a Dr Dobbs Journal-ból, 1990-ből...
    Egy Zeller nevű csóka algoritmusa 1887-ből...!
    Felhívom a figyelmet az angol nyelvű kommentekre:
    { Here's Zeller's seminal black magic: }
    { DON'T KNOW WHY HE DID THIS! }


    Function CalcDayOfWeek(Year, Month, Day : Integer) : Integer;
    Var
    Century,
    Holder : Integer;
    begin
    { First test For error conditions on input values: }
    if (Year < 0) or (Month < 1) or (Month > 12) or (Day < 1) or (Day > 31) then
    CalcDayOfWeek := -1 { Return -1 to indicate an error }
    else
    { Do the Zeller's Congruence calculation as Zeller himself }
    { described it in ''Acta Mathematica'' #7, Stockhold, 1887. }
    begin
    { First we separate out the year and the century figures: }
    Century := Year div 100;
    Year := Year MOD 100;
    { Next we adjust the month such that March remains month #3, }
    { but that January and February are months #13 and #14, }
    { *but of the previous year*: }
    if Month < 3 then
    begin
    Inc(Month, 12);
    if Year > 0 then
    Dec(Year, 1) { The year before 2000 is }
    else { 1999, not 20-1... }
    begin
    Year := 99;
    Dec(Century);
    end;
    end;

    { Here's Zeller's seminal black magic: }
    Holder := Day; { Start With the day of month }
    Holder := Holder + (((Month + 1) * 26) div 10); { Calc the increment }
    Holder := Holder + Year; { Add in the year }
    Holder := Holder + (Year div 4); { Correct For leap years }
    Holder := Holder + (Century div 4); { Correct For century years }
    Holder := Holder - Century - Century; { DON'T KNOW WHY HE DID THIS! }
    {***********************KLUDGE ALERT!***************************}
    While Holder < 0 do { Get negative values up into }
    Inc(Holder, 7); { positive territory before }
    { taking the MOD... }
    Holder := Holder MOD 7; { Divide by 7 but keep the }
    { remainder rather than the }
    { quotient }
    {***********************KLUDGE ALERT!***************************}
    { Here we ''wrap'' Saturday around to be the last day: }
    if Holder = 0 then
    Holder := 7;

    { Zeller kept the Sunday = 1 origin; computer weenies prefer to }
    { start everything With 0, so here's a 20th century kludge: }
    Dec(Holder);

    CalcDayOfWeek := Holder; { Return the end product! }
    end;
    end;

    Szóval nem egyértelmű...ja, ez 1582 és 4902 között műx:Y

    [Szerkesztve]

    primus inter pares

  • Rover623

    félisten

    válasz Spion #51 üzenetére

    Több probléma is van ezzel...
    A függvényt úgy hivják GetDate, és a gépecskében beállított aktuális dátumot adja vissza...tehát ahhoz hogy használni lehessen, előbb a SetDate eljárással be kell állítani a rendszer dátumát a kívánt értékre...csakhogy:
    ezeket a feladatokat nem a Pascal oldja meg, hanem az operációs rendszer megfelelő rutinjait hívja meg (Get System Date/Set System Date), vagyis a mai napig meglévő DOS rutinok szolgáltatják az alapot!
    Ezek a rutinok csak 1980 és 2099 között működnek, ráadásul a 3.3-as DOS óta a Set System Date nem csak az oprendszer dátumát állítja át, hanem a PC óráját is aktualizálja (beírja a CMOS RAM-ba!!!).
    Régebben lusta coder-ek valóban alkalmazták ezt a módszert (aktuális dátum elmentése-kérdéses dátum beállítása-visszakérdezés-eredeti dátum visszaírása), de manapság ez már nem elegáns...ráadásul továbbra sem fogja tudni megmondani: milyen algoritmus alapján történik mindez...;]

    primus inter pares

  • Rover623

    félisten

    válasz yksz #56 üzenetére

    Biztos 850 az acélgolyó...?
    Nem kerekre jön ki a térfogat...
    Ilyen példákban az elvre szoktak gyúrni, nem a hülye tizedestört részeredményekre...
    A két bogyó tömegkülönbségét a térfogatkülönbségükből adódó felhajtóerő kölönbsége ellensúlyozza...

    q = (m1 - m2) / ( (m1 / q1) - (m2 / q2))
    q = (1350 - 850)g / ((1350 / 2.7) - (850 / 7.8)) cm3 = 1.278.... (mi ez? glicerin?)

    A másodikat találd ki... ;)


    [Szerkesztve]

    [Szerkesztve]

    primus inter pares

Aktív témák