בתרגול הקודם

42
םםםםםם םםםםם םםםםםםםם: םםם םם םםםם םםםםםםםם םםםם םם םםםםםםם םם םםםם םםםם םםםםם םםםםםםםםםםםםםםםםם( םםםםם םםםםםם םםםםםםםם) םםםםם םם םםםםםםםםם םםםםםם םםםםםםם םםםםם1

Upload: kyrene

Post on 05-Jan-2016

42 views

Category:

Documents


6 download

DESCRIPTION

בתרגול הקודם. פונקציות: לשם מה צריך פונקציות מבנה של פונקציה מה קורה בזמן קריאה לפונקציה העברת משתנים לפונקציה (פרימיטיבי לעומת לא פרימיטיבי) משתנים לוקליים העמסה. תרגול מס' 5. נושאים מחרוזות מיון (מיון בועות) רקורסיה. מחרוזות. הקדמה - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: בתרגול הקודם

הקודם בתרגול

פונקציות:•לשם מה צריך פונקציות–מבנה של פונקציה–מה קורה בזמן קריאה לפונקציה–העברת משתנים לפונקציה )פרימיטיבי לעומת לא –

פרימיטיבי(משתנים לוקליים–העמסה–

1

Page 2: בתרגול הקודם

' מס 5תרגול

נושאים  מחרוזות)מיון )מיון בועותרקורסיה

מבוא למדעי המחשב, בן גוריון2

Page 3: בתרגול הקודם

מחרוזותהקדמה

( היא מחלקה המייצגת טקסט )רצף של תווים(. Stringמחרוזת )

ונגמר באורך 0מיספור אינדקס התווים במחרוזת מתחיל מ-

.1המחרוזת פחות

String "abcd"

Index 0123

מבוא למדעי המחשב, בן גוריון 3

Page 4: בתרגול הקודם

מחרוזות: מחרוזות על פעולות

ואתחול • הגדרה

String s1;

String s2 = "abcd";

String s3 = "";

String s4 = null;

String s5 = new String();

מבוא למדעי המחשב, בן גוריון 4

Page 5: בתרגול הקודם

מחרוזות מחרוזתאורך•

מבוא למדעי המחשב, בן גוריון 5

String s2 = "abcd";

System.out.println(s2.length());

String s3 = "";

System.out.println(s3.length());

String s4 = null;

System.out.println(s4.length());

4

0

NullPointerException

Page 6: בתרגול הקודם

מחרוזות

• ) מסוים ) אינדקס במיקום לתו גישה

s2.charAt(0)

s2.charAt(1)

s2.charAt(5)

מבוא למדעי המחשב, בן גוריון 6

String s2 = "abcd";

'a'

'b'

StringIndexOutOfBoundsException:String index out of range

Page 7: בתרגול הקודם

מחרוזות

מחרוזת-• מאינדקס תת (.j )לא כולל את j ועד אינדקס iהחל

String s2 = "abcd";

s2.substring(1,3) "bc"

s2.substring(1) "bcd"

(.false או true בין תוכן שתי מחרוזות. התוצאה בוליאנית )השוואה•

s2.equals(s3)

+ שרשור•

s2+"efg" יוצר מחרוזת חדשה "abcdefg" המחרוזת .s2.לא משתנה

מבוא למדעי המחשב, בן גוריון 7

האופרטור "==" משווה מה?

Page 8: בתרגול הקודם

מחרוזות

הפוך – 1דוגמה תווים סדר עם מחרוזת

פונקציה המקבלת מחרוזת ומחזירה מחרוזת reverseלפנינו

mainאחרת שבה התווים בסדר )מיקום( הפוך. הפונקציה

" ומדפיסה את התוצאה Hello על המחרוזת "reverseמפעילה את

(olleH.)

public static void main (String[] args) {

System.out.println(reverse("Hello"));

}מבוא למדעי המחשב, בן גוריון 8

Page 9: בתרגול הקודם

פתרון

public static String reverse(String data) {

String rev = new String();

for (int j=data.length()-1; j>=0; j=j-1) {

rev = rev + data.charAt(j);

}

return rev;

}

מבוא למדעי המחשב, בן גוריון 9

Page 10: בתרגול הקודם

מחרוזות- 2דוגמה במחרוזת – מחרוזת תת של חיפוש

פונקציה מחרוזות isSubstringלפנינו שתי - strהמקבלת subו

האם בתוך subובודקת . strמופיעה הפונקציה מחרוזת כתת

. בוליאנית תשובה מחזירה

המחרוזת, " - "bcלמשל במחרוזת" מחרוזת כתת .1באינדקס" abcdמופיעה

String "abcd"

Index 0123

בעלות אורך זהה."abcd" לתתי מחרוזות של "bc"הרעיון: נשווה את

מבוא למדעי המחשב, בן גוריון 10

Page 11: בתרגול הקודם

public static boolean isSubstring(String str,String sub){

boolean isFound = false;

int lastInd = str.length()- sub.length();

for (int i=0; i<=lastInd && !isFound; i=i+1) {

String strSub = str.substring(i, i+sub.length());

if (strSub.equals(sub)) {isFound = true;

} }

return isFound;

}

מבוא למדעי המחשב, בן גוריון 11

Page 12: בתרגול הקודם

ASCIIטבלת

מבוא למדעי המחשב, בן גוריון 12

Page 13: בתרגול הקודם

קיסר - 3דוגמה צופןכללי צופן של :סכמה

מבוא למדעי המחשב, בן גוריון 13

Page 14: בתרגול הקודם

קיסר - 3דוגמה צופן

( המקבל Cipherצופן הצפנה, אלגוריתם הוא קריא( טקסט . טקסט מוצפן, ומחזיר מפתחו

צופן קיסר מבוסס על רעיון החלפת האותיות של הטקסט •הקריא, לשם יצירתו של הטקסט המוצפן: האלפבית המשמש

להצפנה מוסט מעגלית במספר קבוע של 'מקומות' מן האלפבית הרגיל.

( = מספר מקומות ההסטה.keyהמפתח )•

לפי עדויות היסטוריות יוליוס קיסר עשה בשיטה זו שימוש •נרחב.

מבוא למדעי המחשב, בן גוריון 14

Page 15: בתרגול הקודם

קיסר - 3דוגמה צופן

של, בהזזה המילה 3למשל תתורגם... BABYמקומות

.EDEBלמילה

מבוא למדעי המחשב, בן גוריון 15

Page 16: בתרגול הקודם

public static String encrypt(String str, int key) {String ans = "";final int ALPHABET_SIZE = 26;for (int i = 0; i < str.length(); i=i+1) {

int c = str.charAt(i);if ('A'<=c && c<='Z') { c = c - 'A'; c = ((c + key) % ALPHABET_SIZE )+'A';}else if ('a'<=c && c<='z') { c = c - 'a'; c = ((c + key) % ALPHABET_SIZE )+'a';}ans = ans + (char)c;

}return ans;

}מבוא למדעי המחשב, בן גוריון 16

Auto casting

זה תקין?

Page 17: בתרגול הקודם

קיסר - 3דוגמה צופן

הערות :כמה

int c = str.charAt(i)בפקודה 1.

.int ל- char מ- אוטומטיתמתרחשת המרת טיפוס

. 'c-'A ו- A'<=c'כנ"ל בביטויים כמו

ans = ans + (char)cבפקודה 2.

. פעולה זו נחוצה מכיוון char ל- int מ- מפורשתיש המרת טיפוס

.)65( int ולא )'char )'Aשנרצה לשרשר למחרוזת התוצאה ערך

הערכים המספריים של כל תו מסוכמים בטבלה (טבלת 3.

ASCII תקן ,UNICODE .)אין כלל צורך לזכור את הטבלה בע"פ.

מבוא למדעי המחשב, בן גוריון 17

Page 18: בתרגול הקודם

קיסר - 3דוגמה צופןpublic static void main(String[] args) {String str = "BEN GURION UNIVERSITY";int key = 3;String encrypted = encrypt(str, key);System.out.println(encrypted);// "EHQ JXULRQ XQLYHUVLWB" String decrypted = decrypt(encrypted, key);

System.out.println(decrypted);// "BEN GURION UNIVERSITY" }

( של צופן קיסר? decrypt: מהי פעולת פענוח )שאלה: בדומה להצפנה, מלבד חיסור של מפתח ההזזה במקום תשובה

חיבורו.

מבוא למדעי המחשב, בן גוריון 18

Page 19: בתרגול הקודם

קיסר - 3דוגמה צופן

קיסר צופן פריצתהקריא - • הטקסט את לגלות ניתן כיצד מוצפן טקסט בהינתן

? המפתח את לדעת מבליבאמצעות • הטקסט הוצפן בו המפתח את לנחש ניתן

האנגלי בית האלף אותיות של השכיחויות על סטטיסטיקה . היא באנגלית בטקסט ביותר השכיחה האות כלשהו בטקסט

E 12%, שכיחותה. הבא תכתבו תוכנית המוצאת את האות השכיחה ביותר quizב –•

וככה Eבטקסט נתון. סביר להניח שאות זו היא הקידוד של האות ניתן לחשב בכמה הזזנו את האותיות.

ניתן לנסות את כל ההסטות האפשריות )כמה כאלו יש?( ולהשוות •את התוצאה למילון.

מבוא למדעי המחשב, בן גוריון 19

Page 20: בתרגול הקודם

מיוניםמערך ) n של A( - הגדרת הבעיה: בהינתן מערך array sortמיון

מספרים שלמים, חשב מערך ממוין של אותם מספרים. 

למשל:Input: 7, 18, 28, 4, 10Output: 4, 7, 10, 18, 28

ישנן שיטות מיון רבות, למשל:(Selection Sortמיון בחירה )•((Insertion Sortמיון הכנסה •(Bubble Sortמיון בועות )•

מבוא למדעי המחשב, בן גוריון 20

Page 21: בתרגול הקודם

בועות )Bubble Sort( מיון

: השיטה תיאור

תוך כדי המיון, החלק הימני של המערך כבר ממוין )"מעל פני הים"( והחלק השמאלי של המערך אינו ממוין )"מתחת לפני

הים"(.

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

אינם בסדר המיון.

מבוא למדעי המחשב, בן גוריון 21

:// . . / ? =http www youtube com watch v gWkvvsJHbwY

Page 22: בתרגול הקודם

בועות )Bubble Sort( מיון

18 7 28 4 10

7 18 28 4 10

7 18 28 4 10

7 18 4 28 10

7 18 4 10 28

7 18 4 10 28

7 18 4 10 28

7 4 18 10 28

7 4 10 18 28

7 4 10 18 28

מבוא למדעי המחשב, בן גוריון 22

7 4 10 18 28

4 7 10 18 28

4 7 10 18 28

4 7 10 18 28

4 7 10 18 28

וכן הלאה עד אשר המערך כולו מעל פני הים.

Page 23: בתרגול הקודם

public static void bubbleSort(int[] array){int tmp; /* @pre: bbl=0 */for (int bbl=0; bbl<array.length-1; bbl=bbl+1) {/* @inv: array[array.length- bbl.. array.length-1] is sorted * and all numbers array[array.length-bbl .. array.length-1] * are bigger than the numbers array[0 .. array.length-bbl-1] */

for (int index=0; index < array.length-1; index=index+1){

if (array[index] > array[index+1]) { tmp = array[index];array[index] = array[index+1]; array[index+1] = tmp;

}}

}/* @post: array is sorted */

}

מבוא למדעי המחשב, בן גוריון 23

Page 24: בתרגול הקודם

בועות )Bubble Sort( מיון

? שאלה מתבצעות: השוואות (array[index] > array[index+1])כמה

השוואות. הלולאה n: הלולאה הפנימית מבצעת תשובההשוואות. n2 פעמים. סה"כ nהחיצונית מתבצעת

 : האם כל ההשוואות נחוצות? שאלה: לא. תשובה

אם המערך כבר ממוין אין צורך להמשיך בלולאה )לא צריך 1.לבעבע עוד בועה(.

השוואות הנעשות בחלק הממויין מיותרות )פני הים יורדים, 2.ויש להשוות איברים רק מתחת לפני הים(.

מבוא למדעי המחשב, בן גוריון 24

Page 25: בתרגול הקודם

public static void bubbleSort(int[] array){boolean isSorted = false;

int tmp;

for (int bbl=0; !isSorted && bbl<array.length-1; bbl=bbl+1){

isSorted = true; for (int index=0; index<array.length-1-bbl;

index=index+1){ if (array[index] > array[index+1]) { tmp = array[index]; array[index] = array[index+1]; array[index+1] = tmp; isSorted = false; } } }}

מבוא למדעי המחשב, בן גוריון 25

Page 26: בתרגול הקודם

רקורסיה

מבוא למדעי המחשב, בן גוריון 26

Page 27: בתרגול הקודם

רקורסיה

רקורסיבית . פונקציה לעצמה שקוראת פונקציה היאהעברת ) אחרת פונקציה כל כמו מחושבת רקורסיבית פונקציה

, המשתנים, של הכרה תחום לוקאליים משתנים פרמטריםוכו'(.

: ישנן בעיות רבות שעבורן מוטיבציהפתרון רקורסיבי פשוט יותר מפתרון איטרטיבי.

מבוא למדעי המחשב, בן גוריון 27

Page 28: בתרגול הקודם

רקורסיה

עד: 1דוגמה טבעיים מספרים nסכום

אפשר בלולאה )פתרון איטרטיבי(:

public static int sum(int n) { int ans = 0; for (int i = 1; i <= n; i = i + 1) {

ans = ans + i;}return ans;

}

מבוא למדעי המחשב, בן גוריון 28

Page 29: בתרגול הקודם

רקורסיה

: בשם אחרת פונקציה לנו שיש נניח אחרת בדרך גם אפשרmagic 2 + 1 שמחזירה את הסכום( + ... +n-1) .

יכולה להראות כך:sumאז

public static int sum(int n) { int ans = magic(n)+ n; return ans; }

הייתה מחזירה. )n-1(sum מחזירה בדיוק מה ש-)magic)nאבל

מבוא למדעי המחשב, בן גוריון 29

Page 30: בתרגול הקודם

רקורסיה

: החישוב עבור נסיגה נוסחת להגדיר sum)n( = sum)n-1(+n ניתן

 

public static int sum(int n) { int ans = sum(n-1)+ n;return ans;

}

מבוא למדעי המחשב, בן גוריון 30

Page 31: בתרגול הקודם

רקורסיה

: לעצמה שקוראת אחת פונקציה היא התוצאה

public static int sum(int n) { int ans; if (n == 1) // stop condition

ans = 1; else

ans = sum(n - 1) + n; return ans;

}

*** מעקב על דוגמת הרצה וציור טבלאות מעקב משתנים.

מבוא למדעי המחשב, בן גוריון 31

Page 32: בתרגול הקודם

רקורסיה

: נכונות.n ≥ 1 עוצרת לכל sumהתוכנית: 1טענה :הוכחה

.1 קטן ב-n. בכל קריאה רקורסיבית 1ans = sum(n-1) + n;

. n == 1. בכל קריאה לפונקציה בודקים האם 2if (n == 1)

האלגוריתם עוצר.2 ו-1. מ-3

 

מבוא למדעי המחשב, בן גוריון 32

Page 33: בתרגול הקודם

רקורסיה

. n + … + 2 + 1, האלגוריתם מחזיר את הערך n≥1 המקיים nלכל: 2טענה

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

רקורסיביים.

 :n באינדוקציה על הוכחה

כנדרש.1, האלגוריתם מחזיר n=1 כאשר מקרה בסיס: כלשהו.k≥1 נניח כי הטענה נכונה עבור הנחת האינדוקציה:האינדוקציה: קלט צעד על מופעל האלגוריתם כאשר k+1 הקריאה ,

קלט על היא הקריאה kהרקורסיבית האינדוקציה, הנחת על-פי .. לכך מוסיף האלגוריתם k + … + 2 + 1הרקורסיבית תחזיר את הסכום

הסכום k+1את ומתקבל הנוכחית( הקריאה של )הקלט 1 + 2 + … + k + )k+1(.אותו מחזיר האלגוריתם, כנדרש ,

מבוא למדעי המחשב, בן גוריון 33

Page 34: בתרגול הקודם

רקורסיה

רקורסיבית פונקציה לבניית הכללים שלושת

עצירה 1. . ) תנאי תנאי רקורסיבית קריאה ללא עליו לענות שניתןבסיס(

אם לא נשים תנאי עצירה התוכנית עלולה להיכנס ללולאה אינסופית.

קריאה רקורסיבית עם קלט הקרוב יותר לתנאי העצירה 2.)"הקטנת הבעיה"(.

אם לא מקטינים את הבעיה לא נגיע לתנאי העצירה, כלומר שוב תהיה לולאה אינסופית.

הרקורסיבית לחישוב התוצאה שימוש בתוצאת הקריאה3.המוחזרת )הנחת האינדוקציה(.

מבוא למדעי המחשב, בן גוריון 34

Page 35: בתרגול הקודם

פסקל – 2דוגמה משולש

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

המספרים, 1המספר שני סכום את מהווה במשולש מספר וכל ( הם המשולש שוקי על שנמצאים המספרים מעליו שנמצאים

(. 1כולם n

0 1

1 1 1

2 1 2 1

3 1 3 3 1

4 1 4 6 4 1

5 1 5 10 10 5 1

m מבוא למדעי המחשב, בן גוריון5 4 3 2 1 0 35

, נותן את n בשורה ה- mהמספר ה-התשובה לשאלה "בכמה דרכים שונות

n עצמים מתוך mאפשר לבחור עצמים?" )מקדם בינומי(.

Page 36: בתרגול הקודם

פסקל – 2דוגמה משולשרקורסיבית פונקציה את )pascal)int n, int mנכתוב שתחשב במשולש פסקל. m ובעמודה nהמספר המופיע בשורה

תאור האלגוריתם נחזיר ערך n=m. אם 1 נחזיר ערך 0 הוא m: אם תנאי עצירה•

1. נציין שיש m>n הם שלמים אי-שליליים. אם m ו- nחוקיות הקלט: •

שגיאה בקלט. על קלט קטן יותר: קריאות רקורסיביות •

)המספר מעל(m ו- n-1קריאה אחת עם )המספר מעל ומשמאל(m-1 ו n-1קריאה שנייה עם

: החזרת סכום של הערכים שילוב התוצאות לקבלת תשובה•שהתקבלו משתי הקריאות הרקורסיביות.

מבוא למדעי המחשב, בן גוריון 36

Page 37: בתרגול הקודם

פסקל – 2דוגמה משולש// Pascal number in row n and column m.

public static int pascal(int n, int m){ int ans;

if (m<0 || n<0 || m>n) {ans = -1;

} else if (m==0 || n == m) { ans = 1;

} else { ans = pascal(n-1,m) + pascal(n-1,m-1);

}

return ans; }

מבוא למדעי המחשב, בן גוריון  37

Page 38: בתרגול הקודם

זוגיים - 3דוגמה ואי זוגייםטבעי המטרה: מספר האם לבדוק הוא זוגי או אי-זוגי באמצעות הפונקציות nרוציםeven -וodd.)ללא פעולות חלוקה ושארית(

public static boolean even(int n) { boolean ans; if (n == 0) ans = true; else ans = odd(n - 1); return ans; } public static boolean odd(int n) { boolean ans; if (n == 1) ans = true; else ans = even(n - 1); return ans; }

מבוא למדעי המחשב, בן גוריון 38

מה קורה כאשר מפעילים את

even על מספר ?0אי-זוגי גדול מ

Page 39: בתרגול הקודם

זוגיים - 3דוגמה ואי זוגיים

מבוא למדעי המחשב, בן גוריון 39

נסיון שני:

public static boolean even(int n) { boolean ans; if (n == 0) ans = true; else ans = odd(n - 1); return ans; } public static boolean odd(int n) { boolean ans; if (n == 0) ans = false; else ans = even(n - 1); return ans; }

: רקורסיה הדדיתeven קוראת לעצמה odd, ו- oddדרך

קוראת לעצמה דרך even .

Page 40: בתרגול הקודם

מסתורית - 4דוגמה פונקציהמצא מה הפונקציה הבאה מחשבת:  

public static int mystery(int a, int b) {

int ans;

if (b == 0) {

ans = 0;

} else if (b % 2 == 0) {

ans = mystery(a+a, b/2);

} else {

ans = mystery(a+a, b/2) + a;

}

return ans;

}מבוא למדעי המחשב, בן גוריון 40

עם. a*bתשובה: להדגים mystery(4,10)ניתן

Page 41: בתרגול הקודם

: מחשבת הבאה הפונקציה מה מצא 

public static int mystery(int a, int b) {

int ans;

if (b == 0) {

ans = 1;

} else if (b % 2 == 0) {

ans = mystery(a*a, b/2);

} else {

ans = mystery(a*a, b/2) * a;

}

return ans;

}מבוא למדעי המחשב, בן גוריון 41

עם . abתשובה: להדגים mystery(2,5)ניתן

מסתורית- 4דוגמה פונקציה

Page 42: בתרגול הקודם

סיכום

, +length, charAt, substring, equalsמחרוזות: •בועות • מיוןרקורסיה•

הרכיבים: –עצירה • תנאיהעצירה • לתנאי יותר קרוב קלט עם רקורסיביות קריאות

) הבעייה) הקטנתלקבלת • הרקורסיביות הקריאות של התוצאות שילוב

התוצאה

–) ( , : אינדוקציה החישוב נכונות עצירה נכונות הוכחותהדדית – רקורסיה

מבוא למדעי המחשב, בן גוריון 43