Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.79/34: Рейтинг темы: голосов - 34, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 25.05.2019
Сообщений: 27
1

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

13.07.2019, 07:44. Показов 6324. Ответов 20
Метки си (Все метки)

Author24 — интернет-сервис помощи студентам
Не получается перевернуть число,когда использую функцию Perevorot выводит все единицы.
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
#include <stdio.h>
#include <locale.h>
#include <conio.h>
 
int LengthNum(int num, int y) //длина числа
{
    while (num)
    {
        num /= 10;
        y++; //счетчик
    }
    return y;
}
int Perevorot(int n)
{
    unsigned int m = 0;
    while (n != 0)
    {
        m = n % 10;
        n = n / 10;
    }
    printf("%d", m);
    return m;
}
 
int SystemFunc(int b, int q) //b-число;q-цифра обозначающая систему счисления.
{
    int c;
    if (b >= q)
    {
        int Ncount = 1;
        while (b >= q)
        {
            for (int i = 0; i < LengthNum(b, Ncount); i++)
            {
                if (b / q != 0)
                {
                    Ncount++;
                }
                c = b % q;
                printf("%d", c);
                b = b / q;
            }
            printf("\n");
            for (int i = 0; i < LengthNum(b, Ncount); i++)
            {
                    Perevorot(c);
            }
            
        }
    }
    else
        printf("%d", b%q);
 
 
    return c;
}
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int c,numb, system;
    printf("Введите число\n");
    scanf("%d", &numb);
    printf("Введите номер системы счисления\n");
    scanf("%d", &system);
    SystemFunc(numb, system);
    _getch();
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.07.2019, 07:44
Ответы с готовыми решениями:

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

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

Перевод из десятичной(двоичной) системы счисления в двоичную(десятичную)
Всем добрый день, кто может помочь как можно реализовать данную задачу на С? Уже долго мучаюсь с...

Перевод из одной системы счисления в другую
Задача следующая: 1)Пользователь вводит числа в 16 системе в бессконечную строку (список), по...

20
Злостный нарушитель
9492 / 5139 / 1172
Регистрация: 12.03.2015
Сообщений: 24,221
13.07.2019, 09:24 2
Цитата Сообщение от prog21346 Посмотреть сообщение
Не получается перевернуть число
Зачем это нужно?
0
Диссидент
Эксперт C
27709 / 17325 / 3811
Регистрация: 24.12.2010
Сообщений: 38,979
13.07.2019, 11:36 3
prog21346, вам нужно из 1234 сделать 4321?
C
1
2
3
4
5
6
7
8
9
10
11
int Perevorot(int n)
{
    int m = 0;
    while (n != 0)
    {
        m = 10*m + n % 10;
        n = n / 10;
    }
    printf("%d", m);
    return m;
}
0
0 / 0 / 0
Регистрация: 25.05.2019
Сообщений: 27
14.07.2019, 04:59  [ТС] 4
Verevkin, это нужно для корректной записи числа,после произведенных над числом действий в функции "SystemFunc".

Добавлено через 1 минуту
Байт, я пробовал данную функцию,в конце концов почему-то вместо нужного числа выводит только единицы.
0
Модератор
Эксперт по электронике
8946 / 6712 / 921
Регистрация: 14.02.2011
Сообщений: 23,687
14.07.2019, 06:51 5
Цитата Сообщение от prog21346 Посмотреть сообщение
я пробовал данную функцию,
данную это какую? свою? или Байта?
Цитата Сообщение от prog21346 Посмотреть сообщение
почему-то вместо нужного числа выводит только единицы.
неудивительно
Цитата Сообщение от prog21346 Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
int Perevorot(int n)
{
    unsigned int m = 0;
    while (n != 0)
    {
        m = n % 10;
        n = n / 10;
    }
    printf("%d", m);
    return m;
}
сколько у тебя цифр в числе? а сколько выводишь на экран?
0
0 / 0 / 0
Регистрация: 25.05.2019
Сообщений: 27
14.07.2019, 08:57  [ТС] 6
ValeryS, они обе(моя и Байта) выводят единицы, количество цифр в числе произвольное,оно зависит от системы счисления,в которую переводиться число, и от числа,которое переводим в эту систему,но обычно от 2 до 6.Выводятся на экран все цифры, просто каждое из них заменяется на 1.
Перевод из десятичной системы счисления в другую
0
Модератор
Эксперт по электронике
8946 / 6712 / 921
Регистрация: 14.02.2011
Сообщений: 23,687
14.07.2019, 09:50 7
Цитата Сообщение от prog21346 Посмотреть сообщение
.Выводятся на экран все цифры, просто каждое из них заменяется на 1
теперь посмотри как ты её вызываешь
Цитата Сообщение от prog21346 Посмотреть сообщение
C
1
2
3
4
         for (int i = 0; i < LengthNum(b, Ncount); i++)
            {
                    Perevorot(c);
            }
зачем вызывать столько раз?
просмотри свою функцию SystemFunc и прокомментируй каждую строчку, лично я, алгоритм понять не в силах
0
0 / 0 / 0
Регистрация: 25.05.2019
Сообщений: 27
14.07.2019, 10:55  [ТС] 8
ValeryS, я понял в чем ошибка,функция Perevorot не будет работать корректно,т.к. на вход она получает последнее значение С, поэтому и выводит единицы.

int SystemFunc(int b, int q) //b-число;q-цифра обозначающая систему счисления.
{
int c;
if (b > q) //если число больше чем система счисления идем дальше
{
int Ncount = 1; //счетчик длины числа,нужен чтоб ограничивать цикл for
for (int i = 0; i < LengthNum(b, Ncount); i++)
{
if (b / q != 0) //если при деление числа на систему счисления получается не ноль,то мы увеличиваем счетчик
{
Ncount++;
}
c = b % q; //остаток от деления числа на система счисление,его запоминаем в с и потом выводим.
printf("%d", c); //вывод

b = b / q; //изменяем число b, чтобы дальше продолжить корректно переводить его в нужную систему счисления
}
printf("\n");

for (int i = 0; i < LengthNum(b, Ncount); i++) //пользуемся циклом
{
Perevorot(c); //Функция переворота числа
}
}
else
printf("%d", b%q); //в случае если число меньше чем система счисления единажды берем и записываем остаток от деления.


return c;
}
0
Модератор
Эксперт по электронике
8946 / 6712 / 921
Регистрация: 14.02.2011
Сообщений: 23,687
14.07.2019, 11:34 9
Цитата Сообщение от prog21346 Посмотреть сообщение
printf("%d", b%q); //в случае если число меньше чем система счисления единажды берем и записываем остаток от деления.
зачем? остаток от деления будет равен самому числу

Добавлено через 2 минуты
Цитата Сообщение от prog21346 Посмотреть сообщение
c = b % q; //остаток от деления числа на система счисление,его запоминаем в с и потом выводим.
printf("%d", c); //вывод
теперь переведи при помощи такой конструкции из десятичной в шеснадцатиричную
0
Злостный нарушитель
9492 / 5139 / 1172
Регистрация: 12.03.2015
Сообщений: 24,221
14.07.2019, 11:37 10
Цитата Сообщение от prog21346 Посмотреть сообщение
это нужно для корректной записи числа,после произведенных над числом действий в функции "SystemFunc".
Всё равно не понимаю, зачем что-то переворачивать? Почему сразу не обрабатывать правильные числа?
Покажи условие задачи.
0
0 / 0 / 0
Регистрация: 25.05.2019
Сообщений: 27
14.07.2019, 11:42  [ТС] 11
ValeryS, в 16 переводится,нужно просто потом там где остаток равен 10-15 заменить его на букву,но щас не до этом. "зачем? остаток от деления будет равен самому числу" отличное замечание,щас исправлю,спасибо.
0
Модератор
Эксперт по электронике
8946 / 6712 / 921
Регистрация: 14.02.2011
Сообщений: 23,687
14.07.2019, 11:45 12
Цитата Сообщение от prog21346 Посмотреть сообщение
ValeryS, в 16 переводится,нужно просто потом там где остаток равен 10-15 заменить его на букву,но щас не до этом
ну а тридцатидвуричную
подход у тебя не верный, хранить нужно не число а строку, тогда все решается элементарно
поищи по форуму несколько раз решались такие задачи
0
Диссидент
Эксперт C
27709 / 17325 / 3811
Регистрация: 24.12.2010
Сообщений: 38,979
14.07.2019, 11:48 13
Цитата Сообщение от prog21346 Посмотреть сообщение
там где остаток равен 10-15 заменить его на букву,
C
1
char c = (r <10) ? '0' + r : 'A' + r - 10;
0
0 / 0 / 0
Регистрация: 25.05.2019
Сообщений: 27
14.07.2019, 11:52  [ТС] 14
Verevkin, посмотри фото,которое я кидал,там третья строчка вывода-это двоичная запись числа 12,но задом-наперед,потому функция устроена так,что делит число и запоминает остаток и записывает его,в жизни же,когда происходит перевод,ты делаешь все то же самое,но записывать число ты начинаешь с самого последнего остатка от деления,потому что такие правила.

Добавлено через 3 минуты
ValeryS, хорошо,попробую как ты сказал.

Добавлено через 58 секунд
Байт, спасибо.
0
Злостный нарушитель
9492 / 5139 / 1172
Регистрация: 12.03.2015
Сообщений: 24,221
14.07.2019, 11:56 15
Цитата Сообщение от prog21346 Посмотреть сообщение
посмотри фото,которое я кидал,там третья строчка вывода-это двоичная запись числа 12,но задом-наперед,потому функция устроена так,что делит число и запоминает остаток и записывает его,в жизни же,когда происходит перевод,ты делаешь все то же самое,но записывать число ты начинаешь с самого последнего остатка от деления,потому что такие правила.
Зачем ты это делаешь-то? Я не понимаю, объясни.
Покажи условие задачи.
0
0 / 0 / 0
Регистрация: 25.05.2019
Сообщений: 27
14.07.2019, 11:59  [ТС] 16
Verevkin, от скуки.Сам себе задачу придумал.
0
Злостный нарушитель
9492 / 5139 / 1172
Регистрация: 12.03.2015
Сообщений: 24,221
14.07.2019, 12:00 17
Цитата Сообщение от prog21346 Посмотреть сообщение
Сам себе задачу придумал.
Покажи её условие. Сформулируй, что программа получает на вход, и что она должна выдать на выходе.
0
0 / 0 / 0
Регистрация: 25.05.2019
Сообщений: 27
14.07.2019, 12:01  [ТС] 18
Verevkin, написать программу,которая будет переводить десятичное число в выбранную пользователем систему счисления.
0
Злостный нарушитель
9492 / 5139 / 1172
Регистрация: 12.03.2015
Сообщений: 24,221
14.07.2019, 12:10 19
Цитата Сообщение от prog21346 Посмотреть сообщение
переводить десятичное число в выбранную пользователем систему счисления
Ты, разве, не в курсе, что все числа в цифровой электронике хранятся, обрабатываются и передаются только в двоичном виде? Системы счисления - это мнемоника для ввода/выода с учётом восприятия инфы человеком.
Вот тебе, короче, функция. Перестань морочать голову себе и окружающим.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// функция переводит число N в строку по основанию системы счисления В,
// дополняя слева нулями до длины А.
char* Dec2Numb(int N, uint8_t A, uint8_t B, char* buff)
{
  int idx = 0;
  char digit, temp[8 * sizeof(N) + 1];
  memset(temp, 0, sizeof(temp));
 
  // преобразование
  do
  {
    digit = N % B;
    N /= B;
    temp[idx++] = (digit > 9) ? digit + 55 : digit + 48;
  } while (N);
 
  // дополнение нулями до заданной длины
  while (strlen(temp) < A) temp[idx++] = 0x30;
 
  temp[idx] = 0;
  strcpy(buff, strrev(temp));
  return buff;
}
0
0 / 0 / 0
Регистрация: 25.05.2019
Сообщений: 27
14.07.2019, 12:14  [ТС] 20
Verevkin, спасибо.
0
14.07.2019, 12:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.07.2019, 12:14
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru