Я не могу получить код для разделения и сравнения данных массива - PullRequest
0 голосов
/ 29 ноября 2011

У меня есть входной файл fstream, который содержит [N] строк или элементов.Я написал код, чтобы решить, какие элементы являются треугольниками, а какие прямоугольниками, а какие кругами.Я должен выделить только элементы треугольника и затем сравнить их, чтобы увидеть, равны ли они +/- 0,1 площади всех остальных элементов треугольника.Затем я должен указать равные пары элементов в виде заглавных букв.

Вот мой код, но он работает неправильно.Он выводит L & L, что неверно.Должно быть написано E & L, потому что два идентичных треугольника в моем массиве находятся на строках 5 и 12, а не 12 и 12.Как мне это исправить?

   int ItmM = 0;
   ItmN = 0;
   int j = 0;

   for (int i=0; i<M; i++)
   {
     if (btype[i] == Triangles)
     {
       TA[i] = (0.5 * (D[i] * E[i]));

       for (int j=0; j<i; j++)
       {
         if (TA[i] - 0.1 < TA[j] && TA[j] < TA[i] + 0.1)
         {
           TA[j] = TA[i];
           ItmM = i;
           ItmN = j;

   cout << "4. Triangular blocks that are the same size = "
        << (char)('A' + ItmM) << "&" << (char)('A' + ItmM)
        << endl;

         }
       }
     }
   }

Я дважды редактировал приведенный выше код.Это все еще выводит L & L.Должно быть E & L, (5 & 12)

Ответы [ 4 ]

3 голосов
/ 29 ноября 2011

Когда вы делаете TriangleAreaE = TrangleArea[j], а j всегда равно 0, вы сравниваете каждый треугольник с первым.Пятый и двенадцатый никогда не сравниваются.

Вы должны использовать вложенный цикл для сравнения каждой пары треугольников:

for (int i=0; i<M; i++)
{
  if ( /*...*/ )
  {
    /*...*/
    for (int j=0; j<i; j++)
    {
       // compare TriangleArea[i] with TriangleArea[j], if j is a triangle
    }
  }
}

Вы можете заполнить детали, так как это кажется домашним заданиемпроблема.

И вы должны редактировать свои существующие сообщения вместо публикации новых.

0 голосов
/ 29 ноября 2011
(char)('A' + ItemNumberM) << "&" << (char)('A' + ItemNumberM)

Эта строка печатает один и тот же номер элемента дважды.Один из них должен быть ItemNumberN?

0 голосов
/ 29 ноября 2011

В вашем коде вы никогда не модифицируете j, поэтому вы всегда сравниваете с первым треугольником (треугольником A), поэтому не удивительно, что он равен самому себе.Что вам нужно сделать, так это перебрать все уже обработанные треугольники и сравнить, поэтому в основном

for (int i=0; i<M; i++)
{
   if (btype[i] == Triangles)  //btype[i] declared earlier in larger code
   {
     TriangleArea[i] = (0.5 * (D[i] * E[i]));

     for(int j = 0; j < i; ++j)
     { 
       //Insert the comparison here
     }
   }
}

Конечно, ваше позиционирование cout будет печатать только последнюю пару пар равного размера, поэтому, судя потекст в вашем вопросе, вы можете поместить cout в ваши циклы.

0 голосов
/ 29 ноября 2011

Значение j никогда не меняется в коде, который вы разместили.Вы просто сравниваете площадь каждого треугольника с первым в списке.Если я понимаю, что вы пытаетесь сделать правильно, вы сможете заставить его работать с помощью вложенного цикла for:

TriangleArea[0]= whatever

for(j=0; j<M; j++)
{
    for(i=j+1;i<m;i++)
    {
         // rest of your code
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...