GVA SUPPORT

Відповідь на запитання № 1300735982
Text:
	ФІО = Горбаченко В.А.

 Запитання:/* Ефименко. Лаба 3. Варіант 8
 * Написати функцію, яка повертає число, одержане з цілого числа х, в якому 
 * інвертовані 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;
}



====================================	
Ваша відповідь