יום שישי, 27 ביולי 2012

Excel - Calculating the weekday for a given Date

Excel - Calculating the weekday for a given Date

This post is intended for English speaking visitors to my blog, who can't read Hebrew…
I've developed a formula which calculates the weekday of any given date (from: 01/01/1600 to: 31/12/9999)

Question: "Excel" already has a built-in function which calculates the weekday for a given date. This is the WEEKDAY function.
So why "reinvent the wheel"? KKK

Answer: the WEEKDAY function has 4 flaws which my formula solves:
1. It can't calculate dates prior to 01/01/1900.
2. In calculation of dates between 01/01/1900-28/02/1900, it displays wrong results. 
3. Excel has another "bug": it considers the 29/02/1900 as valid date (This is due to a known "bug" in Excel, which wrongly assumes that the year 1900 was a leap year).
4. Using Excel's built-in function: WEEKDAY is quite cumbersome. The function only returns a number (i.e., 1 - for Sunday, 2 - for Monday...., 7 - for Saturday). So, if you want to display the date's name you have to either custom format the cell (for example: "[$-409]dddd" to display the full name's day ("Sunday", "Monday"....) or "[$-409]ddd" to display the day's name shorter format ("Sun", "Mon"....)
LLL

You can download the file to your computer either from:
1) Google Drive

or from:


2) Dropbox

The workbook's name is: 
find weekday from date-English Version-6.xlsx

One has to key in the date (day, month, year) as follows:
Enter day (a number between 1 and 31) in cell L1
Enter month (a number between 1 and 12) in cell L2
Enter year (a number between 1600 and 2400) in cell L3

The Result (weekday) will appear in cell H9.

In the workbook, I juxtapose both solutions (mine and Microsoft's) so that you can see for yourself.

Notes:
1. If you can't download the file, please send me a request via e-mail:
PaxMundi@gmail.com  
and I'll send you the file.
2. The formula has been checked in the following Excel versions: 
2007, 2010, 2013.
3. The algorithm is explained in the Hebrew version of this post. The best explanation in English can be found here:

4. My algorithm is based on an algorithm developed by....Lewis Carroll, the famous 19th Century author, mathematician and logician, whose most famous book was "Alice in Wonderland".
You can read about his algorithm in:

Martin Gardner's book: The Universe in a Handkerchief, Lewis Carroll's Mathematical Recreations, Games, Puzzles and Word Plays
http://www.amazon.com/Universe-Handkerchief-Carrolls-Mathematical-Recreations/dp/0387256415/ref=sr_1_1?s=books&ie=UTF8&qid=1420923828&sr=1-1&keywords=martin+gardner+the+universe+in+a+handkerchief


5. I realize that there are simpler, shorter solutions.
For example, Mr. Prem Beejan's solution where he bypasses Excel's shortcomings by adding 2000 years to the date...






יום חמישי, 26 ביולי 2012

פתרון חידה מתמטית מס. 2



פתרון חידה מתמטית מס. 2


כזכור לכם, שאלנו לפני מספר ימים:


מהו המספר הבא ברצף המספרים:

    …… 2,3,6,7,8,12,13,16,17,18



והתשובה: 30

כל המספרים בסדרה מתחילים באות "ש": שתיים, שלוש, שש, שבע...

המספר הבא בסדרה שמתחיל באות זו הוא: שלושים

JJJ




יום שישי, 20 ביולי 2012

חידה מתמטית מס. 2

חידה מתמטית מס. 2

למחוננים ומהירי מחשבה:



מהו המספר הבא ברצף המספרים: 


  …… 2,3,6,7,8,12,13,16,17,18





יום חמישי, 19 ביולי 2012

"עליסה בארץ הפלאות" או: מציאת היום בשבוע לפי התאריך

"עליסה בארץ הפלאות" או: מציאת היום בשבוע לפי התאריך

(פוסט קצת ארוך, אבל שווה קריאה...)

לואיס קרול (או בשמו המקורי: צ'רלז לאטוויג' דודג'סון) ידוע כמחבר אחד מסִפרֵי הילדים המפורסמים ביותר: "עליסה בארץ הפלאות" ("Alice's Adventures in Wonderland").
בנוסף לספרי ילדים,  הוא התפרסם גם ככותב שירי "אִי-גָיוֹן" (nonsense), כצלם (בעיקר של ילדות קטנות, גם בעֵרוֹם...) וגם כממציא.
אבל לואיס קרול היה גם מתמטיקאי גדול. הוא כתב מספר ספרים חשובים במתמטיקה ובלוגיקה, וגם המציא משחקים, חידות ושעשועים מתמטיים.
(מי שמתעניין בפן המשעשע של הגאון הזה, מוזמן לקרוא את הספר מאת: Martin Gardner:
The Universe in a Handkerchief, Lewis Carroll's Mathematical Recreations, Games, Puzzles and Word Plays)

לואיס קרול גם המציא שיטה משלו למציאת היום בשבוע לפי תאריך נתון. לא נציג אותה כאן (היא נמצאת בספר המוזכר לעיל), אבל האלגוריתם שלה הוא הבסיס לשיטה שפיתח המתמטיקאי John Horton Conway[שיטה המוכרת בשם: [Doomsday Algorithm

שיטה קוֹנוֵוי דורשת שינון של תאריך בכל חודש בשנה, כלומר 12 תאריכים ולכן לא נשתמש בה.
הסבר על שיטת קונווי ראה בקישור: http://www.theworldofstuff.com/other/day.html

בשיטה שאציג (ואשר בה השתמשתי לבְנִיַת הנוסחא שפיתחתי ב"אקסל") - אין צורך לזכור שום תאריך.
את קובץ ה"אקסל" שבניתי לפי השיטה אפשר להוריד כאן:
כאמור, לא צריך לזכור שום דבר כדי לחשב את היום בחודש, אך יש מספר שלבים לשיטה:

הערות על השיטה:

א. השיטה מתבססת על העובדה שבשבוע יש שבעה ימים ואם "נתרגם" תאריך לימים ונחלק ב-7, נוכל לדעת באיזה יום בשבוע הוא חל.
במתמטיקה, מודולו 7 (MOD 7), נותן את השארית המתקבלת מחלוקת מספר ב-7. למשל:   אם נחלק את המספר 27 ב-7, נקבל שארית  6 (27=3*7+6). בחשבון מודולרי הסמון הוא: 27 6(MOD 7)
[ב"אקסל" נשתמש בפונקציה MOD=MOD(27,7) והתוצאה: 6]

ב. מחזוריות חִשוּב היום בשבוע מתרחשת אחת ל- 400 שנה. כלומר: בהפרש של 400 שנה בדיוק, נקבל אותו יום בשבוע. עובדה זו היא בעצם הבסיס לכל האלגוריתם.
לדוגמא: 1.1.1600 ו-1.1.2000חלים באותו יום בשבוע: שבת.
משום כך, אין צורך לחשב את כל המאות מאז תחילת הספירה. מספיק אם נתחיל בשנת 1600.

ג. שנה מעוברת (Leap Year) בלוח הגרגוריאני [לוח השנה המקובל בכל העולם משנת 1582] היא שנה המתחלקת ב-4 ללא שארית או מתחלקת ב-400ללא שארית. (אבל שנה המתחלקת ב-100 ללא שארית: 1700, 1900,1800... איננה שנה מעוברת)
בשנה מעוברת מוסיפים יום אחד לחודש פברואר , שבו 28 ימים בשנה רגילה.

הסבר על השיטה באנגלית אפשר למצוא כאן:

שלבי השיטה:
1. מחלקים את התאריך ל-4 קבוצות: מאה, שנה, חודש, יום.
לדוגמא, אם התאריך הוא 1.1.1999, אז:
המאה= 19, השנה = 99, החודש = 1, היום  = 1

2. קבוצת החודש-  מחשבים את מספר הימים המצטבר עד החודש הקודם בשנה (לא מעוברת).
ינואר = 0, פברואר = 31, מרץ = 59, אפריל = 90, מאי = 120, יוני = 151, יולי = 181, אוגוסט = 212, ספטמבר = 243, אוקטובר = 273, נובמבר = 304, דצמבר = 334

3. קבוצת המאה
בשנת מאה מעוברת (1600, 2000, 2400...) נוסיף: 125 ימים (יום לכל שנה, כמו בקבוצת השנה+ 25 ימים לשנים מעוברות).
בשנת מאה לא-מעוברת (1700, 1800, 1900, 2100...) נוסיף רק 124 ימים.
לכן,
כשהמאה =16 או 20 - נוסיף 125 ימים
כשהמאה = 17 או 21 - נוסיף (125+124)=249
כשהמאה = 18 או 22 - נוסיף (125+124+124)=373
כשהמאה = 19 או 23 - נוסיף (125+124+124+124)=497

4. קבוצת השנה
מסכמים את השנה ואת מספר השנים המעוברות עד אותה שנה מתחילת המאה.
כל שנה מתחילה יום אחד מאוחר יותר מקודמתה =1(MOD(365,7 [בתנאי, כמובן, שהשנה הקודמת איננה שנה מעוברת].
לדוגמא: 1.1.2010 חל ביום ששי, 1.1.2011 חל ביום שבת, 1.1.2012 חל ביום ראשון.
לכן,  כדי לחשב את השנה מוסיפים את מספר השנים בקבוצה זו. כמו-כן, יש להוסיף את מספר השנים המעוברות עד אותה שנה.
במקרה שלנו, שנת 99, התוצאה תהיה: 99 + 99/4 = 99 + 24 = 123

5. קבוצת היום
לא מבצעים שום פעולה אריתמטית....התוצאה = מספר הימים. במקרה שלנו: 1
לכן, יש לבדוק בשנה מעוברת אם התאריך חל לפני ה-1 במרץ באותה שנה. אם כן - יש להחסיר יום אחד.

6. כעת מסכמים את כל הקבוצות ואת התוצאה מחלקים ב-7
השיטה מבוססת על מספור הימים בשבוע מ-0 ועד 6: יום ראשון=0, יום שני = 1,... יום ששי =5, יום שבת = 6. לכן, לתוצאה הסופית, לאחר החלוקה ב-7, נוסיף 1.

יום + חודש + שנה + מאה = 1 +  0 + 123 + 497= 621
=MOD(SUM(1,0,123,497),7)+1=6

לכן, התאריך 1.1.1999 חל ביום ששי.


להורדת  קובץ ה"אקסל" :

(לחץ על: File*Download – או: CTRL+S)


יום שלישי, 17 ביולי 2012

"אקסל" - נוסחא למציאת היום בשבוע לפי תאריך

"אקסל" - נוסחא למציאת היום בשבוע לפי תאריך



·         רוצה לדעת באיזה יום יחול השנה יום-ההולדת שלך, של אשתך, של אביך, של אמך, של בנך, של הדודה....?
·         רוצה לדעת באיזה יום בשבוע התחתנה אמא שלך? השתחררת מהצבא? נולד בנך?
·         רוצים לדעת באיזה יום הוכרזה מדינת ישראל? פרצה מלחמת העולם הראשונה? נולד יוהן סבסטיאן בך? נפטר נפוליאון? נחנכה תעלת סואץ? הוכרזה "הכרזת העצמאות" האמריקנית?

הנוסחא שפיתחתי ב"אקסל" - תיתן לך מיד את התשובה המדויקת.
לא משנה באיזו גירסת "אקסל" אתה משתמש: 2003, 2007, 2010, 2013.


תוכל לדעת באיזה יום בשבוע התרחש אירוע בעבר, אירוע שאתה יודע את התאריך שלו.
כמו-כן, תוכל לדעת באיזה יום בשבוע יתרחש אירוע בעתיד, אירוע שתאריכו ידוע לך.

כל שעליך לעשות הוא להוריד למחשב שלך את קובץ ה"אקסל" מהקישור הבא:

או מהקישור הבא:



בקובץ עליך רק למלא: יום, חודש ושנה – ותקבל את התשובה מייד!!!!

L1 - יום (מספר בין 1-31)
L2 - חודש (מספר בין 1-12)
L3 - שנה (מספר בין 1600-2400)
התוצאה תופיע בתא: D9






לשם השוואה, אני מציג (בתא: P9) גם את התוצאה שהפונקציה: WEEKDAY מחשבת.

הנוסחא שפיתחתי ב"אקסל" - תיתן לך מיד את התשובה המדויקת.
לא משנה באיזו גירסת "אקסל" אתה משתמש: 2003, 2007, 2010, 2013.

שאלה: אתה אומר שזו נוסחא שפיתחת ב"אקסל". אבל ב"אקסל" כבר קיימת פונקציה בשם: WEEKDAY שמספקת את התשובה.
אז למה "להמציא את הגלגל"?

תשובה: יש לכך 4 סיבות:

א.    "אקסל" יודע לחשב ימים בשבוע רק עבור תאריכים  החל מ- 01/01/1900 אבל הנוסחא שלי יודעת לחשב ימים בשבוע החל משנת 1600. אם תרצה לדעת באיזה יום התרחשו מאורעות במאות 17,18,19 – לא תוכל לדעת, אם אתה משתמש בפונקציה WEEKDAY.
ב.     ב"אקסל" יש BUG (שגיאה בנוסחא) ולכן עבור כל התאריכים מ- 01/01/1900 ועד 28/02/1900 – מוצגת תשובה לא נכונה.
ג.      ב"אקסל" יש BUG נוסף: הוא מחשיב את התאריך 29/02/1900 כתאריך חוקי, בעוד שבחודש פברואר 1900 היו רק 28 ימים.
ד.     השימוש בפונקציה  WEEKDAY הוא קצת מסורבל. הפונקציה מחזירה את היום בשבוע כמספר. כדי לקבל את התשובה במילים, יש ל"תרגם" את המספר ליום בשבוע: 1 – יום ראשון, 2 – יום שני וכו'. בנוסף, גם הארגומנט לפונקציה דורש את התאריך כמספר ולכן יש להקלידו בנפרד.



מי שמעוניין לקבל הסבר כיצד "עובדת" הנוסחה, מוזמן לקרוא בבלוג שלי:





יום חמישי, 12 ביולי 2012

פתרון חידת תמונות לחנוכה



פתרון חידת תמונות לחנוכה - לא רק לילדים....
תזכורת  לחידה: בתמונה שלפנינו, כל אחד מששת הציורים מיַצֵג את אחד המספרים: 1 עד 6.

יש למצוא איזה מספר מיַצֵּג כל ציור, לפי הסכומים בכל טור ובכל שורה.






פתרון:
נסמן את כל ששת הציורים במשתנים, לכל ציור - מִשְתַנֶה משלו








לכן, הפתרון הוא: