![]() |
Модераторы: Alx, Fixin |
![]() ![]() ![]() |
|
ivanivanovich |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 15.10.2005 Репутация: нет Всего: нет |
Вот интересная задача по программированию на СИ. Мною представлен алгоритм приведения матрицы к треугольному виду методом Гауса. Там заложена изначально ошибка в результате которой алгоритм работает не всегда правильно.
Ниже привожу текст прогги, написанной на Turbo C++. #include <iostream.h> #include <fstream.h> #include <conio.h> ofstream Output("OutMatrix.txt"); ifstream Input("InMatrix.txt"); class Matrix { public: Matrix (); ~Matrix () {delete [] MatrixField;} void Print(); void MatrixTransformation(); void PrintInFile(); void MatrixInput(); void RandomMatrix(); private: int **MatrixField; int ColSize; int RowSize; }; Matrix::Matrix () { Input >> ColSize; Input >> RowSize; MatrixField = new int *[ColSize]; for (int i=0; i<=ColSize; i++) MatrixField[i]=new int [RowSize]; for (i=1; i<=ColSize; i++) for (int j=1; j<=RowSize; j++) Input >> MatrixField[i][j]; }; int FindStr (int **a, int ColSize, int RowSize, int Numbers_0) { int Sum_0, j; for (int i=Numbers_0+1; i<=ColSize; i++) { j=1; Sum_0 = 0; while ( (a[i][j] == 0) && (j <= RowSize) ) { Sum_0+=1; j++; } if (Sum_0 == Numbers_0) return i; } return -1; }; void StrExchange (int **a, int RowSize, int Str_1, int Str_2) { int tmp; for (int i=1; i<=RowSize; i++) { tmp=a[Str_1][i]; a[Str_1][i]=a[Str_2][i]; a[Str_2][i]=tmp; } }; void Trans_1 (int **a, int RowSize, int StrNumber) { for (int i=1; i<=RowSize; i++) a[StrNumber][i] *= -1; }; void Transformation (int **a, int ColSize, int RowSize, int StrNumber) { int k1,k2; int i,j; k2 = a[StrNumber][StrNumber]; if (k2 < 0) { k2 *= -1; Trans_1 (a, RowSize, StrNumber); } for (i=StrNumber+1; i<=ColSize; i++) { k1 = a[i][StrNumber]; if (k1 < 0) { k1 *= -1; Trans_1 (a, RowSize, i); } if (k1==0) continue; for (j=1; j<=RowSize; j++) a[i][j] = a[i][j]*k2 - a[StrNumber][j]*k1; } }; void StepPrint (int **a, int Step, int ColSize, int RowSize) { cout<<"Step is "<<Step<<endl; cout<<endl; for (int i=1; i<=ColSize; i++) { for (int j=1; j<=RowSize; j++) cout<<a[i][j]<<" "; cout<<endl; } cout<<endl; cout<<endl; cout<<endl; }; void StepPrintInFile (int **a, int Step, int ColSize, int RowSize) { Output<<"Step is "<<Step<<endl; Output<<endl; for (int i=1; i<=ColSize; i++) { for (int j=1; j<=RowSize; j++) Output<<a[i][j]<<" "; Output<<endl; } Output<<endl; Output<<endl; Output<<endl; }; void Matrix::Print () { cout<<"The first matrix..."<<endl; cout<<endl; for (int i=1; i<=ColSize; i++) { for (int j=1; j<=RowSize; j++) cout<<MatrixField[i][j]<<" "; cout<<endl; } cout<<endl; cout<<endl; cout<<endl; }; void Matrix::PrintInFile () { Output<<"The first matrix..."<<endl; Output<<endl; for (int i=1; i<=ColSize; i++) { for (int j=1; j<=RowSize; j++) Output<<MatrixField[i][j]<<" "; Output<<endl; } Output<<endl; Output<<endl; Output<<endl; }; void Matrix::MatrixTransformation () { int StrNumber; int NumOfSteps; if (ColSize <= RowSize) NumOfSteps=ColSize; else NumOfSteps=RowSize; int k; for (int i=1; i<=NumOfSteps; i++) { StrNumber = FindStr (MatrixField, ColSize, RowSize, i-1); if (StrNumber == -1) continue; if (StrNumber != i) StrExchange (MatrixField, RowSize, i, StrNumber); Transformation (MatrixField, ColSize, RowSize, i); StepPrint (MatrixField, i, ColSize, RowSize); StepPrintInFile (MatrixField, i, ColSize, RowSize); } }; void main () { clrscr (); Matrix a; a.Print(); a.PrintInFile(); a.MatrixTransformation(); getch (); }; |
|||
|
||||
maxim1000 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 2 Всего: 110 |
специально для подобных случаев есть кнопка "Код" смотреть значительно удобнее... Это сообщение отредактировал(а) maxim1000 - 19.10.2005, 16:52 -------------------- qqq |
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Интересные и занимательные задачи по программированию | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |