МегаПредмет

ПОЗНАВАТЕЛЬНОЕ

Сила воли ведет к действию, а позитивные действия формируют позитивное отношение


Как определить диапазон голоса - ваш вокал


Игровые автоматы с быстрым выводом


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


Целительная привычка


Как самому избавиться от обидчивости


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


Тренинг уверенности в себе


Вкуснейший "Салат из свеклы с чесноком"


Натюрморт и его изобразительные возможности


Применение, как принимать мумие? Мумие для волос, лица, при переломах, при кровотечении и т.д.


Как научиться брать на себя ответственность


Зачем нужны границы в отношениях с детьми?


Световозвращающие элементы на детской одежде


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


Как слышать голос Бога


Классификация ожирения по ИМТ (ВОЗ)


Глава 3. Завет мужчины с женщиной


Оси и плоскости тела человека


Оси и плоскости тела человека - Тело человека состоит из определенных топографических частей и участков, в которых расположены органы, мышцы, сосуды, нервы и т.д.


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


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

Синтаксис объявления двумерного массива





Министерство финансов Российской Федерации

Всероссийская государственная налоговая академия

 

ИНФОРМАТИКА И ПРОГРАММИРОВАНИЕ

 

Бакалавры: 230700 "Прикладная информатика"

Язык программирования С++

Лабораторная работа № 11

ПРОГРАММИРОВАНИЕ ВЫЧИСЛИТЕЛЬНЫХ ПРОЦЕССОВ,

СОДЕРЖАЩИХ МНОГОМЕРНЫЕ МАССИВЫ

 

Автор профессор кафедры "Прикладной информатики в экономике"

кандидат технических наук Л.К. Кузнецов

Мая 2012 г.

Москва

ВГНА


Лабораторная работа № 11

Программирование вычислительных процессов, содержащих

Многомерные массивы

 

Цель работы:

Ознакомиться:

Ø с понятием массива;

Ø с назначением массивов;

Ø с видами массивов;

Ø с понятием переменной с индексами;

Ø с понятием размерности массива;

Ø с правилами описания массивов в программах на языке С++;

Ø с организацией циклов при работе с массивами;

Ø с организацией ввода-вывода двумерных массивов;

Ø с приемами программирования задач обработки массивов.

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

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

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

 

1. КРАТКИЕ ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ

Ниже приводятся минимальные сведения, необходимые только для вы­полнения лабораторной работы

 

1.1. Хранение значений в массивах

Как вы уже знаете, ваши программы во время выполнения хранят информацию в переменных. До сих пор каждая переменная в программе хранила только одно значение в каждый момент времени. Однако в большинстве случаев программам необходимо хранить множество значений, например 50 тестовых очков, 100 названий книг или 1000 имен файлов. Если вашим программам необходимо хранить несколько значений, они должны использовать специальную структуру данных, называемую массивом. Для объявления массива необходимо указать имя, тип массива и количество значений, которые массив будет хранить. После выполнения данной лабораторной работы вы должны освоить следующие основные концепции:

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

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

– Все элементы внутри массива должны быть одного и того же типа, например, int, float или char.

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

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

–При объявлении массива программы могут использовать оператор присваивания для инициализации элементов массива.

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

 

Программы на C++ широко используют массивы. Когда в ЛР № 12 вы начнете работать с символьными строками (например, название книги, имя файла и т. д.), вы будете оперировать массивами символов.

 

1.2. Объявление переменной массива



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

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

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

Следующее объявление создает массив с именем test_scores, который может вмещать 100 целых значений для тестовых очков:

int test_scores[100]; // int - Тип массива; test_scores – Имя массива; [100] - Размер массива

 

Когда компилятор C++ встречает объявление этой переменной, он выделяет достаточно памяти для хранения 100 значений типа int.

Например, следующие операторы объявляют три разных массива:

float part_cost[50];

int employee_age[100];

float stock_prices[25];

 

Значения, хранящиеся в массиве, называются элементами массива.

 

1.3. Обращение к элементам массива

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

Рис. 11.1. Как C++ индексирует элементы массива.

 

Говоря кратко, значение индекса указывает требуемый элемент массива.

Важно помнить, что C++ всегда использует 0 для индекса первого элемента массива, а индекс последнего элемента на единицу меньше размера массива.

 

Следующая программаARRAY.CPP создает массив с именем values, который вмещает пять целочисленных значений. Далее программа присваивает элементам значения 100, 200, 300, 400 и 500:

#include <iostream.h>

void main(void)

{

int values[5]; // Объявление массива

values[0] = 100;

values[1] = 200;

values[2] = 300;

values[3] = 400;

values [4] = 500;

cout << "Массив содержит следующие значения" << endl;

cout << values [0] << ' ' << values [1] << ' ' << values [2] << ' ' << values [3] << ' '

<< values [4] << endl;

}

 

Как видите, программа присваивает первое значение элементу 0 (values[0]).Она также присваивает последнее значение элементу 4 (размер Массива (5) минус 1).

 

Все массивы C++ начинаются с элемента с индексом 0. Например, следующий оператор присваивает значение 100 первому элементу массива с именем scores:

scores[0] = 100;

 

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

int scores[100];

В данном случае массив представляет собой элементы от scores[0] до scores[99].

 

1.4. Использование индексной переменной

Если ваши программы используют массив, обычной операцией является использование индексной переменной для обращения к элементам массива. Например, предположим, что переменная i содержит значение 3, следующий оператор присваивает значение 400 элементу values[3]:

values[i] = 400;

Следующая программа SHOWARRA.CPP использует индексную переменную i внутри цикла for для вывода элементов массива. Цикл for инициализирует i нулем, так что программа может обращаться к элементу values[0]. Цикл for завершается, когда i больше 4 (последний элемент массива):

#include <iostream.h>

void main (void)

{

int values[5]; // Объявление массива int i;

values[0] = 100;

values[1] = 200;

values[2] = 300;

values[3] = 400;

values[4] = 500;

cout << "Массив содержит следующие значения" << endl;

for (i = 0; i< 5; i++) cout << values [i]<< ' ';

}

 

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

for (i = 4; i >= 0; i--) cout << values [i]<< ' ';

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

1.5. Инициализация массива при объявлении

Как вы уже знаете, C++ позволяет вашим программам инициализировать переменные при объявлении. То же верно и для массивов. При объявлении массива вы можете указать первоначальные значения, поместив их между левой и правой фигурными скобками, следующими за знаком равенства. Например, следующий оператор инициализирует массив values:

int values[5] = { 100, 200, 300, 400, 500};

 

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

float salaries[3] = { 25000.00. 35000.00, 50000.00};

 

Если вы не указываете первоначальное значение для какого-либо элемента массива, большинство компиляторов C++ будут инициализировать такой элемент нулем. Например, следующее объявление инициализирует первые три из пяти элементов массива:

int values[5] = { 100, 200, 300};

 

Программа не инициализирует элементы values[3] и values[4]. В зависимости от вашего компилятора, эти элементы могут содержать значение 0. Если вы не указываете размер массива, который вы инициализируете при объявлении, C++ распределит достаточно памяти, чтобы вместить все определяемые элементы. Например, следующее объявление создает массив, способяый хранить четыре целочисленных значения:

int numbers[] = { 1, 2, 3, 4 };

 

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

Примерыинициализации двумерного массива:

int s[l][2]={ {4,5,6}, {7,8,9}};

intf[l][2]={10,H, 12,13,14};

charp[2][2]={{1n'},{y}};

Массив s инициализируется полностью заданными значениями. В массиве f из его шести значений (размер массива f — 2 строки и 3 столбца) инициализируется только первые 5 элементов (это элементы с индексами 0,0 0,1 0,2 1,0 1,1). В массиве р инициализируются только 2 элемента: р[0][0]='п'и рШГ01=У.

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

Если задан размер массива, то значения, не заданные явно, определяются в зависимости от класса памяти.

 

1.6. Передача массивов в функции

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

void some_function(int array[], int number_of_elements);

Следующая программаARRAYFUN.CPP передает массивы в функцию show_array, которая использует цикл for для вывода значений массивов:

#include <iostream.h>

void show_array (int array [] , int number_of_elements)

{

int i;

for (i = 0; i < number_of_elements; i++) cout << array[i] << ' ';

cout << endl;

}

int main()

{

int little_numbers[5] ={1,2,3,4,5};

int big_numbers[3] = { 1000, 2000, 3000 };

show_array(little_numbers, 5);

show_array(big_numbers, 3);

}

 

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

show_array(little_numbers, 5);

 

Следующая программа GETARRAY.CPP использует функцию get_values, чтобы присвоить три значения массиву numbers:

#include <iostream.h>

void get_values(int array[], int number_of_elements)

{

int i;

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

{

cout “ "Введите значение " << i << ": ";

cin ” array [i];

}

}

int main()

{

int numbers[3];

get_values(numbers, 3);

cout << "Значения массива" << endl;

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

cout << numbers [i] << endl;

}

 

Как видите, программа передает массив в функцию по имени. Функция в свою очередь присваивает массиву элементы. Из ЛР №14 вы узнаете, что, пока ваша программа не передаст параметры в функцию с помощью адреса, функция не может изменить эти параметры. Однако, как можно заметить в данном случае, функция get_values изменяет параметр-массив numbers. Как вы узнаете из ЛР №15, C++ действительно передает массивы в функцию, используя указатели. Таким образом, функция может изменить элементы массива, если ей это нужно.

 

1.7. Двумерные массивы в С++

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

Например, после объявления

int a[5][6][7];

 

в программе могут появиться выражения:

а[i] [j] [k] _ объект типа int;

а[2][0] - объект типа int* - одномерный массив из 7 целых;

а[1] - двумерный массив из 6*7 = 42 целых;

а - сам трехмерный массив.

 

Так как элементом массива аявляется двумерный подмассив раз­мером 6*7, то при выполнении выражения а + 1происходит смещение на величину элемента массива а,т.е. переход от а[0] к а[1]. Значение адреса при этом увеличивается на 6*7*sizeof(int) =84.

 

Для двумерного массива masвыражение mas[i][j]интерпретиру­ется как *(*(mas+i)+j).Здесь mas[i]- константный указатель на i-ю строку массива mas.

 

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

Так, для массива с[2][3] его шесть элементов расположены в па­мяти так:

с[0][0] с[0][1] с[0][2] с[1][0] с[1][1] с[1][2].

 

Простейшая форма многомерного массива — двухмерный массив. Двумерный массив – это массив, каждый элемент которого имеет два индекса.

Двумерные массивы еще называются матрицей.

Простейший пример двумерного массива – таблица.

Допустим, необходимо обработать некоторые данные из таблицы. В таблице есть две характеристики: количество строк и количество столбцов. Также и в двумерном массиве, кроме количества элементов массива, есть такие характеристики как, количество строк и количество столбцов двумерного массива. То есть, визуально, двумерный массив - это обычная таблица, со строками и столбцами. Фактически двумерный массив - это одномерный массив одномерных массивов. Структура двумерного массива, с именем a, размером m x n показана ниже (рис. 11.4), где, m-количество строк двумерного массива; n - количество столбцов двумерного массива; m*n- количество элементов массива.

Рис. 11. 4. Двумерный массив в С++

Синтаксис объявления двумерного массива

/*тип данных*/ /*имя массива*/[/*количество строк*/][/*количество столбцов*/];

 

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

тип данных;

имя массива.

 

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

 

Пример объявление двумерного массива:

int a[5][3];

 

a - имя целочисленного массива

- число в первых квадратных скобках указывает количество строк двумерного массива, в данном случае их 5;

-число во вторых квадратных скобках указывает количество столбцов двумерного массива, в данном случае их 3.

 





©2015 www.megapredmet.ru Все права принадлежат авторам размещенных материалов.