Операции арифметического сдвига применяются в целочисленной арифметике и обозначаются как:
>> — сдвиг вправо;
<< — сдвиг влево.
Общий синтаксис осуществления операции сдвига:
объект = выражение сдвиг КоличествоРазрядов;
Пример:
1
2
3
unsigned char a=6; // a = 0000 0110
unsigned char b;
b = a >> 1; // b = 0000 0110 >> 1 = 0000 0011 = 3
Арифметический сдвиг целого числа вправо >> на 1 разряд соответствует делению числа на 2.
Арифметический сдвиг целого числа влево << на 1 разряд соответствует умножению числа на 2.
Используя логические операции, можно строить условные выражения. Например, реализуем на языке Си следующие задачи, в которых требуется написать выражения для условного оператора.
Пример 1.3.1. Проверить, лежит ли значение переменной x в интервале (1; 5):
if ((x > 1) && (x < 5)) ...
Пример 1.3.2. Проверить, лежит ли значение переменной x вне интервала (1; 5):
if ((x <= 1) || (x >= 5)) ...
В языке Си нет булевого типа. Если значение переменной равно 0, то ее значение считается равным 'ложь' (иначе 'истина'). Так, например, вместо выражения
if (x == 0) ...
можно писать
if (!x) ...
Выражение !x будет истинным, когда x будет ложным. А это возможно лишь в случае, когда x равно нулю.
Пример 1.3.3. Записать условие того, что обе переменные x и y имеют значение 0:
if ((x == 0) && (y == 0)) ...
или то же самое
if (!x && !y) ...
Упражнение 1.3.1. Записать условие того, что переменная х принимает одно из значений множества S = {1, 3, 6}.
Истинное выраженние считается равным 1, ложное выражение считается равным нулю.
Пример 1.3.4. Присвоим целочисленным переменным значения логических выражений и выведем их.
#include < stdio.h >
int i;
void main(void)
{
i = (3 > 4);
printf("%d\n",i); // 0
i = (3 < 4);
printf("%d\n",i); // 1
}
Пусть f(x) и g(x) – некоторые функции, p(x) – предикат. Расмотрим функцию:
Функцию y(x) можно реализовать без использования структуры if … else … . Учитывая значения логических выражений, можно записать:
y(x) = f(x) * p(x) + g(x) * (1 – p(x))
Записи 1 – p(x) и !p(x) эквивалентны.
Алгоритм (алгорифм) – любая конечная последовательность основных математических и логических действий, однозначно определяющих процесс преобразования исходных данных в конечные результаты решения задачи.
Различают следующие виды алгоритмов:
линейный – список команд (указаний), выполняемых последовательно друг за другом;
разветвляющийся – алгоритм, содержащий хотя бы одну проверку условия, в результате которой обеспечивается переход на один из возможных вариантов решения;
циклический – алгоритм, предусматривающий многократное повторение одной и той же последовательности действий. Количество повторений обусловливается исходными данными или условием задачи.
Любая алгоритмическая конструкция может содержать в себе другую конструкцию того же или иного вида, т. е. алгоритмические конструкции могут быть вложенными.Рассмотрим следующие способы описания алгоритма: словесное описание, псевдокод, блок-схема, программа.
Основные свойства алгоритмов:
1. Понятность для исполнителя — исполнитель алгоритма должен знать, как его выполнять.
2. Дискретность — прерывность, раздельность. Алгоритм должен представлять процесс решения задачи как последовательное выполнение простых шагов (этапов).
3. Определенность — каждое правило алгоритма должно быть четким, однозначным и не оставлять места для произвола. Благодаря этому свойству выполнение алгоритма носит механический характер и не требует никаких дополнительных указаний или сведений о решаемой задаче.
4. Результативность (конечность). Это свойство состоит в том, что алгоритм должен приводить к решению задачи за конечное число шагов.
5. Массовость — означает, что алгоритм решения задачи разрабатывается в общем виде, т.е. он должен быть применим для некоторого класса задач, различающихся лишь исходными данными.
Формы представления алгоритмов
На практике наиболее распространены следующие формы представления алгоритмов:
Словесная – запись на естественном языке;
в псевдокодах – полуформализованное описание алгоритма на условном алгоритмическом языке, включающее в себя как элементы языка программирования, так и фразы естественного языка, общепринятые математические обозначения и т.д.;
табличная;
графическая – с помощью графических символов;
программная – запись на искусственном языке (языке программирования).
В рамках структурного программирования задачи, имеющие алгоритмическое решение, могут быть описаны с использованием следующих алгоритмических структур:
|