Консультация № 189282
27.04.2016, 18:37
0.00 руб.
28.04.2016, 10:23
0 6 1
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:

Задание:
Найти количество элементов одномерного массива А(10), в значении которых
установлен пятый бит. После этого у всех элементов массива инвертировать 3 бит и новые
значения записать в массив В(10). Вывести в шестнадцатеричном виде массивы А и В.


Код:
int main()
{
setlocale(LC_ALL, "Russian");
int a[10]; int sum = 0, count = 0;
int b[10];
srand(time(0));
cout << endl << "Массив А" << endl;
for (int i = 0; i < size(a); i++)
{
a[i] = rand() % 33;
cout << a[i] << " ";
if (a[i] & 16) count++;
b[i] = a[i] ^ 4;

}
cout << endl << "Массив B" << endl;
for (int i = 0; i < size(a); i++)
cout << hex << b[i] << " ";
cout << endl << "5 бит устновлен в " << count << " элементах" << endl;
system("pause");
return 0;
}



что тут делает это: size(a) ??

Обсуждение

давно
Посетитель
7438
7205
28.04.2016, 16:47
общий
это ответ
Здравствуйте, Посетитель - 399158!
Предлагаю свой вариант
Под size(a) понималось размер массива а
Я заменил на sizeof(a)/sizeof(int), т.к. нельзя писать size(a)
В программировании биты считаются с 0, а не с 1, поэтому подправил маски битов
Увеличил "размах" чисел до 256
Массив а тоже ж надо выводить в hex
[code h=200]
#include <windows.h>
#include <iostream>
#include <iomanip>
#include <locale>
#include <time.h>

using namespace std;

int main()
{
setlocale(LC_ALL, "Russian");
int a[10];
int i, sum = 0, count = 0;
int b[10];

srand(time(0));

cout << endl << "Массив А" << endl;
for (i = 0; i < sizeof(a)/sizeof(int); i++)
{
a[i] = rand() % 256;
cout << hex << a[i] << " ";
if (a[i] & 32)
count++;
b[i] = a[i] ^ 8;
}
cout << endl << "Массив B" << endl;
for (i = 0; i < sizeof(a)/sizeof(int); i++)
cout << hex << b[i] << " ";
cout << endl << "5 бит установлен в " << count << " элементах" << endl;
system("pause");
return 0;
}
[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
399158
228
04.05.2016, 13:23
общий
sizeof(a)/sizeof(int) а что это значит тогда?
давно
Посетитель
7438
7205
04.05.2016, 13:30
общий
Адресаты:
Размер всего массива в байтах, деленный на размер целого в байтах.
В итоге - количество элементов массива
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
399158
228
04.05.2016, 13:48
общий
if (a[i] & 32)
count++;
b[i] = a[i] ^ 8;


что это делает?
давно
Посетитель
7438
7205
04.05.2016, 13:53
общий
Адресаты:
Найти количество элементов одномерного массива А(10), в значении которых
установлен пятый бит.

Код:
if (a[i] & 32) 
count++;
Маска 3210 = 001000002
Счет бит с 0!
После этого у всех элементов массива инвертировать 3 бит и новые
значения записать в массив В(10)

Код:
b[i] = a[i] ^ 8;
Маска 810 = 000010002
Счет бит с 0!
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
давно
Посетитель
399158
228
04.05.2016, 13:58
общий
Спасибо
Форма ответа