Обращение к элементам двумерного динамического массива

Адресация элементов динамического массива осуществляется с помощью индексированного имени.

Синтаксис:

ИмяМассива[ВыражениеТипаКонстанты][ВыражениеТипаКонстанты];

или

ИмяМассива[ЗначениеИндекса][ЗначениеИндекса];

Например:

mas[5][7] – индекс задается как константа,

sl[i][j] – индекс задается как переменная,

array[4*p][p+5] – индекс задается как выражение.

Пример 1. Сформируйте и выведите на экран единичную матрицу с целыми элементами, вводя ее порядок с клавиатуры.

#include <iostream.h>

void main() {

int n,i,j;

int **matr;//указатель для массива указателей

cout << "Input matrix order:";

cin >> n;

matr = new int *[n];

//выделение памяти под массив указателей

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

matr[i] = new int[n];

//выделение памяти для массива значений

for (j=0; j<n; j++) //заполнение матрицы

matr[i][j] = (i==j ? 1 : 0);

}

cout << "Result: ";

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

cout << "\n";

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

cout << " " << matr[i][j];

delete matr[i];

//освобождение памяти из-под массива значений

}

delete [] matr;

//освобождение памяти из-под массива указателей

}

Пример 2. Вычислить сумму элементов, лежащих на диагоналях матрицы N ´ N (обратить внимание на четность-нечетность числа N). Размер массива должен задаваться пользователем с клавиатуры.

#include <stdio.h>

#include <stdlib.h>

#include <time.h>

void gen (int nn,int a, int b,int ***mas);

//объявление функции генерации массива

int summa(int nn, int **mas);

/*объявление функции вычисления сумму заданных элементов массива*/

void out (int nn,int **mas);

//объявление функции вывода массива

 

void main (){

int **mass, n;

int s;

printf("Введите n: ");

scanf("%d",&n);

printf("\nГенерация массива \n");

gen(n,0,10,&mass);

s=summa(n,mass);

out(n,mass);

printf("\nСумма элементов = %d",s);

}

 

 

void gen(int nn, int a, int b, int ***mas){

//функция генерации массива

int i,j;

srand(time(NULL)*1000);

*mas=(int**)malloc(nn*sizeof(int*));

for (i=0;i<nn;i++){

(*mas)[i]=(int*)malloc(nn*sizeof(int));

for (j=0;j<nn;j++)

(*mas)[i][j]=(rand()*1.0/(RAND_MAX)*(b-a)+a);

}

}

 

int summa(int nn, int **mas) {

//функция вычисления сумму элементов диагоналей

int i,j, sum=0;

for (i=0;i<nn;i++)

for (j=0;j<nn;j++) {

if ((i==j) || (i==nn-j-1)) {

//нахождение элементов диагоналей

sum+=mas[i][j];

//суммирование элементов диагоналей

}

}

return sum;

}

void out (int nn,int **mas){

//функция вывода массива

int i,j;

for (i=0;i<nn;i++) {

for (j=0;j<nn;j++)

printf("%4d",mas[i][j]);

printf("\n");

free (mas[i]);

}

free (mas);

}

 

В языке С++ предусмотрено использование указателя вида ***mass. В данном примере в функцию генерации массива передается не адрес указателя, а его значение. Передача фактического параметра при вызове функции осуществляется через определение адреса указателя **mass.

 

Перед компиляцией кода в среде MSVC++ необходимо в меню Options/Project отключить режим Use Microsoft Foundation Classes.

 

 

Задания

1.Наберите код программы из Примера 1. Выполните компиляцию и запуск программы.

2.В двумерном целочисленном динамическом массиве замените все четные элементы их половинами.

3.Добавьте в двумерный динамический массив строку из одних нулей после каждой строки, сумма элементов которой больше заданного числа S.

Домашние задания

1.Наберите код программы из Примера 2. Выполните компиляцию и запуск программы.

2.В двумерном вещественном динамическом массиве замените все отрицательные элементы их квадратами. Реализуйте данную программу двумя способами: 1) с помощью операций new и delete; 2) с помощью библиотечных функций malloc (calloc) и free.

3.Замените в двумерном целочисленном динамическом массиве размера 3´3 каждый элемент его алгебраическим дополнением.









Дата добавления: 2015-02-16; просмотров: 1579;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.008 сек.