Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Основы разработки программ на языке С++ для систем информационной безопасности. Учебное пособие
.pdf
5.5. Манипуляторы потока
31
Окончание табл. 8
№
вар.
Входные данные
Представление выходных данных
11
20 целых чисел типа unsigned
longint
Вывести первые 15 чисел, остальные отбросить
12
10 целых чисел типа int со знаком в
восьмеричной системе счисления
Вывести 30, остальные отбросить
3
10 целых чисел типа int со знаком в
десятичной системе счисления
Каждые 20 символов выполнять
перенос строки
14
Вещественный формат двойной
точности (10 чисел с плавающей
точкой типа double). *Ввести с клавиатуры число А для сравнения
Вывести числа, больше чем А
15
15 целых чисел типа short со знаком
в шестнадцатеричной системе счисления
После каждой цифры 9 выполнять
вертикальную табуляцию

5. Структура программы на С++
32
6. ПЕРЕМЕННЫЕ ПРОГРАММЫ
И ОБЛАСТИ ИХ ДЕЙСТВИЯ
Всякая переменная программы “возникает” в момент выделения памяти для размещения её значения. Переменная “исчезает”, когда выделенная
память возвращается в разряд свободных ресурсов памяти. Интервал времени между этими событиями называют “временем жизни” элемента, а участок программного кода, где используется переменная – областью действия.
Область действия переменной определяются следующим:
1. границей программного блока (табл. 9). В языке С++ программ-
ный блок заключен в фигурные скобки. Переменная действует во всех вложенных блоках. В примере это целочисленная переменная с именем х;
2. телом функции, для которой объявленные переменные являются
параметрами (табл.10). Параметр х функции SomeFunction может использоваться как переменная только внутри этой функции;
Таблица 9
Зона действия переменной внутри программного блока
Программный блок
{
int X;
{
. . .
}
. . .
}
Область видимости переменных – это те части программы, в которой
пользователь может изменять или использовать переменные в своих нуждах.
В C++ существуют отдельные блоки, которые начинаются с
открывающей скобки ({) и заканчиваются соответственно закрывающей
скобкой (}). Такими блоками являются циклы (for, while, do while) и
функции.
Если переменная была создана в таком блоке, то ее областью
видимости будет являться этот блок от его начала (от открывающей
скобки – { ) и до его конца (до закрывающей скобки – } ), включая все
дочерние блоки созданные в этом блоке.

6. Переменные программы и области их действия
33
Таблица 10
Зона действия переменной-параметра функции
Тело функции
char SomeFunction(int X)
{
int Y;
……
static int r=0;
}
Глобальными переменными называются те переменные, которые
были созданы вне тела какого-то блока.
Таблица 11
Глобальная переменная в файле
Файл *.срр
int Z;
char SomeFunction(int X)
{
int Y;
Y = Z +100;
}
void MyFunction( char s)
{
int Y;
Y = Z-1;
…
}
В языке С++ существует возможность сохранять значения
переменной после завершения функции и последующим вызовом. Это
обеспечивается, если переменная описана как статическая с помощью
ключевого слова static.
Зона действия глобальных переменных ограничивается функциями
файлов, в которых размещены определения этих функций (табл. 11).

5. Структура программы на С++
34
7. ТИПЫ ДАННЫХ
Язык С++ относится к типизированным языкам программирования.
Всякая переменная программы должна обязательно иметь тип. Типизированные языки по сравнению с не типизированными дают более надежные
программы. Опасность не типизированных программ – в возможном некор-
ректном преобразовании данных.
Типы данных – это разновидность данных, отличающихся специальной структурой и набором допустимых для выполнения операций.
Операции считаются допустимыми, если их результатом является объект
того же типа. Все типы языка C++ можно разделить на основные и составные. Основные типы данных используются для представления целых, вещественных, символьных и логических величин. К составным типам относятся массивы, перечисления, функции, структуры, ссылки, указатели,
объединения и классы.
В табл. 12 показан пример встроенных типов С++. Встроенные или
простые типы языка С++ служат для построения более сложных типов.
Операции, которые допустимы над простыми типами, позволяют программировать любые алгоритмы, однако простота операций порождает сложные программы.
Таблица 12
Пример встроенных типов языка С++
char int
short long
float double
Простые типы именуются следующим образом:
• char – символьный;
• int – целое число;
• short – короткое целое число;
• long – большое целое число;
• float – числа с плавающей точкой;
• double–числа с плавающей точкой двойной точности.
Размер объектов в байтах может быть определен с помощью функции sizeof (Х), где Х – наименование типа или любого объекта программы,

7.1. Символьный тип
35
занимающего память. В табл. 13 приведены фрагмент программного кода
и содержимое окна отладчика MS Visual Studio 2005, отображающего результат определения числа байт для каждого типа.
Таблица 13
Размер типов для MS Windows 7 (32 бит)
Name
Value
int a = sizeof (char);
a
1
int b = sizeof (short);
b
2
int c = sizeof (int);
c
4
int d = sizeof (long);
d
4
int e = sizeof (float);
e
4
int f = sizeof (double);
f
8
Структура всякого типа, относящегося к простым, характеризуется
количеством байт, которое занимает в памяти соответствующий объект.
Для некоторых типов количество байт в стандарте языка фиксируется.
Тип сhar предполагает использование памяти в 1 байт, но в то же
время эти значения зависят от платформы, на которой компилируется программа. Под платформой понимается операционная система.
Определить точное значение размера памяти для конкретной платформы позволяет функция sizeof.
7.1. Символьный тип
Символы на программном уровне представляются двоичными кодами. Эти коды можно интерпретировать как целые числа. Поэтому над
символами допустимы все операции, которые допустимы для целочисленного типа.
Символы от 0 до 31 в основном используются для форматирования
вывода. Большинство из них уже устарели.
Символы от 32 до 127 используются для вывода. Это буквы, цифры,
знаки препинания, которые большинство компьютеров использует для
отображения текста (на английском языке).

7. Типы данных
36
Соответствие между кодом–символом и его представлением зада-
ется таблицей стандартов кодирования. На рис. 8 показан фрагмент таблицы кодирования соответственно стандарту ASCII.
Рис. 8. Стандарт кодирования ASCII
Организация ISO (International Standardization Organization – Между-
народная Организация по Стандартам) приняла группу стандартов ISO
8859. Она определяет 8-битные кодировки для разных групп языков. Так,
ISO 8859-1 – это Extended ASCII, таблица для США и Западной Европы. А
ISO 8859-5 – таблица для кириллицы (включая русский язык). Реально же
для русского языка применяются следующие кодировки:
‒ Code Page 866 (CP866), она же “DOS”.
‒ КОИ-8. Широко применяется также в операционных системах се-
мейства Unix, включая Linux.
‒ Code Page 1251, CP1251, Windows-1251. Разработана компанией
Microsoft для поддержки русского языка в системе Windows.
Одним из национальных вариантов таблицы является стандарт
ISO 646 (ECMA-6), предусматривающий возможность размещения в ASCII
национальных символов. Для этого предлагается заменять символы «@»,
«[», «\», «]», «^», «`», «{», «|», «}», «~». Также на месте знака решётки «#»

7.2. Числовые типы
37
может быть размещён символ фунта «£», а на месте символа доллара «$» –
знак валюты «¤».
В табл. 14 показаны примеры программного кода, выполняющего
допустимые операции над переменными символьного типа.
Таблица 14
Допустимые операции над переменными символьного типа
char s1,s2,s3;
cout<<”Set symbol :”;
cin >>s1;
s2=’5’;
s3 = s1 + s2; /* ‘9’ + ‘5’ = ‘n’ */
s3 = s1 – s2; /* ‘Z’ – ‘5’ = ‘%’ */
s3 = ‘\A’;
s3 = ‘\\’;
cout << “Out symbol :’ << s3;
7.2. Числовые типы
Важнейшей характеристикой числовых типов является диапазон
представления. Если результат некоторого преобразования выходит за границу диапазона, это считается ошибкой.
Ниже приведен пример диапазонов чисел, характерных для 16-битной операционной системы Windows:
char -128…127
int -32768…32767
short -127…127
unsigned int 0…65535
long -2147483648…2147483647
float 3.4E-38…3.4E+38
double 1.7E-308…1.7E+308
long double 3.4E-4932…3.4E+4932
Если числовой тип имеет разрядность n, то количество различных
кодовых комбинаций определяется как 2n.
Если тип числа целое, то кодовые комбинации рассматриваются
напрямую как целые числа.

7. Типы данных
38
Если тип отображает числа с плавающей точкой, то одна часть раз-
рядов рассматривается как мантисса, а другая часть разрядов как порядок.
Поэтому те же кодовые комбинации интерпретируются по-другому. Типы
с плавающей точкой значительно расширяют диапазон используемых чисел, но не увеличивают общее количество различных чисел. Иными словами, некоторые значения чисел не могут быть закодированы в принципе.
Таблица 15
Определение знака числа
unsigned int Z(unsigned int u) {
u = u >> 31;
return u;
}
Каждый из способов представления чисел в вычислительных алго-
ритмах приводит к появлению погрешности.
Иногда сравнение чисел типа с плавающей точкой бывает неизбежным. В таком случае следует использовать операторы >, <, >= и <= только
если значения не очень близки. А вот если два операнда очень близки по
значениям, то результат уже может быть неожиданный.
При сравнении значений чисел с плавающей точкой всегда следует учитывать точность вычислений. Более корректным является сравнение не чисел
между собой, а абсолютного значения разности между ними. В табл. 16 приведен пример программного кода, дающего разный результат при использовании одних и тех же операций над различными типами переменных а и b.
В табл. 16 показаны данные отладчика, отображающего значения переменных a,b,c в точке останова на последней строке программного кода.
Таблица 16
Иллюстрация особенности сравнения чисел
float a,b,c;
a = 7 + 0.0000000001;
b = 21/3;
if (a == b )
c = 0;
else
c = -1;
Name
Value
a
7.0000000
b
7.0000000
c
0.0000000

7.2. Числовые типы
39
Окончание табл. 16
double a,b,c;
a = 7 + 0.0000000001;
b = 21/3;
if (a == b )
c = 0;
else
c = -1;
Name
Value
a
7.0000000001000000
b
7.0000000000000000
c
-1.000000000000000
При выполнении арифметических операций над числами может возникать переполнение разрядной сетки. Исполняющая система для С++ не
считает переполнение аварийной ситуацией, программа не прерывается.
При этом результат получает неожиданное значение. В табл. 17 показан
пример программного сложения двух целых чисел. Контроль за переполнением возлагается на программиста.
Переполнение для чисел с плавающей точкой также не фиксируется
как аварийная ситуация. В качестве результата выводится специфическая
кодовая комбинация, которая не рассматривается как число. В табл. 17 это
значение изображено в окне отладчика. В математической библиотеке существует функция _finite(x), которая в качестве аргумента принимает значение выражения, а возвращает ложное значение, если имело место переполнение.
Таблица 17
Переполнение для целых чисел
int a, b, c;
a=0x7fffffff;
b=0x7fffffff;
c = a + b;
Name
Value
a
21474833647
b
21474833647
c
-2
double z = 9E100;
z=z*z*z*z;
int res = _finite(z);
Name
Value
res
0
z
1.#INF00000000
Класс SafeInt защищает от переполнения целого числа в математических операциях. Он проверяет, присутствует ли арифметического переполнение или деление на ноль. В обоих случаях класс вызывает обработчик
ошибок для предупреждения программы прогнозируемой проблемы. Этот

7. Типы данных
40
класс также позволяет сравнить два различных типа целых чисел, пока они
являются объектами SafeInt. Как правило, при выполнении сравнения сначала необходимо преобразовать числа, чтобы они были одного типа. Хотя
класс SafeInt принимает любой тип целого числа, он выполняет более эффективно с типами без знака.
Практическое задание 2. Числовая обработка информации
Задание: длина последовательности целых чисел – случайное число
от 10 до 20 (число b). Последовательность заполняется в соответствии с
вариантом.
Числа вводятся пользователем, если не указано иное. Выполняется
проверка введенных значений. В случае ошибки выдается сообщение.
Таблица 18
Варианты для практического задания 2
№
вар.
Входные данные
Представление выходных данных
1
По заданию
Числа, которые больше предыдущего
(первое число сравнить с последним)
2
По заданию
Числа после цифры 3 игнорируются
3
Числа заполняются последовательно от 0 до b–1
Четные числа
4
При вводе неверных значений
вывести программу из режима
отказа
Числа, которые больше предыдущего
(1е число сравнить с последним)
5
Числа генерируются случайным образом
Простые числа
6
По заданию
Нечетные числа
7
Числа заполняются последовательно от 1 до b
Кратные 5
8
При вводе неверных значений
вывести программу из режима
отказа
Числа, которые больше предыдущего
(первое число сравнить с последним)
9
По заданию
Совершенные числа
10
По заданию
Выводятся первые 5 чисел, остальные
игнорируются
11
Числа заполняются последовательно от 0 до b–1
Простые числа
12
Числа заполняются последовательно от 1 до b
Выводятся первые 10 чисел, остальные игнорируются программой
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
