Презентация на тему: Лекция 9. Динамические массивы

Лекция 9. Динамические массивы.
План.
Понятие динамического массива
Динамические массивы
Создание динамического массива
Одномерные динамические массивы.
Обращение к элементу массива (в общем случае)
Примеры
Лекция 9. Динамические массивы.
Пример: сортировка динамического массива методом «пузырька»
Лекция 9. Динамические массивы.
Лекция 9. Динамические массивы.
Пример. Реверс массива ( динамический массив )
Лекция 9. Динамические массивы.
Лекция 9. Динамические массивы.
Массивы указателей
Лекция 9. Динамические массивы.
Двумерные динамические массивы
Объявление динамического двумерного массива
Пример. Сложение квадратных матриц
Лекция 9. Динамические массивы.
Лекция 9. Динамические массивы.
Лекция 9. Динамические массивы.
Самостоятельно
1/24
Средняя оценка: 4.9/5 (всего оценок: 11)
Код скопирован в буфер обмена
Скачать (148 Кб)
1

Первый слайд презентации: Лекция 9. Динамические массивы

Визуальное программирование. Ст. преп. М.А. Сокольская

Изображение слайда
2

Слайд 2: План

2 2 План. Одномерные динамические массивы Объявление Создание Обращение к элементам массива Массивы указателей Двумерные динамические массивы. Объявление Создание Обращение к элементам массива

Изображение слайда
3

Слайд 3: Понятие динамического массива

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

Изображение слайда
4

Слайд 4: Динамические массивы

1. Количество элементов при объявлении неизвестно. 2. Память для массива выделяется на этапе выполнения программы, объем памяти определяется программистом. 3. Массив реализуется через систему указателей 4

Изображение слайда
5

Слайд 5: Создание динамического массива

Объявление указателя нужного типа Выделение памяти для необходимого количества элементов (оператор new ). Обработка массива Освобождение памяти (оператор delete ) 5

Изображение слайда
6

Слайд 6: Одномерные динамические массивы

Объявление указателя на массив. базовый_тип * имя_массива ; Выделение памяти для динамического массива: имя_массива = new базовый_тип [ кол-во_элементов ] 6

Изображение слайда
7

Слайд 7: Обращение к элементу массива (в общем случае)

К элементу массива любого типа можно обратиться: через индекс; используя имя массива как указатель на его первый элемент (адресная арифметика). 7

Изображение слайда
8

Слайд 8: Примеры

8 Примеры int str[80], *p1, ch=10; p1 = new int [ch]; Указателю p1 присвоен адрес первого байта блока памяти, выделенного для 10-ти целых чисел. Доступ к элементу массивов можно организовать двумя способами: k = str [4]; k=p1[5]; // доступ через индекс или k = * (str + 4); // доступ через указатель k = * (p1 + 5)

Изображение слайда
9

Слайд 9

9

Изображение слайда
10

Слайд 10: Пример: сортировка динамического массива методом «пузырька»

int main (){ int * massiv; // указатель на исходный массив int i, j, n; // переменные циклов и количества элементов int tmp; // вспомогательная переменная // заполнение массива и его вывод на экран srand(time (NULL)); cin>>n; // ввод количества элементов массива massiv = new int [n]; // выделение памяти под массив 10

Изображение слайда
11

Слайд 11

for (i=0; i< т ; i++) { massiv [ i ] = rand (RAND_MAX) % 100; cout<<massiv [ i ]<<“, “; } // цикл сортировки for (i=0; i<10; i++) for (j=0; j<9; j++) if (massiv [ j ]>massiv [ j+1 ]){ tmp=massiv[ j ]; massiv[ j ]=massiv[ j+1 ]; massiv[ j+1 ]=tmp;} 11

Изображение слайда
12

Слайд 12

// вывод на экран результата for (i=0; i<10; i++) cout<<massiv [ i ]<<“, “; _getch(); delete [] massiv; // освобождение памяти return 0;} Если память была выделена, то её обязательно нужно освободить. После освобождения памяти указатель может использоваться повторно. 12

Изображение слайда
13

Слайд 13: Пример. Реверс массива ( динамический массив )

13 Пример. Реверс массива ( динамический массив ) #include <stdio.h> #include <conio.h> void invert(int *a,int n); // прототип функции void main() { int j, * a, n; scanf(“%d”, &n); printf(“ Исходный массив :\n"); a=new int [n]; for(j=0; j<n; j++) {

Изображение слайда
14

Слайд 14

*(a+j) =j+1; printf("%3d", *(a+j) ); } invert(a,n); printf("\nAfter reverse:\n"); for(j=0; j<n; j++) printf("%3d", *(a+j) ); delete [] a; _getch(); } 14

Изображение слайда
15

Слайд 15

void invert (int *a, int n) // передача массива в функцию { for(int j=0, tmp; j<n/2; j++) // tmp – вспомог. переменная { tmp= *(a+j) ; *(a+j)=*(a+(n-j-1)) ; *(a+(n-j-1)) =tmp; } } 15

Изображение слайда
16

Слайд 16: Массивы указателей

16 Массивы указателей Синтаксис: Тип_указателей *имя_массива [ размер ]; Пример. int *points[10]; // объявление массива из 10 // целочисленных указателей points[2] = &n; // присвоить третьему элементу массива // адрес переменной n N = *points[3]; // присвоить переменной n значение, // находящееся по адресу, хранимому в // четвертом элементе массива.

Изображение слайда
17

Слайд 17

17 При передаче в функцию массива указателей достаточно указать имя массива в качестве параметра. Пример void print_array (int *q[ ]) { int t; for (t = 0; t<10; t++) cout<<*q[t]; } q – указатель на массив целочисленных указателей.

Изображение слайда
18

Слайд 18: Двумерные динамические массивы

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

Изображение слайда
19

Слайд 19: Объявление динамического двумерного массива

char *sp [ ] ={"Иванов",“Суриков","Репин"}; int **a; Алгоритм работы с динамическим двумерным массивом более громоздкий, чем с одномерным. 19

Изображение слайда
20

Слайд 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]; 20

Изображение слайда
21

Слайд 21

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

Изображение слайда
22

Слайд 22

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(“%5d”, c[ i ][ j ]); 22

Изображение слайда
23

Слайд 23

printf(“\n”); } for (i=0; i<=n; i++){ delete [] a[i]; // освобождение памяти для i- ой строки delete [] b[i]; delete [] c[i]; } delete [] a; // освобождение памяти массива указателей delete [] b; delete [] c; _getch(); } 23

Изображение слайда
24

Последний слайд презентации: Лекция 9. Динамические массивы: Самостоятельно

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

Изображение слайда