Лекция 12 Двумерные массивы


Скачать 80.92 Kb.
НазваниеЛекция 12 Двумерные массивы
ТипЛекция
Лекция 12

1. Двумерные массивы
Многомерные массивы задаются указанием каждого измерения в квадратных скобках, например, оператор

int matr [6][8];

задает описание двумерного массива из 6 строк и 8 столбцов. В памяти такой массив располагается в последовательных ячейках построчно. Многомерные массивы размещаются так, что при переходе к следующему элементу быстрее всего изменяется последний индекс. Для доступа к элементу многомерного массива указываются все его индексы, например, matr[i][j], или более экзотическими способами: *(matr[i]+j) или *(*(matr+i)+j). Это возможно, поскольку matr[i] является адресом начала i-й строки массива.

При инициализации многомерного массива он представляется либо как массив массивов (при этом каждый массив заключается в свои фигурные скобки и в этом случае левую размерность при описании можно не указывать), либо задается общий список элементов в том порядке, в котором элементы располагаются в памяти:
int mass2 [][2] = { {1, 1}, {0, 2}, {1, 0} }:

int mass2 [3][2] = {1, 1, 0, 2, 1, 0}

Пример. Заполнить двумерный массив размером n x m натуральными числами в виде «змейки». Например, при n=3, m=4:

1 2 3 4

8 7 6 5

9 10 11 12
#include

using namespace std;

void main()

{

int n,m,i,j;

cin>>n>>m;

int a[10][10];

int k=1;

for (i=0;i
if (i%2!=0)

for (j=0;j
{

a[i][j]=k;

k++;

}

else

for (j=m-1;j>=0;j--)

{

a[i][j]=k;

k++;

}

for (i=0;i
{

for (j=0;j
cout<
cout<
}
}
Создание динамического многомерного массива:
int nstr, nstb;

cout << " Введите количество строк и столбцов: ";

cin >> nstr >> nstb;

int **a = new int *[nstr]; // 1

for (int i = 0; i
a[i] = new int [nstb]; // 3

...
В операторе 1 объявляется переменная типа «указатель на указатель на int» и выделяется память под массив указателей на строки массива (количество строк — nstr). В операторе 2 организуется цикл для выделения памяти под каждую строку массива. В операторе 3 каждому элементу массива указателей на строки присваивается адрес начала участка памяти, выделенного под строку двумерного массива. Каждая строка состоит из nstb элементов типа int.

Освобождение памяти из-под массива с любым количеством измерений выполняется с помощью операции delete [ ] . Указатель на константу удалить нельзя.

Решим предыдущую задачу с использованием динамического массива

#include

#include

using namespace std;

void main()

{

int n,m,i,j;

cin>>n>>m;

int **a;

a=new int *[n];//задаем массив из n элементов, каждый из которых является адресом строки

for (i=0;i
a[i]=new int[m]; //выделяем память под каждую строку массива

int k=1;

for (i=0;i
if (i%2!=0)

for (j=0;j
{

a[i][j]=k;

k++;

}

else

for (j=m-1;j>=0;j--)

{

a[i][j]=k;

k++;

}

for (i=0;i
{

for (j=0;j
cout<
cout<
}

for (i=0;i
delete[] a[i];

delete []a;//освобождаем память для массива указателей на строки
}

Решим эту же задачу с использованием динамического массива и функции

#include

#include

using namespace std;

void zmey(int **a,int n,int m)

{

int i,j,k;

k=1;

for (i=0;i
if (i%2==0)

for (j=0;j
{

a[i][j]=k;

k++;

}

else

for (j=m-1;j>=0;j--)

{

a[i][j]=k;

k++;

}

}

int ** init_m(int &n,int &m)

{

int i;

cin>>n>>m;

int **a=new int *[n];//задаем массив из n элементов, каждый из которых является адресом строки

for (i=0;i
a[i]=new int[m]; //выделяем память под каждую строку массива

zmey(a,n,m);

return a;

}

void del_m(int **a,int n)

{

for (int i=0;i
delete [] a[i];

delete []a;//освобождаем память для массива указателей на строки

}

void print_m(int **a,int n,int m)

{

int i,j;

for (i=0;i
{

for (j=0;j
cout<
cout<
}

}

void main()

{

int n,m;

int **mas;

mas=init_m(n,m);

print_m(mas,n,m);

del_m(mas,n);

}
Второй вариант решения этой же задачи (даны только те функции, в которых есть изменения):

…………

void init_m(int **&a,int &n,int &m)

{

int i;

cin>>n>>m;

a=new int *[n];//задаем массив из n элементов, каждый из которых является адресом строки

for (i=0;i
a[i]=new int[m]; //выделяем память под каждую строку массива

zmey(a,n,m);

}

……………

void main()

{

int n,m;

int **mas;

init_m(mas,n,m);

print_m(mas,n,m);

del_m(mas,n,m);

}
Ввод и вывод статического массива (с использованием функций)

Вариант 1

const int nmax=20;

const int mmax=20;
void init_m(int a[][mmax],int &n, int &m)

{

int i,j;

cin>>n>>m;

for (i=0;i
for (j=0;j
cin>>a[i][j];

}

void print_m(int a[][mmax],int n,int m)

{

int i,j;

for (i=0;i
{

for (j=0;j
cout<
cout<
}

}

void main()

{

int n,m;

int mas[nmax][mmax];

init_m(mas,n,m);

print_m(mas,n,m);

}
Вариант 2

#include

#include

using namespace std;

const int nmax=20;

const int mmax=20;
void init_m(int *a,int &n, int &m)

{

int i,j;

cin>>n>>m;

for (i=0;i
for (j=0;j
cin>>*(a+i*m+j);

}

void print_m(int a[],int n,int m)

{

int i,j;

for (i=0;i
{

for (j=0;j
cout<
cout<
}

}

void main()

{

int n,m;

int mas[nmax][mmax];

init_m(&mas[0][0],n,m);

print_m(&mas[0][0],n,m);

}

Пример. Удаление из массива строки с номером k

#include

#include

using namespace std;

int ** init_m(int &n,int &m)

{

int i,j,k;

cin>>n>>m;

int **a=new int *[n];//задаем массив из n элементов, каждый из которых является адресом строки

for (i=0;i
a[i]=new int[m]; //выделяем память под каждую строку массива

for (i=0;i
for (j=0;j
cin>>a[i][j]; //ввод массива

return a;

}

void del_m(int **a,int n)

{

for (int i=0;i
delete [] a[i];

delete []a;//освобождаем память для массива указателей на строки

}

void print_m(int **a,int n,int m)

{

int i,j;

for (i=0;i
{

for (j=0;j
cout<
cout<<"\n";

}

}

void udal(int **a,int &n,int &m) //удаляем строку k

{

int i,j,k;

cout<<"k";

cin>>k;

for (i=k;i
for (j=0;j
a[i][j]=a[i+1][j];

n--;

}

void main()

{

int n,m;

int **mas;

mas=init_m(n,m);

print_m(mas,n,m);

udal(mas,n,m);

print_m(mas,n,m);

del_m(mas,n);

}





Похожие:

Лекция 12 Двумерные массивы iconДвумерные массивы
Массивы, положение элементов в которых описывается двумя индексами, называются двумерными. Их можно представить в виде прямоугольной...

Лекция 12 Двумерные массивы iconК/р " Двумерные массивы как способ организации данных." (10 кл.)
На контрольной работе необходимо письменно ответить на два теоретических вопроса и решить 1 задачу

Лекция 12 Двумерные массивы iconКонспект по теме: Двумерные массивы
Определение: Двумерный массив- это одномерный массив, у которого типом компоненты является одномерный массив

Лекция 12 Двумерные массивы iconОдномерные и двумерные массивы (таблицы) Массив
Массив — это пронумерованная последовательность величин одинакового типа, обозначаемая одним именем. Элементы массива располагаются...

Лекция 12 Двумерные массивы iconОдномерные и двумерные массивы Раздел описания типов
В разделе описания типов пользователь может определять свои типы данных, присваивая каждому из них определенный идентификатор. Синтаксис...

Лекция 12 Двумерные массивы iconОписание двумерного массива Рассмотрим описание массива на конкретном примере
Двумерные массивы условно можно изобразить в виде таблицы ( матрицы). С информацией, представленной в виде таблицы, мы очень часто...

Лекция 12 Двумерные массивы iconВ лабораторной работе вне зависимости от варианта необходимо двумерные...
Вводится число n. Необходимо создать матрицу размером и заполнить её случайными числами в диапазоне [1,5]. После чего необходимо...

Лекция 12 Двумерные массивы iconЛекция №17 77 Синдром воспаления 77 Лекция №18 80 Синдром воспаления...
Хирургический метод лечения имеет большое значение в клинической медицине. Одну четверть заболеваний составляют хирургические болезни....

Лекция 12 Двумерные массивы iconУрок 22. Тема урока: Массивы в языке Паскаль. Одномерные массивы ( 1 час)
Цель урока: систематизация и развитие знаний по использованию массивов в программах на Паскале

Лекция 12 Двумерные массивы iconЛабораторная работа №1 (одномерные массивы) 27
Лабораторная работа №6 (статические массивы, знакомство с графическим режимом. Возможно будет изменена) 49

Вы можете разместить ссылку на наш сайт:


Все бланки и формы на filling-form.ru




При копировании материала укажите ссылку © 2019
контакты
filling-form.ru

Поиск