Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 163, средняя оценка - 4.74
Poul
Сообщений: n/a
#1

Перевод числа из двоичной в десятичную и наоборот. - C++

29.11.2008, 15:04. Просмотров 21570. Ответов 33
Метки нет (Все метки)

Помогите пожалуйста написать прогу перевода числа из двоичной системы счисления в десятичную и наоборот на языке "C".Я в этом програмировании не бум-бум.Курсовик нужно сдавать через неделю а у мя ещё и проги нет.Помогите кто может!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2008, 15:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перевод числа из двоичной в десятичную и наоборот. (C++):

Перевод числа из двоичной системы в десятичную или наоборот - C++
Нужно написать программу переводящую числа из двоичной в десятеричную систему счисления и наоборот. (Я пока что новенький искал чё-т не...

Перевод числа из двоичной системы в десятичную или наоборот - C++
Помогите написать прогу которая переводчит число из двоичной системы в десятичную или наоборот из десятичной в двоичную... Заранее...

Перевод числа из двоичной системы в десятичную - C++
Помогите написать программу для перевода из 2 в 10. Если число делится на 3, то вывести и результат деления

Перевод числа из двоичной сс в десятичную (рекурсия) - C++
Всем привет! Подкинули задачку тут: Разработать рекурсивную функцию, возвращающую значение. Для перевода числа из двоичной сс в...

Перевод вещественного числа из двоичной системы в десятичную c++ - C++
У меня есть число long double,например 15.375. я его перевёл в двоичную систему:010000000000001011110110000....00 Как перевести...

Перевод числа из двоичной в десятичную систему счисления на С++ - C++
Доброго всем дня! Мне необходимо перевести число из двоичной в десятичную с.с. с помощью рекурсии и только Вот что у меня...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Lord_Voodoo
Супер-модератор
8584 / 2184 / 61
Регистрация: 07.03.2007
Сообщений: 10,883
Завершенные тесты: 1
01.12.2008, 10:23 #2
поищи поиском, тут кто-то даже выкладывал исходник перевода из любой СС в любую...
Павел086
Сообщений: n/a
01.12.2008, 18:12 #3
у меня есть 2 проги толлько их нужно соединить в одну чтоб самому задавать из какой системы я хочу в какую перевести(10-2 и наоборот)Кто может подскажите!
Код
 #include <stdlib.h>
#include <stdio.h>

int main(void)
{
  int r,a,i,w[32];

  printf("Put the number: ");
  scanf("%d",&a);
 
  memset(w,0,sizeof(w));

  for(i=0;i<32;i++)
    {
      w[i]=((a>>i)&1);
    }
  
  printf("result: ");
  for(i=31,r=0;i>=0;i--)
    { 
      if((w[i]==1)||(r==1))
    {
      if(((i+1)/4>0)&&((i+1)%4==0)&&(i<30)&&(r==1))
        printf(".");

      printf("%d",w[i]);
      r=1;
    }
    }

  putchar('\n');
}
из 2-ой в 10-ую
Код
  #include <stdio.h>
#include <conio.h>
int main () {
    char c;
    int result=0;
    while(scanf("%c",&c) ) {
        if( (c<'0') || (c > '1') ) break;
        result<<=1;
        result+=c-'0';
    };
    printf("\n%d",result);
    getch();
};
У меня есть прога(она переводит только из 10 в 2),По задаче пользователь сам должен вводить из какой сс в какую переводим(т.е например выводится на экран"в какую сс вы хотите перевести число в 2-ую или 10-ую ")

Код
 #include <stdio.h>                                    
#include <stdlib.h>                                   
#include <math.h>                                     

int main (void)                           
{
 int a,i,x,d,n,m[1024];                                              // Вводим переменные целого типа
  float s;                                                           // Переменные вещественного типа
   printf ("Vvedite chislo v 10 systeme schislenia\n");              // Вывод на экран сообщения
   scanf ("%d",&a);                                                  // Ввод  числа
    if(a==0)                                                               
     printf ("V 2-oy systeme schislenia chislo ravno 0\n");          // Выводит на экран сообщение
      else                                                        
    {
    if (a<0)                                                         // Если а<0
     {a=-a;                                                            
      x=1;}                                    
      for (i=0;i<100;i++)                                            // Создаем цикл
      m[i]=0;                                                        // Обнуляем массив
      i=0;
     while (a>0)                                                     // Пока а больше 0
      {
      n=a%2;                                                         // В n записывается отсаток от деления а на 2
     if (n==1)                                
       {s=a*0.5-0.5;                                                 // В переменную s записываем целую часть от деления числа а на 2
        m[i]=1;                                                      // Присваеваем элементу массива единицу
        i=i+1;                                                       // Увеличиваем счётчик на единицу
        a=s;}                                                        // Записываем в а целую часть от деления числа а на 2
     else                        
      {
      s=a/2;
      m[i]=0;
      i++;
      a=s;
      }
      }
blackw00d
0 / 0 / 0
Регистрация: 29.09.2008
Сообщений: 8
09.12.2008, 16:14 #4
вот те готовая программа
Код
#include<math.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>

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

while(1){
clrscr();
printf("perevod iz 10 v 2 - 0\n"); //menu
printf("perevod iz 2 v 10 - 1\n");
printf("exit - 2\n");
scanf("%i",&v);
switch(v){
case 0:{ //perevod iz desytichnoi v dvoichnuy
printf("Vvedi chislo: ");
scanf("%li",&a);
for (i=0;i<N-1;++i) str[i]='0'; //zapolnenie stroki 0
str[N-1]='\0';
bb=a;
i=0;
while (bb!=0){
if ((abs(bb)%2)!=0) str[N-2-i]='1'; //esli ne delitsy na chelo zapisyvaem 1
++i;
bb=abs(bb)/2; //delim chuslo popolam
}
printf("V dvoichnoi: \n");
printf("%s\n",str); //vyvod poluchenogo chisla
getch();
break;
}
case 1:{ //perevod iz dvoichnoi v desytichnoi
printf("Vvedi chislo: ");
scanf("%li",&a);
tmp=0;
for (i=N-1;i>=0;i--){
tmp+=(a%10)*pow(2,N-1-i); //chislo stoychoe na N-1-i meste umnogaetsy na 2 v stepeni ego pozichii
a=a/10;
}
printf("V desytichnoi: \n");
printf("%i",tmp); //vyvod poluchenogo chisla
getch();
break;
}
case 2:{
exit(1);
}
default:{
printf("Vybran ne vernoe deistvie");
getch();
break;
}
}
}
}
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
11.12.2008, 02:06 #5
Код
#include <stdio.h>
#include <string.h>

/* пример преобразования чисел из одной системы счисления в другую */
main()
{
    long bintodec(char *);
    char *dectobin(long);
    
    char *bin = "000100";
    long dec = 32;
    
    printf("%ld\n", bintodec(bin));
    printf("%s\n", dectobin(dec));
    return 0;
}

/* bintodec:  переводит строку s из двоичной системы в десятичную */
long bintodec(char *s)
{
    long n;
        
    while (*s == '0')
        s++;
    if (strlen(s) > 32)
        return EOF;
    else if (*s == '\0')
        return 0;
    for (n = 0; *s != '\0'; s++) {
        if (*s == '0')
            continue;
        else if (*s != '1')
            return EOF;
        n += 01 << (strlen(s)-1);
    }
    return n;    
}

#define MAXINT  32    /* максимальное количество разрядов */

/* dectobin:  переводит число n из десятичной системы в двоичную */
char *dectobin(long n)
{
    static char line[MAXINT+1], *p = line;
    int i;
    
    sprintf(line, n < 0 ? "-1" : "0");
    for (i = 0; (n >> i) > 0; i++, *++p = '\0')
        ;
    for (i = 0; (n >> i) > 0; i++)
        *--p = ((n >> i) & 01) ? '1' : '0';
    return line;
}
ПРОНИКС
Сообщений: n/a
11.12.2008, 18:21 #6
Цитата Сообщение от blackw00d Посмотреть сообщение
вот те готовая программа
Код
#include<math.h>
#include<conio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>

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

while(1){
clrscr();
printf("perevod iz 10 v 2 - 0\n"); //menu
printf("perevod iz 2 v 10 - 1\n");
printf("exit - 2\n");
scanf("%i",&v);
switch(v){
case 0:{ //perevod iz desytichnoi v dvoichnuy
printf("Vvedi chislo: ");
scanf("%li",&a);
for (i=0;i<N-1;++i) str[i]='0'; //zapolnenie stroki 0
str[N-1]='\0';
bb=a;
i=0;
while (bb!=0){
if ((abs(bb)%2)!=0) str[N-2-i]='1'; //esli ne delitsy na chelo zapisyvaem 1
++i;
bb=abs(bb)/2; //delim chuslo popolam
}
printf("V dvoichnoi: \n");
printf("%s\n",str); //vyvod poluchenogo chisla
getch();
break;
}
case 1:{ //perevod iz dvoichnoi v desytichnoi
printf("Vvedi chislo: ");
scanf("%li",&a);
tmp=0;
for (i=N-1;i>=0;i--){
tmp+=(a%10)*pow(2,N-1-i); //chislo stoychoe na N-1-i meste umnogaetsy na 2 v stepeni ego pozichii
a=a/10;
}
printf("V desytichnoi: \n");
printf("%i",tmp); //vyvod poluchenogo chisla
getch();
break;
}
case 2:{
exit(1);
}
default:{
printf("Vybran ne vernoe deistvie");
getch();
break;
}
}
}
}
Санёк Это понятна а как сделать чтоб она переводила ещё 10-ые отрицательные и 10-ые не целые числа в двоичную систему
blackw00d
0 / 0 / 0
Регистрация: 29.09.2008
Сообщений: 8
12.12.2008, 06:16 #7
чтобы дробные переводила нужно отдельно целую и отдельно дробную части переводить, а потом они просто через точку записываются(помоему так математика учит )
можно алгоритм переноса закинуть в функцию и просто ей передовать сначала целую, а потом дробную части
Igoryan
Сообщений: n/a
23.09.2009, 14:56 #8
люди,помогите пожалуйста написать прогу которая запрашивает у пользователя количество переменных для ввода(максимум 5) и исходя из того сколько переменных строит таблицу истинности!
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
24.09.2009, 05:12 #9
таблица истинности строится для выражения, то есть эти переменные должны быть связаны в выражение
Evg
Эксперт CАвтор FAQ
17621 / 5845 / 375
Регистрация: 30.03.2009
Сообщений: 16,118
Записей в блоге: 26
24.09.2009, 09:12 #10
C
1
2
3
    long bintodec(char *);
...
    printf("%ld\n", bintodec(bin));
accept, можно сделать щелчок пальцем, заменить "%ld" на "%lx" и вуаля - у нас заработал перевод в 16-ричную систему. Перевод из одной системы в другую подразумевает строковое представление чисел на входе и на выходе. Твоя функция bintodec НЕ занимается "переводом из 2-ичной в 10-чную", она просто занимается "разбором 2-ичного числа"
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
24.09.2009, 10:20 #11
я б щас покороче написал, bintodec на сдвигах со сложением, а dectobin вообще бы писать не стал потому что strtol + sprintf есть

Цитата Сообщение от Evg
она просто занимается "разбором 2-ичного числа"
разбором в десятичное
Evg
Эксперт CАвтор FAQ
17621 / 5845 / 375
Регистрация: 30.03.2009
Сообщений: 16,118
Записей в блоге: 26
24.09.2009, 11:44 #12
Цитата Сообщение от accept Посмотреть сообщение
разбором в десятичное
Нет. Когда ты говоришь о сколькито-ричном представлении числа, то говорить можно только тогда, когда у тебя есть, грубо говоря, запись в виде строки. Ты же просто занимаешься переводом числа из строквого двоичного представления в число. Число не бывает двоичным, десятичным и т.п. Число оно само по себе, а вот **-ричным бывает только запись числа. Т.е. если у тебя есть 10 яблок, то количество яблок не меняется от того, в сколькиричном представлении ты записываешь их количество. Твоя процедура bintodec формирует число, но не десятичную запись числа, поэтому по большому счёту действие процедуры не отражает её название

Возможно, что было бы более правильным, если бы вместо слова число я употреблял термин значение. Но суть от этого не меняется
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
24.09.2009, 19:42 #13
На форуме уже обсуждали и есть готовая программа, которая переводит из любой (от 2 до 36) системы в любую (от 2 до 36).
Evg
Эксперт CАвтор FAQ
17621 / 5845 / 375
Регистрация: 30.03.2009
Сообщений: 16,118
Записей в блоге: 26
24.09.2009, 20:18 #14
Ну да, обсуждали, в том числе и я. Но написать заново мне показалось быстрее, чем искать

Добавлено через 1 минуту
Программа есть, например, тут. До 36-ричной системы доводится элементарно (меня тогда заломало вбивать буквы дальше, чем f)
http://www.cyberforum.ru/cpp-beginne...tml#post154443
accept
4821 / 3241 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
25.09.2009, 06:08 #15
Цитата Сообщение от Evg
когда у тебя есть, грубо говоря, запись в виде строки.
да я бы сделал всё на long'ах, если бы двоичное помещалось
просто, не вижу смысла преобразовывать обязательно в строку, так как это не php, где нет разницы, что там за тип, само разберётся
там, конечно, можно и залить полученное значение в строку (статическую, как я раньше делал, или передаваемую в функцию, как бы сделал сейчас)
оно просто не юзабельно (а потом обратно переводить atol'ом, чтобы прибавить его куда-нибудь)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.09.2009, 06:08
Привет! Вот еще темы с ответами:

Перевод числа из двоичной системы счисления в десятичную - C++
написать программу, которая переводит число из двоичной системы счисления в десятичную

Перевод целого (дробного) числа из двоичной системы счисления в десятичную - C++
Здравствуйте. Написали программу в С++, но считает не все значения. помогите найти ошибку. #include &lt;stdio.h&gt; #include &lt;math.h&gt; ...

Перевод чисел из двоичной в десятичную - C++
помогите сделать ее более длинной и чтоб можно было писать еще значения и она не закрывалась , заранее спасибо #include &lt;iostream&gt; ...

Перевод в из двоичной в десятичную систему - C++
Народ! Надо реализовать программу, которая считывает строку в виде двоичного числа и переводит ее десячтичную! Алгоритм я помню перевода...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
25.09.2009, 06:08
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru