Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.59/204: Рейтинг темы: голосов - 204, средняя оценка - 4.59
0 / 0 / 0
Регистрация: 15.01.2015
Сообщений: 1

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

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

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста написать прогу перевода числа из двоичной системы счисления в десятичную и наоборот на языке "C".Я в этом програмировании не бум-бум.Курсовик нужно сдавать через неделю а у мя ещё и проги нет.Помогите кто может!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.11.2008, 15:04
Ответы с готовыми решениями:

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

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

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

33
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
01.12.2008, 10:23
поищи поиском, тут кто-то даже выкладывал исходник перевода из любой СС в любую...
0
Павел086
01.12.2008, 18:12
у меня есть 2 проги толлько их нужно соединить в одну чтоб самому задавать из какой системы я хочу в какую перевести(10-2 и наоборот)Кто может подскажите!
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 #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-ую
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
  #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-ую ")

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
 #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 / 0 / 0
Регистрация: 29.09.2008
Сообщений: 9
09.12.2008, 16:14
вот те готовая программа
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#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
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
11.12.2008, 02:06
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#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
ПРОНИКС
11.12.2008, 18:21
Цитата Сообщение от blackw00d Посмотреть сообщение
вот те готовая программа
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#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 / 0 / 0
Регистрация: 29.09.2008
Сообщений: 9
12.12.2008, 06:16
чтобы дробные переводила нужно отдельно целую и отдельно дробную части переводить, а потом они просто через точку записываются(помоему так математика учит )
можно алгоритм переноса закинуть в функцию и просто ей передовать сначала целую, а потом дробную части
0
0 / 0 / 0
Регистрация: 15.11.2014
Сообщений: 5
23.09.2009, 14:56
люди,помогите пожалуйста написать прогу которая запрашивает у пользователя количество переменных для ввода(максимум 5) и исходя из того сколько переменных строит таблицу истинности!
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
24.09.2009, 05:12
таблица истинности строится для выражения, то есть эти переменные должны быть связаны в выражение
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
24.09.2009, 09:12
C
1
2
3
    long bintodec(char *);
...
    printf("%ld\n", bintodec(bin));
accept, можно сделать щелчок пальцем, заменить "%ld" на "%lx" и вуаля - у нас заработал перевод в 16-ричную систему. Перевод из одной системы в другую подразумевает строковое представление чисел на входе и на выходе. Твоя функция bintodec НЕ занимается "переводом из 2-ичной в 10-чную", она просто занимается "разбором 2-ичного числа"
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
24.09.2009, 10:20
я б щас покороче написал, bintodec на сдвигах со сложением, а dectobin вообще бы писать не стал потому что strtol + sprintf есть

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

Возможно, что было бы более правильным, если бы вместо слова число я употреблял термин значение. Но суть от этого не меняется
1
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
24.09.2009, 19:42
На форуме уже обсуждали и есть готовая программа, которая переводит из любой (от 2 до 36) системы в любую (от 2 до 36).
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
24.09.2009, 20:18
Ну да, обсуждали, в том числе и я. Но написать заново мне показалось быстрее, чем искать

Добавлено через 1 минуту
Программа есть, например, тут. До 36-ричной системы доводится элементарно (меня тогда заломало вбивать буквы дальше, чем f)
https://www.cyberforum.ru/cpp-... post154443
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
25.09.2009, 06:08
Цитата Сообщение от Evg
когда у тебя есть, грубо говоря, запись в виде строки.
да я бы сделал всё на long'ах, если бы двоичное помещалось
просто, не вижу смысла преобразовывать обязательно в строку, так как это не php, где нет разницы, что там за тип, само разберётся
там, конечно, можно и залить полученное значение в строку (статическую, как я раньше делал, или передаваемую в функцию, как бы сделал сейчас)
оно просто не юзабельно (а потом обратно переводить atol'ом, чтобы прибавить его куда-нибудь)
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
25.09.2009, 11:34
accept, опять ты ничегоне понял. Ты мне говоришь про перевод "из двоичной системы", а вот фраза "в десятичную" - тут совершенно лишняя. Переводом в десятичную систему записи занимается процедура printf, а не твоя процедура bintodec
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
27.09.2009, 09:28
Цитата Сообщение от Evg
Переводом в десятичную систему записи
ты имеешь в виду запись == строка ?
что типа число одно а строк много
тогда лучше уж писать функцию обратную к strtol, чтобы из числа переводила в любую систему счисления, то есть делала любую запись в пределах 2 36
а вот scanf она по-твоему что делает, из записи извлекает число ?
а число тогда в каком виде, в неопределённом ?
0
Эксперт С++
 Аватар для odip
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
27.09.2009, 09:43
тогда лучше уж писать функцию обратную к 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
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
27.09.2009, 09:56
Цитата Сообщение от 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
7176 / 3234 / 82
Регистрация: 17.06.2009
Сообщений: 14,164
27.09.2009, 10:13
sscanf() - функция выполняющее преобразование: строка->число.
sprintf(), snprint() - преобразование: число->строка.

Добавлено через 33 секунды
Вообщем никакого программирования - чистая математика
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.09.2009, 10:13
Помогаю со студенческими работами здесь

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

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

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

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

Перевод числа из двоичной в десятичную не используя циклы
Может кто подскажет? Задача: Напишите программу, которая складывает два двоичных числа (не более трёх разрядов). В начале...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru