Нужно сделать контрольный пример кода
#include "cstdio"
using namespace std;
int main() {
const int n = 10;
short int A[n];
for (int i = 0; i < n; ++i) {
*(((char*)(&A[2*i])) + 1) = (char)(i);
*((char*)(&A[2+i])) = (char)(i);
printf("%d ", A[2*i]);
}
printf("\n");
int sum = 0;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < 15; ++j) {
short int mask = 1;
if (((A[i] & (mask << j)) >> j) == 1) {
++sum;
}
}
}
printf("%d\n", sum);
}
C/C++
Всем здарово! Пожалуйста помогите! Кому несложно очень прошу!
Максим, неужели в Казани так плохо преподают алгоритмизацию и программирование??? Ведь Вы даже не представили целостного условия задания (а по разрозненным скриншотам можно только догадываться).
Да и с кодом Вы нагородили массу лишнего. Посмотрите ещё раз на словесный алгоритм, почему бы не сделать, как написано?
Вот формула для инициализации массива:
for (int i = 0; i < n; ++i) A[i] = (min + rand()%(1 + max - min)) & 0x5555;
Эта формула учитывает не только генерацию псевдослучайных чисел из диапазона [min, max], но и наложение маски 0x5555.
Для того, чтобы использовать функцию rand() следует в начало кода добавить строку #include <cstdlib>
По формуле сначала вычисляются: 1) 1 + max - min — это ширина диапазона [min, max], 2) значение функции rand(). Далее второе делится на первое и извлекается остаток от деления. Этот остаток прибавляется к min, таким образом гарантируется, что результат будет принадлежать диапазону. И, наконец, с помощью конъюнкции на результат накладывается маска 0x5555. Вот и всё!!!
Представленная формула не оптимальна, т. к. в цикле каждый раз вычисляется одна и та же ширина диапазона!!! Гораздо лучше вычислить ширину диапазона один раз и присвоить временной переменной, а в цикле брать значение этой переменной.
Для наглядности можно объявить именованную константу со значением 0x5555.
Да и с кодом Вы нагородили массу лишнего. Посмотрите ещё раз на словесный алгоритм, почему бы не сделать, как написано?
Вот формула для инициализации массива:
for (int i = 0; i < n; ++i) A[i] = (min + rand()%(1 + max - min)) & 0x5555;
Эта формула учитывает не только генерацию псевдослучайных чисел из диапазона [min, max], но и наложение маски 0x5555.
Для того, чтобы использовать функцию rand() следует в начало кода добавить строку #include <cstdlib>
По формуле сначала вычисляются: 1) 1 + max - min — это ширина диапазона [min, max], 2) значение функции rand(). Далее второе делится на первое и извлекается остаток от деления. Этот остаток прибавляется к min, таким образом гарантируется, что результат будет принадлежать диапазону. И, наконец, с помощью конъюнкции на результат накладывается маска 0x5555. Вот и всё!!!
Представленная формула не оптимальна, т. к. в цикле каждый раз вычисляется одна и та же ширина диапазона!!! Гораздо лучше вычислить ширину диапазона один раз и присвоить временной переменной, а в цикле брать значение этой переменной.
Для наглядности можно объявить именованную константу со значением 0x5555.
Бери генератор случайных чисел А и В прогони, потом бери сайт с делением в столбик и там прогони эти числа.
Похожие вопросы
- С++, помогите пожалуйста с кодом, очень прошу, и можете коротко обьяснить код
- Программирование, пожалуйста помогите очень нужно решить
- Пожалуйста, помогите написать программу на С++
- С++. Срочно пожалуйста помогите
- СРОЧНО ПОЖАЛУЙСТА ПОМОГИТЕ
- Пожалуйста помогите с задачей на С++
- Программа на с++ (нужен код) пожалуйста помогите
- Пожалуйста, помогите с C++
- Пожалуйста помогите написать программу на С++
- Пожалуйста, помогите понять как написать функцию (С)
void Init_array(short int * A, int n, int min, int max)
{
const int Mask = 0x5555;
int width = 1 + max - min;
for (int i = 0; i < n; ++i) A[i] = (min + rand()%width) & Mask;
}
int Mask_K = 1 << k; // учитывается факт, что нумерация бит начинается с 0
Путём перебора всех элементов массива найти элемент, наложение на который маски Mask_K даст в результате ту же маску. Условие: A[i] & Mask_K == Mask_K
int Mask_Search(short int * A, int n, int k)
{
int Mask_K = 1 << k;
for (int i = 0; i < n; ++i) if (A[i] & Mask_K == Mask_K) return i;
return -1;
}
/*
Функция возвращает индекс найденного элемента или число -1, если такого элемента нет в массиве
*/