Практическое занятие ОПЕРАЦИИ (арифметические, присваивание) Преподаватель: Доцент Кафедры ВС, к.т.н. Поляков Артем Юрьевич © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» ФГОБУ ВПО "СибГУТИ" Кафедра вычислительных систем Дисциплины "ЯЗЫКИ ПРОГРАММИРОВАНИЯ" "ПРОГРАММИРОВАНИЕ"
Арифметические операции © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 2 Класс Опер.ОписаниеПример Унарная -Изменение знакаint k = -z; +Изменение знака (исп. редко)- Бинарная + Аналогичны математическим операциям z = a + b; -z = a – b; *z = a * b; / Деление char/short/int/long – целая часть от деления float/double/long double – арифметическое z = a / b; % остаток от деления (только целые: char/short/int/long) z = a % b;
Целочисленная арифметика (на базе отрезков) © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 3 a b (b / a), (b % a) (b / a)(b % a) (a / b), (a % b) (a % b)(a / b) = 0 a = (a / b)b + (a % b)
Задача 1. Вычисление целой и дробной части от деления © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 4 #include int main() { int a, b; printf("Input dividend: "); scanf("%d",&a); printf("Input divisor: "); scanf("%d",&b); printf("(%d/%d) = %d\n",a,b,a/b); printf("(%d%%d) = %d\n",a,b,a%b); return 0; }
Задача 2. Определение четности числа © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 5 Что является признаком четности числа?
Задача 2. Определение четности числа © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 6 Что является признаком четности числа? Четное число делится на 2 без остатка! #include int main() { int i; printf("Input integer: "); scanf("%d",&i); printf("parity of %d is: %d\n",i, i%2); return 0; } parity of 15 is: 1 parity of 16 is: 0 parity of 17 is: 1 parity of 18 is: 0 parity of 15 is: 1 parity of 16 is: 0 parity of 17 is: 1 parity of 18 is: 0
Задача 3. Определить, является ли число четным © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 7 Что является признаком четности числа? Четное число делится на 2 без остатка! #include int main() { int i; printf("Input integer: "); scanf("%d",&i); printf("parity of %d is: %d\n",i, 1-i%2); return 0; } 15 is even: 0 16 is even: 1 17 is even: 0 18 is even: 1 15 is even: 0 16 is even: 1 17 is even: 0 18 is even: 1
Задача 4. Распределение вариантов © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 8 Преподаватель подготовил N вариантов заданий, их нужно распределить между M студентами. Если M N, то каждый студент получает уникальный вариант. Если M > N, то распределение производится следующим образом: 1. Первые N студентов получают задания, которые совпадают с их номерами. 2. Студент с номером (N+1) выполняет 1-е задание, с номером 2N – N-е задание и так далее. На вход программы поступает количество N вариантов и порядковый номер i студента в списке преподавателя. Определить вариант, который необходимо выполнить студенту.
Закономерности © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 9 iВариантi % Ni % (N+1) N = 4
Закономерности © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 10 iВариантi % Ni % (N+1) N = 4
Закономерности © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 11 iВариантi % N(i – 1) % N N = 4
Закономерности © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 12 iВариант(i – 1) % N(i – 1) % N N = 4
© Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 13 #include int main() { int N, M, i; printf("Input N, i: "); scanf("%d %d",&N, &i); printf("var = %d\n", (i-1) % N + 1); } Задача 4. Распределение вариантов (решение)
Операции присваивания © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 14 Класс Опер.ОписаниеПример Унарная ++ префиксный инкремент++i; постфиксный инкрементi++; -- префиксный декремент--i; префиксный декрементi--; Бинарная =присваиваниеi = j; += присваивание вида: a = b; трактуется как a = a b; например: a += b; эквив. a = a + b; i += j; -=i -= j; *=i *= j; /=i /= j; %=i %= j;...
Базовая операция '=' © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» y 5 5 eax 4 4 edx a 10 eax I 4 4 z 9 9 II... int z = 4, y = 5, a; a = z + y + 1;... int z = 4, y = 5, a; a = z + y + 1;... CAT&T assembly syntax movl $4, -4(%ebp) movl $5, -8(%ebp) movl -8(%ebp), %eax movl -4(%ebp), %edx leal (%edx,%eax), %eax addl $1, %eax movl %eax, -12(%ebp) movl $4, -4(%ebp) movl $5, -8(%ebp) movl -8(%ebp), %eax movl -4(%ebp), %edx leal (%edx,%eax), %eax addl $1, %eax movl %eax, -12(%ebp) 5 5 eax 4 4 edx eax III 1 1 const! + V
Задача 5. Обмен значениями двух ячеек © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 16 Данная задача является базовой в программировании. Она возникает при решении многих задач, например, сортировке данных. В классическом варианте для ее решения используется дополнительная переменная. Код обмена в этом случае выглядит так: int a, b; int t; a = 5; b = 6;... t = a; a = b; b = t; 5 5 t 5 5 a 6 6 b I 5 5 t 6 6 a 6 6 b II 5 5 t 6 6 a 5 5 b III
Задача 5. Обмен значениями двух ячеек © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 17 int a, b; int t; a = 5; b = 6;... t = a; a = b; b = t; Разработать программу, демонстрирующую работу данного алгоритма аналогично иллюстрации. 5 5 t 5 5 a 6 6 b I 5 5 t 6 6 a 6 6 b II 5 5 t 6 6 a 5 5 b III
Задача 6. Обмен значениями двух ячеек (без использования вспомогательной) © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 18 Существует два способа решения данной задачи: 1.На основе операции сложения. 2.На основе поразрядной операции XOR (сложение по модулю 2). Предложите свое решение на основе операции сложения! Разработать программы, демонстрирующие работу обоих алгоритмов обмена.
Операция XOR © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 19 Исключающее ИЛИ ( XOR,, в языке СИ – ^ ) обеспечивает применение операции "сложение по модулю 2" к каждому разряду ячейки памяти = = ^ 15 = = ^ Сложение по модулю 2 – остаток от деления полученной суммы на 2: z = (x + y) % 2 xyx + y x y Например: char c1 = 20, c2 = 15, c3 = c1 ^ c2;
Свойство XOR © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 20 xyx + y x yy = x y xx = x y y x x y y I x y y y II x y x y y II x y x x x y y x x x = x ^ y y = x ^ y x = x ^ y
Задания для самостоятельного решения © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 21 Форма отчетности: исходные коды и тестовые данные. На рис. 1 и 2 показана разметки двух серверных помещений, разбитых на прямоугольные фрагменты линиями на полу. Это сделано для упрощения поиска оборудования и инвентаризации. Каждая прямоугольная область имеет порядковый номер (указан внутри). Для упрощения их поиска введена двумерная нумерация, показанная на рисунках сбоку. П2.1. Разработать программу, которая по уникальному номеру прямоугольной области определяет ее двумерные координаты в обоих серверных помещениях. П2.2. Разработать программу, которая по двумерным координатам области определяет ее порядковый номер рис рис. 2
Преобразование типов данных © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 22 Типы данных имеют различное представление в памяти При присваивании происходит преобразование типа данных rvalue к типу данных lvalue. rvalue целыйвеществ. lvalue целый 1)диапазон rv = lv - простое копирование: 1010 = )диапазон rv < lv - добавление незначащих нулей: )диапазон rv > lv - отбрасывание старших разрядов: )отбрасывание дробной части: )если целая часть не помещается в диапазон lvalue, то результат не определен: float f = 1E20; веществ. Возможно отбрасывание младших разрядов, не попадающих в мантиссу: i = , f = i = , f = i = , f = )диапазон rv = lv - простое копирование. 2)диапазон rv < lv - добавление незначащих нулей: )диапазон rv > lv возможно переполнение: +/-inf или обнуление.
Задания для самостоятельного решения © Кафедра вычислительных систем ФГОБУ ВПО «СибГУТИ» 23 Форма отчетности: исходные коды и тестовые данные (не менее 10 наборов для каждой задачи, если это допускается должны быть как отрицательные, так и положительные числа) для приведенных ниже задач. 1.округление в большую сторону