forked from somov7/m3107-m3108
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
86 lines (81 loc) · 18 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Лабораторные занятия по программированию гр. M3107-M3108</title>
<link rel="stylesheet" href="https://stackedit.io/style.css" />
</head>
<body class="stackedit">
<div class="stackedit__html"><h1 id="лабораторные-занятия-по-программированию-гр.-m3107-m3108">Лабораторные занятия по программированию гр. M3107-M3108</h1>
<h2>Полезные ссылки</h2>
<ol>
<li><a href="https://drive.google.com/drive/folders/1dDZXRpCJ5_ZeU261jHWyaFZOXb6-dDsi">Лабораторные работы</a></li>
<li><a href="https://github.com/somov7/m3107-m3108">Репозиторий</a></li>
<li><a href="https://docs.google.com/forms/d/e/1FAIpQLSeo7Rzwy-QI_zlq4RO7AxDsdJwK0JW0gBB9VeVl345z11HPuA/viewform?usp=sf_link">Google-форма для записи на сдачу</a></li>
<li><a href="https://docs.google.com/spreadsheets/d/1cqWKb2O2yW9HNNGp9cMhKL4wh02vghig7R6-dD8sjY8/edit#gid=0">Табличка с баллами</a></li>
<li><a href="https://t.me/joinchat/eEzPaqn6g3phZTdi">Канал в телеграме</a></li>
</ol>
<h2 id="организация-занятий">Организация занятий</h2>
<ol>
<li>Всего будет 6 лабораторных работ. <a href="https://drive.google.com/drive/folders/1dDZXRpCJ5_ZeU261jHWyaFZOXb6-dDsi">Гугл-диск</a></li>
<li>Каждая лабораторная стоит по 10 баллов. По каждой лабораторной дедлайн на следующем занятии с момента выдачи. За сдачу после дедлайна можно получить максимум 50% от максимального числа баллов.</li>
<li>Сдавать вперёд дедлайна можно.</li>
<li>Баллы за лабораторные будут жить в <a href="https://docs.google.com/spreadsheets/d/1cqWKb2O2yW9HNNGp9cMhKL4wh02vghig7R6-dD8sjY8/edit#gid=0">этой табличке</a>.</li>
<li>Все вопросы можно задавать в чате <a href="https://t.me/joinchat/eEzPaqn6g3phZTdi">телеграм-канала</a></li>
<li>В начале каждого занятия мы будем просить вас дать нам табличку со списком на сдачу. Вы можете организовать очередь заранее и приходить на занятие в соответстии с ним. Например, если вы пятнадцатый в очереди, то вам имеет смысл прийти где-то ближе к началу второй пары. На занятиях не будет происходить ничего, кроме приёма лабораторной и ответов на возникшие вопросы, поэтому вы вполне можете прийти, сдать свою лабораторную и уйти.</li>
</ol>
<h2 id="как-проходит-сдача">Как проходит сдача</h2>
<p>Сдача проходит посредством ревью Pull Request’a на GitHub<br>
Для сдачи лабораторной работы необходимо сделать следующее:</p>
<ol>
<li>Создать свой аккаунт на <a href="https://github.com">https://github.com</a> (у кого его ещё нет) и установить git у себя на компьютере <a href="https://git-scm.com/book/en/v2/Getting-Started-Installing-Git">(инструкция)</a></li>
<s>
<li>Создать новый репозиторий.</li>
<li>Добавить в список коллабораторов репозитория <a href="https://github.com/somov7">somov7</a> и <a href="https://github.com/borispetrianik">BorisPetrianik</a>.</li>
</s>
<li>Сделайте Fork <a href="https://github.com/somov7/m3107-m3108">этого репозитория</a></li>
<li>Открыть консоль/терминал, зайти в директорию, куда вы хотите клонировать репозиторий <code>cd /path/to/directory</code>, клонировать репозиторий себе <code>git clone https://github.com/username/reponame.git</code>, зайти в него <code>cd reponame</code></li>
<li>Создать новую ветку для вашей лабораторной: <code>git checkout main; git checkout -b lab1</code></li>
<li>Написать код, скомпилировать, запустить, убедиться, что всё работает</li>
<li>Добавить файлы с исходным кодом в репозиторий: <code>git add filename1.h filenam1.c filename2.c; git commit -m "commit message"</code>. Комментарий к коммиту желательно должен содержать краткое осмысленное описание того, что содержится в коммите. <b>Пожалуйста</b>, не добавляйте скомпилированные исполняемые или объектные файлы в репозиторий, только файлы с исходным кодом (.c и .h)</li>
<li>Залейте свою ветку на гитхаб <code>git push --set-upstream origin lab1</code></li>
<li>Зайдите на GitHub и создайте новый Pull Request из вашего репозитория с вашей лабораторной в начальный репозиторий.</li>
<li>Запишитесь на сдачу лабораторной с помощью <a href="https://docs.google.com/forms/d/1ZRBHXTEkj2lgiD0h32A_JwzBqDXqo5GUthmjFCeJyNY/edit">google-формы</a>. Все, кто не успеет к этому сроку, считаются пропустившими дедлайн. <b>Даже если вы создали Pull Request, но не заполнили форму, не считается, что вы отправили лабораторную работу на проверку.</b></li>
<li>На занятии подойдите, желательно, со своим ноутбуком, на защиту. Защита будет состоять из ревью вашего кода в пулл-реквесте и вопросов, чтобы убедиться, что код написан действительно вами и вы понимаете что вы сами написали. <b>Будет смотреться тот код, который у вас находит я в пулл-рекевесте. Если по какой-то причине у вас локально какой-то другой код, который вы на самом деле хотите сдавать -- закоммитьте и запушьте свои изменения на гит.</b></li>
<li>После того как вы защитили лабораторную, баллы появятся в табличке. Чтобы эти баллы появились в ИСУ необходимо сделать отчёт. Отчёт нужно скинуть на <a href="https://drive.google.com/drive/folders/1ZKvyiDVMQCZ2RwmBSGU_Ypo2SmcdRkDG?usp=sharing">google-диск</a>, предварительно создав в нём папочку названную по ФИО. Названия файлов должны быть в виде <code>Лабораторная работа №1, Иванов Иван Иванович, группа M310X</code>, в формате .docx или .pdf. Можно заняться этим в конце семестра. Шаблон для титульного листа отчёта можно взять <a href="https://docs.google.com/document/d/1lLxG8cNivmTQ6wd5jEodoPJ_48DtqiRHTqwmbME5kGA/edit?usp=sharing">тут</a>. Отчёт является скорее формальностью, тем не менее он должен быть содержательным, чтобы по нему можно было понять что вы сделали и какого результата добились: внутри должны быть пункты задания, объяснение, что вы делали и исходный код.</li>
</ol>
<p>Если кому-то удобнее, то можете пользоваться встроенными средствами для системы контроля версий в вашей IDE или графическими клиентами по типу GitHub Desktop или GitKraken. Главное, чтоб вы создали репозиторий, создали Pull Request и призвали в него преподавателей на ревью.</p>
<h2 id="faq">FAQ</h2>
<ol>
<li><b>А где вообще писать, какую IDE и компилятор использоват использовать?</b><br>Если у вас уже есть своя любимая настроенная IDE, можете использовать её.<br>
1.1 Сначала установите компилятор. <br>Если у вас какой-либо дистрибутив линукса, наверняка у вас уже есть компилятор языка Си из коробки. Можете это проверить, вбив в терминал команду <code>gcc --version</code>. <br>Если у вас MacOS: <code>brew install gcc</code><br>Если у вас Windows: <a href="https://www.ics.uci.edu/~pattis/common/handouts/mingweclipse/mingw.html">вот инструкция</a><br>
1.2 Установите себе IDE. Рекомендую использовать либо <a href="https://code.visualstudio.com/">VSCode</a>, либо <a href="https://www.jetbrains.com/clion/">CLion</a> (лицензионный ключ должен быть где-то в ИСУ). Рекомендую всё таки использовать первое, так как, во-первых, вы уже используете VSCode на цифровой культуре, а во-вторых, CLion для данных лабораторных это overkill, или как говорят по-русски, “из пушки по воробьям”, она достаточно требовательная к железу и там много фичей которые вам не очень нужны. Если вы установили VSCode, то рекомендуем производить компиляцию ваших программ через терминал (поисковый запрос “how to compile c programm with gcc” в помощь).</li>
<li><b>А что такое командная строка и как это запускать?</b> <br> После того как вы скомпилировали программу, у вас появился исполняемый файл. Вы можете запустить этот файл, написав его название в командную строку (в начале написав “./”, если вы работаете на MacOS/Linux). Также через пробел после названия файла можно передать аргументы командной строки (<a href="https://www.jetbrains.com/help/clion/run-debug-configuration-application.html">как передать аргументы командной строки в CLion</a>). Также можете посмотреть поисковый запрос “c command line arguments”.</li>
<li><b>Можно ли писать не на Си, а на С++?</b> <br> Нет, курс по C++ у вас будет в следующем семестре, в этом семестре можно писать только на Си.</li>
<li><b>Какие библиотеки можно использовать?</b><br>Можно использовать <a href="https://en.wikipedia.org/wiki/C_standard_library#Application_programming_interface">стандартную библиотеку и некоторые другие библиотеки, являющиеся де-факто типовым общепринятым решением для какой-либо задачи (например, unistd.h для парсинга аргументов командной строки)</a>.</li>
<li><b>Где можно найти материал по Си и попрактиковаться в языке?</b><br>Описание языка и всех функций стандартной библиотеки можно посмотреть <a href="https://en.cppreference.com/w/c">здесь</a>.<br> Попрактиковаться можно на сайтах вроде <a href="https://exercism.org/tracks/c/exercises">exercism</a> или <a href="https://www.hackerrank.com/domains/c">HackerRank</a>.</li>
</ol>
<h2 id="faq-по-лабораторной-№1">FAQ по лабораторной №1</h2>
<ol>
<li><b>Что подаётся на вход программе, что является результатом работы программы?</b><br>На вход подаётся ровно два аргумента командной строки, первый из которых – что мы хотим посчитать, второй – название файла, для которого мы хотим это сделать. Результатом выполнения программы должен быть вывод одного числа в стандартный поток вывода. Если на вход программе подано не два аргумента, либо если первый аргумент не соответствует ни одному из тех флагов, которые описаны в лабораторной, либо если переданного файла не существует, в общем, любая нестандартная ситуация, то программа должно вывести сообщение об ошибке и завершиться с ненулевым кодом.</li>
<li><b>Можно ли передать больше одного типа подсчитываемого значения в программу?</b> <br>Нет, за один запуск можно передать только одно значение.</li>
<li><b>Что считать словом, байтом, строкой?</b><br>Словом нужно считать всё, что ограничено по обе стороны либо началом/концом строки, либо пробельным символом (поисковый запрос: whitespace character). Строкой считается нечто "зажатое" между символом новой строки/началом строки/концом строки. Пустые строки тоже валидные строки, их тоже надо считать. Для простоты можно считать, что все файлы закодированы в ASCII, поэтому один байт == один символ.</li>
<li><b>Функции, которые могут пригодиться при написании лабораторной работы:</b> fopen, fscanf, printf, fseek, ftell, strcmp, fclose, fgetc, fgets, getopt.</li>
<li><b>Какой максимальный размер файла/строки в файле?</b> Если у вас возник такой вопрос, вероятно вы пытаетесь прочитать целиком файл или строку из него и сохранить в массив. Подумайте, как обойтись без этого.</li>
</ol>
<h2 id="faq-по-лабораторной-№2">FAQ по лабораторной №2</h2>
<ol>
<li>В тип uint1024_t должно помещаться любое значение от 0 до 2^1024 - 1</li>
<li>У вас может быть overhead по памяти, но не слишком большой. В идеале uint1024_t занимает 128 байт. Если он у вас занимает 256 байт или больше, получить максимальные 10 баллов за лабораторную у вас не получится. Условные 140 или 155 байт -- нормально.</li>
<li>Под undefined behavior подразумевается некорректный результат выполнения операции. Вечный цикл или условный segfault не являются undefined behavior.</li>
<li>Самый простой способ написать операции с числами -- реализовать алгоритмы "в столбик", примерно как вы делали в начальной школе.</li>
</ol>
<h2 id="faq-по-лабораторной-№3">FAQ по лабораторной №3</h2>
<ol>
<li>Не смотря на то, что в условии указан конкретный файл, с которым надо работать, следует воспринимать его как пример, и не завязываться на то, что вам подадут именно его. Вам могут подать логи, например, за август 95-го года, могут подать логи за последние 10 лет, и так далее. Единственное на что можно завязываться -- формат строки в файле. Решения, которые работают только с входным файлом из условия, получат максимум 5 баллов.</li>
<li>У файла из условия есть проблема, что в последняя строчка обрезана на середине и программа может работать некорректно.</li>
</ol>
</div>
</body>
</html>