Вот, что у меня получилось:
Код:
//12.cpp
#include <iostream>
#include <iomanip>
#include <time.h>
#include <conio.h>
#include "rus.h"
#include "12.h"
using namespace std;
int main()
{
char choice;
int n, m;
float **a, **b;
cout << Rus("Введите количество векторов: ");
cin >> n;
cout << Rus("Введите размерность пространства: ");
cin >> m;
a = createArray(a, n, m);
b = createArray(b, n, m);
while(choice != 'q' && choice != 'y' && choice != 'n')
{
cout << Rus("Ввести массив с клавиатуры? (y/n): ");
cin >> choice;
switch(choice)
{
case 'y':
cout << endl << Rus("Введите вектора (строки):") << endl;
add(a, n, m, true);
print(a, n, m);
ortog(a, b, n, m);
break;
case 'n':
add(a, n, m, false);
print(a, n, m);
ortog(a, b, n, m);
break;
case 'q':
cout << Rus("Выход.") << endl;
break;
default:
cout << Rus("Не верный выбор.") << endl << endl;
}
}
deleteArray(a, b, n);
getch();
}
//----------------------------------------------------------------------------------------------------
//12.h
float **createArray(float **array, const int n, const int m)
{
array = (float**)calloc(n, sizeof(float*));
for(unsigned i = 0; i < n; i++)
array[i] = (float*)calloc(m, sizeof(float));
return array;
}
void deleteArray(float **a, float **b, const int n)
{
for(unsigned i = 0; i < n; i++)
{
free(a[i]);
free(b[i]);
}
free(a);
free(b);
}
void add(float **a, const int n, const int m, bool var)
{
if (var == true)
{
for(unsigned i = 0; i < n; i++)
{
for(unsigned j = 0; j < m; j++)
cin >> a[i][j];
}
}
else
{
srand(time(NULL));
for(unsigned i = 0; i < n; i++)
{
for(unsigned j = 0; j < m; j++)
a[i][j] = rand()%10;
}
}
}
void print(float **array, const int n, const int m)
{
cout << endl;
for(unsigned i = 0; i < n; i++)
{
for(unsigned j = 0; j < m; j++)
printf("%6.1f", array[i][j]);
cout << endl;
}
cout << endl << endl;
}
void prirav(float *a,float *b,int m)
{
for (unsigned i = 0; i < m; i++)
a[i]=b[i];
}
float scalar(float *a, float *b, int m)
{
float t=0;
for (unsigned i = 0; i < m; i++)
t=t+a[i]*b[i];
return t;
}
float* vectch(float *a, float c, int m, float *f)
{
for (unsigned i = 0; i < m; i++)
f[i]=a[i]*c;
return f;
}
float* sloj(float *a, float*f, int m)
{
for (unsigned i = 0; i < m; i++)
f[i]=f[i]+a[i];
return f;
}
float koef(float *a, float *b, int m)
{
float c = 0;
if(scalar(b, b, m) != 0)
{
c=-scalar(a, b, m)/scalar(b, b, m);
cout << Rus("Коэффициент = ") << setprecision(3) << c << endl;
return c;
}
else
{
c = 0;
cout << Rus("Коэффициент = ") << setprecision(3) << c << endl;
return c;
}
}
void ort(float*a, float *b, int m, float *f)
{
float c=0;
c=koef(a, b, m);
prirav(f,vectch(b, c, m, f),m);
}
void ortog (float **a, float **b, int n, int m)
{
float *f;
f = new float[m];
for (unsigned i = 0; i < m; i++)
b[0][i]=a[0][i];
for (unsigned i=1; i<n; i++)
{
for (unsigned j=0; j<i; j++)
{
ort(a[i], b[j], m, f);
prirav(b[i],sloj(b[i], f, m),m);
}
prirav(b[i],sloj(a[i], b[i], m),m);
print(b, i+1, m);
}
cout << "***********ANSWER*****************" << endl;
print(b, n, m);
delete [] f;
}
//---------------------------------------------------------------------------------------------------
//rus.h
#include <windows.h>
#include <string>
using namespace std;
char ss[200];
char *Rus(const char *in, char *out = ss)
{
if(CharToOem(in, out))
return out;
else
return 0;
}
char *Rus(const string in, char *out = ss)
{
if(CharToOem(in.c_str(), out)) return out;
else return 0;
}
|