Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
2 / 2 / 0
Регистрация: 05.03.2020
Сообщений: 58

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

05.03.2020, 02:13. Показов 3954. Ответов 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
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
05.03.2020, 16:41
Цитата Сообщение от Keitaro_Fox Посмотреть сообщение
Ахах, да чистый чистый ) Но я не учил ещё с++, по этому у меня не примут работу на этом языке
Это Чистый Си без плюсов. Чо тебе не нравится?
0
2163 / 1241 / 511
Регистрация: 11.10.2018
Сообщений: 6,357
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
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
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
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
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,357
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
Ответ Создать тему
Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru