![](/stc/img/evkova.png)
Особенности и примеры использования массивов при разработке программ (Языки программирования высокого уровня)
Содержание:
ВВЕДЕНИЕ
Сегодня в современном мире используется большое количество различного рода информационно-коммуникационных технологий. На фоне существующих программных продуктов есть возможность разработки собственных прикладных программ. Разработка может быть выполнена при помощи различных языков программирования.
Современные языки программирования используют механизмы: наследование; полиморфизм; инкапсуляция. Создание нового класса объектов по средствам добавления новых элементов. Некоторые языки позволяют выполнять множественное наследование, то есть объединять в одном классе возможности нескольких других классов; инкапсуляция.
Сокрытие деталей реализации позволяет вносить необходимые изменения в части программы без ущерба для других её частей, что значительно упрощает сопровождение и модификацию программного обеспечения; полиморфизм. При полиморфизме некоторые части родительского класса заменяются новыми, реализующими специфические для данного потомка действия. Пользовательский интерфейс классов остаётся прежним, а реализация методов с одинаковым названием и набором параметров различается.
Языки программирования позволяют разработать практически любую программу на базе использования базовых алгоритмов. В языках программирования реализованы следующие циклические операторы: for; while; do while. Циклы используются для многократного выполнения одного и того же кода, пока будет истинным некоторое условие. Использование массивов является неотъемлемой составляющей при разработке программ.
Объект исследования – языки программирования.
Предмет исследования – массивы.
Цель работы – изучение особенностей использования массивов при разработке программ.
В соответствии с целью была определена необходимость постановки и решения следующих задач: изучить основные сведения о языках программирования; определить объектные средства языков программирования; изучить использование массивов в языках программирования; разработать программу демонстрации циклических структур и массивов данных.
В работах (Ш.М. Валитов, М.А. Гаврилов М.В. Згадай, А.В. Дарков, Ж. Довек, В.П. Поляков) представлены основные сведения о современных технологиях в управлении. Изучение информационных систем и технологий было предметом непосредственного исследований таких авторов (Е.Л. Румянцева, Н.С. Косиненко, В.В. Кулямин, В.В. Ерохин, Л.С. Сальников, Б.Я. Советов, В.В. Цехановкий).
1. Языки программирования высокого уровня
1.1. Характеристика языков программирования
Рассмотрим основные сведения и особенности использования популярных языков программирования: С++, C#, Java. Язык программирования C# представляет собой объектно-ориентированный язык программирования, который был разработан в 1998-2001 годах группой инженеров при постоянном руководстве Андерса Хейлсберга в компании Microsoft как язык программирования для выполнения разработки приложений под платформу от корпорации Microsoft .NET Framework и впоследствии был стандартизирован как ECMA-334 и стандарт ISO/IEC 23270[1].
Язык программирования C# можно отнести к семейству языков программирования которые имеют C-подобный синтаксис, из них его внутренний синтаксис является наиболее приближенным к языку программирования C++ и Java[2]. Язык программирования C# включает полиморфизм, поддерживает механизм статической типизации, перегрузку используемых операторов, атрибуты, свойства, делегаты, итераторы, обобщённые типы и методы, анонимные функции, поддерживающие замыкания, LINQ, различные исключения, комментарии в формате XML.
Получив многое от своих предшественников - языков C++, Pascal, Модула, Smalltalk и, в особенности, Java - С#, опираясь на практику их практического использования, исключает некоторые модели, зарекомендовавшие себя как проблематичные при разработке программных систем, например, C# в отличие от C++ не поддерживает множественное наследование классов.
C# был разработан в качестве языка программирования прикладного уровня для CLR и, который зависит от возможностей самой CLR. Это касается системы использования типов данных языка программирования C#, которая отражает BCL[3]. Отсутствие или присутствие тех или иных особенностей языка программирования диктуется тем, что может ли языковая особенность языка программирования быть транслирована в конструкции CLR[4].
Язык программирования С развитием CLR от версии 1.1 к версии 2.0 достаточно сильно обогатился и сам язык программирования C#; подобного взаимодействия можно было ожидать и в дальнейших версиях языка программирования (однако, эта закономерность была нарушена с выходом языка C# 3.0, который представляет собой расширение языка, которое не опирается на расширения платформы технологии .NET).
Например, выполнение сборка мусора не была реализована в самом языке программирования C#, а выполняется CLR для программ, которые написаны на языке C# точно так же, как это выполняется для программ на языке VB.NET, J# и др[5].
Существует несколько реализаций объектно-ориентированного языка программирования C#:
– проект Mono включает в себя реализацию языка программирования C# с открытым исходным кодом;
– проект DotGNU также включает компилятор языка программирования C# с открытым кодом;
– реализация языка программирования C# в виде компилятора csc.exe была включена в состав платформы .NET Framework (включая .NET Micro Framework, .NET Compact Framework);
– в составе проекта Rotor компании Microsoft;
– проект dotNetAnywhere ориентирован на встраиваемые системы, реализация CLR, выполняется поддержку практически всех спецификаций языка программирования C# 2.0[6].
С++ и С# очень схожи, однако существенные различия можно найти в некоторых деталях[7]. Синтаксис языка программирования С# можно назвать упрощенной версией языка С++, таким образом С#, как и любое упрощение, одновременно несет и позитивный и негативный эффекты для разработки высокопроизводительных программ[8].
Подытоживая отметим, что анализ современных языков программирования позволяет сделать такие выводы. Объектно-ориентированный язык программирования С# имеет большое количество особенностей, однако он во многом схож с языком программирования Java. В связи с чем, при реализации конкретного программного обеспечения необходимо более подробно изучить, как характерные особенности, так и отличия.
1.2. Отличия языков программирования
Рассмотрим основные отличия языков программирования, так, например языки программирования C# и Java используют в качестве синтаксической основы язык программирования C. В частности, от него были унаследованы без каких-либо серьезных изменений: использование синтаксиса описания и последующего использования внутренних переменных и специальных функций; использование обозначений начала и конца блоков разрабатываемого программного кода фигурными скобками; использование различных обозначений, ассоциативности и приоритетности основных встроенных операций, к которым можно отнести побитовые операции, логические операции, присвоение, операции декремента и инкремента, тернарная условная операция «?:»); синтаксис всех основных конструкций языка программирования: циклов, встроенных операторов множественного выбора, условного оператора выбора[9].
Немаловажным является использование механизма работы с динамическими данными и сборки мусора в языке программирования. В рассматриваемых языках программирования реализована одна схожая модель работы с динамическими данными: динамическое создания различных объектов при помощи специальной конструкции new, среда исполнения выполняет отслеживание наличия внутренних ссылок на них, а сборщик мусора используется для периодического очищения используемой памяти от обработанных объектов, различных ссылок на которые не существует[10].
Для оптимизации процессов сборки мусора определенные спецификации языков программирования и сред исполнения не включают определенные ограничения на время жизни разрабатываемого объекта после выполнения удаления оставшейся ссылки на него – сборщик выполняет свою работу независимо от исполнения конкретной программы, в связи с чем реальное удаление объекта может быть выполнено в любой момент после выполнения удаления последней ссылки до полного завершения работы разрабатываемой программы.
В языках программирования Java и в C# есть сильные и слабые ссылки на объекты. Оба языка поддерживают методы-финализаторы. Из-за неопределённости момента удаления объекта финализаторы не могут использоваться для освобождения системных ресурсов, занятых объектом, что вынуждает создавать дополнительные методы для «очистки» объекта и вызывать их явно[11].
Java позволяет выполнить регистрацию слушателей (listener), которые будут получать определенные информационные сообщения, когда ссылка будет подвергнута операции сборки мусора, что обеспечивает улучшение производительности WeakHashMaps.
C# позволяет выполнить отмену использования различных специальных финализаторов для некоторых обрабатываемых объектов специализированным методом GC.SuppressFinalizes(obj) (напр., выполнение конструирования запросов SQL на файловом потоке)[12]. Это может понадобиться для выполнения процессов финализации и считается довольно дорогой операцией в процессе непосредственного выполнения сборки мусора. Язык программирования C# в стандартной библиотеке содержит интерфейс IDisposables и специальную конструкцию using, которая гарантирует выполнение своевременного вызова необходимых метода очистки.
Нужно понимать, что при выборе неправильного подхода, на С++ вполне можно написать код, который будет работать медленнее кода на C#, выполняющего туже задачу.
Таким образом, были установлены отличительные особенности изучаемых языков программирования. В тоже время, каждый из языков имеет определенную сферу использования и реализация программ должна основываться на четкой регламентации реализуемых функций конечной программной системой и подбором соответствующих инструментов языка программирования.
1.3. Средства языков программирования
Окончательный выбор необходимого языка программирования основывается на анализе объектных средств языка и установления конечной технологической платформы. Объектные средства языков программирования C# и Java можно обозначить по следующим основным характеристикам: инкапсуляция; внутренние классы; методы. Рассмотрим более подробно каждую характеристику.
Анализируя объектно-ориентированную особенность языка программирования инкапсуляцию, можно отметить следующее. В языке программирования Java специальный модификатор protected в описании, помимо выполнения операций доступа из классов-потомков, разрешается доступ из всех классов, которые входят в тот же пакет, что и класс-владелец[13].
В языке C# для объектов, которые должны быть видны в пределах сборки введён специальный модификатор internal (аналог default в языке программирования Java), а protected позволяет сохранить свой изначальный смысл, который был взят из языка программирования C++ - доступ выполняется только из классов-потомков[14].
Допускается выполнять некоторую комбинацию методов доступа к членам класса protected и internal в этом случае получается область доступа, которая соответствует типу доступа protected в языке программирования Java.
Оба языка обеспечивают определение класса внутри пользовательского класса. В языке программирования Java внутренние классы могут быть использованы для эмуляции замыканий. Внутренние классы языка программирования Java имеют доступ к нестатическим членам родительского класса, то есть «знают о this»[15].
Кроме того, внутри данных методов может быть определены локальные классы, которые имеют непосредственный доступ чтения ко всем локальным переменным, и безымянным локальным классам, которые фактически обеспечивают создание экземпляров объектов и интерфейсов, которые позволяют перекрывать методы своего класса, в месте их использования[16].
На данном механизме в Java-программе может быть выполнена обработка различных событий (событие позволяет сгенерировать вызовы методов, в исходном классе-обработчике который является абстрактным; там, где нужен определенный обработчик для событий, программисты создают экземпляры анонимного локального класса, который является наследником базового класса-обработчика и непосредственно может быть использован)[17].
Таким образом, пропадает необходимость в специальных типах и наличии синтаксической поддержки для определенных событий, но сам код, который создает обработчики, немного более сложен для его понимания разработчиком.
В языке программирования C# есть лямбды и замыкания. Подход C# более напоминает язык программирования C++: внутренние классы в C# могут получить специальный доступ только к статическим членам внешних классов, а для выполнения доступа к нестатическим членам необходимо выполнить явное указание на экземпляр внешнего класса. В тоже время, внутренние локальные классы в языке программирование C# и не поддерживаются.
В языке программирования Java начиная с 8 версии также появились лямбда выражения.
Принципиальная возможность для одного и того же кода обрабатывать данные разных типов определяется свойствами системы типов языка. С этой точки зрения различают статическую неполиморфную типизацию (потомки Алгола и BCPL), динамическую типизацию (потомки Lisp, Smalltalk, APL) и статическую полиморфную типизацию (потомки ML). Использование ad-hoc-полиморфизма наиболее характерно для неполиморфной типизации.
Параметрический полиморфизм и динамическая типизация намного существеннее, чем ad-hoc-полиморфизм, повышают коэффициент повторного использования кода, поскольку определённая единственный раз функция реализует без дублирования заданное поведение для бесконечного множества вновь определяемых типов, удовлетворяющих требуемым в функции условиям. С другой стороны, временами возникает необходимость обеспечить различное поведение функции в зависимости от типа параметра, и тогда необходимым оказывается специальный полиморфизм[18].
Идеологически ООП - подход к программированию как к моделированию информационных объектов, решающий на новом уровне основную задачу структурного программирования: структурирование информации с точки зрения управляемости, что существенно улучшает управляемость самим процессом моделирования, что, в свою очередь, особенно важно при реализации крупных проектов[19].
Управляемость для иерархических систем предполагает минимизацию избыточности данных (аналогичную нормализации) и их целостность, поэтому созданное удобно управляемым - будет и удобно пониматься. Таким образом, через тактическую задачу управляемости решается стратегическая задача - транслировать понимание задачи программистом в наиболее удобную для дальнейшего использования форму.
В обоих языках программирования методы могут быть определены через внутренние функции классов. Тело используемого метода может быть расположено внутри описания определенного класса. Также, поддерживаются языками программирования C# и Java абстрактные методы и статические методы[20].
В языке программирования C# представлены механизмы явной реализации методов интерфейса, что обеспечивает классам реализовывать методы интерфейса отдельно от собственных методов или давать разные реализации одноимённых методов, которые принадлежат различным интерфейсам.
В объектно-ориентированном языке программирования Java базовые типы (byte, int, double, float, bool и пр.) могут быть переданы по значению, а для остальных (объектные) по значению может быть передана ссылка на необходимый объект[21].
В C# запрещено давать методам название, которое совпадает с названием некоторого класса, что позволяет устранить ошибки (в Java программисты могут определять конструктор, который будет на самом деле являться методом).
В процессе практического использования оператора out компилятор выполняет необходимые операции контроля наличия в методе присваивания определенных значений. Использовать их необходимо в процессе непосредственной работы с неуправляемым кодом, который это требует (например, Winapi), так как это нарушает концепцию объектно-ориентированного программирования.
И хотя язык программирования С# возможно использовать для построения приложений под не-Windows платформы, проблемы, вызываемые использованием .net в не-Windows окружении, сводят на нет многие преимущества выбора C#. Поэтому рекомендовать его для кроссплатформенного использования можно разве что если код на C# уже написан. При этом надо четко понимать, что в перспективе это будет приносить дополнительные затраты на поддержку.
Таким образом, в процессе выполнения первого раздела были получены следующие результаты. Были представлены основные сведения о языках программирования: ++, C#, Java. Определены основные отличия и охарактеризованы объектные средства языков программирования.
2. Массивы в языке программирования
2.1. Массивы в языках программирования
Изучая возможности современных языков программирования нельзя забывать и о базовых типах, которые можно использовать в разрабатываемых программных системах. Массив представляет собой конечную последовательность упорядоченных однотипных элементов одного типа, доступ ко всем элементам в которой выполняется по средствам использования его индекса.
Массив это структура данных, которая представлена в виде группы ячеек одного типа, объединенных под одним единым именем. Массивы используются для непосредственной обработки большого количества однотипных данных[22].
Длина или размер массива представляет собой общее количество элементов определенного массива. Размер массива может быть задан в процессе создания массива и не может быть изменён в процессе дальнейшего выполнения программы, т.е. нельзя будет убрать единый элементы из массива или выполнить добавление их туда, но в тоже время можно будет достаточно быстро в существующие элементы присвоить любые другие значения[23].
Отдельная ячейка данных массива называется элементом массива. Элементами массива могут быть данные любого доступного типа. Массивы могут иметь как одно, так и более одного измерений. В зависимости от количества таких измерений массивы можно поделить на одномерные массивы, двумерные массивы, трёхмерные массивы и так далее до n-мерного массива.
Чаще всего в процессе программирования используются одномерные и двумерные массивы, поэтому можно рассмотреть только эти виды массивов для понимания данной темы.
Индекс начального элемента – 0, следующего за ним – 1 и т.д. Индекс последнего элемента в массиве – на будет единицу меньше, чем размер исходного массива.
Одномерный массив представляет собой массив, с одним параметром, который характеризует количество элементов одномерного массива. Фактически одномерный массив представляет собой массив, у которого может быть только одна строка, и n-е количество столбцов. Столбцы в одномерном массиве являются элементами массива[24].
Для объявления одномерного массива в языке программирования С++ необходимо выполнить следующую инструкцию:
int s[25];
где, int представляет собой целочисленный тип данных;
s является именем создаваемого одномерного массива;
значение 25 представляет собой размер созданного одномерного массива, 25 ячеек.
Всегда сразу после имени массива идут квадратные скобки, в которых необходимо задать размер одномерного массива, этим массив и отличается от всех остальных переменных.
Также, еще есть один способ для объявления одномерного массива
int t[22], y[23];
Объявлены два одномерных массива t и y размерами 22 и 23 соответственно. Причём в таком способе объявления все массивы будут иметь одинаковый тип данных, в нашем случае - int.
Массивы в языке программирования С++ могут быть инициализированы при их непосредственном объявлении следующим образом[25]:
int r[20] = { 8, -12, -18, 5, 16, 3, -65, -17, -8, 29, 60, 6, 12, 44, 55, -67, 89, 23, 23, 34 };
Инициализация одномерного массива выполняется в фигурных скобках после знака равно, каждый элемент массива отделяется от предыдущего запятой.
Инициализации массива без определения его размера может быть выполнена следующим образом
int r[]={8, -12, -18, 5, 16, 3, -65, -17, -8, 29, 60, 6, 12, 44, 55, -67, 89, 23, 23, 34 };
В данном случае компилятор сам определит размер одномерного массива. Размер массива можно не указывать только при его инициализации, при обычном объявлении массива обязательно нужно указывать размер массива. Разработаем простую программу на обработку одномерного массива.
В Java массивы являются объектами. Это значит, что имя, которое даётся каждому массиву, лишь указывает на адрес какого-то фрагмента данных в памяти. Кроме адреса в этой переменной ничего не хранится[26]. Индекс массива, фактически, указывает на то, насколько надо отступить от начального элемента массива в памяти, чтоб добраться до нужного элемента.
Чтобы создать массив надо объявить для него подходящее имя, а затем с этим именем связать нужный фрагмент памяти, где и будут друг за другом храниться значения элементов массива.
При создании массива в языке программирования Java сначала его необходимо объявить таким образом:
int[] FirstArray;
или так
int SecondArray[];
Однако, это не приветствуется соглашением по оформлению программного кода в языке программирования Java, в связи с тем, что скобки обозначают то, что программист имеет дело с массивом и логичнее, когда они находятся рядом с обозначением типа[27].
Исходя из данного примера, было объявлено два массива с именами myFirstArrays и mySecondArrays. Эти массивы будут содержать элементы типа int.
Подобным образом можно выполнить объявление массива любого другого типа:
byte[] ArrayByte;
short[] myArrayShort;
long[] myArrayLong;
float[] myArrayFloat;
char[] myArrayChar;
String[] myArrayString;
...
Тип массива задается, таким образом type[], где type представляет собой определенный тип данных содержащихся в нем элементов. Скобки являются обозначением того, что переменные содержатся в данном массиве. Имя массива может быль любым, однако, оно должно в полной мере соответствовать установленным правилам именования переменных в языке программирования Java[28].
Массив можно создавать не только из переменных базовых типов, но и из произвольных объектов.
В процессе объявлении массива в языке программирования Java нет необходимости указывать его размер и не нет необходимости резервировать память для него. Нужно создание соответствующие ссылки на массив.
2.2. Работа с массивами
Для объявленного myFirstArray, зарезервируем память при помощи ключевого слова new.
int[] myFirstArray;
myFirstArray = new int[22];
В данном примере будет создан массив из 22 элементов типа int и присвоено ему ранее объявленной переменной myFirstArray.
Объявить имя массива и выполнить резервирование для него памяти также можно выполнить одной строкой.
int[] myArray = new int[22];
При создании массива с помощью ключевого слова new, все элементы массива автоматически инициализированы нулевыми значениями. Для того, чтобы присвоить элементам массива свои начальные значения, необходимо провести его инициализацию. Инициализацию можно проводить как поэлементно
myFirstArray[0] = 85;
myFirstArray[2] = 89;
так и в цикле, при помощи индекса элемента массива проходя все элементы обрабатываемого массива и присваивая им необходимые числовые значения.
for(int i = 0; i < 55; i++){
FirstArray[i] = 63;
}
Как видно из представленных примеров, для того, чтобы выполнить обращение к необходимому элементу массива, необходимо указать его имя и, потом, в квадратных скобках необходимый индекс элемента массива. Все элементы обрабатываемого массива с конкретным индексом ведут себя также, как и переменные.
Рассмотрим создание и инициализацию массива на следующем примере. В нем создается массив, который содержит цифры от 0 до 20 с выводом значения в консоль.
int[] numberArray = new int[20];
for(int i = 0; i < 20; i++){
numberArray[i] = i; // }
//вывод всех значений массива в консоль
for(int i = 0; i < 20; i++){
System.out.println((i+1) + "-й элемент массива = " + numberArray[i]);
}
Размер массива не всегда очевиден, поэтому для того, чтобы его узнать следует использовать свойство length, которое возвращает длину массива (при условии, что размер массива равняется трем).
myColors.length;
Данный код поможет узнать, что длина массива myColors будет равна трем.
Например, задано пять чисел, необходимо найти минимальное значение массива
int[] numbers = {-7, 9, 5, -3, 7};
int mins = numbers[0];
for(int i = 0; i < numbers.length; i++){
if(mins>numbers[i]) mins = numbers[i];
}
System.out.println(mins);
Таким образом, была дана характеристика массивов и использование их в программах циклической структуры.
3. Разработка программы
3.1. Характеристика алгоритма
Алгоритм шифрования RC4 представляет собой широко используемый потоковый шифр, применяемый в протоколах TLS (защита Internet-трафика) и WEP (защита WLAN-сетей). Несмотря на высокую скорость работы и простоту реализации, алгоритм шифрования RC4 обладает некоторыми слабостями, из-за которых в целях информационной безопасности не рекомендуется его использовать. Общая схема алгоритма RC4 представлена на рис. 1.
При некоторых условиях данный шифр является очень уязвимым на взлом. Например, когда не выполняется отброс начальных байтов гаммирующей последовательности или когда используются связанные или неслучайные ключи. Компания Microsoft рекомендует при возможности отключать RC4.
Алгоритм шифрования RC4 позволяет сгенерировать псевдослучайный поток битов, называемый гаммирующей последовательностью или гаммой. Как и в любом другом потоковом шифре, шифрование в RC4 выполняется при помощи использования специализированной операции XOR над открытым текстом и гаммой.
Расшифровка выполняется при помощи операции XOR над шифротекстом и гаммой. Таким образом, самым принципиальным моментом в алгоритме шифрования RC4 является то, каким образом будет генерироваться гамма.
В самую первую очередь пользователь должен создать секретный ключ, длина которого, обычно, должна находиться в пределах от 5 до 32 байт. Затем происходит непосредственная инициализация S-блока (Key-scheduling algorithm).
Рисунок 1 – Общая схема алгоритма RC4
Сначала берётся массив из 256 байтов (S-блок) и последовательно выполняется заполнение целыми числами от 0 до 255. Потом выполняется перемешивание данного массива. Причем, перемешивание зависит только от используемого ключа в том смысле, что результат будет перемешиваться и всегда жёстко детерминирован после выбора ключа.
3.2. Описание алгоритма
Ядро алгоритма шифрования состоит из функции генерации ключевого потока. Эта функция генерирует последовательность битов, которая затем объединяется с открытым текстом посредством суммирования по модулю два.
Дешифрация состоит из регенерации этого ключевого потока и суммирования его с шифрограммой по модулю два, восстанавливая исходный текст.
Другая главная часть алгоритма – функция инициализации, которая использует ключ переменной длины для создания начального состояния генератора ключевого потока.
Алгоритм шифрования:
– функция генерирует последовательность битов (ki), являющиеся основанием для дальнейшей обработки данных.
– затем последовательность битов посредством практического использования операции «суммирование по модулю два» (xor) объединяется с открытым текстом (mi). В результате получается шифрограмма (ci): ci=mi+ki.
Алгоритм расшифровки:
– повторно создаётся (регенерируется) поток битов ключа (ключевой поток) (ki).
– поток битов ключа складывается с шифрограммой (ci) операцией «xor». В силу свойств операции «xor» на выходе получается исходный (не зашифрованный) текст (mi): mi=ci+ki=(mi+ki)+ki
RC4 – фактически класс алгоритмов, определяемых размером его блока обработки информации. Этот параметр n является размером слова для алгоритма шифрования данных. Обычно, n = 8. Для повышения безопасности необходимо увеличить эту величину. Внутреннее состояние RC4 состоит из массива размером 2n слов и двух счетчиков, каждый размером в одно слово.
Массив обозначается как S-бокс. Он всегда содержит соответствующую перестановку 2n возможных значений слова. Два счетчика обозначены через i и j.
Внутреннее состояние RC4 представляется в виде массива размером 2n и двух счётчиков. Массив известен как S-блок, и далее будет обозначаться как S. Он всегда содержит перестановку 2n возможных значений слова. Два счётчика обозначены через i и j.
Инициализация RC4 состоит из двух частей:
– инициализация S-блока;
– генерация псевдо-случайного слова K.
3.3. Разработка программной системы
Практическая реализация алгоритма шифрования была выполнена по средствам использования средств языка программирования С++. Для практической реализации алгоритма шифрования RC4 был создан соответствующий класс программный class RC4_CRYPTS{} для реализации программной системы шифрования
class RC4_CRYPTS{
byte LINE[256];
unsigned int i,j;
inline void Swaps(int, int);
public:
byte GetXors();
void Inits(byte *key, int len);
void Crypts(byte *data, int size);
};
Процедура инициализации входного массива данных представлена следующей функцией
void RC4_CRYPTS::Inits(byte *key,int len)
{
if(!len) len=strlen((char*)key);
for(i=0; i<256; i++) LINE[i]=i;
for(i=j=0; i<256; i++) {
j=(j+LINE[i]+key[i%len])&255;
Swaps(i,j);
}
i=j=0;
}
Непосредственная перестановка реализована в виде функции Swaps()
void RC4_CRYPTS::Swaps(int i,int j)
{
byte t=LINE[i]; LINE[i]=LINE[j]; LINE[j]=t;
}
Результат выполнения разработанной программы представлен на рис. 2, рис. 3.
Рисунок 2 – Результат выполнения программы
Рисунок 3 – Результат выполнения программы
Таким образом, в процессе выполнения третьего раздела были получены следующие результаты. Была представлена программная разработки для демонстрации работы с массивами на языке программирования С++.
ЗАКЛЮЧЕНИЕ
Выполняя данную работу были получены следующие результаты. Возможности современных объектно-ориентированных языков программирования высокого уровня позволяют реализовать практически любую задачу. Языки программирования используют все новые и новые функции и проведенный анализ в данной работе позволит определить, в сравнении, особенности следующих языков программирования: C#; Java; C++.
Язык программирования C# был разработан как язык программирования прикладного уровня для CLR и, как таковой, зависящий от возможностей самой CLR. Это касается системы типов C#, которая отражает BCL.
Существует несколько реализаций объектно-ориентированного языка программирования C#: проект Mono включает в себя реализацию языка программирования C# с открытым исходным кодом; проект DotGNU также включает компилятор языка программирования C# с открытым кодом; реализация языка программирования C# в виде компилятора csc.exe была включена в состав платформы .NET Framework.
Анализируя отличия языка программирования C# от Java было установлено, что в языке программирования C# в дополнение к примитивным типам передаются по значению структуры (struct), остальные типы передаются по ссылке.
В обоих языках программирования методы определяются через функции класса. Тело метода располагается внутри описания класса. Также, были проанализированы возможности языков программирования по работе с массивами и циклами.
Массив это конечная последовательность упорядоченных элементов одного типа, доступ ко всем элементам в которой выполняется по средствам использования его индекса. Массив представляет собой специализированную структуру данных, которая представлена в виде группы ячеек одного типа, объединенных под одним единым именем. Массивы используются для непосредственной обработки большого количества однотипных данных.
Чаще всего в процессе программирования используются одномерные и двумерные массивы, поэтому можно рассмотреть только эти виды массивов для понимания данной темы.
Для примера разработки был описан и реализован алгоритм шифрования RC4.
СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ
- Архитектура и проектирование программных систем : монография / С.В. Назаров. – 2-е изд., перераб. и доп. – М. : ИНФРА-М, 2018. – 374 с.
- Валитов Ш.М. Современные системные технологии в отраслях экономики: Учебное пособие / Ш.М. Валитов, Ю.И. Азимов, В.А. Павлова. - М.: Проспект, 2016. – 504 c.
- Васильев А.В. Java. Объектно-ориентированное программирование: Учебное пособие. – СПб.: Питер, 2013. – 400 с.
- Венделева М.А. Информационные технологии в управлении.: Учебное пособие для бакалавров / М.А. Венделева, Ю.В. Вертакова. - Люберцы: Юрайт, 2016. – 462 c.
- Гаврилов М.В. Информатика и информационные технологии: Учебник / М.В. Гаврилов, В.А. Климов. - Люберцы: Юрайт, 2016. – 383 c.
- Дарков А.В. Информационные технологии: теоретические основы: Учебное пособие / А.В. Дарков, Н.Н. Шапошников. - СПб.: Лань, 2016. – 448 c.
- Довек Ж. Введение в теорию языков программирования / Ж. Довек, Ж.-Ж. Леви. - М.: ДМК, 2016. – 134 c.
- Ерохин В.В. Безопасность информационных систем: учеб пособие / В.В. Ерохин, Д.А. Погонышева, И.Г. Степченко. - М.: Флинта, 2016. – 184 c.
- Згадзай О.Э. Информационные технологии в юридической деятельности: Учебное пособие / О.Э. Згадзай и др. - М.: ЮНИТИ, 2016. – 335 c.
- Информационные технологии: Учебное пособие / Л.Г. Гагарина, Я.О. Теплова, Е.Л. Румянцева и др.; Под ред. Л.Г. Гагариной - М.: ИД ФОРУМ: НИЦ ИНФРА-М, 2015. – 320 c.
- Информационные системы и технологии: Научное издание. / Под ред. Ю.Ф. Тельнова. - М.: ЮНИТИ, 2016. – 303 c.
- Корнеев И.К. Информационные технологии в работе с документами: Учебник / И.К. Корнеев. - М.: Проспект, 2016. – 304 c.
- Косиненко Н.С. Информационные системы и технологии в экономике: Учебное пособие для бакалавров / Н.С. Косиненко, И.Г. Фризен. - М.: Дашков и К, 2015. – 304 c.
- Кулямин В.В. Технологии программирования. Компонентный подход / В.В. Кулямин. - М.: Интуит, 2014. – 463 c.
- Куроуз Д. Компьютерные сети. Нисходящий подход / Д. Куроуз, К. Росс. - М.: Эксмо, 2016. – 912 c.
- Машнин Т.С. Web-сервисы Java. – СПб.: БХВ – Петербург, 2012. – 560 с.
- Монахов В.В. Язык программирования Java и среда NetBeans. – 3-е изд., перераб. и доп. – СПб.: БХВ – Петербург, 2011. – 704 с.
- Нимейер П. Программирование на Java / Патрик Нимейер, Дэниэл Леук; [пер. с англ. М.А. Райтмана]. – Москва : Эксмо, 2014. – 1216 с.
- Практика и проблематика моделирования бизнес-процессов / Всяких Е.И., Зуева А.Г., Носков Б.В., - 2-е изд., (эл.) – М.:ДМК Пресс, 2018. – 248 с.
- Программирование в алгоритмах / Окулов С.М., – 6-е изд., (эл.) - М.:Лаборатория знаний, 2017. – 386 с.
- Программирование графики на С++. Теория и примеры : учеб. пособие / В.И. Корнеев, Л.Г. Гагарина, М.В. Корнеева. – М. : ИД «ФОРУМ» : ИНФРА-М, 2018. – 517 с.
- Программирование на языке высокого уровня. Программирование на языке С++: учеб. пособие / Т.И. Немцова, С.Ю. Голова, А.И. Терентьев ; под ред. Л.Г. Гагариной. – М. : ИД «ФОРУМ» : ИНФРА-М, 2018. – 512 с.
- Программирование на языке высокого уровня. Программирование на языке Object Pascal : учеб. пособие / Т.И. Немцова, С.Ю. Голова, И.В. Абрамова ; под ред. Л.Г. Гагариной. – М. : ИД «ФОРУМ» : ИНФРА-М, 2018. – 496 с.
- Романова Ю.Д. Информационные технологии в управлении персоналом: Учебник и практикум / Ю.Д. Романова, Т.А. Винтова, П.Е. Коваль. - Люберцы: Юрайт, 2016. – 291 c.
- Сальникова Л.С. Современные коммуникационные технологии в бизнесе: Учебник / Л.С. Сальникова. - М.: Аспект-Пресс, 2015. – 296 c.
- Советов Б.Я. Информационные технологии: теоретические основы: Учебное пособие / Б.Я. Советов, В.В. Цехановский. - СПб.: Лань, 2016. – 448 c.
- Хабибуллин И.Ш. Java 7. – СПб: БХВ – Петербург, 2012. – 768 с.
-
Валитов Ш.М. Современные системные технологии в отраслях экономики: Учебное пособие / Ш.М. Валитов, Ю.И. Азимов, В.А. Павлова. - М.: Проспект, 2016. – 504 c. ↑
-
Архитектура и проектирование программных систем : монография / С.В. Назаров. – 2-е изд., перераб. и доп. – М. : ИНФРА-М, 2018. – 374 с. ↑
-
Гаврилов М.В. Информатика и информационные технологии: Учебник / М.В. Гаврилов, В.А. Климов. - Люберцы: Юрайт, 2016. – 383 c. ↑
-
Сальникова Л.С. Современные коммуникационные технологии в бизнесе: Учебник / Л.С. Сальникова. - М.: Аспект-Пресс, 2015. – 296 c. ↑
-
Довек Ж. Введение в теорию языков программирования / Ж. Довек, Ж.-Ж. Леви. - М.: ДМК, 2016. – 134 c. ↑
-
Венделева М.А. Информационные технологии в управлении.: Учебное пособие для бакалавров / М.А. Венделева, Ю.В. Вертакова. - Люберцы: Юрайт, 2016. – 462 c. ↑
-
Советов Б.Я. Информационные технологии: теоретические основы: Учебное пособие / Б.Я. Советов, В.В. Цехановский. - СПб.: Лань, 2016. – 448 c. ↑
-
Згадзай О.Э. Информационные технологии в юридической деятельности: Учебное пособие / О.Э. Згадзай и др. - М.: ЮНИТИ, 2016. – 335 c. ↑
-
Дарков А.В. Информационные технологии: теоретические основы: Учебное пособие / А.В. Дарков, Н.Н. Шапошников. - СПб.: Лань, 2016. – 448 c. ↑
-
Информационные технологии: Учебное пособие / Л.Г. Гагарина, Я.О. Теплова, Е.Л. Румянцева и др.; Под ред. Л.Г. Гагариной - М.: ИД ФОРУМ: НИЦ ИНФРА-М, 2015. – 320 c. ↑
-
Васильев А.В. Java. Объектно-ориентированное программирование: Учебное пособие. – СПб.: Питер, 2013. – 400 с. ↑
-
Ерохин В.В. Безопасность информационных систем: учеб пособие / В.В. Ерохин, Д.А. Погонышева, И.Г. Степченко. - М.: Флинта, 2016. – 184 c. ↑
-
Информационные системы и технологии: Научное издание. / Под ред. Ю.Ф. Тельнова. - М.: ЮНИТИ, 2016. – 303 c. ↑
-
Косиненко Н.С. Информационные системы и технологии в экономике: Учебное пособие для бакалавров / Н.С. Косиненко, И.Г. Фризен. - М.: Дашков и К, 2015. – 304 c. ↑
-
Машнин Т.С. Web-сервисы Java. – СПб.: БХВ – Петербург, 2012. – 560 с. ↑
-
Хабибуллин И.Ш. Java 7. – СПб: БХВ – Петербург, 2012. – 768 с. ↑
-
Куроуз Д. Компьютерные сети. Нисходящий подход / Д. Куроуз, К. Росс. - М.: Эксмо, 2016. – 912 c. ↑
-
Монахов В.В. Язык программирования Java и среда NetBeans. – 3-е изд., перераб. и доп. – СПб.: БХВ – Петербург, 2011. – 704 с. ↑
-
Кулямин В.В. Технологии программирования. Компонентный подход / В.В. Кулямин. - М.: Интуит, 2014. – 463 c. ↑
-
Корнеев И.К. Информационные технологии в работе с документами: Учебник / И.К. Корнеев. - М.: Проспект, 2016. – 304 c. ↑
-
Нимейер П. Программирование на Java / Патрик Нимейер, Дэниэл Леук; [пер. с англ. М.А. Райтмана]. – Москва : Эксмо, 2014. – 1216 с. ↑
-
Программирование на языке высокого уровня. Программирование на языке С++: учеб. пособие / Т.И. Немцова, С.Ю. Голова, А.И. Терентьев ; под ред. Л.Г. Гагариной. – М. : ИД «ФОРУМ» : ИНФРА-М, 2018. – 512 с. ↑
-
Программирование в алгоритмах / Окулов С.М., – 6-е изд., (эл.) - М.:Лаборатория знаний, 2017. – 386 с. ↑
-
Практика и проблематика моделирования бизнес-процессов / Всяких Е.И., Зуева А.Г., Носков Б.В., - 2-е изд., (эл.) – М.:ДМК Пресс, 2018. – 248 с. ↑
-
Программирование графики на С++. Теория и примеры : учеб. пособие / В.И. Корнеев, Л.Г. Гагарина, М.В. Корнеева. – М. : ИД «ФОРУМ» : ИНФРА-М, 2018. – 517 с. ↑
-
Программирование на языке высокого уровня. Программирование на языке Object Pascal : учеб. пособие / Т.И. Немцова, С.Ю. Голова, И.В. Абрамова ; под ред. Л.Г. Гагариной. – М. : ИД «ФОРУМ» : ИНФРА-М, 2018. – 496 с. ↑
-
Романова Ю.Д. Информационные технологии в управлении персоналом: Учебник и практикум / Ю.Д. Романова, Т.А. Винтова, П.Е. Коваль. - Люберцы: Юрайт, 2016. – 291 c. ↑
- Построение организационных структур (Концептуальные основы построения организационных структур)
- «Развитие и трансформация организационных структур управления проектного типа»
- Принятие управленческого решения как организационный процесс (Процесс принятия управленческих решений в организации)
- Маркировка и упаковка товаров (отдельных групп и видов), значимость и пути её улучшения (Роль упаковки и маркировки товара в товароведении)
- Эффективность менеджмента организации
- Совершенствование кадровой стратегии салона красоты «XXI век».
- Виды договоров (Содержание договора)
- Общая характеристика оперативно-розыскных мероприятий (Оперативно-розыскные мероприятия - понятие и виды)
- Понятие оперативно-розыскной деятельности (Нормативно-правовая база)
- Процессы принятия решений в организации (Основные теоретические стороны принятия решений в организации)
- Моделирование предметной области «Управление документооборотом» с помощью UML (Теоретические основы платформ для разработки информационных систем)
- Роль мотивации в поведении организации (Теоретические управления мотивацией в организации)