Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Двойные указатели для работы с динамическими матрицами

Читайте также:
  1. I. Задания для самостоятельной работы
  2. I. ОБЩАЯ ХАРАКТЕРИСТИКА РАБОТЫ
  3. II. Завершение работы с Электронным дневником.
  4. II. Организация и порядок работы комиссии по трудовым спорам
  5. II. Организация и порядок работы комиссии по трудовым спорам
  6. II. Организация и порядок работы комиссии по трудовым спорам
  7. V. Резерв на непредусмотренные работы

Рассмотрим фрагмент программы.

int main()

{

int N,M;

float **a;

a=new float *[N];

}

С помощью оператора new создан массив из n элементов. Массив указателей на float, каждый элемент которого, является адресом, в котором хранится указатель.

Для определения значения этого указателя организуем цикл от 0 до N-1, в котором каждый указатель будет адресовать участок памяти, в котором хранится m элементов типа float.

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

a[i]=new float(M);

Определен массив N указателей, каждый из которых адресует массив из M вещественных чисел (типа float). Фактически создана динамическая матрица размера N на M. Обращение к элементу динамической матрицы идет так же, как и к элементу статической матрицы: a[i][j].

ЗАДАЧА 6. Написать программу умножения двух матриц вещественных чисел A(N,M) и B(M,K).

Пусть нужно умножить матрицы:

.

По правилу «строка на столбец», получим:

В общем виде формула имеет вид:

, где i = 0, N-1 и j = 0, L-1.

Проводить операцию умножения можно, если количество строк левой матрицы совпадает с количеством столбцов правой. Кроме того, A ´ B ¹ B ´ A.

 

#include <iostream>

int main()

{

int i,j,k,N,L,M;

double **a, **b, **c;

cout<<"N="; cin>>N;

cout<<"M="; cin>>M;

cout<<"L="; cin>>L;

a=new double *[N];

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

a[i]=new double[M];

b=new double *[M];

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

b[i]=new double[L];

c=new double *[N];

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

c[i]=new double[L];

cout<<"Input Matrix A"<<endl;

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

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

cin>>a[i][j];

cout<<"Input Matrix B"<<endl;

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

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

cin>>b[i][j];

//Умножение матриц A и B.

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

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

for(c[i][j]=0,k=0;k<M;k++)

c[i][j]+=a[i][k]*b[k][j];

cout<<"Matrix C"<<endl;

for(i=0;i<N;cout<<endl,i++)

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

cout<<c[i][j]<<"\t";

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

delete [] a[i];

delete [] a;

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

delete [] b[i];

delete [] b;

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

delete [] c[i];

delete [] c;

}


Дата добавления: 2015-08-27; просмотров: 67 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Динамические матрицы| Сведения о муниципальном заказчике

mybiblioteka.su - 2015-2024 год. (0.006 сек.)