Актуальность курсовой работы. В современной жизни, на работе, в научно-исследовательской среде или любой другой деятельности мы постоянно сталкиваемся с решением задач, очень похожими друг на друга.
Современные технологии, применяющие языки программирования, дают новые возможности.
В данной курсовой работе мной будут рассмотрены все основные понятия и правила использования массивов и приемы работы с ними.
Для изучения темы были изучены материалы учебников и пособий различных авторов таких как: Костерин В.В., Камаев В.А., Культин Н.Б. , Мещеряков П.С., Мочалин В.П., Жульнев В.В. , Моргун А. Н., Тивиков А.С. и другие.
В мире появилось больше сотни различных языков программирования от самых простых до сложных, появилось много вариантов программирования, на каждом временном этапе появляется новый наиболее необходимый подход.
Цель курсовой работы: изучить основы программирования по теме «Массивы».
Объект исследования: языки высокого уровня.
Предмет исследования: Особенности и примеры использования массивов при разработке.
Простое Объяснение Массивов на Примерах из Жизни
Задачи курсовой работы:
- провести обзор и анализ подобранной по теме исследования научной литературы,
- описать основные понятия, термины, категории по исследуемой тематике,
- выделить достоинства и недостатки типов массивов,
- составить и решить примеры по рассматриваемым темам,
- сформировать выводы по всем разделам.
Содержание курсовой работы включает в себя введение, 3 главы , 12 примеров, заключение и список используемой литературы, 5 приложений с текстами программ и структурными схемами алгоритмов.
В первой главе описаны основные понятия алгоритма, его свойств и способы его реализации. Отмечен ряд важных особенностей алгоритма. Перечислены основные языки программирования высокого уровня, проведена их классификация по различным признакам, выделены их достоинства и недостатки, отмечены три составляющие (любого) языка (Алфавит, Синтаксис и Семантика).
Во второй главе даны определение массива, описаны их типы и виды: одномерные, двумерные, многомерные, статические, динамические и гетерогенные массивы. Также в этой главе рассмотрены и указаны достоинства и недостатки видов массивов.
Отдельно выделен подраздел, посвящённый случаям выхода за границы диапазона.
В третьей главе отдельно рассмотрена технология создания программ с массивами.
В конце каждой главы делаются выводы.
В приложениях размещены тексты программ и структурные схемы решенных задач.
Глава 1. Алгоритмы и программы
1.1 Алгоритм и способ его описания
Понятие алгоритм является основным для всех компьютерных наук. Если Вы хотите, чтобы кто-либо выполнил работу и достиг некоторого результата, необходимо представить процесс его получения в виде последовательности элементарных операций. Такое представление называется алгоритмом решения задачи.
Алгоритм — это последовательность действий (шагов) приводящих к требуемому результату.
Урок 12. JavaScript. Методы массивов (forEach, map, filter, reduce, find, findIndex). Js Массивы.
Алгоритм — это точное предписание, задающее процесс, направленный на получение результатов соответствующих определенным входным данным.
Алгоритмами являются способы решения, описанные с помощью предписаний по обработке, которые удовлетворяют определенным требованиям.
Все правильные алгоритмы обладают следующими обязательными свойствами: дискретность, однозначность, детерминированность, результативность, массовость [1] .
Таким образом, разрабатывая алгоритм решения задачи ее формулировка превращается в процесс решения, где представлена последовательность действий (шагов) и логическая связь между ними. Алгоритм имеет ряд важных особенностей:
— Целесообразность – алгоритм должен давать некоторый результат;
— Конечность – алгоритм должен давать результат после выполнения конечного числа шагов (имейте в виду, что количество шагов может быть сколь угодно большим);
— Определенность – каждый шаг алгоритма должен быть точно определен, однозначен и понятен исполнителю;
— Дискретность – на каждом шаге алгоритма выполняется очередная одна и только одна операция;
Ввод – алгоритм имеет некоторое число входных данных, т.е. величин, которые задаются до начала его работы или динамически во время его работы извне. Эти входные данные берутся из определенного набора объектов.
— Вывод – у алгоритма есть одно или несколько выходных данных, т. е. величин, имеющих вполне определенную связь с входными данными.
— Массовость – алгоритм должен давать решения для целой группы задач из некоторого класса, отличающихся исходными данными;
— Эффективность – алгоритм обычно считается эффективным, если все его операции достаточно просты, чтобы их можно было точно выполнить в течении конечного промежутка времени с помощью карандаша и бумаги;
Алгоритмический процесс — это процесс последовательного преобразования конструктивных объектов (слов, чисел, пар слов, пар чисел, предложений и т.п.), происходящий элементарными «шагами». Каждый шаг состоит в смене одного конструктивного объекта другим [2] .
Исторически первым языком для описания алгоритмов был язык так называемых блок-схем. Элементарное действие алгоритма изображается текстом в одном блоке схемы, а линии, соединяющие блоки, указывают последовательность работы блоков. Описание на языке блок-схем в общем случае применимо к любому целенаправленному действию. Общая схема может содержать небольшое число крупных блоков, а затем крупные блоки разбивают на более мелкие, и получается более подробная блок-схема.
В алгоритмических структурах каждому типу действий (вводу исходных данных, вычислению значений выражений, проверке условий и т.п.) соответствует геометрическая фигура, представленная в виде блока [3] .
Таблица основных блоков представлена в Приложении А [1].
Рассмотрим пример использования блоков для создания общей алгоритмической структуры решения задачи (рис.1): пройдёт ли кирпич с рёбрами a, b, c в прямоугольное отверстие со сторонами x, y.
Решая эту задачу необходимо учесть следующее:
чтобы кирпич прошёл в заданное отверстие, необходимо чтобы стороны как минимум одной грани были меньше или равны сторонам отверстия.
Программировать в широком смысле – это значит сделать так, чтобы компьютер совершил действие, которое вы для него предполагали. Причем обязателен один важный аспект этого процесса – повторяемость. Вы один раз совершаете некую работу – составляете программу – после чего компьютер получает возможность выполнять новую функцию.
Программа – это полная инструкция, позволяющая исполнителю в каждой ситуации однозначно и правильно выполнить следующее действие.

Рисунок 1 – Алгоритм решения задачи
В отличие от алгоритма, который может излагать только основную идею, программа должна предусматривать все возможные ситуации:
- некорректность входных данных;
- отсутствие возможности выполнять действия над промежуточными результатами (деление на 0, переполнение, нехватка места на диске и т.п.);
- аварийные сигналы и другое.
Структура программы соответствует структуре простейшего математического рассуждения, не использующего сложных лемм и абстрактных понятий [4] .
Структурная программа это программа, составленная из базового множества первичных программ:
- последовательность,
- ветвление,
- цикл с предусловием,
- цикл с постусловием.
- процесс (подпрограмма),
Языки программирования
Сегодня существует огромное количество различных языков программирования.
Их можно классифицировать по различным признакам, но существенным является деление их по степени ориентации на возможности ЭВМ, на две большие группы: машинно-зависимые и машинно-независимые языки.
Машинно-зависимые языки – это языки, средства которых существенно зависят от особенностей конкретной ЭВМ. К таким языкам относится Ассемблер.
Их характерные особенности заключаются в том, что:
- они компактны и у них большая скорость выполнения;
- они могут напрямую использовать конкретные аппаратные ресурсы;
- необходимо учитывать особенности функционирования данной ЭВМ;
- очень трудоемкий процесс составления программ;
- низкая скорость программирования;
- отсутствие возможности использования составленных программ, на компьютерах других типов.
Машинно-независимые языки – используются для того чтобы описать алгоритм решения задачи и информации, которая подлежит обработке, Они не требуют от пользователя знаний об особенностях функционирования ПК. Такие языки называют языками высокого уровня ( ЯВУ). К ним можно отнести почти все используемые в данное время языки.
Машинно-независимые языки можно условно разделить на три группы по типу решаемых задач [5] .
- Процедурные языки – это языки, которые определяют, как вычислить результат для определённой проблемы в соответствии с заданным алгоритмом. К ним относят: Алгол, Фортран, Бейсик, Паскаль, Си.
- Декларативные языки – это языки, которые оперируют с помощью задания данных и отношений между ними. Вместо алгоритмов в таких языках используются правила логического вывода, которые позволяют системе находить нестандартные, заранее не определенные решения. Поэтому декларативные языки называют также еще языками искусственного интеллекта. К ним относится язык Пролог.
- Объектно-ориентированные языки предназначены для отображения объектов реального мира, их свойств (атрибутов) и связей между ними при помощи специальных структур данных. К ним относятся такие языки как: C++, Java, Visual Basic.
Классификация языков по степени детализации алгоритма выглядит следующим образом (рис.2):

Рисунок 2- Классификация языков по степени детализации алгоритма
Три составляющие (любого) языка (рис.3):

Рисунок 3- Составляющие (любого) языка
Алфавит — набор основных символов, букв алфавита, никакие другие символы в предложениях языка не допускаются [6] .
Синтаксис — система правил, определяющая допустимые конструкции из букв алфавита. Синтаксис отвечает на вопрос: является ли последовательность символов текстом (программой) на данном языке или нет?
Семантика — система правил, истолковывающая отдельные конструкции языка с точки зрения процесса обработки (смысл программы).
Для того, чтобы представить алгоритм в виде, понятном компьютеру, используют языки программирования. На первом этапе разрабатывают алгоритм действий, на втором этапе его записывают на одном из таких языков.
Например, для программирования сложных задач выбирают язык Ассемблер или С++, а для решения инженерных задач предпочтение отдают Fortran (Visual Fortran), Basic (Visual Basic) или Pascal (Delphi или Lazarus).
В итоге мы получаем текст программы — полное, законченное и детальное описание алгоритма на языке программирования [7] .
Языки программирования являются искусственными языками. От естественных языков их отличает ограниченное число «слов», значение которых понятно только программисту и транслятору, и очень строгие правила записи команд (операторов).
Глава 2. Массивы
Работая с большим количеством значений, вводимых пользователем, приходится объявлять одну или несколько переменных. Но как быть, если все вводимые пользователем значения необходимо запоминать для дальней обработки?
Для хранения таких объемов данных предусмотрены особые структуры в языках программирования – массивы.
Массив – это упорядоченное множество однотипных элементов.
Массив – это структурированный набор данных, который состоит из однородной, фиксированной по размеру и конфигурации совокупности элементов простой или составной структуры, упорядоченных по номерам [8] .
2.1. Классификация массивов
Массивы бывают четырёх видов (рис.7).
Их достоинства и недостатки:
- Статические и константные массивы всегда имеют фиксированный размер
- Динамические массивы делают работу с данными более гибкой, так как не требуют предварительного определения хранимых объёмов данных, а позволяют регулировать размер массива в соответствии с реальными потребностями.
- Гетерогенные массивы удобны как универсальная структура для хранения наборов данных произвольных типов. Реализация гетерогенности требует усложнения механизма поддержки массивов в трансляторе языка.

Рисунок 7- Виды массивов
2.2.Типы массивов
Если месторасположение элемента в массиве определяется только одним его порядковым номером, то такой массив называется линейным (или одномерным). Вообще количество индексов элементов массива определяет размерность массива. По этому признаку массивы делятся на одномерные (линейные), двухмерные (прямоугольные таблицы или матрицы), трехмерные и т.д. (рис.8).

Рисунок 8 — Типы массивов( а-одномерный, b –двумерный, с-трёхмерный)
2.2.1 Одномерные массивы
Одномерные массивы (вектора) – это массивы, в которых элементы нумеруются одним индексом.
Массив определяется именем (идентификатором) и количеством размерностей (координат), необходимых для указания местонахождения требуемого элемента массива. Имя массива является единым для всех его элементов [9] .
Массив должен обозначаться одним именем. Так всю совокупность чисел 1, 6, 15.9, -15, 28.15, 0.33 можно назвать массивом и дать ему имя, например В. Образующие массив переменные будут называться элементами массива В.
Каждый элемент массива обозначается именем массива с индексом, заключенным в круглые скобки. В(1), В(2), В(3), . В(n).
Индекс показывает на каком месте находиться элемент массива относительно его начала. Для рассмотренной выше совокупности данных элементами массива В будут являются: В(1)=1, В(2)=6, В(3)=15.9, В(4)=-15, В(5)=28.15 ,В(6)=0.33.
При работе с массивами используются в основном счётные циклы.
Для облегчения понимания сути одномерного массива, можно представить себе его как таблицу, состоящую из одной строчки, каждая ячейка которой имеет свой номер (индекс), а значения, записанные в ячейке, символизируют значения элементов массива.
В качестве номера (индекса) элемента массива используется выражение порядкового типа (чаще integer).
Таблица 5. Синтаксис объявления одномерного массива [10] :
СИ:
Basic
Pascal
int a[2];
double b[20];
DIM A(20) — зарезервировать место под одномерный массив чисел А размером 20;
DIM МD$(10) — зарезервировать место под одномерный массив MD$ символьных строк размером 10;
DIM B%(10,10) — зарезервировать место под двумерный массив целых чисел В размером 100(10х10);
var имя_массива: array [a..b] of тип_данных;
var s:array[1..26] of char;
v = array[−100..100] of real;
mas = array[char] of boolean
Рассмотрим более подробно синтаксис объявления одномерного массива в Паскале [11] :
var имя_массива: array [a..b] of тип_данных;
где a, b – номера (индексы) первого и последнего элементов массива соответственно. Тип данных элементов массива может быть как простым, так и составным.
При обращении к элементу массива в квадратных скобках указывается его индекс [12] .
Пример объявления массива:
type A = array [1..n] of integer;
Type mass1=Array [1..14] Of Real ;
y: Array [1..5] Of Real ;
z: Array [1..5] Of Real ;
2.2.2 Двумерные массивы
Существуют двумерные и многомерные массивы, которые выглядят более сложными и при их заполнении используют номера строк и столбцов, для того, чтобы найти значение определённого элемента [13] .
В математике массивы называются матрицами и выглядят следующим образом (рис.7):

Рисунок 7. Вид матриц
Легче всего представить матрицу или массив в виде таблицы:
Источник: www.evkova.org
Использование массивов
Цель работы. Изучить особенности описания и использования массивов в программе.
Задание
Разработать алгоритм решения выбранной по номеру варианта задачи, составить, отладить и просчитать программу с использованием массивов.
Введение
Наряду с простыми переменными в алгоритмических языках используются переменные с индексами, называемые массивами. Массив – это упорядоченная последовательность величин, обозначаемая одним именем. Величины, из которых состоит массив, называются элементами массива. Элемент массива обозначается с помощью имени массива и индексов, следующих в круглых скобках за именем массива.
Индексы отделяются друг от друга запятыми и указывают положение элемента в массиве. Индексов может быть 1, 2 и так далее вплоть до 7. Соответственно массивы бывают одномерные, двумерные и т.д.
Все массивы, используемые в программе, должны быть описаны, так как для хранения элементов массива в определенной последовательности отводится необходимый объем памяти. При описании указываются имя массива и затем в круглых скобках через запятую граничные пары, т.е. разделенные двоеточием минимальные и максимальные значения соответствующего индекса. При отсутствии двоеточия минимальное значение соответствующего индекса в Фортране по умолчанию равно единице. Для описания массивов в Фортране используются операторы описания типа переменных (REAL, INTEGER, COMPLEX, LOGICAL, CHARACTER, DOUBLE PRECISION), а также атрибут и оператор DIMENSION.
Рассмотрим несколько примеров описания массивов. Значения граничных пар можно задавать с использованием именованных констант и константных выражений.
INTEGER, PARAMETER :: N=4
REAL, DIMENSION :: A(N,N), B(N), K(N+1,N+1), C(0:N)
В этом примере оператор REAL c атрибутом DIMENSION описывает двумерный вещественный массив A, содержащий 16 элементов; одномерный вещественный массив B, содержащий 4 элемента; двумерный вещественный массив K, содержащий 25 элементов, и одномерный вещественный массив C, содержащий 5 элементов.
Объекты с общими атрибутами можно группировать в единый список, например, следующий оператор описывает два двумерных вещественных массива D и E, каждый из которых имеет 3 строки и 4 столбца.
REAL, DIMENSION (3,4) :: D, E
Операторы описания типа могут использоваться для описания массивов и без атрибутов, но с указанием граничных пар, например,
INTEGER MIN(2,2), MAX(10)
REAL Q(5), SUMMA(3,3)
Здесь MIN и MAX – целые массивы, содержащие 4 и 10 элементов соответственно; Q и SUMMA – вещественные массивы, содержащие 5 и 9 элементов.
Оператор DIMENSION также может использоваться для описания массивов, например, для описания одномерного вещественного массива F из 10 элементов
Использование оператора DIMENSION без операторов описания типа, когда тип массива определяется по умолчанию возможно, но нежелательно.
Операторы, описывающие массивы, необходимо располагать в начале программы перед первым исполняемым оператором.
В Фортране список операторов ввода READ и вывода PRINT или WRITE может содержать как имена простых переменных и элементов массива, так и имена массивов. В последнем случае вводу-выводу подлежат все элементы массива в «естественной последовательности» (т.е. сначала растет первый индекс, затем второй и т.д.). Так, если в программе описан массив A(2,2) и имеется оператор ввода READ *, A, то численные значения необходимо задавать в такой последовательности: A(1,1), A(2,1), A(1,2), A(2,2), т.е. любая матрица вводится по столбцам. Для изменения порядка ввода-вывода или если требуется передать только часть элементов массива, можно использовать неявную форму оператора цикла. Например, ввод матрицы A(2,2) по строкам осуществляет оператор READ *, ((A(I,J), J=1,2), I=1,2).
Не следует забывать, что в Фортране функции «что вводить (выводить)» и «как вводить (выводить)» распределены между операторами ввода-вывода и оператором FORMAT.
Если в программе предусмотрен ввод исходных данных с клавиатуры, то в процессе отладки приходится задавать одни и те же численные значения много раз. Поэтому, когда исходных данных достаточно много, удобнее записать их перед счетом программы в файл данных, а в программе предусмотреть оператор, считывающий данные из файла данных.
Кроме того, результаты также имеет смысл выводить в файл данных, чтобы иметь возможность получить распечатку результатов счета. Обращение к файлу данных производится по его логическому номеру N, указанному в операторах READ (N,…) или WRITE (N,…). С помощью оператора OPEN можно как назначать логические номера уже имеющимся файлам, так и создавать новые файлы с указанием соответствующего логического номера, например, OPEN (1, FILE=’LAB4.TXT’). После выполнения этого оператора файлу LAB4.TXT будет соответствовать логический номер 1. Файл LAB4.TXT создается в папке проекта либо предварительно до запуска программы на счет, либо в процессе работы программы в момент выполнения оператора OPEN. Для завершения доступа к файлу используется оператор CLOSE.
Источник: studfile.net
Массивы

Массив представляет собой совокупность переменных одного типа с общим для обращения к ним именем. В C# массивы могут быть как одномерными, так и многомерными. Массивы служат самым разным целям, поскольку они предоставляют удобные средства для объединения связанных вместе переменных.
Массивами в C# можно пользоваться практически так же, как и в других языках программирования. Тем не менее у них имеется одна особенность: они реализованы в виде объектов.
Для тoго чтобы воспользоваться массивом в программе, требуется двухэтапная процедура, поскольку в C# массивы реализованы в виде объектов. Во-первых, необходимо объявить переменную, которая может обращаться к массиву. И во-вторых, нужно создать экземпляр массива, используя оператор new.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 < class Program < static void Main(string[] args) < // Объявляем массив int[] myArr = new int[5]; // Инициализируем каждый элемент массива вручную myArr[0] = 100; myArr[1] = 23; myArr[2] = 25; myArr[3] = 31; myArr[4] = 1; foreach (int i in myArr) Console.WriteLine(i); Console.ReadLine(); >> >
Следует иметь в виду, что если массив только объявляется, но явно не инициализируется, каждый его элемент будет установлен в значение, принятое по умолчанию для соответствующего типа данных (например, элементы массива типа bool будут устанавливаться в false, а элементы массива типа int — в 0).
Инициализация массива
Помимо заполнения массива элемент за элементом (как показано в предыдущем примере), можно также заполнять его с использованием специального синтаксиса инициализации массивов. Для этого необходимо перечислить включаемые в массив элементы в фигурных скобках < >. Такой синтаксис удобен при создании массива известного размера, когда нужно быстро задать его начальные значения:
// Синтаксис инициализации массива с использованием // ключевого слова new int[] myArr = new int[] ; // Синтаксис инициализации массива без использования // ключевого слова new string[] info = < «Фамилия», «Имя», «Отчество» >; // Используем ключевое слово new и желаемый размер char[] symbol = new char[4] < ‘X’,’Y’,’Z’,’M’ >;
Обратите внимание, что в случае применения синтаксиса с фигурными скобками размер массива указывать не требуется (как видно на примере создания переменной myArr), поскольку этот размер автоматически вычисляется на основе количества элементов внутри фигурных скобок. Кроме того, применять ключевое слово new не обязательно (как при создании массива info).
Неявно типизированные массивы
Ключевое слово var позволяет определить переменную так, чтобы лежащий в ее основе тип выводился компилятором. Аналогичным образом можно также определять неявно типизированные локальные массивы. С использованием такого подхода можно определить новую переменную массива без указания типа элементов, содержащихся в массиве. Давайте рассмотрим пример:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 < class Program < static void Main(string[] args) < var arr1 = new[] < 1, 2, 3 >; Console.WriteLine(«Тип массива arr1 — «,arr1.GetType()); var arr2 = new[] < «One», «Two», «Three» >; Console.WriteLine(«Тип массива arr2 — «,arr2.GetType()); Console.ReadLine(); > > >

Разумеется, как и при создании массива с использованием явного синтаксиса C#, элементы, указываемые в списке инициализации массива, должны обязательно иметь один и тот же базовый тип (т.е. должны все быть int, string или MyCar).
Определение массива объектов
В большинстве случаев при определении массива тип элемента, содержащегося в массиве, указывается явно. Хотя на первый взгляд это выглядит довольно понятно, существует одна важная особенность. В основе каждого типа в системе типов .NET (в том числе фундаментальных типов данных) в конечном итоге лежит базовый класс System.Object. В результате получается, что в случае определения массива объектов находящиеся внутри него элементы могут представлять собой что угодно:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 < class Program < static void Main(string[] args) < // Объявляем и инициализируем массив объектов object[] arrByObject = < true, 10, «Привет», 13.7m >; // Выведем в консоль тип каждого члена массива foreach (object me in arrByObject) Console.WriteLine(«Тип — «,me,me.GetType()); Console.ReadLine(); > > >

Свойство Length
Реализация в C# массивов в виде объектов дает целый ряд преимуществ. Одно из них заключается в том, что с каждым массивом связано свойство Length, содержащее число элементов, из которых может состоять массив. Следовательно, у каждого массива имеется специальное свойство, позволяющее определить его длину.
Когда запрашивается длина многомерного массива, то возвращается общее число элементов, из которых может состоять массив. Благодаря наличию у массивов свойства Length операции с массивами во многих алгоритмах становятся более простыми, а значит, и более надежными. Давайте рассмотрим пример использования свойства Length:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 < class Program < static void Main(string[] args) < int[] myArr = < 1, 2, 3, 4 >; for (int i = 0; i < myArr.Length; i++) Console.WriteLine(myArr[i]); Console.ReadLine(); >> >
Источник: professorweb.ru