CAOS-2023/24 — различия между версиями
(→Чатики и преподаватели по группам) |
м (→Формула рассчета оценки Gitlab) |
||
(не показано 20 промежуточных версии 6 участников) | |||
Строка 1: | Строка 1: | ||
− | Вход в тестирующую систему: https:// | + | Вход в тестирующую систему: https://caos2023.myltsev.ru |
Материалы лекций: https://caos.myltsev.ru/lectures/ | Материалы лекций: https://caos.myltsev.ru/lectures/ | ||
− | [https:// | + | [https://caos2023.myltsev.ru/style.html Стиль оформления программ на Си] |
[https://t.me/+-RJj6i7NMaE1MWIy Чатик курса] | [https://t.me/+-RJj6i7NMaE1MWIy Чатик курса] | ||
Строка 22: | Строка 22: | ||
! Группа !! Чатик !! Преподаватель !! Ассистенты | ! Группа !! Чатик !! Преподаватель !! Ассистенты | ||
|- | |- | ||
− | | 221 || TODO || TODO || TODO | + | | 221 || https://t.me/+CjBn9f0EY3ZiMmEy || [https://t.me/grphil Филипп Грибов] || [https://t.me/ddubrovin Дмитрий Дубровин], [https://t.me/gmusya Герман Перов] |
+ | |- | ||
+ | | 222 || https://t.me/+uCLKSieZ3z8zNjk6 || [https://t.me/objatie_groba Игорь Минеев] || [https://t.me/l0i4b Арсений Болотников], [https://t.me/dikirillov Даниил Кириллов] | ||
+ | |- | ||
+ | | 223 || https://t.me/+-kqneBWoAC1hZDEy || [https://t.me/youagain Сафронов Евгений]|| [https://t.me/Mathew_K Матвей Кривда], [https://t.me/sidorenko_ivan Иван Сидоренко] | ||
+ | |- | ||
+ | | 224 || https://t.me/+JGp5STNu3WYzOTRi || TODO || TODO | ||
+ | |- | ||
+ | | 225 || https://t.me/+98tf6UWUIGM1MmYy || TODO || TODO | ||
+ | |- | ||
+ | | 226 || https://t.me/cool_caos_226 || [https://t.me/iiixphillxiii Миша Филитов] || [https://t.me/Holpow Фёдор], [https://t.me/igreetyou Денис] | ||
+ | |- | ||
+ | | 227 || TODO || TODO || TODO | ||
+ | |- | ||
+ | | 228 || TODO || TODO || TODO | ||
+ | |- | ||
+ | | 229 || TODO || TODO || TODO | ||
+ | |- | ||
+ | | 2210 || https://t.me/+Is6t2SMMTptmMWUy || [https://t.me/atgshkasan Шитов Александр] || [https://t.me/JustUserOff Тигран], [https://t.me/idt005 Игорь] | ||
+ | |- | ||
+ | | СПБ ПМИ || https://t.me/+AC9G7J5_AS8zMjJi || [https://t.me/evlinsky Евгений Линский] || [https://t.me/mkornaukhov Михаил Корнаухов] [https://t.me/fizmat_sila Иван Пешков] [https://t.me/rusterrxd Александр Виноградов] [https://t.me/fonarmeister Илья Саранцев] | ||
+ | |- | ||
+ | | СПБ ПАДИИ || https://t.me/+BE67Oaii9G5hZGJi || [https://t.me/evlinsky Евгений Линский] || [https://t.me/mkornaukhov Михаил Корнаухов] [https://t.me/fizmat_sila Иван Пешков] [https://t.me/rusterrxd Александр Виноградов] [https://t.me/fonarmeister Илья Саранцев] | ||
|} | |} | ||
Строка 42: | Строка 64: | ||
Больше примеров можно посмотреть в репозитории | Больше примеров можно посмотреть в репозитории | ||
===Библиотека ввода-вывода=== | ===Библиотека ввода-вывода=== | ||
− | Библиотека ввода-вывода для ассемблера x86: [https:// | + | Библиотека ввода-вывода для ассемблера x86: [https://caos2023.myltsev.ru/simpleio_i686.S simpleio_i686.S] |
− | Внутри виртуальной машины её можно скачать командой <code><nowiki>wget https:// | + | Все библиотечные функции не меняют значения регистров кроме указанных |
+ | |||
+ | <pre><nowiki> | ||
+ | call writei32 // напечатать на экране значение eax | ||
+ | // как знаковое десятичное число | ||
+ | call readi32 // ввести с клавиатуры число и сохранить в eax | ||
+ | call readi64 // ввести с клавиатуры число и сохранить в edx:eax | ||
+ | call writei64 // вывести edx:eax | ||
+ | call finish // завершить исполнение программы | ||
+ | </nowiki></pre> | ||
+ | |||
+ | Внутри виртуальной машины её можно скачать командой <code><nowiki>wget https://caos2023.myltsev.ru/simpleio_i686.S</nowiki></code> | ||
Если получаете сообщение, что Wget не установлен на вашей системе (на Ubuntu Desktop по умолчанию нет), то установите его следующей командой: <code><nowiki>sudo apt install wget</nowiki></code> | Если получаете сообщение, что Wget не установлен на вашей системе (на Ubuntu Desktop по умолчанию нет), то установите его следующей командой: <code><nowiki>sudo apt install wget</nowiki></code> | ||
===Виртуальная машина (VirtualBox)=== | ===Виртуальная машина (VirtualBox)=== | ||
− | [https:// | + | [https://caos2023.myltsev.ru/hse-caos-xubuntu.ova Образ виртуальной машины] |
Рекомендуется скачать образ и установить его в эмулятор [https://www.virtualbox.org/ VirtualBox]. Логин-пароль xubuntu/xubuntu, можно делать sudo. | Рекомендуется скачать образ и установить его в эмулятор [https://www.virtualbox.org/ VirtualBox]. Логин-пароль xubuntu/xubuntu, можно делать sudo. | ||
Строка 139: | Строка 172: | ||
====Подсветка синтаксиса==== | ====Подсветка синтаксиса==== | ||
− | Если она работает | + | Если она работает неправильно, откройте файл <code>simpleio_i686.S</code>, нажмите на его вкладку в списке открытых файлов сверху правой кнопкой мыши и выберите "Associate file type". В списке выберите Assembly Language. |
====Дебагер==== | ====Дебагер==== | ||
Строка 162: | Строка 195: | ||
| В конце 1-го модуля || контрольная в формате экзамена | | В конце 1-го модуля || контрольная в формате экзамена | ||
|- | |- | ||
− | | В конце 2-го модуля || экзамен | + | | В конце 2-го модуля || экзамен АК |
+ | |- | ||
+ | | В конце 4-го модуля || экзамен ОС | ||
|} | |} | ||
Строка 168: | Строка 203: | ||
* '''O<sub>АК</sub> = 0.5 * H<sub>ejudge</sub> + 0.05 * H<sub>семинары</sub> + 0.15 * H<sub>контрольная</sub> + 0.3 * Э''' | * '''O<sub>АК</sub> = 0.5 * H<sub>ejudge</sub> + 0.05 * H<sub>семинары</sub> + 0.15 * H<sub>контрольная</sub> + 0.3 * Э''' | ||
− | Все оценки кроме итоговой дробные | + | Все оценки кроме итоговой дробные. Итоговая оценка округляется арифметически. |
'''H<sub>ejudge</sub>''' - оценка за сданные задания в тестирующей системе Ejudge, выставляется согласно описанию ниже. | '''H<sub>ejudge</sub>''' - оценка за сданные задания в тестирующей системе Ejudge, выставляется согласно описанию ниже. | ||
Строка 175: | Строка 210: | ||
'''H<sub>контрольная</sub>''' - оценка за контрольную работу в модуле 1. | '''H<sub>контрольная</sub>''' - оценка за контрольную работу в модуле 1. | ||
+ | |||
+ | '''"Автомат"''' выдаётся, если оценки за ДЗ, контрольные и семинары не ниже некоторых пороговых значений, которые будут объявлены дополнительно. | ||
+ | |||
+ | * '''O<sub>ОС</sub> = 0.65 * H<sub>gitlab</sub> + 0.05 * H<sub>семинары</sub> + 0.3 * Э''' | ||
+ | Все оценки кроме итоговой дробные. Итоговая оценка округляется арифметически. | ||
+ | |||
+ | '''H<sub>gitlab</sub>''' - оценка за сданные задания в тестирующей системе gitlab, выставляется согласно описанию ниже. | ||
+ | |||
+ | '''H<sub>семинары</sub>''' - оценка за семинары, выставляется согласно правилам озвученным вашим семинаристом. | ||
'''"Автомат"''' выдаётся, если оценки за ДЗ и семинары не ниже некоторых пороговых значений, которые будут объявлены дополнительно. | '''"Автомат"''' выдаётся, если оценки за ДЗ и семинары не ниже некоторых пороговых значений, которые будут объявлены дополнительно. | ||
Строка 180: | Строка 224: | ||
=== Формула рассчета оценки Ejudge === | === Формула рассчета оценки Ejudge === | ||
− | + | Оценки будут ставиться исходя из процентного соотношения к полученным баллам, где | |
+ | |||
+ | 1) Учитываются только бонусные и домашние контесты. | ||
+ | |||
+ | 2) За 100% считается сумма возмных максимальных баллов по всем домашним контестам | ||
+ | |||
+ | 3) По следующей шкале (оценка, процент). Оценки дробные, между соседними ячейками линейно: | ||
+ | |||
+ | 1 20 | ||
+ | |||
+ | 2 30 | ||
+ | |||
+ | 3 40 | ||
+ | |||
+ | 4 50 | ||
+ | |||
+ | 5 60 | ||
+ | |||
+ | 6 70 | ||
+ | |||
+ | 8 90 | ||
+ | |||
+ | 9 95 | ||
+ | |||
+ | 10 99 | ||
+ | |||
+ | === Формула рассчета оценки Gitlab === | ||
+ | |||
+ | На курсе будет представлено 5 домашних заданий и одно бонусное (или бонусы в составе ДЗ). | ||
+ | |||
+ | Оценка за ДЗ выставляется как среднее арифметическое из оценок, где бонусная не попадает в знаменатель | ||
== Прокторинг == | == Прокторинг == | ||
Строка 190: | Строка 264: | ||
= Записи лекций = | = Записи лекций = | ||
− | + | https://disk.yandex.ru/d/zl7DgU7FmuJKLg/%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0%20%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%B0 |
Текущая версия на 18:15, 2 февраля 2024
Вход в тестирующую систему: https://caos2023.myltsev.ru
Материалы лекций: https://caos.myltsev.ru/lectures/
Стиль оформления программ на Си
Конспект лекций 2021 года от студентов
Содержание
Чатики и преподаватели по группам
Лектор — Александр Мыльцев @myltsev
Старший семинарист - Игорь Минеев @objatie_groba
Группа | Чатик | Преподаватель | Ассистенты |
---|---|---|---|
221 | https://t.me/+CjBn9f0EY3ZiMmEy | Филипп Грибов | Дмитрий Дубровин, Герман Перов |
222 | https://t.me/+uCLKSieZ3z8zNjk6 | Игорь Минеев | Арсений Болотников, Даниил Кириллов |
223 | https://t.me/+-kqneBWoAC1hZDEy | Сафронов Евгений | Матвей Кривда, Иван Сидоренко |
224 | https://t.me/+JGp5STNu3WYzOTRi | TODO | TODO |
225 | https://t.me/+98tf6UWUIGM1MmYy | TODO | TODO |
226 | https://t.me/cool_caos_226 | Миша Филитов | Фёдор, Денис |
227 | TODO | TODO | TODO |
228 | TODO | TODO | TODO |
229 | TODO | TODO | TODO |
2210 | https://t.me/+Is6t2SMMTptmMWUy | Шитов Александр | Тигран, Игорь |
СПБ ПМИ | https://t.me/+AC9G7J5_AS8zMjJi | Евгений Линский | Михаил Корнаухов Иван Пешков Александр Виноградов Илья Саранцев |
СПБ ПАДИИ | https://t.me/+BE67Oaii9G5hZGJi | Евгений Линский | Михаил Корнаухов Иван Пешков Александр Виноградов Илья Саранцев |
Настройка рабочего окружения
kks
https://github.com/darkkeks/kks
kks это консольная утилитка для курса, выполняющая много вещей, среди которых можно выделить несколько основных:
- Скачивание задач/сэмплов/контрольных с помощью одной команды. То же самое со сдачей задач: можно сдать и получить сразу результат.
- Генерация тестов с помощью скриптов и их тестирование.
- Просмотр рейтинга (как общего, так и по группам) в удобном формате
Пример использования:
kks sync # скачивание задач # тут вы написали свой код kks test --sample # тестирование kks submit
Больше примеров можно посмотреть в репозитории
Библиотека ввода-вывода
Библиотека ввода-вывода для ассемблера x86: simpleio_i686.S
Все библиотечные функции не меняют значения регистров кроме указанных
call writei32 // напечатать на экране значение eax // как знаковое десятичное число call readi32 // ввести с клавиатуры число и сохранить в eax call readi64 // ввести с клавиатуры число и сохранить в edx:eax call writei64 // вывести edx:eax call finish // завершить исполнение программы
Внутри виртуальной машины её можно скачать командой wget https://caos2023.myltsev.ru/simpleio_i686.S
Если получаете сообщение, что Wget не установлен на вашей системе (на Ubuntu Desktop по умолчанию нет), то установите его следующей командой: sudo apt install wget
Виртуальная машина (VirtualBox)
Рекомендуется скачать образ и установить его в эмулятор VirtualBox. Логин-пароль xubuntu/xubuntu, можно делать sudo.
Docker для пользователей MacOS (intel based)
Проверялось на MacOS BigSur и Monterey
Загрузить сам докер можно отсюда: тык
Команда для запуска: docker run -it --rm -v `pwd`:/caos -w /caos ubuntu
В терминале заходите в свою папку с акосом и запускаете эту команду. После нее вы начинаете работать с контейнером Ubuntu в папке /caos, где будет все содержимое вашей папки в основной ОС. Изменять содержимое внутри /caos можно и изнутри контейнера, и снаружи, изменения будут видны и там и там.
Внутри контейнера стоит установить gcc-multilib, без неё не заведётся: apt update && apt install -y gcc-multilib
Теперь вы можете писать код внутри своей любимой IDE (запущенной напрямую в вашей ОС, например VSCode), а компилить и запускать в докере через терминал.
Docker для пользователей MacOS на Apple Silicon
Добавьте в .bashrc или .zshrc:
export DOCKER_DEFAULT_PLATFORM=linux/amd64
После этого перезапустите Docker.
Вариант2:
- Скачиваем docker.
- Переходим в папку с задачами в терминале.
- Выполняем
docker run --platform linux/amd64 -it --rm -v `pwd`:/caos -w /caos ubuntu
- Делаем
apt update
- Делаем
apt -y install build-essential gcc-multilib
- Собираем задачки командой
gcc -m32 -g задача.S simpleio_i686.S
CLion
Для начала скачайте CLion с официального сайта и устанавите его.
Если у вас не linux: вар. 1 - docker
Скачайте и установите docker desktop. Добейтесь того, чтобы у вас заработал docker hello world (docker run --rm hello-world
).
Если у вас MacOs на арме сделайте то, что написано выше.
После этого нам потребуется специальный образ с необходимыми для курса библиотеками и программами. Создайте файл с именем Dockerfile и следующим содержанием:
FROM ubuntu:latest RUN apt update && apt install -y gcc-multilib gdb make cmake g++ WORKDIR /caos
В директории с этим запустите эту команду чтобы собрать образ: docker build -t caos .
и дождитесь пока она выполнится.
После этого откройте окно настроек, перейдите в пункт Build, Execution, Deployment -> Toolchains и добавьте новый Toolchain с типом Docker.
В поле Image укажите caos:latest
, а остальные поля должны определиться автоматически. Поместите этот Toolchain первым в списке сделав его default'ным.
Если у вас не linux: вар. 2 - wsl (Windows only)
Установите wsl 2, выберите дистрибутив Ubuntu.
Внутри wsl 2 поставьте необходимые пакеты (sudo apt install gcc-multilib make cmake g++ gdb
.
После этого откройте окно настроек, перейдите в пункт Build, Execution, Deployment -> Toolchains и добавьте новый Toolchain с типом WSL. Все поля должны определиться автоматически. Поместите этот Toolchain первым в списке сделав его default'ным.
Далее
Создайте проект (можете выбрать C Executable, но это не особо принципиально) Скачайте simpleio_i686.S и поместите в корень проекта.
В CMakeLists.txt
удалите всё и вставьте это:
cmake_minimum_required(VERSION 3.10) project(caos ASM) add_compile_options(-m32) add_link_options(-m32) file(GLOB_RECURSE sources_list LIST_DIRECTORIES true ./*) foreach(file ${sources_list}) IF(${file} MATCHES ".S$" AND NOT ${file} MATCHES "simpleio_i686.S") get_filename_component(X ${file} NAME) add_executable(${X} ${file} simpleio_i686.S) endif() endforeach()
Сделайте Reload Cmake project (Внизу выберите вкладку Cmake и нажмите слева на кнопку обновления с двумя стрелочками).
Этот конфиг написан таким образом, чтобы эффективно работать совместно с kks. На каждый .S файл (кроме библиотеке simpleio_i686.S) он создаст цель для сборки.
После того как у вас в проекте появляется новый файл (например после kks sync
) нужно делать Reload Cmake project.
Выберите справа сверху интересующий вас файл и запускайте.
Подсветка синтаксиса
Если она работает неправильно, откройте файл simpleio_i686.S
, нажмите на его вкладку в списке открытых файлов сверху правой кнопкой мыши и выберите "Associate file type". В списке выберите Assembly Language.
Дебагер
Дебагер работает из-коробки.
Чтобы узнать значения регистра напишите в поле снизу строку $eax и нажмите на кнопку "+".
Yabloko
Для того чтобы собрать Yabloko вам потребуется
- Компилятор, который умеет собирать elf-файлы под архитектуру x86. В мире линукса для такого традиционно собирают ещё одну копию
gcc
(и называютx86_64-elf-gcc
, чтобы не путаться), однакоclang
, в отличие отgcc
, в стандартной поставке уже имеет кросс-компилятор и кросс-линкер, так что можно (пока в теории) использовать его. - QEMU
Всё это вы можете получить локально, не зависимо от того, на какой вы ОС. Если вы по какой-то причине решили использовать учебный (или любой другой) сервер, то не забывайте добавлять к команде ssh опцию -X, которая пробрасывает X-сервер, а также по настроению опцию -C, которая сжимает передаваемые данные. Если у вас не линукс, то в таком случае вам потребуется ещё и скачать и установить X-сервер. Для MacOs. Для windows. Если вы пользуетесь Putty, то поставьте галочку в Connection -> SSH -> X11 -> Enable X11 forwarding.
Как устроен курс
Контрольные мероприятия
Когда | Что |
---|---|
В конце 1-го модуля | контрольная в формате экзамена |
В конце 2-го модуля | экзамен АК |
В конце 4-го модуля | экзамен ОС |
Формула оценки
- OАК = 0.5 * Hejudge + 0.05 * Hсеминары + 0.15 * Hконтрольная + 0.3 * Э
Все оценки кроме итоговой дробные. Итоговая оценка округляется арифметически.
Hejudge - оценка за сданные задания в тестирующей системе Ejudge, выставляется согласно описанию ниже.
Hсеминары - оценка за семинары, выставляется согласно правилам озвученным вашим семинаристом.
Hконтрольная - оценка за контрольную работу в модуле 1.
"Автомат" выдаётся, если оценки за ДЗ, контрольные и семинары не ниже некоторых пороговых значений, которые будут объявлены дополнительно.
- OОС = 0.65 * Hgitlab + 0.05 * Hсеминары + 0.3 * Э
Все оценки кроме итоговой дробные. Итоговая оценка округляется арифметически.
Hgitlab - оценка за сданные задания в тестирующей системе gitlab, выставляется согласно описанию ниже.
Hсеминары - оценка за семинары, выставляется согласно правилам озвученным вашим семинаристом.
"Автомат" выдаётся, если оценки за ДЗ и семинары не ниже некоторых пороговых значений, которые будут объявлены дополнительно.
Формула рассчета оценки Ejudge
Оценки будут ставиться исходя из процентного соотношения к полученным баллам, где
1) Учитываются только бонусные и домашние контесты.
2) За 100% считается сумма возмных максимальных баллов по всем домашним контестам
3) По следующей шкале (оценка, процент). Оценки дробные, между соседними ячейками линейно:
1 20
2 30
3 40
4 50
5 60
6 70
8 90
9 95
10 99
Формула рассчета оценки Gitlab
На курсе будет представлено 5 домашних заданий и одно бонусное (или бонусы в составе ДЗ).
Оценка за ДЗ выставляется как среднее арифметическое из оценок, где бонусная не попадает в знаменатель
Прокторинг
На контрольной работе и экзамене применяется селф-прокторинг (даже если вы находитесь в аудитории): необходимо сделать видеозапись, на которой видны ваш экран и ваше лицо во время решения задач. Микрофон тоже должен быть включён. В начале записи, пожалуйста, представьтесь. Запись необходимо будет выложить в любое облачное хранилище и сдать в ejudge ссылку на неё в течении нескольких часов после. Запись нужно хранить до выставления оценки за курс. Размер файла записи не должен сильно превышать 250 МБ. Помните, запись это ваше доказательство честности написанной работы. Инструкция по настройке ОБС появится позднее на вики. Рекомендуется качество не выше 720р и не ниже 360р
На контрольной работе можно пользоваться любыми материалами, веб-сайтами и т. д., за исключением интерактивного общения с кем-либо (гуглить можно, а вот советоваться нельзя). Телеграм-канал курса, а также официальные чаты курса также явно разрешены. В канале могут появляться важные объявления, за ним рекомендуется следить.