2 / 2 / 0
Регистрация: 05.03.2020
Сообщений: 58

Перевод числа из Восьмеричной системы исчисления в Двоичную

05.03.2020, 02:13. Показов 4042. Ответов 30

Студворк — интернет-сервис помощи студентам
Доброго времени суток. В этому году решил связать свою жизнь с прогой, поступив в универ, но пока не разу этому не обрадовался, хотя может что измениться еще. В общем ладно, ближе к теме. Мне нужно сделать перевод чисел из одной системы исчисления в другую ( 8 -> 2).
Вот код, который работает, но не правильно выводит числа после запятой. ( сделано мягко говоря ущербно).
P.s. Я показывал этот код преподу, он мне сказал, что лучше сделать через " Сдвиг массива " ( он говорит что можно сделать 2 масива. один масив будет делить число через %2 и свигать его, второй масив будет выводить эти часла с помощью getchar, типо он привер пример 123, в масиве будет как 9 симоволов, 001 010 011)
Если у кого то есть минута времени и желание хоть немного уменьшить количество моих проблем, буду Очень благодарен за помощь
C
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
#include <stdio.h>
int main(){
float N;
int x, y, a, b, c, d, e, f, g, h;
printf ( "Plese, enter number[4,4]: ");
scanf("%f",&N);
a=N/1000;
b=(N-a*1000)/100;
c=(N-a*1000-b*100)/10;
d=N-a*1000-b*100-c*10;
if (N>=1000 && N<10000)
{
    if (N>=100 && N<1000)
    {
        if (N>=10 && N<100)
        {
            if (N>=0 && N<10)
                y=3;
            else y=2;
        }
        else y=1;
    }
    else y=0;
}
for(y; y<=3; y++)
{
    switch(y)
    {
        case 0: x=a;
        break;
        case 1: x=b;
        break;
        case 2: x=c;
        break;
        case 3: x=d;
        break;
    }
switch (x)
{
case 1:
printf("001");
break;
case 2:
printf("010");
break;
case 3:
printf("011");
break;
case 4:
printf("100");
break;
case 5:
printf("101");
break;
case 6:
printf("100");
break;
case 7:
printf("111");
break;
case 0:
printf("000");
break;
}
 
}
printf(",");
N=N-a*1000-b*100-c*10-d;
                    e=N*10;
                    f=N*100-e*10;
                    g=N*1000-f*100-e*10;
                    h=N*10000-g*1000-f*100-e*10;
        if (N>=0.1 && N<1)
{
    if (N>=0.01 && N<0.1)
    {
        if (N>=0.001 && N<0.01)
        {
            if (N>=0.0001 && N<0.001)
                {
                    y=4;
                }
            else {
                    y=3;
            }
        }
        else {
                y=2;
            }}
    else {
            y=1;
    }
 
}
for(y; y<=4; y++)
{
  switch(y)
    {
        case 1: x=e;
        break;
        case 2: x=f;
        break;
        case 3: x=g;
        break;
        case 4: x=h;
        break;
    }
switch (x)
{
case 1:
printf("001");
break;
case 2:
printf("010");
break;
case 3:
printf("011");
break;
case 4:
printf("100");
break;
case 5:
printf("101");
break;
case 6:
printf("100");
break;
case 7:
printf("111");
break;
case 0:
printf("000");
break;
}
 
}
return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.03.2020, 02:13
Ответы с готовыми решениями:

Перевод числа из восьмеричной системы в двоичную
Доброго времени суток. Одна из частей курсача - взять из строки вида &quot;3 217E&quot;(полином) число &quot;217&quot;(оно должно быть в...

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

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

30
2 / 2 / 0
Регистрация: 05.03.2020
Сообщений: 58
05.03.2020, 16:38  [ТС]
Студворк — интернет-сервис помощи студентам
Ахах, да чистый чистый ) Но я не учил ещё с++, по этому у меня не примут работу на этом языке
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
05.03.2020, 16:40
Цитата Сообщение от Keitaro_Fox Посмотреть сообщение
на этом языке
На каком этом? Тут С++ и не пахнет
0
Злостный нарушитель
 Аватар для Verevkin
10889 / 5825 / 1288
Регистрация: 12.03.2015
Сообщений: 26,888
05.03.2020, 16:41
Цитата Сообщение от Keitaro_Fox Посмотреть сообщение
Ахах, да чистый чистый ) Но я не учил ещё с++, по этому у меня не примут работу на этом языке
Это Чистый Си без плюсов. Чо тебе не нравится?
0
2163 / 1241 / 511
Регистрация: 11.10.2018
Сообщений: 6,372
05.03.2020, 19:34
C++
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
#include <stdio.h>
#include <stdlib.h>
#define N 32
#define SIZE 320  //размер массива для двоичных данных
 
char Tbl[8][3] = {"000",  //0
                  "001",  //1
                  "010",  //2
                  "011",  //3
                  "100",  //4
                  "101",  //5
                  "110",  //6
                  "111"}; //7
 
int n, i, o;
//==========================================
char Str[N] = {'\0'}, StrO[SIZE] = {'\0'};
 
void LocalStrNCpy(char *dst, char *src, int n)
{
    int i;
 
    for(i = 0; i < n; i++)
        *dst++ = *src++;
}
 
int main()
{
    printf("Hello world!\n");
    /*
    printf("Vvedite chislo v 8-ichnoi sisteme N = ");
    scanf("%s", Str);
    */
    strcpy(Str, "220.001");  //Debug
 
    n = strlen(Str);
    o = 0;
    for(i = 0; i < n; i++)
    {
        //StrO[3*i] = Tbl[Str[i]];
        if(Str[i] != '.')
        {
            strncpy(&StrO[o], &Tbl[Str[i] - 48][0], 3);
            //LocalStrNCpy(&StrO[o], &Tbl[Str[i] - 48][0], 3);
            o += 3;
        }
        else
        {
            StrO[o] = '.';
            o++;
        }
 
    }
    printf("\n\nStrO = %s", StrO);
 
    return 0;
}
1
2 / 2 / 0
Регистрация: 05.03.2020
Сообщений: 58
05.03.2020, 21:16  [ТС]
Очень красиво сделано, жаль только что не работает снова
C
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
#include <stdio.h>
#include <stdlib.h>
#define N 32
#define SIZE 320  //размер массива для двоичных данных
 
char Tbl[8][3] = {"000",  //0
                  "001",  //1
                  "010",  //2
                  "011",  //3
                  "100",  //4
                  "101",  //5
                  "110",  //6
                  "111"}; //7
 
int n, i, o;
//==========================================
char Str[N] = {'\0'}, StrO[SIZE] = {'\0'};
 
void LocalStrNCpy(char *dst, char *src, int n)
{
    int i;
 
    for(i = 0; i < n; i++)
        *dst++ = *src++;
}
 
int main()
{
 
    printf("Vvedite chislo v 8-ichnoi sisteme N = ");
    scanf("%s", Str);
 
    strcpy(Str, "220.001");  //Debug
 
    n = strlen(Str);
    o = 0;
    for(i = 0; i < n; i++)
    {
        StrO[3*i] = Tbl[Str[i]];
        if(Str[i] != '.')
        {
            strncpy(&StrO[o], &Tbl[Str[i] - 48][0], 3);
            LocalStrNCpy(&StrO[o], &Tbl[Str[i] - 48][0], 3);
            o += 3;
        }
        else
        {
            StrO[o] = '.';
            o++;
        }
 
    }
    printf("\n\nStrO = %s", StrO);
 
    return 0;
}
0
Злостный нарушитель
 Аватар для Verevkin
10889 / 5825 / 1288
Регистрация: 12.03.2015
Сообщений: 26,888
05.03.2020, 21:29
Цитата Сообщение от Keitaro_Fox Посмотреть сообщение
жаль только что не работает снова
Тебе, блин, не угодишь, кокетка!
1
2 / 2 / 0
Регистрация: 05.03.2020
Сообщений: 58
05.03.2020, 21:42  [ТС]
Все хорошо, к тому же, понятно, больше спасибо. У меня просто окно между парами было, пиво дало свое )
Сначала ваш код у меня не компилировался, но потом я добавил библиотеку, поменял false на 0. И вуаля, один геморрой с моих плечей упал
C
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/******************************************************************************/
/*                          Verevkin, CodeBlocks c++                          */
/******************************************************************************/
 
// d:\Soft\CodeBlocks\share\CodeBlocks\templates\wizard\console\cpp\main.cpp
//#include <iostream> <-- раскомментить, если надо
 
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdbool.h>
#include <locale.h>
/* 123.45 = 1 * 8^2 + 2 * 8^1 + 3 * 8^0 + 4 * 8^-1 + 5 * 8^-2 =
          = 64 + 16 + 3 + 0.5 + 0.078125 = 83,578125
 
   1010011.100101 = 0x53 + 1/2 + 1/16 + 1/64 =
                  = 83 + 0.5 + 0,0625 + 0,015625 = 83,578125 */
 
#define isoctal(x) (x > 0x2F && x < 0x38)
 
// обрезка нулей слева и справа
char* trim_zeroes(char* src)
{
  // обрезка справа
  char* ptr = src + strlen(src) - 1;
  while (ptr > src && *ptr == '0') *ptr-- = 0;
 
  // обрезка слева
  ptr = src;
  while (*ptr == '0') ptr++;
 
  if (!*ptr) strcpy(src, "0");
  else strcpy(src, ptr);
 
  return src;
}
 
char* oct2bin(char* src, char* dest)
{
  static const char* TRIADE[8] =
    {"000", "001", "010", "011", "100", "101", "110", "111"};
 
  char* ptr = dest;
  *dest = 0;
 
  while (*src)
    if isoctal(*src) strcat(ptr, TRIADE[*src++ - 0x30]);
    else strncat(ptr, src++, 1); // копирование невосьмеричного символа
 
  return trim_zeroes(dest);
}
 
bool is_oct_str(char* src)
{
  if (!src || !*src) return 0;
 
  int pc = 0;
  while (*src)
  {
    if (*src == '.') pc++;
    else if (!isoctal(*src)) return 0;
    src++;
  }
 
  return pc < 2;
}
 
int main(int argc, char** argv)
{
  setlocale(LC_ALL, "Rus");
  system("chcp 65001 & cls");
  char key, src[340], dest[1024];
 
  do
    {
      do printf("\n  Введи восьмеричное число: ");
      while (!gets(src));
 
      if (!is_oct_str(src))
    {
      printf(" !! Неверный ввод.\n");
      continue;
    }
 
    printf(" ## Двоичный вид: %s\n", oct2bin(src, dest));
 
      printf("\n >> Ещё разок? [y/n]: ");
      key = getch();
    }
    while (key != 'n' && key != 'N' );
 
  printf("\n >> Жмакни чо-нить для выхода...");
  getch(); // ожидание клавиши
 
  return 0;
}
0
Злостный нарушитель
 Аватар для Verevkin
10889 / 5825 / 1288
Регистрация: 12.03.2015
Сообщений: 26,888
05.03.2020, 21:47
Цитата Сообщение от Keitaro_Fox Посмотреть сообщение
И вуаля, один геморрой с моих плечей упал
Геморрой в другом месте бывает. Хотя, если вместо головы - жопа, то да, всё правильно.
-------
Сдай сначала. Когда сдавать будешь, снимай видео. Я хочу это увидеть.
1
2 / 2 / 0
Регистрация: 05.03.2020
Сообщений: 58
05.03.2020, 21:50  [ТС]
Ахах, да я просто не особо в кодах шарю, как вы поняли )
По этому из за своего непонимания могу доставлять проблемы.
Дальше не по теме
К ста, чуть не забыл. По поводу видоса ( на 1-й странице ). Я выкупаю что это рофл. Но скажу вам там, я сам вырос на границе с Россией ( 50км ). Через мой город ходил прямой поезд на Москву. Так что в каком то роде я сам не в восторге от того что мне приходиться жить с хохлами ( для меня это украиноговорящие селюки ) и учиться хоть и в престижном но вузе, где много кто быкует на тебя из за языка. Так вот, к чему я. Для меня вы все братья, особенно когда мне очень нужна помощь
0
05.03.2020, 21:56

Не по теме:

Цитата Сообщение от Keitaro_Fox Посмотреть сообщение
Для меня вы все братья, особенно когда мне очень нужна помощь
Ага, верю! :D
--------
А я вырос среди совка, когда украины ещё не было.
Но тёща у меня - хохлушка с Полтавы. Тоже меня любит/уважает, когда ей чото надо.
Недавно через мой город стали ходить прямые поезда в Крым.

0
2163 / 1241 / 511
Регистрация: 11.10.2018
Сообщений: 6,372
06.03.2020, 08:17
Поправка.
Цитата Сообщение от Keitaro_Fox Посмотреть сообщение
C++
1
2
strncpy(&StrO[o], &Tbl[Str[i] - 48][0], 3);
 LocalStrNCpy(&StrO[o], &Tbl[Str[i] - 48][0], 3);
- обе функции не надо вызывать, только 1 из них. 1-ая - встроенная функция, 2-ую - я написал.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.03.2020, 08:17

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

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

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

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

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


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

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

Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru