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

Albor
Сообщения: 491
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

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

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

ммммммммда...лана бум мозговать!!!у меня еще неделя есть...если будут вопросы,буду писать...надеюсь можно)))
Albor
Сообщения: 491
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

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;
}
Hatycuk
Сообщения: 11
Зарегистрирован: 05 сен 2009, 12:56

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

спасибо большое!!!Век буду,не забуду))...кстати в универе преподователь,посоветовал сделать примерно также)))))))))
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Спасибо всем кто помогал мне и давал советы....программа написана))))
atavin-ta
Сообщения: 585
Зарегистрирован: 30 янв 2009, 06:38

&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 писал(а):А можно как нибудь сразу в четверичную систему???или никак вообще???
Есть два универсальных способа.
Первый:
Считая в той системе, куда переводишь, умнож кажую цифру числа на основаение системы из которой переводишь в степени номер разряда справа минус один, полученные произведения сложи.
Второй:
Считая в системе из которой переводишь, дели чеисло на основание системы, в которую переводишь и остаток пиши в текущую позицию, сдвинь позицию на один разряд в лево и далее продолжай переводить уже частное.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Как ты вообще складываешь и вычитаешь в не двоичной системе? Я так не умею.
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Ответить