Description
נושא: “תור” גנרי ו עולם וירוסים פולימורפי
הגשה ביחידים
בהצלחה רבה!
תיאור התרגי ל
תרגיל זה מהווה הרחבה של תרגיל בית 3 בו מימשתם עולם מונחה עצמים של וירוסי ם. בתרגיל הנוכחי יתווספו שני מרכיבים לסימולציה הקיימת – ראשית, מבנה נתונים גנרי שיושמש עבור הווירוסי ם, ושנית, טיפוסי וירוסים נוספים והתנהגות פולימורפית בתו ך האוכלוסייה. לפיכך, מטרת התרגיל היא כפולה – ראשית ,תרגול תכנותי של תבניות במימוש מבנה נתונים גנרי, ושנית, המשך תכנון ומימוש של עץ הורשה נתון.
חלק א’: מימוש תור גנרי באמצעות קוד תבנית
תו ר הינ ו מבנה נתונים לינארי של איברים המקיים את עיקרון FIFO, ומאפשר הכנסת איברים סדורה לזנב ו, והוצאת איברים סדורה מראשו. למשל, בעקבות פעולת ההוצאה, יוסר ממבנה הנתונים האיבר המצוי בראש התור, והוא ה’ ותיק’ ביותר מבין שאר האיברים ביחס לסדר הכנסתו. מבנה הנתונים הגנרי מצופה לתמוך בפעולות הבאות:
• יצירת תור חד ש
• העתקה של תור קיים לעותק חדש של תו ר
• פירוק תור קיי ם
• השמה מתור אחד לתור שני, שבסופה שני המבנים יהוו תורים זהי ם
• הוספת איבר לזנב התו ר
• הוספת איבר לפי עדיפותו, מתודה זו מסתמכת על כך שהתור כבר ממוין ותכניס אותו למיקום המתאים.
• הצצה אל האיבר אשר בראש התור; יש להחזיר את האיבר עצמו ללא העתק ה
• הוצאת האיבר אשר בראש התור;
• פונקציית ניקוי התור )מחיקת כל האיברים, כלומר, מעבר לתור ריק(
• שאילתה על מספר האיברים המצויים בתו ר
• מיון תור לפי עדיפות. על הפונקציה למיין את האלמנטים הנמצאים בתור ל פי העדיפות שלהם – בהנחה שאופרטור > קיים ממומש עבור האלמנטים שבתור .
• פונקציית הדפסה לערוץ הפלט הסטנדרטי, אשר מדפיסה את כל האיברי הקיימים בתור ממוינים לפי סדר העדי פויות שלהם; בכל שורה יודפס איבר יחיד. פונקציה זו תסתמך על אופרטור הד פסה לפלט הסטנדרטי >> של האיבר.
מעבר לדרישות אלו, לגביהן אתם רשאים לתכנן את חותמות הפונקצי ה כרצונכם, אתם חופשיים במימוש מבנה נתונים ז ה כל עוד הפונקציונליות ש ל התור נשמרת. שימו לב, כי אתם רשאים לדרוש תכונות מסוימות שעל האיברים לקיים כדי שיאוחסנו בתור הגנר י שלכם .עליכם לפרט בתיעוד את כל הדרישות המפורשות וה בלת י-מפורשות להשמשת מבני הנתונים – וכן לציין את כל ההנחות שלכם.
חלק ב:’ טיפוס הווירוס הפולימורפי
בחלק זה של התרגיל אתם תשדרגו את תכנית עולם הווירוסים אותה מימשתם בתרגיל הקודם לכדי סימולציה בעלת וירוסים פולימורפ יים בעלי דפוסי התנהגות שונה.
מעתה ,הווירוסים בהם הסימולציה תתחשב הינם שלושה אפשריי ם: M'( Mimivirus ,)’L'( Lentivirus'(, ו-P'( Papilloma ‘ (.
מבחינת תיאור אובייקטים ,שלוש תם יורשי ם מאובייקט כללי” וירו ס”. עץ הירושה המתאר משפחה זו נתון בסכימה הבאה:
עדכון הווירוסים ימשיך להתרחש בכל פעימת זמן בדידה) דו ר(, וישמור על אופי ו הסתברות י, אך העדכון הפרטני והעדכון הקבוצתי יהיו תלויים במשפחת הווירוסים המסוימת – כפי שיוסבר כאן בפירוט.
עדכון קבוצת י: יתקיים כסדרו בכל דור )עותק של הווירוס החזק יחליף את הווירוס החלש( ,אך וירוסים ממשפחת Papilloma לא יוחלפו. בתסריט בו הווירוס החלש הוא מטיפוס Papilloma, יוחלף הווירוס הבא אחריו במידת השגיאה. אם כל הווירוסים הם ממשפחת Papilloma, לא יתרחשו עדכונים קבוצתיים.
שימו לב כי וירוס מטיפוס Papilloma רשאי להחליף ווירוסים מטיפוסים אחרים במידה והוא החזק ביותר בדורו.
עדכון פרטני: מדד התמורות pm הינו קבוע עבור כל אחת מן המשפחות )כלומר, לא יינתן מעתה כקלט מן המשתמש(:
• למשפחת Lentivirus מדד התמורות הינו 2
• למשפחת Mimivirus מדד התמורו ת הינ ו 4
• למשפחת Papilloma מדד התמורו ת הינ ו 1
שינויים בהשוואה לתרגיל הבית הקודם
1. עליכם לעשות שימוש במבנה הנתונים הגנרי אותו מימשתם בחלק א’ של התרגיל בכדי לאחסן את אובייקטי הווירוסים באופן פולימורפי; כלומר, אובייקט האוכלוסייה מצופה להחזי ק את הווירוסים באמצעות תור אחד. עדיפות של איבר בתור נקבעת על סמך הקירבה של הוירוס בתור אל וירוס המטרה. במידה ומספר וירוסים בעלי אותה עדיפות יש לסדרם לפי סדר מציאתם.
2. התכנית תקבל גם בתרגיל ז ה שני קבצי קלט –
הקובץ הראשון יתאר את עולם הווירוסים ויכיל הפעם שתי שורות: השורה הראשונה תכיל את מימד ווקטורי התמורות ,
והשורה השנייה תכיל את ווקטור המטרה .
הקובץ שני יכלול את הדור ההתחלתי, אך יכלול שינוי בפורמט כדי לאפיין את סוג הווירוס. הקובץ יכיל בשורה הראשונה את מספר הווירוסים בעולם, ובשורות לאחר מכן את סוגם, שמותיהם ומצבם ההתחלת י של כל הווירוסים. כל שורה תתחיל בתו המגדיר את טיפוס הווירוס )התווים האפשריים הינ ם {’L’,’M’,’P‘}(, את שמו, ולאחר מכן תכיל את מצבו ההתחלתי, מופרדים ברווחים. להלן דוגמא של קובץ קלט חוקי של איתחול השחקנים:
5 P csMEX 1 2 3 4 5 6 7 8 9 10
P ukSFO 10 2 3 4 5 6 7 8 9 1
L fhOAK 3 1 2 4 5 6 7 10 9 8
M jkFIN 7 2 3 4 5 1 6 8 10 9
L mjdjAMS 8 2 3 9 5 6 10 7 1 4
בסיום מעברי הזמן על התכנית להחזיר כפלט את ווקטורי התמורות של הדור האחרון. על נתונים אלו להיות מודפסים דרך ערוץ הפלט הסטנדרטי, כמו בתרגיל בית 3, אך טיפוס הווירוס יתווסף לכל שורה באופן מקביל לפורמט הקלט.
בתום הדפסת האוכלוסייה, תודפס שורת רווח, ולאחריה הווירוס הטוב ביותר בריצה. למשל, כך יכול להיראות הפלט עבור הדוגמא שלעיל )שימו לב להשתלטות של ווירוס מסוים על האוכלוסייה( –
L mjdjAMS_112 4 2 3 5 9 6 10 7 1 8
L mjdjAMS_666 8 2 3 9 6 5 10 7 1 4
L mjdjAMS_45 1 2 3 9 5 6 4 7 8 10
L mjdjAMS_786 9 2 3 8 4 6 10 7 1 5
L mjdjAMS_987 8 10 3 9 5 6 4 7 1 2
L mjdjAMS_341 5 2 3 10 9 6 8 7 1 4
הנחות עבודה
הנחות העבודה מהתרגיל הקודם לגבי פורמט השמות, גדלי האוכלוסייה, מספר הדורות ומימד ווקטורי התמורה תקפות גם בתרגיל זה.
דגשים
• אין אפשרות להשתמש בספריית STL בתרגיל זה.
• עליכם לוודא כי התכנית עוברת קומפילציית g++ התואמת את הקומפיילר שעל שרת המכללה ללא כל שגיאות או אזהרות כלשהן, ורצה בהצלחה.
• עליכם לתעד את הקוד באמצעות הערות המתארות בקצרה את הפונקציות השונות.
• אין להשתמש בפוינטרים חכמים) auto (
הגש ה
עליכם להגיש במערכת Moodle קובץ ארכיב מטיפוס zip בלבד, ששמו כולל את קוד הקורס) ‘44’(, שם התרגיל
)’4‘ex( ותעודת הזהות של הסטודנט/ית המגיש/ה, מופרדים בקו תחת י בפורמט הבא: _ex4_studID.zip44 .
על ארכיב zip זה להכיל את כל קבצי המקור )ממשק/מימוש( הנדרשים לקומפילציה, והוא רשאי להכיל תיעוד טקסטואלי; מבחינת טיפוסי קבצים, עליו לכלול רק קבצים עם סיומות *.cpp *.h *.txt
לדוגמה: על סטודנט שמספר הזיהוי שלו הינו 012345678 להגיש ארכיב בשם _ex4_012345678.zip44 הכולל את כל קבצי המקור של הפרויקט ,ללא תיקיות כלשהן, ורשאי להכיל קובץ טקסטואלי לתיעוד.
•
•
•
אי -הקפדה על ההנחיות, כולל פורמט ההגשה הדיגיטלי, תגרור הורדה בציון התרגיל.
לא תתקבלנה הגשות באיחור!




Reviews
There are no reviews yet.