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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 163, средняя оценка - 4.74
Poul
Сообщений: n/a
29.11.2008, 15:04     Перевод числа из двоичной в десятичную и наоборот. #1
Помогите пожалуйста написать прогу перевода числа из двоичной системы счисления в десятичную и наоборот на языке "C".Я в этом програмировании не бум-бум.Курсовик нужно сдавать через неделю а у мя ещё и проги нет.Помогите кто может!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Lord_Voodoo
Супер-модератор
 Аватар для Lord_Voodoo
8501 / 2168 / 61
Регистрация: 07.03.2007
Сообщений: 10,836
Завершенные тесты: 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
4838 / 3237 / 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
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
24.09.2009, 05:12     Перевод числа из двоичной в десятичную и наоборот. #9
таблица истинности строится для выражения, то есть эти переменные должны быть связаны в выражение
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,126
Записей в блоге: 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
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
24.09.2009, 10:20     Перевод числа из двоичной в десятичную и наоборот. #11
я б щас покороче написал, bintodec на сдвигах со сложением, а dectobin вообще бы писать не стал потому что strtol + sprintf есть

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

Возможно, что было бы более правильным, если бы вместо слова число я употреблял термин значение. Но суть от этого не меняется
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
24.09.2009, 19:42     Перевод числа из двоичной в десятичную и наоборот. #13
На форуме уже обсуждали и есть готовая программа, которая переводит из любой (от 2 до 36) системы в любую (от 2 до 36).
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,126
Записей в блоге: 26
24.09.2009, 20:18     Перевод числа из двоичной в десятичную и наоборот. #14
Ну да, обсуждали, в том числе и я. Но написать заново мне показалось быстрее, чем искать

Добавлено через 1 минуту
Программа есть, например, тут. До 36-ричной системы доводится элементарно (меня тогда заломало вбивать буквы дальше, чем f)
http://www.cyberforum.ru/cpp-beginne...tml#post154443
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
25.09.2009, 06:08     Перевод числа из двоичной в десятичную и наоборот. #15
Цитата Сообщение от Evg
когда у тебя есть, грубо говоря, запись в виде строки.
да я бы сделал всё на long'ах, если бы двоичное помещалось
просто, не вижу смысла преобразовывать обязательно в строку, так как это не php, где нет разницы, что там за тип, само разберётся
там, конечно, можно и залить полученное значение в строку (статическую, как я раньше делал, или передаваемую в функцию, как бы сделал сейчас)
оно просто не юзабельно (а потом обратно переводить atol'ом, чтобы прибавить его куда-нибудь)
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,126
Записей в блоге: 26
25.09.2009, 11:34     Перевод числа из двоичной в десятичную и наоборот. #16
accept, опять ты ничегоне понял. Ты мне говоришь про перевод "из двоичной системы", а вот фраза "в десятичную" - тут совершенно лишняя. Переводом в десятичную систему записи занимается процедура printf, а не твоя процедура bintodec
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
27.09.2009, 09:28     Перевод числа из двоичной в десятичную и наоборот. #17
Цитата Сообщение от Evg
Переводом в десятичную систему записи
ты имеешь в виду запись == строка ?
что типа число одно а строк много
тогда лучше уж писать функцию обратную к strtol, чтобы из числа переводила в любую систему счисления, то есть делала любую запись в пределах 2 36
а вот scanf она по-твоему что делает, из записи извлекает число ?
а число тогда в каком виде, в неопределённом ?
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
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) вывести итоговую строку

Если и после этого не понял -> прочитать с начала
или задать вопрос чего не понял.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16825 / 5246 / 321
Регистрация: 30.03.2009
Сообщений: 14,126
Записей в блоге: 26
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.09.2009, 10:13     Перевод числа из двоичной в десятичную и наоборот.
Еще ссылки по теме:

C++ Перевод числа из двоичной системы в десятичную или наоборот
Перевод вещественного числа из двоичной системы в десятичную c++ C++
Перевод из двоичной в десятичную систему исчисления C++

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

Или воспользуйтесь поиском по форуму:
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
27.09.2009, 10:13     Перевод числа из двоичной в десятичную и наоборот. #20
sscanf() - функция выполняющее преобразование: строка->число.
sprintf(), snprint() - преобразование: число->строка.

Добавлено через 33 секунды
Вообщем никакого программирования - чистая математика
Yandex
Объявления
27.09.2009, 10:13     Перевод числа из двоичной в десятичную и наоборот.
Ответ Создать тему
Опции темы

Текущее время: 20:46. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru