Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Реализация формулы...

Ответить
Настройки темы
C/C++ - Реализация формулы...

Аватара для ganselo

Старожил


Сообщения: 232
Благодарности: 90

Профиль | Сайт | Отправить PM | Цитировать


Изменения
Автор: ganselo
Дата: 07-01-2010
Дана матрица n*m
Код: Выделить весь код
#include <iostream>
#include <iomanip>
using namespace std;

template<class type>
void add(type *array[], int nRow, int nCol);
template<class type>
void print(type *array[], const int nRow, const int nCol);
int main()
{
    int nRow, nCol;
    cout << "Input nRow: ";
    cin >> nRow;
    cout << "Input nCol: ";
    cin >> nCol;
    int *a[nCol], *b[nCol];
    add(a, nRow, nCol);
    add(b, nRow, nCol);
    print(a, nRow, nCol);

    for(unsigned i = 0; i < nRow; i++)
        b[i][0] = a[i][0];              //Первый столбец новой матрицы идентичен первому
                                        //столбцу исходной
    for(unsigned i = 0; i < nRow; i++)
    {
        delete [] a[i];
        delete [] b[i];
    }
}

template<class type>
void add(type *array[], const int nRow, const int nCol)
{
    for(unsigned i = 0; i < nRow; i++)
        array[i] = new type[nCol];
    for(unsigned i = 0; i < nRow; i++)
    {
        for(unsigned j = 0; j < nCol; j++)
            cin >> array[i][j];
        cout << endl;
    }
}

template<class type>
void print(type *array[], const int nRow, const int nCol)
{
    for(unsigned i = 0; i < nRow; i++)
    {
        for(unsigned j = 0; j < nCol; j++)
        cout << setw(4) << array[i][j];
        cout << endl;
    }
}
Нужно ортогоналезировать данную матрицу.
Для этого нужно воспользоватся формулой(см. скрин).
Помогите реализовать данную формулу (т.н нужна функция аргументы которой будут: начальная матрица и матрица которая должна получится).
Заранее благодарен

Отправлено: 16:26, 15-01-2009

 

Аватара для ganselo

Старожил


Сообщения: 232
Благодарности: 90

Профиль | Сайт | Отправить PM | Цитировать


Вот, что у меня получилось:
Код: Выделить весь код
//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;
}

-------
К величайшему сожалению "история учит нас тому, что она ничему не учит".


Отправлено: 19:38, 20-01-2009 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Реализация формулы...

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Реализация доступа к интернет. zubkoff.s Microsoft Windows NT/2000/2003 24 01-02-2010 11:28
C/C++ - Реализация Zoom`а в Borland C++ Builder DaRiYs Программирование и базы данных 2 21-12-2009 02:12
Реализация конвейера на Си! NEED HELP! st031 Программирование в *nix 2 24-01-2009 10:57
Разное - Ситема терминалов (реализация) piling Microsoft Windows 2000/XP 2 13-02-2008 22:52
Как написать матем.формулы? naum7 Программное обеспечение Windows 10 01-12-2006 17:02




 
Переход