Переписать функцию без использования битового сдвига - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте , нужно заменить побитовый сдвиг в функции Crossover, так чтобы эта функция вертала тот же результат , что с побитовым сдвигом. вот код:
Листинг программы
  1. static Random random = new Random((int)DateTime.Now.Ticks);
  2. static double f(int x)
  3. {
  4. return x * x;
  5. }
  6. static void Crossover(ref int a, ref int b)
  7. {
  8. int pointA = random.Next(0, 5),
  9. pointB = random.Next(pointA, 5);
  10. int resA = 0, resB = 0;
  11. for (int i = 0; i < 5; i++)
  12. {
  13. if (i < pointA || i > pointB)
  14. {
  15. resA |= a & (1 << i);
  16. resB |= b & (1 << i);
  17. }
  18. else {
  19. resA |= b & (1 << i);
  20. resB |= a & (1 << i);
  21. }
  22. }
  23. a = resA;
  24. b = resB;
  25. }
  26. static void Main(string[] args)
  27. {
  28. int[] chroms = new int[4];
  29. //Создание начальной популяции
  30. for (int i = 0; i < 4; i++)
  31. chroms[i] = random.Next(0, 32);
  32. for (int iteration = 0; iteration < 4; iteration++)
  33. {
  34. //Вычисление фитнес-функции и весы лице
  35. double[] fittness = new double[4];
  36. double[] chance = new double[4];
  37. double sum = 0;
  38. for (int i = 0; i < 4; i++)
  39. {
  40. fittness[i] = f(chroms[i]);
  41. sum += fittness[i];
  42. }
  43. for (int i = 0; i < 4; i++)
  44. chance[i] = fittness[i] / sum;
  45. //Выбор новой популяции
  46. int[] newChroms = new int[4];
  47. for (int i = 0; i < 4; i++)
  48. {
  49. double roulette = random.NextDouble();
  50. sum = 0;
  51. for (int j = 0; j < 4; j++)
  52. {
  53. sum += chance[j];
  54. if (roulette < sum)
  55. {
  56. newChroms[i] = chroms[j];
  57. break;
  58. }
  59. }
  60. }
  61. chroms = (int[])newChroms.Clone();
  62. //Кросинговер
  63. for (int i = 0; i < 2; i++)
  64. Crossover(ref chroms[i], ref chroms[3 - i]);
  65. //Mутация
  66. int chrom = random.Next(0, 4), pos = random.Next(0, 5);
  67. chroms[chrom] ^= (1 << pos);
  68. }
  69. Console.WriteLine(chroms.Max());
  70. Console.ReadKey();

Решение задачи: «Переписать функцию без использования битового сдвига»

textual
Листинг программы
  1. (int)Math.Pow(2,i)

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 4.222 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы