Язык С++. Функции пользователя
Побудувати схему алгоритму , блок-схему та розробити програмний додаток, що включає реалізацію функції
"Написати функцію, яка повертає число, одержане з цілого числа x, в якому нулі встановлені в n розрядів, починаючи з позиції p (крайній правий біт вважати нульовим за номером). Перевіряти правильність значень n і p. " |
Что-то не понятно мне задание...
Приведите пример входных и выходных данных. И описание как получилось |
функция пользователя С++
Не уверена в правильности и блок-схема не получается.
#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; } |
Часовой пояс GMT +4, время: 01:58. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.