Presentation is loading. Please wait.

Presentation is loading. Please wait.

שאלות ממבחנים לי-טל משיח

Similar presentations


Presentation on theme: "שאלות ממבחנים לי-טל משיח"— Presentation transcript:

1 שאלות ממבחנים לי-טל משיח litalma@cs.technion.ac.il

2 מבחן 21.7.95 כתוב תוכנית ב - cshell ששמהarrange אשר מעבירה קבצים מהמדריך הנוכחי (שאינם מדריכים) לתוך תת-מדריכים לפי הכללים הבאים: לכל קובץ שאינו מדריך, 1.אם קיים תת-מדריך למדריך הנוכחי ששמו זהה ל-4 האותיות הראשונות בשם הקובץ, הקובץ יועבר לתוך המדריך. (שים לב שהכוונה להעברת הקובץ ולא להעתקתו). 2.אם תנאי 1 לא מתקיים, וקיימים לפחות שני קבצים נוספים במדריך הנוכחי שאינם מדריכים, כך ש-4 האותיות הראשונות בשמם זהות ל-4 האותיות הראשונות בשם הקובץ, התוכנית תיצור תת-מדריך חדש ששמו זהה ל-4 האותיות הראשונות בשם הקובץ, והקובץ יועבר לתוך תת-מדריך זה.

3 מבחן 21.7.95 דוגמה: אם במדריך הנוכחי קיימים הקבצים הבאים: file1 file2 file3 prog1 prog2 prog script1 script2 כאשר רק הקובץ prog הינו מדריך, file1prog1prog2progscript1script2file2file3

4 מבחן 21.7.95 אזי לאחר הפעלת התוכנית arrange במדריך הנוכחי, יהיו הקבצים הבאים במדריך זה: file script1 script2 prog כאשר רק file ו – prog הינם מדריכים. במדריך file יהיו הקבצים file1 file2 file3, ובמדריך prog יהיו הקבצים prog1 ו - prog2 (בנוסף לקבצים שהיו בתוכו לפני הפעלת התוכנית arrange). file1 file prog1 prog2 progscript1 script2 file2file3

5 מבחן 21.7.95 הנחות: 1.ניתן להניח שבמדריך הנוכחי לא קיימים קבצים ששמם מתחיל ב - temp. 2.ניתן להניח שמותר לבצעoverwrite לקבצים קיימים במידה ויש צורך בכך. 3.בפתרון מותר להיעזר בקובץ ביניים אחד ולא יותר.אין הגבלה על מספר קבצי ה- script.

6 פתרון ראשון #!/usr/local/bin/tcsh -f foreach f (*) if (-f $f) then set a = `echo $f | cut -c1-4` echo $a >>! temp_file endif end foreach f (*) if (-f $f) then set a = `echo $f | cut -c1-4` if (-d $a) then mv $f $a else set b = `grep $a temp_file| wc -l` if ($b > 2) then mkdir $a mv $f $a endif end נשמור בקובץ בשם temp_file את 4 האותיות הראשונות בשמו של כל קובץ. לאחר מכן נעבור על כל הקבצים מחדש ונעבירם למדריך ששמו כארבעת האותיות הראשונות בשמם, אם קיים כזה מדריך או שישנם יותר משני קבצים אשר שמם מתחיל באותן ארבע אותיות.

7 פתרון שני arrange #!/usr/local/bin/tcsh -f FirstFourLetters | sort | uniq –c | MakeDirs InsertToDirs FirstFourLetters #!/usr/local/bin/tcsh -f foreach F (*) if (-f $F) then echo `$F | cut –c1-4` endif end ראשית ניצור "רשימה" שתכיל את ארבעת האותיות הראשונות בכל קובץ (FirstFourLetters). לאחר מכן נספור את התחיליות. עבור כל תחילית אשר מופיעה יותר מפעמיים נייצר מדריך כשם התחילית, במידה שלא קיים עדיין, (MakeDirs). בסופו של דבר נעביר כל קובץ אשר קיים מדריך ששמו כארבע האותיות הראשונות בשם הקובץ ל directory זה.

8 פתרון שני MakeDirs #!/usr/local/bin/tcsh -f set line = ($<) while ($#line >0) if ($line[1] > 2) then if !( -d $line[2] ) then mkdir $line[2] endif set line = ($<) end InsertToDirs #!/usr/local/bin/tcsh -f foreach F (*) if (-f $F) then set init = `echo $F | cut –c1-4` if (-d $init) then mv $F $init endif end ראשית ניצור "רשימה" שתכיל את ארבעת האותיות הראשונות בכל קובץ (FirstFourLetters). לאחר מכן נספור את התחיליות. עבור כל תחילית אשר מופיעה יותר מפעמיים נייצר מדריך כשם התחילית, במידה שלא קיים עדיין, (MakeDirs). בסופו של דבר נעביר כל קובץ אשר קיים מדריך ששמו כארבע האותיות הראשונות בשם הקובץ ל directory זה.

9 מבחן מועד ג' סמסטר אביב 06 חברת Moogle, שהחליטה זה מכבר לפתוח סניף בחיפה, הכריזה על יום ראיונות בפקולטה למדעי המחשב בטכניון (אשר בהם יכולים להשתתף רק בוגרי קורס מת"ם כמובן). במהלך הראיונות נוכחים מספר מראיינים ובינהם גם מנהל Moogle. כל מראיין נותן ציון למרואיין בין 0 ל-100. הציון הסופי יקבע ע"י שיקלול כל הציונים. למנהל יש זכות וטו ולא יתכן כי יתקבל לעבודה מרואיין שהמנהל החליט לא לקבל. בסיום הראיונות כל מראיין מכין קובץ בפורמט הבא על האנשים אותם הוא ראיין: כאשר השדות מופרדים זה מיזה בטאבים. שם הקובץ הינו.grades. FULL NAME<>GRADE<

10 מבחן מועד ג' סמסטר אביב 06 031243129Moshe Levi60 444422267Shimon Cohen90 555782311David David100 031243129Moshe Levi57 555782311 David David-NO- 444422267 Shimon Cohen80 דוגמה לקובץ בשם :eyal.grades הקובץ של מנהל Moogle יקרא Moogle.grades ויכול להראות כך:

11 מבחן מועד ג' סמסטר אביב 06 עליכם לכתוב סקריפט בשם BestToWork אשר ינתח את הקבצים הללו ויחזיר את קבוצת המרואיינים הטובים ביותר. הסקריפט יקבל כפרמטר את מס' מקומות העבודה הפנויים ויחזיר מס' שכזה של מרואיינים מצטיינים ממויינים לפי מידת ההצלחה. במיקרה שאין מספיק מרואיינים שהתראיינו / עברו את הראיון, תוחזר הודעה: “not enough interviewees” לדוגמה, עבור שורת ההרצה:BestToWork 2 על שני הקבצים שבדוגמה, נקבל: 1) 444422267 Shimon Cohen 2) 031243129 Moshe Levi

12 מבחן מועד ג' סמסטר אביב 06 הערות : הניחו כי קבצי הקלט קיימים ותקינים ניתן להניח שאותם מראיינים ראיינו את כל האנשים אין להשתמש בקבצים זמניים ניתן להשתמש במספר לא מוגבל של תסריטים

13 פתרון #! /bin/tcsh -f if (`cat Moogle.grades | grep -v "\-NO\-" | wc -l` < $1) then echo "not enough interviewees" else cat Moogle.grades | grep -v "\-NO\-" | CalcGrades | \ sort -n -r -k 4 | PrintBest | head -$1 endif BestToWork:

14 המשך פתרון #! /bin/tcsh -f set line = ($<) while (${#line} != 0) set grade = `cat *.grades | grep $line[1] | CalcOneGrade` echo $line[1] $line[2] $line[3] $grade set line = ($<) end CalcGrades:

15 המשך פתרון #! /bin/tcsh -f set line = ($<) set total_grade = 0 while (${#line} != 0) @ total_grade+= `echo $line | cut -d” “ -f4` set line = ($<) end echo $total_grade CalcOneGrade:

16 המשך פתרון #! /bin/tcsh -f set line = ($<) set num = 1 while (${#line} != 0) echo "${num}) $line[1] $line[2] $line[3]" @ num++ set line = ($<) end PrintBest:

17 מבחן מועד א' סמסטר אביב 06 לאחרונה התקבלו תלונות רבות על כך שקיימים דפים באתר הפקולטה שהלינקים היוצאים מהם הינם לינקים שבורים, כלומר לינקים אשר מצביעים לדפים שאינם קיימים. ברצוננו לעבור בצורה אוטומטית על כל הדפים באתר הפקולטה ולהפיק דו"ח על כל הדפים הלא תקינים. לצורך כך יש לעבוד עם קבצי html כקבצי טקסט. לינק בדף html ניתן לזהות באופן הבא: כאשר דף X מצביע לכתובת Y, יופיע בקוד ה- html של דף X: תווים נוספים עשויים להופיע לפני ואחרי ה-string הנ"ל. ניתן להניח (לצורך פשטות), כיstring שכזה עשוי להופיע רק פעם אחת בשורה. href="Y"

18 מבחן מועד א' סמסטר אביב 06 להלן דוגמה של חלק מתוכן קובץ html של דף מסוים מאתר הפקולטה (הקוד המתאר לינקים מודגש וניתן לראות כי מדף זה יש לינקים ל-3 כתובות באינטרנט). Technion Haifa

19 מבחן מועד א' סמסטר אביב 06 לצורך הבדיקה האם בכתובת האינטרנט אכן קיים דף עליכם להשתמש בסקריפט קיים שהוכן מראש בשם check_link. סקריפט זה מקבל כתובת של דף באינטרנט ובודק האם דף זה אכן קיים. לדוגמה, הפקודה: check_link http://www.technion.ac.il תדפיס SUCCESS במיקרה שהדף בכתובת http://www.technion.ac.il קיים. במידה והדף אינו קיים, יודפס ERROR: PAGE NOT FOUND. עליכם לכתוב סקריפט בשם check_web_pages. סקריפט זה יקבל כפרמטר שם של קובץ המכיל רשימת קבצי html לבדיקה וידפיס עבור כל קובץ לא תקין את מספר הלינקים הלא תקינים מכלל הלינקים בדף. במקרה וקיים בדף לינק אשר חוזר על עצמו, יש לספור אותו פעם אחת בלבד (שימו לב שגם הלינק הבא יחשב כחוזר על עצמו: http://www.technion.ac.il ו- (http://www.TECHNION.ac.il. השורות יודפסו בסדר ממויין לפי מס' הלינקים השבורים מהגדול לקטן. שמות קבצי ה-html התקינים לא יודפסו.

20 מבחן מועד א' סמסטר אביב 06 idex.html courses.html staff.html graduate_students.html graduate_students.html: 7 broken links out of 231 courses.html: 2 broken links out of 123 לדוגמה עבור הקובץ technion_webs.txt המכיל: הפלט של הפקודה: check_web_pages technion_webs.txt כאשר רק לקבצים courses.html ו- graduate_students לינקים שבורים הינו:

21 מבחן מועד א' סמסטר אביב 06 הערות: ניתן להניח כי הקובץ שניתן כפרמטר ל- check_web_pages קיים, תקין ומכיל שמות של קבצים קיימים ותקינים אין להשתמש בקבצים זמניים ניתן להשתמש במספר לא מוגבל של תסריטים

22 פתרון CheckWebPages #! bin/tcsh -f cat $1 | PrintLinksSummary | sort -k 2 -n -r PrintLinksSummary #! bin/tcsh -f set page = ($<) while (${#page} != 0) set num_links = `cat $page | GetLinks | sort -f -u | CountLinks` if ($num_links[1] != 0) then printf "%s: %s broken links out of %s\n“ \ $page $num_links[1] $num_links[2] endif set page = ($<) end

23 המשך פתרון GetLinks #! bin/tcsh -f set line = ($<) while (${#line} != 0) foreach word( $line ) if ($word =~ href=*) then echo $word | cut -c6- | cut -d">" -f1 endif end set line = ($<) end

24 המשך פתרון CountLinks #! bin/tcsh -f set total_links = 0 set broken_links = 0 set link = ($<) while (${#link} != 0) @ total_links ++ if(`check_links $link` =~ *ERROR*) then @ broken_links ++ endif set link = ($<) end echo $broken_links $total_links


Download ppt "שאלות ממבחנים לי-טל משיח"

Similar presentations


Ads by Google