java ב תונכתל אובמ 5 לוגרתipc162/wiki.files/ps5.pdfmagic squares – ליגרת...

26
מבוא לתכנות ב- JAVA תרגול5

Upload: others

Post on 15-Feb-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: JAVA ב תונכתל אובמ 5 לוגרתipc162/wiki.files/PS5.pdfMagic squares – ליגרת םירביאה םוכס הבשn*n לדוגב תיעוביר הצירטמ אוה םסק

JAVA-מבוא לתכנות ב5תרגול

Page 2: JAVA ב תונכתל אובמ 5 לוגרתipc162/wiki.files/PS5.pdfMagic squares – ליגרת םירביאה םוכס הבשn*n לדוגב תיעוביר הצירטמ אוה םסק

מה בתרגול

מחרוזות•

מערכים דו ממדיים•

Page 3: JAVA ב תונכתל אובמ 5 לוגרתipc162/wiki.files/PS5.pdfMagic squares – ליגרת םירביאה םוכס הבשn*n לדוגב תיעוביר הצירטמ אוה םסק

(Strings)מחרוזות

. מחרוזת היא רצף של תווים•

•immutable

על מנת ליצור ולטפל במחרוזות נשתמש במחלקה •String

מתודות שונות שמאפשרות Stringלמחלקה •

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

Page 4: JAVA ב תונכתל אובמ 5 לוגרתipc162/wiki.files/PS5.pdfMagic squares – ליגרת םירביאה םוכס הבשn*n לדוגב תיעוביר הצירטמ אוה םסק

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

String str = new String();

String str2 = new String("This is a sequence of chars");

String str3 = "abcd";

אתחול המחרוזת

:יצירת מחרוזת

:פעולות

•length()– מחזיר את אורך המחרוזת

•charAt(i)–מחזיר את התו במקום ה-i 0התו הראשון נמא באינדקס )במחרוזת

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

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

•equals(String other)– מחרוזות שוות2האם

•operator+-שרשור מחרוזות

Page 5: JAVA ב תונכתל אובמ 5 לוגרתipc162/wiki.files/PS5.pdfMagic squares – ליגרת םירביאה םוכס הבשn*n לדוגב תיעוביר הצירטמ אוה םסק

דוגמא

?מה יודפס•

String str = "";

for (char i='a' ; i <= 'z' ; i++){

str = str + i;

}

System.out.println(str.charAt(0));

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

System.out.println(str.substring(7, 10));

System.out.println(str);

.אa26hijabcdefghijklmnopqrstuvwxyz

שגיאה. ב

.גa27ghiabcdefghijklmnopqrstuvwxyz

Page 6: JAVA ב תונכתל אובמ 5 לוגרתipc162/wiki.files/PS5.pdfMagic squares – ליגרת םירביאה םוכס הבשn*n לדוגב תיעוביר הצירטמ אוה םסק

מחרוזת בסדר הפוך–תרגיל

הדפסת מחרוזת בסדר הפוך•

strתכיל את המחרוזת strRevהשלימו את הקוד כך שהמחרוזת . בסדר הפוך

strאם : לדוגמא = “Hello” אזיstrRev = “olleH”

Scanner sc = new Scanner(System.in);

String str = sc.next(); //read a string

String strRev ="";

//Fill here the code

System.out.println(strRev);

Page 7: JAVA ב תונכתל אובמ 5 לוגרתipc162/wiki.files/PS5.pdfMagic squares – ליגרת םירביאה םוכס הבשn*n לדוגב תיעוביר הצירטמ אוה םסק

מחרוזת בסדר הפוך–תרגיל

פתרון•

Scanner sc = new Scanner(System.in);

String str = sc.next(); //read a string

String strRev ="";

for (int i = str.length()-1; i >= 0; i--){

strRev += str.charAt(i);

}

System.out.println(strRev);

Page 8: JAVA ב תונכתל אובמ 5 לוגרתipc162/wiki.files/PS5.pdfMagic squares – ליגרת םירביאה םוכס הבשn*n לדוגב תיעוביר הצירטמ אוה םסק

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

:סכמה של צופן כללי

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

Page 9: JAVA ב תונכתל אובמ 5 לוגרתipc162/wiki.files/PS5.pdfMagic squares – ליגרת םירביאה םוכס הבשn*n לדוגב תיעוביר הצירטמ אוה םסק

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

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

.מוצפןטקסטומחזיר

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

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

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

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

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

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

Page 10: JAVA ב תונכתל אובמ 5 לוגרתipc162/wiki.files/PS5.pdfMagic squares – ליגרת םירביאה םוכס הבשn*n לדוגב תיעוביר הצירטמ אוה םסק

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

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

.EDEBלמילה

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

Page 11: JAVA ב תונכתל אובמ 5 לוגרתipc162/wiki.files/PS5.pdfMagic squares – ליגרת םירביאה םוכס הבשn*n לדוגב תיעוביר הצירטמ אוה םסק

ASCIIטבלת

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

Page 12: JAVA ב תונכתל אובמ 5 לוגרתipc162/wiki.files/PS5.pdfMagic squares – ליגרת םירביאה םוכס הבשn*n לדוגב תיעוביר הצירטמ אוה םסק

public static void main(String[] args) {

String str = "BEN GURION UNIVERSITY";

int key = 3;

String ans = "";

final int ALPHABET_SIZE = 26;

for (int i = 0; i < str.length(); i++) {

char c = str.charAt(i);

if (c >= 'A' && c <= 'Z') {

//???

}

ans = ans + c;

}

System.out.println(ans);

}

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

Page 13: JAVA ב תונכתל אובמ 5 לוגרתipc162/wiki.files/PS5.pdfMagic squares – ליגרת םירביאה םוכס הבשn*n לדוגב תיעוביר הצירטמ אוה םסק

public static void main(String[] args) {

String str = "BEN GURION UNIVERSITY";

int key = 3;

String ans = "";

final int ALPHABET_SIZE = 26;

for (int i = 0; i < str.length(); i++) {

char c = str.charAt(i);

if (c >= 'A' && c <= 'Z') {

int num = c - 'A';

num = (num + key) % ALPHABET_SIZE;

c = (char) (num + 'A');

}

ans = ans + c;

}

System.out.println(ans);

}

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

Page 14: JAVA ב תונכתל אובמ 5 לוגרתipc162/wiki.files/PS5.pdfMagic squares – ליגרת םירביאה םוכס הבשn*n לדוגב תיעוביר הצירטמ אוה םסק

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

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

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

?לדעת את המפתח

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

Page 15: JAVA ב תונכתל אובמ 5 לוגרתipc162/wiki.files/PS5.pdfMagic squares – ליגרת םירביאה םוכס הבשn*n לדוגב תיעוביר הצירטמ אוה םסק

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

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

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

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

?לדעת את המפתח

ולהשוות ( ?כמה כאלו יש)ניתן לנסות את כל ההסטות האפשריות : תשובה

.את התוצאה למילון

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

Page 16: JAVA ב תונכתל אובמ 5 לוגרתipc162/wiki.files/PS5.pdfMagic squares – ליגרת םירביאה םוכס הבשn*n לדוגב תיעוביר הצירטמ אוה םסק

מערך דו ממדי

ניתן באותו אופן )מערך של מערכים חד ממדיים •

(לדבר על מערכים רב מימדיים

פנייה לאיברי המערך נעשית תוך שימוש בשני •

אינדקסים

int[][] a = new int[3][4]; int[][] arr =

{{1,0},{1,2,3},{1,4,5,7}};

1 0

1 2 3

1 4 5 7

Page 17: JAVA ב תונכתל אובמ 5 לוגרתipc162/wiki.files/PS5.pdfMagic squares – ליגרת םירביאה םוכס הבשn*n לדוגב תיעוביר הצירטמ אוה םסק

דוגמא

הדפסת איברי המערך•

int[][] a = {{1,0},{1,2,3},{1,4,5,7},{7,9,13,14}};

for (int i = 0; i < a.length; i++){

for (int j = 0; j < a[i].length; j++){

System.out.print("["+ a[i][j] +"]");

}

System.out.println();

}

Page 18: JAVA ב תונכתל אובמ 5 לוגרתipc162/wiki.files/PS5.pdfMagic squares – ליגרת םירביאה םוכס הבשn*n לדוגב תיעוביר הצירטמ אוה םסק

(Deep copy)העתקת מערכים –תרגיל

bיועתק למערך aהשלימו את הקוד כך שמערך •

int[][] a = {{1,2,3,4},{2,5,1},{7,7,7,7},{1}};

int[][] b;

//Fill here the code

Page 19: JAVA ב תונכתל אובמ 5 לוגרתipc162/wiki.files/PS5.pdfMagic squares – ליגרת םירביאה םוכס הבשn*n לדוגב תיעוביר הצירטמ אוה םסק

Deep copy vs shallow copy

int[] a = {1,2,3,4};

int[] b = {2,5,1};

b = a;

a[0] = 777;

System.out.println(b[0]);

Page 20: JAVA ב תונכתל אובמ 5 לוגרתipc162/wiki.files/PS5.pdfMagic squares – ליגרת םירביאה םוכס הבשn*n לדוגב תיעוביר הצירטמ אוה םסק

Deep copy vs shallow copy

int[] a = {1,2,3,4};

int[] b = {2,5,1};

b = a;

a[0] = 777;

System.out.println(b[0]);

Source: http://stackoverflow.com/a/184780

777: פלט

Page 21: JAVA ב תונכתל אובמ 5 לוגרתipc162/wiki.files/PS5.pdfMagic squares – ליגרת םירביאה םוכס הבשn*n לדוגב תיעוביר הצירטמ אוה םסק

(Deep copy)העתקת מערכים –תרגיל

פתרון•

int[][] a = {{1,2,3,4},{2,5,1},{7,7,7,7},{1}};

int[][] b;

b = new int[a.length][];

for (int i = 0; i < a.length; i++){

b[i] = new int[a[i].length];

for (int j = 0; j < a[i].length; j++){

b[i][j] = a[i][j];

}

}

Page 22: JAVA ב תונכתל אובמ 5 לוגרתipc162/wiki.files/PS5.pdfMagic squares – ליגרת םירביאה םוכס הבשn*n לדוגב תיעוביר הצירטמ אוה םסק

חיבור מטריצות–תרגיל

ומגדירה,4X4בגודלa,bמטריצות2המגדירהתוכניתכתבו

.המטריצותחיבורתהיהאשרcמטריצה

מתאימיםאיבריםשלהחיבורהינומטריצותחיבור:תזכורת

האיברעם'אבמטריצהi,j-הבמקוםהאיברכלומר)במטריצות

.('בבמטריצהi,j-הבמקום

:לדוגמא

22

Page 23: JAVA ב תונכתל אובמ 5 לוגרתipc162/wiki.files/PS5.pdfMagic squares – ליגרת םירביאה םוכס הבשn*n לדוגב תיעוביר הצירטמ אוה םסק

מימדימערך דו –תרגילים

:פתרון

23

// Adds two matrices

public class Add{

public static void main(String[] args){

int[][] a ={{1,4,-2,3},{-1,2,5,3},{9,10,-94,12},{0,1,-5,3}};

int[][] b ={{2,-4,5, 3},{7,9,-7,6},{12,-5,3,6},{-4,2,1,12}};

int[][] c = new int[a.length][a[0].length];

for (int i = 0 ;i<a.length;i=i+1)

for (int j =0;j< a[i].length;j= j+1)

c[i][j] = a[i][j] + b[i][j];

} //main

} //class Add

Page 24: JAVA ב תונכתל אובמ 5 לוגרתipc162/wiki.files/PS5.pdfMagic squares – ליגרת םירביאה םוכס הבשn*n לדוגב תיעוביר הצירטמ אוה םסק

Magic squares–תרגיל

שבה סכום האיברים n*nריבוע קסם הוא מטריצה ריבועית בגודל •

כל איבר , בנוסף. הוא זהההראשיעמודה והאלכסון , בכל שורה. n*n…1מופיע בדיוק פעם אחת והוא מהתחום

הוא ריבוע matהשלימו את הקוד הבא כך שהתוכנית תוודא האם •

( n*n…1הם מהתחום mat-הניחו כי האיברים ב)קסם או לא

int n = …;

int[][] mat = …;

boolean isMagic = true;

//Fill here the code

if (isMagic){

System.out.println("Magic square!");

}

else{

System.out.println("Not a magic square");

}

Page 25: JAVA ב תונכתל אובמ 5 לוגרתipc162/wiki.files/PS5.pdfMagic squares – ליגרת םירביאה םוכס הבשn*n לדוגב תיעוביר הצירטמ אוה םסק

Magic squares–תרגיל

פתרון//compute the diagonal sum

for(int i=0; i < mat.length; i++){

sumDiagonal += mat[i][i];

}

int sumRow, sumCol;

int[] occ = new int[n*n];

// check sum condition for each row and column and count occurences

for (int i = 0; i < mat.length && isMagic; i++){

sumRow = 0;

sumCol = 0;

for(int j = 0; j < mat[i].length; j++){

occ[mat[i][j]-1]++;

sumRow += mat[i][j];

sumCol += mat[j][i];

}

if (sumRow != sumDiagonal || sumCol != sumDiagonal){

isMagic = false;

}

} המשך בשקף הבא

Page 26: JAVA ב תונכתל אובמ 5 לוגרתipc162/wiki.files/PS5.pdfMagic squares – ליגרת םירביאה םוכס הבשn*n לדוגב תיעוביר הצירטמ אוה םסק

Magic squares–תרגיל

// check that each i in [1,...,n] appears only once

for (int i = 0; i < n*n && isMagic; i++){

if (occ[i] != 1){

isMagic = false;

}

}

if (isMagic){

System.out.println("Magic square!");

}

else{

System.out.println("Not a magic square");

}