22-11-2012, 19:07
|
|
|
|
חבר מתאריך: 27.02.02
הודעות: 4,536
|
|
לא משנה איזו תוכנה אתה משתמש, תוסיף מספרי שורות. זה מאוד נוח ככה גם להסביר וגם אם קופצת לך שגיאה ישר לקלוט באיזה שורה מדובר...
ואפשר לכתוב כאן בפורום עם תגי PHP וזה צובע את הקוד יופי טופי. ככה אני יכול לעשות העתק הדבק בדיוק לקטע שאני רוצה לדבר עליו.
אז ככה:
הלולאה הראשונה מקבלת את המספר num ומודא שהיא בגבולות המתאימים. היא בלולאה עד שיתקבל num שמתאים לתנאי [1, 12]
הלולאה השניה זה כל המוח :]
למעשה זה סוג של לולאת for ... ה num קבוע, ובסוף כל איטרציה ה counter גודל באחד. את counter כבר הגדירו בהתחלה שיהיה 1
כלומר הלולאה מתחילה מ 1 ועד ל num כולל.
אז הנה אתה כבר יכול לקלוט את המבנה
counter = 1
counter = 2
..
counter = num
נמשיך לתוך הלולאה:
fucturial*=counter
או בכתיבה שונה מעט
fucturial = fucturial*counter
זה מה שבעצם יוצר לנו את העצרת.
באיטרציה הראשונה אנחנו מחשבים 1*1 שזה עצרת של אחד ומכניסים לתוך fucturial.
באיטרציה שניה אנחנו מחשבים 1*2 שזה עצרת של 2 ומכניסים לתוך fucturial
באיטרציה השלישית אנחנו מחשבים 2*3 שזה עצרת של 3 ומכניסים לתוך fucturial
....
באיטרציה counter אנחנו מחשבים counter*fucturial שזה עצרת של counter ומכניסים לתוך fucturial.
e עובד אותו דבר רק שהוא מבצע את פעולת הסכימה.
בפעולה של העצרת כל פעם מתבצע מחדש כל פעולות הכפל שקדמו ולכן במקום לעשות לזה פונקציה חדשה בכל פעם, אפשר להשתמש במידע שכבר חישבנו בפעם הקודמת.
כלומר בשביל לחשב 5! במקום להתחיל לעשות 1*2*3*4*5 אני אשתמש ב 1*2*3*4 שכבר חישבתי באיטרציה קודמת אבל אני אוסיף את ההכפלה פי 5. וזה המשמעות של fucturial*=counter.
e זו פעולת הסכימה ופשוט מגדילים את e בכל איטרציה בעוד איבר.
אני השתדלתי לפרט לך עד כדי שתבין.
אני בטוח שאם היית פורס את זה ככה היית קולט את זה ישר.
פעם הבאה שתראה משהו בלולאה שלא ברור, תדפיס אותו ותראה איך הוא משתנה (או שלא)
כל פעם בקטע לא ברור אחר עד שתקלוט איך הפעולה עובד (או שלא עובדת...)
אתה יכול לקרוא לזה דיבאג :}
למשל, אני הייתי מוסיף אחרי fucturial*=counter
קוד PHP:
printf("[%d] %d", counter, fucturial)
חפרתי קצת אז קישטתי שיהיה לך נוח
_____________________________________
|