Тематический план
-
-
Внимание!
Всем студентам МН-101 до 23:59 19 марта 2020 года:
1. Скачать и установить Microsoft Teams.
2. Зайти под учетной записью студента ЧелГУ (логин и пароль можно уточнить в деканате).
3. Запустить приложение и присоединиться к группе МН-2019 по коду cgc3ae2
4. Написать в общем чате приветствие, чтобы я увидел, что вы присоединилис.
5. Отправить ссылку на эту инструкцию всем одногруппникам, которым можете.
-
-
-
Прочитать разделы 3.1 и 3.2
Что нужно освоить:
- Перевод чисел из произвольной системы счисления в десятичную (в том числе - дробных)
- Перевод чисел из десятичной системы счисления в произвольную
- Арифметические операции в произвольной системе счисления (в том числе - умножение)
- Быстрый способ перевода между двоичной, восмеричной и шестнадцатеричной системами счисления.
-
-
-
-
Прочитать главу 3. "Типы данных".
Вопросы:
- Какие переменные нельзя использовать?
- Сколько бит занимает каждый целочисленный тип данных?
- Примерные диапазоны значений целочисленных типов данных в Си?
- Что такое целочисленные литералы? Как их использовать?
- Зачем нужен квалификатор const?
- Сколько бит занимает каждый вещественный тип данных?
- Какова приблизительная точность вещественных типов данных в Си?
- В каком порядке выполняются арифметические операции в Си?
- В каком случае операция деления возвращает дробное значение, а в каком - округляет его до целого?
- При переходе от каких типов к каким мы рискуем потерять данные? Можем перевести unsigned short в int? А double - в int? А double - во float?
-
Проанализировать презентацию. Ответить себе на вопросы:
- Как закодировать число в дополнительном коде?
- Как избежать ошибок из-за переполнения?
- Что такое экспоненциальная форма записи числа?
- Как закодировать число с плавающей точкой?
- Какие избежать ошибок округления при использовании чисел с плавающей точкой?
-
-
-
Шаги:
- Зайти на ipc.susu.ru
- В меню слева выбрать "Рабочее место участника"
- Найти строку "Ввод-вывод (проводит csu для МН-2019-1)" и справа от нее нажать кнопку "Выбрать".
- Перейти во вкладку "Задачи" и решить их.
- В каждой задаче при помощи ссылки "Послать решение" отправить на проверку ваш код.
- По окончание выполнения задания через ответ на это задание отправьте мне сообщение о завершении.
-
-
Прочитать главу 3. "Типы данных".
Да, вы это уже делали. Однако не поленитесь сделать это ещё раз. Это очень хорошая глава! Ответы на записанные ниже вопросы должны отлетать у вас от зубов.
Вопросы:
- Какие переменные нельзя использовать?
- Сколько бит занимает каждый целочисленный тип данных?
- Примерные диапазоны значений целочисленных типов данных в Си?
- Что такое целочисленные литералы? Как их использовать?
- Зачем нужен квалификатор const?
- Сколько бит занимает каждый вещественный тип данных?
- Какова приблизительная точность вещественных типов данных в Си?
- В каком порядке выполняются арифметические операции в Си?
- В каком случае операция деления возвращает дробное значение, а в каком - округляет его до целого?
- При переходе от каких типов к каким мы рискуем потерять данные? Можем перевести unsigned short в int? А double - в int? А double - во float?
-
Шаги:
- Зайти на ipc.susu.ru
- В меню слева выбрать "Рабочее место участника"
- Найти строку "Выражения (проводит csu для МН-2019-2)" и справа от нее нажать кнопку "Выбрать".
- Перейти во вкладку "Задачи" и решить их.
- В каждой задаче при помощи ссылки "Послать решение" отправить на проверку ваш код.
- По окончание выполнения задания через ответ на это задание отправьте мне сообщение о завершении.
-
-
Практическое задание
Что сделать: решить не менее 3 задач на acmp.ru из каждой темы:
-
-
Что сделать: прочитать прочитать темы 4 и 5 "Циклы" и "Методы отладки программ".
Вопросы для самоконтроля:
- Что такое тело цикла?
- Зачем в объявлении цикла for в круглых скобка обязательно должны быть две ; (точки с запятой)?
- Что такое бесконечный цикл? Придумайте пример бесконечного цикла.
- Где бывает полезен бесконечный цикл? (необязательный вопрос для самостоятельного поиска)
-
Практическое задание
Что сделать: решить не менее 3 задач на acmp.ru из каждой темы:
-
-
-
Прочитать из главы 4. "Составные типы данных" следующие части.
Страницы 131 - 136.
Страницы 166 - 184.
Вопросы для самоконтроля:
- Как создать массив?
- Как заполнить массив значениями?
- Что такое указатель?
- Если к указателю типа double применить операцию инкремента, что произойдет?
- Как создать динамический массив?
- Для чего нужна операция delete?
-
Практическое задание
Что сделать: решить не менее 50% задач на массивы на acmp.ru из следующих тем.
-
-
Практическое задание
Что сделать: решить не менее 3 задач из каждого раздела:
-
-
Вам необходимо выучить следующие алгоритмы сортировок:
- Пузырьковая сортировка
- Сортировка вставками
- Сортировка выборкой
- Быстрая сортировка
- Пирамидальная сортировка
Для тех, кто хорошо понимает программирование - дополнительно изучить алгоритм поразрядной сортировки.
Как понять, достаточно ли хорошо вы знаете алгоритм? Если вы можете написать его с нуля на С/С++, не подглядывая в шпаргалки, вы хорошо знаете алгоритм.
-
Вводное задание:
- Создать массив из N случайных чисел.
- Отсортировать его всеми указанными алгоритмами.
-
Задание:
- Создать массив из N случайных чисел.
- Отсортировать его всеми указанными алгоритмами.
В ответе на это задание вам нужно прислать файл .cpp, в котором:
- в функции main создается массив, заполняется случайными числами, выводится на экран результат
- помимо функции main реализуются 5 функций сортировок (по одной на каждый изученный алгоритм сортировки); каждая функция принимает массив и сортирует его
-
-
-
Что сделать: прочитать прочитать темы 3 и 4. "Матрицы" и "Массивы символьных строк".
Вопросы для самоконтроля:
- Что такое матрица?
- Как ее объявить?
- Как задать начальные значения элементов?
- Как считать данные в матрицу и вывести данные из матрицы на экран?
- Как создать массив символьных строк?
- Как считать в него данные из консоли?
-
Упражнения на простейшие действия с матрицами для самостоятельной тренировки:
- Создать небольшую матрицу (2х3 или 3х4 и т.п), считать в нее данные из консоли и вывести из нее данные в консоль.
- Заполнить всю матрицу числами 99.
- Заполнить матрицу случайными числами от 0 до 99 при помощи выражения (rand() % 100)
- Заполнить матрицу нулями, а главную диагональ - единицами
- Вывести 2 строку матрицы. Вывести 1 столбец матрицы.
- Вывести максимальные элементы для каждого столбца.
- Посчитать сумму элементов в каждой строке матрицы. Вывести в консоль наибольшую сумму.
Эти упражнения имеет смысл выполнить, если вы плохо понимаете тему. Если вы с первого взгляда примерно представляете код решения на Си, сразу переходите к задачам на acmp.ru.
-
Практическое задание
Что сделать: решить все задачи из раздела:
Решить любую задачу из раздела:
Решить любые две задачи из раздела:
Примечание: задача "Миша и негатив" не засчитывается - ее мы выполнили на занятии.
-
-
Зачет по технологии программирования выставляется после подсчета промежуточных баллов.
40 баллов Полностью выполненные задания из курса в
Moodle http://moodle.uio.csu.ru/course/view.php?id=142520 баллов Каждая решенная в аудитории задача во время зачета.
Задачи берутся из домашних работ и разобранных в
на занятиях.5 баллов Правильный ответ на дополнительный вопрос.
Вопросы берутся из курса Moodle
http://moodle.uio.csu.ru/course/view.php?id=1425Для получения зачета необходимо набрать не менее 50 баллов.
Если какой-либо пункт выполнен частично, засчитывается пропорционально количество баллов. Например, вы выполнили половину задач на самостоятельную работу, решили в классе две задачи и ответили на один вопрос из трех. Ваш результат будет - 20 + 30 + 5 = 55 баллов, зачет.
Автомат могут получить те, кто прорешает не менее 90% задач из курса “Язык программирования С++” с acmp.ru.
-
Зачет по информатике состоит из теста и решения задачи:
-
Тест по темам “Системы счисления” и “Представление данных в ЭВМ” из 8 заданий.
-
Задача по выбору преподавателя из задач с acmp.ru, которые давались на самостоятельную работу (темы “Массивы”, "Сортировки" и “Двумерные массивы”).
Для получения зачета необходимо получить не менее 50% правильных ответов в тесте и решить задачу.
Автомат могут получить те, кто прорешает не менее 90% задач из курса “Язык программирования С++” с acmp.ru.
-
-
Вопросы по технологии программирования:
- Какие переменные нельзя использовать?
- Сколько бит занимает каждый целочисленный тип данных?
- Примерные диапазоны значений целочисленных типов данных в Си?
- Что такое целочисленные литералы? Как их использовать?
- Зачем нужен квалификатор const?
- Сколько бит занимает каждый вещественный тип данных?
- Какова приблизительная точность вещественных типов данных в Си?
- В каком порядке выполняются арифметические операции в Си?
- В каком случае операция деления возвращает дробное значение, а в каком - округляет его до целого?
- При переходе от каких типов к каким мы рискуем потерять данные? Можем перевести unsigned short в int? А double - в int? А double - во float?
- Как вычисляется логическое выражение?
- Что такое &&, || и !=?
- В каких случаях можно не ставить фигурные скобки { }?
- Если в теле оператора switch не ставить break; что будет?
- Что такое тело цикла?
- Зачем в объявлении цикла for в круглых скобка обязательно должны быть две ; (точки с запятой)?
- Что такое бесконечный цикл? Придумайте пример бесконечного цикла.
- Где бывает полезен бесконечный цикл? (необязательный вопрос для самостоятельного поиска)
- Как создать массив?
- Как заполнить массив значениями?
- Как найти максимальный или минимальный элемент в массиве?
- Что такое указатель?
- Если к указателю типа double применить операцию инкремента, что произойдет?
- Как создать динамический массив?
- Что такое функция?
- Что такое параметры функции? Что такое возвращаемое значение функции?
- Как происходит вызов функции?
- Что такое прототип функции? Что такое определение функции?
- Как создать библиотеку функций?
- Квадратичные сортировки. Сортировка выборкой. Сортировка обменом ("пузырьковая").
- Улучшенные сортировки. Пирамидальная сортировка. Быстрая сортировка.
- Что такое матрица? Как ее объявить? Как задать начальные значения элементов?
- Как считать данные в матрицу и вывести данные из матрицы на экран?
- Как уложить матрицу в одномерный массив?
- Как динамически создать матрицу и как передать ее на обработку в функцию?
-
-
-
-
Что сделать: прочитать прочитать тему 2. "Символьные строки".
Вопросы для самоконтроля:
- Что такое символьная строка в языке Си?
- Как создать переменную для работы со строкой?
- Как считать в переменную строку из консоли?
- Как вывести строку на экран?
- Что такое ASCII-таблица? Как вывести на экран код символа?
- Чем в Си одинарные кавычки ' ' отличаются от двойных " "?
- Как обработать строку посимвольно с помощью цикла?
- Какие есть функции в библиотеке ctype.h? Напишите код, в котором используется какая-нибудь из функций ctype.h
- Какие есть функции в библиотеке string.h? Как их использовать?
-
Практическое задание
Что сделать: решить задачи B, C, D на acmp.ru из следующих тем:
-
-
-
-
Что читать: Глава 4. Темы: "Списки" и "Стеки, очереди, деки". Страницы 2 - 17.
Что делать:
- Своими руками реализовать стек
- Решить задачу на скобки из презентации
- Вспомнить пароль от ipc.susu.ru и решить задачи на стек.
-
Шаги:
- Зайти на ipc.susu.ru
- В меню слева выбрать "Рабочее место участника"
- Найти нужную тему и справа от нее нажать кнопку "Выбрать".
- Перейти во вкладку "Задачи" и решить их.
- В каждой задаче при помощи ссылки "Послать решение" отправить на проверку ваш код.
Примечание: задачи должны быть решены с использованием ваших реализаций стека и очереди на основе списка. Использовать стандартные классы С++ (например, <stack>) в данном случае запрещается.
-
-
-
Прочитать введение в класс string: стр. 146 - 152
http://cppstudio.com/post/6110/
Прочитать про функции класса string: http://ru.cppreference.com/w/cpp/string/basic_string
Вопросы для самоконтроля:
- Как создать переменную типа string, и присвоить ей строку?
- Как объединить две строки?
- Как определить размер строки?
- Как найти позицию, на которой стоит некоторый символ в строке?
-
Задания для разминки:
- Считать из консоли строку и вывести ее же в консоль.
- Считать из консоли две строки, объединить их в третьей строке. Третью строку вывести в консоль.
- Создать строку и вывести в консоль 1, 3 и 7 символы подряд.
- Вывести из строки кусочек с 3 по 10 символы при помощи функции substr
- Найти в строке 2 и 3-ий символы пробелов при помощи функции find
- Вырезать из строки второе слово при помощи функций find и erase (слова в строке отделяются пробелами, без дополнительных сложностей)
-
Самостоятельно решить не менее 2 задач из темы Строковой тип string
Дополнительное задание для "продвинутых" - решить более половины!
-
-
-
Задания для разминки:
- Создать стек на 5 элементов типа string.
- Считать в стек 5 строк из консоли.
- Вывести в консоль количество элементов в стеке.
- Пока стек не пустой, выводить элементы из него в консоль.
В итоге у вас должны получиться те же 5 строк, которые вы ввели, но в обратном порядке!
-
Внимание! Те, кто забыл пароль от ipc.susu.ru и не может его восстановить, должны зарегистрироваться заново и прислать мне скриншот ваших регистрационных данных в канале группы в Teams.
Шаги:
- Зайти на ipc.susu.ru
- В меню слева выбрать "Рабочее место участника"
- Найти соревнование "Класс stack" и справа от нее нажать кнопку "Выбрать".
- Перейти во вкладку "Задачи" и решить их.
- В каждой задаче при помощи ссылки "Послать решение" отправить на проверку ваш код.
При решении задач можно использовать материалы из прилагаемого файла. При решении задачи "Спичрайтер Йоды" можно воспользоваться конструкцией while(cin >> str), чтобы читать слова из потока входных данных.
-
-
Читаем хороший и очень подробный материал по классу vector!
- http://cppstudio.com/post/8453/
- http://cppstudio.com/post/8457/
- http://cppstudio.com/post/8670/
- http://cppstudio.com/post/9033/
- http://cppstudio.com/post/9178/
Не забываем прочитать техническое описание класса vector и примерно запомнить, какие у него есть полезные функции-члены: http://ru.cppreference.com/w/cpp/container/vector
-
Задание для разминки:
- Создать вектор элементов double на 10 элементов.
- Всем элементам присвоить значения 777.
- Добавить 3 элемента в конец вектора и 2 элемента - в начало.
- Считать по 2 элемента из конца и начала вектора.
- Вырезать из вектора элементы с 3 по 5.
- Вывести при помощи итератора элементы со 2 по предпоследний.
- При помощи итератора в цикле посчитать сумму всех элементов вектора.
- Реализовать сортировку вставками на векторе.
После каждого действия выводите вектор на экран, чтобы были видны изменения.
-
Решить с использованием класса vector задачи с АСМР:
-
Шаги:
- Зайти на ipc.susu.ru
- В меню слева выбрать "Рабочее место участника"
- Найти нужную тему и справа от нее нажать кнопку "Выбрать".
- Перейти во вкладку "Задачи" и решить их.
- В каждой задаче при помощи ссылки "Послать решение" отправить на проверку ваш код.
При решении задач использовать класс vector. Действия, в которых требуется обработать элементы вектора с i по j, выполнять через итераторы!
-
-
-
Задание для разминки:
- Создать список на 10 элементов float.
- Вставить в начало 0.0, в конец - 999.9, в середину - -1.9.
- Удалить из списку все повторяющиеся элементы.
- Стереть с 3 по 5 элементы списка.
- Удалить из списка все элементы, меньше нуля.
- При помощи итератора посчитать сумму все элементов в списке.
После каждого действия выводить весь список на экран, чтобы видеть его изменения.
-
-
Задание для разминки:
- Создать очередь элементов типа string.
- Записать в очередь 4 слова.
- Вывести в консоль первое и последнее слово, удалить первое слово из очереди.
- Вывести в консоль число слов, оставшихся в очереди.
- Вывести из очереди в консоль все оставшиеся слова.
-
Внимание! Нужно выбрать соревнование на Класс queue, в котором 2 задачи.
Шаги:
- Зайти на ipc.susu.ru
- В меню слева выбрать "Рабочее место участника"
- Найти нужную тему и справа от нее нажать кнопку "Выбрать".
- Перейти во вкладку "Задачи" и решить их.
- В каждой задаче при помощи ссылки "Послать решение" отправить на проверку ваш код.
-
К задаче можно перейти по ссылке.
Подсказка: эта задача решается не классом queue. Догадаетесь, при помощи какого класса ее решать?
-
-
Задание для разминки:
- Создать set для целочисленных элементов.
- Добавить первые 5 простых чисел (целых).
- Удалить первый элемент.
- Вставить 4 случайных чётных числа и затем удалить "первые" 2 числа множества.
- Вывести в консоль количество элементов.
- Проверить на пустоту set.
- Вывести максимальное значение из всех элементов.
- Вывести все элементы в контейнере.
- Очистить контейнер set.
-
-
Что читать:
Хорошая статья по использованию класса map:
Хорошая статья по использованию лямбда-функций:
https://habrahabr.ru/post/66021/
Ещё одна хорошая статья:
-
Задания для разминки:
- Создать ассоциативный массив.
- Записать в него 10 элементов.
- Вывести все элементы на экран при помощи цикла с использованием итератора.
- Применить функции insert(), erase(), find().
-
Написать программы с использованием лямбда функций:
- Создать вектор из 10 элементов.
- При помощи лямбда-функции заполнить его случайными значениями от 1 до 99
- При помощи лямбда-функции вывести все четные элементы
- При помощи лямбда-функции вывести номера всех нечетных элементов
- При помощи лямбда-функции посчитать все элементы больше 0
- Создать map из пар число-слово и заполнить 10 элеметами
- При помощи лямбда-функции вывести все слова, в которых больше 3 букв
-
Задание для команды "Пчёлки":
- Что такое класс map?
- Зачем он нужен?
- Пример использования класса map.
Задание для команды "HTML - язык программирования":
- Что такое лямбда-функции?
- Для чего они нужны?
- Пример использования лямбда-функци.
-
Написать программы с использованием лямбда функций:
- Создать вектор из 10 элементов.
- При помощи лямбда-функции заполнить его случайными значениями от 1 до 99
- При помощи лямбда-функции вывести все четные элементы
- При помощи лямбда-функции вывести номера всех нечетных элементов
- При помощи лямбда-функции посчитать все элементы больше 0
- Создать map из пар число-слово и заполнить 10 элеметами
- При помощи лямбда-функции вывести все слова, в которых больше 3 букв
Необязательное задание: создайте структуру для хранения комплексного числа
struct Complex {
double real;
double img;
}Создайте вектор для хранения комплексных чисел. При помощи библиотеки algorithm и лямбда-функций сгенерируйте в вектор случайные комплексные числа. Затем отсортируйте их.
Результат отправить в виде текста программ через кнопку "Послать решение".
Внимание!
На проверку принимаются только файлы PDF. Откройте любой текстовый редактор (например, Word), выберите шрифт Courier New , вставьте текст ваших программ и сохраните файл в формате PDF. Главное - чтобы сохранились переходы на новую строку и отступы, иначе ваши программы будет невозможно читать.
-
-
-
Вводное задание:
- Перегрузить оператор потокового ввода >>
- Перегрузить оператор потокового вывода <<
- Перегрузить оператор сравнения "меньше" <
- Перегрузить оператор сложения +
- Перегрузить оператор вычитания -
(обходимся без отрицательных чисел: уменьшаемое заведомо больше вычитаемого) - Реализовать две перегрузки оператора умножения: умножение длинного на длинное и умножение длинного на unsigned int.
- Реализовать оператор деления / длинного числа на unsigned int.
- Реализовать оператор взятия целочисленного остатка от деления % длинного числа на unsigned int.
- Реализовать оператор присвоения = значения из unsigned int в длинное.
-
Что сделать: решить задачи на длинную арифметику на acmp.ru
- Сложение и вычитание - решить задачи А, B, C, D, E.
- Умножение и деление - решить задачи А, B, C, D, E. F, G, H, I.
-
-
-
Что делать:
- Своими руками реализовать Дерево
- Своими руками реализовать функцию добавления элемента в двоичное дерево поиска
- Реализовать функцию поиска в дереве
- Реализовать функции правого и левого обхода дерева
Внимание!
На проверку принимаются только файлы PDF. Откройте любой текстовый редактор (например, Word), выберите шрифт Courier New , вставьте текст ваших программ и сохраните файл в формате PDF. Главное - чтобы сохранились переходы на новую строку и отступы, иначе ваши программы будет невозможно читать.
-
-
Список алгоритмов, которые нужно реализовать:
- Нахождение циклов в графе
- Построение минимального остовного дерева (алгоритм Прима-Краскала)
- Нахождение минимального пути из заданной вершины в произвольную (алгоритм Дейкстры)
- Нахождение минимальных расстояний между всеми вершинами графа (алгоритм Флойда-Уоршелла)