Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Основы разработки программ на языке С++ для систем информационной безопасности. Учебное пособие

.pdf
Скачиваний:
1
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
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 выполнять вер­тикальную табуляцию
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]