Загрузка данных


**Задание 1. Разработать программу для решения систем линейных алгебраических уравнений методом Крамера.**

**Порядок отладки:**
Запустить программу и ввести систему с известным ответом, например 3x+2y=12, x+4y=10 (ответ x=2.909, y=1.772). Сверить результат с ручным подсчётом. Проверить случай когда определитель равен нулю — программа должна сообщить что решения нет.

**Фрагменты кода:**
```python
def determinant(m):
    return m[0][0]*m[1][1] - m[0][1]*m[1][0]

def cramer(a, b):
    d = determinant(a)
    if d == 0:
        return None
    d1 = determinant([[b[0], a[0][1]], [b[1], a[1][1]]])
    d2 = determinant([[a[0][0], b[0]], [a[1][0], b[1]]])
    return d1/d, d2/d

a = [[float(x) for x in input(f"Строка {i+1} (2 коэф): ").split()] for i in range(2)]
b = [float(x) for x in input("Свободные члены: ").split()]

result = cramer(a, b)
if result is None:
    print("Определитель равен нулю, решений нет")
else:
    print(f"x1 = {round(result[0], 4)}")
    print(f"x2 = {round(result[1], 4)}")
```

**Полный код:**
```python
def determinant(m):
    return m[0][0]*m[1][1] - m[0][1]*m[1][0]

def cramer(a, b):
    d = determinant(a)
    if d == 0:
        return None
    d1 = determinant([[b[0], a[0][1]], [b[1], a[1][1]]])
    d2 = determinant([[a[0][0], b[0]], [a[1][0], b[1]]])
    return d1/d, d2/d

print("=== Метод Крамера (система 2x2) ===")
a = [[float(x) for x in input(f"Строка {i+1} (2 коэффициента): ").split()] for i in range(2)]
b = [float(x) for x in input("Свободные члены: ").split()]

result = cramer(a, b)
if result is None:
    print("Определитель равен нулю, решений нет")
else:
    print(f"x1 = {round(result[0], 4)}")
    print(f"x2 = {round(result[1], 4)}")
```

**Скриншоты:** *(вставить самостоятельно)*

---

**Задание 2. Разработать программу для расчёта предварительной сметной стоимости создания беспроводной локальной сети предприятия.**

**Порядок отладки:**
Запустить и ввести 5 точек доступа, 20 устройств, площадь 500 кв.м. Вручную проверить сумму по каждой статье расходов. Убедиться что при большой площади программа добавляет дополнительные точки доступа автоматически.

**Фрагменты кода:**
```python
access_points = max(access_points, area // 150)
cost = 0
cost += access_points * 12000
cost += devices * 1500
cost += 25000
total = cost * 1.15
print(f"ИТОГО: {total:.0f} руб.")
```

**Полный код:**
```python
print("=== Расчёт стоимости беспроводной сети ===")
access_points = int(input("Количество точек доступа: "))
devices = int(input("Количество устройств: "))
area = float(input("Площадь помещения (кв.м): "))
has_controller = input("Нужен контроллер? (да/нет): ").strip().lower() == "да"

access_points = max(access_points, int(area // 150))

cost = 0
cost += access_points * 12000
cost += devices * 1500
cost += 25000
if has_controller:
    cost += 35000

total = cost * 1.15

print(f"\nТочек доступа (с учётом площади): {access_points}")
print(f"Стоимость без накладных: {cost:.0f} руб.")
print(f"Накладные расходы (15%): {cost * 0.15:.0f} руб.")
print(f"ИТОГО: {total:.0f} руб.")
```

**Скриншоты:** *(вставить самостоятельно)*

---

**Задание 3. Разработать программу для проведения тестирования успеваемости студентов по теме «Компьютерные сети».**

**Порядок отладки:**
Запустить и ответить на все вопросы правильно — должна выйти оценка 5. Потом ввести все неправильные ответы и проверить оценку 2. Проверить что при вводе некорректного номера программа не падает с ошибкой.

**Фрагменты кода:**
```python
for i, (question, options, correct) in enumerate(questions):
    print(f"\nВопрос {i+1}: {question}")
    for j, opt in enumerate(options):
        print(f"  {j+1}. {opt}")
    try:
        answer = int(input("Ответ: ")) - 1
    except ValueError:
        answer = -1
    if answer == correct:
        print("Верно!")
        score += 1
    else:
        print(f"Неверно. Правильно: {options[correct]}")
```

**Полный код:**
```python
questions = [
    ("Что такое топология сети?", ["Схема соединения узлов", "Скорость передачи", "Тип кабеля"], 0),
    ("Какой протокол отвечает за адресацию?", ["IP", "HTTP", "FTP"], 0),
    ("Что такое маршрутизатор?", ["Устройство для соединения сетей", "Тип кабеля", "Программа"], 0),
    ("Что такое DNS?", ["Служба имён доменов", "Тип соединения", "Вид атаки"], 0),
    ("Какой порт у HTTP?", ["80", "443", "22"], 0),
]

name = input("Введите имя: ")
score = 0

for i, (question, options, correct) in enumerate(questions):
    print(f"\nВопрос {i+1}: {question}")
    for j, opt in enumerate(options):
        print(f"  {j+1}. {opt}")
    try:
        answer = int(input("Ответ: ")) - 1
    except ValueError:
        answer = -1
    if answer == correct:
        print("Верно!")
        score += 1
    else:
        print(f"Неверно. Правильно: {options[correct]}")

percent = score / len(questions) * 100
print(f"\n{name}, результат: {score} из {len(questions)} ({percent:.0f}%)")
if percent >= 80:
    print("Оценка: 5")
elif percent >= 60:
    print("Оценка: 4")
elif percent >= 40:
    print("Оценка: 3")
else:
    print("Оценка: 2")
```

**Скриншоты:** *(вставить самостоятельно)*