Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2012, 21:35   #1
sofalina
Пользователь
 
Регистрация: 11.11.2012
Сообщений: 14
По умолчанию Лабораторная работа Язык С++

Программа к лабораторной работе сделана , работает, но преподаватель сказал упростить. Не могу понять как еще проще. Буду очень благодарна за помощь и блок-схему.
Здание построить схему алгоритма и разработать програмное приложение включающее реализацию функции для виполнения задачи:
" Написать функцию, котороая возвращает число, полученое с целого числа 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;

}
sofalina вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Лабораторная работа xWoWx Фриланс 5 26.06.2012 09:39
Лабораторная работа Otonasi Помощь студентам 1 29.03.2012 14:34
лабораторная работа ALEX777a Фриланс 3 20.02.2012 20:32
лабораторная работа iron_cross Помощь студентам 6 23.11.2010 16:31
[C++]Лабораторная работа Sudeki Помощь студентам 0 17.11.2009 20:02