# Проверочная работа

Проверочная работа для учащихся представляет собой экзамен.
Он охватывает пройденные темы.
Экзамен длится 90 минут.
Необходимо написать программу на Си.
Техническое задание на программу будет предоставлено за 24 часа до экзамена.
Техническое задание будет один на всех.

## Требования к результату

В результате выполнения задания в файловой системе должен появиться архив с именем `~/<your-last-name>/exam.tgz`, где `<your-last-name>` -- фамилия учащегося.
Содержимое архива размещается в каталоге `exam` и состоит из файлов:
* файл `main.c` с исходными кодами и основной функцией `main`;
* файл со сценарием сборки `build-gcc.sh`;
* файлы с тестовыми сценариями и исходными данными к тестам;

В техническом задании перечислены названия тестов и список содержащихся в них команд.
Далее вместо `<name>` подставляется имя теста.
Для каждого теста создайте сценарий `test-<name>.sh`.
В тесте вызываются команды, вывод которых перенаправляется в файл `output-<name>.txt`

```
your-last-name
  ├─> main.c
  ├─> build-gcc.sh
  ├─> test-version.sh
  ├─> test-help.sh
  └─> test-cutline.sh
```

## Проверка результата

Учащийся распаковывает архив, переходит в каталог `exam` и создает в нем подкаталог `output`.
Содержимое архива копируется в `output`.
Запускаются сборочный и тестовые сценарии и анализируются выходные файлы на предмет соответствия требованиям технического задания.


## Оценка результата

Оценки:
* удовлетворительно, получить хотя бы запускаемый файл;
* хорошо, завершить успешно два и более тестов;
* отлично, собрать программу без предупреждений (warning'ов), завершить успешно все тесты и соответствовать пунктам технического задания.


## Примеры технических заданий

### `enumerate`, утилита нумерования строк

Написать программу на языке программирования Си.
Программа называется `enumerate`.
Программа принимает из командной строки имена файлов и выводит их содержимое на экран, нумеруя каждую строку.
Нумерация сквозная и начинается с 1.

Программа поддерживает следующие опции:
* `-h`, `--help` выводит следующее сообщение на экран:
```
Usage: enumerate [-h | --help] [-v | --version] ...
    Display the contents of line-numbered files.

Options:
    -h, --help 
        display this help and exit
    -v, --version
        output version information and exit
```
* `-v`, `--version` выводит номер версии, в нашем случае `0.0.1`.

Список тестов:
* `version` запускает команды `enumerate -v` и `enumerate --version`.
* `help` запускает команды `enumerate -h` и `enumerate --help`.
* `mix` запускает команды `enumerate -h -v` и `enumerate -v -h`; должна отработать первая опция в списке.
* `enumerate` запускает команды `enumerate test-*.sh` и `enumerate output-*.txt`.


### `cutline`, утилита отсекания строк

Написать программу на языке программирования Си.
Программа называется `cutline`.
Программа принимает из командной строки имена файлов и выводит строки, отсекая до 30 символов.

Программа поддерживает следующие опции:
* `-h`, `--help` выводит следующее сообщение на экран:
```
Usage: enumerate [-h | --help] [-v | --version] ...
    Cut lines to 30 characters.

Options:
    -h, --help 
        display this help and exit
    -v, --version
        output version information and exit
```
* `-v`, `--version` выводит номер версии, в нашем случае `0.0.1`.

Список тестов:
* `version` запускает последовательно команды `cutline -v` и `cutline --version`.
* `help` запускает последовательно команды `cutline -h` и `cutline --help`.
* `cutline` запускает последовательно команды `cutline test-*.sh` и `cutline output-*.txt`.
