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



Download 5,27 Mb.
Pdf ko'rish
bet84/193
Sana24.02.2022
Hajmi5,27 Mb.
#227496
1   ...   80   81   82   83   84   85   86   87   ...   193
Bog'liq
Book-qtC


Глава 6. Статические и динамические матрицы
указатели на исходные матрицы, N, M — количество строк и столбцов мат-
риц, функция возвращает указатель на сформированную матрицу, которая
является разностью двух матриц A и B.
• float **product_m(float **A, float **B, int N, int M, int L)

функция формирует матрицу, которая является произведением двух мат-
риц. Здесь A, B — указатели на исходные матрицы. Матрица A имеет N
строк и M столбцов, матрица B имеет M строка и L столбцов, функ-
ция возвращает указатель на сформированную матрицу, которая является
произведением двух матриц A и B.
• float **create_m(int N, int M) — функция создаёт матрицу, в которой
будет N строк и M столбцов, осуществляет ввод элементов матрицы, функ-
ция возвращает указатель на сформированную матрицу.
• void output_m(float **A, int N, int M) — функция построчного выво-
да на экран матрицы A, которая имеет N строк и M столбцов.
Далее приведён текст программы с комментариями.
#include 
using namespace s t d ;
//функция вычисления суммы двух матриц.
f l o a t ∗∗sum_m( f l o a t ∗∗A, f l o a t ∗∗B, i n t N, i n t M)
{
i n t i , j ;
f l o a t ∗∗ temp ; //указатель для хранения результирующей матрицы
temp=new f l o a t ∗ [N ] ; //выделение памяти для хранения результирующей матрицы
f o r ( i =0; i temp [ i ]=new f l o a t [M] ;
f o r ( i =0; i f o r ( j =0; j temp [ i ] [ j ]=A[ i ] [ j ]+B [ i ] [ j ] ;
return temp ; //Возвращаем матрицу как двойной указатель
}
//функция вычисления разности двух матриц.
f l o a t ∗∗minus_m ( f l o a t ∗∗A, f l o a t ∗∗B, i n t N, i n t M)
{ i n t i , j ;
f l o a t ∗∗ temp ; //указатель для хранения результирующей матрицы
temp=new f l o a t ∗ [N ] ; //выделение памяти для хранения результирующей матрицы
f o r ( i =0; i temp [ i ]=new f l o a t [M] ;
f o r ( i =0; i f o r ( j =0; j temp [ i ] [ j ]=A[ i ] [ j ]−B [ i ] [ j ] ;
return temp ; //Возвращаем матрицу как двойной указатель
}
//функция вычисления произведения двух матриц.
f l o a t ∗∗ product_m ( f l o a t ∗∗A, f l o a t ∗∗B, i n t N, i n t M, i n t L)
{
i n t i , j , k ;
f l o a t ∗∗ temp ; //указатель для хранения результирующей матрицы
temp=new f l o a t ∗ [N ] ; //выделение памяти для хранения результирующей матрицы
f o r ( i =0; i temp [ i ]=new f l o a t [ L ] ;
//Вычисляем произведение двух матриц, последовательно формируя все элементы матрицы
f o r ( i =0; i f o r ( j =0; j //Элемент с индексами i, j — скалярное произведение i-й строки матрицы A
f o r ( temp [ i ] [ j ]=k =0;ktemp [ i ] [ j ]+=A[ i ] [ k ] ∗B [ k ] [ j ] ;
return temp ; //Возвращаем матрицу как двойной указатель
Программирование на языке С++ в среде Qt Creator


6.4. Решение некоторых задач линейной алгебры
199
}
//функция создаёт динамическую матрицу вещественных чисел размерности N на M ,
//в этой же функции осуществляется и ввод элементов матрицы
f l o a t ∗∗ create_m ( i n t N, i n t M)
{
i n t i , j ;
f l o a t ∗∗ temp ;
temp=new f l o a t ∗ [N ] ;
f o r ( i =0; i temp [ i ]=new f l o a t [M] ;
cout<<"Ввод матрицы\ n " ;
f o r ( i =0; i f o r ( j =0; j c i n >>temp [ i ] [ j ] ;
return temp ;
}
//функция осуществляет построчный вывод матрицы A(N,M)
void output_m ( f l o a t ∗∗A, i n t N, i n t M)
{
i n t i , j ;
//Цикл по строкам. По окончанию вывода всех элементов строки — переход на новую строку.
f o r ( i =0; i f o r ( j =0; j cout<}
i n t main ( i n t argc , char ∗∗ a r g v )
{
f l o a t ∗∗A, ∗∗B, ∗∗C, ∗∗D, ∗ ∗ r e s u l t ; //указатели для хранения исходных и
результирующей матриц
i n t N,M;
cout<<" N = " ; c i n >>N; //Ввод размерностей матрицы
cout<<" M = " ; c i n >>M;
//Выделение памяти и ввод матриц A, B, C, D, обращением к функции create_m.
A=create_m (N,M) ;
B=create_m (N,M) ;
C=create_m (M,N) ;
D=create_m (M,N) ;
//Вычисление результирующей матрицы.
r e s u l t=product_m ( product_m (sum_m(A, B, N,M) , minus_m (C, D,M,N) ,N,M,N) , product_m
(sum_m(A, B, N,M) , minus_m (C, D,M,N) ,N,M,N) ,N, N,N) ;
output_m ( r e s u l t , N,N) ; //Вывод результирующей матрицы.
return 0 ;
}
Далее без комментариев приведена программа решения задачи 6.9 с помощью
динамических матриц и обычных указателей
3
. Рекомендуем читателям самосто-
ятельно разобраться с этой версией программы.
#include 
using namespace s t d ;
f l o a t ∗sum_m( f l o a t ∗A, f l o a t ∗B, i n t N, i n t M)
{
i n t i , j ;
f l o a t ∗temp ;
temp=new f l o a t [N∗M] ;
f o r ( i =0; i f o r ( j =0; j temp [ i ∗M+j ]=A[ i ∗M+j ]+B [ i ∗M+j ] ;
return temp ;
3
Обращаем внимание читателя, что при использовании одинарных указателей обращение
к элементам матрицы происходит быстрее. При обработке матриц большой размерности (более
1000000 элементов) имеет смысл использовать именно одинарные указатели для хранения и
обработки матриц. Это позволит ускорить работу программ на 10-15%.
© 2015 Алексеев Е. Р., Злобин Г. Г., Костюк Д. А., Чеснокова О. В., Чмыхало А. С.


200
Download 5,27 Mb.

Do'stlaringiz bilan baham:
1   ...   80   81   82   83   84   85   86   87   ...   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