Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Перевод из одной СС в другую


Автор: vic_vic 2.2.2008, 11:42
Помогите плз! На бумаге все Ок! А дальше ...:(

Объявите основной класс с именем bin. Объявите функцию show(), которая выводит значение числа в бинарном коде. 
Объявите второстепенный класс oct  и функцию show(), функция вывода значения в восмеричном коде. 

Автор: warmonger_ 2.2.2008, 12:44
можно так smile :
Код

#include <iostream>


class Bin
{
public:
    Bin(int val=0): m_value(val) { }
    ~Bin() { }
    virtual void show()
    {
        char buf[100];
        itoa(m_value, buf, 2);
        std::cout<<    buf<<std::endl;
    }

protected:
    int m_value;
};

class Oct: public Bin
{
public:
    Oct(int val=0): Bin(val) { }
    ~Oct() { }
    virtual void show()
    {
        char buf[10];
        itoa(m_value, buf, 8);
        std::cout<<    buf<<std::endl;
    }
};


Автор: Fin 2.2.2008, 13:25
Что то типа этого:
Код

#include <stdio.h>
class bin
{
protected:
   int number;
public:
   void setNumber(int num) {number=num;};

   bin() {setNumber(0);};
   bin(int num) {setNumber(num);};
   virtual ~bin() {};
   virtual void show()
   {
      unsigned int mask=1;
      int i=8*sizeof(int);
      mask <<=(i-1);
      do
      {
         if ((number & mask) != 0) printf("1");
         else printf("0");
         mask >>=1;
         i--;
      } while(i != 0);
      printf("\n");
   };
};

class oct:public bin
{
public:
   oct():bin() {};
   oct(int num):bin(num) {};
   virtual ~oct() {};
   virtual void show()
   {
      const static char buf[9]="01234567";
      unsigned int temp=(unsigned int)number;
      int len=sizeof(int)*8/3;
      if (((sizeof(int)*8) % 3) !=0) len++;
      int *li= new int[len];
      int i=0;
      while(i<len) li[i++]=0;
      i=0;
      while (temp >0)
      {
         li[i++]=temp %8;
         temp>>=3;
      }
      i=len-1;
      while(i >=0) printf("%c", buf[li[i--]]);
      delete [] li;
      printf("\n");
   };
};

int main()
{
   bin *sl=new bin(10);
   sl->show();
   
   delete sl;
   sl=new oct(10);
   sl->show();  
   delete sl; 
   return 0;
}

Автор: vic_vic 2.2.2008, 14:15
warmonger_ 
Попробовал твой код, при компиляции в MS Visual C++ ошибок не выдает,но в консоле у меня выводит следующее:

00000000000000000000000000001010
00000000012
Press any key to continue

А мне нужно ввести к примеру любой код(101110) а в ответе должно быть 56

Автор: Fin 2.2.2008, 15:22
vic_vic, а самому написать обратное преобразование?

Автор: warmonger_ 2.2.2008, 15:23
Цитата(vic_vic @  2.2.2008,  10:42 Найти цитируемый пост)
которая выводит значение числа в бинарном коде.


Цитата(vic_vic @  2.2.2008,  10:42 Найти цитируемый пост)
функция вывода значения в восмеричном коде.

Код

Bin b(4);
b.show(); // выводит 100



Код

Oct o(8);
o.show(); // выводит 10


все правильно. 



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)