Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] перевод из десятичной в двоичную систему, и обратно 
:(
    Опции темы
Jolia
Дата 10.2.2008, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 12.3.2007

Репутация: нет
Всего: нет



Всем здрасте)) Помогите, пожааалуйста. В общем дело в том, что надо написать код для перевода из десятичной в двоичную систему и обратно для типов char, int, long int, unsigned int, unsigned long int . Для long int я код написала, для остального - по аналогии. Проблема в обратном переводе из двоичной в десятичную: когда дописываю нужную часть, сразу неправильно начинает работать первая половина задания а вторая вообще не выводится...я уже не знаю что и делать то... вот код, посмотрите пожалуйста:

Код

#include<iostream.h>
#include<math.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>

void main(void)
{long a=0, bb=0;
 char str[63];
 int i=0,k,tmp=0;
 clrscr();
 cout<<"‚ўҐ¤ЁвҐ зЁб«®: ";
 cin>>a;
 bb=a;
 while (bb!=0)
   {if ((abs(bb)%2)!=0)
      str[i]='1';
    else
      str[i]='0';
      ++i;
   bb=abs(bb)/2;
   };

   cout<<"—Ёб«® ў ¤ў®Ёз­®© бЁб⥬Ґ бзЁб«Ґ­Ёп: " ;
   for ( k=0;k<=63;k++)
   if(str[k]!='1')
   str[k]='0';
   strrev(str);
   cout<<endl;

   if (a<0)
   {for ( k=0;k<=63;k++)
     {if (str[k]!='1')
      str[k]='1';
      else
      str[k]='0';};

    for (i=63;i>=0;i--)
    {if (str[i]=='1')
    str[i]='0';
    else
    {str[i]='1';
    break;}}
   }
   cout<<str<<endl;
   getchar();
   tmp=0;
   for(i=63,k=0;i>=0;i--,k++)
   tmp=tmp+str[i]*pow(2,k);
   cout<<"‚ ¤ҐбпвЁз­®© бЁб⥬Ґ бзЁб«Ґ­Ёп: "<<tmp;
   getchar();

}


да и еще...кто знает как это все под чаровский тип сделать?
PM MAIL   Вверх
Optimus
Дата 11.2.2008, 20:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 1.9.2007

Репутация: 9
Всего: 14



При беглом просмотре заметил следующее:

Код

tmp=tmp+str[i]*pow(2,k);


здесь вы умножаете символ числа, а надо само число, делаем так
tmp = tmp + (str[i] - '0') * pow(2,k);

Код

for(i=63,k=0;i>=0;i--,k++)
здесь надо пройти цикл не до i >= 0, а до i > 0,
потому что в последней ячейке строки должен быть символ конец строки '\0',
но у вас программе я его не вижу, видима там лежит что то другое

да и еще, лучше заполнить строку нулями до ее заполнения, потому что в строке изначально могут быть единицы
--------------------
"постановка задачи наполовину решает саму задачу"
PM MAIL   Вверх
Jolia
Дата 11.2.2008, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 12.3.2007

Репутация: нет
Всего: нет



оой спасиб  smile - я исправила - вроде работает...только у меня теперь прямой перевод из десятичной в двоичную не фурычит - мне в массив из 64 символов заносится 66, причем 2 последних -буквы, неизведанно откуда взявшиеся..не подскажете чего делать? 

и если убрать кусок кода 
Код

tmp=0;
   for(i=63,k=0;i>=0;i--,k++)
   tmp=tmp+str[i]*pow(2,k);
   cout<<"‚ ¤ҐбпвЁз­®© бЁб⥬Ґ бзЁб«Ґ­Ёп: "<<tmp;
   getchar();

   то прямой перевод работает прямо круто... и в чем дело  не поймуууу(

Это сообщение отредактировал(а) Jolia - 11.2.2008, 21:22
PM MAIL   Вверх
Optimus
Дата 11.2.2008, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 1.9.2007

Репутация: 9
Всего: 14



ну, если не фурычит перевод из десятичной в двоичную, 
значит вы что то изменили в первой части, что именно ?
--------------------
"постановка задачи наполовину решает саму задачу"
PM MAIL   Вверх
Jolia
Дата 11.2.2008, 21:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 12.3.2007

Репутация: нет
Всего: нет



не  я ничего в первой половине не меняю
PM MAIL   Вверх
Optimus
Дата 11.2.2008, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 1.9.2007

Репутация: 9
Всего: 14



изменил немного программу
Код

#include<iostream.h>
#include<math.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>

void main(void)
{
  long a = 0;
  long bb = 0;
  const int N = 65;
  char str[N];
  int i = 0;
  int k;
  int tmp = 0;

  clrscr();
  cout << "‚ўҐ¤ЁвҐ зЁб«®: ";
  cin >> a;

  // zabivaem stroku simvolom '0'
  for ( i = 0; i < N - 1; ++i)
  {
    str[i] = '0';
  }

  str[N - 1] = '\0'; //  simvol konta stroki

  bb = a;
  i = 0;

  while (bb != 0)
  {
    if ((abs(bb) % 2) != 0)
      str[N - 2 - i] = '1'; // zapisovaem s konta

    ++i;
    bb = abs(bb) / 2;
   }

   cout << "—Ёб«® ў ¤ў®Ёз­®© бЁб⥬Ґ бзЁб«Ґ­Ёп: " << endl;
   cout << str << endl;
   getchar();

   tmp = 0;
   for ( i = N - 2, k = 0; i >= 0; i--, k++)
     tmp = tmp + (str[i] - '0') * pow(2,k);

   cout << "‚ ¤ҐбпвЁз­®© бЁб⥬Ґ бзЁб«Ґ­Ёп: " << tmp;
   getchar();

}

--------------------
"постановка задачи наполовину решает саму задачу"
PM MAIL   Вверх
Jolia
Дата 11.2.2008, 22:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 12.3.2007

Репутация: нет
Всего: нет



СПАСИБО СПАСИБО СПАСИБО ОГРОМНОЕ!!!!!!!!!!!!!!!!!!!!!!!!!!! ПРЯМО СЛОВ НЕТ!!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0704 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.