
ВП_Лекция 9_C_Динамические_массивы.ppt
- Количество слайдов: 24
Лекция 9. Динамические массивы. Визуальное программирование. Ст. преп. М. А. Сокольская
План. Одномерные динамические массивы 1. • • • Массивы указателей Двумерные динамические массивы. 2. 3. • • 2 Объявление Создание Обращение к элементам массива • Объявление Создание Обращение к элементам массива
Понятие динамического массива Определение Динамический массив – последовательность однотипных элементов, имеющих общее имя, доступ к которым осуществляется по индексу, размерность которого определяется в процессе работы программы. 3
Динамические массивы 1. Количество элементов при объявлении неизвестно. 2. Память для массива выделяется на этапе выполнения программы, объем памяти определяется программистом. 3. Массив реализуется через систему указателей 4
Создание динамического массива 1. 2. 3. 4. 5 Объявление указателя нужного типа Выделение памяти для необходимого количества элементов (оператор new). Обработка массива Освобождение памяти (оператор delete)
Одномерные динамические массивы. Объявление указателя на массив. базовый_тип * имя_массива; Выделение памяти для динамического массива: имя_массива = new базовый_тип [колво_элементов] 6
Обращение к элементу массива (в общем случае) К элементу массива любого типа можно обратиться: - через индекс; - используя имя массива как указатель на его первый элемент (адресная арифметика). 7
Примеры 8 int str[80], *p 1, ch=10; p 1 = new int [ch]; Указателю p 1 присвоен адрес первого байта блока памяти, выделенного для 10 -ти целых чисел. Доступ к элементу массивов можно организовать двумя способами: k = str [4]; k=p 1[5]; //доступ через индекс или k = * (str + 4); //доступ через указатель k = * (p 1 + 5)
9
Пример: сортировка динамического массива методом «пузырька» int main (){ int *massiv; // указатель на исходный массив int i, j, n; //переменные циклов и количества элементов int tmp; // вспомогательная переменная //заполнение массива и его вывод на экран srand(time (NULL)); cin>>n; //ввод количества элементов массива massiv = new int [n]; //выделение памяти под массив 10
11 for (i=0; i<т; i++) { massiv [ i ] = rand (RAND_MAX) % 100; cout<
12 //вывод на экран результата for (i=0; i<10; i++) cout<
Пример. Реверс массива (динамический массив) 13 #include
*(a+j)=j+1; printf("%3 d", *(a+j)); } invert(a, n); printf("n. After reverse: n"); for(j=0; j
void invert (int *a, int n) //передача массива в функцию { for(int j=0, tmp; j
Массивы указателей Синтаксис: Тип_указателей *имя_массива [размер]; 16 Пример. int *points[10]; //объявление массива из 10 //целочисленных указателей points[2] = &n; //присвоить третьему элементу массива //адрес переменной n N = *points[3]; //присвоить переменной n значение, //находящееся по адресу, хранимому в //четвертом элементе массива.
17 При передаче в функцию массива указателей достаточно указать имя массива в качестве параметра. Пример void print_array (int *q[ ]) { int t; for (t = 0; t<10; t++) cout<<*q[t]; } q – указатель на массив целочисленных указателей.
Двумерные динамические массивы Представляют собой сложную конструкцию и реализуются через вспомогательный массив указателей 18
Объявление динамического двумерного массива char *sp [ ]={"Иванов", “Суриков", "Репин"}; int **a; Алгоритм работы с динамическим двумерным массивом более громоздкий, чем с одномерным. 19
Пример. Сложение квадратных матриц 20 void main () { int **a, **b, **c; //объявление указателей int i, j; int n; cin>>n; //ввод количества строк и столбцов a=new int * [n]; // выделение памяти под массив указателей b=new int * [n]; c=new int * [n];
for (i=0; i<=n; i++) { a[i]=new int [n]; /*выделение памяти под i-ю строку массива*/ b[i]=new int [n]; c[i]=new int [n]; } for (i=0; i<=n; i++) 21
for (j=0; j<=n; j++) { scanf(“%d%d”, &a[ i ][ j ], &b[ i ][ j ]); c[ i ][ j ]=a[ i ][ j ]+b[ i ][ j ]; } for (i=0; i<=n; i++) { for (j=0; j<=n; j++) printf(“%5 d”, c[ i ][ j ]); 22
printf(“n”); 23 } for (i=0; i<=n; i++){ delete [] a[i]; //освобождение памяти для i-ой строки delete [] b[i]; delete [] c[i]; } delete [] a; //освобождение памяти массива указателей delete [] b; delete [] c; _getch(); }
Самостоятельно Написать программу умножения матриц, используя динамические двумерные массивы 24