Модераторы: Alx, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Прикладное программирование, прикладная задача интересного содержания 
:(
    Опции темы
ivanivanovich
Дата 19.10.2005, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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 ();
};




PM MAIL   Вверх
maxim1000
Дата 19.10.2005, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 2
Всего: 110




специально для подобных случаев есть кнопка "Код"
смотреть значительно удобнее...

Это сообщение отредактировал(а) maxim1000 - 19.10.2005, 16:52


--------------------
qqq
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Интересные и занимательные задачи по программированию | Следующая тема »


 




[ Время генерации скрипта: 0.1050 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.