Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Основы разработки программ на языке С++ для систем информационной безопасности. Учебное пособие
.pdf
3. Алгоритмизация
21
Разработка блок-схем выполняется на этапах проектирования и документирования согласно каскадной модели разработки ПО, которая является устаревшей, потому что зачастую сопровождается ошибками на этапах проектирования.
Тем не менее, в ряде случаев, создание программы невозможно без
рисования блок-схем, так как представляет собой один процесс – существуют визуальные языки программирования, такие как ДРАКОН (русский
алгоритмический язык). Также блок-схемы используются для верификации
алгоритмов или формального доказательства их корректности методом индуктивных утверждений Флойда (первый этап доказательства полной корректности программы).

3. Алгоритмизация
22
4. ИСПОЛНЕНИЕ ПРОГРАММ
Всякая программа исполняется одним или несколькими процессо-
рами. Процессоры – электронные цифровые устройства, которые реализуют принцип программного управления. Независимо от того, на каком высокоуровневом языке написана программа, она должна быть переведена в
коды команд конкретного процессора.
Принцип программного управления заключается в следующем: в
вычислительной системе есть запоминающее устройство, которое хранит
информацию двух видов – команды и данные. Различие в видах не определяется способом кодирования, а зависит от интерпретации.
Интерпретация команд обеспечивается устройством управления.
Конечный результат обработки информации определяется только командами программ.
Данные представляются и обрабатываются соответственно логике,
которая принята для команд конкретного процессора.
Всякая команда процессора состоит из полей. Поле – это набор би-
тов, который имеет строго определенные позиции размещения. Практически всякая команда имеет поле кода операции. Код в этом поле содержит
номер действия, которое должно быть выполнено над операндами. Поля
операндов могут содержать как непосредственные данные, так и информацию, чтобы найти их во внешней памяти.
Любой код, который должен исполнить процессор, помещается в ис-
полняемые файлы. В операционной системе Windows такие файлы имеют
расширение EXE, DLL, COM. Кроме непосредственно процессорного кода,
эти файлы содержат служебную информацию, необходимую операционной системе для запуска и исполнения программного кода (рис. 6).
Для получения исполняемого кода должны быть выполнены две ос-
новные операции:
• откомпилированы файлы с исходным кодом программы (напри-
мер, тексты программ на С++). Продукт компиляции – объектный код –
представляет собой промежуточный результат и сохраняется в файлах с
расширением OBJ;
• объектные файлы скомпонованы со служебными файлами и фай-
лами библиотеки программирования в файлы с исполняемым кодом.

4. Исполнение программ
23
Рис. 6. Исходный и исполняемый код
Исполнение программного кода осуществляется при участии испол-
няющей системы (рис. 7). Исполняющая система либо скомпонована с
процессорным кодом, либо работает параллельно с ним. Ее назначение –
выполнение действий, необходимых для надежного исполнения программы.
Рис. 7. Исполнение программ

3. Алгоритмизация
24
5. СТРУКТУРА
ПРОГРАММЫ НА С++
Программа на языке С++ включает в себя программный код и дирек-
тивы препроцессора.
Препроцессор – это специализированная программа среды програм-
мирования, которая запускается перед компиляцией и предназначена для
обработки текста. Препроцессор выполняет директивы, которые начинаются со знака #. Каждая директива имеет наименование и параметры.
Например #include в качестве параметра содержит имя файла, текст
из которого будет подставлен на место самой директивы (#include
“stdafx.h”).
Отправной точкой выполнения любой С++-программы является
функция main(). Функция содержит четыре элемента:
1. возвращаемый тип (в нашем случае int);
2. имя функции (main);
3. список параметров, заключенный в круглые скобки (в данном слу-
чае список пуст);
4. тело функции, заключенное в фигурные скобки и представляющее
собой блок инструкций.
Инструкцией называется часть программы, определяющая действие
и не являющаяся директивой препроцессора.
Программный код состоит из функций, описание которых включают
в себя:
1. тип результата (возвращаемый);
2. имя функции – произвольную комбинацию символов, начинаю-
щихся с буквы. Есть ряд ограничений на использование специальных символов. Не допускаются употребление пробела, запятой (,), точки с запятой
(;), символа #;
3. список параметров. Число параметров не ограничивается. Спи-
сок – последовательность пар наименования типа и параметра, разделяемые запятыми;
4. тело функции – программный блок, т.е. любая последовательность
операторов языка или вызовов функции, заключённая в фигурные скобки.

5. Структура программы на С++
25
Таблица 4
Пример программы на С++
include “stdafx.h”
int_main (int argc, _TCHAR* argv [])
{
printf (“Hello, world !”);
return 0;
}
Пример описания функции, созданной пользователем:
int MyFunction (int A, int B)
{
return (A+B);
}
Существует стартовая функция, т.е. с нее исполняющая система
начнет выполнение программного кода. Есть соглашение, согласно которому стартовая функция имеет уникальное имя, которое не может использоваться в других случаях.
Тело функции содержит описание переменной, указание типа и
имени. Описание может размещаться в любом месте до первого использования этой переменной. В теле программы размещаются вызовы библиотечных функций и функций, созданных пользователем – программистом.
Если функция не возвращает никакого значения, то она должна
иметь тип void (такие функции иногда называют процедурами).
При объявлении функции, после ее типа должно находиться имя
функции и две круглые скобки – открывающая и закрывающая, внутри
которых могут находиться один или несколько аргументов функции, которых также может не быть вообще. После списка аргументов функции
ставится открывающая фигурная скобка, после которой находится само
тело функции. В конце тела функции обязательно ставится закрывающая
фигурная скобка.
Создаваемые пользователем функции способны выполнять любые
действия, как и основная функция, являющаяся точкой ввода программ.
Пример пользовательской функции, меняющей местами значения
элементов a и b:

5. Структура программы на С++
26
void swap (int a, int b){
int c = a;
a = b;
b = c;
}
Вызовы всякой функции включают в себя фактический параметр,
т.е. те значения, которые подлежат обработке. В тексте функции используются формальные параметры, с помощью которых обрабатываются любые
значения, переданные функции (табл. 5).
Таблица 5
Формальные и фактические параметры функций
# include “stdafx.h”
# incude < iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
char cSymbol[100];
cin >> cSymbol;
MyPrint (cSymbol);
return 0;
}
void MyPrint (char* cString)
{
char HelloString[]=”Hello, “;
cout << endl << HelloString;
cout << cString << “ ! “; }
Пользовательские функции иначе называют подпрограммами.
В подпрограммы выделяют фрагменты кода, повторяющиеся в логике программы несколько раз. Использование пользовательских функций позволяет сделать программу более короткой. Пользовательские функции – это
готовый к использованию сторонним разработчиком фрагмент кода программы, который разработчики могут легко передавать друг другу и использовать без дополнительной доработки.
При создании собственной функции следует записывать их объявление до первого использования. Обычно такие объявления размещаются в
начале программного кода. Объявление функции содержит указание типа
результата, её имени и параметра (табл. 6).

5.1. Поточный ввод-вывод в C++
27
Таблица 6
Объявление и определение функции
# include “stdafx.h”
# incude < iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
char cSymbol[100];
cin >> cSymbol;
MyPrint (cSymbol);
return 0;
}
void MyPrint (char* cString)
{
char HelloString[]=”Hello, “;
cout << endl << HelloString;
cout << cString << “ ! “;
}
5.1. Поточный ввод-вывод в C++
Как и язык программирования С, С++ не имеет встроенных средств
ввода-вывода. Язык С для этих целей использует библиотеку stdio.h.
В С++ разработана новая библиотека ввода-вывода iostream, исполь-
зующая концепцию объектно-ориентированного программирования:
#include <iostream>
Библиотека iostream определяет три стандартных потока:
• cin – стандартный входной поток;
• cout – стандартный выходной поток;
• cerr – стандартный поток вывода сообщений об ошибках.
Для их использования в Microsoft Visual Studio необходимо пропи-
сать строку:
using namespace std;
Для выполнения операций ввода-вывода переопределены две опера-
ции поразрядного сдвига:

5. Структура программы на С++
28
>> получить из входного потока
<< поместить в выходной поток
5.2. Вывод информации
cout << значение;
Здесь значение преобразуется в последовательность символов и выводится в выходной поток:
cout << n;
Возможно многократное назначение потоков:
cout << 'значение1' << 'значение2' << ... << 'значение n';
5.3. Ввод информации
cin >> идентификатор;
При этом из входного потока читается последовательность символов
до пробела, затем эта последовательность преобразуется к типу идентификатора, и получаемое значение помещается в идентификатор.
Возможно многократное назначение потоков:
cin >> переменная1 >> переменная2 >>...>> переменнаяn;
5.4. Ввод символьных строк
По умолчанию потоковый ввод cin вводит строку до пробела, символа табуляции или перевода строки.
5.5. Манипуляторы потока
Функцию-манипулятор потока можно включать в операции помещения в поток и извлечения из потока (<<, >>). Для использования манипуляторов с параметрами в программу необходимо включить заголовочный
файл iomanip.h.
#include < iomanip.h >

5.5. Манипуляторы потока
29
Манипуляторы могут использоваться в составе выражений ввода /
вывода.
Таблица 7
Стандартные манипуляторы ввода/вывода С++
Манипулятор
Назначение
Ввод/вывод
dec
Ввод/вывод данных в десятичной
форме
ввод и вывод
endl
Вывод символа новой строки с передачей в поток всех данных из буфера
вывод
ends
Вывод нулевого символа
вывод
flush
Передача в поток содержимого буфера
вывод
hex
Ввод/вывод данных в шестнадцатиричной системе
ввод и вывод
oct
Ввод/вывод данных в восьмеричной форме
ввод и вывод
resetiosflags(long f)
Сбрасывает флаги, указанные в f
ввод и вывод
setbase(int base)
Устанавливает базу счисления равной параметру base
вывод
setfill(int ch)
Устанавливает символ заполнения
равным ch
вывод
setiosflags(long f)
Устанавливает флаги, указанные в
f
ввод и вывод
setprecision(int p)
Устанавливает число цифр после
запятой
вывод
setw(int w)
Устанавливает ширину поля равной w
вывод
ws
Пропускает начальный символразделитель
ввод
Практическое задание 1. Консольные приложения ввода-вывода
Задание: ввести данные в указанном формате с клавиатуры.

5. Структура программы на С++
30
Таблица 8
Варианты для практического задания 1
№
вар.
Входные данные
Представление выходных данных
1
10 целых простых чисел
типа int
Вывести числа в шестнадцатеричной
системе счисления.
Все числа записываются через пробел,
если длина полученной строки больше
15 символов, выполнить перенос на новую строку
2
15 целых чисел типа short со
знаком в шестнадцатеричной
системе счисления
После цифры 5 выполнять вертикальную табуляцию
3
10 целых чисел типа int со
знаком в восьмеричной системе счисления
Максимальное количество символов: 25.
Вывести число в 8-СИ. Если его длина
превышает 25 символов, то необходимо
вывести 25 первых символов числа
4
10 целых чисел типа int со
знаком в восьмеричной системе счисления
В полученной строке все цифры 4 выводить в апострофах.
Пример: 0x0”4”21
5
15 целых чисел типа longint со
знаком в шестнадцатеричной
системе счисления
Все числа записываются через пробел,
если длина полученной строки больше
10 символов, выполнить перенос на новую строку
6
10 чисел с плавающей точкой
типа double (вещественный
формат двойной точности)
Максимальное количество символов: 20
7
15 целых чисел типа int со
знаком в восьмеричной системе счисления
Вывести 10 чисел, остальные отбросить
8
10 целых чисел типа int со
знаком в восьмеричной системе счисления
В полученной строке все цифры 8 выводить на экран в апострофах
9
10 целых чисел типа signed
shortint
Показать знак для положительных чисел
10
15 целых чисел типа longint со
знаком в шестнадцатеричной
системе счисления
После каждой цифры 2 выполнять вертикальную табуляцию
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
