0 / 0 / 0
Регистрация: 07.12.2013
Сообщений: 93
1

Определить числа, если известны результаты операций с ними

24.02.2014, 23:03. Показов 4022. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Даны два десятичных числа X и Y. Их перевели в двоичную систему счисления и определили, что в числе X из 4 разрядов три единицы, а в числе Y из 5 разрядов две единицы. Логическое (побитовое) произведение этих чисел равно 10(2) , а логическая (побитовая) сумма – 11110(2). (2)-двоичная система.надо найти числа х и у.. подскажите пожалуйста
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.02.2014, 23:03
Ответы с готовыми решениями:

Определить сторону треугольника, если известны две другие стороны и угол между ними
Определить сторону треугольника, если известны две другие стороны b, c и угол между ними ...

Известны результаты операций с числом. Найти его
Из трехзначного числа х вычли его последнюю цифру. Когда резуль- тат разделили на 10, а к частному...

Как сделать прогноз, если известны результаты ставок
Очень прошу не отмахнуться от моего вопроса. Я очень мало знаю Statistica 10. Поэтому, проявите...

Вычислить периметр и площадь произвольного треугольника, если известны две его стороны и угол между ними
Вычислить а) периметр; б) площадь произвольного треугольника, если известны две его стороны и угол...

2
случайный прохожий
2927 / 1944 / 606
Регистрация: 20.07.2013
Сообщений: 5,146
25.02.2014, 00:04 2
"Предисловие" (пример): http://wap.ege.unoforum.ru/?1-... 1300505436
Важно:
Логическая побитовая сумма равна 0, если оба "операнда" равны 0, иначе 1.
Логическое умножение равно 1, если оба "операнда" равны 1, иначе 0.
Решение (способ a): X = 01110 или 01101 или 01011
Y = 10001 или 10010 или 10100 или 11000
Так как логическое произведение равно 00010, то Y = 10010, а X = 01110 или 01011.
Логическая сумма равна 11110, то есть X = 1110.

Решение (способ b): X = 1xxx
Y = 1yyyy
Так как логическое произведение равно 00010, то X = 1x1x, Y = 1yy1y.
Y = 10010 (должны быть две единицы). Логическая сумма равна 11110, то есть X = 1110.

Итог: X = 14, Y = 18.
0
случайный прохожий
2927 / 1944 / 606
Регистрация: 20.07.2013
Сообщений: 5,146
25.02.2014, 05:23 3
Лучший ответ Сообщение было отмечено Ms Proger как решение

Решение

Builder:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
// перевод двоичного числа (в виде строки) в десятичное
String BinToDec(String bin)
{
  bin = Trim(bin);  // удаление лишних пробелов
  int p = 1, sum = 0;
  for (int i = bin.Length(); i > 0; i--)
  {
    if (bin[i] == '1')
      sum += p;
    p *= 2;
  }
  return sum;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
// digitsX - кол-во двоичных цифр в X, digitsY - в Y
// onesX - кол-во единиц в X, onesY - в Y
// mult - логическое (побитовое) произведение, sum - сумма
// stringX и stringY - строковое представление X и Y
  int i, j, X, Y, digitsX = 4, digitsY = 5,
  max_digits = (digitsX > digitsY) ? digitsX : digitsY,
  dif = digitsX - digitsY, onesX = 3, onesY = 2;
  char k;
  String mult = "10", sum = "11110", stringX = "", stringY = "";
// если кол-во единиц > 0, то первая цифра 1
  if (onesX)
    stringX = "1";
  if (onesY)
    stringY = "1";
 
// заполняем оставшиеся биты чисел символами 'x' и 'y'
  for (i = 1; i < digitsX; i++)
    stringX += "x";
  for (i = 1; i < digitsY; i++)
    stringY += "y";
 
// дополняем числа нулями слева
  if (dif > 0)
    for (i = 0; i < dif; i++)
      stringY = "0" + stringY;
  if (dif < 0)
    for (i = 0; i < -dif; i++)
      stringX = "0" + stringX;
 
// дополняем mult и sum нулями слева
  j = max_digits-mult.Length();
  for (i = 0; i < j; i++)
    mult = "0" + mult;
  j = max_digits-sum.Length();
  for (i = 0; i < j; i++)
    sum = "0" + sum;
 
// если бит произведения = 1, то соответствующие биты чисел
// тоже = 1
  for (i = 1; i <= mult.Length(); i++)
    if (mult[i] == '1')
    {
      stringX[i] = '1';
      stringY[i] = '1';
    }
 
// если бит суммы = 0, то соответствующие биты чисел
// тоже = 0
  for (i = 1; i <= sum.Length(); i++)
    if (sum[i] == '0')
    {
      stringX[i] = '0';
      stringY[i] = '0';
    }
 
// если бит произведения = 0, бит суммы = 1
// и соответствующий бит одного числа равен 1 или 0,
// а другого 'x' или 'y', то берем инвертированное значение
// "известного" бита и подставляем его вместо "неизвестного"
  for (i = 1; i <= max_digits; i++)
    if (mult[i] == '0' && sum[i] == '1')
    {
      if (stringX[i] == '1' && stringY[i] == 'y')
        stringY[i] = '0';
      if (stringX[i] == '0' && stringY[i] == 'y')
        stringY[i] = '1';
 
      if (stringX[i] == 'x' && stringY[i] == '1')
        stringX[i] = '0';
      if (stringX[i] == 'x' && stringY[i] == '0')
        stringX[i] = '1';
    }
 
// onesX--, onesY-- для уменьшения кол-ва оставшихся
// "незадействованными" единиц
  for (i = 1; i <= max_digits; i++)
  {
    if (stringX[i] == '1')
      onesX--;
    if (stringY[i] == '1')
      onesY--;
  }
 
// определение оставшихся бит
  k = onesX ? '1' : '0';
  for (i = 1; i <= max_digits; i++)
    if (stringX[i] == 'x')
      stringX[i] = k;
  k = onesY ? '1' : '0';
  for (i = 1; i <= max_digits; i++)
    if (stringY[i] == 'y')
      stringY[i] = k;
 
// "удаление" (замена на пробел) начальных нулей
  if (dif > 0)
    for (i = 1; i <= dif; i++)
      stringY[i] = ' ';
  if (dif < 0)
    for (i = 1; i <= -dif; i++)
      stringX[i] = ' ';
 
// вывод X и Y в двоичном виде без лишних пробелов и в десятичном
  ShowMessage("X = " + Trim(stringX) + " = " + BinToDec(stringX)
  + "\n" + "Y = " + Trim(stringY) + " = " + BinToDec(stringY));
Миниатюры
Определить числа, если известны результаты операций с ними  
0
25.02.2014, 05:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.02.2014, 05:23
Помогаю со студенческими работами здесь

Известны результаты каждой из 4х четвертей баскетбольной встречи. Нужно определить победителя матча.
что не правильно тут ?? выдает (Runntime Error)...и как правильно на сайте Асмп залить задачу ?...

Известны результаты каждой из 4х четвертей баскетбольной встречи. Нужно определить победителя матча
Известны результаты каждой из 4х четвертей баскетбольной встречи. Нужно определить победителя...

Сохранить два бита числа для операций с ними
Пользователь вводит число от 0 до 255 и номера двух битов этого числа. Как мне извлечь эти два бита...

Изобразите на плоскости данные числа и результаты операций
Найти сумму, разность, произведение и частное комплексных чисел 1 z и 2 z , изобразить на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru