|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Реализация формулы... |
|
C/C++ - Реализация формулы...
|
Старожил Сообщения: 232 |
Профиль | Сайт | Отправить PM | Цитировать
Дана матрица 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 |
Старожил Сообщения: 232
|
Профиль | Сайт | Отправить 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 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Реализация доступа к интернет. | 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 |
|