Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРАКТИКУМ_4.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
292.35 Кб
Скачать

21. Вычисление определителя матрицы второго порядка

#include "stdafx.h"

#include <iostream>

using namespace std;

#include <conio.h>

int main()

{

int A [2][2]={{1,2},{3,4}},i,det;

det=A[0][0]*A[1][1]-A[1][0]*A[0][1];

cout<<"Determinater is "<<det;

_getch();

return 0;

}

22. Вычисление определителя матрицы 3 - го порядка

#include "stdafx.h"

#include <iostream>

using namespace std;

#include "conio.h" // библиотека для функции _getch();

#define N 3

int Det(); // объявление функции

int B[N][N]; // назначение глобального массива данных

int main()

{

int A[N][N]={{1,2,3},{4,5,6},{7,8,9}};

int i,j,m,D,k,k1=0,AB,SUM=0;

//Разложение по нулевому столбцу, поиск миноров и алгебраических дополнений

while(k1<=N-1) // шагаем по строкам

{

//поиск миноров

k=0;

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

{

if (i==k1) continue; // пропускаем строку i

m=0;

for(j=1;j<=N-1;j++)

{

B[k][m]=A[i][j]; // строка минора

m++;

}

k++; // переход к следующей строке минора

}

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

{

cout<<"\n";

for(j=0;j<=N-2;j++) cout<<" "<<B[i][j];

}

D=1;

for(i=1;i<=k1;i++) D=D*(-1);

AB=A[k1][0]*D;

AB=AB*Det();

cout<<"\n Det = "<<Det();

SUM=SUM+AB;

cout<<"\n SUM = "<<SUM;

k1++; //номер вычеркиваемой строки

}

cout<<" \n Determinator = "<<SUM;

_getch();

return 0;

}

int Det()

{

int det;

det=B[0][0]*B[1][1]-B[1][0]*B[0][1];

return det;

}

23. Нахождение обратной перестановки и по ней циклической формы

Автор Уваров Е. ГИП-111

#include "stdafx.h"

#include <conio.h>

#include <iostream>

using namespace std;

#define SIZE 6

#define S 20 // максимальный размер циклической записи

int main()

{

char m1[SIZE] = {'a','b','c','d','e','f'}; // 1- строка символов

char m2[SIZE] = {'a','d','b','e','c','f'}; // 2- строка символов

char m11[SIZE] = {'a','b','c','d','e','f'};

// m11[] -массив задает порядок перстановки столбцов

int m[SIZE] = {-1,-1,-1,-1,-1,-1}; // инициализация рабочего массива

char m3[S]; // циклическая форма перестановки

char ch,x,y,z;

int i,j=0,k=0,t,ii=-1; // ii- индекс в массиве m3[]

// Построение обратной перестановки

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

{

ch=m1[i];

m1[i]=m2[i];

m2[i]=ch;

}

cout<<"\n Given m1 :"<<endl;

for(i = 0; i < SIZE; i++) cout<<m2[i]<<" ";

cout<<"\n Given m2 :"<<endl;

for(i = 0; i < SIZE; i++) cout<<m1[i]<<" ";

// перстанока столбцов в первоначальном порядке

for(j = 0; j < SIZE-1; j++) // j - индекс массива MAS_11[]

for(i=0;i<SIZE;i++) // индекс первой строки

{ if(m11[j]==m1[i]) // i-й столбец должен стать j- ым

{

ch=m1[i];

m1[i]=m1[j];

m1[j]=ch;

ch=m2[i];

m2[i]=m2[j];

m2[j]=ch;

}

}

cout<<"\n New m1 with old oder :"<<endl;

for(i = 0; i < SIZE; i++) cout<<m1[i]<<" ";

cout<<"\n New m2 :"<<endl;

for(i = 0; i < SIZE; i++) cout<<m2[i]<<" ";

cout<<endl;

// формированиециклическо формы перестановки

for (i=0;i<SIZE;i++) // i - индекс символа 1-й строки

{

z=m1[i];

x=z;

y=m2[i];

t=0;

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

if (i==m[j]) t=1; // поиск индекса i в m[]

if (t==1) continue; // переход к началу цикла и i++

j=0;

if ((x==y)&&(x!=0)) // единичный цикл

{

ii++;

m3[ii]='(';

ii++;

m3[ii]=x;

ii++;

m3[ii]=')';

}

// пробегаем массивы строк инабираем блок с начальным символом 'y'

while(z!=y) // собираем блок с начальным символом z

{

if (m1[j]==y)

{

m[k]=j; //формируем массив индексов символов блока

k++;

if (z==x)

{

ii++;

m3[ii]='('; // открываем блок цикла

}

ii++;

m3[ii]=x; // записываем символ в блок

x=y; // продолжаем набирать блок

y=m2[j];

j=0;

if (z==y) // нашли конец блока

{

ii++;

m3[ii]=x;

ii++;

m3[ii]=')';

}

}

j++;

if ((z==y)||(j>SIZE)) break;

}

}

cout<<"\n cycle form : \n";

for(i=0;i<=ii;i++) cout<<m3[i]<<" ";

getch();

return 0;

}