תכנות - שיעור 27 29/January/2006    

Python - Lists and Tuples

ראינו שבשפת Python יש הבדל בין רשימה (list) לבין lteq1.png -יה סדורה ( tuple ). ברשימה אנו יכולים לבצע פעולות של הוספה, החסרה ושינוי אברים שבה. אך לא כך ב-tuple. רשימה מיוצגת על ידי סוגריים מרובעות, לעומת tuple שמסומנת על ידי סוגריים עגולות.

חפוש ראשוניים

הצגנו את האלגוריתם הנפה של ארטוסתנס (המסננת) או (The Sieve of Eratosthenes ). באלגוריתם זה מתחילים עם רשימה שמאתחלים אותה בערכי אמת, ובכל שלב lteq2.png מסמנים בשקר, את המקומות שאינם ראשוניים "בגלל" lteq3.png . בקישורים, נמצא תיאור יותר מפורט מדויק וכן הדגמה חיה.

תרגילים

פתרונות לתרגילים קודמים

תוכלו לראות או להוריד פתרון לחפוש שלשות פיתגוראיות "מענינות". כמו כן לראות או להוריד תכנית "תמימה" המחפשת מספרים ראשוניים. שניתנו בשעור קודם .

חדשים:

  1. כתבו פונקציה factorize(n) שמקבלת מספר lteq4.png , מוצאת את הפרוק שלו
    lteq5.png
    כך ש lteq6.png הם מספרים ראשוניים. הפונקציה תחזיר את רשימת הזוגות (2-tuples) - הבאה:
    [(b1,p1), (b2,p2), ... (bm,pm)].
    ראו דוגמא בתרגיל הבא.
  2. כתבו פונקציה factors2str(factors_list) שמקבלת רשימה כמו בתרגיל הקודם ומחזירה string באופן הבא:
    "b1^p1 * b2^p2 * ... * bm^pm"
    לדוגמא, עבור lteq7.png הפונקציה factorize תחזיר
    [(2,3), (7,1), (11,2)]
    והפונקציה factors2str אם היא תקבל את הרשימה האחרונה, אז היא תחזיר
    "2^3 * 7^1 * 11^2".
  3. כתבו תכנית שמשתמשת בשתי הפונקציות שבתרגילים הקודמים. התכנית תקבל שני מספרים lteq8.png ותציג את הפרוק של חמשת המספרים הבאים:
    lteq9.png
    בדקו את התכנית עבור כמה מקרים, למשל
    lteq10.png
    האם תוכלו לזהות חוקיות?
  4. כתבו תכנית שמממשת את האלגוריתם של ארטוסתנס. התכנית תדפיס את כל המספרים הראשוניים עד גבול עליון שניתן על-ידי המשתמש.

חזרה לעמוד האם