Content is user-generated and unverified.
# פתרונות המבחנים החדשים - יסודות התכנות בשפת פייתון # קורס 20605 - האוניברסיטה הפתוחה # מבחנים 4, 5, 6 # ============================================================================ # פתרונות מבחן 4 # ============================================================================ def is_spiral(matrix): """ שאלה 1 - בודק אם מטריצה היא ספירלית """ if not matrix or not matrix[0]: return False n = len(matrix) # בדיקה שהמטריצה ריבועית for row in matrix: if len(row) != n: return False # יצירת מטריצה ספירלית לדוגמה לצורך השוואה expected = [[0] * n for _ in range(n)] # מילוי ספירלי top, bottom, left, right = 0, n-1, 0, n-1 num = 1 while top <= bottom and left <= right: # מימין לשמאל בשורה העליונה for col in range(left, right + 1): expected[top][col] = num num += 1 top += 1 # מלמעלה למטה בעמודה הימנית for row in range(top, bottom + 1): expected[row][right] = num num += 1 right -= 1 # משמאל לימין בשורה התחתונה if top <= bottom: for col in range(right, left - 1, -1): expected[bottom][col] = num num += 1 bottom -= 1 # מלמטה למעלה בעמודה השמאלית if left <= right: for row in range(bottom, top - 1, -1): expected[row][left] = num num += 1 left += 1 # השוואה עם המטריצה הנתונה return matrix == expected def count_digits(num, digit): """ שאלה 2א - ספירה רקורסיבית של ספרה במספר """ if num == 0: return 1 if digit == 0 else 0 last_digit = num % 10 count = 1 if last_digit == digit else 0 if num < 10: return count return count + count_digits(num // 10, digit) def has_ascending_digits(num): """ שאלה 2ב - בודק אם ספרות המספר בסדר עולה """ if num < 10: return True last_digit = num % 10 second_last = (num // 10) % 10 if second_last >= last_digit: return False if num < 100: return True return has_ascending_digits(num // 10) def word_value(word): """ שאלה 3 - חישוב ערך מילה """ total = 0 for char in word: if 'a' <= char <= 'z': total += ord(char) - ord('a') + 1 elif 'A' <= char <= 'Z': total += (ord(char) - ord('A') + 1) * 2 return total class Game: """ שאלה 4 - מחלקת משחק """ def __init__(self, name, genre, rating): self._name = name self._genre = genre if 1 <= rating <= 10: self._rating = rating else: self._rating = 5 def __lt__(self, other): return self._rating < other._rating def get_name(self): return self._name def get_genre(self): return self._genre def get_rating(self): return self._rating class GameStore: """ שאלה 4 - מחלקת חנות משחקים """ def __init__(self): self._games = [] def add_game(self, game): # בדיקה אם כבר יש משחק עם אותו שם for existing_game in self._games: if existing_game.get_name() == game.get_name(): return self._games.append(game) def top_rated_games(self, n): # מיון לפי דירוג בסדר יורד sorted_games = sorted(self._games, key=lambda g: g.get_rating(), reverse=True) return sorted_games[:n] def games_by_genre(self, genre): # סינון לפי סוג ומיון לפי שם genre_games = [game for game in self._games if game.get_genre() == genre] return sorted(genre_games, key=lambda g: g.get_name()) # ============================================================================ # פתרונות מבחן 5 # ============================================================================ def is_mountain_list(numbers): """ שאלה 1 - בודק אם רשימה היא רשימת הרים """ if len(numbers) < 3: return False # בדיקה שאין ערכים זהים סמוכים for i in range(len(numbers) - 1): if numbers[i] == numbers[i + 1]: return False # חיפוש פסגות peaks = 0 for i in range(1, len(numbers) - 1): if numbers[i] > numbers[i - 1] and numbers[i] > numbers[i + 1]: peaks += 1 return peaks >= 1 def reverse_number(num): """ שאלה 2א - היפוך מספר באופן רקורסיבי """ if num < 10: return num last_digit = num % 10 remaining = num // 10 # חישוב מספר הספרות בחלק הנותר temp = remaining digits_count = 0 while temp > 0: digits_count += 1 temp //= 10 return last_digit * (10 ** digits_count) + reverse_number(remaining) def is_mirror_numbers(num1, num2): """ שאלה 2ב - בודק אם מספרים הם ראי זה של זה """ return reverse_number(num1) == num2 def matrix_sum_diagonals(matrix): """ שאלה 3 - סכום אלכסונים במטריצה ריבועית """ n = len(matrix) main_diagonal_sum = 0 secondary_diagonal_sum = 0 for i in range(n): main_diagonal_sum += matrix[i][i] secondary_diagonal_sum += matrix[i][n - 1 - i] difference = abs(main_diagonal_sum - secondary_diagonal_sum) return (main_diagonal_sum, secondary_diagonal_sum, difference) class Employee: """ שאלה 4 - מחלקת עובד """ def __init__(self, name, salary, years_experience): self._name = name self._salary = salary self._years_experience = max(0, years_experience) def __gt__(self, other): return self._salary > other._salary def get_name(self): return self._name def get_salary(self): return self._salary def get_years_experience(self): return self._years_experience class Department: """ שאלה 4 - מחלקת מחלקה """ def __init__(self, department_name): self._department_name = department_name self._employees = [] def add_employee(self, employee): self._employees.append(employee) def average_salary(self): if not self._employees: return 0 total_salary = sum(emp.get_salary() for emp in self._employees) return total_salary / len(self._employees) def experienced_employees(self, min_years): experienced = [emp for emp in self._employees if emp.get_years_experience() >= min_years] return sorted(experienced, key=lambda emp: emp.get_salary(), reverse=True) # ============================================================================ # פתרונות מבחן 6 # ============================================================================ def is_chess_matrix(matrix): """ שאלה 1 - בודק אם מטריצה היא מטריצת שח """ if not matrix or not matrix[0]: return False n = len(matrix) # בדיקה שהמטריצה ריבועית ובגודל זוגי if n % 2 != 0: return False for row in matrix: if len(row) != n: return False # בדיקה שכל תא מכיל רק 0 או 1 for i in range(n): for j in range(n): if matrix[i][j] not in [0, 1]: return False # בדיקת תבנית לוח שחמט for i in range(n): for j in range(n): expected_value = (i + j) % 2 if matrix[i][j] != expected_value: return False return True def sum_of_digits(num): """ שאלה 2א - סכום ספרות באופן רקורסיבי """ if num < 10: return num return (num % 10) + sum_of_digits(num // 10) def is_happy_number(num, seen=None): """ שאלה 2ב - בודק אם מספר הוא מספר שמח """ if seen is None: seen = set() if num == 1: return True if num in seen: return False # נכנסנו ללולאה seen.add(num) # חישוב סכום ריבועי הספרות sum_of_squares = 0 temp = num while temp > 0: digit = temp % 10 sum_of_squares += digit * digit temp //= 10 return is_happy_number(sum_of_squares, seen) def find_missing_number(numbers): """ שאלה 3 - מציאת המספר החסר ברשימה """ n = len(numbers) + 1 # גודל הרשימה המלאה # שימוש בנוסחת סכום סדרה חשבונית expected_sum = n * (n + 1) // 2 actual_sum = sum(numbers) return expected_sum - actual_sum class Author: """ שאלה 4 - מחלקת מחבר """ def __init__(self, name, birth_year): self._name = name self._birth_year = birth_year def get_name(self): return self._name def get_birth_year(self): return self._birth_year class Book: """ שאלה 4 - מחלקת ספר """ def __init__(self, title, author, publication_year): self._title = title self._author = author self._publication_year = publication_year self._is_available = True def borrow(self): if self._is_available: self._is_available = False return True return False def get_title(self): return self._title def get_author(self): return self._author def get_publication_year(self): return self._publication_year def is_available(self): return self._is_available class Library: """ שאלה 4 - מחלקת ספרייה """ def __init__(self): self._books = [] self._borrowed_books = [] def add_book(self, book): self._books.append(book) def books_by_decade(self, decade): # סינון לפי עשור ומיון לפי שנת פרסום decade_books = [book for book in self._books if decade <= book.get_publication_year() < decade + 10] return sorted(decade_books, key=lambda b: b.get_publication_year()) def author_statistics(self): author_count = {} for book in self._books: author_name = book.get_author().get_name() author_count[author_name] = author_count.get(author_name, 0) + 1 return author_count # ============================================================================ # דוגמאות לשימוש
Content is user-generated and unverified.
    פתרונות המבחנים החדשים - יסודות התכנות בפייתון | Claude