+- для массива в зависимости от условия
От: e.thrash  
Дата: 07.05.24 12:52
Оценка:
Просто интересно.
Есть массив целых и есть некое число. Если число больше 0, надо пройти по массиву и сделать вычитание, если меньше то добавление по единичке пока число не станет равно нулю.
Можно ли

  текущий код
int num;
var arr = new int[] { ... };
int ind = 0;

if (num > 0)
{
  while (num > 0)
  {
    arr[ind]--;
    ind++;
    num--;
  }
}

if (num < 0)
{
  while (num < 0)
  {
    arr[ind]++;
    ind++;
    num++;
  }
}



переделать в вид чтобы был один цикл и для + и для —

void main()
{
    if (num > 0)
    {
       Correct(arr, num, operator+);
    }
    if (num < 0)
    {
       Correct(arr, num, operator+);
    }    
}

void Correct(int[] list, int num, operator)
{
  while (num != 0)
  {
    arr[ind] operator;
    ind++;
    num operator;
  }
}
Отредактировано 14.05.2024 18:15 VladD2 . Предыдущая версия .
Re: +- для массива в зависимости от условия
От: romangr Россия  
Дата: 07.05.24 15:22
Оценка: 13 (2) +4
Здравствуйте, e.thrash, Вы писали:

ET>Просто интересно.

ET>Есть массив целых и есть некое число. Если число больше 0, надо пройти по массиву и сделать вычитание, если меньше то добавление по единичке пока число не станет равно нулю.
ET>Можно ли


ET>переделать в вид чтобы был один цикл и для + и для —


Если я правильно понял, то что-то типа такого:

void myfunc(int[] list, int num)
{
  int value = num > 0 ? -1 : +1;
  while (num != 0)
  {
    list[ind] += value;
    ind++;
    num += value;
  }
}
Отредактировано 14.05.2024 18:16 VladD2 . Предыдущая версия . Еще …
Отредактировано 07.05.2024 15:24 romangr . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.