Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 15.01.2014
Сообщений: 14

Поразрядные операции (C++ Builder 6). Определить, есть ли в числе L байт из цифр FC

16.01.2014, 01:13. Показов 4630. Ответов 38
Метки нет (Все метки)

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

Дано long-число L = ABCDEFGH, где AB…GH – 16-ричные цифры. Определить,
есть ли в числе L байт из цифр FC.

Добавлено через 12 минут
8. Поразрядные операции
Цель работы: изучение поразрядных операций для решения задач обработки целочисленных данных на уровне битов, выработка умений тестирования и отладки программ с поразрядными операциями.
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
/* Программа 8 демонстрирует использование поразрядных операций для работы с целыми числами на уровне битов: постановка и сброс флагов, работа с 16-ричными числами и кодами символов. */
   #include <stdio.h>
   #include <conio.h>
 void  long_bits (unsigned long L ); // Выводит на экран 2-ый код 16-го числа
void main( void )
 { unsigned long  L;
   clrscr();
        < Вывод шапки программы, см. программу 1 или 2 >
// Установка флага в k-ый разряд числа, k=0..31
   L = 0;
   long  k = 3;
   L = L | ( 1L<< k ); // L = 8 для флага в позиции 3
   printf( "\n Установка флага в %d разряд числа L = 0: L = %lX", k, L);
// Сброс флага из k-го разряда числа, k=0..31
   L = 0xFFFFFFFF;
    L = L & ~( 1L<< k );
    printf("\nСброс флага в %d разряде числа L=0xFFFFFFFF:  L=%lX", k, L);
    getch();
// Образуем символ из старшей и младшей 16-ых цифр числа L
    L=0x42345678; // код ch=0x48
    printf("\n Cимвол из старшей и младшей 16-х цифр числа L=%lX", L);
    char ch;
    ch=((L & 0xF0000000) >> 24); // ch = 0x40 
    ch=ch | (L & 0xF);  // ch=0x48
    printf("\nL=%lX, 16-ый код ch=%X, символ ch=%c ", L, ch, ch);
        getch();
 printf("\n\n Введите long-число в 16-м коде для перевода в 2-ый код: " );
    scanf("%lx", &L);
    long_bits( L );
        getch();
// Пример использования операции XOR для кодирования и декодирования
// int-числа d символом ch:
    ch='a';
    int d=12345;
    printf("\n\n Число d=%d закодировано символом \'%c\' операцией XOR: ",
            d, ch);
    d=(d & 0xFF) ^ ch | (d & 0xFF00) ^ (int(ch) << 8);
    printf("\n\t код d=%d", d);
    d=(d & 0xFF) ^ ch | (d & 0xFF00) ^ (int(ch) << 8);
    printf("\n Декодируем аналогичными действиями: d=%d", d);
        getch();
 } 
void  long_bits( long  L )
 { unsigned long m=1;
    printf(" Число %lX в 16-м коде имеет 2-е представление:\n\t", L);
    for(int k=31; k>=0; k--)
    { if( (m << k) & L ) printf("1");
      else printf( "0" );
    if( k%4 == 0 ) printf( " " ); // группы битов 16-х цифр разделяем пробелом
    }
 }
Вот что написано в методичке, может поможет. Я ничего не понял
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.01.2014, 01:13
Ответы с готовыми решениями:

Дано длинное целое число, содержащее не более 100 цифр Определить, есть ли в этом числе заданная цифра
Помогите решить 4. Дано длинное целое число, содержащее не более 100 цифр. Рассматривать цифры числа, как массив символов. Определить...

Ввести целое число и определить, верно ли, что в его записи есть две одинаковые цифры. Найти сумму, среднее арифметическое и количество цифр в числе
Ввести целое число и определить, верно ли, что в его записи есть две одинаковые цифры. Найти сумму, среднее арифметическое и количество...

Определить сколько цифр в числе n, чему равна сумма его цифр
Дано натуральное число n. Определить: сколько цифр в числе n, чему равна сумма его цифр.

38
0 / 0 / 1
Регистрация: 15.01.2014
Сообщений: 48
17.01.2014, 17:04
Студворк — интернет-сервис помощи студентам
Kulgar, то есть вывести можно вот так
C++
1
printf("%x \n", L);
А ввести число
C++
1
scanf("%x", &L);
Верно?

Добавлено через 1 час 33 минуты
Kulgar, сделал ввод и вывод, в задании было не более 2 единиц, а в условии менее, где изменить условие?
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
17.01.2014, 17:31
Цитата Сообщение от antifreeze Посмотреть сообщение
Kulgar, сделал ввод и вывод, в задании было не более 2 единиц, а в условии менее, где изменить условие?
Тут уже вопрос в понимании русского языка. Какое следующее натуальное число после 2? Я полагаю, что 3. Условия "не более 2 едениц" означает, что 2 еденицы могут быть, но не больше. Следовательно это условие можно представить как "меньше 3".
1
0 / 0 / 1
Регистрация: 15.01.2014
Сообщений: 48
17.01.2014, 17:38
Kulgar, просто у тебя после else стоит вывод на экран менее 2-х единиц, поэтому и спросил что не так
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
17.01.2014, 17:41
antifreeze, я Вам так скажу: берите вариант nick42. Для понимания его код проще. Мой, как я уже сказал выше, хардкорчеГ.
0
0 / 0 / 1
Регистрация: 15.01.2014
Сообщений: 48
17.01.2014, 17:43
Kulgar, и всё равно если ввожу вместо H допустим 2, а в двоичном представлении в цифре меньше 2 единиц, выводит надпись после else

Добавлено через 1 минуту
Kulgar, сможешь его переделать для консольного приложения, а то он также с ошибками компилируется?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
17.01.2014, 18:30
Цитата Сообщение от antifreeze Посмотреть сообщение
он также с ошибками компилируется
Если для консоли, - BYTE нужно заменить на unsigned char. Ну и ввод-вывод консольный присочинить.
0
0 / 0 / 0
Регистрация: 15.01.2014
Сообщений: 14
17.01.2014, 20:45  [ТС]
Какие библиотеки нужно подключить?
Ругается на BYTE
0
0 / 0 / 1
Регистрация: 15.01.2014
Сообщений: 48
17.01.2014, 21:29
nick42, изменил твой как ты сказал
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
main ()
//void __fastcall TForm1::Button3Click(TObject *Sender)
{
    unsigned long Lo;// = 0xABCDEFBA ;
    scanf("%x", &Lo);
    char Count=0, *izo ;
    unsigned char hH = Lo&0x0F;
    itoa(hH,izo,2);    
    for (int i=0;i<4;i++) if(izo[i]=='1') Count++;
    if (Count<3) {     
      unsigned char mask = ((Lo>>8)&0x0F)^(~Lo&0x0F);
      mask |= Lo>>28;
      Lo = (Lo&0xFFF0FFFF) | mask<<16; 
    }
}
Появляется ошибка:Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 326632E4. Write of address 00000001'.

А если раскомментировать строку сверху, и закомментировать main то будет ругаться на нее
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
17.01.2014, 23:01
.. а так?...
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
//---------------------------------------------------------------------------
#include <iostream.h>
#include <conio.h>
#pragma hdrstop
#pragma argsused
int main(int argc, char* argv[])
{
    unsigned long Lo ;  //  = 0xABCDEFBA
    cout<<"\r\nInput hex number: ";
    scanf(" %x", &Lo);
    char Count=0, izo[5] ;
    unsigned char hH = Lo&0x0F;
    itoa(hH,izo,2);
    for (int i=0;i<4;i++) if(izo[i]=='1') Count++;
    if (Count<3)
    {
      unsigned char mask = ((Lo>>8)&0x0F)^(~Lo&0x0F);
      mask |= Lo>>28;
      Lo = (Lo&0xFFF0FFFF) | mask<<16; 
    }
    printf("\n\t%.8X\r\n\n",Lo);
    getch();
  return 0;
}
1
0 / 0 / 1
Регистрация: 15.01.2014
Сообщений: 48
17.01.2014, 23:11
nick42, спасибо огромное, можешь еще пояснить что делает эта строка
C++
1
int main(int argc, char* argv[])
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
17.01.2014, 23:27
Да ничего она не делает... . Можешь просто main() писать (но тогда return не нужен). Это на тот случай, если в твоей консольной программе параметры из командной строки участвуют. Так, допустим, можно было бы запускать твою программу, указывая заодно и число: напр. C:\> Project.exe abcdef71 - и сразу получать ответ, не вводя после этого число.
1
0 / 0 / 1
Регистрация: 15.01.2014
Сообщений: 48
17.01.2014, 23:30
nick42, спасибо огромное всё понял и всё работает
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
17.01.2014, 23:40
.. в упрощенном варианте__
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream.h>
#include <conio.h>
main()
{
    unsigned long Lo ; char Count=0, mask ;
    cout<<"\r\nInput hex number: ";
    scanf(" %x", &Lo);
    if (Lo&1) Count++; if (Lo&2) Count++;
    if (Lo&4) Count++; if (Lo&8) Count++;
    if (Count<3)
    {
      mask = (Lo>>28) | ((Lo>>8)&0x0F)^(~Lo&0x0F);
      Lo = (Lo&0xFFF0FFFF) | mask<<16;
      printf("\n\t%.8X\r\n\n",Lo);
    } else printf("\n\tNo operation");
    getch();
}
1
0 / 0 / 1
Регистрация: 15.01.2014
Сообщений: 48
17.01.2014, 23:48
nick42, огромнейшее спасибо тебе, второй вариант просто зашибись, всё работает как часы
0
0 / 0 / 0
Регистрация: 15.01.2014
Сообщений: 14
18.01.2014, 09:04  [ТС]
Цитата Сообщение от nick42 Посмотреть сообщение
Код C++

C++
1
2
3
4
5
unsigned long L = 0xABCDEFAB ;
*BYTE mask = 0xFC;
*int Count = 0;
*for (int i=0;i<8;i++) if ((BYTE)(mask ^ L>>(4*i)) == 0) Count++;
*if (Count>0) ShowMessage("Байт в числе присутствует");
не работает... (что к нему еще нужно добавить?
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
18.01.2014, 11:54
Работает... в оконном приложении. А добавлять нужно сразу, что речь идет о консольном приложении. И вообще: на форуме существует подраздел "C++ для начинающих" - это как раз то самое место... .
0
0 / 0 / 0
Регистрация: 15.01.2014
Сообщений: 14
19.01.2014, 06:50  [ТС]
к модерам все вопросы, они сюда перенесли
0
 Аватар для Kulgar
511 / 196 / 26
Регистрация: 07.08.2013
Сообщений: 814
22.01.2014, 10:57
Цитата Сообщение от catsergo Посмотреть сообщение
к модерам все вопросы, они сюда перенесли
Перенесли потому, что Вы тему назвали: "Поразрядные операции (C++ Builder 6). Определить, есть ли в числе L байт из цифр FC / C++ Builder"
Не ясно почему, если Вам нужно под Borland 3.1.
0
0 / 0 / 0
Регистрация: 15.01.2014
Сообщений: 14
22.01.2014, 10:59  [ТС]
мне и нужно под билдер так то
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.01.2014, 10:59

Определить: количество цифр в числе, среднее арифметическое цифр, сумму квадратов
Дано натуральное число N. Определить: количество цифр в нем; среднее арифметическое его цифр; сумму квадратов c помощью while

Определить количество цифр, среднее арифметическое цифр в натуральном числе
Дано натуральное число N. Определить: количество цифр в нем; среднее арифметическое его цифр; сумму квадратов его цифр; сумму его первой и...

Определить количество цифр в числе n и сумму всех его цифр
Дано натуральное n , определить количество цифр в числе n и сумму всех его цифр. Значение n ввести с клавиатуры. Добавлено через...

Определить количество цифр в числе n и сумму всех его цифр.
Дано натуральное число n, определить количество цифр в числе n и сумму всех его цифр. Значение n ввести с клавиатуры. Количество цифр...

Определить первую цифру, сумму цифр, количество цифр в числе N
Дано натуральное число n. Определить: а) Первую цифру числа N. б) сумму цифр числа N. в) кол-во цифр в числе N.


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

Или воспользуйтесь поиском по форуму:
39
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru