Страница 5 из 7

Re: Решить задачу на C++

Добавлено: 09 фев 2009, 08:29
atavin-ta
Именно так.

Re: Решить задачу на C++

Добавлено: 09 фев 2009, 14:37
Airhand
atavin-ta А зачем 2 раза сравнивать ? Можно написать:
for(i = 0; i < n-1; ++i)
{
for(int i1 = i+1; i1 < n; ++i1)
{
if(arr == arr[i1])
{
++m;
}
}
}
Тогда упрощается if и мы опустили преждевременную пессимизацию в виде постфиксной операции ++.

Re: Решить задачу на C++

Добавлено: 09 фев 2009, 19:59
TDUTY
Airhand писал(а):atavin-ta А зачем 2 раза сравнивать ? Можно написать:
for(i = 0; i < n-1; ++i)
{
for(int i1 = i+1; i1 < n; ++i1)
{
if(arr == arr[i1])
{
++m;
}
}
}
Тогда упрощается if и мы опустили преждевременную пессимизацию в виде постфиксной операции ++.

а по мне так главное корректно работало))) и все)))

Re: Решить задачу на C++

Добавлено: 10 фев 2009, 05:35
atavin-ta
&quot писал(а):зачем 2 раза сравнивать ? Можно написать:
Согласен. При i1<i и arr=arr[i1] операция ++m уже выполена. Но тогда лучше так:

Код: Выделить всё

 for (i=n-1; i>0; --i)
 {
  for (i1=i-1; i>=0; --i1)
  {
   if (arr[i]==arr[i1])
   {
    ++m;
   }
  }
 }
Причём, i1 объявить заранее, чтобы не повторять в цикле выделение и освобождение памяти.

Re: Решить задачу на C++

Добавлено: 10 фев 2009, 12:04
Airhand
atavin-ta Это уже оптимизация. А я говорил об исключении преждевременной пессимизации. Что внутренний цикл жрёт слишком много памяти или выполняется медленно ? Зачем тогда выносить временную переменную i1 за цикл ? Незачем. Иначе нужно провести исследование и доказать, что данная часть программы является "бутылочным горлышком".

Re: Решить задачу на C++

Добавлено: 10 фев 2009, 14:08
Albor
Airhand писал(а):atavin-ta А я говорил об исключении преждевременной пессимизации.

Airhand, для общего развития, поясните пожалуйста смысл словосочетания "преждевременная пессимизация". А то смысл не совсем понятен.

Re: Решить задачу на C++

Добавлено: 12 фев 2009, 13:06
Airhand
Albor Вы не знвете, что такое "преждевременная". Или не знаете, что такое "пессимизм" ? Что объяснить то ?

Re: Решить задачу на C++

Добавлено: 12 фев 2009, 16:05
Albor
Airhand писал(а):Albor Вы не знвете, что такое "преждевременная". Или не знаете, что такое "пессимизм" ? Что объяснить то ?

Что такое пессимизм я знаю или, во всяком случае, догадываюсь, я не могу связать данное выражение с префиксной и постфиксной формой оператора ++. Почему постфиксная форма пессимистичнее префиксной. :confused: Как по мне, то если хочешь что-то объяснить - нужно использовать понятный язык. Если мысль можно выразить по-русски, то лучше это сделать так. Airhand, не примнимайте это как упрёк, вы привыкли так думать - это ваше. Мне непонятно - я спросил.

Re: Решить задачу на C++

Добавлено: 13 фев 2009, 12:46
Airhand
Albor А вы реализуйте префиксный и постфиксный операторы и всё поймёте.

Re: Решить задачу на C++

Добавлено: 13 фев 2009, 14:11
Albor
Airhand писал(а):Albor А вы реализуйте префиксный и постфиксный операторы и всё поймёте.

Airhand, я прекрасно знаю чем они отличаюся, и разница в использовании того или иного будет при перегрузке для больших объектов из-за создания временной копии в постфиксной форме, а говорить о том, что одно хуже (конечно, если я правильно понял слово пессимизация) другого в контексте представленных задач, где операторы используются для типа в 4 байта считаю нестоящим акцентирования на этом внимания.
PS Один авторитетный программист в нашем городе как-то сказал, что с точки зрения заказчика дешевле добавить памяти себе в комп, чем платить программисту за оптимизацию кода (это было сказано в контексте экономии памяти).