Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Kursovaya_po_EVM (2).docx
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
83.29 Кб
Скачать

2.10 Функция для перестановки элементов матрицы

void diag(double** a,int n)

{int i,j,k=0,z=n*n;

double* p,l;

p=new double [z];

if(p==NULL){cout<<"\n Не хватает оперативнйо памяти";

exit(1);

}

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

{for(j=0;j<n;j++)

{p[k]=a[i][j];

k++;

}

}

for(k=0;k<z-1;k++)

{for(j=k+1;j<z;j++)

{if(p[k]<p[j]){l=p[k];

p[k]=p[j];

p[j]=l;

}

}

}

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

a[i][i]=p[i];

}

2.11 Блок- схема для главной функции

double **a – Матрица А

ifstream f-поток чтения из файла

ofstream f1 -поток записи в файл

int n=5;

char str[40],str2[40]- массивы для имени файла

Ввод имени файла для чтения

a=inputmf(f,n,str)

outputm(a,n)

Ввод имени файла для записи

outputmf(f1,a,n,str2)

z=otr(a,n)

diag(a,n)

outputm(a,n)

Ввод имени файла для записи

outputmf(f1,a,n,str2)

2.12 Листинг программы

#include <iostream>

#include <iomanip>

#include <fstream>

#include <cstdlib>

#include <cstddef>

using namespace std;

//Прототип функции для чтения матрицы из файла

double ** inputmf(ifstream &f,int n, char s[40]);

//Прототип функции для записи матрицы в файл

void outputmf(ofstream &f,double **a, int n, char s[40]);

//Прототип функции для вывода матрицы на монитор

void outputm(double **a, int n);

//Прототип функции для преобразования матрицы

void diag(double** a,int n);

//Прототип функции для поиска первой строки, не содержащей ни одного положительного элемента

int otr(double** a,int n);

void main()

{setlocale (LC_ALL,"Russian");

double **a;

ifstream f;

ofstream f1;

int n=5,z;

char str[40],str2[40];

cout<<"\n Ввести имя файла для чтения: \n";

cin>>str;

a=inputmf(f,n,str);

outputm(a,n);

cout<<"\n Введите имя файла для записи матрицы:\n";

cin>>str2;

outputmf(f1,a,n,str2);

z=otr(a,n);

diag(a,n);

cout<<"\n Измененная матрица= \n";

outputm(a,n);

cout<<"\n Введите имя файла для записи измененной матрицы:\n";

cin>>str2;

outputmf(f1,a,n,str2);

cout<<endl;

}

double** inputmf(ifstream &f,int n, char s[40])

{int i,j;

double **a;

a=new double *[n];

if(a==NULL){cout<<"\n Не хватает оперативной памяти под строки";

exit(1);

}

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

{a[i]=new double[n];

if(a[i]==NULL){cout<<"\n Не хватает оперативнйо памяти под столбцы";

exit(1);

}

}

f.open (s);

if (f.fail()) {cout<<"\n Ошибка открытия файла";

exit(1);

}

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

{for(j=0;j<n;j++)

f>>a[i][j];

}

f.close();

return a;

}

void outputmf(ofstream &f,double **a, int n, char s[40])

{int i,j;

f.open(s);

if (f.fail()) {cout<<"\n Ошибка открытия файла";

exit(1);

}

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

{f<<endl;

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

f<<setw(10)<<a[i][j];

}

f.close();

}

void outputm(double **a, int n)

{int i,j;

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

{cout<<endl;

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

cout<<setw(10)<<a[i][j];

}

}

void diag(double** a,int n)

{int i,j,k=0,z=n*n;

double* p,l;

p=new double [z];

if(p==NULL){cout<<"\n Не хватает оперативнйо памяти";

exit(1);

}

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

{for(j=0;j<n;j++)

{p[k]=a[i][j];

k++;

}

}

for(k=0;k<z-1;k++)

{for(j=k+1;j<z;j++)

{if(p[k]<p[j]){l=p[k];

p[k]=p[j];

p[j]=l;

}

}

}

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

a[i][i]=p[i];

}

int otr(double** a,int n)

{int i,j,o=0;

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

{for(j=0;j<n;j++)

{if (a[i][j]>=0) break;

if (j==n-1){cout<<"\n Первая строка, все элементы которой отритцательны: "<<i<<"\n";

goto o;

}

}

}

cout<<"\n Строки со всеми отритцательными элементами нет\n";

o:return i;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]