Показать сообщение отдельно
Старый 21.11.2012, 15:44   #1 (permalink)
гаяне
Новичок
 
Регистрация: 12.11.2012
Сообщений: 8
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Откорректируйте программу С++

Составить алгоритм программы для выполнения следующей задачи : " функція, яка повертає число, одержане з цілого числа x, в
якому всі розряди, розташовані лівіше центральної позиції, замінені на
симетричні відносно центру розряди з правої частини числа (крайній
правий біт вважати нульовим за номером). "

Не знаю правильно ли это? Может кто подскажет как составить блок-схему ато не получается что-то.

#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