Προς το περιεχόμενο

Eortologio


vooda

Προτεινόμενες αναρτήσεις

Δημοσ.

Hi all.<BR>Mipws kapoios apo esas exei tous logarithmous pou ipologizontai oi kinites eortes? A nai tha to ithela <IMG SRC="http://www.insomnia.gr/cpubb/smilies/cwm12.gif" border=0> <BR>Thanks

Δημοσ.

Όλες οι κινητές εορτές υπολογίζονται με βάση το Πάσχα. Δηλαδή είναι πχ 20 μέρες πριν το Πάσχα.<BR>Το πρόβλημα δηλαδή είναι να υπολογίσεις το Πάσχα κάποιας χρονιάς.<P>G = year % 19<BR>I = (19*G + 15) % 30<BR>J = (year + year/4 + I) % 7<BR>L = I - J<BR>EasterMonth = 3 + (L + 40)/44<BR>EasterDay = L + 28 - 31*(EasterMonth/4)<P>Πρόσεξε: α%β είναι το υπόλοιπο της διαίρεσης α προς β, δηλαδή 22 % 7 = 1<BR>α/β είναι το ακέραιο αποτέλεσμα της διαίρεσης α προς β, δηλαδή 22 / 7 = 3<P>Αυτός ο αλγόριθμος υπολογίζει το Ιουλιανό Ορθόδοξο Πάσχα, εμείς χρειαζόμαστε όμως το Γρηγοριανό. Εάν αυτό που υπολόγισες λοιπόν είναι πριν τις "29 Φεβρουαρίου 2100" τότε προσθέτεις άλλες 13 μέρες, ενώ εάν είναι μετά προσθέτεις 14 μέρες.<BR>Για το 2001 δηλαδή ο παραπάνω αλγόριθμος βρίσκει Eastermonth=4, EasterDay=2 άρα 2 Απριλίου. Προσθέτεις άλλες 13 μέρες και έχεις "15 Απριλίου".....<P>Όλες οι κινητές εορτές είναι (+-χ) συνάρτηση του Πάσχα, εκτός της γιορτής του Αγίου Γεωργίου που είναι ειδική περίπτωση και μάλλον πρέπει να ρωτήσεις κανέναν Γιώργο για να στην εξηγήσει.

Δημοσ.

Τελικά άκου να δεις πως βγαίνει ο Γιώργος! Ο Γιώργος είναι σταθερή εορτή αλλά αν σε περίπτωση "πέσει" μέσα στην μεγάλη εβδομάδα απλά γιορτάζετε μετά το Πάσχα... Thats it smile.gif

Δημοσ.

Kamia sxesh me pinakes Nikola.... Einai enas aplos algorithmos.<BR>Mia pou ta leme xerei kaneis poies einai oi kinhtes eortes kai poses meres exoun diafora apo to pasxa ?

Δημοσ.

elpizw na sas voi8hsa einai ena hmerologio.<P><BR>DEFINT A-Z ' Default variable type is integer<P>' Define a data type for the names of the months and the<BR>' number of days in each:<BR>TYPE MonthType<BR> Number AS INTEGER ' Number of days in the month<BR> MName AS STRING * 9 ' Name of the month<BR>END TYPE<P>' Declare procedures used:<BR>DECLARE FUNCTION IsLeapYear% (N%)<BR>DECLARE FUNCTION GetInput% (Prompt$, Row%, LowVal%, HighVal%)<P>DECLARE SUB PrintCalendar (Year%, Month%)<BR>DECLARE SUB ComputeMonth (Year%, Month%, StartDay%, TotalDays%)<P>DIM MonthData(1 TO 12) AS MonthType<P>' Initialize month definitions from DATA statements below:<BR>FOR I = 1 TO 12<BR> READ MonthData(I).MName, MonthData(I).Number<BR>NEXT<P>' Main loop, repeat for as many months as desired:<BR>DO<P> CLS<P> ' Get year and month as input:<BR> Year = GetInput("Year (1899 to 2099): ", 1, 1899, 2099)<BR> Month = GetInput("Month (1 to 12): ", 2, 1, 12)<P> ' Print the calendar:<BR> PrintCalendar Year, Month<P> ' Another Date?<BR> LOCATE 13, 1 ' Locate in 13th row, 1st column<BR> PRINT "New Date? "; ' Keep cursor on same line<BR> LOCATE , , 1, 0, 13 ' Turn cursor on and make it one<BR> ' character high<BR> Resp$ = INPUT$(1) ' Wait for a key press<BR> PRINT Resp$ ' Print the key pressed<P>LOOP WHILE UCASE$(Resp$) = "Y"<BR>END<P>' Data for the months of a year:<BR>DATA January, 31, February, 28, March, 31<BR>DATA April, 30, May, 31, June, 30, July, 31, August, 31<BR>DATA September, 30, October, 31, November, 30, December, 31<BR>'<BR>' ====================== COMPUTEMONTH ========================<BR>' Computes the first day and the total days in a month.<BR>' ============================================================<BR>'<BR>SUB ComputeMonth (Year, Month, StartDay, TotalDays) STATIC<BR> SHARED MonthData() AS MonthType<BR> CONST LEAP = 366 MOD 7<BR> CONST NORMAL = 365 MOD 7<P> ' Calculate total number of days (NumDays) since 1/1/1899.<P> ' Start with whole years:<BR> NumDays = 0<BR> FOR I = 1899 TO Year - 1<BR> IF IsLeapYear(I) THEN ' If year is leap, add<BR> NumDays = NumDays + LEAP ' 366 MOD 7.<BR> ELSE ' If normal year, add<BR> NumDays = NumDays + NORMAL ' 365 MOD 7.<BR> END IF<BR> NEXT<P> ' Next, add in days from whole months:<BR> FOR I = 1 TO Month - 1<BR> NumDays = NumDays + MonthData(I).Number<BR> NEXT<P> ' Set the number of days in the requested month:<BR> TotalDays = MonthData(Month).Number<P> ' Compensate if requested year is a leap year:<BR> IF IsLeapYear(Year) THEN<P> ' If after February, add one to total days:<BR> IF Month > 2 THEN<BR> NumDays = NumDays + 1<P> ' If February, add one to the month's days:<BR> ELSEIF Month = 2 THEN<BR> TotalDays = TotalDays + 1<P> END IF<BR> END IF<P> ' 1/1/1899 was a Sunday, so calculating "NumDays MOD 7"<BR> ' gives the day of week (Sunday = 0, Monday = 1, Tuesday = 2,<BR> ' and so on) for the first day of the input month:<BR> StartDay = NumDays MOD 7<BR>END SUB<BR>'<BR>' ======================== GETINPUT ==========================<BR>' Prompts for input, then tests for a valid range.<BR>' ============================================================<BR>'<BR>FUNCTION GetInput (Prompt$, Row, LowVal, HighVal) STATIC<P> ' Locate prompt at specified row, turn cursor on and<BR> ' make it one character high:<BR> LOCATE Row, 1, 1, 0, 13<BR> PRINT Prompt$;<P> ' Save column position:<BR> Column = POS(0)<P> ' Input value until it's within range:<BR> DO<BR> LOCATE Row, Column ' Locate cursor at end of prompt<BR> PRINT SPACE$(10) ' Erase anything already there<BR> LOCATE Row, Column ' Relocate cursor at end of prompt<BR> INPUT "", Value ' Input value with no prompt<BR> LOOP WHILE (Value < LowVal OR Value > HighVal)<P> ' Return valid input as value of function:<BR> GetInput = Value<P>END FUNCTION<BR>'<BR>' ====================== ISLEAPYEAR ==========================<BR>' Determines if a year is a leap year or not.<BR>' ============================================================<BR>'<BR>FUNCTION IsLeapYear (N) STATIC<P> ' If the year is evenly divisible by 4 and not divisible<BR> ' by 100, or if the year is evenly divisible by 400, then<BR> ' it's a leap year:<BR> IsLeapYear = (N MOD 4 = 0 AND N MOD 100 <> 0) OR (N MOD 400 = 0)<BR>END FUNCTION<BR>'<BR>' ===================== PRINTCALENDAR ========================<BR>' Prints a formatted calendar given the year and month.<BR>' ============================================================<BR>'<BR>SUB PrintCalendar (Year, Month) STATIC<BR>SHARED MonthData() AS MonthType<P> ' Compute starting day (Su M Tu ...) and total days<BR> ' for the month:<BR> ComputeMonth Year, Month, StartDay, TotalDays<BR> CLS<BR> Header$ = RTRIM$(MonthData(Month).MName) + "," + STR$(Year)<P> ' Calculates location for centering month and year:<BR> LeftMargin = (35 - LEN(Header$)) \ 2<P> ' Print header:<BR> PRINT TAB(LeftMargin); Header$<BR> PRINT<BR> PRINT "Su M Tu W Th F Sa"<BR> PRINT<P> ' Recalculate and print tab to the first day<BR> ' of the month (Su M Tu ...):<BR> LeftMargin = 5 * StartDay + 1<BR> PRINT TAB(LeftMargin);<P> ' Print out the days of the month:<BR> FOR I = 1 TO TotalDays<BR> PRINT USING "## "; I;<P> ' Advance to the next line when the cursor<BR> ' is past column 32:<BR> IF POS(0) > 32 THEN PRINT<BR> NEXT<P>END SUB<BR>

Δημοσ.

<BLOCKQUOTE><font size="1" face="Verdana, Arial">quote:</font><HR>Originally posted by ]nick[:<BR><B>Oraios re CyberFreak!!!!Syxarhthria!!!!<BR>]nick[<BR>p.s.MOnos sou to programmatises???</B><HR></BLOCKQUOTE><P>oxi to vrhka se ena example ths QBasic

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...