# Программное обеспечение автоматизированных систем: лабораторные работы

[Репозиторий с методическими указаниями и заданиями.](http://uit.mpei.ru/git/main/python)

## Работа с Git

**Работы проверяются только после того, как закоммичены по правилам ниже.**

[Лабораторная работа про Git второго семестра][gitlab]
поможет вспомнить, как работать с Git.

[gitlab]: http://uit.mpei.ru/git/main/cs/src/branch/main/labs/lab02

1. В начале семестра
    создать на сервере копию этого репозитория («форкнуть» его), нажав *Fork*.
    Получится репозиторий-форк `http://uit.mpei.ru/git/IvanovII/python-labs`,
    где `IvanovII` — ваше имя пользователя.

1. В начале каждого занятия:

    Клонировать свой форк на рабочий стол
    (`IvanovII` заменить на свое имя пользователя):

    ```sh
    git clone http://uit.mpei.ru/git/IvanovII/python-labs.git
    ```

    Перебазировать свой форк на исходный репозиторий ("апстрим"):

    ```sh
    # Первую команду нужно запускать только один раз,
    # иначе будет ошибка "error: remote upstream already exists".
    git remote add upstream http://uit.mpei.ru/git/main/python-labs.git
    git fetch upstream
    git stash push
    git rebase upstream/main
    git stash pop
    ```

    Перебазировать нужно, чтобы подтянуть из исходного репозитория обновления.

1. После того, как отчет написан, закоммитить его как `TEMAn/report.md`.

    **Здесь и далее «закоммитить» для краткости означает:
    сделать коммит и запушить его на сервер.**

    Здесь и далее `TEMAn` означают каталоги конкретных тем:
    `TEMA1`, `TEMA2` и т. д.
    Можно также коммитить по частям в процессе работы.
    Если для отчета нужны рисунки, то их закоммитить в `TEMAn`,
    назвав `figure0.png`, `figure1.png` и т. д.

1. Решение общего контрольного задания (ОКЗ) закоммитить как `TEMAn/task.md`.
    Исключения:

    * Тема 1 не содержит общего контрольного задания — ничего не делать.
    * Тема 8 требует нескольких файлов — закоммитить их в каталог `TEMA8/task`.

1. Решение индивидуального контрольного задания (ИКЗ) по темам 2, 4, 5, 7, 8
    или решение теста по модуля после тем 3, 6, 9
    закоммитить как `TEMAn/test.md`.
    Исключения:

    * Тема 1 вместо ИКЗ содержит контрольный вопрос —
        закоммитить также в `TEMA1/test.md`.
    * Тема 8 и тест по модулю 3 (после темы 9) требуют нескольких файлов —
        закоммитить в каталог `TEMAn/test`.

## Оформление материалов

Тексты оформляются в формате [Markdown](https://commonmark.org/help/).
Для этого текст со специальной разметкой пишется в файле с расширением `*.md`,
а в web-интерфейсе будет отображаться оформленным, подобно этому.

Образец оформления материалов по каждой теме: [`TEMA0`](TEMA0).

### Оформление отчетов

Отчет `TEMAn/report.md` оформляется в формате Markdown по следующему образцу:

    # Отчет по теме 1

    Иванов Иван, А-01-25

    ## 1 Изучение среды IDLE

    ## 1.1 Настройка текущего каталога

    ```py
    >>> import os
    >>> os.chdir(r"C:\users\u111-19\Desktop\python\TEMA1")
    >>> os.getcwd()
    'C:\\Users\\u111-19\\Desktop\\python\\TEMA1'
    ```

    Нажал *Файл / Открыть*, диалог оказался сразу нацелен на установленную папку:

    ![Скриншот диалога открытия файла](figure0.png)

Заголовки пунктов должны отражать их суть в нескольких словах,
то есть просто скопировать текст пункта в заголовок не подойдет.
Вы должны сами придумать осмысленные заголовки, прочитав пункт задания.

В отчет копируется код, введенный в оболочку (строки, начинающиеся с `>>>`),
и вывод соответствующих команд (`'C:\\Users...` в примере).

Если в пункте задания требуется сделать вывод или объяснить что-то,
к коду и выводу добавляется письменный ответ или пояснение.

### Оформление решений

Решение всех заданий оформляется по образцу:

    # Общее контрольное задание по теме 2

    Иванов Иван, А-01-25

    ## Задание

    Создать переменную `name`, содержащую ваше имя. Определить тип этой переменной.

    ## Решение

    ```py
    >>> name = 'Иван'
    >>> type(name)
    'str'
    ```

Для темы 1 вместо «Задания» — «Вопрос», вместо «Решения» — «Ответ».

Для тем 8 и 9 раздела «Решение» не нужно,
вместо этого решение размещается в отдельных файлах `*.py`.
