|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
16.11.2012, 01:05 | #1 (permalink) |
Новичок
Регистрация: 12.11.2012
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Язык С++. Функции пользователя
"Написати функцію, яка повертає число, одержане з цілого числа x, в якому нулі встановлені в n розрядів, починаючи з позиції p (крайній правий біт вважати нульовим за номером). Перевіряти правильність значень n і p. " |
16.11.2012, 01:05 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Может быть такое, что участники форума уже решили эту проблему Язык программирования F# Функции, язык Си Какой это язык? |
17.11.2012, 14:42 | #3 (permalink) |
Новичок
Регистрация: 12.11.2012
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
функция пользователя С++
Не уверена в правильности и блок-схема не получается.
#include <iostream> #include <stdio.h> #include <conio.h> using namespace std; // підключаємо все необхідне для роботи програми void print_bits (unsigned n) { // функція друкує біти, функція з лекії int bit; // змінна, в якій буде знаходитись поточне значення кількості бітів for (bit = sizeof(n)*8-1; bit >= 0; bit--) // початкове значення bit = довжина змінної unsigned { if ((n >> bit) & 01) { // тут іде логічне множення... складно пояснити, але спробую... // (n >> bit) - здвигає на "bit" розрядів // & 01 - логічне множення - тобто, грубо кажучи кусає правіший біт // тут іде побітове множення(чи просто кажучи побітове "і"), для прикладу: // 10101110001101 // & побітове "і" // 00000000000001 тобто тут насправді (01) // = // 00000000000001 - цей результат позитивний, тобто більше нуля, // а значить, грубо кажучи == TRUE putchar ('1'); } else {// іначе 0 - наприклад: // 011010 // & // 000001 // = // 000000 - == FALSE або нулю - негативний putchar ('0'); } if (bit % 4 == 0) putchar (' '); // якщо біт, на якому стоїть лічильник кратний чотирьом, то ставимо пробіл } cout<<endl; // перевод на нову строчку } unsigned replace_bits (unsigned x, unsigned p, unsigned n) { unsigned mnoj=0, z; int bit; // змінна, в якій буде знаходитись поточне значення кількості бітів for (bit = sizeof(n)*8-1; bit >= 0; bit--) { // cout<<mnoj<<endl; // if ((n >> bit) & 01) // cout<<((x>>bit) & 01); // print_bits(z); if (bit>=p && bit<p+n) { z=((~(x>>bit) & 01)); mnoj=(mnoj<<1) | z; } else { z=(((x>>bit) & 01)); mnoj=(mnoj<<1) | z; } } cout<<endl; return mnoj; } main () { unsigned num; // створюємо цілу беззнакову 4-байтову змінну cout << "Input X" << endl; // підсказка користувачу cin >> num; // зчитуємо число print_bits (num); // друкуємо біти int n,p; do { cout << " Enter P [numeracia s nula]: " ; // підказка користувачу cin >> p; // зчитуємо число if (p<0) {cout<<" -> ERROR : P must be >=0"<<endl;} } while (p<0); do { cout << " Enter N : " ; // підказка користувачу cin >> n; // зчитуємо число if (n<=0) {cout<<" -> ERROR : N must be >=1"<<endl;} } while (n<=0); unsigned result = replace_bits (num,p,n); // виводимо кількість пар бітів print_bits (result); // друкуємо біти system ("PAUSE"); return 0; } |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|