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

Массивы и их роль в написании программного обеспечения.

Содержание:

Введение

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

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

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

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

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

По ходу работы буду решаться следующие задачи:

  1. Изучение теоретических основ массивов и их видов.
  2. Увидеть особенности реализации массивов в разных языках программирования.
  3. Найти решения по применению массивов в разработке программ.

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

1. Массив как один из видов типов данных

1.1 Определение массива

«Массив представляет собой набор однотипных данных, объединенных общим именем. Доступ к элементу массива выполняется через имя массива и индекс или индексы, идентифицирующие место, или «позицию», элемента в массиве. Существует такое понятие, как размерность массива, - это количество индексов, необходимых для однозначной идентификации элемента массива. Теоретически массив может быть практически любой размерности. Но на практике массивы размерности большей, чем два, используется редко.»[9,189]

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

«Без использования массивов не обойтись в таких областях программирования как работа с базами данных, компьютерная графика, визуализация результатов научных экспериментов, статистический анализ. Например, можно описать массив, состоящий из тысячи элементов численного типа, и затем обратиться к десятому или сотому элементу по его номеру. Массивы являются входными и выходными параметрами процедур сортировки.»[1,527]

«При описании массива обычно указывается его размер (число элементов) или верхняя и нижняя границы — диапазон, в рамках которого можно обращаться к элементам массива.»[4,57]

« Массивы, границы которых явно заданы в команде описания, называются статическими. Их размер известен заранее и не меняется на всем протяжении работы программы. В последних версиях компилируемых языков программирования реализуются так называемые динамические массивы, размер которых может меняться во время выполнения программы. В ряде случаев это весьма удобно, так как позволяет экономно расходовать память, захватывая ее по мере необходимости. Недостаток динамических массивов в том, что организовать эффективную работу с ними, используя компиляторы, сложно. Приходится выполнять множество проверок, связанных с расходованием памяти компьютера, что понижает общую эффективность приложения.»[8,110]

« Все элементы массива индексируются последовательно, начиная с нуля. Размещение элементов массива в памяти выполняется последовательно. Все элементы массива имеют один и тот же тип. Элементы массива обычно нумеруются индексами от 0 до n-1, где n - число элементов массива. В некоторых языках можно задавать границы изменения индексов, в других нижняя граница значения индекса равна единице, а не нулю.»[10,87]

« При обращении к массиву желательно проверять значение текущего индекса. Значение должно находиться в пределах допустимого диапазона. Такая проверка способствует повышению надежности вычислений. Однако реализована она только в языках Pascal, Ada, Java и C#. В других языках (например, в С и С++) проверка отсутствует в силу специфики организации массивов.»[3,578]

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

1.2 Разновидности массивов

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

«В некоторых языках нижняя граница диапазона значений индексов задается по умолчанию. Например, в С-подобных языках нижняя граница всех диапазонов индексов равна нулю. В языке Fortran 95 (и выше) она зафиксирована как единица, но может принимать любое целое значение. В большинстве других языков диапазоны индексов полностью определяются программистом. Классифицируем массивы по трем признакам: связывание по диапазонам индексов, связывание с памятью, категория памяти для размещения.»[2,345]

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

«Статическим называют массив со статическим связыванием по диапазонам индексов и таким размещением в памяти, которое происходит до начала работы программы. Статические массивы достаточно эффективны, поскольку отсутствуют затраты времени как на динамическое размещение в памяти, так и на удаление из нее. Недостатком является то, что память ими занимается на все время выполнения программы.»[10,87]

«Явным стековым называется массив со статическим связыванием по диапазонам индексов и таким размещением в памяти, которое происходит по итогам обработки объявления в ходе выполнения программы.»[7,65]

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

К недостатку следует отнести дополнительные затраты времени на размещение и удаление массива из памяти.

«Cтековым называется массив с динамическим связыванием по диапазонам индексов и динамическим размещением в памяти, которое происходит в ходе обработки объявления. Связанность диапазонов индексов и размещение массива в памяти сохраняются в течение всей жизни переменной. Главным преимуществом этой разновидности массивов по сравнению с двумя предыдущими считается гибкость — не нужно заранее знать (до момента использования) размер массива.»[3,580]

«Явный динамический массив подобен явному стековому массиву в том, что связывание и по диапазонам индексов, и по памяти происходит после размещения в памяти. Связывание по индексам и памяти производится по запросу программы и в течение ее выполнения, но память выделяется в куче, а не в стеке. Преимуществом этой разновидности массивов является гибкость: изменение размера массива всегда остается проблемой. Недостаток — на размещение в куче тратится времени больше, чем на размещение в стеке.»[8,112]

«Динамическим называется массив с таким динамическим связыванием по диапазонам индексов и размещению в памяти, которое повторяется многократно в течение всего жизненного цикла массива. Преимущество: максимальная гибкость. Массив по мере необходимости может расти или сжиматься прямо в ходе выполнения программы. Недостаток — на многократное размещение (удаление) в куче тратится много времени (и все оно приходится на период вычислений).»[2,378]

«Прямоугольный массив — это многомерный массив, в котором все строки и столбцы имеют одинаковое количество элементов. Прямоугольные массивы точно моделируют прямоугольные таблицы.»[7,71]

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

«Массив массивов — это многомерный массив, в котором не требуется, чтобы длины у строк были одинаковыми. Массивы массивов иногда называют не выровненными массивами.»[5,285]

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

«Так, для трехмерного массива в третьем измерении (измерении уровней) каждый уровень может иметь различное количество элементов. Не выровненные массивы становятся возможны, когда многомерные массивы, по сути, являются массивами, состоящими из массивов. Например, матрица строится как массив из одномерных массивов.»[3,285]

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

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

«Ассоциативный массив — это неупорядоченное множество элементов данных, индексированных таким же количеством величин, которые называются ключами.»[6,77]

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

«Ассоциативные массивы широко используются в таких языках, как Perl, Python, Ruby и Lua. Кроме того, они обеспечиваются стандартными библиотеками классов в языках Java, C++, C# и F#.»[10,83]

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

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

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

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

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

«В языке Паскаль могут использоваться объекты, содержащие множество однотипных элементов. Упорядоченность данных в массиве позволяет обращаться к любому элементу массива по его порядковому номеру (индексу). Элементы массива расположены последовательно в непрерывной области памяти. Нужно четко понимать, что индекс ячейки массива не является ее содержимым. Содержимым являются хранимые в ячейках данные, а индексы только указывают на них. Индексы элементов массива обычно целые числа, однако могут быть и символами, а также описываться другими порядковыми типами. Зачастую для задания количества элементов массива используется тип-диапазон. Тип-диапазон задается левой и правой границами изменения индекса массива.»[1,525] Описание массива перед использованием массив, как и любая переменная, должна быть объявлена (описана). Описание типа массива задается следующим образом:

type имя типа = array[ список индексов ] of тип;

Здесь имя типа – правильный идентификатор;

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

тип – любой тип данных.

Пример. const n = 5;

type mas = array[1..n] of integer;{Объявлен тип mas, являющийся массивом (array) целых чисел (integer), границы изменения индекса массива – 1… n} var a: mas;

Определить переменную как массив можно и непосредственно при ее описании в разделе var, без предварительного описания типа массива, например:

var a,b,c: array[1..10] of integer;{Объявлены три массива a, b, c, состоящие из десяти целых элементов} Обращение к определенному элементу массива осуществляется путем указания имени переменной массива и в квадратных скобках индекса элемента, например a[3] – обращение к третьему элементу массива a, a[i] – обращение к i-му элементу массива a.

«Простой массив является одномерным. Он представляет собой линейную структуру. Основные действия с массивами единственное действие, которое можно выполнять над массивами целиком, причем только при условии, что массивы однотипны, – это присваивание.»[1,498]

Если в программе описаны две переменные одного типа, например, Var a , b : array [1..10] of real; то можно переменной a присвоить значение переменной b (a:=b). При этом каждому элементу массива a будет присвоено соответствующее значение из массива b.

«Все остальные действия над массивами Паскаля производятся поэлементно (это важно!). Ввод массива Для того чтобы ввести значения элементов массива, необходимо последовательно изменять значение индекса, начиная с первого до последнего, и вводить соответствующий элемент. Для реализации этих действий удобно использовать цикл с заданным числом повторений, где параметром цикла будет выступать переменная – индекс массива. Значения элементов могут быть введены с клавиатуры или определены с помощью оператора присваивания.»[3,256] Пример фрагмента программы ввода массива с клавиатуры:

Var A : array [1..10] of integer; i : byte; {переменная i как индекс массива}

Begin For i:=1 to 10 do Read (a[i]); { ввод i- го элемента производится с клавиатуры }

Рассмотрим теперь случай, когда массив заполняется автоматически случайными числами. Для этого будем использовать генератор случайных чисел – random ( N ).

Пример фрагмента программы заполнения массива случайными числами:

83 Var A: array [1..10] of integer;

i : byte ;

Begin For i :=1 to 10 do A [ i ]:= random (50)-25; {i-му элементу массива присваивается «случайное» целое число в диапазоне от 0 до 49 с вычетом 25, т.е. окончательный диапазон от -25 до 24} .

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

Пример фрагмента программы вывода массива:

Var A: array [1..10] of integer;

i : byte ; {переменная i как индекс массива} Begin Writeln(‘Массив А’);

For i :=1 to 10 do Write ( a [ i ]:5); {вывод массива осуществляется в строку, под каждый элемент выделяется 5 позиций, иначе элементы массива будут выведены слитно} .

Writeln; (Для перевода курсора на следующую строку)

На экране мы увидим, к примеру, следующие значения: Массив А _ _ _ _ 5_ _ _ - 2_ _ 1 1 5 и т.д. Вывод можно осуществить и в столбик (использовать оператор Writeln).»[5,283]

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

Var A: array [1..10] of integer;

i : byte ;

Begin For i:=1 to 10 do Writeln (‘a[‘, i,’]=’, a[i]); {вывод элементов массива в столбик} .

На экране мы увидим, к примеру, следующие значения: a [1]=2 a [2]=4 a [3]=1 и т.д.

«Алгоритмы обработки:

Поиск минимального элемента:

min:=a[1];

For i:=2 to 10 do If a[i]< min then min:= a[i];

Замена наибольшего элемента массива на 0:

max:=a[1];

imax:=1;

For i:=2 to 10 do If a[i] > max then begin max:= a[i]; imax:=i;

end; a[imax]:=0;

В переменной max получаем наибольший элемент массива, а в переменной imax – индекс наибольшего элемента.»[1,525]

«Поиск суммы четных элементов массива:

S:=0;

For i:=1 to 10 do If a[i] mod 2 = 0 then S:=S+ a[i];

Рассмотрим пример программы целиком. Задача: Сформировать массив b из нечетных элементов массива a, состоящим из n элементов.

Program massiv;

Const n=10;

Var a, b: array [1..n] of integer;

i, k: byte; {i – индекс массива a, k – индекс массива b}

Begin For i:=1 to n do {Заполнение массива числами в диапазоне от -25 до 24 случайным образом}

a[i]:= random (50)-25;

writeln(‘Массив A’);

For i:=1 to k-1 do write (a[i]:5); { вывод массива a в строку}

writeln;

k:=1;

For i:=1 to n do If a[i] mod 2 <> 0 then begin {Проверка на нечетность} b[k]:=a[i]; {Запись нечетного элемента в массив b} k:=k+1; {Подготовка индекса для следующего элемента}

end;

writeln(‘Массив B’);

For i:=1 to k-1 do write (b[i]:5); {вывод массива b в строку} end.»[5,289]

«В С++ основная форма объявления массива размерности N имеет следующий формат: тип < имя массива> [размер 1][размер2]... [размер N ]; тип - базовый тип элементов массива, [размер1][размер2]... [ размер N] - количество элементов одномерных массивов, входящих в многомерный массив.»[10,85]

Чаще всего используются одномерные массивы, форма объявления которых будет иметь вид Тип [размер]. Например, оператор int A[10]; объявляет массив с именем А, содержащий 10 целых чисел. Доступ к элементам массива осуществляется выражением А[i] , где i - индекс элементов массива, который начинается с нуля и в данном примере заканчивается цифрой 9. Поэтому элемент А[0] характеризует значение первого элемента массива, А[1] - второго, А[9] - последнего.

Объявление массива можно совмещать с заданием элементам массива начальных значений. Эти значения перечисляются в списке инициализации после знака равенства, разделяются запятыми и заключаются в фигурные скобки, например: int A[10] = {1,2,3,4,5,6,7,8,9,10};

«Элементы массива могут иметь любой тип. Так, например, оператор char S[10]; объявляет массив из символов. Массив символов - это фактически строка, и число символов, помещаемых в строку, должно быть на единицу меньше объявленного размера массива. Это обусловлено тем, что строка кончается нулевым символом и будет, к примеру, иметь вид char S[10] = {"abcdefghi\0"};. Нулевой символ в конце можно не указывать, поэтому нормально будет воспринято такое объявление: char S[10] = {"abcdefghi"};.»[3,280]

Двумерный массив может быть объявлен таким образом: int A2[10][3];. Этот оператор описывает двумерный массив, который можно представить себе как таблицу, состоящую из 10 строк и 3 столбцов. Доступ к значениям элементов многомерного массива обеспечивается через индексы, каждый из которых заключается в квадратные скобки. Например, A2[3][2] - значение элемента, лежащего на пересечении четвёртой строки и третьего столбца (напоминаем, что индексы начинаются с 0). Если многомерный массив инициализируется при его объявлении, список значений по каждой размерности заключается в фигурные скобки. Приведённый ниже оператор объявляет и инициализирует двумерный массив A2 размерностью 3 на 5:

int A2[3][5] = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};, однако допустим и упрощенный способ инициализации:

int A2[3][5] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};.

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

«С помощью оператора цикла осуществляется присвоение начальных нулевых значений элементам массива n[5], содержащего пять целых чисел. Печать массива осуществляется в табулированном формате. Первый оператор вывода печатает на экране заголовки столбцов, а второй выводит эле- 90 менты массива и их значения. Функция setw() указывает ширину поля, в котором будет выведено следующее значение.»[8,95]

#include

#include main( ) { clrscr(); // очистка экрана

int n[5];

for(int i=0;i<<"элемент"«setw(13)<<"значение\n"; // вывод заголовков for(i=0;i<<setw(7)<<i<<setw(13)<<n[i]<<"\n"; // вывод элементов cout<<"\nНажмите любую клавишу…";

getch();

return 0;

Результаты работы программы: элемент значение 0 0 1 0 2 0 3 0 4 0

«При копировании элементам массива mcopy последовательно (в цикле) присваиваются значения элементов массива mes. При этом для доступа к элементам массива используются индексы.»[1,523]

Вывод элементов массива также осуществляется в цикле.

#include

#include main()

{ clrscr(); int i; 91 int mes[12]={31,28,31,30,31,30,31,31,30,31,30,31}; // инициализация массива int mcopy[12];

for(i=0;i<<"Исходный массив "<<setw(29)<<" Скопированный массив"; //вывод //заголовков for(i=0;i<<"\nmes="<<mes[i]<<"\t\t\tmcopy="<<<"\nНажмите любую клавишу…";

getch();

return 0;

}

Результаты работы программы: Исходный массив, скопированный массив mes= 31 mcopy =31 mes =28 mcopy =28 … … mes = 31 mcopy =31.

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

Количество положительных элементов суммируется в переменной p, отрицательных - в переменной n, а нулевых - в переменной zero.

#include

#include main() { float a[10]; int i=0, n=0, p=0, zero=0; // обнуление переменных

clrscr();

cout<<"\nОпределить количество положительных и отрицательных элементов массива a[10]\n";

for( i=0; i<<i+1<<"] : "; cin>>a[i]; }

for( i=0; i 0) p += 1; // определение количества положительных элементов

if( a[i] < 0) n += 1; // определение количества отрицательных элементов

if( a[i] == 0) zero += 1; // определение количества нулевых элементов }

cout<<"\n\n"; cout<<"\nЧисло положительных элементов ="<<<"\nЧисло отрицательных элементов ="<<<"\nЧисло нулевых элементов ="<<<"\n\n";

cout<<"\nНажмите любую клавишу…";

getch(); }

«В Java для создания массива вы можете пользоваться квадратными скобками, расположив их справа от имени массива или от типа объектов, из которых составлен массив, например:

int nNumbers[];

int[] nAnotherNumbers;

Допустимы оба варианта, поэтому вы можете выбрать тот, который вам больше нравится.

При определении массивов в языке Java нельзя указывать их размер. Приведенные выше две строки не вызывают резервирования памяти для массива. Здесь просто создаются ссылки на массивы, которые без инициализации использовать нельзя.»[9,159]

Для того чтобы заказать память для массива, вы должны создать соответствующие объекты с помощью ключевого слова new, например:

int[] nAnotherNumbers;

nAnotherNumbers = new int[15];

Как выполнить инициализацию ячеек таблицы?

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

int[] nColorRed = {255, 255, 100, 0, 10};

Динамическая инициализация выполняется с использованием индекса массива, например, в цикле:

int nInitialValue = 7;

int[] nAnotherNumbers;

nAnotherNumbers = new int[15];

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

{

  nAnotherNumbers[i] = nInitialValue;

}

Вы можете создавать массивы не только из переменных базовых типов, но и из произвольных объектов. Каждый элемент такого массива должен инициализироваться оператором new.»[9,180]

Массивы могут быть многомерными и, что интересно, несимметричными.

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

int[][] nDim = new int[5][10];

nDim[0] = new int [4];

nDim[1] = new int [4];

nDim[2] = new int [8];

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

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

int[] nAnotherNumbers;

nAnotherNumbers = new int[15];

for(int i = 0; i < nAnotherNumbers.length; i++)

{

  nAnotherNumbers[i] = nInitialValue;

}

Для определения размера массива вам не нужен такой оператор, как sizeof из языка программирования С, потому что существует другой способ определения этого размера.

«Массивы и коллекции тоже получили выражение в синтаксисе обоих языков, благодаря особой разновидности цикла for (цикл по коллекции, известный также как цикл foreach). В обоих языках массив является объектом класса Array, но в Java он не реализует какие-либо интерфейсы коллекций, хотя по массивам возможна итерация циклом for(:). Оба языка имеют в стандартной библиотеке классы типичных коллекций.»[5,301]

«В Java могут быть объявлены, строго говоря, только одномерные массивы. Многомерный массив в Java — массив массивов. В C# есть как настоящие многомерные массивы, так и массивы массивов, которые в C# обычно называются «неровными», или «ступенчатыми» (jagged). Многомерные массивы всегда «прямоугольные» (говоря в двумерной терминологии), в то время как массивы массивов могут хранить строки разной длины (опять-таки в двумерном случае, в многомерном аналогично).»[3,286]

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

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

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

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

«В данном примере мы реализуем хранилище данных на языке С++, человек сможет с помощью массива и инструментов его обработки, записывать и извлекать данные в программе.»[7,78]

#include <iostream>

#include <stdlib.h>

using namespace std;

int main() {

    int data[500][500] = {0}; // массив

    string type; // тип запроса

    int x, y, val;

    while выражающая (true) современного { // бесконечный вседозволенности цикл информационного

        cin информация >> меры type; // говориться узнаем того тип сфер запроса происходит

        if делает (type становится == художественной "End") позиции { // общества если бытия End, то критическая завершаем разных работу

            break;

        } бытия else образующих if статье (type первая == коммуникации "Insert") авторы { // вставка

            cin коммуникация >> выражающая x потоки >> может y мировоззрения >> проходят val;

            data[x][y] осознание = неподлинного val;

        } порождают else границ if является (type делает == одной "Delete") творцом { // удаление

            cin потоки >> человек x выражающая >> аннотация y;

            data[x][y] своего = гуманитарного 0;

        } бытийствует else нового if делает (type ключевой == дискурсов "Get") способа { // получение фельетонную значения сталкивается

            cin является >> общества x внимание >> работе y;

            cout сфер << подлинное data[x][y] взаимодействия << первая endl;

        } информационного else личностное { // сфер что-то ценности пошло не так

            cout личностное << своего "Error! человек Let's стороной try общество again." проблема << после endl; литературы

        }

    }

    cout влияние << стороной "\nOk. большей Good внимание work." &lt;&lt; литературы знанияendl;

    return сталкивается 0; тенденции

}

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

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

Пример:                 

                позиции B=<20,-5,10,8,7>,  исходный позволяющий список;

                свободного B1=<-5,10,8,7,20>, первый подлинное просмотр;

                 способа B2=<-5,8,7,10,20>, второй сколько просмотр;

                 отсутствию B3=<-5,7,8,10,20>, третий которыми просмотр.

     void бытие main() отнести

     потоки { сказано

     современном int выводы k[10],v,i,j=9,m=1;

     нарушению for является (i=0;i<10;i++)

     пространства scanf("%d",&k[i]); случайных

     поля while(m) узловых

     ведет { критической m=0;

       позиция for(i=0; сталкивается i<j; своего i++) которое

       взаимодействия {   информационное if(k[i]>k[i+1])

                   разных {v=k[i]; фельетонную

  потоки                  оптимизм k[i]=k[i+1];

                   предстает  k позиции[i+1]=v;

         своего   разных        m=1;

         дискурсов          становится сознание } бытийствует

       самых } главных

       j--;

     критика } является

     printf("отсортированный совокупностью массив\n”); аннотация

     for(i=0;i&lt;10;i++)

     того printf(" которое %d\n  проблем ",k[i]); случайных

     }

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

import которое java.util.Scanner; творцом

которое public отсутствие class своего Main смыслового {

первая public работе static подчеркивается void подлинное main(String[] критическая args) ключевые {

оказывает Scanner коммуникации in = new какие Scanner(System.in); общества

своего double сталкивается moneyAmount;

культуру System.out.println(" сознаниеВведите порождают деньги философии: особое "); содержании

современном moneyAmount выделяются = образующих in.nextDouble(); критической

String[] отмечается drinks; одной

информационного drinks одного = new дискурсов String[]{" основанияКаппучино", случайных " фельетоннуюЛатте", общества " вниманиеМолоко", ключевой " своюВода"};

работе int[] большей price;

знания price века = new параметров int[]{110, себя 130, 40, человека 10}; меры

свою for(int своего i = 0; i процессе < человек drinks.length; человек i++) позиция

других { большей

аутентичной if(moneyAmount пространства >= главных price[i]) современного {

человек System.out.println(" своюВы особое можете процессе купить процессе " поля + интеллектуальный drinks[i]); пространства

интеллектуальный самых}

бытие аутентичнойif(moneyAmount коммуникации < взаимодействия 10) {

общество бытийствуетSystem.out.println("Вы сознание не общества можете авторами купить основания ничего");

знания break; может

особое } умеренный

ключевой } сталкивается

имеет } воспринимать

}

«Часто века в умеренный математических личностное вычислениях интеллектуальный требуется коммуникация найти позиции максимальное мировоззрения значение пространства среди разграничивать элементов социального двумерного авторы массива субъективно вещественных одного чисел. после Так же в неподлинного данном предстает примере своего будет происходит реализована безмерные возможность человека показа сколько строки безмерные и субъективно столбца можно где был человека найден возможности элемент. уделяется »[1,522] выражающая

var

a: критическая array реалиях [1...10, выделяются 1...10] многоплановости of общества real; является

i, общества j, мировоззрения n, m , разных kmax является , проблеме lmax: того integer;

max отсутствие :real; проблеме

begin

writeln(’Введите имеет n<=10 сознание , которое m<=10’); одной

readln(n,m);

writeln(’Введите психологии элементы противоположные массива по человек строкам’); нарушению

for сфер i:=1 сознании to n do

for социуме j:=1 проблеме to m do

readln(a[i,j]);

max:=a[1,1]; информации kmax:=1; творцом lmax:=1;

for сфер i:=1 большей to n do

for словарей j:=1 века to m do

if проблема a[i,j]>max открытости then

begin

max:=a[i,j];

kmax:=i;

lmax:=j;

end;

writeln(’max=’, выбора max:8:3); выделяются

writeln(’строка ключевой - вседозволенности ’, интеллектуальный kmax,’ дискурсов столбец тенденции - столько ’,lmax);

readln; статье end. проблемой

«Для аутентичной задания качестве размера культуры массива основания часто узловых удобно человека использовать имеет константы. нарушению В многоплановости примере интеллектуальный ниже сознании число культуру строк имеет двумерного человека массива обратной задается влияние константой row, выбора а границ число проблеме столбцов происходит – авторами константой способа col. диссонанс Использование влияние констант для нарушению задания статье размера качестве массивов интеллектуальный делает качестве программу свободного более личностное наглядной информационного и психологии масштабируемой, сознание так как при слова любом гуманитарного изменении влияние размеров внимание массива в основания программе диссонанс достаточно сталкивается будет способа изменить позиции только информации значения сфер констант. интеллектуальный Этот случайных прием критической наиболее противоположные эффективен бытия в сколько больших особое программах. В отсутствию данной словарей программе художественной решается возникновение задача разграничивать вычисления разграничивать количества социуме положительных, говориться отрицательных и оказывает нулевых говориться элементов себя двумерного информационное массива позволяющий размерность делает 2 на 3, на других языке концу С++.»[10,72-75]

#include&lt;iostream.h&gt;

#define порождают row своего 2 // строки

#define аннотация col сознании 3 // столбцы

main()

{

float общество b[row][col] противоположные

int становится i какие = 0, j = 0, n = 0, p = 0, самых zero отсутствию = 0;

clrscr();

count&lt;&lt;”\n возможности Определить современного количество того положительных гуманитарного и сталкивается отрицательных культуры элементов”;

count&lt;&lt;”\n человек словареймассив ключевые b[“<<row<<col<<”]\n”; нарушению

for(i=o;i&lt;row;i++)

{

for(j=0;j&lt;col;j++)

{

count&lt;&lt;”\nВведите сказано b[“<<i+1”,”<<j+1<<”]=”; возможности

cin&gt;&gt;b[i][j]; освобождению // элементарных ввод фельетонную элементов дискурсов массива

}

count&lt;&lt;”\n\n”;

}

for(j=0;i&gt;row;i++)

{

for(j=0;j&lt;col;j++)

{ бытия if(b[i][j]>0) открытости p+=1;

if(b[i][j]&lt;0) особое n+=1; элементарных

if(b[i][j]==0)zero+=1;

}

count&lt;&lt;”\nЧисло человек положительных уделяется элементов=”<<p;

count&lt;&lt;”\nЧисло века отрицательных основания элементов=”<<n;

count&lt;&lt;”\nЧисло психологии нулевых сталкивается элементов=”<<zero;

count&lt;&lt;”\nНажмите бытия любую смыслового клавишу…”;

getch();

return информационного 0; многоплановости

}

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

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

Методы основания обработки общества массива человека везде значение производятся с словарей помощью человека циклов, бытия меняется основания только первая выбор человек вида позволяющий цикла, человека в осознание основном уделяется это значение операторы проблема цикла отнести такие интеллектуальный как: for(), философии while(). оптимизм Так же для значение вывода потерю нужного статье результата одного используется дискурсов оператор способа if(), способа человекelse().

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

Заключение

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

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

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

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

Список художественной использованных многоплановости источников

  1. Информатика: границ Базовый отсутствию курс / С. В. элементарных Симонович проблем и др. — диссонанс СПб.: большей Питер, порождают 2003. предстает — 640 с.
  2. Информатика приводит (для социуме технических подчеркивается направлений) основания : критика учебное интеллектуальный пособие / Н. И. современного Иопа. ведет – 2-е подчеркивается изд., становится стер. – М.: образующих КНОРУС, стороной 2012. – 472 с.
  3. Основы интеллектуальный алгоритмизации поля и происходит программирования своего : дискурсов учебник знания для уделяется студ. происходит учреждений разных сред. человек проф. можно образования информационное / И. Г. которое Семакин, культуру А. П. себя Шестаков. имеет – 3-е приводит изд., фельетонную стер. – М. : «Академия», бытие 2016. проблема – 304 с.
  4. Основы выводы алгоритмизации безмерные и беспредельной программирования бытие : поля учеб.. информационное пособие / других Д.М. бытие Ахмедханлы, социуме Н.В. дискурсов Ушмаева. – авторами Тольятти общества : разграничивать Изд-во границ ТГУ, элементарных 2016. социуме – 123 с.
  5. Основы отсюда информатики информационного : приводит учебник может / В. Ф. основания Ляхович, себя В. А. статье Молодцов. своего – М.: своего КНОРУС, отнести 2016. – 384 с.
  6. Основы приводит алгоритмизации позиции и человек программирования: после учеб. становится пособие критическая / одной Т.А. культуру Жданова, освобождению Ю.С. отсутствию Бузыкова. – информации Хабаровск осознание : может Изд-во поля Тихоокеан. информации гос.ун-та, уделяется 2011. – 56 с.
  7. Основы своего алгоритмизации предстает в значение информационных авторами системах: случайных учебное подлинное пособие / меры П.М. большей Белов. - реалиях Спб.: сознании СЗТУ, информация 2003. ключевой – столько 85с. нового
  8. Программирование выводу и значение основы свою алгоритмизации: статье Для безмерные инженерных нарушению специальностей главных технических начинает университетов и смыслового вузов. ценности /А.Г. социального Аузяк, диссонанс Ю.А. выбора Богомолов, человек А.И. аннотация Маликов, общества Б.А. возникновение Старостин. которое Казань: информации Изд-во коммуникации Казанского личностное национального пространства исследовательского выводы технического определенному ун-та - является КАИ, знания 2013. - 153 с.
  9. Программирование делает на критическая Java человека для выбора начинающих / А. С. способа Васильев. процессе – М.: безмерные Эксмо, является 2017. – 704 с.
  10. фельетонную Программирование взаимодействия и основания основы человека алгоритмизации: взаимодействия учебное сознании пособие / диссонанс В.Л. информации Макаров. – подлинное СПБ.: говориться СЗТУ, сколько 2003. позиции – 120 с.