понимаю, могу показать , а препад говорит не правильно. да у меня не всё.
| Код | case 5: { DynamicArray<DynamicArray<float> > Main; \\создание динамического массива типа float; int K, L, Row, Col; \\создание переменных k, L, ROW, COL; AnsiString Str; \\ ? LARGE_INTEGER TimeStart, TimeEnd, Freq; \\ ? double WorkTime; \\ ? // Считывание матрицы Main.set_length(Ur + 1); \\? for(I = 1; I <= Ur; I++) { \\ для i=1,где i<=ur и увеличивается к след. эл. масс.; Main[I].set_length(Pr + 2); \\? for(J = 1; J <= Pr + 1; J++) { if (SG1->Cells[J - 1][I] == "") \\ если в массиве(матрице) пустой эл.; SG1->Cells[J - 1][I] = "0"; \\ если в массиве(матрице) эл.=0; try { \\то Main[I][J] = StrToFloat(SG1->Cells[J - 1][I]); \\матрица [i][j] конвертируется в дробное число; } catch(...) { \\ и т.д. SG1->Row = I; SG1->Col = J - 1; \\столбц переходит к следующему эл.; и выводится сообщение. MessageDlg("Неверное знач!", mtError, TMsgDlgButtons() << mbOK, 0); } } } QueryPerformanceFrequency(&Freq); \\ ? Row = 1; Col = 1; while (0 != 1) { \\ ? if (Row == Ur || Col == Pr + 1) break; if (Main[Row][Col] == 0) { \\ если матреца=0(т.е. определитель=0(решение матрицы методом Гаусса)) for(I = Row + 1; I <= Ur; I++) \\ для (I = Row + 1; I <= Ur; I++) ; if (Main[I][Col] != 0) { \\ если ? for(J=Col; J<=Pr+1; J++) { \\ для J=Col; Tmp=Main[I][J]; \\ Main[I][J] записывается в буферную переменную Tmp; Main[I][J]=Main[Row][J]; \\ главная матрица меняется на новую Main[Row][J]; Main[Row][J]=Tmp; \\ нновой матрице присваивается Tmp(значение новой матрицы); } break; } if (Main[Row][Col] == 0) { \\ теперь если Main[Row][Col]=0, то; Col++; \\ к следующему столбцу; continue; \\ и так до конца матрицы } } for(I = Row + 1; I <= Ur; I++) \\ для I = Row + 1; I <= Ur; if (Main[I][Col] != 0) { \\ если Main[I][Col] не равна 0;то Tmp = Main[I][Col] / Main[Row][Col]; \\ Main[I][Col] меняются местами Main[Row][Col] и заносится в TMP; Main[I][Col] = 0; \\ Main[I][Col] обнуляется (все эл. = 0); for(J = Col + 1; J <= Pr + 1; J++) \\ для J = Col + 1; J <= Pr + 1; Main[I][J] -= Main[Row][J] * Tmp; \\ ? } Row++; Col++; } Row = 0; Col = 0; for(I = 1; I <= Ur; I++) { for(J = 1; J <= Pr; J++) if (Main[I][J] != 0) { Row++; break; } for(J = 1; J <= Pr + 1; J++) if (Main[I][J] != 0) { \\ если новая матрица не =0 ; то Col++; \\ к след. break; } }
Последний раз редактировалось Stilet; Сегодня в 17:34. Сегодня, 17:23 #12 АлександрАврел Пользователь Регистрация: 20.06.2012 Сообщений: 10 Репутация: 10
2 часть Код:
if (Row < Col) { MessageDlg("не имеет решений!", mtInformation, TMsgDlgButtons() << mbOK, 0); return; } for(I = Ur; I >= 1; I--) \\ for(J = 1; J <= Pr; J++) if (Main[I][J] != 0) { Tmp = J; \\то столбец заносится в буф. пер. Tmp; for(J = Tmp + 1; J <= Pr + 1; J++) \\? Main[I][J] = Main[I][J] / Main[I][Tmp]; \\ Main[I][J] и Main[I][Tmp] меняются местами и Main[I][Tmp] заносится в Tmp Main[I][Tmp] = 1; \\? if (I != Ur) \\? for(J = Tmp + 1; J <= Pr; J++) \\? if (Main[I][J] != 0) если матрица не =0; то for(K = I + 1; K <= Ur; K++) \\ K = I + 1; K <= Ur; if (Main[K][J] == 1) { \\если эл. новой матрица =1, то Tmp = 0; буф. пер. обнуляется; for(L = 1; L <= J - 1; L++) \\ а для L = 1; L <= J - 1; if (Main[K][L] != 0) { \\ если Main[K][L] не = 0,то Tmp = 1; \\буф. пер. =1; break; \\ конец цикла; } if (Tmp == 0) { \\ если Tmp=0 то for(L = J + 1; L <= Pr + 1; L++) \\ L = J + 1; L <= Pr + 1; Main[I][L] -= Main[K][L] * Main[I][J]; \\? Main[I][J] = 0; \\ матрица =0; break; } } break; }
|
|