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

Особенности и примеры использования массивов при использовании программ

Содержание:

Введение

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

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

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

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

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

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

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

Предмет исследования – алгоритмы циклической структуры, массивы данных.

Целью работы является рассмотрение массивов и их использования в различных заданиях с программирования.

В соответствии к цели работы поставлены такие основные задания:

– рассмотреть основные алгоритмические структуры;

– проанализировать использование циклических структур разных типов;

– с помощью языка программирования описать основные методы обработки данных с помощью циклических алгоритмов;

– рассмотреть понятия массива в программировании, привести примеры использования циклических алгоритмов для обработки массивов;

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

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

Основные понятия о циклических алгоритмах

Понятие об алгоритмах. Свойства алгоритмов

В повседневной деятельности постоянно приходится сталкиваться с разными правилами, которые описывают последовательность действий с целью достичь определенного необходимого результата. Данные правила являются многочисленными. Например, мы придерживаемся определенных правил, чтобы позвонить, приготовить лекарство, сварить суп или вычислить какое-то математическое уравнение. Указанные примеры можно объединить понятием «алгоритм». [2]

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

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

Алгоритм является фундаментальным понятием программирования. Ученые выделяют три основных класса алгоритмов: вычислительные, информационные и управляющие [3].

Вычислительные алгоритмы – это алгоритмы, которые работают со сравнительно простыми типами данных, например числами, векторами, матрицами.

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

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

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

Любой алгоритм обладает следующими свойствами:

1. Массовость – применимость алгоритма к любым задачам определенного класса. Это свойство обеспечивает решение любой задачи из класса однотипных задач при любых исходных данных. Так, алгоритм вычисления площади треугольника применим к любым треугольникам. Вместе с тем, существуют и такие алгоритмы, которые применяются только к единому набору исходных данных данных. К их числу относятся алгоритмы, используемые различными автоматами, например, автоматом для продажи газет или телефоном-автоматом.

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

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

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

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

6. Формальность – результат выполнения алгоритма не должен зависеть от каких-либо факторов, которые не являются частью этого алгоритма. Любой исполнитель, способный воспринимать и выполнять указания алгоритма (даже не понимая их содержания), действуя по нему, может выполнить поставленную задачу.

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

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

Формульно-словесный метод записи алгоритма основывается на инструкциях о выполнении конкретных действий в определенной последовательности с использованием математических символов и выражений пояснениями на естественном языке.[10]

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

Рассмотрим основные геометрические фигуры, применимые в блок-схемах (таблица 1)

Таблица 1.

Основные геометрические фигуры, применимые в блок-схемах

Фигура

Применение

Начало или конец алгоритма

Операции вычисления или присваивания

Ввод или вывод данных

Проверка условия

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

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

Появление языков программирования сблизила понятия алгоритма и программы.

1.2. Основные структуры алгоритмов. Понятие о циклических алгоритмах

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

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

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

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

Действие 1

Действие 2

Действие n

Рисунок 1 – Линейная структура алгоритмов

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

Алгоритм, который осуществляет выполнение тех или иных действий в зависимости от результата проверки условия, называется алгоритмом с разветвлением или разветвляющимся (рисунок 2):[8]

Условие

Действие 1

Действие 2

Да

Нет

Рисунок 2 –Структура разветвляющегося алгоритма

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

Третий вид алгоритмов составляют в случае повторного выполнения определенной последовательности действий.

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

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

Различают две основные разновидности циклов: циклы с предусловием (рисунок 3) и циклы с постусловием (рисунок 4).

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

Рисунок 3 – Циклическая структура с предусловием

Рисунок 4 – Циклическая структура с постусловием

Цикл с предусловием можно прочитать следующим образом:

пока проверка условия дает результат «да», выполнять действие.

Если при очередной проверке условия будет получено результат «нет», повторное выполнение действия будет прекращено и произойдет выход из цикла.

Например, для подсчета остатка от деления целого числа t на целое число n с помощью вычитания можно воспользоваться циклом:

пока t> n, уменьшить t на n.

В цикле с постусловием (рисунок 4) условие цикла формулируется противоположным образом: если очередная проверка условия дает результат "да", происходит выход из цикла. Цикл с постусловием можно сокращенно прочитать так:

повторять действие до получения результата «да» при проверке условия.

Например, подсчет остатка от деления целого числа t на целое число n (t> n) можно реализовать с помощью цикла:[9]

повторять уменьшить t на n до t <n.

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

– обе базовые структуры цикла являются замкнутыми;

– количество повторений цикла определяется его условием;

– выход из цикла происходит только через проверку условия цикла.

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

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

Обработка массивов с использованием циклических алгоритмов

Реализация циклических алгоритмов в С++

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

Для реализации циклического процесса в С++ существуют 3 циклических оператора:

  1. Оператор цикла с предусловием while. Его интерфейс:

while (логическое_выражение)

{

Тело цикла

}

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

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

Пример 1.

l=0;

while(l<=5)

{

a=pow(l,2);

cout<<a<<” “;

l++;

}

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

  1. Оператор цикла с послеусловием do … while имеет следующий синтаксис:

do

{

Тело цикла

}

while (логическое_выражение)

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

Пример 2.

с=1;

do

{

p=pow(c,2);

cout<<p<<” “;

c++;

}

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

  1. Циклический оператор for использует такой синтаксис:

for (инициализация; условие; приращение)

{

Тело цикла

}

Описанный выше оператор часто используется при реализации вычислений в массивах. В нем инициализируется переменная цикла, потом сразу проверяется условие окончания цикла. Если цикл выполняется, то операторы циклической части проводя вычисления, иначе идет переход к операторам, которые следуют за оператором for.

Пример 3.

for(w=1;w<=15;w++)

{

a=pow(w,2);

cout<<w<<" ";

}

2.2. Использование операторов цикла в одномерных массивах

Часто, в процессе разработки программы, возникает потребность хранить большое количество однотипных значений, которые должны поддаваться одинаковым методам обработки. Например, экзаменационные оценки студентов, следует вводить, выводить, анализировать (сравнение с "2" или "5"), изменять при необходимости и тому подобное. Такие однотипные значения имеет смысл хранить в одной переменной, перенумеровать их внутри этой переменной, предоставить доступ к этим значениям по индексу и обрабатывать эти значения в цикле (номер индекса должен совпадать с значением параметра цикла).

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

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

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

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

Различия массива от обычных переменных следующие:[14]

– общее имя для всех значений;

– доступ к конкретному значению по его номеру (индексу)

– возможность обработки в цикле.

Одномерный массив объявляется в программе следующим образом:

<тип данных> <имя_массива> [<размер массива>];

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

Значение размера массива при объявлении может быть не указано в следующих случаях:[15]

– при объявлении массив инициализируется;

– массив объявлен как формальный параметр функции;

– массив объявлен как ссылка на массив, явно определенный в другом модуле.

Используя имя массива и индекс, можно обращаться к элементам массива:

<имя_массива> [<значение_ индекса>]

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

Например,

int A[10];

объявляет массив с именем А, содержащий 10 целых чисел; при этом выделяет и закрепляет за этим массивом оперативную память для всех 10-ти элементов соответствующего типа (int – 4 байта), то есть 40 байтов, следующим образом (рисунок 5):

A[0]

A[1]

A[2]

A[3]

A[4]

A[5]

A[6]

A[7]

A[8]

A[9]

Рисунок 5 ­ Изображение одномерного массива

Следовательно, при объявлении массива выделяется память, необходимая для размещения всех его элементов. Элементы массива с первого до последнего запоминаются в последовательно возрастающих адресах памяти. Между элементами массива в памяти промежутков нет. Элементы массива записываются один за другим поэлементно.[13]

Для получения доступа к i-му элементу массива А, можно написать А[і], где i – переменная цикла (счетчик цикла), которая может принимать значения от 0 до 9. При этом величина i умножается на размер типа int и представляет собой адрес i-го элемента массива А от его начала, после чего осуществляется выбор элемента массива А по сложившейся адресу.[12]

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

Например,

int a[5] = {9, 33, -23, 8, 1}; // а [0] = 9, а [1] = 33, а [2] = - 23, а [3] = 8, а [4] = 1;

float b[10] = {1.5, -3.8, 10}; // B [0] = 1.5, b [1] = - 3.8, b [2] = 10, b [3] = ... = b [9] = 0;

Все операции с массивами выполняются с помощью операторов цикла. Например, ввод информации в массив:

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

cin >> a [i];

Вывод информации из массива:

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

cout << a [i] << "";

2.3. Использование операторов цикла в двумерных массивах

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

Как отмечалось в данном разделе, размерность массива определяется количеством индексов. Элементы одномерного массива имеют один индекс, двумерного массива (матрицы, таблицы) – два индекса: первый из них – номер строки, второй – номер столбца. При размещении элементов массива в памяти компьютера сначала меняется крайний правый индекс, затем остальные - справа налево. [11]

Многомерный массив объявляется в программе следующим образом:

<тип> <имя_массива> [<размерность1>] [<размерность2>] ... [<размерностьN>];

Количество элементов массива равна произведению количества элементов по каждому индексу. Например,

int a [3][4];

объявлено двумерный массив из 3-х строк и 4-х колонок (12-ти элементов) целого типа:

a [0] [0] a [0] [1], a [0] [2], a [0] [3],

a [1] [0], a [1] [1], a [1] [2], a [1] [3],

a [2] [0], a [2] [1], a [2] [2], a [2] [3];

Приведем еще несколько примеров объявления массивов:

float Mas1 [5] [5]; // Матрица 5х5 = 25 элементов вещественного типа.

char Mas2 [10] [3]; // Двумерный массив с 10х3 = 30 элементов символьного типа

double Mas3 [4] [5] [4]; // Трехмерный массив с 4х5х4 = 80 элементов вещественного типа

При объявлении массива можно присваивать начальные значения его элементов, причем необязательно всех, например:

1) int w [3] [3] = {{2, 3, 4}, {3, 4, 8}, {1, 0, 9}};

2) float C [4] [3] = {1.1, 2, 3, 3.4, 0.5, 6.8, 9.7, 0.9};

В первом примере объявлено и инициализирован массив целых чисел w[3][3]. Элементам массива присвоено значение из списка: w[0][0] = 2, w[0][1] = 3, w[0][2] = 4, w[1][0] = 3 и т.д.

Рассмотрим примеры для ввода и вывода элементов матрицы а.

Инициализировать матрицу a размерности nxm можно с помощью следующего кода:

for (i = 0; i <n; i ++)

for (j = 0; i <m; j ++)

cin >> a [i] [j];

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

for (i = 0; i <n; i ++)

{

for (j = 0; i <m; j ++)

cout << a [i] [j] << "";

cout << endl;

}

Во втором разделе рассмотрено реализацию циклических алгоритмов в С++, использование операторов цикла в одномерных и двумерных массивах, приведено конкретные примеры программного кода.

Базовые алгоритмы обработки массивов с использованием циклических операторов

3.1.Основные алгоритмы обработки одномерных массивов

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

В подобных случаях в языке С++ используют объекты, называемые массивами.

Практически все операции с массивом следует проводить поэлементно в цикле. Для обработки элементов массива  удобно использовать цикл  for ...do, а верхний индекс массивов определять как предварительно описанную константу.

В этом случае все циклы по обработке массива будут заканчиваться значением этой константы.  При изменении числа элементов массива,  в программе достаточно изменить значение константы (т.к. все циклы зависят от константы).

К базовым алгоритмам обработки одномерных массивов относят:

– вывод на экран элементов или их количества, соответствующие определенному критерию;

– нахождение минимального или максимального элемента массива;

– нахождение суммы, произведения элементов и т.д.

Приведем типичные примеры для обработки каждого из этих типов алгоритмов.

Пример 1. Вывести на экран все четные числа массива и их количество.

int i, n, k = 0, a [10]; // Объявление переменных

cout << "n =";

cin >> n; // Введение размерности

cout << "Элементы массива:";

for (i = 0; i <n; i ++) // Введение элементов массива

cin>>a[i];

for (i = 0; i <n; i ++)

if (a [i]% 2 == 0) // Нахождение парных элементов

{

cout << a [i] << ""; //вывод на экран парного элемента

k ++; //вычисление количества парных элементов

}

cout << "k =" << k; //вывод количества парных элементов

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

int i, n, p;

float min, a [10], d;

cout << "n ="; //ввод размерности

cin >> n;

cout << endl;

cout << "Элементы массива:";

for (i = 0; i <n; i ++) //ввод элементов массива

cin>>a[i];

min = a [0]; //присваивание начального значения для минимума

for (i = 1; i <n; i ++) //вычисляет минимум массива

if (a [i] <min)

{

min = a [i]; //присваиваем значение в переменную min

p = i; //запоминаем индекс минимального элемента

}

cout << endl;

cout << "min =" << min << "," << "p =" << p << endl; //выводим результат

Пример 3. Найти сумму элементов массива.

int i, n;

float sum = 0, a [10];

cout << "n ="; //вводим размерность массива

cin >> n;

cout << endl;

cout << "Элементы массива:"; //вводим элементы массива

for (i = 0; i <n; i ++)

cin>>a [i];

for (i = 0; i <n; i ++) //находим сумму элементов

sum + = a [i];

cout << endl;

cout << "Summa =" << sum; //выводим сумму

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

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

Приведем сначала перечень базовых операций над матрицами и их элементами. К таким операциям относятся:

– ввод и вывод матриц – рассматривался в разделе 2;

– создание новой матрицы по заданному алгоритму;

– поиск элементов матрицы по определенному критерию;

– выполнение определенных операций над компонентами матриц (перестановка строк и столбцов, умножение матриц и т.д.).

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

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

int k, i, j, N, a [20] [20];

cout << "N ="; //ввод размерности квадратной матрицы

cin >> N;

cout << "Input Matrix A" << endl; //ввод элементов матрицы А

for (i = 0; i <N; i ++)

for (j = 0; j <N; j ++)

cin >> a [i] [j];

// цикл прохода по главной и боковой диагоналям

for (i = k = 0; i <N; i ++)

{

if (a [i] [i]> 0)

k ++;

if (a [i] [N-i-1]> 0)

k ++;

}

// цикл прохода по периметру матрицы

for (i = 1; i <N-1; i ++)

{

if (a [0] [i]> 0)

k ++;

if (a [N-1] [i]> 0)

k ++;

if (a [i] [0]> 0)

k ++;

if (a [i] [N-1]> 0)

k ++;

}

// проверка, пересекаются ли диагонали, если размерность матрицы – нечетное число

if ((N% 2! = 0) && (a [N / 2] [N / 2]> 0))

k--;

cout << "k =" << k << endl; //вывод результат

Пример 5. Найти все элементы матрицы, значения которых больше нуля.

int k, i, j, N, a [20] [20];

cout << "N ="; //ввод размерности квадратной матрицы

cin >> N;

cout << "Input Matrix A" << endl; //ввод элементов матрицы А

for (i = 0; i <N; i ++)

for (j = 0; j <N; j ++)

cin >> a [i] [j];

// циклы прохода по элементах матрицы

for (i = 0; i <N; i ++)

for (j = 0; j <N; j ++)

if (a [i] [i]> 0)

cout<<a[i][j];

Пример 6. Вывести на экран транспонированную квадратную матрицу.

int i, j, N, a [20] [20];

cout << "N ="; //ввод размерности квадратной матрицы

cin >> N;

cout << "Input Matrix A" << endl; //ввод элементов матрицы А

for (i = 0; i <N; i ++)

for (j = 0; j <N; j ++)

cin >> a [i] [j];

// транспонирование матрицы

for (i = 0; i <N; i ++)

{

for (j = 0; j <N; j ++)

cout<<a[j][i];

cout<<endl;

}

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

Заключение

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

– цикл for (цикл со счетчиком);

– цикл while (цикл с предусловием будет выполняться до тех пор, пока выражение принимает истинное значение, но стоит выражению принять ложное значение, то осуществляется переход к следующему оператору);

– цикл do … while (цикл с постусловием ведет себя противоположно циклу с предусловие, то есть, пока выражение ложное тело цикла продолжает повторяться, как только логическое выражение станет истинным, цикл прекратится).

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

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

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

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

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

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

Список использованных источников

  1. Джесс Либерти. Освой самостоятельно С++ за 21 день. Издательский дом «Вильямс». – 2012. – 230 с.
  2. Борис Пахомов. С/С++ и MS Visual C++ 2010 для начинающих. БХВ-Петербург. – 2011. – 436 с.
  3. Бьерн Страуструп. Программирование. Принципы и практика использования С++. Издательский дом «Вильямс». – 2011. – 258 с.
  4. Айвор Хортон. Visual C++ 2010. Полный курс. Издательский дом «Вильямс». – 2011. – 300 с.
  5. Дэвид Гриффитс, Дон Гриффитс. Изучаем программирование на С. Издательство «Эксмо». – 2013. – 400 с.
  6. Прата С. Язык программирования С++. Издание 6. Издательский дом «Вильямс» – 2011. – 304 с.
  7. Брайан Керниган, Деннис Ритчи. Язык программирования С++. Издательство «Невский диалект». – 2014. – 320 с.
  8. Р. Лафоре. Объектно-ориентированное программирование в С++. Издательство «Питер». Издание 4. – 2014. – 628 с.
  9. Хусаинов Б.С. Структуры и алгоритмы обработки данных. Примеры на языке Си. Учеб. пособие. – Финансы и статистика, 2014. – 464с.
  10. Кубенский А.А. Структуры и алгоритмы обработки данных: объектно-ориентированный подход и реализация на С++. – СПб.: БХВ-Петербург, 2013. – 464с.
  11. Седжвик Роберт. Фундаментальные алгоритмы на С++. Анализ/Структуры данных/Сортировка/Поиск: Пер. с англ./ Седжвик Роберт. К.: Издательство «ДиаСофт», – 2011. – 500 с.
  12. Язык С++: Учеб. Пособие /И.Ф. Астахова, С.В. Власов, В.В. Фертиков, А.В. Ларин.–Мн.: Новое знание, 2013. – 203 с.
  13. Лаптев В.В., Морозов А.В., Бокова А.В. С++. Объектно-ориентированное программирование. Задачи и упражнения. – СПб.: Питер. 2013. – 288 с.
  14. Кнут, Дональд, Эрвин. Искусство программирования. Том 1. Основные алгоритмы. 3-е изд. Пер. с англ. – : Уч. пос. М.: Издательский дом. «Вильямс», 2014.– 720с.
  15. С++ Стандартная библиотека. Для профессионалов./Н. Джосьютис. – СП Питер, 2012. – 350 с.
  16. Динман М.И. С++. Освой на примерах. – СПб.: БХВ-Петербург, 2012.– 260 с.
  17. Харви Дейтел, Пол Дейтел. Как программировать на С++. Пер. с англ. – М.: ЗАО «Издательство БИНОМ», 2012. – 430 с.
  18. Майерс С. Эффективное использование С++. 50 рекомендаций по улучшению ваших программ и проектов. Пер. с англ. – М.: ДМК Пресс; – СПб.: Питер. 2013.–240с.
  19. Штерн Виктор. Основы С++: Методы программной инженерии.– Издательство «Лори», 2013. – 860с.
  20. Скляров В.А. Язык С++ и объектно-ориентированное программирование. Справочное пособие. – Минск. «Вышейшая школа». – 2012. – 478с.