Страница 2 из 2

Re: Задача на С++ :'(

Добавлено: 09 сен 2009, 15:37
Albor
rrrFer писал(а):Вроде через двоичную проще )).
Конечно проще. В памяти всё хранится в двоичной системе. То что ввод запрашивает восьмиричный код - так это для пользователя, машина всё равно будет обрабатывать в двоичном виде. Можно выполнить побитовое "И" копии переводимого числа с числом 3 (...0011 в двоичной ссч) и получить младшую цифру числа, сдвинуть исходное вправо на 2 разряда, опять "И" с тройкой - вторая цифра, и т.д. пока исходное число не будет равно 0. Замечаете циклическую зависимость? Главное помнить, что все преобразования - это для человеческого восприятия.
ЗЫ Данный алгоритм будет работать с положительными числами. Отрицательные хранятся в дополнительном коде, поэтому можно взять абсолютную величину числа , обработать и добавить минус.

Re: Задача на С++ :'(

Добавлено: 10 сен 2009, 00:03
Hatycuk
Albor писал(а):Конечно проще. В памяти всё хранится в двоичной системе. То что ввод запрашивает восьмиричный код - так это для пользователя, машина всё равно будет обрабатывать в двоичном виде. Можно выполнить побитовое "И" копии переводимого числа с числом 3 (...0011 в двоичной ссч) и получить младшую цифру числа, сдвинуть исходное вправо на 2 разряда, опять "И" с тройкой - вторая цифра, и т.д. пока исходное число не будет равно 0. Замечаете циклическую зависимость? Главное помнить, что все преобразования - это для человеческого восприятия.
ЗЫ Данный алгоритм будет работать с положительными числами. Отрицательные хранятся в дополнительном коде, поэтому можно взять абсолютную величину числа , обработать и добавить минус.

ммммммммда...лана бум мозговать!!!у меня еще неделя есть...если будут вопросы,буду писать...надеюсь можно)))

Re: Задача на С++ :'(

Добавлено: 10 сен 2009, 13:09
Albor
Hatycuk писал(а):ммммммммда...лана бум мозговать!!!у меня еще неделя есть...если будут вопросы,буду писать...надеюсь можно)))
Даю пример. Обратите внимание, что абсолютно без разницы в какой ссч исходное число.

Код: Выделить всё

#include <iostream>
#include <algorithm>
#include <stack>
using namespace std;
void main()
{
 stack<unsigned int> st;
 unsigned int a(0271);//185-dec, 010111001 - bin
 printf("%u(10) = %o(8) = ",a,a);
 unsigned int b;
 while(a)
 {
  b= a & 3;
  st.push(b);
  a>>=2;
 }
 while(!st.empty()) 
 {
  cout << st.top();
  st.pop();
 }
 cout<<"(4)"<<endl;
}

Re: Задача на С++ :'(

Добавлено: 11 сен 2009, 08:40
Hatycuk
[quote="Albor"]Даю пример. Обратите внимание, что абсолютно без разницы в какой ссч исходное число.

спасибо большое!!!Век буду,не забуду))...кстати в универе преподователь,посоветовал сделать примерно также)))))))))
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Спасибо всем кто помогал мне и давал советы....программа написана))))

Re: Задача на С++ :'(

Добавлено: 23 окт 2009, 07:33
atavin-ta
&quot писал(а):так вот именно что понты с переводом...посоветуйте как можно сделать перевод из восьмиричной ссч в четверичную ссч...хоть чуток напишите, я уже сама разберусь!!!
Если оба основания - степени третьего, то составь две таблицы и переводи по ним:
8 2
0 000
1 001
2 010
3 011
4 100
5 101
6 110
7 111

2 4
00 0
01 1
10 2
11 3

Сначала переведи восьмеричные цифры в тройки бит, объедини все биты, снова разбей их, но уже на пары, а пары переводи в четвертичные цифры. По аналогии можно переводить между любыми двумя подобными системами, ннапример, из двадцатисемиричной в девятиричную.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
&quot писал(а):А можно как нибудь сразу в четверичную систему???или никак вообще???
Есть два универсальных способа.
Первый:
Считая в той системе, куда переводишь, умнож кажую цифру числа на основаение системы из которой переводишь в степени номер разряда справа минус один, полученные произведения сложи.
Второй:
Считая в системе из которой переводишь, дели чеисло на основание системы, в которую переводишь и остаток пиши в текущую позицию, сдвинь позицию на один разряд в лево и далее продолжай переводить уже частное.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Как ты вообще складываешь и вычитаешь в не двоичной системе? Я так не умею.