Download Array המחלקה

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
‫המחלקה ‪Array‬‬
‫מחלקות מוכנות‬
‫המחלקה ‪Array‬‬
‫משימה ‪ – 1‬חלק א'‬
‫;‪import java.util.Scanner‬‬
‫מחלקה מוכנה נוספת היא המחלקה ‪. Array‬‬
‫‪public class TestArray‬‬
‫• הגדירו פרויקט חדש‪ ,‬פתחו בו מחלקה‬
‫{‬
‫חדשה והקלידו בה את המחלקה הבאה‪:‬‬
‫)‪public static void main(String[] args‬‬
‫• הריצו את המחלקה וכתבו מה היא מבצעת‬
‫{‬
‫;‪int [ ] first‬‬
‫_____________________________‬
‫;]‪first = new int[6‬‬
‫_____________________________‬
‫;)‪kelet (first‬‬
‫;)‪pelet (first‬‬
‫_____________________________‬
‫}‬
‫) ‪private static void kelet ( int [ ] x‬‬
‫{‬
‫;)‪Scanner input = new Scanner(System.in‬‬
‫) ‪for (int i=0; i<6; i++‬‬
‫{‬
‫;) ‪System.out.println ("enter item "+ i‬‬
‫_____________________________‬
‫• ההוראה‪ int [ ] first; :‬מגדירה משתנה‬
‫בשם ___________ שיכול להכיל הפניה‬
‫לעצם מטיפוס מערך‪.‬‬
‫;)(‪x[ i ] = input.nextInt‬‬
‫מערך )‪ (array‬הוא עצם שמכיל מספר‬
‫}‬
‫}‬
‫נתונים מאותו סוג‪ .‬במקרה שלנו‪ ,‬הנתונים‬
‫שהמערך יכיל יהיו מטיפוס מספר שלם‪.‬‬
‫שימו לב‪ ,‬בשלב זה עדיין לא נקבע מספר‬
‫) ‪private static void pelet (int [ ] ar‬‬
‫{‬
‫;)" ‪System.out.println ("the numbers in the array:‬‬
‫) ‪for (int i=0; i<6; i++‬‬
‫הנתונים שהמערך יכיל!‬
‫• ההוראה ;]‪ first = new int[6‬יוצרת עצם‬
‫;) ] ‪System.out.println ("item number "+i+" is "+ar[ i‬‬
‫}‬
‫יחיד מטיפוס מערך שיכיל ‪ 6‬נתונים )כל‬
‫}‬
‫אחד מהם מטיפוס מספר שלם( ומציבה‬
‫הפניה לעצם הנוצר בתוך המשתנה ____________________‪.‬‬
‫• לכל נתון )איבר( במערך יש מספר סידורי המציין את מיקומו במערך‪ .‬המיקום של נתון )איבר( במערך‬
‫נקרא מציין )אינדקס(‪ .‬המציין של הנתון הראשון הוא תמיד המספר ‪ ,0‬המציין של הנתון השני הוא‬
‫המספר ‪ 1‬וכן הלאה‪ .‬לכן במערך שלנו המציינים הם המספרים __________________________‪.‬‬
‫• פנייה לאיבר במערך‪ ] :‬מציין האיבר [ שם המערך‬
‫למשל‪x[i] ,‬‬
‫• הגדרת מערך כפרמטר של פעולה‪:‬‬
‫בחתימה של הפעולה‪:‬‬
‫למשל‪private static void (int [ ] ar) ,‬‬
‫המערך(‬
‫) שם המערך ] [ טיפוס המערך‬
‫הפעולה ‪ kelet‬היא פעולה מקובלת ל_________________________________________________‬
‫הפעולה ‪ pelet‬היא פעולה מקובלת ל_________________________________________________‬
‫© כל הזכויות שמורות‪ ,‬ד"ר תמר פז‬
‫עמוד מספר ‪1‬‬
‫המחלקה ‪Array‬‬
‫מחלקות מוכנות‬
‫משימה ‪ – 1‬חלק ב'‬
‫כמו ביצירת העצמים האחרים‪ ,‬ניתן לאחד את הגדרת המשתנה עם יצירת העצם החדש והצבת ההפניה‬
‫אליו בתוך המשתנה‪ .‬מחקו כעת את שתי ההוראות המודגשות בתוך הפעולה הראשית )‪ (main‬וכתבו‬
‫במקומן הוראה אחת‪ . int [ ] first = new int [6]; :‬הוראה זו מגדירה את המשתנה ‪ , first‬יוצרת מערך‬
‫בעל ‪ 6‬איברים ומציבה הפניה אליו במשתנה _________________‪.‬‬
‫שימרו‪ ,‬הריצו ובדקו שהתקבל הפלט הרצוי‪.‬‬
‫משימה ‪ – 1‬חלק ג'‬
‫אורך המערך )מספר האיברים( יכול גם להיות משתנה‪ .‬הוסיפו לפעולה הוראות לקליטת אורך המערך‪,‬‬
‫ושנו את הגדרת המערך כך שיהיה מהאורך הנקלט‪ .‬הקפידו לשנות בהתאם גם את גבולות הלולאות‬
‫בפעולות ‪ kelet‬ו‪.pelet -‬‬
‫שימרו‪ ,‬הריצו ובדקו שהתקבל הפלט הרצוי‪.‬‬
‫מערך הוא עצם שמכיל מספר נתונים מאותו הסוג!‬
‫הוראה להגדרת משתנה שיכיל הפניה לעצם מטיפוס מערך‪ ; :‬שם המשתנה ] [ טיפוס נתונים‬
‫למשל‪int [ ] grades; ,‬‬
‫הפעלת הפעולה הבונה של עצם מטיפוס מערך היא כמו הפעלה של הפעולה הבונה של עצמים אחרים‪.‬‬
‫לכן‪ ,‬הוראה ליצירת עצם מטיפוס מערך והצבת הפניה אליו בתוך משתנה‪:‬‬
‫]אורך המערך [ טיפוס נתונים ‪ = new‬שם המשתנה‬
‫למשל‪grades = new int [10]; ,‬‬
‫כמו ביצירת העצמים האחרים‪ ,‬ניתן לאחד את הגדרת המשתנה עם יצירת העצם החדש והצבת‬
‫ההפניה אליו בתוך המשתנה‪:‬‬
‫]אורך המערך [ טיפוס נתונים ‪ = new‬שם המשתנה ] [ טיפוס נתונים‬
‫למשל‪int[ ] grades = new int[35]; ,‬‬
‫•‬
‫מספר האיברים שהמערך יכיל נקבע רק בעת הפעלת הפעולה הבונה‪.‬‬
‫•‬
‫לכל איבר במערך יש מספר סידורי המציין את מיקומו במערך‪ .‬המציין )אינדקס( של האיבר הראשון‬
‫הוא המספר ‪ 0‬והמציין של האיבר האחרון הוא )‪ -1‬מספר האיברים במערך(‬
‫•‬
‫גם המחלקה ‪ Array‬מיובאת באופן אוטומטי על‪-‬ידי סביבת העבודה ומוכרת בכל הפרויקטים‪.‬‬
‫עמוד מספר ‪2‬‬
‫© כל הזכויות שמורות‪ ,‬ד"ר תמר פז‬
Array ‫המחלקה‬
‫מחלקות מוכנות‬
'‫ חלק א‬- 2 ‫משימה‬
import java.util.Scanner;
‫ ציונים ופולטת‬5 ‫המחלקה הבאה קולטת‬
public class AboveAverage
.‫את מספר הציונים שגבוהים מהממוצע‬
{
public static void main(String[] args)
‫• המחלקה נמצאת בקובץ‬
{
‫ הריצו ובדקו‬,‫ פיתחו‬.aboveAverage
int [ ] grade = new int[5];
double ave;
.‫שהפלט מתאים לנתונים שהקלדתם‬
int big_ave;
‫• מערך הוא עצם שמכיל מספר‬
kelet (grade);
pelet (grade);
grade ‫ למשל‬.‫נתונים מאותו טיפוס‬
ave = average (grade);
‫הוא מערך שמכיל ______ נתונים‬
big_ave = big_from_num (grade,ave);
System.out.println (big_ave +" grades high from average");
}
private static void kelet ( int [ ] grade )
{
Scanner input = new Scanner(System.in);
for (int i=0; i<5; i++ )
‫ הוא‬ar ‫ הפרמטר‬: pelet ‫• בפעולה‬
.__________________ ‫מטיפוס‬
{
:‫• משמעות ההוראה‬
System.out.println ("enter grade "+ i );
grade[ i ] = input.nextInt();
}
}
private static void pelet (int [ ] ar )
{
System.out.println ("the grades are ");
. ______________ ‫מטיפוס‬
‫פניה לאיבר מספר‬
grade ‫ במערך‬i
‫הגדרת מערך‬
‫ כפרמטר‬ar
‫של הפעולה‬
:‫ היא‬grade [i]=input.nextInt();
_________ ‫קלוט ערך לאיבר מספר‬
__________________ ‫במערך‬
for (int i=0; i<5; i++ )
System.out.println (ar[ i ] );
}
'‫ חלק ב‬-2 ‫משימה‬
‫פניה לאיבר מספר‬
ar ‫ במערך‬i
private static double average (int [ ] a )
{
int sum = 0;
for (int i=0; i<5; i++ )
‫הוסיפו למחלקה את ההוראות הדרושות‬
‫כך שתפלוט גם את מספר הציונים‬
.55 -‫הנמוכים מ‬
.‫יש להוסיף פעולה חדשה‬
sum = sum + a [ i ] ;
return sum /5;
}
private static int big_from_num (int [ ] a, double num)
{
int count =0;
for (int i=0; i<5; i++ )
if (a [ i ]>num) count = count+1;
return count;
}
'‫ חלק ג‬- 2 ‫משימה‬
‫הוסיפו למחלקה את ההוראות הדרושות‬
‫כך שתפלוט את הממוצע ואת ההפרשים‬
:‫ עבור הקלט‬,‫ למשל‬.‫מהממוצע‬
:‫ הפלט יהיה‬, 100 90 80 88 92
The average is 90
The differences are: 10 0 10 2 2
.‫יש להוסיף פעולה חדשה‬
}
3 ‫עמוד מספר‬
‫ ד"ר תמר פז‬,‫© כל הזכויות שמורות‬
‫המחלקה ‪Array‬‬
‫מחלקות מוכנות‬
‫משימה ‪ – 3‬חלק א'‬
‫המחלקה הבאה מגדירה מערך שמכיל ‪6‬‬
‫;‪import java.util.Scanner‬‬
‫‪public class CharArray‬‬
‫תווים‪ ,‬מציבה תווים במערך ופולטת את‬
‫ערכי המערך‪.‬‬
‫{‬
‫;‪final static int N=6‬‬
‫הקלידו את המחלקה והריצו אותה‪.‬‬
‫• במחלקה מוגדר קבוע גלובלי בשם‪:‬‬
‫___________‪.‬‬
‫• איברים של מערך יכולים להיות‬
‫מכל טיפוס נתונים המוכר בשפה!‬
‫למשל‪ ,‬איברי המערך ‪ tavim‬הם‬
‫)‪public static void main(String[ ] args‬‬
‫{‬
‫;]‪char [ ] tavim = new char [N‬‬
‫;)‪put (tavim‬‬
‫;)‪pelet (tavim‬‬
‫}‬
‫) ‪private static void put ( char [ ] x‬‬
‫{‬
‫) ‪for (int i=0; i<N; i++‬‬
‫מטיפוס _________________‬
‫)‪if (i %2 == 0‬‬
‫;'‪x [i] = 'a‬‬
‫‪else‬‬
‫משימה ‪ – 3‬חלק ב'‬
‫שנו את הגדרת הקבוע כך‪:‬‬
‫;‪final static int N=8‬‬
‫הריצו את המחלקה וכתבו מה בוצע ___‬
‫;'‪x [i] = 'b‬‬
‫}‬
‫)‪private static void pelet (char [ ] tavim‬‬
‫{‬
‫;)"‪System.out.println ("the chars in array:‬‬
‫) ‪for (int i=0; i<N; i++‬‬
‫____________________________ ;) ] ‪System.out.println ("item number "+i+" is "+tavim[ i‬‬
‫}‬
‫____________________________‬
‫}‬
‫____________________________‬
‫אפשר להגדיר מערך שיש בו ‪ N‬איברים‪.‬‬
‫כאשר ‪ N‬הוא ________________‪.‬‬
‫במקרה כזה‪ ,‬המציינים הם המספרים‪:‬‬
‫______________________________‬
‫עמוד מספר ‪4‬‬
‫© כל הזכויות שמורות‪ ,‬ד"ר תמר פז‬
Array ‫המחלקה‬
‫מחלקות מוכנות‬
4 ‫משימה‬
import java.util.Scanner;
public class TestArray4
‫פיתחו מחלקה חדשה והקלידו בה את‬
.‫המחלקה הבאה‬
{
final static int NUM=6;
:‫ הריצו והשלימו‬,‫שימרו‬
public static void main(String[] args)
‫ גם‬,‫כמו בהעברת עצמים אחרים‬
{
Scanner input = new Scanner(System.in);
int [ ] first = new int[NUM];
System.out.println ("enter 6 numbers to first array");
for (int i=0;i<NUM; i++)
first[i]=input.nextInt();
assignment (first);
System.out.println ("in first");
for (int i=0;i<NUM;i++)
System.out.println ("item number " +i+" is " +first[i]);
‫ הפרמטר‬,‫בהעברת מערך כפרמטר‬
.‫המועבר הוא הפניה למערך‬
‫הפעולה מקבלת ממי שמזמן‬
‫אותה הפניה לעצם מטיפוס מערך‬
‫ולא את המערך עצמו! ובכל‬
‫ההתייחסויות לפרטר הפעולה‬
‫משתמשת במערך שההפניה אליו‬
.‫נמצאת בפרמטר‬
‫ לאחר הפעלת הפעולה‬,‫לכן‬
}
private static void assignment (int[ ] a1)
‫ הערכים של אברי‬,assignment
‫המערך הם הערכים שהוצבו בו‬
{
Scanner input = new Scanner(System.in);
assignment ‫בפעולה‬
for (int i=0;i<NUM; i++)
a1[i]=99;
System.out.println ("in a1");
for (int i=0;i<NUM;i++)
System.out.println ("item number " + i+" is " +a1[i]);
}
pelet ‫ הפעולה‬,‫מאותה סיבה‬
‫ מתייחסת למערך‬3 ‫במשימה‬
‫ידי הפעולה‬-‫שעודכן על‬
.___________________
}
‫ אנחנו‬,‫בהעברת עצם כפרמטר‬
‫מעבירים את ההפניה לעצם ולא‬
!‫את העצם עצמו‬
5 ‫עמוד מספר‬
‫ ד"ר תמר פז‬,‫© כל הזכויות שמורות‬
‫המחלקה ‪Array‬‬
‫מחלקות מוכנות‬
‫משימה ‪5‬‬
‫כתבו מחלקה שתגדיר מערך בעל ‪ 9‬איברים מטיפוס מספר שלם‪.‬‬
‫המחלקה תבצע את הפעולות הבאות‪:‬‬
‫א‪ .‬תציב את המספר ‪ 0‬בכל האיברים של המערך‪.‬‬
‫ב‪ .‬תציב את המספר ‪ 1‬בכל האיברים שהמציין שלהם הוא איזוגי‪.‬‬
‫ג‪ .‬תציב את המספר ‪ 2‬בכל האיברים שהמציין שלהם הוא זוגי‪.‬‬
‫ד‪ .‬תוסיף את המספר ‪ 3‬לכל האיברים שהמציין שלהם מתחלק ב – ‪. 3‬‬
‫ה‪ .‬תדפיס את המערך‪.‬‬
‫בסיום הרצת המחלקה‪,‬‬
‫• המספר ‪ 1‬נמצא באיברים הבאים‪__________________________ :‬‬
‫• המספר ‪ 4‬נמצא באיבר הבא‪_____________________________ :‬‬
‫• באיבר שהמציין שלו הוא ‪ 0‬נמצא המספר‪_____________________ :‬‬
‫• באיבר שהמציין שלו הוא ‪ 8‬נמצא המספר‪_____________________ :‬‬
‫משימה ‪ - 6‬חלק א'‬
‫כתבו מחלקה שקולטת מערך של ‪ 30‬תוים ותו נוסף ‪ .tav‬המחלקה תודיע כמה פעמים ‪ tav‬מופיע במערך‪.‬‬
‫תזכורת‪ :‬קלט של תו‪input.next().chatAt(0); :‬‬
‫משימה ‪ - 6‬חלק ב'‬
‫כתבו מחלקה שקולטת מערך של ‪ 30‬תוים ותו נוסף ‪ .tav‬המחלקה תודיע מהו המקום הראשון במערך בו‬
‫מופיע התו הנוסף ‪.tav‬‬
‫במקרה שהתו הנוסף אינו מופיע כלל במערך‪ ,‬על המחלקה להדפיס הודעה מתאימה‪.‬‬
‫כתבו פעמיים את הפעולה למציאת המקום הראשון ש‪ tav -‬מופיע במערך‪ .‬פעם אחת בעזרת לולאת מונה‬
‫)‪ ,(for‬ופעם נוספת בעזרת לולאת כל‪-‬עוד )‪.(while‬‬
‫משימה ‪ – 7‬חלק א'‬
‫כתבו פעולה ‪ shiftRight‬שתקבל שני מערכים ‪ num1‬ו‪ num2 -‬באורך ‪ .20‬המערך ‪ num1‬מכיל מספרים‬
‫שלמים‪ .‬הפעולה תמלא את המערך ‪ num2‬כך שאיבריו יהיו מוזזים מקום אחד ימינה ביחס למערך ‪num1‬‬
‫)בנוסף‪ ,‬האיבר האחרון יהפוך להיות ראשון(‪ .‬דוגמא‪:‬‬
‫‪57‬‬
‫‪3‬‬
‫‪6‬‬
‫‪12‬‬
‫‪ num2‬המערך ה"מוזז"‬
‫‪82‬‬
‫‪82‬‬
‫‪3‬‬
‫‪57‬‬
‫‪6‬‬
‫‪ num1‬המערך המקורי‬
‫• כתבו פעולה ראשית שתבנה שני מערכים‪ ,‬הפעולה תקלוט ‪ 20‬מספרים שלמים לאחד מהם‪ ,‬תזמן את‬
‫הפעולה ‪ ShiftRight‬עם שני המערכים ותפלוט את הערכים של שני המערכים‪.‬‬
‫עמוד מספר ‪6‬‬
‫© כל הזכויות שמורות‪ ,‬ד"ר תמר פז‬
‫המחלקה ‪Array‬‬
‫מחלקות מוכנות‬
‫משימה ‪ – 7‬חלק ב'‬
‫כתבו פעולה ‪ shiftLeft‬שתקבל מערך אחד באורך ‪ 20‬המכיל תווים‪ .‬הפעולה תזיז כל איבר מקום אחד שמאלה‬
‫ביחס למקומו המקורי )בנוסף‪ ,‬האיבר הראשון יהפוך להיות אחרון(‪ .‬דוגמא‪:‬‬
‫‪a‬‬
‫@‬
‫!‬
‫‪x‬‬
‫‪6‬‬
‫המערך ה"מוזז"‬
‫!‬
‫‪x‬‬
‫@‬
‫‪6‬‬
‫‪a‬‬
‫המערך המקורי‬
‫שימו לב‪ :‬הפעם יש לבצע את התזוזה שמאלה באותו המערך ולא להעתיק למערך אחר!‬
‫רמז‪ :‬יש להשתמש בהוראה‪a[ i ] = a[ i+1] :‬‬
‫• כתבו פעולה ראשית שתבנה מערך‪ ,‬תקלוט אליו ‪ 20‬תווים‪ ,‬תפלוט את הערכים של המערך‪ ,‬תזמן את‬
‫הפעולה ‪ ShiftLeft‬ותפלוט את הערכים של המערך לאחר ביצוע הפעולה‪.‬‬
‫משימה ‪ – 8‬חלק א'‬
‫פיתחו מחלקה חדשה והקלידו בה את המחלקה‬
‫הבאה‪.‬‬
‫שימרו‪ ,‬הריצו והשלימו‪:‬‬
‫בפעולה הראשית יש הצהרה על שני משתנים שיכילו‬
‫הפניה לעצם מטיפוס מערך‪ first :‬ו‪.__________ -‬‬
‫בכל מערך יש _______ איברים מטיפוס‬
‫___________________________________‪.‬‬
‫העברת מערך כפרמטר היא תמיד‬
‫העברה של הפניה למערך!‬
‫לכן הפעולה ‪ kelet‬מעדכנת בכל זימון‬
‫שלה איברים של מערך אחר‪ .‬כלומר‬
‫בזימון )‪ kelet (first‬היא מעדכנת את‬
‫האיברים של המערך ____________‬
‫ובזימון )‪ kelet (second‬היא מעדכנת‬
‫את האיברים של המערך _________‬
‫© כל הזכויות שמורות‪ ,‬ד"ר תמר פז‬
‫;‪import java.util.Scanner‬‬
‫‪public class TwoArrays‬‬
‫{‬
‫;‪final static int N=4‬‬
‫)‪public static void main(String[] args‬‬
‫{‬
‫;]‪int [ ] first = new int [N‬‬
‫;]‪int [ ] second = new int [N‬‬
‫;)"‪System.out.println ("input- first array‬‬
‫;)‪kelet (first‬‬
‫;)"‪System.out.println ("input- second array‬‬
‫;)‪kelet (second‬‬
‫;)"‪System.out.println ("output- first array‬‬
‫;)‪pelet (first‬‬
‫;)"‪System.out.println ("output- second array‬‬
‫;)‪pelet (second‬‬
‫}‬
‫)‪private static void kelet (int [ ] x‬‬
‫{‬
‫;)‪Scanner input = new Scanner(System.in‬‬
‫) ‪for (int i=0; i<N; i++‬‬
‫{‬
‫;) ‪System.out.println ("enter item "+ i‬‬
‫;)(‪x[i]=input.nextInt‬‬
‫}‬
‫}‬
‫)‪private static void pelet (int [ ] ar‬‬
‫{‬
‫;)" ‪System.out.print ("the numbers in array:‬‬
‫) ‪for (int i=0; i<N; i++‬‬
‫;) ] ‪System.out.print (" "+ ar[ i‬‬
‫;)" "( ‪System.out.println‬‬
‫}‬
‫עמוד מספר ‪7‬‬
‫}‬
Array ‫המחלקה‬
‫מחלקות מוכנות‬
'‫ – חלק ב‬8 ‫משימה‬
.‫הוסיפו למחלקה את ההוראות הדרושות כך שיודפס גם הערך הגבוה ביותר בכל אחד מהמערכים‬
.‫ יש לכתוב תחילה פעולה שמקבלת מערך ומחזירה את הערך הגדול ביותר במערך‬:‫הדרכה‬
'‫ – חלק ג‬8 ‫משימה‬
import java.util.Scanner;
public class TwoArrays
{
final static int N=4;
public static void main(String[] args)
second ‫נשנה כעת את המחלקה כך שהמערך‬
.2*N ‫יהיו מגודל‬
,‫לשם כך‬
.‫ שנו את המחלקה בהתאם למחלקה הבאה‬.‫א‬
‫ שנו בהתאם גם את החלקים שהוספתם‬.‫ב‬
{
int [ ] first = new int [N];
.‫בסעיף הקודם‬
int [ ] second = new int [N*2];
System.out.println ("input- first array");
:‫הריצו את המחלקה והשלימו‬
kelet (first , N);
System.out.println ("input- second array");
kelet (second , N*2);
second -‫ ו‬first ‫מספר האיברים במערכים‬
‫אינו שווה ובכל זאת השתמשנו באותן‬
System.out.println ("output- first array");
pelet (first , N);
System.out.println ("output- second array");
pelet (second , N*2);
}
private static void kelet (int [ ] x , int num)
{
Scanner input = new Scanner(System.in);
for (int i=0; i<num; i++ )
{
System.out.println ("enter item "+ i );
‫( כדי לעבור על כל‬kelet, pelet) ‫פעולות‬
!!‫האיברים של שני המערכים‬
:‫מסקנה‬
‫אפשר להעביר לפעולה מערכים ששונים זה‬
_________________________ ‫מזה ב‬
.‫ושווים בטיפוס של האיברים‬
x[i]=input.nextInt();
}
}
private static void pelet (int [ ] ar , int num)
{
System.out.println ("the numbers in array: ");
for (int i=0; i<num; i++ )
System.out.print (" "+ ar[ i ] );
System.out.println (" ");
}
}
‫ ד"ר תמר פז‬,‫© כל הזכויות שמורות‬
8 ‫עמוד מספר‬
‫מחלקות מוכנות‬
‫המחלקה ‪Array‬‬
‫משימה ‪ – 9‬חלק א'‬
‫חמישה תלמידים קופצים למרחק בתחרות גמר‪ .‬כל תלמיד קופץ ‪ 4‬קפיצות‪.‬‬
‫כתבו מחלקה שקולטת את ‪ 4‬התוצאות של כל אחד מהתלמידים‪ .‬המחלקה תדפיס את ממוצע הקפיצות‬
‫של כל תלמיד וכן את מספר התלמיד )‪ (0-4‬שהשיג את הממוצע הגבוה ביותר‪.‬‬
‫רמז‪ :‬צריך לבנות מערך שיכיל את חמשת הממוצעים‪.‬‬
‫משימה ‪ – 9‬חלק ב'‬
‫הוסיפו למחלקה את ההוראות הדרושות כך שתקלוט גם את השמות של התלמידים‪ ,‬ובמקום לפלוט את‬
‫מספר התלמיד שהשיג את הממוצע הגבוה ביותר‪ ,‬הפעולה תפלוט את שמו‪.‬‬
‫רמז‪ :‬צריך לבנות מערך נוסף שיכיל את חמשת השמות‪String [] names = new String [5]; .‬‬
‫איברים של מערך יכולים גם להכיל הפניה לעצם מטיפוס מחרוזת‬
‫משימה ‪ – 10‬חלק א'‬
‫המטרה‪ :‬כתיבת מחלקה שקולטת תוצאות של ‪ 14‬משחקי הכדורגל שנערכו בשבוע מסוים )התוצאות‬
‫יכולות להיות ‪ 1‬או ‪ 2‬או ‪ ,( x‬וכן את טופס הניחושים שמילא מנחש בטוטו‪ .‬המחלקה תבדוק כמה ניחושים‬
‫היו נכונים ותדפיס אחת מבין ‪ 3‬ההודעות הבאות‪ :‬הצלחת בכל )במקרה של ‪ 14‬ניחושים נכונים(‪ ,‬כמעט‬
‫מוצלח )במקרה של ‪ 12-13‬ניחושים נכונים(‪ ,‬לא הצלחת )במקרה של ‪ 11‬ניחושים או פחות(‪.‬‬
‫הנחיות‪:‬‬
‫א‪ .‬הגדירו שני משתנים שתהיה בהם הפניה למערך שמכיל ‪ 14‬תווים )אחד לקליטת הטופס הנכון ואחד‬
‫לקליטת הטופס שמילא המנחש(‪.‬‬
‫ב‪ .‬הגדירו פעולה לקליטת ‪ 14‬נתונים למערך‪.‬‬
‫ג‪ .‬הגדירו פעולה לבדיקת מספר הניחושים הנכונים‪.‬‬
‫ד‪ .‬הגדירו פעולה להדפסת ההודעה המתאימה‪.‬‬
‫ה‪ .‬כתבו את הפעולה הראשית )‪.(main‬‬
‫משימה ‪ – 10‬חלק ב'‬
‫שנו את המחלקה מהסעיף הקודם כך שתתבצע עבור מספר מנחשים‪ .‬לאחר שתדפיס הודעה מתאימה‬
‫עבור מנחש יחיד‪ ,‬המחלקה תשאל את המשתמש אם ברצונו להמשיך‪ .‬במקרה של תשובה חיובית‪ ,‬יקלט‬
‫טופס הניחושים של מנחש חדש ותודפס ההודעה המתאימה‪ .‬התהליך יפסק כאשר המשתמש יענה כי אינו‬
‫רוצה להמשיך‪.‬‬
‫שימו לב‪ ,‬אין צורך לקלוט את התוצאות הנכונות עבור כל מנחש‪.‬‬
‫© כל הזכויות שמורות‪ ,‬ד"ר תמר פז‬
‫עמוד מספר ‪9‬‬
Array ‫המחלקה‬
import java.util.Scanner;
public class TwoArrays
{
final static int N=6;
public static void main(String[] args)
{
int [ ] a = new int [N];
int [ ] b = new int [N];
int [ ] c = new int [N];
int count;
kelet (a);
kelet (b);
count = new_array (a,b,c);
pelet (c,count);
}
public static void kelet (int [ ] ar)
{
Scanner input = new Scanner(System.in);
for (int i=0; i<N; i++ )
{
System.out.println ("enter item "+ i );
____________________________________;
}
}
public static void pelet (int [ ] ar, int count )
{
System.out.print ("the numbers in array: ");
for (int i=0; i<count; i++ )
System.out.print (" "+ ar[ i ] );
System.out.println (" ");
}
public static int new_array (int [ ] a, int [ ] b, int [ ] c)
{
int count = 0;
for (int i= 0; i<N; i++)
for (int j= 0; j<___________; j++)
if (a[i] == b[j] ) {
c[count] = a[i];
count ____________;
}
return count;
}
‫מחלקות מוכנות‬
'‫ – חלק א‬11 ‫משימה‬
‫לפניכם שלד של מחלקה שקולטת ערכים‬
c ‫ ובונה מערך חדש‬,b -‫ ו‬a ‫לשני מערכים‬
‫ מכיל‬,‫ כלומר‬. b -‫ ו‬a ‫שהוא מערך החיתוך של‬
.b -‫ וגם ב‬a -‫את כל הערכים שמופיעים גם ב‬
‫ לא יופיע אותו‬,‫ בכל אחד מהמערכים‬:‫הנחה‬
.‫ערך יותר מפעם אחת‬
.‫ הקלידו והריצו‬,‫• השלימו‬
‫• הסבירו מה התפקיד של המשתנה‬
______________________ ?count
____________________________
____________________________
___________________________
‫ הוא‬count ‫• אם בסיום המחלקה הערך של‬
______________________ ‫ סימן ש‬3
_____________________________
‫ הוא‬count ‫• אם בסיום המחלקה הערך של‬
______________________ ‫ סימן ש‬0
_____________________________
‫• הסבירו מה התפקיד של הלולאה המקוננת‬
?new_array ‫בתוך הפעולה‬
____________________________
____________________________
____________________________
'‫ חלק ב‬- 11 ‫משימה‬
‫ יהיה מערך‬c ‫שנו את המחלקה כך שהמערך‬
‫ כלומר יכיל גם את‬.b -‫ ו‬a ‫האיחוד של‬
‫ וגם את הערכים‬a -‫הערכים שמופיעים ב‬
,‫ ערך שמופיע בשני המערכים‬.b -‫שמופיעים ב‬
.‫ רק פעם אחת‬c ‫יופיע ב‬
}
‫ ד"ר תמר פז‬,‫© כל הזכויות שמורות‬
10 ‫עמוד מספר‬
‫המחלקה ‪Array‬‬
‫מחלקות מוכנות‬
‫משימה ‪12‬‬
‫כתבו מחלקה שמבצעת את הפעולות הבאות‪:‬‬
‫א‪ .‬מגדירה שני מערכים באורך ‪ 7‬שמכילים מספרים שלמים‪.‬‬
‫ב‪ .‬מציבה בכל אחד מהאיברים של כל אחד מהמערכים מספרים אקראיים בתחום ‪.10-20‬‬
‫ג‪ .‬מודיעה עבור כל אחד מהאיברים של המערך הראשון‪ ,‬כמה פעמים הוא מופיע במערך השני‪.‬‬
‫הדרכה‪ :‬כיתבו תחילה פעולה שמקבלת מערך באורך ‪ 7‬ומספר נוסף ומחזירה את מספר הפעמים‬
‫שהמספר הנוסף מופיע במערך‪.‬‬
‫משימה ‪13‬‬
‫כתבו מחלקה שתגריל ‪ 50‬מספרים שלמים בתחום שבין ‪ 0‬לבין ‪ .10‬המחלקה תחשב ותפלוט את מספר‬
‫הפעמים שהוגרל כל מספר‪.‬‬
‫הערה‪ :‬יש להשתמש במערך של מונים‪.‬‬
‫משימה ‪14‬‬
‫מבוסס על משימה של ויקי סכניני‬
‫במדינת "הכל אפשרי" רשומות ‪ 10‬מפלגות ממוספרות ‪.9...0‬‬
‫כתבו מחלקה שקולטת עבור כל מפלגה את מספר החברים שלה בבית הנבחרים‪ .‬המחלקה תדפיס את‬
‫מספר המפלגה שיש לה מספר גדול ביותר של חברים בבית הנבחרים )במידה ויש יותר ממפלגה אחת כזו‪,‬‬
‫יש להדפיס את כולן(‪ .‬למשל‪,‬‬
‫אם מספרי החברים בבית הנבחרים הם )משמאל לימין(‪2 20 33 12 5 10 10 17 12 28 :‬‬
‫אזי המחלקה תודיע כי למפלגה מספר ‪ 2‬יש מספר גדול ביותר של חברים בבית הנבחרים‪.‬‬
‫ואם מספרי החברים בבית הנבחרים הם )משמאל לימין(‪2 20 30 12 5 10 10 18 12 30 :‬‬
‫אזי המחלקה תודיע כי למפלגות מספר ‪ 2‬ו‪ 9 -‬יש מספר גדול ביותר של חברים בבית הנבחרים‪.‬‬
‫הערות‪:‬‬
‫א‪ .‬הקלט תקין‪.‬‬
‫ב‪ .‬יש להשתמש לפחות בשתי פעולות בנוסף לפעולה הראשית‪.‬‬
‫משימה ‪15‬‬
‫מבוסס על בחינת בגרות‬
‫מערך יקרא מערך "יפה" אם איבריו הם רצף של שלושה מספרים החוזרים על עצמם )יתכן כי לא מספר‬
‫שלם של פעמים(‪ .‬למשל‪ ,‬המערך הבא הוא מערך "יפה"‪:‬‬
‫‪5 7‬‬
‫‪8‬‬
‫‪7‬‬
‫‪5‬‬
‫‪8‬‬
‫‪7‬‬
‫‪5‬‬
‫‪8‬‬
‫‪7‬‬
‫‪5‬‬
‫כתבו פעולה ראשית שתקלוט איברים למערך חד מימדי באורך‬
‫‪ N‬ותפלוט הודעה האם המערך הוא מערך "יפה" או שאינו "יפה"‪ N .‬הוא קבוע שיוגדר בתחילת המחלקה‪.‬‬
‫כתבו תחילה פעולה משנית שתקבל הפניה למערך‪ ,‬תחזיר ‪ true‬אם המערך הוא "יפה"‪ ,‬ותחזיר ‪false‬‬
‫אחרת‪.‬‬
‫© כל הזכויות שמורות‪ ,‬ד"ר תמר פז‬
‫עמוד מספר ‪11‬‬
‫המחלקה ‪Array‬‬
‫מחלקות מוכנות‬
‫מערך שכל איבר בו מכיל הפניה לעצם‬
‫משימה ‪ – 16‬חלק א'‬
‫;‪import java.util.Scanner‬‬
‫לפניכם המחלקה ‪.HighJump‬‬
‫‪public class HighJump‬‬
‫• לכל עצם מהמחלקה ‪ HighJump‬יש שתי‬
‫{‬
‫‪// The attributes of the class‬‬
‫תכונות‪ name :‬ו ________________‪.‬‬
‫;‪private String name‬‬
‫• על עצם מטיפוס ‪ HighJump‬ניתן לבצע ‪4‬‬
‫;‪private double high‬‬
‫פעולות‪:‬‬
‫;)‪Scanner input = new Scanner(System.in‬‬
‫‪ .1‬פעולה בונה שיוצרת עצם מטיפוס‬
‫‪ . HighJump‬הפעולה כן ‪ /‬לא )מחקו‬
‫‪// A constructor for the class‬‬
‫את המיותר( מקבלת פרמטר‪.‬‬
‫) ( ‪public HighJump‬‬
‫{‬
‫הפעולה מבצעת‪:‬‬
‫‬
‫;)"‪System.out.println ("enter student name‬‬
‫קולטת מהמשתמש שם של תלמיד‬
‫;)(‪this.name = input.next‬‬
‫ומכניסה אותו לתכונה _________‪,‬‬
‫‬
‫;)(‪this.high = averageHigh‬‬
‫קולטת מהמשתמש ארבע תוצאות של‬
‫}‬
‫קפיצה למרחק שהתלמיד קפץ‬
‫‪// Methods:‬‬
‫)באמצעות הפעולה ‪(averageHigh‬‬
‫)(‪public String getName‬‬
‫ומכניסה לתכונה _______________‬
‫{‬
‫;‪return this.name‬‬
‫את הערך הממוצע שלהן‪.‬‬
‫}‬
‫למשל עבור הקלט‪:‬‬
‫)(‪public double getAverageHigh‬‬
‫‪ hagar 1.35 2.00 1.54 1.63‬הפעולה‬
‫{‬
‫תכניס לתכונה ‪ name‬את הערך ‪, hagar‬‬
‫;‪return this.high‬‬
‫}‬
‫ולתכונה ‪ high‬היא תכניס את הערך ‪1.63‬‬
‫)( ‪private double averageHigh‬‬
‫)שהוא הממוצע של ‪ 4‬הקפיצות של הגר(‪.‬‬
‫{‬
‫‪ .2‬פעולה ‪ getName‬שלא מקבלת אף‬
‫;‪double sum =0‬‬
‫פרמטר ומחזירה את הערך של התכונה‬
‫)‪for (int i=1; i<=4; i++‬‬
‫______________‪.‬‬
‫‪ .3‬פעולה ‪ getAverageHigh‬שלא מקבלת‬
‫{‬
‫;)‪System.out.println ("enter result number " + i‬‬
‫אף פרמטר ומחזירה את ____________‬
‫_____________________________‪.‬‬
‫‪ .4‬פעולה ‪ averageHigh‬שתפקידה ______‬
‫;)(‪sum = sum + input.nextDouble‬‬
‫}‬
‫;)‪return (sum/4‬‬
‫‪} // end of class‬‬
‫______________________________‬
‫______________________________‪.‬‬
‫‪ averageHigh‬היא פעולה בעלת הרשאה פרטית‪.‬‬
‫זו פעולה פנימית של המחלקה ‪ HighJump‬שאיננו רוצים לאפשר למשתמש להפעיל אותה‪.‬‬
‫עמוד מספר ‪12‬‬
‫© כל הזכויות שמורות‪ ,‬ד"ר תמר פז‬
‫המחלקה ‪Array‬‬
‫מחלקות מוכנות‬
‫• פתחו פרויקט חדש )‪ --- Next> --- Finish‬הקלדת שם הפרויקט ‪(File ---New --- Project.. --- Next ---‬‬
‫• בפרויקט החדש‪ ,‬פתחו מחלקה חדשה בשם ‪ HighJump‬והקלידו בה את המחלקה‪.‬‬
‫בשלב זה‪ ,‬אפשר לתקן שגיאות תחביר אבל עוד אי אפשר לבדוק את המחלקה שכתבתם‪.‬‬
‫משימה ‪ – 16‬חלק ב'‬
‫האיברים של המערכים שהגדרנו עד כה הכילו טיפוסי נתונים שמוגדרים בשפה )למשל‪ ,‬מספר שלם ומספר‬
‫ממשי(‪ .‬באותו אופן‪ ,‬ניתן להגדיר מערך שכל אחד מאיבריו יכיל הפניה לעצם! למשל‪ ,‬ההוראה הבאה‪:‬‬
‫;]‪ HighJump [] student = new HighJump [5‬מגדירה משתנה בשם __________________‬
‫שיכיל הפניה לעצם מטיפוס מערך בעל ________________ איברים‪ .‬כל אחד מהאיברים יכיל הפניה‬
‫לעצם מטיפוס ‪. HighJump‬‬
‫במשימה ‪ 9‬ב' כתבנו מחלקה שקולטת עבור כל אחד מחמישה תלמידים את שמו וארבע תוצאות של‬
‫קפיצה למרחק‪ .‬המחלקה פלטה את השם של התלמיד שהשיג את ממוצע הקפיצות הגבוה ביותר‪ .‬למשל‪,‬‬
‫עבור הקלט‪hagar 1.35 2.00 1.54 1.63 :‬‬
‫‪ron 2.01 1.88 1.65 1.70‬‬
‫‪amit 1.99 2.02 1.44 1.55‬‬
‫‪dan 1.88 1.77 1.67 1.99‬‬
‫‪uri 1.44 1.88 1.76 1.65‬‬
‫המחלקה פלטה כי ‪ dan‬השיג את הממוצע הגבוה ביותר‪.‬‬
‫לפתרון המשימה הגדרנו שני מערכים‪ .‬מערך אחד בו שמרנו את השמות של התלמידים‪ ,‬ומערך נוסף בו‬
‫שמרנו את חמשת הממוצעים‪.‬‬
‫נפתור כעת את אותה המשימה אבל הפעם נשתמש במערך יחיד‪ .‬כל איבר במערך יכיל הפניה לעצם שיהיו‬
‫לו שתי תכונות‪ :‬שם של תלמיד וממוצע הקפיצות‪ .‬למשל‪ ,‬עבור הדוגמה לעיל‪ ,‬האיבר הראשון יכיל הפניה‬
‫לעצם שהתכונה שם שלו תהיה ‪ hagar‬והתכונה גובה ממוצע תהיה ‪ .1.63‬האיבר השני יכיל הפניה לעצם‬
‫שהתכונה שם שלו תהיה ‪ ron‬והתכונה גובה ממוצע תהיה ‪ 1.81‬וכן הלאה‪ .‬כלומר‪ ,‬כל איבר במערך יכיל‬
‫הפניה לעצם מטיפוס _______________________‪.‬‬
‫בעמוד הבא מופיע שלד של המחלקה הראשית לפתרון הבעיה‪.‬‬
‫• השלימו את המחלקה‪.‬‬
‫• בפרויקט בו הגדרתם את המחלקה ‪,HighJump‬‬
‫] [ ‪HighJump‬‬
‫פתחו מחלקה חדשה בשם ‪ StudentJump‬והקלידו‬
‫‪4‬‬
‫‪2‬‬
‫‪3‬‬
‫‪1‬‬
‫‪0‬‬
‫בה את המחלקה שהשלמתם‪.‬‬
‫• שימרו הריצו ובדקו כי התקבל הפלט הרצוי‪.‬‬
‫‪HighJump‬‬
‫‪HighJump‬‬
‫‪HighJump‬‬
‫‪HighJump‬‬
‫‪HighJump‬‬
‫‪high‬‬
‫‪name‬‬
‫‪high‬‬
‫‪name‬‬
‫‪high‬‬
‫‪name‬‬
‫‪high‬‬
‫‪name‬‬
‫‪high‬‬
‫‪1.68‬‬
‫‪uri‬‬
‫‪1.83‬‬
‫‪dan‬‬
‫‪1.75‬‬
‫‪amit‬‬
‫‪1.81‬‬
‫‪ron‬‬
‫‪1.63‬‬
‫© כל הזכויות שמורות‪ ,‬ד"ר תמר פז‬
‫‪name‬‬
‫עמוד מספר ‪13‬‬
‫‪hagar‬‬
‫המחלקה ‪Array‬‬
‫מחלקות מוכנות‬
‫‪public class StudenJump‬‬
‫{‬
‫)‪public static void main(String[ ] args‬‬
‫הפעלת הפעולה הבונה לבניית‬
‫עצם מטיפוס מערך בעל ‪ 5‬איברים‬
‫{‬
‫שכל אחד מהם יכיל הפניה לעצם‬
‫;]‪HighJump [ ] student = new HighJump [5‬‬
‫מטיפוס ‪HighJump‬‬
‫;)‪kelet (student‬‬
‫;)‪int numHigh = highest (student‬‬
‫;)"‪System.out.println (student[numHigh].getName() + " achieved the highest average‬‬
‫}‬
‫)‪public static _____________ kelet (HighJump [ ] ar‬‬
‫{‬
‫הפעלת הפעולה הבונה לבניית עצם מטיפוס‬
‫) ‪for (int i=0; i<5; i++‬‬
‫‪ HighJump‬והצבת הפניה לעצם בתא מספר ‪i‬‬
‫;)( ‪ar[i] = new HighJump‬‬
‫במערך‪.‬‬
‫}‬
‫)‪public static int highest (HighJump [ ] ar‬‬
‫פעולה שמקבלת את המערך ומחזירה את המיקום של בעל הקפיצה הממוצעת הגבוהה ביותר ‪{ //‬‬
‫;‪int numHigh = 0‬‬
‫) ‪for (int i=1; i<________________; i++‬‬
‫) )(‪if (ar[i]. getAverageHigh() > ar[numHigh]. getAverageHigh‬‬
‫;‪numHigh= i‬‬
‫;______________________ ‪return‬‬
‫}‬
‫‪} // end of class‬‬
‫השלימו‪:‬‬
‫• הפעולה ‪ kelet‬דואגת לבנות ‪ 5‬עצמים מטיפוס __________________ ולהציב הפניות אליהם‬
‫בתאים של המערך‪.‬‬
‫•‬
‫בלולאה שבפעולה ‪ ,highest‬הערך ההתחלתי של מונה הלולאה )‪ (i‬הוא ‪ 1‬ולא ‪ 0‬משום ש_______‬
‫___________________________________________________________________‬
‫__________________________________________________________________‪.‬‬
‫•‬
‫משמעות הביטוי‪ ar[numHigh]. getAverageHigh() :‬היא הפעלת הפעולה ‪ getAverageHigh‬על‬
‫העצם שנמצא בתא מספר ‪ numHigh‬במערך __________________‪.‬‬
‫•‬
‫בהוראת התנאי‪ if (ar[i]getAverageHigh() > ar[numHigh]. getAverageHigh()) :‬בודקים אם‬
‫הגובה הממוצע של העצם שנמצא בתא מספר ________ גדול מהגובה הממוצע של העצם שנמצא‬
‫בתא מספר ‪. numHigh‬‬
‫•‬
‫הפעלה של פעולה הפועלת על עצם‪) :‬פרמטרים( שם הפעולה‪.‬משתנה שמכיל הפניה לעצם‬
‫במקרה של מערך‪ ,‬ההפניה לעצם נמצאת בתא של המערך!‬
‫‪.‬‬
‫לכן‪ ,‬הפעלה של פעולה‪) :‬פרמטרים( פעולה ]מספר תא[ שם המערך‬
‫עמוד מספר ‪14‬‬
‫© כל הזכויות שמורות‪ ,‬ד"ר תמר פז‬
‫המחלקה ‪Array‬‬
‫מחלקות מוכנות‬
‫איברים של מערך יכולים להכיל הפניה לעצם!‬
‫• הגדרת עצם מטיפוס מערך‪ ,‬יצירת העצם והצבת ההפניה אליו בתוך משתנה‪:‬‬
‫]אורך המערך [ טיפוס נתונים ‪ = new‬שם המשתנה ] [ טיפוס נתונים‬
‫כאשר האיברים של המערך יכילו הפניה לעצם‪ ,‬טיפוס הנתונים הוא המחלקה‪ .‬למשל‪ ,‬ההוראה‬
‫]‪ HighJump [ ] student = new HighJump [5‬מגדירה משתנה בשם ‪ student‬שיכיל הפניה‬
‫לעצם מטיפוס מערך בעל ‪ 5‬איברים‪ .‬כל אחד מהאיברים יכיל הפניה לעצם מטיפוס ‪. HighJump‬‬
‫• ההוראה ]‪ HighJump [ ] student = new HighJump [5‬מפעילה את הפעולה הבונה של המערך‪.‬‬
‫בשלב זו עוד לא נבנו העצמים מטיפוס ‪!! HighJump‬‬
‫• ההוראה ;)( ‪ ar[i] = new HighJump‬מפעילה את הפעולה הבונה של ‪ .HighJump‬ההוראה בונה‬
‫עצם יחיד מטיפוס ‪ HighJump‬ומציבה הפניה אליו בתא מספר _____________במערך‪.‬‬
‫‪.‬‬
‫• הגישה לעצמים היא באמצעות תאי המערך‪) :‬פרמטרים( פעולה ]מספר תא[ שם המערך‬
‫משימה ‪ – 17‬חלק א'‬
‫במשרד הפנים שומרים עבור כל אחד מתושבי המדינה את מספר תעודת הזהות שלו ואת שמו‪.‬‬
‫כתבו תכנית שתקלוט את האינפורמציה הזו עבור ‪ 20‬תושבים‪ ,‬לאחר מכן התכנית תקלוט זוגות של‬
‫נתונים‪ :‬מספר תעודת זהות ושם‪ .‬התכנית תדאג לשנות את השם של בעל תעודת הזהות לשם החדש‪.‬‬
‫קליטת הנתונים תפסק עם קליטת מספר תעודת זהות שלילי )אין לקלוט שם עבור מספר זה(‪.‬‬
‫לסיום‪ ,‬התכנית תפלוט את רשימת מספרי הזהות והשמות המעודכנים‪.‬‬
‫לצורך פתרון המשימה נגדיר שתי מחלקות‪ :‬מחלקה ‪ Citizen‬בה נשמור אינפורמציה עבור תושב יחיד‪.‬‬
‫ומחלקה עם פעולה ראשית‪.‬‬
‫האינפורמציה שצריכים לשמור עבור כל תושב היא‪ :‬מספר תעודת הזהות שלו ו ______________‪.‬‬
‫בעמוד הבא מופיע שלד של המחלקה ‪.Citizen‬‬
‫© כל הזכויות שמורות‪ ,‬ד"ר תמר פז‬
‫עמוד מספר ‪15‬‬
‫המחלקה ‪Array‬‬
‫מחלקות מוכנות‬
‫• השלימו את המחלקה‪.‬‬
‫;‪import java.util.Scanner‬‬
‫• השלימו‪:‬‬
‫‪public class Citizen‬‬
‫{‬
‫ הפעולה ‪ getId‬מחזירה את‬
‫;‪private int id‬‬
‫____________________‬
‫;‪private String name‬‬
‫____ של העצם הנוכחי‪.‬‬
‫;)‪Scanner input = new Scanner(System.in‬‬
‫ הפעולה ‪ setName‬מעדכנת‬
‫) ( ‪public Citizen‬‬
‫את השם של התושב הנוכחי‪.‬‬
‫{‬
‫;)"‪System.out.println ("enter citizen ID number‬‬
‫הפעולה מקבלת מחרוזת‬
‫;)(‪this.id = input.nextInt‬‬
‫ומשנה את התכונה ‪ name‬של‬
‫העצם הנוכחי להיות‬
‫;)"___________________________"( ‪System.out.println‬‬
‫;)(‪this.name = input.next‬‬
‫____________________‬
‫}‬
‫שהתקבלה כפרמטר‪.‬‬
‫)(‪public int getId‬‬
‫{‬
‫• פתחו מחלקה חדשה בשם‬
‫;‪return this.id‬‬
‫}‬
‫‪ Citizen‬והקלידו בה את‬
‫)‪public void setName (String newName‬‬
‫המחלקה‪.‬‬
‫{‬
‫תזכורת‪ :‬בשלב זה‪ ,‬אפשר לתקן‬
‫;‪this.name = newName‬‬
‫שגיאות תחביר אבל עוד אי‬
‫}‬
‫אפשר לבדוק את המחלקה‬
‫)(‪public void printCitizen‬‬
‫שכתבתם‪.‬‬
‫{‬
‫;)________________ ‪System.out.println("citizen id is: " +‬‬
‫משימה ‪ – 17‬חלק ב'‬
‫;)‪System.out.println("citizen name is: " + this.name‬‬
‫}‬
‫נפנה כעת לפתרון המשימה‪.‬‬
‫}‬
‫אלגוריתם לפתרון המשימה‪:‬‬
‫‪ .1‬נגדיר וניצור מערך מגודל ‪ 20‬שבכל איבר שלו תהיה הפניה לעצם מטיפוס ‪Citizen‬‬
‫‪ .2‬ניצור ‪ 20‬עצמים מטיפוס ‪ Citizen‬ונציב במערך את ההפניות אליהם‪.‬‬
‫‪ .3‬נקלוט מספר תעודת זהות‪.‬‬
‫‪ .4‬כל עוד המספר הנקלט ___________________________‪ ,‬נבצע‪:‬‬
‫‪ .4.1‬נקלוט שם‪.‬‬
‫‪ .4.2‬נשנה את השם של בעל תעודת הזהות‪.‬‬
‫‪ 4.3‬נקלוט מספר תעודת זהות‪.‬‬
‫‪ .5‬נפלוט את מספרי תעודת הזהות והשמות‪.‬‬
‫עמוד מספר ‪16‬‬
‫© כל הזכויות שמורות‪ ,‬ד"ר תמר פז‬
‫המחלקה ‪Array‬‬
‫מחלקות מוכנות‬
‫לפניכם שלד של המחלקה הראשית )מספור‬
‫;‪import java.util.Scanner‬‬
‫‪1‬‬
‫השורות איננו חלק מהמחלקה והוא מופיע‬
‫‪public class MainCitizen‬‬
‫‪2‬‬
‫{‬
‫‪3‬‬
‫;‪final static int N=20‬‬
‫‪4‬‬
‫)‪public static void main(String[] args‬‬
‫‪5‬‬
‫{‬
‫‪6‬‬
‫‪7‬‬
‫פה לצורך הדיון(‪.‬‬
‫• השלימו את המחלקה‪.‬‬
‫• ההוראה )סמנו את התשובה הנכונה(‬
‫;]‪Citizen [ ] all = new Citizen [N‬‬
‫;)‪Scanner input = new Scanner (System.in‬‬
‫‪ .1‬בונה עצם מטיפוס מערך‬
‫בניית המערך‪Citizen [ ] all = new Citizen [N]; //‬‬
‫‪8‬‬
‫)‪for (int i=0; i<N; i++‬‬
‫‪9‬‬
‫‪ .2‬בונה ‪ N‬עצמים מטיפוס ‪Citizen‬‬
‫יצירת התושבים‪all[i] = new Citizen (); //‬‬
‫;)‪change (all‬‬
‫• תפקיד הלולאה שבשורות ‪ 9-10‬הוא לבנות‬
‫‪11‬‬
‫;)______________( ‪12 print‬‬
‫} ‪13‬‬
‫_______ עצמים מטיפוס ‪,Citizen‬‬
‫ולהציב בכל אחד מהתאים של המערך‬
‫‪10‬‬
‫)‪14 private static void change (Citizen [ ] all‬‬
‫הפניה לעצם יחיד‪.‬‬
‫{ ‪15‬‬
‫;‪16 String name‬‬
‫• ההוראה )(‪ all[i]=new Citizen‬בונה עצם‬
‫;‪int id‬‬
‫‪17‬‬
‫יחיד מטיפוס ‪ Citizen‬ומציבה הפניה אליו‬
‫;)"‪System.out.println("enter id you want to change‬‬
‫‪18‬‬
‫;)(‪id=input.nextInt‬‬
‫‪19‬‬
‫)____________ > ‪while (id‬‬
‫‪20‬‬
‫{‬
‫‪21‬‬
‫‪22‬‬
‫בתא מספר _______ במערך‪.‬‬
‫• הוראת התנאי בשורה ‪ 25‬בודקת אם‬
‫מספר תעודת הזהות של העצם שההפניה‬
‫;)"‪System.out.println("enter new name‬‬
‫אליו נמצאת בתא מספר _______ שווה ל‬
‫____________________________‪.‬‬
‫;)(‪name=input.next‬‬
‫‪23‬‬
‫)‪for(int i=0; i<N; i++‬‬
‫‪24‬‬
‫)‪if(all[i].getId() == id‬‬
‫;)‪all[i].setName(name‬‬
‫• ההוראה שבשורה ‪ 26‬דואגת ל________‬
‫____________________________‬
‫____________________________‪.‬‬
‫• הפעולה ‪ print‬עוברת על כל תאי המערך‪.‬‬
‫‪25‬‬
‫‪26‬‬
‫‪27‬‬
‫;)"‪System.out.println("enter id you want to change‬‬
‫‪28‬‬
‫;)(‪______________=input.nextInt‬‬
‫} ‪29‬‬
‫} ‪30‬‬
‫)‪31 private static void print (Citizen [ ] all‬‬
‫הפעולה מפעילה את הפעולה‬
‫_____________ על כל אחד מהעצמים‬
‫שההפניה אליהם נמצאת במערך‪.‬‬
‫{ ‪32‬‬
‫)‪for(int i=0; i<_________; i++‬‬
‫‪34‬‬
‫;)(‪all[i].printCitizen‬‬
‫} ‪35‬‬
‫‪36 } // end class‬‬
‫• פתחו מחלקה חדשה באותו הפרויקט בו‬
‫הקלדתם את המחלקה ‪ Citizen‬והקלידו בה את המחלקה הנוכחית‪.‬‬
‫• שימרו הריצו ובדקו כי התקבל הפלט הרצוי‪.‬‬
‫© כל הזכויות שמורות‪ ,‬ד"ר תמר פז‬
‫‪33‬‬
‫עמוד מספר ‪17‬‬
‫מחלקות מוכנות‬
‫המחלקה ‪Array‬‬
‫פעולות שפועלות על עצם יחיד כותבים במחלקה שמגדירה עצם‪.‬‬
‫פעולות שמצריכות מעבר על כל העצמים כותבים במחלקה עם הפעולה הראשית כיוון שרק בה מוכר‬
‫המערך שמאפשר התייחסות לכל העצמים‪.‬‬
‫משימה ‪18‬‬
‫במסגרת המאמץ להגבלת הילודה בסין החליטו השלטונות לבדוק האם יש קשר בין המין של הילד הבכור‬
‫לבין שמירת החוק המגביל כל משפחה לילד אחד בלבד‪ .‬כתבו תכנית שתקלוט עבור כל אחד מ‪50 -‬‬
‫המשפחות שגרות בכפר הנידח "שישו" את מספר הילדים במשפחה )מספר שלם( ואת מין הילד הבכור )‪b‬‬
‫או ‪ .(g‬לאחר קליטת הנתונים התכנית תחשב ותודיע‪:‬‬
‫א‪ .‬ממוצע הילדים במשפחה‪.‬‬
‫ב‪ .‬לכמה מהמשפחות שילדם הבכור הוא בן יש יותר ילדים מהממוצע‪.‬‬
‫ג‪ .‬לכמה מהמשפחות שילדם הבכור הוא בת יש יותר ילדים מהממוצע‪.‬‬
‫יש להשתמש במערך של עצמים‬
‫לשם פתרון המשימה יש להגדיר ‪ 2‬מחלקות‪.‬‬
‫מחלקה ראשונה‪ :‬מחלקה ‪ Family‬שתשמור אינפורמציה עבור משפחה אחת‪ .‬האינפורמציה שיש לשמור‬
‫היא מספר הילדים במשפחה )מטיפוס ____________( ומין הילד הבכור )מטיפוס ___________(‪.‬‬
‫במחלקה ‪ Family‬יהיו ‪ 3‬פעולות‪:‬‬
‫‪ .1‬פעולה בונה‬
‫‪ .2‬פעולה שתחזיר את מספר הילדים במשפחה‪.‬‬
‫‪ .3‬פעולה שתחזיר את מין הילד הבכור‪.‬‬
‫מחלקה שניה‪ :‬מחלקה עם פעולה ראשית שיהיה בה מערך מאורך __________ שבכל איבר בו תהיה‬
‫הפניה לעצם מטיפוס ___________‪.‬‬
‫• פתחו פרויקט חדש‪ ,‬הגדירו בו את שתי המחלקות‪.‬‬
‫• שימרו הריצו ובדקו כי התקבל הפלט הרצוי‪.‬‬
‫עמוד מספר ‪18‬‬
‫© כל הזכויות שמורות‪ ,‬ד"ר תמר פז‬
‫מחלקות מוכנות‬
‫המחלקה ‪Array‬‬
‫משימה ‪19‬‬
‫כתבו תכנית שתקלוט עבור כל אחד מ‪ 100 -‬התלמידים בשכבת י"א את שמו‪ ,‬את ציון המגן שלו‬
‫במתמטיקה ואת ציון הבגרות שלו במתמטיקה‪.‬‬
‫התכנית תחשב את ממוצע הערכים המוחלטים של ההפרש בין ציון המגן לבין ציון הבגרות‪ .‬לאחר מכן‪,‬‬
‫התכנית תפלוט‪:‬‬
‫א‪ .‬את השמות של התלמידים שההפרש המוחלט בין ציון המגן שלהם לבין ציון הבגרות שלהם גבוה‬
‫מהממוצע המחושב‪.‬‬
‫ב‪ .‬את השם של התלמיד שההפרש המוחלט בין ציון המגן שלו לבין ציון הבגרות שלו הוא הקטן ביותר‬
‫)אם מספר תלמידים השיגו את ההפרש המוחלט הקטן ביותר‪ ,‬התכנית תפלוט את השמות של כל‬
‫אותם תלמידים(‪.‬‬
‫למשל‪ ,‬עבור הקלט‪:‬‬
‫שם התלמיד‪ :‬מעין‪ ,‬ציון מגן‪ , 94 :‬ציון בגרות‪95 :‬‬
‫שם התלמיד‪ :‬אמין‪ ,‬ציון מגן‪ , 98 :‬ציון בגרות‪92 :‬‬
‫שם התלמיד‪ :‬רומן‪ ,‬ציון מגן‪ , 88 :‬ציון בגרות‪98 :‬‬
‫שם התלמיד‪ :‬רעות‪ ,‬ציון מגן‪ , 90 :‬ציון בגרות‪90 :‬‬
‫שם התלמיד‪ :‬אורטל‪ ,‬ציון מגן‪ , 94 :‬ציון בגרות‪91 :‬‬
‫התכנית תפלוט‪:‬‬
‫התלמידים שההפרש המוחלט בין ציון המגן לבין ציון הבגרות שלהם גבוה מהממוצע‪ :‬אמין‪ ,‬רומן‬
‫התלמידים שההפרש המוחלט בין ציון המגן לבין ציון הבגרות הוא הנמוך ביותר‪ :‬רעות‬
‫הסבר‪|94-95|=1 , |98-92|=6 , |88-98|=10 , |90-90|=0 , |94-91|=3 (1+6+10+0+3)/5=4 :‬‬
‫רמז‪ :‬הגדירו תחילה מחלקה ‪ Student‬שתשמור אינפורמציה עבור תלמיד אחד‪ .‬האינפורמציה שיש‬
‫לשמור היא ______________של התלמיד וההפרש המוחלט בין ציון המגן שלו לבין ציון הבגרות‪.‬‬
‫במחלקה ‪ Student‬יהיו ‪ 4‬פעולות‪:‬‬
‫‪ .1‬פעולה בונה‬
‫‪ .2‬פעולה פנימית שתקלוט את ציון המגן ואת ציון הבגרות ותחזיר את ההפרש המוחלט ביניהם‪.‬‬
‫‪ .3‬פעולה שתחזיר את שם התלמיד‪.‬‬
‫‪ .4‬פעולה שתחזיר את ההפרש המוחלט של התלמיד‪.‬‬
‫© כל הזכויות שמורות‪ ,‬ד"ר תמר פז‬
‫עמוד מספר ‪19‬‬
‫המחלקה ‪Array‬‬
‫מחלקות מוכנות‬
‫משימה ‪) 20‬עיבוד של שאלה מספר ‪ ,10‬בחינת בגרות מדעי המחשב‪ ,‬קיץ תשס"ג(‬
‫לקראת תחרות ארצית במדעי המחשב‪ ,‬נערכו בחינות מיון ל ‪ 1750‬תלמידים‪ .‬לתחרות הארצית התקבלו‬
‫תלמידים שציונם בבחינת המיון גבוה מהציון הממוצע של כל הנבחנים בבחינה זו‪.‬‬
‫כתבו תכנית שתקלוט עבור כל מועמד שלושה נתונים‪ :‬שמו‪ ,‬ציונו בבחינת המיון‪ ,‬ושפת התכנות המועדפת‬
‫עליו )‪ java‬או ‪.(c#‬‬
‫התכנית תפלוט‪:‬‬
‫א‪ .‬את השמות של התלמידים שהתקבלו לתחרות‪.‬‬
‫ב‪ .‬את מספר התלמידים שהתקבלו לתחרות ושפת התכנות המועדפת עליהם היא ‪. java‬‬
‫ג‪ .‬את השם של התלמיד שהשיג את הציון הגבוה ביותר )אם מספר תלמידים השיגו את הציון הגבוה‬
‫ביותר‪ ,‬התכנית תפלוט את השמות של כל אותם תלמידים(‪.‬‬
‫משימה ‪21‬‬
‫במפעל להכנת חומוס הוחלט לבדוק האם כדאי לשווק חומוס עם בצל‪ .‬לשם כך ערך המפעל משאל בין‬
‫לקוחותיו‪ .‬כל לקוח נשאל כמה ק"ג חומוס הוא צרך בשנה האחרונה והאם היה רוצה לטעום חומוס עם‬
‫בצל‪ .‬כתבו תכנית שתקלוט עבור כל אחד מלקוחות המפעל את שמו‪ ,‬את מספר ק"ג חומוס שצרך בשנה‬
‫האחרונה )מספר שלם( והאם ברצונו לטעום חומוס עם בצל )‪ .(true \ false‬קליטת הנתונים תיפסק עם‬
‫קליטת השם "‪ ."zozo‬אין לקלוט נתונים נוספים עבור שם זה‪.‬‬
‫לאחר קליטת הנתונים התכנית תחשב ותודיע‪:‬‬
‫א‪ .‬את השמות של הלקוחות שמעוניינים בחומוס עם בצל‪.‬‬
‫ב‪ .‬כמה לקוחות צרכו יותר מ ‪ 10‬ק"ג ומעוניינים בחומוס עם בצל‪.‬‬
‫למשל עבור הנתונים הבאים‪:‬‬
‫שחר צרך ‪ 12‬ק"ג לא מעוניין לטעום חומוס עם בצל‪.‬‬
‫עיסאם צרך ‪ 4‬ק"ג כן מעוניין לטעום חומוס עם בצל‪.‬‬
‫שירן צרכה ‪ 9‬ק"ג כן מעוניינת לטעום חומוס עם בצל‪.‬‬
‫מרים צרכה ‪ 16‬ק"ג לא מעוניינת לטעום חומוס עם בצל‪.‬‬
‫התכנית תפלוט‪ :‬לקוחות שמעוניינים בחומוס עם בצל‪ :‬עיסאם ‪ ,‬שירן‬
‫‪ 0‬לקוחות צרכו יותר מ ‪ 10‬ק"ג ומעוניינים בחומוס עם בצל‪.‬‬
‫הנחה‪ :‬למפעל יש לכל היותר ‪ 100‬לקוחות‪.‬‬
‫רמז‪ :‬במקרה הנוכחי‪ ,‬צריך לקלוט את השם של הלקוח בפעולה הראשית ולא בפעולה הבונה‪.‬‬
‫עמוד מספר ‪20‬‬
‫© כל הזכויות שמורות‪ ,‬ד"ר תמר פז‬
‫המחלקה ‪Array‬‬
‫מחלקות מוכנות‬
‫משימה ‪22‬‬
‫כתבו תכנית שתקלוט עבור כל אחת מהקבוצות הרשומות באיגוד הכדורסל את שמה‪ ,‬את מספר‬
‫הניצחונות שצברה בעונה האחרונה ואת מספר ההפסדים שספגה בעונה האחרונה‪ .‬קליטת הנתונים‬
‫תיפסק עם קליטת השם "‪ ."aaa‬אין לקלוט נתונים נוספים עבור שם זה‪ .‬התכנית תפלוט‪:‬‬
‫א‪ .‬את השם של הקבוצה שהיחס בין מספר הניצחונות שלה לבין סה"כ המשחקים ששיחקה הוא הגדול‬
‫ביותר )אם למספר קבוצות יש את היחס הגדול ביותר‪ ,‬התכנית תפלוט את השמות של כולן(‪.‬‬
‫ב‪ .‬את השמות של הקבוצות שהיחס בין מספר הניצחונות שלהן לבין סה"כ המשחקים ששיחקו הוא‬
‫מתחת לממוצע‪.‬‬
‫למשל עבור הנתונים הבאים‪:‬‬
‫מכבי תל אביב‪ 10 ,‬ניצחונות‪ 8 ,‬הפסדים‬
‫הפועל תל אביב‪ 10 ,‬ניצחונות‪ 0 ,‬הפסדים‬
‫הפועל חיפה‪ 8 ,‬ניצחונות‪ 5 ,‬הפסדים‬
‫ביתר ירושלים‪ 12 ,‬ניצחונות‪ 5 ,‬הפסדים‬
‫בני סכנין‪ 9 ,‬ניצחונות‪ 0 ,‬הפסדים‬
‫התכנית תפלוט‪:‬‬
‫יחס גדול ביותר‪ :‬הפועל תל אביב‪ ,‬בני סכנין‬
‫יחס מתחת לממוצע‪ :‬מכבי תל אביב‪ ,‬הפועל חיפה‪ ,‬ביתר ירושלים‬
‫הסבר‪ :‬למכבי תל אביב יש יחס ‪ , 0.555‬להפועל חיפה יחס של ‪ ,0.615‬לביתר ירושלים יחס של ‪ 0.705‬ולהפועל תל‬
‫אביב ולבני סכנין יחס של ‪.1‬‬
‫יחס ממוצע‪:‬‬
‫‪(0.555+0.615+0.705+1+1)/5 =0.775‬‬
‫הנחה‪ :‬באיגוד רשומות לכל היותר ‪ 30‬קבוצות‪.‬‬
‫משימה ‪23‬‬
‫במשרד הקליטה שומרים עבור כל משפחה שהגיעה לארץ את שם המשפחה ואת מספר הנפשות במשפחה‪.‬‬
‫כתבו תכנית שתקלוט קוד‪.‬‬
‫קוד ‪ 1‬משמעו שהגיעה משפחה חדשה‪ .‬התכנית תקלוט שם משפחה ומספר נפשות‪ ,‬תבנה עצם חדש‬
‫עבור המשפחה החדשה ותוסיף אותו למאגר הכללי‪.‬‬
‫קוד ‪ 2‬משמעו שהגיעו עוד נפשות למשפחה שקיימת כבר במאגר‪ .‬התכנית תקלוט שם משפחה ומספר‬
‫נפשות ותוסיף את מספר הנפשות שנקלטו למספר הנפשות הקיים במשפחה זו‪.‬‬
‫קליטת הנתונים תפסק עם קליטת קוד ‪) 0‬אין לקלוט נתונים נוספים עבור קוד זה(‪.‬‬
‫לסיום‪ ,‬התכנית תפלוט את מספר הנפשות הגדול ביותר למשפחה ואת שם המשפחה בעלת מספר נפשות‬
‫זה )במידה ויש שתי משפחות או יותר בעלות מספר נפשות גדול ביותר‪ ,‬התכנית תפלוט את כל השמות‬
‫הרלבנטיים(‪.‬‬
‫הנחות‪:‬‬
‫‪ .1‬הקלט תקין‪.‬‬
‫‪ .2‬לא הגיעו שתי משפחות או יותר בעלות אותו שם משפחה‪.‬‬
‫‪ .3‬הגיעו לארץ לכל היותר ‪ 150‬משפחות‪.‬‬
‫בעמוד הבא מופיעה דוגמא להרצה של התכנית‪.‬‬
‫© כל הזכויות שמורות‪ ,‬ד"ר תמר פז‬
‫עמוד מספר ‪21‬‬
Array ‫המחלקה‬
‫מחלקות מוכנות‬
:‫דוגמה להרצה של התכנית‬
enter:
1- add new family
2- add more people to existing family
0- finish
1
enter family name
shir
enter num people
3
enter:
1- add new family
2- add more people to existing family
0- finish
1
enter family name
gal
enter num people
6
enter:
1- add new family
2- add more people to existing family
0- finish
2
enter family name
gal
enter num people to add
3
enter:
1- add new family
2- add more people to existing family
0- finish
1
enter family name
rozen
enter num people
9
enter:
1- add new family
2- add more people to existing family
0- finish
2
enter family name
shir
enter num people to add
2
enter:
1- add new family
2- add more people to existing family
0- finish
0
Max people in family = 9
The families are: gal ,
‫ ד"ר תמר פז‬,‫© כל הזכויות שמורות‬
rozen
22 ‫עמוד מספר‬
‫מחלקות מוכנות‬
‫המחלקה ‪Array‬‬
‫משימה ‪24‬‬
‫בספריה העירונית שומרים עבור כל ספר את האינפורמציה הבאה‪:‬‬
‫שם הספר‪ ,‬שם המחבר ומספר עותקים‪.‬‬
‫כתבו תכנית שתקלוט אינפורמציה עבור הספרים בספריה‪ .‬קליטת הנתונים תפסק עם קליטת שם ספר‬
‫‘‪) ’kuku‬אין לקלוט נתונים נוספים עבור שם זה(‪.‬‬
‫לאחר מכן התכנית תודיע‪:‬‬
‫א‪ .‬שם המחבר שיש בספריה מספר רב ביותר של ספרים שונים שכתב )במידה ויש שני מחברים או יותר‬
‫שכתבו מספר רב ביותר של ספרים‪ ,‬התכנית תפלוט את כל השמות הרלבנטיים(‪.‬‬
‫ב‪ .‬המספר הכללי של ספרים בספריה )סך כל העותקים(‪.‬‬
‫הנחה‪ :‬יש בספריה לכל היותר ‪ 300‬ספרים שונים‪.‬‬
‫© כל הזכויות שמורות‪ ,‬ד"ר תמר פז‬
‫עמוד מספר ‪23‬‬