Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Основные структуры алгоритмов: сравнительный анализ и примеры их использования (Алгоритм и его свойства. Способы записи алгоритма)

Содержание:

ВВЕДЕНИЕ

В современном мире ни одно действие не обходится без алгоритмов. Так мы каждый день действуем по определенным алгоритмам в зависимости от той или иной ситуации.

Так алгоритмы используются не только при вычислениях в компьютере, но и в информационных системах, которые продолжают возникшую в конце 70‑х гг. тенденцию распределенной обработки данных. Начальным этапом совершенствования таких систем явились многомашинные ассоциации - совокупность вычислительных машин различной производительности, объединенных в систему вместе с помощью каналов связи. Высшей стадией систем распределенной обработки данных являются компьютерные (вычислительные) сети разных уровней - от локальных вплоть до глобальных.

Объект контрольной работы – это алгоритм и его виды. Предмет работы – возможность использования алгоритмов на практике.

Цель данной работы является освещение основных понятий алгоритмов. В соответствии с определенной целью была поставлена и решена задача исследования терминов алгоритм, компьютерная программа, интерпретатор, компилятор.

1. Алгоритм и его свойства. Способы записи алгоритма

Термин «алгоритм» возник очень давно, первое упоминание о нем считается книга арабского математика IX века Аль-Хорезми «Algoritmic de numero Inndoru», что переводится как «Трактат Аль-Хорезми об арифметическом искусстве индусов»[1]. Согласно данной книге алгоритм – это набор правил или действий, определяют процесс преобразования начальных данных задачи в искомый результат[2].

К примеру, алгоритм для приготовления яичницы:

  1. Взять сковородку.
  2. Налить в него чайную ложку растительного масла.
  3. Поставить на плиту.
  4. Включить плиту на 50% мощности, подождать 5 минут.
  5. Взять 4 яйца.
  6. Разбить яйца в сковороду, скорлупу выкинуть в мусорное ведро.
  7. Готовить пока яйца не прожарятся.
  8. Яичница готова.

Даже из того простого алгоритма становится ясно, что алгоритм состоит из конечного числа действий, которые называются командами[3]. Они выполняются строго последовательно, как указано в алгоритме. Все возможные команды, которые может сделать исполнитель, будем считать системой команд исполнителя.

Каждый алгоритм должен обладать рядом свойств, для того чтобы любой исполнитель мог, выполнив его получить результат[4]. Перечислим свойства:

  • Однозначность, под ней понимается единственность толкования исполнителем правила построения действий и порядок их выполнения. Для этого необходимо для записи алгоритма использовать систему команд исполнителя.
  • Конечность, под ней понимается необходимость завершать каждый шаг алгоритма, и то, что алгоритм имеет конечное число шагов[5].
  • Результативность, под ней понимается, что выполнение всех шагов алгоритма обязательно приведет к определенному результату.
  • Массовость, под ней понимается возможность использовать данный алгоритм для решения целого класса задач. Для этого необходимо использовать более общие фразы, и не использовать конкретные значения.
  • Правильность, под ней понимается то, что выполнение алгоритма дает правильный результат[6].
  • Эффективность, под ней понимается, что для алгоритма необходимо использовать ограниченные ресурсы компьютера (место на жестком диске, в оперативной памяти, процессорное время, и т. д.).

Рассмотрим ранее приведенный пример и посмотрим удовлетворяет ли он всем свойствам алгоритмов (Таблица 1):

Таблица 1. Свойства алгоритма

Свойство

Соответствие

Однозначность, под ней понимается единственность толкования исполнителем правила построения действий и порядок их выполнения. Для этого необходимо для записи алгоритма использовать систему команд исполнителя.[7]

Да, используется понятный язык исполнителю.

Конечность, под ней понимается необходимость завершать каждый шаг алгоритма, и то, что алгоритм имеет конечное число шагов.[8]

Да, число конечно 8 шагов.

Результативность, под ней понимается, что выполнение всех шагов алгоритма обязательно приведет к определенному результату.

Да, исполнитель приготовить яичницу.

Массовость, под ней понимается возможность использовать данный алгоритм для решения целого класса задач. Для этого необходимо использовать более общие фразы, и не использовать конкретные значения.

Да, данный алгоритм можно использовать для приготовления яичницы из любых яиц.

Правильность, под ней понимается то, что выполнение алгоритма дает правильный результат.[9]

Да, в результате будет получена яичница.

Эффективность, под ней понимается, что для алгоритма необходимо использовать ограниченные ресурсы компьютера (место на жестком диске, в оперативной памяти, процессорное время).

Да, используется чайная ложка масла и 4 яйца, одна сковородка.

Алгоритм можно задать различными способами:

  • на естественном языке исполнителя, устно или письменно;
  • в виде блок-схемы;
  • на каком-либо языке программирования.

Выбор и разработка алгоритма и численного метода решения задачи имеют важнейшее значение для успешной работы над программой[10]. Тщательно проработанный алгоритм решения задачи – необходимое условие эффективной работы по составлению алгоритму.

Иногда используют полуформальный язык с ограниченным словарём[11] (часто на основе английского языка), промежуточный между естественным языком и языком программирования. Такой язык называется псевдокодом. Запись алгоритма на псевдокоде называется структурным планом. Псевдокод[12] удобен тем, что позволяет программисту сосредоточиться на формулировке алгоритма, не задумываясь над синтаксическими особенностями конкретного языка программирования.

Псевдокод:

Алгоритм <название>

Начало

<последовательность действий>

Конец

Любой алгоритм может быть представлен в виде последовательности действий. Под действием понимают либо базовую операцию, либо базовую структуру.

В качестве базовых операций используются:

  • операция присваивания вида

<переменная> := < выражение >

  • операция ввода/вывода

ввод (список ввода)

вывод (список вывода).

Для разработки структуры программы удобнее пользоваться записью алгоритма в виде блок-схемы (в англоязычной литературе используется термин flow-chart). Для изображения основных алгоритмических структур и блоков на блок-схемах[13] используют специальные графические символы[14].

Составим алгоритм вычисления квадратного корня[15] из произвольного положительного вещественного числа х в виде блок-схемы.

Блок-схема для решения данного рода задач будет выглядеть следующим образом:

Начало

Ввод вещественного числа х

Вычисление корня по формуле

Вывод результата

Конец

2. Классификация алгоритмов

Различают три типа базовых структур (рис. 1):

  • Следование[16]
  • Развилка[17]
  • Цикл[18]

Рис. 1. Классификация алгоритмов

Структура Следование - одна из самых важных структур. Она означает, что два действия должны быть выполнены друг за другом.

Структура Развилка обеспечивает выбор одной из двух альтернатив: если < условие 1 > то

< действие 1 >

иначе

< действие 2 >

все

Существует сокращенная форма структуры Развилка, которая позволяет выполнить действие или пропустить его:

если < условие > то < действие >

все

Обобщением структуры Развилка является Множественный выбор:

если Var = Const1 то < действие 1 >

если Var = Const2 то < действие 2 >

если Var = ConstN то < действие N >

все

В зависимости от значения переменной Var[19] выполняется одно из указанных действий, например, если Var = Const3, то выполняется < действие 3 >.

Третьей базовой структурой является Цикл, который предусматривает повторное выполнение определенных действий, необходимое для большинства программ. Различают следующие типы структур Цикл[20]:

  • цикл «от до»
  • цикл «пока»
  • цикл «до»

Цикл «от до» управляет повторением выполнения действия с помощью переменной цикла:

цикл от I:= N1 до N2

< действие >

кц

Здесь I - переменная цикла[21], N1, N2 - начальное и конечное значения переменной цикла, вычисляются один раз при входе в цикл. Переменная цикла пробегает все следующие друг за другом в порядке возрастания значения от начального до конечного. Изменение значения переменной цикла происходит автоматически после каждого выполнения действия, указанного внутри цикла. В зависимости от соотношения N1 и N2 цикл может не выполниться ни разу (N1>N2) или выполниться (N2-N1+1) раз.

В цикле «пока»[22] управление внутри цикла осуществляется с помощью логического условия:

цикл пока < условие>

< действие >

кц

Выполнение действия повторяется до тех пор, пока истинно условие. Проверка условия осуществляется в начале цикла. Это означает, что действие может не выполниться ни разу. Чтобы такой цикл не был бесконечным, внутри цикла необходимо предусмотреть изменение значения условия с истинного на ложное.

Третий тип структуры цикл «до» имеет вид:

цикл

< действие > до < условие>

кц

Как только значение условия становится истинным[23], цикл прекращается. Цикл “до“ независимо от значения условия выполнится по меньшей мере один раз, т.к. проверка условия производится после выполнения действия. Для завершения цикла необходимо внутри цикла изменить условие с ложного на истинное. Выбор структуры цикла[24] определяется особенностями алгоритма решения конкретной задачи.

Существенная особенность перечисленных базовых структур состоит в том, что каждая из них имеет один вход и один выход. Их можно соединять друг с другом в любой последовательности. В качестве действия может использоваться любая из перечисленных структур, что обеспечивает возможность вложенности одних структур в другие. В зависимости от применяемых базовых структур различают следующие типы алгоритмов:

  • линейные
  • разветвляющиеся
  • циклические.

2.1 Линейный алгоритм. Примеры

Линейным[25] называется алгоритм, блоки которого расположены последовательно[26] один за другим, нет условий и повторений. Покажем общую структуру линейного алгоритма в виде блок-схемы[27] (Рис. 2.).

начало

Обработка данных

Ввод данных

Вывод результата

конец

Рис. 2. Блок-схема

Основной принцип программирования заключается в том, что обрабатывать можно только те данные, которые находятся в определенных областях оперативной памяти компьютера. Для того чтобы поместить исходные данные в оперативную память используются операторы ввода данных. Для реализации процесса обработки данных используется оператор присваивания.

Результат вычислений помещается в область S оперативной памяти[28]. Чтобы вывести результат из памяти на экран монитора необходимо использовать оператор вывода.

2.2 Разветвляющийся алгоритм. Примеры

Алгоритм называется разветвляющимся[29], если содержит хотя бы одно условие, в результате которого обеспечивается переход на один из двух возможных вариантов решения задачи. Ветвление может быть полным[30] (действия и после да и после нет) и неполным (в случае если нет – ничего не происходит). Пример разветвляющегося алгоритма – алгоритм решения квадратного уравнения. Появление условия при решении этой задачи связано с отсутствием корней при отрицательном дискриминанте. Рассмотрим блок-схему этого алгоритма (Рис. 2):

начало

Ввод a,b,c

D=b*b-4*a*c

d>0

X1=(-b+SQR(d))/(2*a)

Корней нет

Вывод Х1, Х2

конец

X2=(-b-SQR(d))/(2*a)

да

нет

Рис. 2. Ветвление

Для данной алгоритмической структуры[31] характерно, что в любой момент времени её реализации осуществляется обработка только по какой-либо одной из ветвей[32].

Для описания разветвляющегося алгоритма существуют операторы:

  1. условный

блочной структуры:

IF условие THEN[33]

блок действий 1

ELSE

блок действий 2

ENDIF

линейной структуры:

IF условие THEN блок 1 ELSE блок 2

Обе структуры могут быть использованы как в полной форме так и в усеченной – без блока ELSE.

При работе условного оператора сначала проверяется выполнение условия. Если условие выполняется (истинное), то реализуется блок 1, в противном случае – блок 2. Условие – это логическое выражение, использующее операции сравнения (=, <, > <=, >=, <>) и логические операции[34] (AND, OR).

Программа решения квадратного уравнения с использованием условного оператора имеет вид:

CLS : INPUT A,B,C : D=B^2-4*A*C

IF D>0 THEN

X1=(-b+SQR(d))/(2*a) : X2=(-b-SQR(d))/(2*a) : PRINT X1,X2

ELSE

PRINT ”Решенией нет”[35]

ENDIF

  1. выбора (выражением может быть список через запятую 1,3,4 диапазон значений 1 TO 9; операция сравнения IS >=).

SELECT CASE выражение[36]

CASE условие 1

блок операторов 1

CASE условие 2

блок операторов 2

CASE ELSE

блок операторов n

END SELECT

CLS : INPUT A,B,C : D=B^4*A*C

SELECT CASE D

CASE IS >0

X1=(-b+SQR(d))/(2*a) [37]

X2=(-b-SQR(d))/(2*a) : PRINT X1,X2

CASE ELSE

PRINT ”Решенией нет”

END SELECT

END

2.3 Циклический алгоритм. Примеры

Алгоритм называется циклическим, если содержит участок, повторяющийся один или много раз.

Циклы[38] бывают с определённым количеством, неопределённым числом вычислений.

I = IН , IK , h

тело цикла

условие

тело цикла

тело цикла

условие

да

да

нет

нет

I – параметр цикла

IН – начальное значение параметра

IK – конечное значение параметра

h – шаг изменения параметра (приращение)

Оператор цикла с параметром:

FOR I = IН TO IK STEP h[39]

тело цикла

NEXT I

Оператор цикла с предусловием:

DO WHILE[40] условие продолжения вычислений (UNTIL условие прекращения вычислений)

тело цикла

LOOP

Оператор цикла с постусловием:

DO

тело цикла

LOOP WHILE условие продолжения вычислений (UNTIL[41] условие прекращения вычислений)

Приведем пример решения задачи на языке паскаль и использования алгоритма.

Задание

Написать программу[42], которая создает типизированный файл и записывает в него MxN значений. Имя для файла создается по маске <login2>.dan.

Решение:

Напишем процедуру записи в файл. Так же помним, что при работе с типизированными файлами запись осуществляется в файл в DOS формате и с разделителями. Поэтому если его открыть в Блокноте будут не читаемые символы. Чтение возможно только программно[43].

Описание структуры программы:

Для решения нам потребуются константы: M=15; N=16. Для удобства напишем процедуру:

  1. write_to_file(); - для записи в файл. В ней будем генерировать значения массива из записывать их в файл.

Алгоритм

Рис. 3. Блок-схема 1

Рис. 4. Блок-схема 2

Код программы:

program p21;

const

M=15;

N=16;

procedure write_to_file();//запись в файл

var

i,j: integer;

k:byte;

f: file of byte;

mass: array[1..M, 1..N] of byte;//массив с данными

begin

Assign(f, 'xx162waa.dan');

Rewrite(f);

for i:=1 to M do

for j:=1 to N do

begin

k:=random(255);

mass[i][j]:=k;//наполнение массива

write(f, mass[i][j]);

end;

close(f);

writeln('Данные в файл записаны');

end;

begin

write_to_file();//сначала записываем данные в файл

end.

Результат работы программы:

Рис. 5. Работа программы

3. Языки программирования

Прогресс развития современных компьютерных технологий протекает очень быстро, поэтому появились новые знаковые системы для записи алгоритмов – языки программирования.

Они служит целям:

      1. Язык близок к машинному языку, что позволяет быстро создавать программы, но сложно перекладывать описание алгоритма с обычного языка на данный язык.
      2. Язык, который близок к языку на котором составление описание задачи, что позволяет легко перекладывать алгоритм на данный язык.

Поэтому существует делема, на каком языке реализовать решение задачи Язык программирования программисту[44] дает определенный набор инструментов, если данные инструменты в данный момент не нужны, то программист их не использует.

Для повышения скорости создания программы и уменьшения затрат на данный процесс, были созданы языки высокого уровня. То есть данные языки приближены к естественному языку, который использует человек. Для того чтобы это стало реальностью появились два инструмента:

  • интерпретаторы[45], которые сканируют и проверяют исходный код в один шаг,
  • компиляторы[46], которые сканируют исходный код для производства текста программы на машинном языке, которая затем выполняется отдельно.

3.1 Интерпретаторы и компиляторы

Одно, из основных преимуществ интерпретаторной реализации в том, что данная реализация позволяет вам сразу после ввода команды получать результат. К примеру, если написать PRINT 4*3/4 и нажать кнопку ввода, то вы сразу получите ответ = 3 (данная особенность позволяет вам использовать компьютер стоимостью от 10000 рублей как обычный калькулятор стоимостью 100 рублей)[47]. Плюс ко всему, интерпретаторы имеют особые атрибуты, которые значительно упрощают отладку. То есть программист может перед запуском программы определить перечень переменных значения, которых он хочет отслеживать. Сформировать данный список и запустить пошагово программу, в специальной области окна он будет видеть все значения указанных переменных в данный момент времени. Есть еще одна возможность в любой момент времени нажать кнопку пауза, что позволит прервать выполнение программы и посмотреть значения необходимых переменных или же посмотреть, что программа выводит на экран[48].

Данные особенности значительно ускорять отладку программы, что позволяет отсечь больше ошибок в процессе создания программы, а не при использования ее у конечного пользователя.

Компилятор[49] - это транслятор текста на машинный язык, который считывает программу, написанную на «естественном» языке и преобразует в машинные инструкции. То есть он создает исполняемый файл и запускает его, чтобы пользователь мог увидеть результат своей работы. Но он не позволит прервать преобразование и посмотреть состояние переменных. Единственно, если произойдут критичные ошибки, которые не позволять сформировать исполняемый файл.

Компилятор сообщить об ошибки и прервет свою работу[50]. Если вы поработаете над созданием улучшений, то вы сможете достичь значительного быстродействия. Другая сторона данного процесса состоит в том, что наша программа, используют большую часть времени на работу с файлами на дисках или ожидание ввода, что не позволить значительно повысить быстродействие.

3.2 Языки программирования

Сейчас существует множество языков программирования для решения той или иной задачи. Приведем пример одного из распространенных языков программирования и приведем его достоинства и недостатки.

С# достоинства[51]:

  • Очень популярен, поэтому что имеется хорошая поддержка.
  • Имеет большую базу свободно доступного кода для загрузки, а также поддерживает прямую интеграцию с ASM и C.
  • Очень мощный и может быть использован для создания практически любой программы, включая низкоуровневые системные программы.
  • В каждой крупной операционной системе есть компилятор для С#. Программы на С#, специально написанные для переносимости, будут работать во многих основных операционных системах с небольшими изменениями в коде.
  • С# - это язык, который скомпилирован, поэтому он часто может работать быстрее, чем такие языки, как Java, Python и C ; Поскольку он не зависит от интерпретатора или «среды выполнения»[52], которая должна быть загружена заранее.
  • Имеет давно установленную базу использования, которая, вероятно, гарантирует, что поддержка языка будет продолжаться в течение некоторого времени.
  • Многие языки основаны на C / С#, таких как Java, поэтому знание на С# облегчит понимание этих языков.
  • Имеет относительно небольшую связанную стандартную библиотеку С# по сравнению с такими языками, как Java Platform Standard SDK или .NET Framework[53], что позволяет повысить гибкость и сократить отпечаток системных результирующих компиляций.
  • Стандартизирована Международной ассоциацией стандартов как ISO / IEC 14882 со значительными версиями стандарта, выпущенными в 1998, 2003 и 2011 годах.
  • Имеет значительное количество библиотек с открытым исходным кодом, включая Boost[54], которые доступны и широко доступны.

С# недостатки:

  • Сам по себе это не очень безопасно, поскольку в нем отсутствуют автоматические проверки границ, неверные проверки указателей и т. д., допускается невидимые побочные эффекты (вызывающие недетерминированное поведение) и допускается неявное приведение типов. Это связано с многочисленными проблемами безопасности и утечками памяти, если не предпринимать дополнительных усилий для их предотвращения.
  • По умолчанию отсутствует встроенное управление памятью, требующее от разработчиков использования внешних библиотек или повторного изобретения необходимого кода.
  • Его система ООП[55] довольно архаична, требуя явной виртуализации методов, среди прочего, обычно зарезервированной для старых языков.
  • Отсутствует возможность определения полностью настраиваемых операторов. (Не следует путать с возможностью определения пользовательских реализаций для аппаратного набора операторов, который имеет С#.)
  • Не предлагает полных алгебраических типов данных.
  • Имеет несколько более сложную систему обучения, чем некоторые другие языки.
  • Очень придирчиво, как форматируется код (но не столь придирчивый, как FORTRAN, RPG или Haskell[56])
  • GUI[57], Networking и Threads не стандартизированы, требуя использования нестандартных сторонних библиотек (хотя доступно множество таких библиотек, как бесплатных, так и коммерческих, а также возможность использовать библиотеки C), Boost - одна из предпочтительных библиотек. Отсутствие стандарта[58], однако, может затруднить обучаемость и функциональную совместимость или по крайней мере потребовать некоторого расширенного расследования.

Приведем несколько примеров программ на языкы С#:

  1. Разработать программу нахождения корней квадратного уравнения с использованием описанных инструментов языка С#:

Решение:

using Systeem;

using Systeem.Colleections.Geeneeric;

using Systeem.Linq;

using Systeem.Teext;

using Systeem.Threeading.Tasks;

nameespacee ConsoleeApplication1

{

class Program

{

static void Main(string[] args)

{

doublee a, b, c;

doublee d, x1, x2;

Consolee.WriteeLinee("a*x*x+b*x+c=0");

Consolee.Writee("Введите a="); a=Conveert.ToDoublee(Consolee.ReeadLinee());

Consolee.Writee("Введите b="); b=Conveert.ToDoublee(Consolee.ReeadLinee());

Consolee.Writee("Введите c="); c=Conveert.ToDoublee(Consolee.ReeadLinee());

if (a == 0.0){

Consolee.WriteeLinee("D=0 корней нет!");

}

eelsee{

d = b * b - 4 * a * c;

Consolee.WriteeLinee("D= {0:f3}", d);

if (d > 0){

x1 = (-b + Math.Sqrt(d)) / (2 * a);

x2 = (-b - Math.Sqrt(d)) / (2 * a);

Consolee.WriteeLinee("x1= {0:f3}", x1);

Consolee.WriteeLinee("x2= {0:f3}", x2);

}

eelsee{

if (d == 0){

x1 = (-b / (2 * a)); x2 = x1;

Consolee.WriteeLinee("x1=x2= {0:f3}", x1);

}

eelsee{

Consolee.WriteeLinee("D<0 Действительных корней нет!");

}

}

}

Consolee.ReeadLinee();

}

}

}

  1. Разработать программу согласно задания на языке С#:

Предметная область: Вокзал. Касса вокзала имеет список тарифов на различные направления. При покупке билета регистрируются паспортные данные пассажира. Пассажир покупает билеты на различные направления.

Все пассажиры имеют скидки. У одних пассажиров скидка задана в процентах, у других скидка фиксированная.

Добавить комментарии к ключевым объектам и функциям.

Добавить блоки try – catch (по усмотрению)

Составить схему алгоритма в Microsoft Visio.

Добавить обработку исключительных ситуаций:

  • длина строки наименования тарифа больше 10 символов.
  • стоимость билета с учетом скидки меньше нуля.

Добавить перегруженный бинарный оператор для уменьшения стоимости тарифа.

Система должна:

  • позволять вводить данные о тарифах;
  • позволять вводить паспортные данные пассажира и регистрировать покупку билета;
  • рассчитать среднюю стоимость проданных билетов;
  • по введенному наименованию направления высчитать сумму проданных билетов с учетом предоставленных скидок;

Решение:

Данная программа сложная так будет сочетать в себе структуры, циклы, подпрограммы, но прежде всего построим обобщенную блок схему нашего алгоритма, при этом подпрограммы мы не будет рисовать, а просто укажем их названия и параметры, которые передаются в них.

Рис. 6. Блок-схема программы

Код программы:

using Systeem;

using Systeem.Colleections.Geeneeric;

using Systeem.Linq;

using Systeem.Teext;

using Systeem.Threeading.Tasks;

nameespacee ConsoleeApplication2

{

public struct tarif

{

public string naim;

public long ceena;

}//тип тариф

public struct opeerac

{

public string fio;

public string passport;

public string tarif_naim;

public string skidka;

public long ceena_it;

}//тип операции

class Tpassport

{

public int zz;//индекс элемента для изменения

public long chi;//сумма на сколько изменить

public static Tpassport opeerator -(Tpassport obj1, long obj2)//перегружаемый оператор

{

Tpassport arr = neew Tpassport();

arr = obj1;//делаем полную копию элемента

arr.dan_t[obj1.zz].ceena = obj1.dan_t[obj1.zz].ceena - obj2;//уменьшаем стоимость на заданное значение

reeturn arr;

}

public void f7(int n2)//процедура для запроса параметров для уменьшения стоимости тарифа

{

Consolee.Writee("\nДанные по тарифам:");

Print(n2, truee);//выводим список тарифов

do

{

Consolee.Writee("Введите № тарифа по которому хотите уменьшить стоимость = "); zz = Conveert.ToInt32(Consolee.ReeadLinee());

if ((zz < 1) || (zz > n2)) { Consolee.WriteeLinee("Нет такого тарифа!!! Повторите ввод"); }

eelsee { breeak; };

} whilee (truee);//пользователь вводит № тарифа до тех пор, пока не введет №, который существует

Consolee.Writee("Введите сумму на которую хотите ее уменьшить = "); chi = Conveert.ToInt64(Consolee.ReeadLinee());

}

public opeerac[] dan_o = neew opeerac[100];

public tarif[] dan_t = neew tarif[20];

public void Input(int n_o, int n_t, Booleean p)//процедура ввода данных

{

long ch = 0;

long zn = 0;

long ntt = 0;

Consolee.Cleear();

if (p == falsee)//вводим данные по операции

{

if (n_t == 0)

{

Consolee.WriteeLinee("Заведите сначала тарифы");

}

eelsee

{

Consolee.Writee("\nДанные по тарифам:");

Print(n_t, truee);

Consolee.WriteeLinee("");

Consolee.WriteeLinee("\nВведите данные по операции № " + n_o);

Consolee.Writee("ФИО= "); dan_o[n_o].fio = Consolee.ReeadLinee();

Consolee.Writee("ПАСПОРТ= "); dan_o[n_o].passport = Consolee.ReeadLinee();

Consolee.Writee("ТАРИФ= (Введите его №)"); ntt = Conveert.ToInt32(Consolee.ReeadLinee()); dan_o[n_o].tarif_naim = dan_t[ntt].naim;

Consolee.Writee("Вы выбрали ТАРИФ=" + dan_o[n_o].tarif_naim);

Consolee.Writee("\nСКИДКА (Пример: 100 или 5%)= "); dan_o[n_o].skidka = Consolee.ReeadLinee();

zn = dan_t[ntt].ceena;

if (zn < 0) { zn = 0; };

int pos = dan_o[n_o].skidka.IndeexOf("%");

if (pos > -1) { ch = Conveert.ToInt64(dan_o[n_o].skidka.Reeplacee("%", "")); dan_o[n_o].ceena_it = zn - ((zn * ch) / 100); }

eelsee { ch = Conveert.ToInt64(dan_o[n_o].skidka); dan_o[n_o].ceena_it = zn - ch; }

Consolee.Writee("ЦЕНА= " + dan_o[n_o].ceena_it);

Consolee.WriteeLinee("\nДля продолжения нажмите любую клавишу..."); Consolee.ReeadKeey();

}

}

if (p == truee)//вводим данные по тарифам

{

Consolee.WriteeLinee("\nВведите данные по тарифу № " + n_o);

do

{

Consolee.Writee("НАИМЕНОВАНИЕ= "); dan_t[n_o].naim = Consolee.ReeadLinee();

if (dan_t[n_o].naim.Leength < 10) { Consolee.WriteeLinee("Длина строки < 10 символов!!! Повторите ввод"); }

eelsee { breeak; };

} whilee (truee);

Consolee.Writee("ЦЕНА= "); dan_t[n_o].ceena = Conveert.ToInt64(Consolee.ReeadLinee());

}

}

public void Print(int n, Booleean p)//процедура вывода

{

if (p == falsee)//выводим данные по операции

{

for (int i = 1; i <= n; i++)

{

Consolee.Writee("\nДанные по операции № " + i);

Consolee.Writee("\nФИО= " + dan_o[i].fio);

Consolee.Writee(" | ПАСПОРТ= " + dan_o[i].passport);

Consolee.Writee(" | ТАРИФ= " + dan_o[i].tarif_naim);

Consolee.Writee(" | СКИДКА (Пример: 100 или 5%)= " + dan_o[i].skidka);

Consolee.Writee(" | ЦЕНА= " + Conveert.ToString(dan_o[i].ceena_it));

}

}

if (p == truee)//выводим данные по тарифам

{

for (int i = 1; i <= n; i++)

{

Consolee.Writee("\nДанные по тарифу № " + i);

Consolee.Writee("\nНАИМЕНОВАНИЕ= " + dan_t[i].naim);

Consolee.Writee(" | ЦЕНА= " + dan_t[i].ceena);

}

}

Consolee.WriteeLinee("\nДля продолжения нажмите любую клавишу..."); Consolee.ReeadKeey();

}

public void Srzn(int n)//процедура для рассчета средней стоимости проданных билетов

{

long sm = 0;

long sr = 0;

for (int i = 1; i <= n; i++) { sm = sm + Conveert.ToInt64(dan_o[i].ceena_it); }

sr = sm / n;

Consolee.WriteeLinee("\nСредняя стоимость проданных билетов = " + Conveert.ToString(sr));

Consolee.WriteeLinee("\nДля продолжения нажмите любую клавишу..."); Consolee.ReeadKeey();

}

public void Spb(int n, int n2)//процедура для рассчета суммы проданных билетов с учетом скидок

{

long sm = 0;

int t = 0;

Consolee.Writee("\nДанные по тарифам:");

Print(n2, truee);

do

{

Consolee.Writee("Введите № тарифа по которому хотите сумму проданных билетов с учетом скидок = "); t = Conveert.ToInt32(Consolee.ReeadLinee());

if ((t < 1) || (t > n2)) { Consolee.WriteeLinee("Нет такого тарифа!!! Повторите ввод"); }

eelsee { breeak; };

} whilee (truee);//пользователь вводит № тарифа до тех пор, пока не введет №, который существует

for (int i = 1; i <= n; i++) { sm = sm + Conveert.ToInt64(dan_o[i].ceena_it); }

Consolee.WriteeLinee("\nСумма проданных билетов с учетом скидок = " + Conveert.ToString(sm));

Consolee.WriteeLinee("\nДля продолжения нажмите любую клавишу..."); Consolee.ReeadKeey();

}

}

class Program

{

static void Main(string[] args)

{

const string PreessAnyKeey = "\nДля продолжения нажмите любую клавишу...";

Tpassport ff = neew Tpassport();

int n_o, n_t;

int iteem;

n_o = 0; n_t = 0;

do//меню пользователя

{

do

{

Consolee.Cleear();

Consolee.Writee("\nВыберите одно из следующих действий:");

Consolee.Writee("\n 1. Вводить данные о тарифах");

Consolee.Writee("\n 2. Вводить паспортные данные пассажира и регистрировать покупку билета");

Consolee.Writee("\n 3. Вывести данные о тарифах");

Consolee.Writee("\n 4. Вывести паспортные данные пассажира и данные покупки билета");

Consolee.Writee("\n 5. Рассчитать среднюю стоимость проданных билетов");

Consolee.Writee("\n 6. По введенному наименованию направления высчитать сумму проданных билетов с учетом предоставленных скидок");

Consolee.Writee("\n 7. Изменить цену тарифа");

Consolee.Writee("\n 8. Выход в Windows");

Consolee.Writee("\n Введите номер выбранного действия: ");

iteem = 0;

try

{ iteem = Conveert.ToInt16(Consolee.ReeadLinee()); }

catch (FormatEExceeption eex)//проверка на ошибки

{ Consolee.WriteeLinee(eex.Meessagee + "\nНеобходимо вводить целые числа от 1 до 7 " + PreessAnyKeey); Consolee.ReeadKeey(); }

} whilee ((iteem < 1) || (iteem >8));

switch (iteem)//обработка команд пользователя

{

casee 1: { n_t = n_t + 1; ff.Input(n_t, n_t, truee); breeak; }

casee 2: { n_o = n_o + 1; ff.Input(n_o, n_t, falsee); breeak; }

casee 3: { ff.Print(n_t, truee); breeak; }

casee 4: { ff.Print(n_o, falsee); breeak; }

casee 5: { ff.Srzn(n_o); breeak; }

casee 6: { ff.Spb(n_o, n_t); breeak; }

casee 7: { ff.f7(n_t); ff = ff - ff.chi; breeak; }

casee 8: { iteem = 0; breeak; }

}

if (iteem == 0) breeak;

} whilee (truee);

}

}

}

ЗАКЛЮЧЕНИЕ

В представленной работе были рассмотрено: понятие алгоритма, виды алгоритмов, а также кратко языки программирования и реализация на них различных алгоритмов. По итогам проведенных исследований делаем следующие выводы:

Спрос на работы, а также услуги проведения автоматизации(алгоритмизации) всех уровней информационного обеспечения в последнее время возрастает. Главы компаний стремясь увеличить доходность от собственной деятельности, отлично осознает необходимость повышения эффективности управления за счет применения автоматизации, мощных вычислительных систем управления инфраструктурой предприятия согласно всей географии размещения объектов, а также поддержки управленческих решений.

Современная стадия автоматизации позволяет использовать различные языки программирования для решения любых вопросов на производстве. То есть практически любой алгоритм можно реализовать, даже создать робота или бота для общения с человеком. Но языки программирования и компьютеры не останавливаются в своем развитии и позволяют с каждым разом реализовывать все более сложные алгоритмы, но без существования термина алгоритм этого бы не было.

Примеры: системы искусственного интеллекта, экспертные системы, которые управляют производственными линиями.

СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ

  1. Агальцов, Виктор Петрович. Информатика для экономистов : [учебник по специальности "Прикладная информатика (по областям) и другим экономическим специальностям"] / В. П. Агальцов, В. М. Титов. - Москва : Форум : ИНФРА-М, 2013. - 447 с. : ил.
  2. Албахари, Д. Cи 6.0 : справочник : полное описание языка / Джозеф Албахари, Бен Албахари ; [пер. с англ. Ю. Н. Артеменко]. - [6-е изд.]. - Москва [и др.] : Вильямс, 2017. - 1039 с.
  3. Александреску, А. Современное проектирование на С++ : обобщенное программирование и прикладные шаблоны проектирования / Андрей Александреску ; [пер. с англ. Д. А. Клюшина ; предисл. С. Мейерса, Дж. Влиссидеса]. - Москва [и др.] : Вильямс, 2017. - 335 с.
  4. Васильев, А. Н. Объектно-ориентированное программирование на С++ / Васильев А. Н. - Санкт-Петербург : Наука и техника, 2016. - 543 с.
  5. Гаврилов, Михаил Викторович. Информатика и информационные технологии : учебник для бакалавров / М. В. Гаврилов, В. А. Климов. - 3-е изд., перераб. и доп. - Москва : Юрайт, 2013. - 377, [1] с. : ил. ; 21 см. - (Бакалавр. Базовый курс). - Библиогр.: 378 с.
  6. Голодов, Валентин Александрович. Истоки программ : компьютерная грамотность: разработка и реализация компьютерных решений / В. А. Голодов. - Москва : МАКС Пресс, 2016. - 38, [1] с.
  7. Горнец, Николай Николаевич. ЭВМ и периферийные устройства. Устройства ввода-вывода : учебник для вузов по направлению "Информатика и вычислительная техника" / Н. Н. Горнец, А. Г. Рощин. - Москва : Академия, 2013. - 223 с. : ил.
  8. Гриффитс, Д. Изучаем программирование на С : [12+ : пер. с англ.] / Д. Гриффитс, Д. Гриффитс. - Москва : Эксмо, 2016. - 621 с.
  9. Информатика : учебник для бакалавров: [для вузов по специальности 080801 "Прикладная информатика" и другим экономическим специальностям / Трофимов В. В., Ильина О. П., Приходченко А. П. и др.] ; под ред. В. В. Трофимова ; С.-Петерб. гос. ун-т экономики и финансов. - 2-е изд., испр. и доп. - Москва : Юрайт : ИД "Юрайт", 2013. - 916 с. : ил.
  10. Информатика в экономике : учебное пособие / [Бубнова Н. Г. и др.] ; под ред. Б. Е. Одинцова, А. Н. Романова. - Москва : Вузовский учебник : ИНФРА-М, 2013. - 476, [1] с. : ил. ; 22 см. - Библиогр.: 472 с.
  11. Информатика для экономистов : учебник для бакалавров / [Поляков В. П., Голубева Н. Н., Завгородний В. И. и др.] ; под ред. В. П. Полякова ; Финансовый ун-т при Правительстве РФ. - Москва : Юрайт, 2013. - 524 с.
  12. Практикум по информатике : CD с учебными материалами: [для вузов / под ред. Н. В. Макаровой ; Н. В. Макарова и др.]. - Санкт-Петербург [и др.] : Питер : Питер Пресс, 2013. - 320 с. : ил.
  13. Федорова, Галина Николаевна. Информационные системы : учебник / Г. Н. Федорова. - 3-е изд., стер. - Москва : Академия, 2013. - 202 с. : ил. ; 22 см. - (Среднее профессиональное образование. Информатика и вычислительная техника). - Библиогр.: 199 с.
  14. Шилов, Валерий Владимирович. Удивительная история информатики и автоматики / В. В. Шилов. - Москва : ЭНАС : ЭНАС-Книга, 2013. - 214, [1] с. : ил. ; 22 см. - Библиогр.: 213 с.
  15. Экономическая информатика : [учебное пособие / Еремин Л. В. и др.] ; под ред. Д. В. Чистова. - 2-е изд., стер. - Москва : КноРус, 2013. - 512 с. : ил. ; 22 см. - (Бакалавриат). - Библиогр.: 509 с.
  1. Информатика : учебник для бакалавров: [для вузов по специаль-ности 080801 "Прикладная информатика" и другим экономическим специ-альностям / Трофимов В. В., Ильина О. П., Приходченко А. П. и др.] ; под ред. В. В. Трофимова ; С.-Петерб. гос. ун-т экономики и финансов. - 2-е изд., испр. и доп. - Москва : Юрайт : ИД "Юрайт", 2013. - с. 115.

  2. Федорова, Галина Николаевна. Информационные системы : учеб-ник / Г. Н. Федорова. - 3-е изд., стер. - Москва : Академия, 2013. - 202 с. : ил. ; 22 см. - (Среднее профессиональное образование. Информатика и вы-числительная техника). - Библиогр.: с. 14

  3. Шилов, Валерий Владимирович. Удивительная история инфор-матики и автоматики / В. В. Шилов. - Москва : ЭНАС : ЭНАС-Книга, 2013. - 214, [1] с. : ил. ; 22 см. - Библиогр.: с. 52

  4. Федорова, Галина Николаевна. Информационные системы : учеб-ник / Г. Н. Федорова. - 3-е изд., стер. - Москва : Академия, 2013. - 202 с. : ил. ; 22 см. - (Среднее профессиональное образование. Информатика и вы-числительная техника). - Библиогр.: с. 31

  5. Гаврилов, Михаил Викторович. Информатика и информацион-ные технологии : учебник для бакалавров / М. В. Гаврилов, В. А. Климов. - 3-е изд., перераб. и доп. - Москва : Юрайт, 2013. - 377, [1] с. : ил. ; 21 см. - (Бакалавр. Базовый курс). - Библиогр.: с. 48.

  6. Голодов, Валентин Александрович. Истоки программ : компью-терная грамотность: разработка и реализация компьютерных решений / В. А. Голодов. - Москва : МАКС Пресс, 2016. – с. 13.

  7. Федорова, Галина Николаевна. Информационные системы : учеб-ник / Г. Н. Федорова. - 3-е изд., стер. - Москва : Академия, 2013. - 202 с. : ил. ; 22 см. - (Среднее профессиональное образование. Информатика и вы-числительная техника). - Библиогр.: с. 31

  8. ? Гаврилов, Михаил Викторович. Информатика и информацион-ные технологии : учебник для бакалавров / М. В. Гаврилов, В. А. Климов. - 3-е изд., перераб. и доп. - Москва : Юрайт, 2013. - 377, [1] с. : ил. ; 21 см. - (Бакалавр. Базовый курс). - Библиогр.: с. 48.

  9. Голодов, Валентин Александрович. Истоки программ : компью-терная грамотность: разработка и реализация компьютерных решений / В. А. Голодов. - Москва : МАКС Пресс, 2016. – с. 13.

  10. Экономическая информатика : [учебное пособие / Еремин Л. В. и др.] ; под ред. Д. В. Чистова. - 2-е изд., стер. - Москва : КноРус, 2013. – с. 202..

  11. Информатика для экономистов : учебник для бакалавров / [Поля-ков В. П., Голубева Н. Н., Завгородний В. И. и др.] ; под ред. В. П. Поля-кова ; Финансовый ун-т при Правительстве РФ. - Москва : Юрайт, 2013. – с.34

  12. Практикум по информатике : CD с учебными материалами: [для вузов / под ред. Н. В. Макаровой ; Н. В. Макарова и др.]. - Санкт-Петербург [и др.] : Питер : Питер Пресс, 2013. – с. 29.

  13. Горнец, Николай Николаевич. ЭВМ и периферийные устройства. Устройства ввода-вывода : учебник для вузов по направлению "Информа-тика и вычислительная техника" / Н. Н. Горнец, А. Г. Рощин. - Москва : Академия, 2013. – с. 107.

  14. Александреску, А. Современное проектирование на С++ : обоб-щенное программирование и прикладные шаблоны проектирования / Ан-дрей Александреску ; [пер. с англ. Д. А. Клюшина ; предисл. С. Мейерса, Дж. Влиссидеса]. - Москва [и др.] : Вильямс, 2017. – с. 203.

  15. Албахари, Д. Cи 6.0 : справочник : полное описание языка / Джо-зеф Албахари, Бен Албахари ; [пер. с англ. Ю. Н. Артеменко]. - [6-е изд.]. - Москва [и др.] : Вильямс, 2017. – с. 32.

  16. Албахари, Д. Cи 6.0 : справочник : полное описание языка / Джо-зеф Албахари, Бен Албахари ; [пер. с англ. Ю. Н. Артеменко]. - [6-е изд.]. - Москва [и др.] : Вильямс, 2017. – с. 32.

  17. Горнец, Николай Николаевич. ЭВМ и периферийные устройства. Устройства ввода-вывода : учебник для вузов по направлению "Информа-тика и вычислительная техника" / Н. Н. Горнец, А. Г. Рощин. - Москва : Академия, 2013. – с. 107.

  18. Александреску, А. Современное проектирование на С++ : обоб-щенное программирование и прикладные шаблоны проектирования / Ан-дрей Александреску ; [пер. с англ. Д. А. Клюшина ; предисл. С. Мейерса, Дж. Влиссидеса]. - Москва [и др.] : Вильямс, 2017. – с. 212.

  19. Албахари, Д. Cи 6.0 : справочник : полное описание языка / Джо-зеф Албахари, Бен Албахари ; [пер. с англ. Ю. Н. Артеменко]. - [6-е изд.]. - Москва [и др.] : Вильямс, 2017. – с. 212.

  20. Александреску, А. Современное проектирование на С++ : обоб-щенное программирование и прикладные шаблоны проектирования / Ан-дрей Александреску ; [пер. с англ. Д. А. Клюшина ; предисл. С. Мейерса, Дж. Влиссидеса]. - Москва [и др.] : Вильямс, 2017. – с. 286.

  21. Агальцов, Виктор Петрович. Информатика для экономистов : [учебник по специальности "Прикладная информатика (по областям) и другим экономическим специальностям"] / В. П. Агальцов, В. М. Титов. - Москва : Форум : ИНФРА-М, 2013. – с. 345.

  22. Шилов, Валерий Владимирович. Удивительная история инфор-матики и автоматики / В. В. Шилов. - Москва : ЭНАС : ЭНАС-Книга, 2013. - 214, [1] с. : ил. ; 22 см. - Библиогр.: с. 181.

  23. Информатика в экономике : учебное пособие / [Бубнова Н. Г. и др.] ; под ред. Б. Е. Одинцова, А. Н. Романова. - Москва : Вузовский учеб-ник : ИНФРА-М, 2013. – с. 346.

  24. Гаврилов, Михаил Викторович. Информатика и информацион-ные технологии : учебник для бакалавров / М. В. Гаврилов, В. А. Климов. - 3-е изд., перераб. и доп. - Москва : Юрайт, 2013. - 377, [1] с. : ил. ; 21 см. - (Бакалавр. Базовый курс). - Библиогр.: с. 293.

  25. Информатика : учебник для бакалавров: [для вузов по специаль-ности 080801 "Прикладная информатика" и другим экономическим специ-альностям / Трофимов В. В., Ильина О. П., Приходченко А. П. и др.] ; под ред. В. В. Трофимова ; С.-Петерб. гос. ун-т экономики и финансов. - 2-е изд., испр. и доп. - Москва : Юрайт : ИД "Юрайт", 2013. – с.401.

  26. Гаврилов, Михаил Викторович. Информатика и информацион-ные технологии : учебник для бакалавров / М. В. Гаврилов, В. А. Климов. - 3-е изд., перераб. и доп. - Москва : Юрайт, 2013. - 377, [1] с. : ил. ; 21 см. - (Бакалавр. Базовый курс). - Библиогр.: с. 298.

  27. Агальцов, Виктор Петрович. Информатика для экономистов : [учебник по специальности "Прикладная информатика (по областям) и другим экономическим специальностям"] / В. П. Агальцов, В. М. Титов. - Москва : Форум : ИНФРА-М, 2013. – с. 209

  28. Агальцов, Виктор Петрович. Информатика для экономистов : [учебник по специальности "Прикладная информатика (по областям) и другим экономическим специальностям"] / В. П. Агальцов, В. М. Титов. - Москва : Форум : ИНФРА-М, 2013. – с. 133.

  29. Албахари, Д. Cи 6.0 : справочник : полное описание языка / Джо-зеф Албахари, Бен Албахари ; [пер. с англ. Ю. Н. Артеменко]. - [6-е изд.]. - Москва [и др.] : Вильямс, 2017. – с. 372.

  30. Гриффитс, Д. Изучаем программирование на С : [12+ : пер. с англ.] / Д. Гриффитс, Д. Гриффитс. - Москва : Эксмо, 2016. – с. 401.

  31. Александреску, А. Современное проектирование на С++ : обоб-щенное программирование и прикладные шаблоны проектирования / Ан-дрей Александреску ; [пер. с англ. Д. А. Клюшина ; предисл. С. Мейерса, Дж. Влиссидеса]. - Москва [и др.] : Вильямс, 2017. – с. 128.

  32. Шилов, Валерий Владимирович. Удивительная история инфор-матики и автоматики / В. В. Шилов. - Москва : ЭНАС : ЭНАС-Книга, 2013. - 214, [1] с. : ил. ; 22 см. - Библиогр.: с. 201.

  33. Информатика : учебник для бакалавров: [для вузов по специаль-ности 080801 "Прикладная информатика" и другим экономическим специ-альностям / Трофимов В. В., Ильина О. П., Приходченко А. П. и др.] ; под ред. В. В. Трофимова ; С.-Петерб. гос. ун-т экономики и финансов. - 2-е изд., испр. и доп. - Москва : Юрайт : ИД "Юрайт", 2013. - с. 602.

  34. Федорова, Галина Николаевна. Информационные системы : учеб-ник / Г. Н. Федорова. - 3-е изд., стер. - Москва : Академия, 2013. - 202 с. : ил. ; 22 см. - (Среднее профессиональное образование. Информатика и вы-числительная техника). - Библиогр.: с. 123.

  35. Экономическая информатика : [учебное пособие / Еремин Л. В. и др.] ; под ред. Д. В. Чистова. - 2-е изд., стер. - Москва : КноРус, 2013. – с. 407.

  36. Информатика для экономистов : учебник для бакалавров / [Поля-ков В. П., Голубева Н. Н., Завгородний В. И. и др.] ; под ред. В. П. Поля-кова ; Финансовый ун-т при Правительстве РФ. - Москва : Юрайт, 2013. – с.378.

  37. Информатика : учебник для бакалавров: [для вузов по специаль-ности 080801 "Прикладная информатика" и другим экономическим специ-альностям / Трофимов В. В., Ильина О. П., Приходченко А. П. и др.] ; под ред. В. В. Трофимова ; С.-Петерб. гос. ун-т экономики и финансов. - 2-е изд., испр. и доп. - Москва : Юрайт : ИД "Юрайт", 2013. - c. 629.

  38. Экономическая информатика : [учебное пособие / Еремин Л. В. и др.] ; под ред. Д. В. Чистова. - 2-е изд., стер. - Москва : КноРус, 2013. – с. 418.

  39. Информатика для экономистов : учебник для бакалавров / [Поля-ков В. П., Голубева Н. Н., Завгородний В. И. и др.] ; под ред. В. П. Поля-кова ; Финансовый ун-т при Правительстве РФ. - Москва : Юрайт, 2013. – с.379.

  40. Информатика : учебник для бакалавров: [для вузов по специаль-ности 080801 "Прикладная информатика" и другим экономическим специ-альностям / Трофимов В. В., Ильина О. П., Приходченко А. П. и др.] ; под ред. В. В. Трофимова ; С.-Петерб. гос. ун-т экономики и финансов. - 2-е изд., испр. и доп. - Москва : Юрайт : ИД "Юрайт", 2013. - c. 642.

  41. Агальцов, Виктор Петрович. Информатика для экономистов : [учебник по специальности "Прикладная информатика (по областям) и другим экономическим специальностям"] / В. П. Агальцов, В. М. Титов. - Москва : Форум : ИНФРА-М, 2013. –с. 302.

  42. Александреску, А. Современное проектирование на С++ : обоб-щенное программирование и прикладные шаблоны проектирования / Ан-дрей Александреску ; [пер. с англ. Д. А. Клюшина ; предисл. С. Мейерса, Дж. Влиссидеса]. - Москва [и др.] : Вильямс, 2017. – с. 229.

  43. Практикум по информатике : CD с учебными материалами: [для вузов / под ред. Н. В. Макаровой ; Н. В. Макарова и др.]. - Санкт-Петербург [и др.] : Питер : Питер Пресс, 2013. –с. 261.

  44. Информатика : учебник для бакалавров: [для вузов по специаль-ности 080801 "Прикладная информатика" и другим экономическим специ-альностям / Трофимов В. В., Ильина О. П., Приходченко А. П. и др.] ; под ред. В. В. Трофимова ; С.-Петерб. гос. ун-т экономики и финансов. - 2-е изд., испр. и доп. - Москва : Юрайт : ИД "Юрайт", 2013. – с. 236.

  45. Информатика для экономистов : учебник для бакалавров / [Поля-ков В. П., Голубева Н. Н., Завгородний В. И. и др.] ; под ред. В. П. Поля-кова ; Финансовый ун-т при Правительстве РФ. - Москва : Юрайт, 2013. – с. 185.

  46. Экономическая информатика : [учебное пособие / Еремин Л. В. и др.] ; под ред. Д. В. Чистова. - 2-е изд., стер. - Москва : КноРус, 2013. – с. 429.

  47. Практикум по информатике : CD с учебными материалами: [для вузов / под ред. Н. В. Макаровой ; Н. В. Макарова и др.]. - Санкт-Петербург [и др.] : Питер : Питер Пресс, 2013. – с. 271.

  48. Шилов, Валерий Владимирович. Удивительная история инфор-матики и автоматики / В. В. Шилов. - Москва : ЭНАС : ЭНАС-Книга, 2013. - 214, [1] с. : ил. ; 22 см. - Библиогр.: с. 19.

  49. Гаврилов, Михаил Викторович. Информатика и информацион-ные технологии : учебник для бакалавров / М. В. Гаврилов, В. А. Климов. - 3-е изд., перераб. и доп. - Москва : Юрайт, 2013. – с. 268.

  50. Информатика в экономике : учебное пособие / [Бубнова Н. Г. и др.] ; под ред. Б. Е. Одинцова, А. Н. Романова. - Москва : Вузовский учеб-ник : ИНФРА-М, 2013. – с. 122.

  51. Албахари, Д. Cи 6.0 : справочник : полное описание языка / Джо-зеф Албахари, Бен Албахари ; [пер. с англ. Ю. Н. Артеменко]. - [6-е изд.]. - Москва [и др.] : Вильямс, 2017. – с. 26.

  52. Васильев, А. Н. Объектно-ориентированное программирование на С++ / Васильев А. Н. - Санкт-Петербург : Наука и техника, 2016. – с. 289.

  53. Гриффитс, Д. Изучаем программирование на С : [12+ : пер. с англ.] / Д. Гриффитс, Д. Гриффитс. - Москва : Эксмо, 2016. – с. 511.

  54. Албахари, Д. Cи 6.0 : справочник : полное описание языка / Джо-зеф Албахари, Бен Албахари ; [пер. с англ. Ю. Н. Артеменко]. - [6-е изд.]. - Москва [и др.] : Вильямс, 2017. – с. 63.

  55. Голодов, Валентин Александрович. Истоки программ : компью-терная грамотность: разработка и реализация компьютерных решений / В. А. Голодов. - Москва : МАКС Пресс, 2016. – с. 14.

  56. Шилов, Валерий Владимирович. Удивительная история инфор-матики и автоматики / В. В. Шилов. - Москва : ЭНАС : ЭНАС-Книга, 2013. - 214, [1] с. : ил. ; 22 см. - Библиогр.:с. 125.

  57. Агальцов, Виктор Петрович. Информатика для экономистов : [учебник по специальности "Прикладная информатика (по областям) и другим экономическим специальностям"] / В. П. Агальцов, В. М. Титов. - Москва : Форум : ИНФРА-М, 2013. – с. 63.

  58. Горнец, Николай Николаевич. ЭВМ и периферийные устройства. Устройства ввода-вывода : учебник для вузов по направлению "Информа-тика и вычислительная техника" / Н. Н. Горнец, А. Г. Рощин. - Москва : Академия, 2013. – с. 73.