Alt linux Программирование на языке С++ в среде Qt Creator Е. Р. Алексеев, Г. Г. Злобин, Д. А. Костюк, О. В. Чеснокова, А. С. Чмыхало Москва alt linux 2015



Download 5,27 Mb.
Pdf ko'rish
bet78/193
Sana24.02.2022
Hajmi5,27 Mb.
#227496
1   ...   74   75   76   77   78   79   80   81   ...   193
Bog'liq
Book-qtC


Глава 6
Статические и динамические матрицы
Данная глава посвящена обработке матриц в С++. На большом количестве
примеров будут рассмотрены возможности языка для обработки статических и
динамических матриц. В завершающем параграфе будет рассмотрено исполь-
зование двойных указателей и функций на примере решения задач линейной
алгебры.
6.1
Статические матрицы С(С++)
Матрица — это двумерный массив, каждый элемент которого имеет два ин-
декса: номер строки — i, номер столбца — j.
Статический двумерный массив (матрицу) можно объявить так:
тип имя_переменной [n][m];
где тип определяет тип элементов массива, имя_переменной — имя матрицы,
n — количество строк, m — количество столбцов в матрице. Строки нумеруются
от 0 до n − 1, столбцы — от 0 до m − 1.
Например,
double x[20][35];
Описана матрица вещественных чисел x, состоящая из 20 строк и 35 столбцов
(строки нумеруются от 0 до 19, столбцы от 0 до 34).
Как и любой другой переменной, матрице можно присвоить начальное зна-
чение, например int A[2][3]={{1,2,3}, {4,5,6}};
Для обращения к элементу матрицы необходимо указать её имя, и в квад-
ратных скобках номер строки, а затем в квадратных скобках — номер столбца.
Например, x[2][4] — элемент матрицы x, находящийся в третьей строке и пятом
столбце
1
.
Для работы с элементами матрицы необходимо использовать два цикла. Для
построчной обработки матрицы значениями параметра первого (внешнего) цик-
ла будут номера строк матрицы, значениями параметра второго (внутреннего)
1
Напоминаем, что нумерация строк и столбцов идёт с 0.


186
Глава 6. Статические и динамические матрицы
цикла — номера столбцов (см. рис. 6.1). При построчной обработке матрицы
вначале поочерёдно рассматриваются элементы первой строки (столбца), затем
второй и т.д. до последней. Если необходимо обрабатывать матрицу по столб-
цам, то необходимо организовать внешний цикл по столбцам, а внутренний по
строкам (см. рис. 6.2).
6.2
Динамические матрицы
В предыдущем параграфе мы рассмотрели описание статических матриц, в
этом случае память для хранения матрицы выделяется в момент описания. Од-
нако в С++ существует возможность создавать динамические матрицы. Дина-
мические матрицы можно создавать с использованием обычных указателей и с
помощью двойных указателей. Рассмотрим оба способа работы с динамическими
матрицами последовательно.
Рис. 6.1: Блок-схема построчной об-
работки матрицы
Рис. 6.2: Блок-схема обработки мат-
рицы по столбцам
6.2.1
Использование указателей для работы с динамическими
матрицами
При работе с динамическими матрицами можно использовать обычные ука-
затели. После описания указателя необходимо будет выделить память для хра-
нения N × M элементов (N — число строк, M — число столбцов). Рассмотрим
в качестве примера выделение памяти для хранения целочисленной матрицы
размером N × M.
i n t ∗A, N, M;
A=( i n t ∗ ) c a l l o c (N∗M, s i z e o f ( i n t ) ) ;
Для выделения памяти можно использовать также и функцию malloc
A=( i n t ∗ ) m a l l o c (N∗M∗ s i z e o f ( i n t ) ) ;
или операцию new
A=new i n t [N∗M] ;
Программирование на языке С++ в среде Qt Creator


6.3. Обработка матриц в С(С++)
187
Память мы выделили, осталось найти способ обратиться к элементу матри-
цы. Все элементы матрицы хранятся в одномерном массиве размером N × M
элементов. Сначала в этом массиве расположена 0-я строка матрицы, затем 1-я
и т.д. Поэтому для обращения к элементу A[i][j] необходимо по номеру строки
i и номеру столбца j вычислить номер этого элемента k в динамическом массиве.
Учитывая, что в массиве элементы нумеруются с нуля, k = iM + j. Обращение
к элементу A[i][j] будет таким: *(A+i*M+j) или A[i*M+j].
6.2.2
Использование двойных указателей для работы с
динамическими матрицами
Основной способ работы с динамическими матрицами базируется на исполь-
зовании двойных указателей. Рассмотрим следующий фрагмент программы.
i n t main ( )
{
i n t N,M;
f l o a t ∗∗ a ;
a=new f l o a t ∗ [N ] ;
}
С помощью оператора new создан массив из n элементов
2
, в котором каждый
элемент является адресом, где хранится указатель (фактически каждый указа-
тель — адрес строки матрицы). Осталось определить значение элементов масси-
ва. Для этого организуем цикл (переменная цикла i изменяется от 0 до N − 1),
в котором будет выделяться память для хранения очередной строки матрицы.
Адрес этой строки будет записываться в a[i].
f o r ( i =0; i a [ i ]=new f l o a t [M] ;
После этого определён массив N указателей, каждый из которых адресует
массив из M чисел (в данном случае вещественных типа float). Фактически
создана динамическая матрица размера N × M. Обращение к элементу динами-
ческой матрицы идёт так же, как и к элементу статической матрицы. Для того,
чтобы обратиться к элементу a
i,j
в программе на C++, необходимо указать его
имя, и в квадратных скобках номер строки и столбца (a[i][j]).
6.3
Обработка матриц в С(С++)
Рассмотрим основные операции, выполняемые над матрицами (статическими
и динамическими) при решении задач.
Матрицы, как и массивы, нужно вводить (выводить) поэлементно. Блок-
схема ввода элементов матрицы x[n][m] изображена на рис. 6.3.
2
В данном случае массив указателей на float.
© 2015 Алексеев Е. Р., Злобин Г. Г., Костюк Д. А., Чеснокова О. В., Чмыхало А. С.


188
Download 5,27 Mb.

Do'stlaringiz bilan baham:
1   ...   74   75   76   77   78   79   80   81   ...   193




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish