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


**Задание 4. Разработать программную среду для создания и отладки модулей на языке Ассемблера.**

**Порядок отладки:**
Запустить программу и ввести простую инструкцию например MOV AX, 5. Проверить что регистр AX получил значение 5. Затем ввести ADD AX, 3 и убедиться что AX стал 8. Проверить неизвестную команду — программа должна вывести сообщение об ошибке а не упасть.

**Фрагменты кода:**
```python
def execute(instruction, registers):
    parts = instruction.strip().upper().split()
    cmd = parts[0]
    if cmd == "MOV":
        reg, val = parts[1].strip(","), parts[2]
        registers[reg] = int(val)
    elif cmd == "ADD":
        reg, val = parts[1].strip(","), parts[2]
        registers[reg] += int(val)
```

**Полный код:**
```python
def execute(instruction, registers):
    try:
        parts = instruction.strip().upper().split()
        cmd = parts[0]
        if cmd == "MOV":
            reg, val = parts[1].strip(","), parts[2]
            registers[reg] = int(val)
        elif cmd == "ADD":
            reg, val = parts[1].strip(","), parts[2]
            registers[reg] = registers.get(reg, 0) + int(val)
        elif cmd == "SUB":
            reg, val = parts[1].strip(","), parts[2]
            registers[reg] = registers.get(reg, 0) - int(val)
        elif cmd == "MUL":
            reg, val = parts[1].strip(","), parts[2]
            registers[reg] = registers.get(reg, 0) * int(val)
        elif cmd == "PRINT":
            reg = parts[1]
            print(f"  {reg} = {registers.get(reg, 0)}")
        else:
            print(f"  Неизвестная команда: {cmd}")
    except Exception as e:
        print(f"  Ошибка: {e}")

def show_registers(registers):
    if not registers:
        print("  Регистры пусты")
    else:
        for reg, val in registers.items():
            print(f"  {reg} = {val}")

print("=== Симулятор Ассемблера ===")
print("Команды: MOV, ADD, SUB, MUL, PRINT")
print("Пример: MOV AX, 5 | ADD AX, 3 | PRINT AX")
print("Введите 'REGS' для просмотра регистров, 'END' для выхода\n")

registers = {}
while True:
    line = input(">> ").strip()
    if line.upper() == "END":
        print("Выход из симулятора.")
        break
    elif line.upper() == "REGS":
        show_registers(registers)
    elif line == "":
        continue
    else:
        execute(line, registers)
```

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

---

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

**Порядок отладки:**
Запустить и добавить 3-4 студентов с разными оценками. Проверить что средний балл считается правильно вручную. Убедиться что при вводе оценки вне диапазона 1-5 программа просит ввести снова. Проверить вывод списка отсортированного по баллу.

**Фрагменты кода:**
```python
def add_student(students):
    name = input("Имя студента: ")
    grades = []
    n = int(input("Количество оценок: "))
    for i in range(n):
        while True:
            g = int(input(f"  Оценка {i+1}: "))
            if 1 <= g <= 5:
                grades.append(g)
                break
            print("  Оценка должна быть от 1 до 5")
    avg = sum(grades) / len(grades)
    students.append({"name": name, "grades": grades, "avg": avg})
```

**Полный код:**
```python
def add_student(students):
    name = input("Имя студента: ")
    grades = []
    n = int(input("Количество оценок: "))
    for i in range(n):
        while True:
            try:
                g = int(input(f"  Оценка {i+1}: "))
                if 1 <= g <= 5:
                    grades.append(g)
                    break
                else:
                    print("  Введите от 1 до 5")
            except ValueError:
                print("  Введите число")
    avg = round(sum(grades) / len(grades), 2)
    students.append({"name": name, "grades": grades, "avg": avg})
    print(f"  Средний балл: {avg}")

def show_students(students):
    if not students:
        print("Список пуст")
        return
    sorted_list = sorted(students, key=lambda x: x["avg"], reverse=True)
    print(f"\n{'№':<4} {'Имя':<20} {'Оценки':<20} {'Средний балл'}")
    print("-" * 55)
    for i, s in enumerate(sorted_list, 1):
        grades_str = ", ".join(map(str, s["grades"]))
        print(f"{i:<4} {s['name']:<20} {grades_str:<20} {s['avg']}")

def stats(students):
    if not students:
        print("Нет данных")
        return
    avgs = [s["avg"] for s in students]
    best = max(students, key=lambda x: x["avg"])
    worst = min(students, key=lambda x: x["avg"])
    print(f"\nВсего студентов: {len(students)}")
    print(f"Средний балл группы: {round(sum(avgs)/len(avgs), 2)}")
    print(f"Лучший студент: {best['name']} ({best['avg']})")
    print(f"Худший студент: {worst['name']} ({worst['avg']})")

print("=== Успеваемость студентов ===")
students = []
while True:
    print("\n1. Добавить студента")
    print("2. Показать список")
    print("3. Статистика")
    print("4. Выход")
    choice = input("Выбор: ").strip()
    if choice == "1":
        add_student(students)
    elif choice == "2":
        show_students(students)
    elif choice == "3":
        stats(students)
    elif choice == "4":
        print("Выход.")
        break
    else:
        print("Неверный выбор")
```

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