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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.09.2011, 12:37   #1
Kholmansky
 
Регистрация: 09.09.2011
Сообщений: 9
Восклицание Системы счисления c++

Дано натуральное число n, целые числа a[0]...,a[n] такие, что каждое a[i] равно нулю или единице и a[n]!=0 . Последовательность задает двоичное представление некоторого числа p=a[n]*2^n+...+a[1]*2+a[0] . Получить последовательность нулей и единиц, задающую двоичное представление:
a) числа p+1;
б) числа p-1;
в) числа 3p.
Kholmansky вне форума Ответить с цитированием
Старый 09.09.2011, 12:39   #2
Kholmansky
 
Регистрация: 09.09.2011
Сообщений: 9
По умолчанию

Код:
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
//——————————————————
void main()
{
	setlocale(0,"Rus");	unsigned int n;
	unsigned int p = 0;
	cout << "Введите число n:";
	cin >> n;
	int *a = new int [n];
	int *c = new int [n];
	cout << "Введите последовательность из 0 и 1 : ";
	for(int i = 0; i < n; i++)
	{
		cin >> c[i];
	}
	for(int i = 0; i < n; i++)
	{
		if(c[i] < 0 || c[i] > 1)
		{
			cout << "Исправьте элементы отличные от 0 и 1: ";
			cin >> c[i];
		}
		a[i] = c[i];
	}
	cout << "{ ";
	for(int i = 0; i < n; i++)
	{
		a[n-1] = 1;
		cout << a[i] << " ";
	}
	cout << "}";
	cout << endl;
	for(int i = 0; i < n; i++)
	{
		p = p + a[i] * pow((double)n,2);
	}
	cout<<"P=" << p;
	delete a;
	delete c;
	getch();
вот нашёл p, а дальше незнаю как сделать, помогите.
Kholmansky вне форума Ответить с цитированием
Старый 09.09.2011, 13:08   #3
fizteh
Пользователь
 
Регистрация: 27.02.2011
Сообщений: 46
По умолчанию

Ну а теперь p++
и переводи в двоичную систему счисления
потом p=p-2
опять в двоичную систему счисления
p=p*3
и вновь в двоичную систему счисления
fizteh вне форума Ответить с цитированием
Старый 09.09.2011, 13:09   #4
fizteh
Пользователь
 
Регистрация: 27.02.2011
Сообщений: 46
По умолчанию

Могу прислать с кодом по переводу в двоичную систему счисления
fizteh вне форума Ответить с цитированием
Старый 09.09.2011, 13:11   #5
Kholmansky
 
Регистрация: 09.09.2011
Сообщений: 9
По умолчанию

вот я не могу сообразить как исходя из формулы перевести в двоичную
Kholmansky вне форума Ответить с цитированием
Старый 09.09.2011, 13:17   #6
fizteh
Пользователь
 
Регистрация: 27.02.2011
Сообщений: 46
По умолчанию

Код:
i=0;
while (p!=0) {
    a[i]=p%2;
    i++;
    p/=2;

  }
  a[i]=0;
потом перевернуть массив a
смотри статьи по алгоритму перевода в СС
fizteh вне форума Ответить с цитированием
Старый 09.09.2011, 23:43   #7
Ak1ra
 
Аватар для Ak1ra
 
Регистрация: 19.02.2009
Сообщений: 9
По умолчанию

Нахрена?!

Во-первых, тебе память надо выделять на 1 элемент больше, чем n, т. к. a[0]...a[n] - это n+1 элементов.

2) p-1 = та же последовательность, но a[n] (которое изначально по условию не равно нулю, а значит равно единице) присваиваешь ноль.

3) p+1:
Код:
int i=n;
do
    a[i]=~a[i]; // инверсия
    i--;
while (a[i+1]!=1 && i>0);
3) 3*p я бы придумал ещё что-то в этом направлении, но т. к. думать влом, сложил бы в столбик 3 раза, ничё сложного.

Это всё с учётом, что n - это младший разряд числа. Почитай про двоичную арифметику.

Последний раз редактировалось Ak1ra; 10.09.2011 в 00:18.
Ak1ra вне форума Ответить с цитированием
Старый 11.09.2011, 06:10   #8
Kholmansky
 
Регистрация: 09.09.2011
Сообщений: 9
По умолчанию

спасибо, но я вот так сделал и работает нормально


Код:
cout<<"двоичное представление: \n 1) числа P+1; \n 2) числа P-1; \n 3) числа 3P.\n";
	int number;
	cin>>number;
	switch (number)
	{
	case 1:p++; break;
	case 2:p--; break;
	case 3:p*=3; break;
	default:cout<<"Неизвестная операция, число P будет обратно переведено в двоичный код.";
		p=p;
	}
	int b[100] = {0};
	int j = 0;
	while (p != 0)
	{
		b[j] = p % 2;
		j++;
		p /= 2;
	}
	cout << endl;
	cout << "{ ";
	for(int i = 0; i < j; i++)
	{
		cout << b[i] << " ";
	}
	cout << "}";
Kholmansky вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Системы счисления.10->5-7. Corpinccom Помощь студентам 0 22.09.2010 12:54
Системы счисления To4H9IK Помощь студентам 2 02.10.2009 17:12
Системы счисления vdv08 Паскаль, Turbo Pascal, PascalABC.NET 1 08.05.2008 17:32