GVA SUPPORT

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

 Запитання:/*
 * Звіт
 * Горбаченка Василя Анатолійовича
 * Студента 1-го курсу. Радіофізичного факультету. Напрям підготовки: Прикладна фізика.
 * Група 3.
 * Лабораторна робота №3. Варіант 12. 
 * Завдання:              
 */
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <stdlib.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 inverse_bits (unsigned x,unsigned y,int p,int n)
{ 
  unsigned result=~x; // инверт
  unsigned z=0;

//====================================================================================
  // Готовим ЗАЧИСТКУ
  for (int i = 0 ; i < n ; i++ )
  {// заполняем еденичками z в конец
      z <<=1;
      z = z | 1;
  }
  for (int i = 0 ; i < p ; i++ )
  {// заполняем ноликами z в конец
      z <<= 1;
  }
  // ЗАЧИСТКА готова
  
  // теперь наложим нашу зачистку на x
//  x = x | z;
  
  result=  ~ ( result | z ); // делаем зачистку "00000"  того места, которое мы будем записовать
//====================================================================================
  // Готовим ЗАЧИСТКУ
  for (int i = 0 ; i < n ; i++ )
  {// заполняем еденичками z в конец
      z <<=1;
      z = z | 1;
  }
  for (int i = 0 ; i < p ; i++ )
  {// заполняем ноликами z в конец
      z <<= 1;
  }
  // ЗАЧИСТКА готова
//====================================================================================  
  //теперь приготовим те битики, которые нам надо заменить в спец формате со здвигом p
  z=0;
  for (int i = n-1 ; i >= 0 ; i-- ){
      z <<= 1;
      z = z | ( (y>>i) & 01 );      
  }

  for (int i = 0 ; i < p ; i++ ){
      z <<= 1;  
  }
//====================================================================================
  // теперь самый ответственный момент... Да, тот самый долгожданный ;)))
  result = result | z ;
//====================================================================================                                                                                          
// Усё. г.
  return result;
}

int main(){
   unsigned x, y; // створюємо цілу беззнакову двохбайтову змінну
   int n,p;
   cout << "Input x" << endl;   // підсказка користувачу
   cin >> x;   // зчитуємо число
   print_bits (x); // друкуємо біти
   
   cout << "Input y" << endl;   // підсказка користувачу
   cin >> y;   // зчитуємо число
   print_bits (y); // друкуємо біти   
   
   do
   {
        cout << "Input p" << endl;   // підсказка користувачу
        cin >> p;   // зчитуємо число
        if (p<=0) {cout<<"ERROR : N>0"<<endl;} 
   }while (p<=0);
   do
   {
        cout << "Input n" << endl;   // підсказка користувачу
        cin >> n;   // зчитуємо число
        if (n<=0) {cout<<"ERROR : N>0"<<endl;} 
   }while (n<=0);   
   
   print_bits (inverse_bits (x,y,p,n)); // друкуємо біти

   system ("PAUSE");
   return 0;
}


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