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

Технологии программирования: Алгоритмизация как обязательный этап разработки программы

Содержание:

Введение

Благодаря бурному развитию науки информатики и проникновению её в различные отрасли народного хозяйства слово "алгоритм" стало часто встречающимся и наиболее употребляемым в бытовом плане понятием для широкого круга специалистов. Более того, с переходом к информационному обществу алгоритмы становятся одним из важнейших факторов цивилизации. Доказанный факт, что математическая теория алгоритмов сложилась вовсе не в связи с бурным развитием информатики и вычислительной техники, а возникла в недрах математической логики для решения её собственных проблем. Она, прежде всего, оказала большое влияние на мировоззрение математиков и на их науку. Тем не менее, взаимовлияние теоретических областей, связанных с вычислительной техникой, и теории алгоритмов также, несомненно. Теория алгоритмов оказала влияние на теоретическое программирование. В частности, большую роль в теоретическом программировании играют модели вычислительных автоматов, которые, по существу, являются ограничениями тех представительных вычислительных моделей, которые были созданы ранее в теории алгоритмов. Трактовка программ, как объектов вычисления, операторы, используемые для составления структурированных программ (последовательное выполнение, разветвление, повторение) пришли в программирование из теории алгоритмов. Обратное влияние выразилось, например, в том, что возникла потребность в создании и развитии теории вычислительной сложности алгоритмов. Таким образом, можно сказать, что теория алгоритмов применяется не только в информатике, но и в других областях знаний.

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

Глава 1. Теоретические основы алгоритмизации

1.1 Понятие и виды алгоритмов

Программирование - это записывание чего-то с использованием чужого малознакомого языка. С развитием этой области знания разработчики пошли еще дальше и научились записывать "что-то", даже не понимая, как оно звучит на русском языке. Новички учатся писать код сразу на C++ или php, используя множество библиотек, и толком даже не понимают, как то, что они создают, звучит на их родном языке [2]. Алгоритмизация занимается разъяснением и доведением до понятного этого "что-то".

Большинство примеров алгоритмов по информатике даже в вузах изучается на посредственном уровне. Общепринятой практикой является бесконечное написание все более сложного кода. Попытки неопытных программистов приступать к написанию программ сразу на языке программирования можно сравнить с работой журналиста, который, едва овладев основами иностранного языка, пишет статью для журнала. Избежать подобную проблему можно, если начать записывать свое произведение сначала на родном языке, отредактировать его, проверить на ошибки и в конце перевести на необходимый язык [11].

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

Алгоритмизация помогает при реализации проекта на компьютере описать процесс решения на родном и понятном языке в виде схемы взаимосвязанных алгоритмов, провести анализ идей и получить наиболее качественный и продуманный код, который будет устойчивее к ошибкам и эффективнее работать [15].

Компьютер не умеет решать задачи, он способен только выполнять простые действия в указанном порядке. "Как же калькулятор?" - спросите вы. Он тоже является плодом трудов программистов, которые создали программу, использующую определенные алгоритмы для получения необходимых результатов. Рассмотрим абстрактную ситуацию. Что следует сделать, если попросить найти корни квадратного трехчлена человека, который не знаком с методами решения уравнений?

Очевидно, что его необходимо обучить решать квадратные уравнения. Происходит это по следующей схеме [3]:

1. Выбрать способ решения.

2. Изучить все детали выбранного способа.

3. Объяснить первые два пункта будущему исполнителю на понятном ему языке.

Затем можно будет давать исполнителю задания на решение квадратного уравнения. И если первые два шага просты и понятны - все способы решения описаны в соответствующей литературе, то третий шаг представляет сложность [15].

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

- определить исходные данные (переменная и коэффициенты квадратного уравнения);

- разбить процесс решения на однозначно известные компоненты для исполнителя (формулы дискриминанта и нахождения корней);

- указать порядок выполнения этапов (сначала вычислить дискриминант, затем корни);

- установить условие, при котором решение считается завершенным (проверить найденные корни, подставив их в уравнение на место переменных); обозначить, каким именно должен быть результат решения (корни принадлежат множеству действительных чисел) [6].

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

Основные свойства алгоритма [17]:

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

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

3. Результативность. Алгоритм должен давать результат. При этом количество шагов может исчисляться тысячами или миллионами, но они всегда должны приводить к результату.

4. Массовость. Любой алгоритм, разработанный для решения какой-либо задачи, должен быть применим ко всем задачам этого типа для всех допустимых исходных данных.

Для правильного создания алгоритмов под компьютеры важно понимать их возможности. Рассмотрим сначала величины, с которыми работает ЭВМ. В общем случае их можно разделить на числовые и текстовые, постоянные и переменные [20].

Под постоянными числами понимаются все числа: 3,15, 100, 105, их особенностью является неизменность в течение всей работы программы. Переменные величины меняют свое значение в ходе выполнения кода и обозначаются, как правило, буквами: x, y, max, min и т. д [7].

Текстовые переменные аналогично числовым бывают постоянными или переменными. В первом случае это просто текст: "хорошо", "a и b" и пр. Во втором - такое же символьное обозначение, как и числовых переменных: name, city и т. п. Отличие между ними заключается главным образом в выделяемой памяти компьютера под хранение такой переменной.

Операции, которые способен выполнять компьютер:

1. Считывать данные с устройств ввода (клавиатура, мышь, файлы).

2. Вычисление значений с использованием математические функции: сложение, вычитание, sin, cos, ln и т. д. - в каждом языке программирования свой набор встроенных функций [11].

3. Вывод данных (на экран, на бумагу, в сетевой интерфейс).

4. Переход между этапами выполнения программы.

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

Способы описания алгоритмов:

1. Словесный. Это самый простой способ. Его примером может служить кулинарный рецепт. Допускается использование простых математических формул.

2. Графический. Описание с помощью схем. Это особый способ записи алгоритмов с использованием своего рода общепринятого алгоритмического языка - фигур и блоков, имеющих определенное значение: прямоугольник - простой действие, наклонный параллелограмм - ввод/вывод, ромб - условие и т. д [21].

Использование алгоритмического языка. Аналогично графическому, это также особенный способ записи алгоритма. Существует множество алгоритмических языков. Их правила не являются строгими, иначе это был бы язык программирования [16].

Алгоритмический язык можно назвать более строгой формой записи по сравнению со словесной. Используется ограниченный набор слов и их конструкций, а также оформление с отступами. Минусом словесной формы и алгоритмического языка является ухудшающаяся наглядность алгоритма при увеличении его размеров. Поэтому данные способы могут быть использованы только для передачи смысла небольших алгоритмов [18].

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

- линейный (вычисление результата сложения или умножения, обмен значениями нескольких переменных);

- разветвляющийся (определение наибольшего из нескольких чисел);

- циклический (сортировка массива, вычисление факториала).

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

Принципы алгоритмизации:

1. Определить исходные данные.

2. Выбрать способ решения.

3. Разбить выбранные способ на шаги исходя из возможностей компьютера (языка программирования).

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

5. Вывод результатов вычислений.

6. Обозначить переход к выходу схемы.

Человек допускает ошибки, и это факт. Главным параметром любого алгоритма должна быть правильность его работы [2]. Отладка - это процесс выявления и исправления ошибок алгоритма. Для этого берется определенный набор исходных данных, называемых тестовыми. Они представляют собой, как правило, всевозможные типы исходных данных. Например, если на ввод подается число, то алгоритм следует проверить на корректную работу с учетом: положительных, отрицательных, целых и вещественных чисел, нулевые значения и т. п [1].

Главным инструментом для проверки точности алгоритма остается человеческий мозг. Конечно, допустимо использование других компьютерных инструментов для автоматизации проверки, но так или иначе подготовкой тестов и анализом результатов занимается человек. В таком случае возникает вопрос, а зачем нужен алгоритм, если человек выполняет все сам? Затем, что главная задача алгоритма - многократное решение определенного типа задач.

Линейным является алгоритм, в котором шаги идут последовательно друг за другом. Любой алгоритм, не содержащий ветвлений и циклов, является линейным. Рассмотрим пример алгоритма, решающего следующую задачу: в двух клетках сидят волк и заяц, нужно поменять их местами. Ключом к решению данной задачи является дополнительная клетка temp, которую следует использовать, чтобы поменять местами животных [12].

Разветвляющиеся алгоритмы имеют несколько ветвей. Суть работы заключается в выборе одного из возможных вариантов вычислительного процесса в зависимости от каких-либо условий. Схематическое ветвление изображается ромбовидным блоком, внутри которого указывается условие, а по сторонам от него располагаются ветви выбора в зависимости от того, истинно условие или ложно. Разветвляющийся алгоритм и примеры его применения можно найти повсеместно. В программировании это типичная конструкция if-else, которая есть почти в любом языке [23].

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

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

2. Блок вычисления результатов. Это основное тело цикла.

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

4. Изменение переменных. Этот блок вступает в силу после проверки условия окончания, если оно было ложным. Если забыть про этот блок, то цикл будет вечно выполнять одно действие и никогда не завершится. Поэтому важно, чтобы переменные претерпевали какие-либо изменения на каждой итерации цикла.

Существует несколько видов циклических алгоритмов: с постусловием, предусловием и параметром.

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

1. Механические алгоритмы. Например, работа двигателя внутреннего сгорания или сборочного конвейера.

2. Вероятностные алгоритмы. Их работа основана на теории вероятности и математической статистике.

3. Эвристические алгоритмы. Используют практические соображения в своей работе, без строгого математического обоснования.

4. Генетические алгоритмы. Применяют биологические идеи в своей работе.

1.2 Способы описания алгоритмов

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

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

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

Рассмотрим подробнее общие характеристики алгоритмов. С помощью их в информатике можно проводить определенные вычисления, описания конкретных объектов.

Основные способы описания алгоритмов связаны со следующими свойствами: дискретностью; массовостью; результативностью; определенностью [4].

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

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

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

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

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

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

В зависимости от того, для какой цели он разрабатывается, существует несколько видов алгоритмов [13]:

- механические виды направлены на выполнение конкретной последовательности действий;

- гибкие варианты предполагают решение поставленной задачи на основе ассоциаций и аналогий;

- линейные последовательности действий предполагают поочередное выполнение отдельных команд;

- разветвляющиеся типы содержат несколько отдельных веток, которые позволяют выполнять поставленную цель;

- циклические типы предполагают многократное повторение нескольких действий.

Разнообразные алгоритмы, свойства алгоритмов, способы описания алгоритмов - все это рассматривается в отдельном разделе информатики. Сначала разрабатывается специальная структура, состоящая из набора команд, которую потом применяют на последующих этапах работы. Структурная схема представляет собой запись шагов, представленных в виде блоков, которые объединены между собой отдельными стрелками [10].

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

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

Второе правило предполагает наличие памяти, в которой размещаются данные. Память включает в себя именованные ячейки, которые называют переменными [8].

Третье – это дискретность: алгоритм составлен из команд, в которых конечно число данных. Четвертое правило предполагает детерминированность, пятое – результативность.

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

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

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

Существуют разнообразные части, которые включены в последовательность действий в информатике. Первый раздел содержит описание объектов, для которых он предназначен. В случае необходимости в описание также включают формулы, ссылки на иные источники алгоритмов. Оно должно быть достаточным для осознания специфики решаемой задачи, понятным для обычного пользователя. Математические символы должны давать возможность для однозначного решения поставленной задачи любому, кто владеет царицей наук [21].

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

Оно должно совпадать с описываемым алгоритмом, в противном случае сложно будет вести речь о его эффективности и результативности.

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

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

Предполагается описание всех шагов, которые должны быть выполнены для того, чтобы провести последовательную реализацию алгоритма. Разнообразные способы описания алгоритмов помогают составлять блок-схемы, фрагменты, детали решаемой задачи на различных языках программирования [9].

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

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

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

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

Глава 2. Алгоритмизация – как ключевой этап программирования

2.1 Понятие программирования и компьютерной программы

В период появления первых компьютерных систем остро встал вопрос того, как «научить» машину воспринимать указываемые к исполнению задачи человеком. Тут и появился термин «компьютерное программирование». Сегодня многие пользователи, не знакомые с основами и тонкостями этих процессов, считают, что это что-то из области фантастики, недоступное рядовому обывателю. Однако при желании можно освоить программирование и самому [10].

Если посмотреть на основные трактовки данного термина, нетрудно сделать простейший вывод. Программирование - это написание программ.

Тут же возникает вопрос того, что же такое программа. Программа или приложение – это, грубо говоря, набор специализированных команд, инструкций, директив или исполняемых сценариев, которые подлежат исполнению машиной, причем на уровне и «железных» устройств, и других задействованных средств [3].

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

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

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

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

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

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

Зато в 1846 году дочь Байрона создала первую в мире программу для аналитической машины, которая решила уравнение Бернулли. Конечно, алгоритмы программирования, которые применяла графиня Ада Августа Лавлейс, были весьма примитивными, но именно они заложили то самое зерно, которое было использовано при создании современных компьютерных программ. И именно ее считают во всем мире прародительницей программирования [14].

Любая компьютерная программа должна машиной каким-то образом выполняться. Ей мало написать, мол, сделай то-то и то-то. Для этого были созданы языки программирования.

Но написать последовательность команд на каком-то языке, которых сегодня существует очень много, оказывается недостаточно. Машина все равно не воспримет текстовые фразы или математические формулы [22].

Универсальным средством стало использование двоичного (бинарного) кода, состоящего из последовательностей нулей и единиц, которые воспринимаются любым компьютерным устройством. Но как перевести смысловые фразы и формулы в такой вид? Для этого используются компиляторы, которые и преобразовывают список команд в понятный машине двоичный код. Можно встретить и троичные, и шестнадцатиричные коды, но они используются крайне редко [11].

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

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

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

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

Сами же языковые средства, на которых пишутся (или в свое время писались) компьютерные программы, условно можно разделить на низко- и высокоуровневые [19].

Если кто из старшего поколения помнит, даже в советские времена в школах на уроках информатики преподавался язык Basic. С его помощью на тогдашних машинах Yamaha КУВТ можно было создавать примитивные программы математических вычислений, программировать простейшие картинки или музыку, звучащую из системного динамика. Для математики можно было использовать и логические операторы вроде «если», «то», «иначе». Но проблема всех тех, кто хорошенько обучился этому языку, состояла в том, что они никак не могли освоить новые средства.

Не говоря о том, что язык Ассемблер своим появлением произвел настоящую революцию и используется до сих пор, появились достаточно специфичные средства, например, языки структурного или объектно-ориентированного программирования (ООП).

К ООП смело можно отнести язык C+/++, на основе команд которого созданы те же операционные системы Windows. Программирование на «Си» является достаточно сложным, тем не менее при желании можно освоить и его. Как говорится, было бы желание. Можно пойти на те же курсы программирования или использовать для обучения соответствующую литературу. Правда, как считает большинство специалистов, самому вникнуть в основы языка еще можно, а вот развивать свои знания на практике буде крайне сложно. Тут никакие труды вроде книг «Программирование для чайников» не помогут [21].

Но вернемся к языкам. Относительно недавно появились языки, работающие на основе интерпретаторов (.NET Framework, Python, Java, Perl и т.д.). В них вместо машинного кода генерируется особый байт-код, который представляет собой двоичный код виртуальной машины [3].

Кстати сказать, программирование на Java можно без особых усилий освоить самому. Например, для мобильных устройств на основе Android-систем можно параллельно использовать Android Studio и пакет Java SDK, а в качестве тестировщика установить Genymotion. Можно поступить еще проще, обратившись к онлайн-конструктору App Inventor, в котором создание последовательности команд производится наподобие складывания пазлов [6].

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

Существуют приложения, ориентированные исключительно на одну парадигму или выполнение только одной задачи, но все современные языки и программы, создаваемые на их основе, решают несколько задач. Отсюда и появился термин многозадачности [17].

На современном этапе развития компьютерных технологий приоритетным для многих программистов являются ООП и программирование на Java. Заметьте, пакеты Java-платформы поддерживаются любой из ныне известных операционных систем, не говоря уже о мобильных устройствах.

И хотя, как считается, язык C+/++ является доминирующим, не стоит сбрасывать со счетов и Ассемблер. Удивительно, но большинство вирусов написано именно на нем. А если взять в расчет веб-программирование, скажем, на основе Delphi, тут вообще открываются такие широкие возможности и перспективы, что многие начинающие программисты об этом даже не догадываются [10].

Вопросы, связанные с самостоятельным обучением, напрямую зависят от того, чему именно хочется научиться. Литература в виде книг «Программирование для чайников» дает лишь частичные ответы без конкретизации основных аспектов с учетом применения того или иного языка. Это, так сказать, для общего понимания [7]. Курсы программирования – тоже вопрос спорный, ведь в данном случае все зависит не только от восприятия обучаемым, но и от того, какими знаниями обладает преподаватель, как он подает материал и т.д. Но если уж возникла необходимость изучения какого-то определенного языка или метода программирования, в наш век интернета проблемой это не является. Можно найти даже онлайн-курсы или подробное описание уроков по той же платформе Java, программированию Android- или iOS-устройств.

2.2 Применение структурных алгоритмических конструкций

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

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

Общий алгоритм работы системы

Рисунок 1 - Общий алгоритм работы системы

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

После ввода логина и пароля, система проверяет их на правильность, если данные введены верно, то система открывает доступ в зависимости от прав доступа. Алгоритм авторизации представлен на рисунке 2.

Алгоритм авторизации системы

Рисунок 2 - Алгоритм авторизации системы

Одним из требований Федерального государственного образовательного стандарта (ФГОС) основного общего образования, предъявляемых к предметным результатам освоения  программы  предметной  области  «Математика  и  информатика»,  заявлено «развитие алгоритмического мышления, необходимого для профессиональной деятельности в современном обществе; развитие умений составить и записать алгоритм для конкретного исполнителя; формирование знаний об алгоритмических конструкциях, логических значениях и операциях; знакомство с одним из языков программирования и основными алгоритмическими структурами — линейной, условной и циклической» [7]. Кроме того, ФГОС определяет активную учебно-познавательную деятельность учащихся, как одну из составляющих системно-деятельностного подхода в обучении.

Для реализации поставленных задач целесообразно использовать при изучении раздела «Алгоритмизация» различные программные среды, имитирующие исполнителей. Так, авторский коллектив под руководством Семакина И.Г. предлагает инструментальную среду «Конструктор алгоритмов» [5], предназначенную для проектирования и разработки блок-схем алгоритмов и рассчитанную на активное взаимодействие с пользователем.

К достоинствам данной среды можно отнести: реализацию всех базовых структур алгоритма; возможность использования величин целого и вещественного типа, а также табличных величин; реализацию двух режимов исполнения алгоритма – пошаговый (возможность наблюдать динамику процесса решения) и исполнение алгоритма до конца. Недостатками среды являются: невозможность в цикле «для» использовать шаг в сторону уменьшения; не реализована возможность использования цикла «до».

Одним из возможных вариантов реализации идеи обучения через активную познавательную деятельность учащихся является использование метода «открытой программы» (метода демонстрационных примеров) при обучении алгоритмизации. «Под «открытой   программой» понимается программа-модель, представляющая некоторый класс программ либо задач. Она предназначена:

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

   для приобретения обучаемым опыта творческой деятельности разработки программ – решения задач этого класса» [4].

На основании понятия «открытая программа» и требований к ее оформлению можно выделить следующие типы заданий с использованием среды «Конструктор алгоритмов»:

1. Анализ готового алгоритма по условию задачи.

 2. Анализ готового алгоритма и восстановление условия задачи.

3. Анализ готового алгоритма по условию задачи и поиск ошибок в нем.

 4.   Анализ готового алгоритма по условию задачи и восстановление пропущенных команд в алгоритме.

5. Написание алгоритма по условию задачи.

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

Второй тип заданий можно использовать для контроля знаний; обучения учащихся «переводить» задачу с формального языка на естественный.

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

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

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

Задания предлагается выполнять в виде лабораторной работы, в которой определены:

1.      Формулировка задачи;

 2.      Алгоритм выполнения заданий в среде;

 3.      Вопросы в конце работы и вывод учащихся по работе.

 Приведем пример системы заданий при изучении темы «Организация линейных алгоритмов в среде «Конструктор алгоритмов»».

1.     Изучаемые    элементы:    блок    «Ввод    данных»,    блок    «Вывод   данных»,    блок «Присваивание».

 2.     Требования к знаниям и умениям учеников: уметь анализировать готовый алгоритм, знать и уметь использовать команды присваивания, ввода, вывода информации, уметь составлять линейные алгоритмы, знать и уметь определять тип данных.

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

4.     Для изучения данной темы выбраны следующие типы заданий:

    анализ готового алгоритма и восстановление условия задачи,   анализ готового алгоритма по условию задачи,

   написание алгоритма по условию задачи.

 Задание№1(Анализготовогоалгоритмаивосстановлениеусловиязадачи) Задания:

1. Запустите «Конструктор алгоритмов»

В главном меню окна выберите: Блок-схема/Блок-схема из файла, далее выберите папку Блок-схемы/Линейные алгоритмы и файл 1.prg (Рис. 3).

Рисунок 3 – Линейный алгоритм

3. Выполните алгоритм в режиме пошагового исполнения (Рис. 4).

Рисунок 4 – Режим пошагового исполнения

1. Сколько раз выполняется каждая команда?

 2.    Измените в операторе А:=10 числовое значение на 17. Запустите пошаговое исполнение. Что изменилось?

3.    Измените в операторе А:=10 числовое значение на 34,6. Запустите пошаговое исполнение. Что произошло? Сделайте вывод.

Вопросы:

 1. Сформулируйте возможное условие задачи.

 2. Можно ли назвать данный алгоритм линейным. Ответ обоснуйте.

 3. Какие выводы можете сделать по выполненным заданиям? Задание№2(Анализготовогоалгоритмапоусловиюзадачи)

Задача: Даны величины X, Y целого типа. Проанализировать готовую блок-схему алгоритма для обмена значений двух величин, с использованием вспомогательной величины Т [2].

Задания:

 1. Запустите «Конструктор алгоритмов»

 2.     В главном меню окна выберите: Блок-схема/Блок-схема из файла, выберите папку Блок-схемы/Линейные алгоритмы и файл 2.prg (Рис. 5).

Рисунок 5 – Алгоритм обмена значений двух переменных

1. Протестируйте алгоритм для X=5 и Y=-11.

2. Протестируйте алгоритм для X=5.5 и Y=18. Что произошло?

 3.     Измените алгоритм: удалите команду t:=x, измените команду y:=t на y:=x.

 Протестируйте алгоритм для X=5 и Y=-11. Сделайте вывод. 

Вопросы:

 1. Что хранит переменная t. Можно ли обойтись без нее?

 2.   Что произойдет, если в первом блоке присваивания мы заменим операцию t:=x на t:=y? Как исправить ошибку?

Задание№3(Написаниеалгоритмапоусловиюзадачи)

 Задача: Даны две простые дроби; получить дробь, являющуюся результатом их деления (Рис. 6) [1].

Рисунок 6 – Деление дробей

Задания:1. Разработайте собственную блок-схему алгоритма по условию задачи.

2.   Протестируйте созданную блок-схему для следующих наборов данных: 1) a=2, b=3, c=-2, d=7; 2) a=2, b=3, c=0, d=7; 3) a=2, b=3, c=-2, d=0; При всех ли наборах алгоритм работает корректно? Сделайте вывод.

Данный набор заданий предназначен для изучения линейных алгоритмов. Первое и второе задание направлены на анализ готовых блок-схем алгоритмов, на работу с блоком «Присваивание», на изучение особенностей работы с типами данных (целого и вещественного типа). Третье задание предполагает самостоятельную работу учеников по созданию блок-схемы алгоритма по условию задачи, при тестировании возникает проблема – алгоритм работает корректно не при всех данных. Возникает вопрос: что надо сделать, чтобы исправить ошибку (проблемная ситуация, подведение учеников к изучению конструкции «Ветвление»).

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

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

Таким    образом    можно    сделать    вывод    о    том,    что    использование    среды «Конструктор алгоритмов» и метода «открытой программы» при изучении раздела «Алгоритмизация» позволяет:

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

 -  индивидуализировать процесс усвоения знаний;

 -   стимулировать познавательный интерес учащихся.

Заключение

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

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

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

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

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

Таким    образом    можно    сделать    вывод    о    том,    что    использование    среды «Конструктор алгоритмов» и метода «открытой программы» при изучении раздела «Алгоритмизация» позволяет:

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

 -  индивидуализировать процесс усвоения знаний;

 -   стимулировать познавательный интерес учащихся.

Список использованной литературы

  1. Алгоритм. Спосoбы описания алгоритма. Учебно-методическое пособие для учителей информатики / Сост. Е.А.Пархoменко, Ю.В.Сюбаева – Коломна: Лицей, 2015. – 33 с.
  2. Балафанов Е.Н. «30 уроков по информатике», Москва 2017 г.
  3. Галин А.Б., Панов Ю.В. Информатика. Феникс - 2016 г.
  4. Голицына О.Л. Основы алгоритмизации и программирования: Учеб. Пособие / О.Л.Голицына, И.И.Попов. – М.: ИНФРА-М, 2017. – 432 с.
  5. Карпенков С.Х. Современные средства информационных технологий. КноРус - 2017 г.
  6. Кузнецов А.А. Основы информатики. Учеб. для общеобразоват. учеб. заведений / А.А.Кузнецов, Н.В.Апатова. — М.: Дрофа, 2015. — 176 с.
  7. Кушнеренко А.Г. Основы информатики и ВТ: Учеб. для 10-11 кл. — 4-е изд. / А.Г.Кушнеренко и др. — М: Просвещение, 2016. — 224 с.
  8. Макарова Н.В. Информатика и ИТК. М:, 2016 г.
  9. Макарова Н.В. Информатика и ИТК. М:, 2016 г.
  10. Малев В.В. Общая методика преподавания информатики. Учебное пособие. [Текст]/ В.В. Малев. – Воронеж: ВГПУ, 2015. – 271 с.
  11. Могилев А.В. «Практикум по информатике» Санкт-Петербург 2015 г.
  12. Островский В.А. Информатика. 2017 г.
  13. Островский В.А. Информатика. 2017 г.
  14. Семакин И.Г. Информатика и ИКТ: Учебник для 9 класса [Текст] / И.Г. Семакин, Л.А. Залогова, С.В. Русаков и др. – М.: БИНОМ. Лаборатория знаний, 2017 – 341с.
  15. Семакин И.Г. Основы программирования: Учебник для среднего профессионального образования / И.Г.Семакин, А.П.Шестаков. — М.: Издательский центр «Академия», 2016. – 432 с.
  16. Таганов Л.С., Левин В.Г. Информатика. Учебное пособие. Кемерово, 2016 г.
  17. Шауцукова Л.З. Информатика. Теория. М:, 2015 г.
  18. Шафрин Ю. А. «Основы компьютерной технологии», Москва 2015 г.
  19. Шафрин Ю.А. Информационные технологии. М - Лаборатория базовых знаний, 2017г.
  20. Демонстрация линейного алгоритма «Деление дробей» в среде «Конструктор алгоритмов».       [Электронный       ресурс].       Режим       доступа.        http://school-collection.edu.ru/catalog/rubr/a30a9550-6a62-11da-8cd6- 0800200c9a66/63396/?interface=pupil&class=51&subject=19.
  21. Демонстрация линейного алгоритма «Обмен значениями двух переменных» в среде «Конструктор алгоритмов». [Электронный ресурс]. Режим доступа. http://school-collection.edu.ru/catalog/rubr/a30a9550-6a62-11da-8cd6- 0800200c9a66/63396/?interface=pupil&class=51&subject=19.
  22. Понятие     открытой     программы.     [Электронный     ресурс].     Режим     доступа.http://neudoff.net/info/informatika/otkrytaya-programma-ponyatie-otkrytoj-programmy/.
  23. Программа «Конструктор алгоритмов» [Электронный ресурс]. Режим доступа. http://school-collection.edu.ru/catalog/res/fff3a9b4-5a73-445a-a617-624b63d4b8a6. 
  24. Федеральный государственный образовательный стандарт основного общего образования. [Электронный ресурс]. Режим доступа. http://минобрнауки.рф/документы/938.