Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Одномерные и двумерные динамические массивы.

Поиск

Одномерные и двумерные динамические массивы.

Одномерные динамические массивы

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

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

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

Объявление одномерных динамических массивов

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

Синтаксис:

Тип * ИмяМассива;

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

Тип – тип элементов объявляемого динамического массива. Элементами динамического массива не могут быть функции и элементы типа void.

Например:

int *a; double *d;

В данных примерах a и d являются указателями на начало выделяемого участка памяти. Указатели принимают значение адреса выделяемой области памяти для значений типа int и типа double соответственно.

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

Освобождение памяти, выделенной под одномерный динамический массив

Освобождение памяти, выделенной под одномерный динамический массив, также осуществляется 2 способами.

1) при помощи операции delete, которая освобождает участок памяти ранее выделенной операцией new.

Синтаксис:

delete [] ИмяМассива;

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

Например:

delete [] mas; /*освобождает память, выделенную под                  массив, если mas адресует его начало*/delete [] m;delete [] lm;

Квадратные скобки [] сообщают оператору, что требуется освободить память, занятую всеми элементами, а не только первым.

2) при помощи библиотечной функции free, которая служит для освобождения динамической памяти.

Синтаксис:

free (ИмяМассива);

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

Например:

free (a); //освобождение динамической памяти

Задания для выполнения

  1. Задан массив. Определить сколько раз меняется знак в данной последовательности чисел, запомнить номера позиций, в которых меняется знак.
  2. Задана последовательность из N вещественных чисел. Вычислить сумму чисел, порядковые номера которых являются числами Фибоначчи.
  3. Напишите программу, оформив её в виде функций генерации, вывода и обработки массивов. Сформируйте динамический одномерный массив, заполните его случайными числами и выведите на печать. Добавьте после каждого отрицательного элемента его модуль и выведите массив на печать. Реализуйте данную программу двумя способами: 1) с помощью операций new и delete; 2) с помощью библиотечных функций malloc (calloc) и free.
  4. В двумерном целочисленном динамическом массиве замените все четные элементы их половинами.
  5. В двумерном вещественном динамическом массиве замените все отрицательные элементы их квадратами. Реализуйте данную программу двумя способами: 1) с помощью операций new и delete; 2) с помощью библиотечных функций malloc (calloc) и free.
  6. Замените в двумерном целочисленном динамическом массиве размера 3x3 каждый элемент его алгебраическим дополнением.
  7. Индивидуальные задания.  Задача на двумерный динамический массив.

 

Вариант Задание
1. Элементы матрицы A сделать с помощью генератора случайных чисел. Сделать новую матрицу B, в которой удалить с матрицы А ряд, в котором минимальный элемент среди элементов главной диагонали.
2. Составить программу, которая заполняет квадратную матрицу порядка n натуральными числами 1, 2, 3,..., n2,записывая их в нее "по спирали" против часовой стрелки.
3. Составить программу, которая заполняет квадратную матрицу порядка n натуральными числами 1, 2, 3,..., n2, записывая их в нее "по спирали" по часовой стрелке. 9 Дан двухмерный целочисленный массив A(M,N). Составить одномерный массив B из номеров строк этого массива.
4. Написать программу, которая в матрице чисел A(N,M) находит все элементы, превышающие по абсолютной величине заданное число B. Подсчитать число таких элементов и записать их в массив C.
5. Написать программу, которая в матрице чисел A(N,M) находит все элементы, равные числу, введенному с клавиатуры. Подсчитать число таких элементов.
6. Задан двумерный массив А[5,10]. Получить новую матрицу путем деления всех элементов исходной матрицы на ее наибольший по модулю элемент.
7. Дан двумерный массив. Вставьте первую строку после строки, в которой находится первый встреченный минимальный элемент.
8. Дан целочисленный массив В[1..5, 1..5]. Вычислить произведение элементов этого массива, расположенных ниже левой диагонали.
9. Дан целочисленный массив В[1..5, 1..5]. Вычислить сумму элементов этого массива, расположенных выше левой диагонали.
10. Дана целочисленная матрица размера 5х5. Заменить в данной матрице все отрицательные элементы первой строки числом 0.
11. Дана целочисленная матрица размера 5х5. Получить новую матрицу путем деления всех элементов данной матрицы на ее наибольший по модулю элемент.  
12. Дана целочисленная прямоугольная матрица размера M·N. Отсортировать каждый столбец с четным номером по неубыванию, а каждый столбец с нечетным номером -по невозрастанию.
13. Дана целочисленная матрица размера 8х5. Определить: а) сумму всех элементов второго столбца массива; б) сумму всех элементов 3-й строки массива.
14. Дана целочисленная прямоугольная матрица размера M·N. Сформировать одномерный массив, состоящий из элементов, лежащих в интервале [1,20]. Найти среднеарифметическое полученного одномерного массива.
15. Дана целочисленная прямоугольная матрица размера M·N. Сформировать одномерный массив, состоящий из элементов, лежащих в интервале [1,10]. Найти произведение елементов полученного одномерного массива.
16. Дана целочисленная квадратная матрица. Найти в каждой строке наибольший элемент и поменять его местами с элементом главной диагонали.
17. Дана целочисленная квадратная матрица. Указать столбец (назвать его номер), где минимальное количество элементов, кратных сумме индексов.
18. Дана целочисленная квадратная матрица. Найти сумму элементов матрицы, лежащих выше главной диагонали.
19. Определить, является ли данный квадратный массив симметричным относительно своей главной диагонали.
20. Определить, является ли данный квадратный массив не симметричным относительно своей главной диагонали.
21. Даны два числа n и m. Создайте двухмерный массив int A[n][m], заполните его таблицей умножения A[i][j]=i*j и выведите на экран. При этом нельзя использовать вложенные циклы, все заполнение массива должно производиться одним циклом, например, for(i=0;i<n*m;++i).
22. Дана матрица целых чисел размера NxM. Вывести номер строки, содержащей минимальное число одинаковых элементов.
23. Дана целочисленная квадратная матрица. Найти произведение элементов матрицы, лежащих ниже главной диагонали.
24. Дана матрица целых чисел размера NxM. Вывести номер строки, содержащей максимальное число одинаковых элементов.
25. Дан массив A(n,m). Удалить строки массива, не имеющие ни одного повторяющегося элемента.
26. Написать программу, которая в матрице чисел A(N,M) находит все элементы, не превышающие по абсолютной величине заданное число B. Подсчитать число таких элементов и записать их в массив C.
27. Дана целочисленная прямоугольная матрица размера M·N. Сформировать одномерный массив, состоящий из элементов, лежащих в интервале [1,20]. Найти сумму элементов полученного одномерного массива.

 

Одномерные и двумерные динамические массивы.



Поделиться:


Последнее изменение этой страницы: 2021-07-18; просмотров: 156; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.16.49.213 (0.005 с.)