Файл: ОСОБЕННОСТИ И ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ МАССИВОВ ПРИ РАЗРАБОТКЕ ПРОГРАММ, ОСНОВНЫЕ ПОНЯТИЯ.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 23.04.2023

Просмотров: 121

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

ВВЕДЕНИЕ

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

Само понятие алгоритма считается ключевым не для всей информатики. Фактически термин «алгоритм» расположен на границе информатики и математики. Слово «алгорит» произошло от записи «Algorithmi», что соответствует написанию имени великого математика древних времен аль-Хорезми.

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

Известно, что в процессе своего выполнения программа работает с различными данными. Эти данные хранятся в памяти компьютера и используются по мере необходимости. Вид и структуру данных программист определяет самостоятельно. Наиболее распространенным типом данных являются целые числа. Однако, сами по себе числа используются редко - чаще всего они хранятся группами, которые называются массивами. Массив представляет собой одну переменную, в состав которой входит несколько однотипных элементов. Элементами массива могут выступать не только числа, но и другие типы данных - символы, строки и даже более сложные структуры [5].

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

Объектом исследования в работе выступают алгоритмы и структуры данных.

Предмет исследования - массивы данных.

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

Для достижения поставленной цели необходимо решить ряд задач:


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

1 ОСНОВНЫЕ ПОНЯТИЯ

1.1 Классификация языков программирования

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

У языков программирования есть две важные цели:

  • предоставление программисту специального аппарата для описания действий, которые должны быть реализованы компьютером;
  • формирование концепции алгоритма [2].

Наиболее распространенная классификация языков программирования - по близости к аппаратному обеспечению - представлена на рисунке 1.

Рисунок 1 - Классификация языков программирования по близости к аппаратному обеспечению

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

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

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

Языки данного поколения называются машинно-ориентированными языками. Они представляют собой набор операторов и изобразительных средств, полностью зависимых от особенностей кадого конкретного компьютера (структуры памяти, системы команд и т.п.)

Машинно-ориентированные языки гарантируют:

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

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

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

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

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

Важно отметить, что появление языков программирования высокого уровня снизило зависимость программ от аппаратного обеспечения - это было достигнуто за счет использования трансляторов [4].

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

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

Обучение новым языкам требовало дополнительных временных затрат, при этом эффективность реализации программ на прежнем аппаратном обеспечении несколько снижалась. Однако это были временные трудности - большинство первых высокоуровневых языков остается популярным и сегодня.Ярким примером этого факта являются FORTRAN, APL и C, реализующие вычислительные алгоритмы. Язык C за время своего развития успел несколько раз переродиться в C++ и C#, однако, его базовые конструкции остаются неизменны.

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


Существует несколько видов языков программирования высокого уровня. Так, например, процедурно-ориентированные языки (Ada, ALGOL, BASIC, C, COBOL, FORTRAN, Pascal) построены на использовании пошагового описания алгоритма, что является причиной некоторых трудностей в процессе подготовки некоторых задач к решению.

Непроцедурные языки, которые также называются проблемно-ориентированными, состоят только из описаний и не обладают собственными командами или инструкциями. Примером непроцедурного языка является Пролог (сокращение от «ПРОграммирование ЛОГики»), широко распространенный в сфере искусственного интеллекта [7].

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

Принято выделять несколько стилей:

  • неструктурный - предполагает использование команды безусловного перехода - goto. Примерами языков данной группы являются FORTRAN и BASIC. Существование данного стиля объясняется особенностями исполнения машиных кодов. Основоположником данного стиля является язык ассемблера, в котором команда безусловного перехода является обязательной. В языках высокого уровня не рекомендуется использование данной команды, так как оно способствует возникновению большого числа ошибок и усложняет процесс редактирования архитектуры программы;
  • структурный - в основе данного стиля лежит две идеи:
    • всякая задача может быть представлена в виде большого числа более мелких подзадач, каждая из которых решается отдельной функцией или процедурой. Такой подход принято называть декомпозицией. В этом случае проектирование программы реализуется по принципу «сверху вниз»: в первую очередь выявляются все модули, необходимые для решения задачи, а только потом ведется процесс разработки. Эта идея с использованием локальных имен переменных, позволяет создавать масштабные проекты большими коллективами программистов;
    • алгоритм любой сложности может быть реализован с использованием всего трех управляющих конструкций: следование, ветвление и цикл, что позволяет избавиться от оператора безусловного перехода goto;

Описанные принципы структурного программирования впервые были реализованы в языке ALGOL, однако, наибольшей популярностью сегодня пользуется Pascal, являющийся образцовым языком программирования для начинающих;

  • логический - языки данного стиля предоставляют программисту лишь средства постановки задачи, при этом решение возлагается на компьютер. Примерами данных языков являются Пролог и Симула. На сегодняшний день данное направление языков является наименее развитым, так как утратило собственную актуальность по причине отсутствия реальных результатов;
  • объектно-ориентированный - основной идеей языков данного направления является отображение объектов, их свойств и связей из реального мира с помощью специальных структур - классов. Каждый класс содержит набор полей (свойств) и методов - процедур или функций для управления объектом соответствующего класса. Примерами объектно-ориентированных языков являются Java и C++;
  • функциональный - основой данного стиля является понятие "черного ящика", характеризующегося некоторым набором входных данных - P, и выходным результатом - r. При этом поведение программы описывается формлулой 1:

f(P) = r (1)

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

1.2 Этапы решения задачи на компьютере

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

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

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

Существует три способа записи алгоритмов:

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

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

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

Рисунок 2 - Этапы решения задачи на компьютере

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