Автор работы: Пользователь скрыл имя, 26 Октября 2010 в 22:52, Не определен
Курсовая работа
printf("\n\
GaussMethod(
printf("\n\
getch();
}
if (Action == 's') {
unsigned int NumRow, NumCol;
char Size[255];
for (;;) {
printf
scanf(
if (SizeFormatCheck(&NumRow, &NumCol, Size)) {break;}
}
if (NumRow != NumCol - 1) {
Alert(
getch(
return 0;
}
system("
printf("\
float **Matrix = CreateMatrix(NumRow,
NumCol);
if (Matrix == NULL) {
Alert(
DelLas
Action = getch();
if (Action == 'h') {
}
return 0;
}
system("
printf("\n\
FullMatrix(
system("cls"
system("
Header("Меню >> Решение СЛУ методом Гаусса >> II", "=", 42);
Gauss(
float *Result = (float*)malloc(sizeof(float)*(
switch(
case 0:
case 1: printf("\n\nТак как в результате преобразований все элементы одной из строк\nматрицы стали равны 0, а свободный член соответствующей строки\nнет, то система не совместна.\n\nОтвет: система линейный уравнений не совместна."); getch(); break;
case 2: printf("\n\nТак как в результате преобразований все элементы одной из строк\nматрицы стали равны 0 (в том числе и свободный член\nсоответствующей строки), то система имеет бесконечное множество решений.\n\n\n\nОтвет: система линейный уравнений имеет бесконечное множество решений"); getch(); break;
case 3: Error("\n\nОШИБКА: Не удалось выделить память под хранение результата!\nНажмите любую клавишу..."); break;
}
DelMatrix(
}
}
return 0;
}
int SizeFormatCheck(unsigned int *NumRow, unsigned int *NumCol, char String[]){
int StrLength = strlen(String) - 1;
int NumSymbols = 0;
int Degree = 1;
int NowNumber = 0;
int Length = 0;
for
(int i = StrLength; i > -1; i--) {
if (((i == StrLength || i == 0) &&
String[i] == '*') || (i == 0 && NumSymbols == 0)) {
return(
}
if (String[i] == '*') {
NumSymbols++
*NumCol = NowNumber;
NowNumber = 0;
Length = 0;
Degree = 1;
continue;
}
if (!DigitCheck(&String[i]) || NumSymbols > 1) {
return(
}
if (Length == 9 && ((int)String[i] - 48 > 2 || NowNumber > 147483647)) {
return(
}
NowNumber += ((int)String[i] - 48)*Degree;
Degree *= 10;
Length++;
}
*NumRow = NowNumber;
return 1;
}
int DigitCheck(char *Symbol){
char Permissible[] = "0123456789";
for (int i = 0; i < 10; i++) {
if (Symbol[0] == Permissible[i]) {return 1;}
}
return 0;
}
int ElementsCheck(float *Element, char String[]){
int StrLength = strlen(String);
int NumSymbols = 0;
int Degree = 10;
float Number = 0;
float Sign = 1.0;
for (int i = 0; i < StrLength; i++) {
if (String[i] == ',' && (i
== 0 || i == StrLength - 1)) {
return(
}
if (String[i] == ',') {
NumSymbols++
continue;
}
if (i == 0 && String[0] ==
'-') {
Sign = -1.0;
continue;
}
if (NumSymbols > 1 || !DigitCheck(&String[i])) {
return(
}
if (NumSymbols == 0) {
Number = Number*10 + ((int)String[i] - 48);
} else {
Number += ((float)String[i] - 48)/Degree;
Degree *= 10;
}
if (NumSymbols == 0 && String[i] != ',' && abs(Number) > 1073741823) {
return(
}
}
*Element = Sign*Number;
return 1;
}
int Gauss(float **Matrix, int NumRow, int NumCol) {
printf("\n\nШаг 0 (исходная матрица):\n\n");
PrintMatrix(Matrix, NumRow, NumCol);
float Multiplier;
for (int i = 0; i < NumCol - 1; i++) {
printf("\n\nШаг %
if (!ChangeStrings(Matrix, NumRow, NumCol, i)) {
printf("В матрице, полученной на предыдущем шаге, элементы %d-го столбца,\nначиная с %d-ой строки равны 0. Переходим к следующему шагу.", i + 1,i + 1);
continue;
}
for (int j = i + 1; j < NumRow;
j++) {
Multiplier = -1*Matrix[j][i]/Matrix[i][i];
for (int k = i; k < NumCol; k++) {
Matrix
}
}
PrintMatrix(
}
return 0;
}
int ChangeStrings(float **Matrix, int NumRow, int NumCol, int NowI) {
if (Matrix[NowI][NowI] != 0) {return 1;}
float Element;
for (int i = NowI; i < NumRow; i++) {
if (Matrix[i][NowI] != 0) {
for (int j = NowI; j < NumCol; j++) {
Elemen
Matrix
Matrix
}
printf("В матрице, полученной на предыдущем шаге, меняем местами строки %d и %d: \n\n", NowI + 1, i + 1);
return 1;
}
}
return 0;
}
int ReverseGauss(float **Matrix, int NumRow, int NumCol, float *Result) {
int NumNil, i, j;
for (i = 0; i < NumCol - 1; i++) {
NumNil = 0;
for (j = 0; j < NumCol - 1; j++) {
if (abs(Matrix[i][j]) < 1e-5) {NumNil++;}
}
if (NumNil == NumCol - 1 && abs(Matrix[i][NumCol - 1]) > 1e-5) {return 1;}
if (NumNil == NumCol - 1 && abs(Matrix[i][NumCol - 1]) < 1e-5) {return 2;}
}
if (Result == NULL) {return 3;}
float Summ;
for (i = NumCol - 2; i > -1; i--) {
Summ = Matrix[i][NumCol - 1];
for (j = NumCol - 2; j > i; j--) {
Summ -= Result[j]*Matrix[i][j];
}
Result[i] = Summ/Matrix[i][i];