Я — Максим Александрович Кривчиков
email:
Материалы к занятиям: https://maxxk.github.io/programming-semester-5/
В дисплейных классах рекомендуется просматривать в браузере Firefox.
В нём установлено расширение NoScript, обратите внимание на инструкцию, иначе значительная часть сайтов не будет работать.
Зачёт по теории, письменный, общий (весь курс пишет одновременно).
Для допуска к зачёту нужно сдать решения 3 задач (не считая двух подготовительных на этом занятии).
Каждая последующая задача выдаётся после сдачи предыдущей.
Схема проведения зачётов:
Основной курс со списком вопросов к зачёту:
Материалы по практике:
Командная оболочка Linux: Д. Тейнсли. Linux и Unix: программирование в Shell. Руководство разработчика.
К. Ю. Богачёв. Основы параллельного программирования (для третьей задачи и для следующего семестра).
Разрабатывать и отлаживать можно на своих компьютерах, но сдавать — только на компьютерах в дисплейном классе. Можно приносить задачи на флэшке, лучше всего — через Интернет (отправить себе на почту, сохранить на Яндекс.Диск и т.п.).
В дисплейных классах установлена ОС Fedora 20 со средой рабочего стола KDE. Варианты по получению похожего окружения:
В дисплейных классах установлены специальные настройки компилятора — более строго, чем обычно, контролируется соответствие программ стандарту, кроме того, более широкий класс ошибок приводит к аварийному завершению программы. Как получить близкое поведение на своей машине:
Добавить к командной строке флаги:
gcc -std=c99 -Wall -Werror -Wshadow -pedantic-errors \
-Wpointer-arith -Waggregate-return \
-Wstrict-prototypes -Wmissing-declarations \
-Wlong-long -Winline -Wredundant-decls \
-Wcast-qual -Wcast-align -D__STRICT_ANSI__
Активировать исключения underflow для чисел с плавающей точкой:
// В начале файла:
#include <fenv.h>
// В начале функции main:
fenableexcept(FE_DIVBYZERO | FE_INVALID
| FE_OVERFLOW | FE_UNDERFLOW);
Данные учётной записи для входа я выдам на одном из следующих занятий.
Пока что:
Данные, сохранённые в домашнем каталоге учётной записи student не сохраняются после перезагрузки.
Для редактирования исходного кода лучше всего использовать:
В терминале:
Вызов терминала в дисплейных классах:
Правой кнопкой мыши на рабочем столе ⟶ Konsole
Запуск программы из текущего каталога:
./task-19 test-1.in
Переход между каталогами:
cd ~/task-19
Специальные символы:
~
— домашний каталог (Shift + клавиша слева от 1)..
— переход на один уровень вверхВывод содержимого каталога: ls
Сборка программы из нескольких файлов:
gcc -o task-19 main.c task-19.c
в несколько этапов:
gcc -c -o main.o main.c
gcc -o task-19 main.o task-19.o
Аргументы командной строки для компилятора:
#include <stdio.h>
FILE *f;
f = fopen(fileName, mode); // открыть файл
"r"
— чтение"w"
— запись (если файл уже существует, он будет перезаписан, т.е. его содержмое будет удалено)"a"
— добавление в конец файлаf == 0
.fclose(f) // закрыть файл
при ошибке возвращает EOF
Вывод:
printf("x = %e", x) // на экран
fprintf(f, "x = %e", x) // в файл `f`
Чтение: fscanf(f, " %lf ", &x)
возвращает количество успешно считанных аргументов,
EOF при ошибке перед первым аргументом.
Спецификаторы форматирования:
%c
— char
%s
— char*
%d
— int, long, ...
%f
— вывод double
%lf
— ввод double
%e
— вывод double
, экспоненциальная запись, лучше не использовать для scanf
#include <math.h>
Сравнение: a == b
— для чисел с плавающей точкой использовать нельзя.
// в начале файла:
#define EPS 1e-16
// в программе: | a - b | < ε
fabs(a - b) < EPS
max(a, b) ⟼ fmax(a, b)
; min(a, b) ⟼ fmin(a, b)
(-std=c99)
\(e^x\) ⟼ exp(x)
; ln x ⟼ log(x)
; \(x^y\) ⟼ pow(x, y)
sin, cos, tan, asin, acos, atan, sinh, ...
\(\sqrt{x}\) ⟼ sqrt(x)
; \(\sqrt{x^2+y^2}\) ⟼ hypot(x, y)
\(⌈x⌉\) ⟼ ceil(x)
; \(⌊x⌋\) ⟼ floor(x)
$ x · sgn^*(y)$ ⟼ copysign(x, y)
(\(sgn^*(0) ≡ 1\))
\(x · y + z ⟼\) fma(x, y ,z)
(округляется только результат)
$ y = [x], z = { x } ⟼$ z = modf(x, \&y)
sequence последовательность
min (minimum), max (maximum)
Fibbonacci, Pell
average среднее
monotonic монотонная
increasing возрастающая
decreasing убывающая
non-increasing, non-decreasing
constant постоянная
element элемент
greater than, less than
В конце занятия нужно выслать исходный код ваших программ мне на электронную почту ()