Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
12
Добавлен:
14.05.2015
Размер:
35.33 Кб
Скачать

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

Работа с массивами в С++

Цель работы: изучение технологии работы с массивами в С++.

Задание

  1. Изучить правила объявления массивов и работы с ними в С++.

  2. Разработать консольный проект решения задачи в соответствии с вариантом, заданным в файле Var04.doc.

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

Учебная информация

Массивы предназначены для хранения множества данных одинакового типа. Общая форма описания массива:

тип имя[N1][N2]...;

где N1, N2, ... – значения размерностей массива, задаваемые константами.

Если массив одномерный, то N1 соответствует максимальному количеству элементов массива, например, описание

int x[10];

означает выделение памяти для хранения десяти элементов целого типа.

Объем памяти под двумерный массив равен произведению размерностей N1*N2, умноженному на количество байтов, занимаемое одним элементом данного типа, например, описание

double matr[5][3];

резервирует 5*3*8=120 байтов оперативной памяти под массив matr.

Для обращения к конкретному элементу массива следует задать его индекс. Индексы должны быть целого типа, причем начальным значением индекса всегда является нуль. Таким образом, в первом рассмотренном примере возможен доступ к элементам x[0], x[1], ... , x[9], а во втором – от matr[0][0] до matr[4][2].

Массив может быть инициализирован при описании, например:

int y[5]={4, 6, 2, 1, 9};

или

float z[2][2]={{1.5, 3.2}, {2.0, 4.5}};

Рассмотрим использование массивов для решения следующей задачи.

Даны массивы a[N] и b[N] целого типа, оба упорядоченные по возрастанию. Получить массив С, упорядоченный по возрастанию слиянием массивов a и b.

Ниже приведен листинг программы решения задачи.

#include <iostream>

using namespace std;

void main() {

int N=4, // 1

a[5]={4, 6, 8, 10}, // 2

b[5]={7, 9, 11, 20}, // 3

C[8], // 4

i=0,

j=0,

k;

if (a[N-1]>b[N-1]) a[N]=a[N-1]+1; // 5

else a[N]=b[N-1]+1; // 6

b[N]=a[N]; // 7

for (k=0; k<2*N; k++) // 8

if (b[i]<a[j]) { // 9

C[k]=b[i]; i++;

} else {

C[k]=a[j]; j++;

}

cout << "C = ";

for (k=0; k<2*N; k++) // 10

cout << C[k] << " ";

}

Поясним строки, помеченные в комментариях числами:

1 – задали количество элементов в массивах (в окончательном варианте программы данные лучше вводить с клавиатуры);

2, 3 – задали тестовые массивы. Размер указан на единицу больше для хранения дополнительного элемента ("сторожа"). Его необходимость определяется применяемым алгоритмом. После инициализации a[4] и b[4] будут равны нулю. Обычно границы массивов при их описании задаются "с запасом", с учетом требований конкретной задачи. Если инициализируются не все элементы массива, оставшиеся автоматически обнуляются;

4 – описали выходной массив;

5-7 – добавляем в a и b по одному элементу ("сторожу"), значения которых больше максимального элемента среди элементов обоих массивов;

8 – начинаем цикл слияния двух массивов;

9 – один шаг слияния выполняется как выбор минимального из двух элементов: a[j] и b[i], где i и j – переменные, указывающие на очередные элементы этих массивов. При исчерпании всех элементов одного из массивов "сторож" не дает выйти индексу за допустимый предел;

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

Для рассмотренного примера получен следующий результат:

C = 4 6 7 8 9 10 11 20

Соседние файлы в папке ПрограммированиеCPP