Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Комментарии к задаче. 
:(
    Опции темы
avrel
Дата 3.9.2012, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 28.6.2011

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



Здравствуйте, помогите, пожалуйста, понять обозначение каждой строки.
Т.е. прокомментируйте каждую строку. Спасибо.


Код

 case 5: {
      DynamicArray<DynamicArray<float> > Main;
      int K, L, Row, Col;
      AnsiString Str;
      LARGE_INTEGER TimeStart, TimeEnd, Freq;
      double WorkTime;
      // Считывание матрицы
      Main.set_length(Ur + 1);
      for(I = 1; I <= Ur; I++) {
         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";
            try {
               Main[I][J] = StrToFloat(SG1->Cells[J - 1][I]);
               }
            catch(...) {
               SG1->Row = I;
               SG1->Col = J - 1;
               MessageDlg("Неверное знач!", mtError, TMsgDlgButtons() << mbOK, 0);
               return;
               }
            }
         }
      QueryPerformanceFrequency(&Freq);
      QueryPerformanceCounter(&TimeStart);
      Row = 1;
      Col = 1;
      while (0 != 1) {
         if (Row == Ur || Col == Pr + 1) break;
         if (Main[Row][Col] == 0) {
            for(I = Row + 1; I <= Ur; I++)
               if (Main[I][Col] != 0) {
                  for(J=Col; J<=Pr+1; J++) {
                     Tmp=Main[I][J];
                     Main[I][J]=Main[Row][J];
                     Main[Row][J]=Tmp;
                     }
                  break;
                  }
            if (Main[Row][Col] == 0) {
               Col++;
               continue;
               }
            }
         for(I = Row + 1; I <= Ur; I++)
            if (Main[I][Col] != 0) {
               Tmp = Main[I][Col] / Main[Row][Col];
               Main[I][Col] = 0;
               for(J = Col + 1; J <= Pr + 1; J++)
                  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) {
               Col++;
               break;
               }
         }
      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;
               for(J = Tmp + 1; J <= Pr + 1; J++)
                  Main[I][J] = Main[I][J] / Main[I][Tmp];
               Main[I][Tmp] = 1;
               if (I != Ur)
                  for(J = Tmp + 1; J <= Pr; J++)
                     if (Main[I][J] != 0)
                        for(K = I + 1; K <= Ur; K++)
                           if (Main[K][J] == 1) {
                              Tmp = 0;
                              for(L = 1; L <= J - 1; L++)
                                 if (Main[K][L] != 0) {
                                    Tmp = 1;
                                    break;
                                    }
                              if (Tmp == 0) {
                                 for(L = J + 1; L <= Pr + 1; L++)
                                    Main[I][L] -= Main[K][L] * Main[I][J];
                                 Main[I][J] = 0;
                                 break;
                                 }
                              }
               break;
               }
      QueryPerformanceCounter(&TimeEnd);
      for(I = 1; I <= Ur; I++)
         for(J = 1; J <= Pr; J++)
            if (Main[I][J] == 1) {
               Str += "x" + IntToStr(J) + " = ";
               for(J = J + 1; J <= Pr + 1; J++)
                  if (J != Pr + 1) {
                     if (Main[I][J] != 0)
                        if (Main[I][J] * (-1) > 0)
                           Str += " + " + FloatToStr(RoundTo(Main[I][J] * (-1), -6)) + "x" + IntToStr(J);
                        else
                           Str += " - " + FloatToStr(RoundTo(Main[I][J], -6)) + "x" + IntToStr(J);
                     }
                  else
                     if (Main[I][J] != 0)
                        if (Main[I][J] > 0)
                           Str += " + " + FloatToStr(RoundTo(Main[I][J], -6));
                        else
                           Str += " - " + FloatToStr(RoundTo(Main[I][J] * (-1), -6));
               if (Str != "") {
                  F3->M1->Lines->Add(Str);
                  Str = "";
                  }
                }
      Tmp = 0;
      for(I = 1; I <= Ur; I++)
         for(J = 1; J <= Pr; J++)
            Tmp += Main[I][J];
      if (Tmp == Pr)
         F3->M1->Lines->Insert(0, "имеет ед. решение:");
      else
         F3->M1->Lines->Insert(0, "имеет мн. решений:");     
      F3->ShowModal();
      }
   break;


Это сообщение отредактировал(а) avrel - 3.9.2012, 13:20
PM MAIL   Вверх
_Dimon_
Дата 3.9.2012, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Ты бы мог хоть с чего нибудь начать, а то даешь огромный код и просишь прокоментировать его. 
Неужели ни одной строчки не понимаешь?
PM MAIL   Вверх
avrel
Дата 3.9.2012, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 28.6.2011

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



понимаю, могу показать , а препад говорит не правильно. да у меня не всё.
Код

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;
               }

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




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


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

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