Добавил:
ПОИТ 2016-2020 Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пустовалова 1 сем / OAIP_voprosy_i_otvety_-_beta.docx
Скачиваний:
67
Добавлен:
29.04.2018
Размер:
413.34 Кб
Скачать
  1. Связь между указателями и элементами матриц. Поиск минимума и суммы элементов матрицы через указатели.

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

При объявлении двумерного массива int A[4][3] в памяти выделяется участок для хранения значения переменной A, которая является указателем на массив из четырех указателей. Каждый из этих четырех указателей содержит адрес начального элемента массива из трех элементов типа int.

A

A[0]

A[0][0]

A[0][1]

A[0][2]

A[1]

A[1][0]

A[1][1]

A[1][2]

A[2]

A[2][0]

A[2][1]

A[2][2]

A[3]

A[3][0]

A[3][1]

A[3][2]

Таким образом, объявление A[4][3] порождает в программе три разных объекта: указатель с идентификатором А, безымянный массив из четырех указателей и безымянный массив из двенадцати чисел типа int.

Доступ к элементам массива указателей осуществляется с указанием одного индексного выражения в форме А[2] или *(А+2). Для доступа к элементам двумерного массива чисел типа int используются два индексных выражения в форме А[1][2] или эквивалентных *(*(А+1)+2) *(А[1]+2) (*(A+1))[2]. Указатель А и указатели А[0], А[1], А[2], А[3] являются константами и их значения нельзя изменять во время выполнения программы.

Пример. Напишите программу, которая принимает с клавиатуры число N, создает матрицу размера N на N, заполненную случайными числами, и выводит ее на экран. Затем найдите сумму всех элементов этой матрицы.

#include <iostream>

#include <ctime>

using namespace std;

int main()

{

srand(time(NULL));

int n = 0;

int sum = 0;

cin >> n; // Считываем с клавиатуры n

int **a = new int* [n]; // Создаем массив указателей

for (int i = 0; i < n; i++)

{

a[i] = new int [n]; // Создаем элементы

}

// А дальше работа как с обычным массивом.

for (int i = 0; i < n; i++)

{

for (int j = 0; j < n; j++)

{

a[i][j] = rand() % 10;

cout << a[i][j] << " "; // Вывести элементы на консоль

sum+= a[i][j];

}

cout << endl; // Двумерный массив. Строка кончилась, переводим строку и на консоли

}

cout << "sum =" << sum << endl;

// Удаление массива

for (int i = 0; i < n; i++)

{

delete[]a[i]; // Удаляем каждый элемент

}

delete [] a; // А потом массив

return 0;

}

Пример. Найти минимальный элемент массива

min = a[0][0];// берем самый первый элемент массива и считаем, что он минимальный.

for (int i = 0; i < n; i++)

{

for (int j = 0; j < n; j++)

{

if (a[i][j] < min) min = a[i][j];

}

}

cout << "min = " << min << endl

Соседние файлы в папке Пустовалова 1 сем