Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2008, 16:57   #1
{[HelPix]}
Новичок
Джуниор
 
Регистрация: 12.05.2008
Сообщений: 1
Вопрос C++ Builder 6! Задача! помогите Разобраться что к чему

Ребята - у меня вот программка есть, сразу говорю - писал ее не я! но проблема вот в чем - не могу разобраться я в ней! раскройте мне тайны проги, прокомментируйте плиз! у вас это займет не много времени! зарание спасибо! на всякий случай - задание для проги - Написать функцию, которая определяет минимальный по модулю элемент в каждой строке квадратной матрицы и осуществляет его перестановку с первым элементом соответствующей строки. вот код:
Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 int z, p, n = StringGrid1->ColCount;
 int *mas = new int[n];

 for (int a = 0; a < StringGrid1->RowCount; a ++)
   {
      for (int b = 0; b < n; b ++) mas[b] = StrToInt(StringGrid1->Cells[b][a]);
      p = Min(mas, n);
      StringGrid2->Cells[0][a] = mas[p];
      z = StrToInt(StringGrid1->Cells[0][a]);
      StringGrid1->Cells[0][a] = mas[p];
      StringGrid1->Cells[p][a] = z;
   }

 delete[] mas;
}
//---------------------------------------------------------------------------
int TForm1::Min(int *ar, int N)
{
   int min = 10000, pos;

   for (int a = 0; a < N; a ++) if (abs(ar[a]) < min) { min = ar[a]; pos = a; }

   return pos;
}
//---------------------------------------------------------------------------
{[HelPix]} вне форума Ответить с цитированием
Старый 12.05.2008, 19:18   #2
Greblin
Меркантильный кю
Участник клуба
 
Аватар для Greblin
 
Регистрация: 02.02.2008
Сообщений: 1,001
По умолчанию

Код:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 int z, p, n = StringGrid1->ColCount;
//инициализруем 3 целочисленных переменных, в n заносим колво колонок в таблице
 int *mas = new int[n];
//создаём новый массив размерности n

 for (int a = 0; a < StringGrid1->RowCount; a ++)
 //бежим по строкам таблицы
   {
      for (int b = 0; b < n; b ++) mas[b] = StrToInt(StringGrid1->Cells[b][a]);
      //заполняем массив текущей строкой из таблицы, переводя символьные данные из ячеек в числа
      p = Min(mas, n);
      //находим позицию минимального элемента
      
      //StringGrid2->Cells[0][a] = mas[p];
     //вот эта строчка не нужна, иначе будет ошибка

      z = StrToInt(StringGrid1->Cells[0][a]);
      //заносим в буферную переменную значение первого элемента
      StringGrid1->Cells[0][a] = IntToStr(mas[p]);
      //заносим в первый элемент минимальный, надо преобразование в строку!
      StringGrid1->Cells[p][a] = IntToStr(z);
      //заносим в бывший минимальный бывший первый
   }

 delete[] mas;
//удаляем массив
}
//---------------------------------------------------------------------------
int TForm1::Min(int *ar, int N)
{
   int min = 10000, pos;
   //присваиваем минимуму число, меньше которого нет  по условию 
   for (int a = 0; a < N; a++) 
    //бежим по массиву 
    if (abs(ar[a]) < min) 
      {
      //если очередной элемент меньше минимума 
      min = ar[a];  
      pos = a;
     //то переприсваиваем позицию и минимум
      }

   return pos;
//возвращаем найденную позицию
}
//---------------------------------------------------------------------------
Хотя логичней и идеологически правильней переписать функцию Min так:
Код:
int TForm1::Min(int *ar, int N)
{
   int min = ar[0], pos=0;
   //присваиваем минимуму значение первого элемента, позицию соответственно 0
   for (int a = 1; a < N; a++) 
    //бежим по массиву 
    if (ar[a] < min) 
      {
      //если очередной элемент меньше минимума 
      min = ar[a];  
      pos = a;
     //то переприсваиваем позицию и минимум
      }

   return pos;
//возвращаем найденную позицию
}
Росли вроде умными, выросли дурнями... (c)А.Васильев
Greblin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача под windows,помогите написать.Надо написать на Borland C++Builder 6. eddddii Помощь студентам 9 23.05.2008 17:04
как обращатся к чему либо WOLFak Общие вопросы Delphi 3 13.02.2008 06:06
К чему относится драйв, к флоппику, харду или сидирому dimfil Win Api 1 27.11.2007 13:33
Помогите разобраться в Builder 6 Kocapb C++ Builder 1 02.11.2007 23:58