Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 163, средняя оценка - 4.74
Poul
0 / 0 / 0
Регистрация: 15.01.2015
Сообщений: 1
#1

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

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

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

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

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

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

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

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

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

33
Lord_Voodoo
Супер-модератор
8607 / 2228 / 133
Регистрация: 07.03.2007
Сообщений: 10,803
Завершенные тесты: 1
01.12.2008, 10:23 #2
поищи поиском, тут кто-то даже выкладывал исходник перевода из любой СС в любую...
0
Павел086
0 / 0 / 0
Регистрация: 28.11.2008
Сообщений: 6
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;
      }
      }
0
blackw00d
0 / 0 / 0
Регистрация: 29.09.2008
Сообщений: 9
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;
}
}
}
}
0
accept
4833 / 3254 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
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;
}
0
ПРОНИКС
0 / 0 / 0
Регистрация: 08.12.2008
Сообщений: 1
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-ые не целые числа в двоичную систему
0
blackw00d
0 / 0 / 0
Регистрация: 29.09.2008
Сообщений: 9
12.12.2008, 06:16 #7
чтобы дробные переводила нужно отдельно целую и отдельно дробную части переводить, а потом они просто через точку записываются(помоему так математика учит )
можно алгоритм переноса закинуть в функцию и просто ей передовать сначала целую, а потом дробную части
0
Igoryan
0 / 0 / 0
Регистрация: 15.11.2014
Сообщений: 5
23.09.2009, 14:56 #8
люди,помогите пожалуйста написать прогу которая запрашивает у пользователя количество переменных для ввода(максимум 5) и исходя из того сколько переменных строит таблицу истинности!
0
accept
4833 / 3254 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
24.09.2009, 05:12 #9
таблица истинности строится для выражения, то есть эти переменные должны быть связаны в выражение
0
Evg
Эксперт CАвтор FAQ
18940 / 6901 / 513
Регистрация: 30.03.2009
Сообщений: 19,443
Записей в блоге: 30
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-ичного числа"
0
accept
4833 / 3254 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
24.09.2009, 10:20 #11
я б щас покороче написал, bintodec на сдвигах со сложением, а dectobin вообще бы писать не стал потому что strtol + sprintf есть

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

Возможно, что было бы более правильным, если бы вместо слова число я употреблял термин значение. Но суть от этого не меняется
1
odip
Эксперт С++
7161 / 3219 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
24.09.2009, 19:42 #13
На форуме уже обсуждали и есть готовая программа, которая переводит из любой (от 2 до 36) системы в любую (от 2 до 36).
0
Evg
Эксперт CАвтор FAQ
18940 / 6901 / 513
Регистрация: 30.03.2009
Сообщений: 19,443
Записей в блоге: 30
24.09.2009, 20:18 #14
Ну да, обсуждали, в том числе и я. Но написать заново мне показалось быстрее, чем искать

Добавлено через 1 минуту
Программа есть, например, тут. До 36-ричной системы доводится элементарно (меня тогда заломало вбивать буквы дальше, чем f)
http://www.cyberforum.ru/cpp-beginners/thread32878.html#post154443
0
accept
4833 / 3254 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
25.09.2009, 06:08 #15
Цитата Сообщение от Evg
когда у тебя есть, грубо говоря, запись в виде строки.
да я бы сделал всё на long'ах, если бы двоичное помещалось
просто, не вижу смысла преобразовывать обязательно в строку, так как это не php, где нет разницы, что там за тип, само разберётся
там, конечно, можно и залить полученное значение в строку (статическую, как я раньше делал, или передаваемую в функцию, как бы сделал сейчас)
оно просто не юзабельно (а потом обратно переводить atol'ом, чтобы прибавить его куда-нибудь)
0
Evg
Эксперт CАвтор FAQ
18940 / 6901 / 513
Регистрация: 30.03.2009
Сообщений: 19,443
Записей в блоге: 30
25.09.2009, 11:34 #16
accept, опять ты ничегоне понял. Ты мне говоришь про перевод "из двоичной системы", а вот фраза "в десятичную" - тут совершенно лишняя. Переводом в десятичную систему записи занимается процедура printf, а не твоя процедура bintodec
0
accept
4833 / 3254 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
27.09.2009, 09:28 #17
Цитата Сообщение от Evg
Переводом в десятичную систему записи
ты имеешь в виду запись == строка ?
что типа число одно а строк много
тогда лучше уж писать функцию обратную к strtol, чтобы из числа переводила в любую систему счисления, то есть делала любую запись в пределах 2 36
а вот scanf она по-твоему что делает, из записи извлекает число ?
а число тогда в каком виде, в неопределённом ?
0
odip
Эксперт С++
7161 / 3219 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
27.09.2009, 09:43 #18
тогда лучше уж писать функцию обратную к strtol, чтобы из числа переводила в любую систему счисления, то есть делала любую запись в пределах 2 36
Функция называет itoa(). В форуме есть код.

Добавлено через 7 минут
2accept:
1) Число. В языке программирования это
int a;
long a;
Само по себе число не имеет системы счисления !!!

2) 10-ричная система счисления.
Система счисления появляется когда число нужно записать в виде строки.
При этом есть два вида преобразования: строка->число и число->строка.
строка->число: функции atol(), strtol().
число->строка(): функции itoa(), snprintf().

3) преобразование числа из 10-ричной системы счисления в 16-ричную
a) взять строку, содержащую запись числа в 10-ричной системе счисления
b) применить strol() и преобразовать в число
c) применить itoa() и преобразовать число в строку с 16-ричной системой счисления
d) вывести итоговую строку

Если и после этого не понял -> прочитать с начала
или задать вопрос чего не понял.
0
Evg
Эксперт CАвтор FAQ
18940 / 6901 / 513
Регистрация: 30.03.2009
Сообщений: 19,443
Записей в блоге: 30
27.09.2009, 09:56 #19
Цитата Сообщение от accept Посмотреть сообщение
а вот scanf она по-твоему что делает, из записи извлекает число ?
а число тогда в каком виде, в неопределённом ?
Да, извлекает. Только не "в каком виде", а "из какого представления". В документации же всё написано: %d - из десятичной, %o из восьмиричной, %x из шестнадцатиричной

C
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
 
int main (void)
{
  int x = 125;
 
  printf ("dec=%d\n", x);
  printf ("oct=%o\n", x);
  printf ("hex=%x\n", x);
 
  return 0;
}
Везде подаётся одно и то же значение, но печатается разный набор символов. Потому что сичтема счисления есть только в записи числа

Со scanf'ом всё наоборот

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
 
int main (void)
{
  int x;
  char *str = "125";
 
  sscanf (str, "%d", &x);
  printf ("%d\n", x);
  sscanf (str, "%o", &x);
  printf ("%d\n", x);
  sscanf (str, "%x", &x);
  printf ("%d\n", x);
 
  return 0;
}
0
odip
Эксперт С++
7161 / 3219 / 76
Регистрация: 17.06.2009
Сообщений: 14,161
27.09.2009, 10:13 #20
sscanf() - функция выполняющее преобразование: строка->число.
sprintf(), snprint() - преобразование: число->строка.

Добавлено через 33 секунды
Вообщем никакого программирования - чистая математика
0
27.09.2009, 10:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.09.2009, 10:13
Привет! Вот еще темы с решениями:

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

Перевод целого (дробного) числа из двоичной системы счисления в десятичную
Здравствуйте. Написали программу в С++, но считает не все значения. помогите...

Перевести число из двоичной системы счисления в десятичную и наоборот
Помогите пожалуйста найти ошибки в программе, задание: составить программу,...

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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