java ב תונכתל אובמ 5 לוגרתipc162/wiki.files/ps5.pdfmagic squares – ליגרת...
TRANSCRIPT
JAVA-מבוא לתכנות ב5תרגול
מה בתרגול
מחרוזות•
מערכים דו ממדיים•
(Strings)מחרוזות
. מחרוזת היא רצף של תווים•
•immutable
על מנת ליצור ולטפל במחרוזות נשתמש במחלקה •String
מתודות שונות שמאפשרות Stringלמחלקה •
פעולות על מחרוזות
פעולות על מחרוזות
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+-שרשור מחרוזות
דוגמא
?מה יודפס•
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
מחרוזת בסדר הפוך–תרגיל
הדפסת מחרוזת בסדר הפוך•
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);
מחרוזת בסדר הפוך–תרגיל
פתרון•
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);
צופן קיסר-דוגמה
:סכמה של צופן כללי
בן גוריון, מבוא למדעי המחשב 8
צופן קיסר-דוגמה
,מפתחוקריאטקסטהמקבל,הצפנהאלגוריתםהוא(Cipher)צופן
.מוצפןטקסטומחזיר
, צופן קיסר מבוסס על רעיון החלפת האותיות של הטקסט הקריא•
האלפבית המשמש להצפנה מוסט : לשם יצירתו של הטקסט המוצפן
.מן האלפבית הרגיל' מקומות'מעגלית במספר קבוע של
.מספר מקומות ההסטה( = key)המפתח •
.לפי עדויות היסטוריות יוליוס קיסר עשה בשיטה זו שימוש נרחב•
בן גוריון, מבוא למדעי המחשב 9
צופן קיסר-דוגמה
... תתורגם BABYמקומות המילה3בהזזה של , למשל
.EDEBלמילה
בן גוריון, מבוא למדעי המחשב 10
ASCIIטבלת
בן גוריון, מבוא למדעי המחשב 11
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
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
צופן קיסר-דוגמה
? של צופן קיסר( decrypt)מהי פעולת פענוח : שאלה
כיצד ניתן לגלות את הטקסט הקריא מבלי -בהינתן טקסט מוצפן : שאלה
?לדעת את המפתח
בן גוריון, מבוא למדעי המחשב 14
צופן קיסר-דוגמה
? של צופן קיסר( decrypt)מהי פעולת פענוח : שאלה
.מלבד חיסור של מפתח ההזזה במקום חיבורו, בדומה להצפנה: תשובה
כיצד ניתן לגלות את הטקסט הקריא מבלי -בהינתן טקסט מוצפן : שאלה
?לדעת את המפתח
ולהשוות ( ?כמה כאלו יש)ניתן לנסות את כל ההסטות האפשריות : תשובה
.את התוצאה למילון
בן גוריון, מבוא למדעי המחשב 15
מערך דו ממדי
ניתן באותו אופן )מערך של מערכים חד ממדיים •
(לדבר על מערכים רב מימדיים
פנייה לאיברי המערך נעשית תוך שימוש בשני •
אינדקסים
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
דוגמא
הדפסת איברי המערך•
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();
}
(Deep copy)העתקת מערכים –תרגיל
bיועתק למערך aהשלימו את הקוד כך שמערך •
int[][] a = {{1,2,3,4},{2,5,1},{7,7,7,7},{1}};
int[][] b;
//Fill here the code
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]);
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: פלט
(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];
}
}
חיבור מטריצות–תרגיל
ומגדירה,4X4בגודלa,bמטריצות2המגדירהתוכניתכתבו
.המטריצותחיבורתהיהאשרcמטריצה
מתאימיםאיבריםשלהחיבורהינומטריצותחיבור:תזכורת
האיברעם'אבמטריצהi,j-הבמקוםהאיברכלומר)במטריצות
.('בבמטריצהi,j-הבמקום
:לדוגמא
22
מימדימערך דו –תרגילים
:פתרון
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
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");
}
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;
}
} המשך בשקף הבא
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");
}