=== Лекция 1: Введение === * Введение * О курсе * Структура занятий: * Вопросы в начале каждой пары (вопросы заранее на pr1@) * Самостоятельная работа c MOOC * Об инструментах: * IDE vs simple tools * default toolchain * editor, compiler, linker * gcc * git (кратко) * make * Модель вычислений в архитектуре Фон-Неймана * Обзор парадигм/стилей программирования * Императивный * Декларативный * Функциональный * Исполнение программ. Компиляция и интерпретация. * О языке C. Процесс компиляции программы. * Введение в синтаксис. Составные элементы программы. Hello World. * Справочные материалы: * **KRC** Керниган, Ритчи. Язык программирования Си * **KRU** Керниган, Пайк. Программное окружение Unix * **GIT** С.Чансон. [[https://cloud.github.com/downloads/GArik/progit/progit.ru.pdf|Pro git]] * Домашнее задание: * **KRC** главы 1-3. Изучить, подготовить вопросы. * **GIT** 1.1--1.3, 2.* === Лекция 2 === * вопросы и ответы * getchar/putchar, EOF * sleeps * отличия С от С++ * K&R 1-3 Обзор, примеры * RCS, git * Типы и их представление в памяти * Начальные сведения об указателях * Консольный ввод-вывод == Полезная информация == * [[ https://stepik.org/course/Введение-в-архитектуру-ЭВМ-Элементы-операционных-систем-65| Введение в Арх ЭВМ и ОС (Модуль 1.2 Бинарные числа и логические операции)]] -- Для доступа требуется войти под свои аккаунтом Stepik === Лекция 3 === ==Практические задачи ввода вывода== * Указатели. Передача аргументов функции с использованием указателей. * Ввод форматированных данных через scanf, используя несколько параметров разного типа в сроке. Например "%s %d %x". Обратить внимание на вводы строк: адрес первого элемента массива, адрес строки. * Пример на обработку возвращаемых значений printf/scanf * Демонстрация ввода массива (из файла с помощью перенаправления). Вычисление значения по всем элементам, например суммы * Строки как массивы символов с нулевым символом на конце * Ввод строк. Использование fgets вместо потенциально опасных для строк gets и scanf * Построение диалоговой системы (Цикл: приглашение системы и вопрос -> ввод пользователем ответов -> интерпретация ответа) * Демонстрация последствий использования gets (модификация других переменных вследствие переполнения буфера) * Примеры на печать и чтение из/в строки (функции sscanf, sprintf) * Интерпретация кодов символов. Например программа считывает из стандартного потока бинарный набор байт и печатает его побайтно в виде 16-ричных кодов. Затем в виде целых беззнаковых short. Бинарным потоком может являться сам исподняемый файл, т.е. ./a.out <./a.out Также для справки см. hexdump -C === Тема 4. === * Исполнение программ. Компиляция и интерпретация. * Обзор парадигм/стилей программирования * Императивный * Декларативный * Функциональный * Массивы * Функции и рекурсия * Снова про указатели === Лекция 5 === * Отправка решений на pr1@ ( тема письма "Фамилия Имя, группа, решение 01" ) * Результаты прохождения stepik * Анонс дополнительных занятий * Передача параметров/возврат значений более детально * Сравнение чисел с плавающей точкой с определенной точностью. === Лекция 6 === * Стек * Динамическая память * Передача указателей в функцию * Операции со строками === Лекция 7 === * опрос * экзамены * доп занятия * контрольная * объединения * рекурсия и циклы == Примеры с лекции == * https://github.com/moevm/pr1-samples/blob/master/2016-11-03-20-58.18/main.cpp === Лекция 8 === * Объединения и массивы * Понятие файла == Примеры с лекции == * https://github.com/moevm/pr1-samples/blob/master/2016-11-03-20-34.11/main.cpp