Лабораторная работа № 1. Программирование алгоритмов с использованием динамических массивов - Технология разработки программного обеспечения систем управления

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

- Теоретические сведения

Объявление Динамического Массива

Массивы, создаваемые в динамической памяти, будем называть Динамическими (размерность становится известна в процессе выполнения программы). При описании массива после имени в квадратных скобках задается количество его элементов (размерность), например, int a[10]. Размерность массива может быть задана только константой или константным выражением.

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

Int а[10] = {1, 1, 2, 2, 5, 100};

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

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

Int n = 10;

Int *mass1 = new int[n];

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

Обращение к элементу динамического массива осуществляется так же, как и к элементу обычного. Если динамический массив в какой-то момент работы программы перестает быть нужным, и мы собираемся впоследствии использовать эту память повторно, то необходимо освободить ее с помощью операции delete[], например: delete [] a; (размерность массива при этом не указывается).

Delete[] mass1.

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

Mass2=new int*[row];

// mass2 - указатель на

// массив //указателей на

// одномерные массивы

For(i=0;i<row;i++)

Mass2[i]=new int[col];// каждый элемент массива

// указывает на //одномерный

For (i=0; i<row;i++)

For (j=0;j<col;j++)

Освобождение памяти от двухмерного динамического массива:

For(i=0;i<row;i++)

//удаление всех одномерных

Delete[] mass2[i]; // массивов

Delete[] mass2;

// удаление массива //указателей

// на одномерные массивы

- Задание к лабораторной работе

Общая постановка. Составить программы - одномерные массивы: задания 1 - 25, двухмерные массивы: задания 26 - 50. Массивы создаются в динамической области памяти с использованием операций NEW и DELETE. Ввод исходных данных: реальный размер массивов и их значения. Обращение к элементам массива - через косвенную адресацию. Действия с массивами реализовать в виде функции.

    - Варианты заданий 1. Заданы два массива - А(5) и В(4). Первым на печать вывести массив, сумма значений которого окажется наименьшей. 2. Заданы два массива - А(5) и В(4). Первым на печать вывести массив, произведение значений которого окажется наименьшим. 3. Заданы два массива - А(5) и В(5). В каждом из массивов найти наименьшее значение и прибавить его ко всем элементам массивов. На печать вывести исходные и преобразованные массивы. 4. Заданы два массива - А(5) и В(5). В каждом из массивов найти наибольшее значение и вычесть его из всех элементов массивов. На печать вывести исходные и преобразованные массивы. 5. Заданы два массива - А(5) и В(5). В каждом из массивов найти среднее арифметическое всех элементов массивов. На печать вывести исходные массивы и найденные значения. 6. Заданы два массива - А(5) и В(4). Первым на печать вывести массив, содержащий наибольшее значение. Напечатать также это значение и его порядковый номер. 7. Заданы два массива - А(5) и В(5). Подсчитать в них количество отрицательных элементов и первым на печать вывести массив, имеющий наименьшее их количество. 8. Заданы два массива - А(5) и В(5). Подсчитать в них количество положительных элементов и первым на печать вывести массив, имеющий наименьшее их количество. 9. Заданы два массива - А(5) и В(5). Подсчитать в них количество отрицательных элементов и первым на печать вывести массив, имеющий наибольшее их количество. 10. Заданы два массива - А(5) и В(5). Подсчитать в них количество положительных элементов и первым на печать вывести массив, имеющий наибольшее их количество. 11. Заданы два массива - А(5) и В(5). Подсчитать в них количество элементов, больших значения t, и первым на печать вывести массив, имеющий наименьшее их количество. 12. Заданы два массива - А(5) и В(5). Подсчитать в них количество элементов, меньших значения t, и первым на печать вывести массив, имеющий наименьшее их количество. 13. Заданы два массива - А(5) и В(5). Подсчитать в них количество элементов, больших значения t, и первым на печать вывести массив, имеющий наибольшее их количество. 14. Заданы два массива - А(5) и В(5). В каждом из массивов найти наименьшее значение и умножить на него все элементы массивов. На печать вывести исходные и преобразованные массивы. 15. Заданы два массива - А(5) и В(5). В каждом из массивов найти наибольшее значение и умножить на него все элементы массивов. На печать вывести исходные и преобразованные массивы. 16. Заданы два массива - А(5) и В(5). В каждом из массивов найти наименьшее значение и разделить на него все элементы массивов. На печать вывести исходные и преобразованные массивы. 17. Заданы два массива - А(5) и В(5). В каждом из массивов найти наибольшее значение и разделить на него все элементы массивов. На печать вывести исходные и преобразованные массивы. 18. Заданы два массива - А(5) и В(5). Подсчитать в них количество элементов, кратных двум, и первым на печать вывести массив, имеющий наибольшее их количество. 19. Заданы два массива - А(5) и В(5). Подсчитать в них количество элементов, кратных трем, и первым на печать вывести массив, имеющий наибольшее их количество. 20. Заданы два массива - А(5) и В(5). Подсчитать в них количество элементов, меньших значения t, и первым на печать вывести массив, имеющий наибольшее их количество. 21. Задан массив - А(10). Получить из него массив В, состоящий из элементов массива А, которые больше 0. 22. Задан массив - А(10). Получить из него массив В, состоящий из элементов массива А, которые меньше 0. 23. Задан массив - А(10). Получить из него массив В, состоящий из элементов массива А, которые кратны двум. 24. Задан массив - А(10). Получить из него массив В, состоящий из элементов массива А, которые больше значения T. 25. Задан массив - А(10). Получить из него массив В, состоящий из элементов массива А, которые кратны трем. 26. Дан массив - А(n, n). Найти число элементов массива a(i, j) > t и просуммировать все эти элементы. 27. Дан одномерный массив - А(n). Сформировать массив B(k),состоящий из a(i) > t. На печать вывести исходный массив, сформированный массив и его размерность. 28. Дан массив - A(n, n). Вычислить сумму всех неотрицательных элементов, а также их количество. 29. Дан массив - A(n, n). Вычислить сумму всех отрицательных его элементов и их количество. 30. Дан массив - A(n, n). Сформировать вектор В(k) из a(i, j) < 0. на печать вывести исходный массив, полученный вектор и его размерность. 31. дан массив - a(n, n). написать программу его поворота на 90° относительно его центра. на печать вывести исходный и повернутый массивы. 32. дан массив - a(n, n). написать программу его поворота на 180° относительно его центра. на печать вывести исходный и повернутый массивы. 33. дан массив - a(n, n). написать программу его поворота на 270° относительно его центра. на печать вывести исходный и повернутый массивы. 34. дан массив - a(n, n). найти сумму всех его элементов, расположенных выше главной диагонали. 35. дан массив - a(n, n). найти сумму всех его элементов, расположенных ниже главной диагонали. 36. дан массив - a(n, n). найти сумму всех его элементов, расположенных выше диагонали, противоположной главной. 37. дан массив - a(n, n). найти сумму всех его элементов, расположенных ниже диагонали, противоположной главной. 38. задана матрица - а(n, n). найти суммы и произведения элементов, стоящих на главной и противоположной (побочной) диагоналях. 39. задана матрица - а(n, n), состоящая из нулей и единиц. подсчитать количество нулей и единиц в этой матрице. 40. задана матрица - а(n, n). переставить местами k-ю и i-ю строки, а эатем l-й и j-й столбцы. 41. задан массив действительных чисел а(n). необходимо каждый элемент массива разделить на среднее арифметическое этих элементов. на печать вывести исходный и преобразованный массивы. 42. задан массив - а(n). получить массив в(k), состоящий из элементов массива а, которые делятся на 3. подсчитать количество элементов массива в. 43. задана матрица а(n, n). получить матрицу в=а^2. элемент b[i][j] определяется как сумма от поэлементного произведения i-й строки на j-й столбец матрицы а. 44. вычислить первую норму матрицы а(n, n), определяемую как, т. е. максимальная сумма из сумм элементов по столбцам. 45. вычислить вторую норму матрицы а(n, n), определяемую как максимальная сумма из сумм элементов по строкам. 46. задан двухмерный массив целых чисел a размером n на m. найти сумму элементов, расположенных на главной диагонали. 47. задан двухмерный массив целых чисел a размером n на m. найти произведение элементов, расположенных на главной диагонали. 48. задан двухмерный массив целых чисел a размером n на m. найти максимальный элемент и поменять его с элементом a[1,1]. 49. задан двухмерный массив целых чисел a размером n на m. найти минимальный элемент и поменять его с элементом a[1,1]. 50. задан двухмерный массив целых чисел a размером n на m. найти максимальный элемент и поменять его с последним. - Контрольные вопросы 1. В чем заключается особенность динамических массивов? 2. Какие вы знаете операции динамического выделения и освобождения памяти в С++? 3. Как объявить динамический многомерный массив, используя указатели? 4. Что содержит указатель на массив?

Похожие статьи




Лабораторная работа № 1. Программирование алгоритмов с использованием динамических массивов - Технология разработки программного обеспечения систем управления

Предыдущая | Следующая