לדלג לתוכן

2.5 מערכים תרגול

תרגול - מערכים

תרגיל 1 - פעולות בסיסיות

בהינתן המערך הבא:

const animals = ["dog", "cat", "fish", "bird", "hamster"];

בצעו את הפעולות הבאות (כל פעולה על תוצאת הפעולה הקודמת):
1. הוסיפו "rabbit" לסוף המערך
2. הוסיפו "turtle" לתחילת המערך
3. הסירו את האיבר האחרון
4. הסירו את האיבר הראשון
5. החליפו את "fish" ב-"goldfish"
6. הדפיסו את אורך המערך
7. הדפיסו את האיבר האחרון בעזרת at(-1)

תרגיל 2 - splice

בהינתן המערך:

const colors = ["red", "green", "blue", "yellow", "purple"];

השתמשו ב-splice כדי:
1. להסיר את "green" ו-"blue"
2. להוסיף "orange" ו-"pink" במקום שבו היו "green" ו-"blue"
3. להוסיף "white" בתחילת המערך (בלי unshift - רק splice)

תרגיל 3 - חיפוש

בהינתן המערך:

const scores = [85, 92, 78, 95, 88, 73, 91, 82, 95, 67];

כתבו קוד שמוצא:
1. האם הציון 95 קיים במערך (includes)
2. את האינדקס של הציון 88 (indexOf)
3. את הציון הראשון שגדול מ-90 (find)
4. את האינדקס של הציון הראשון שקטן מ-75 (findIndex)
5. כמה פעמים הציון 95 מופיע (צריך לולאה או לספור ידנית)

תרגיל 4 - sort

בהינתן המערך:

const prices = [99.99, 5.50, 25.00, 150.00, 3.99, 49.95];

א. מיינו מהזול ליקר.
ב. מיינו מהיקר לזול.

בהינתן המערך:

const students = [
    { name: "Charlie", grade: 85 },
    { name: "Alice", grade: 92 },
    { name: "Eve", grade: 78 },
    { name: "Bob", grade: 92 },
    { name: "Diana", grade: 88 }
];

ג. מיינו לפי ציון (מהגבוה לנמוך).
ד. מיינו לפי שם (סדר אלפביתי).

תרגיל 5 - תרגום מפייתון ל-JS

תרגמו את הקוד הבא מפייתון לג׳אווהסקריפט:

# Part A - basic operations
numbers = [10, 20, 30, 40, 50]
numbers.append(60)
numbers.insert(0, 5)
last = numbers.pop()
print(f"Last: {last}")
print(f"Length: {len(numbers)}")
print(f"Contains 30: {30 in numbers}")

# Part B - slicing
fruits = ["apple", "banana", "cherry", "date", "elderberry"]
first_three = fruits[:3]
last_two = fruits[-2:]
middle = fruits[1:4]
print(first_three)
print(last_two)
print(middle)

# Part C - list comprehension to find even numbers
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
evens = [n for n in nums if n % 2 == 0]
print(evens)

רמז ל-Part C: אין list comprehension ב-JS. השתמשו בלולאה רגילה או ב-filter (אם כבר למדתם).

תרגיל 6 - חיבור ופיצול

א. קחו את שני המערכים הבאים ותחברו אותם למערך אחד, עם המספר 0 באמצע:

const left = [1, 2, 3];
const right = [7, 8, 9];
// result: [1, 2, 3, 0, 7, 8, 9]

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

const sentence = "JavaScript is really fun";
// result: "fun really is JavaScript"

תרגיל 7 - הסרת כפילויות

כתבו פונקציה removeDuplicates שמקבלת מערך ומחזירה מערך חדש בלי כפילויות:

removeDuplicates([1, 2, 2, 3, 4, 4, 5]);     // [1, 2, 3, 4, 5]
removeDuplicates(["a", "b", "a", "c", "b"]);  // ["a", "b", "c"]

רמז: השתמשו ב-includes כדי לבדוק אם איבר כבר קיים במערך החדש.

תרגיל 8 - מיזוג ומיון

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

mergeSorted([1, 3, 5, 7], [2, 4, 6, 8]);  // [1, 2, 3, 4, 5, 6, 7, 8]
mergeSorted([1, 5, 9], [2, 3]);             // [1, 2, 3, 5, 9]
mergeSorted([], [1, 2, 3]);                 // [1, 2, 3]

פתרון פשוט: חברו ומיינו. אתגר: מזגו בלי sort (כמו merge sort).

תרגיל 9 - מטריצה

צרו מטריצה 3x3 ו:
1. הדפיסו אותה שורה-שורה
2. חשבו את סכום כל שורה
3. חשבו את סכום האלכסון הראשי (שמאל-עליון לימין-תחתון)
4. בדקו אם מספר מסוים נמצא במטריצה

const matrix = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
];

תרגיל 10 - רשימת מטלות

כתבו מערכת רשימת מטלות (todo list) פשוטה באמצעות מערך ופונקציות:

  1. פונקציה addTask(tasks, task) - מוסיפה מטלה לסוף הרשימה
  2. פונקציה removeTask(tasks, index) - מסירה מטלה לפי אינדקס
  3. פונקציה moveTask(tasks, fromIndex, toIndex) - מזיזה מטלה ממקום למקום
  4. פונקציה printTasks(tasks) - מדפיסה את כל המטלות עם מספור

דוגמה:

const myTasks = [];
addTask(myTasks, "Learn JavaScript");
addTask(myTasks, "Practice arrays");
addTask(myTasks, "Build a project");
printTasks(myTasks);
// 1. Learn JavaScript
// 2. Practice arrays
// 3. Build a project

moveTask(myTasks, 2, 0); // move "Build a project" to the top
printTasks(myTasks);
// 1. Build a project
// 2. Learn JavaScript
// 3. Practice arrays

שאלות

  1. מה ההבדל בין slice ל-splice?
  2. למה [10, 5, 100].sort() נותן [10, 100, 5] ולא [5, 10, 100]?
  3. מה ההבדל בין העתקה שטחית להעתקה עמוקה? מתי צריך העתקה עמוקה?
  4. מה ההבדל בין indexOf ל-findIndex?
  5. למה const arr = [1,2,3]; arr.push(4); עובד למרות שהמערך הוגדר עם const?