Java/סיכום ותרגילים

מתוך ויקיספר, אוסף הספרים והמדריכים החופשי
קפיצה לניווט קפיצה לחיפוש

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

כתיבת קוד טובה[עריכה]

כמה עקרונות שיסייעו בכתיבה של קוד טוב יותר. שמירה על עקרונות אלה תסייע לבנייה של קוד בהיר וקל לקריאה, הן עבורכם והן עבור אנשים אחרים:

  • המנעו מלחזור על קטעי קוד - השתמשו בשיטות, אפילו קצרות.
  • אל תכתבו מספרים ומחרוזות חסרי פשר - השתמשו במשתנים קבועים.
  • דאגו לבחור שמות טובים וברורים למשתנים ולשיטות.
  • שמרו על עקביות בקוד.
  • אל תתעצלו להשתמש בהערות, אך גם אל תגזימו - קוד עמוס בהערות מכביד על הקורא.
  • בדקו את מקרי הקצה! תוכניות רבות עלולות לעבוד היטב ולקרוס פתאום כאשר משתמש מבצע פעולה עליה לא חשב המתכנת, או כאשר הקלט לא צפוי. דאגו שלתוכנית שלכם זה לא יקרה!
  • זכרו - כמה שלא תתאמצו, תכניות מחשב הן בדרך כלל מורכבות ותלויות בכל מיני גורמים. תקלות הן עסק בלתי נמנע, והתיקון שלהן הוא חלק בלתי נפרד, אם כי מתסכל לעיתים, של עבודת התכנות.

תרגילים[עריכה]

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

איקס-עיגול[עריכה]

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

סלט מילים[עריכה]

כתבו תוכנית המקבלת קטע טקסט (מחרוזת באורך לא ידוע) ומסדרת אותו מחדש בסדר אקראי, באמצעות פירוקו למילים וכתיבת המילים בסדר חדש. מילה, לצורך העניין, מופרדת ממילה אחרת באמצעות רווח (" "), או כמה רווחים רצופים. לכן, למשל, המחרוזת "One,two" נחשבת כמילה אחת, אבל "One Two", או "One Two" הן שתי מילים. רמז: העזרו בשיטה שמקבלת מחרוזת וסופרת כמה מילים נמצאות בה, ובשיטה נוספת, שתקבל משפט ומספר המילים שנמצאות בו, ותחזיר מערך המכיל את כל המילים. דאגו לכך שהתוכנית תדע לכתוב כל מילה שמצאנו בסדר אקראי ובלי שנחזור על אותה המילה פעמיים.

עד 21[עריכה]

כתבו את המשחק "עד 21", בו מתחרים כמה שחקנים - מי יגיע ראשון ל-21? מהלך המשחק: כל שחקן מתחיל עם מספר נקודות אקראי, בין 2 ל-20. לאחר מכן, נשאל כל שחקן בתורו האם הוא רוצה להגדיל את הסכום שברשותו. אם הוא מעוניין, הסכום שלו גדל באופן אקראי במספר בין 1 ל-10. שחקן שסכומו עבר את ה-21 - מפסיד ויוצא מהמשחק. אם הוא לא מעוניין, הוא לא יוכל להגדיל את סכומו יותר. כשאף שחקן לא מעוניין להגדיל יותר את הסכום שברשותו, מנצח השחקן שברשותו הסכום הקרוב ביותר ל-21 (כולל 21). אם יש כמה בעלי אותו הסכום - מוכרז תיקו. מספר השחקנים אינו קבוע, והוא יהיה בין 2 ל-6. רמז: מכיוון שמספר השחקנים משתנה, השתמשו במערכים כדי לייצג את השחקנים ומצבי המשחק השונים, והיעזרו בלולאות.

ראשוניים[עריכה]

כתבו תוכנית, יעילה ככל האפשר, שתמצא ותשמור את כל המספרים הראשוניים שגודלם עד N (כלומר: 1, 2, 3, 5, 7, ..., עד N), כאשר N הוא מספר נתון (משתנה קבוע כלשהו). אפשר להניח שמספר הראשוניים עד N הוא קטן ממספר נתון אחר (משתנה קבוע אחר) - הבחירה לא חייבת להיות מדוייקת, אך חייבת להיות גדולה מספיק כך שתכיל את כל הראשוניים שמצאנו (מן הסתם, מספר הראשוניים עד N קטן או שווה ל-N, לכן כדאי לבחור מספר שאינו גדול מ-N). אפשר, לשם הדוגמה, לבחור את N להיות 1000, ואת הקבוע השני להיות 500. לאחר מכן, תקבל התוכנית בלולאה מספרים שלמים ותפרק אותם לגורמים ראשוניים, בעזרת המספרים הראשוניים שמצאה בשלב הראשון. למשל: אם המשתמש יכניס את המספר 10, הוא יקבל את הפלט 2*5. אם יכניס 33, הוא יקבל 11*3. אם יכניס 45, הפלט יהיה 3*3*5. התוכנית תסתיים כאשר יוכנס מספר שלילי, או אפס. רמז: הנפה של ארטוסתנס. ניתן להניח שהמשתמש לא יבקש לפרק מספרים גדולים מאוד (ואפשר גם לדאוג שלא יעשה זאת - בעזרת תנאי מתאים).

ומילה אחרונה לסיום[עריכה]

עכשיו כאשר סיימתם את הספר, אתם מוזמנים לעבור לספר הבא: תכנות מתקדם ב-Java. זכרו - אם שכחתם משהו, תמיד תוכלו לחזור לפה, בהצלחה.


הפרק הקודם:
בדיקת שגיאות
סיכום ותרגילים הפרק הבא:
תכנות מתקדם ב-Java