Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 20.12.2015
Сообщений: 92

Функция для выделения диапазона разрядов

18.02.2017, 15:37. Показов 2234. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добрых дней. Есть задумка написать функцию, которая будет выделять диапазон разрядов и будет их сдвигать вправо.
То есть такого вид void vydel_raz(int code, int старший разряд, int младший разряд) {}
Подскажите какой приблизительно алгоритм можно здесь использовать.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.02.2017, 15:37
Ответы с готовыми решениями:

Алгоритм выделения разрядов числа и проверки, есть ли среди них нечетная цифра
Задание. Дано трехзначное число. Составить алгоритм выделения его разрядов и проверки, есть ли среди них нечетная цифра. Код не...

Процедура "Умное выделение" для выделения столбцов в пределах диапазона с данными (Решено)
Спасибо пользователю Burk за то, что терпеливо отвечал на мои надоедливые вопросы! В Экселе есть штатная функция выделения. Если...

Функция для выделения определенных символов из строки
Помогите решить задачу. // #include "stdafx.h" int main(void) { char substring(char source, int start, int count,...

9
 Аватар для Lyosha12
41 / 41 / 11
Регистрация: 02.04.2016
Сообщений: 313
18.02.2017, 16:27
Основной Ваш друг - оператор взятия остатка от деления. Для начала отделяете все цифры, что стоят перед младшим разрядом, кроме последней слева - на неё мы и "надвинем" то число, которое Вы выделите между старшим разрядом (включительно?) и младшим (включительно?). Далее от числа у Вас остаётся только то, что шло перед старшим разрядом.

В итоге у Вас будет 3 переменных: число до диапазона, диапазон, число после диапазона, не включая старший разряд (тут уж сами границы определяйте). А дальше просто комбинируете в одно число с помощью pow(10, x).
0
0 / 0 / 0
Регистрация: 20.12.2015
Сообщений: 92
18.02.2017, 19:32  [ТС]
Такое вроде подойдёт
C++
1
2
3
4
5
6
7
8
9
10
11
int vyrezka (int par, int mb, int sb)
{
    int x, mask=0;
    for (int i = 0; i <= sb; i++)
    {
           x = 2^i;
        mask = mask + x;
    }
    return (par & mask)>>mb;
 
}
0
 Аватар для Lyosha12
41 / 41 / 11
Регистрация: 02.04.2016
Сообщений: 313
18.02.2017, 20:29

Не по теме:

Стоит почаще спать ночью. Подумал, что нужно было сделать это для десятичного числа


Во-первых, зачем Вам XOR - оператор карет ^? Если Вы хотели возвести аргумент в степень, то для этого есть pow(), но оператора "из коробки" нет. Во-вторых, так как эта задача похожа на одну из тех, что мне давали на лабы, смею предположить, что реализация требуется в один оператор return.
0
0 / 0 / 0
Регистрация: 20.12.2015
Сообщений: 92
18.02.2017, 21:48  [ТС]
Возожно и в один return. Есть ли другая функция возведения в степень? На pow ругается из-за несовместимости double и integer
0
 Аватар для Lyosha12
41 / 41 / 11
Регистрация: 02.04.2016
Сообщений: 313
18.02.2017, 21:57
Цитата Сообщение от killbit Посмотреть сообщение
ругается из-за несовместимости double и integer
Ну так преобразуйте что-то во что-то: static_cast<тип, к которому приводят объект>(объект)

Добавлено через 6 минут
Ну тогда алгоритм усложнится: нужно задать маску выделения битов, например, так (если sizeof(int) == 4):
C++
1
2
int a = 1;
a = ((((a<<32-x)>>32-x)>>y)<<y)
Где x и y - старший и младший бит выделяемого диапазона, не включая их и ведя индексацию битов с нуля справа, соответственно.
Над остальным сами поэкспериментируйте - для этого же работа и нужна самостоятельная.
0
0 / 0 / 0
Регистрация: 20.12.2015
Сообщений: 92
18.02.2017, 22:12  [ТС]
В принципе если присвоить х тип double то всё идёт вроде путём. В таком варианте дробной части получиться всё равно не должно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
int vyrezka (int par, int mb, int sb)
{
    int mask = 0;
    double x;
    for (int i = 0; i <= sb; i++)
    {
           x = pow(2,i);
        mask = mask + x;
    }
    return (par & mask)>>mb;
 
}
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
18.02.2017, 22:24
Цитата Сообщение от killbit Посмотреть сообщение
Есть ли другая функция возведения в степень?
i
C++
1
2
3
4
5
6
nt PowKillBit(int x, int n)
{  int R = 1;
  for(int i=0; i<n; i++)
     R *= x;
  return R;
}
Добавлено через 1 минуту
Если эта покажется вам слишком медленной, можно сделать побыстрее
0
0 / 0 / 0
Регистрация: 20.12.2015
Сообщений: 92
18.02.2017, 22:34  [ТС]
Забавно, лишнее писать только тоже не хочется. Странно что нет готового. В делфях есть вроде что то типа intPower, а тута нема.
0
Диссидент
Эксперт C
 Аватар для Байт
27714 / 17332 / 3810
Регистрация: 24.12.2010
Сообщений: 38,978
18.02.2017, 23:42
Цитата Сообщение от killbit Посмотреть сообщение
лишнее писать только тоже не хочется.
Тут вы написали 6 строчек и все дела. Занимает это 2 минуты + 6 минут на отладку. Все! Это ваша личная функция. Вы отвечаете за нее, вы знаете, как она работает, и что от нее можно ждать (например, переполнения разрядной сетки). Вы всегда можете ее переделать, ускорить, сделать более гибкой. И все это займет значительно меньше времени, чем ползанье по форумам-сайтам-библиотекам.
Нет, конечно, мне не по силам создать собственное CGI (хотя и пытался), и тут я обращаюсь к фреймворкам.
Но хороший столяр сам строит свой верстак, сам точит рубанок. Конечно, циркулярную пилу он будет выбирать в магазине. Но бегать по магазинам за простым отвесом? Привязал подходящую гайку к веревочке - все дела!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.02.2017, 23:42
Помогаю со студенческими работами здесь

Есть ли в ListBox функция для выделения части текста и переноса в edit
есть ли в listbox функция для выделения части текста и переноса в edit. например есть файл с ФИО между ними стоят запятые, и мне нужно...

Приостановка программы до выделения диапазона
Привет всем. Макрос открывает несколько файлов. При открытии очередного файла, нужно, чтобы пользователь, который запустил макрос, выделил...

Функция для диапазона
Нужно сделать для нижней строки поиск букв &quot;с&quot; и &quot;о&quot;, а потом, если есть такие значения сложить их. Я не знаю как применить функцию ПСТР...

Режим выделения диапазона из диалогового окна
Доброго времени суток , всем! Недавно задался таким вопросом как получить адрес выделяемого диапозона на форму в текстбокс. У меня есть...

Вывести числа из диапазона от n до m, в двоичном представлении которых ровно k разрядов установленных в «01»
Доброго времени суток. Есть задача:Вывести числа из диапазона от n до m , в двоичном представлении которых ровно k разрядов установленных в...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru