• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Откорректируйте программу С++

гаяне

Ученик
Регистрация
12 Ноя 2012
Сообщения
8
Реакции
0
Баллы
0
Откорректируйте программу С++

Составить алгоритм программы для выполнения следующей задачи : " функція, яка повертає число, одержане з цілого числа 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;

}
 
Назад
Сверху