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

Системы счисления и вывод результата

03.09.2011, 18:00. Показов 4239. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, я получил задание создать программу которая принимает значение в 10-тичной системе и выводит на экран значение в любой выбранной системе от 2 до 36.
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
#include<iostream>
using namespace std;
void st(int dig,int sys);
void main()
{
    int dig,sys=0;
    cout<<"Enter a digit:\t";
    cin>>dig;
    cout<<"Enter a system(2-36):\t";
    cin>>sys;
    st(dig,sys);
    system("pause");
}
void st(int dig,int sys)
{
    int a;
    for(;dig>0;dig/=sys){
    a=(dig%sys);
    switch(a)
    {
        case 10:
            cout<<'A';
            break;
        case 11:
            cout<<'B';
            break;
        case 12:
            cout<<'C';
            break;
        case 13:
            cout<<'D';
            break;
        case 14:
            cout<<'E';
            break;
        case 15:
            cout<<'F';
            break;
        case 16:
            cout<<'G';
            break;
        case 17:
            cout<<'H';
            break;
        case 18:
            cout<<'I';
            break;
        case 19:
            cout<<'J';
            break;
        case 20:
            cout<<'K';
            break;
        case 21:
            cout<<'L';
            break;
        case 22:
            cout<<'M';
            break;
        case 23:
            cout<<'N';
            break;
        case 24:
            cout<<'O';
            break;
        case 25:
            cout<<'P';
            break;
        case 26:
            cout<<'Q';
            break;
        case 27:
            cout<<'R';
            break;
        case 28:
            cout<<'S';
            break;
        case 29:
            cout<<'T';
            break;
        case 30:
            cout<<'U';
            break;
        case 31:
            cout<<'V';
            break;
        case 32:
            cout<<'W';
            break;
        case 33:
            cout<<'X';
            break;
        case 34:
            cout<<'Y';
            break;
        case 35:
            cout<<'Z';
            break;
        default:
            cout<<a;
        }
    }
    cout<<endl;
}
Вот мои старания, в результате работы программа выводит на экран значение в нужной сис. счисления но наоборот, динамические массивы изучены не были=(
Подскажите что сделать пожалуйста.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.09.2011, 18:00
Ответы с готовыми решениями:

Перевод из одной системы счисления в другое системы счисления
Здравствуйте, Господа!8-) Бывает такая необходимость, когда нужно перевести какое-то число в другое представление, вот я решил...

Вывод результата в десятиричной системе счисления
Есть такая программа. Здесь мы складываем и вычитаем числа, а затем выводим результат в восьмеричной системе. И такой вопрос. Как вывести...

Перевести данное число из десятичной системы счисления в двоичную, восьмеричную и шестнадцатеричную системы счисления
1. Перевести данное число из десятичной системы счисления в двоичную, восьмеричную и шестнадцатеричную системы счисления. Для а) и б)...

5
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
03.09.2011, 19:06
Лучший ответ Сообщение было отмечено как решение

Решение

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
#include <stdio.h>
#include <string.h>
 
char * reverse(char * str){
    char * head = str;
    char * tail = str + strlen(str) - 1;
    
    while ( head < tail ){
        char t = *head;
        *head = *tail;
        *tail = t;
        ++head;
        --tail;
    }
    
    return str;
}
 
char * num2system(int num, int sys){
    const static char symbols[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    static char buf[64];
    char * ptr = buf;
    int sign = ( num < 0 );
    
    if ( sys < 2 || sys > 36 )
        return NULL;
    if ( sign )
        num *= -1;
    do { *ptr++ = symbols[num % sys]; } while ( num /= sys );
    if ( sign )
        *ptr++ = '-';
    *ptr = '\0';
    
    return reverse(buf);
}
 
int main(void){
    int num, sys;
    
    while ( printf("Number: ") && scanf("%d", &num) == 1 && printf("System: ") && scanf("%d", &sys) == 1 && sys > 1 && sys < 37 )
        printf("Result: %s\n", num2system(num, sys));
    
    return 0;
}
4
2 / 2 / 0
Регистрация: 31.07.2010
Сообщений: 20
17.10.2011, 21:59
То, что отображение результата в данном примере будет "зеркальным", это совершенно очевидно. Ибо данный алгоритм получает результат поразрядно (в новой СС) СПРАВА НАЛЕВО, т.е. начиная с младших разрядов. А вывод на отображение осуществляется СЛЕВА НАПРАВО, начиная с тех же младших разрядов. Как вариант предлагаю не выплевывать результат сразу на консоль, а загнать его в промежуточный массив начиная со старших индексов в сторону их уменьшения, затем подсчитать сколько символов получилось и выплюнуть их на отображение.
Примерно так:
USHORT BuffLen = 17; % 16 символов результата и нуль-терминатор
USHORT Index = BuffLen - 2;
UCHAR BuffOut[BuffLen];
BuffOut[BuffLen - 1] = '\0'; % нуль - терминатор, необходим для printf
далее в теле Вашего цикла
....
case 10:
BuffOut[Index--] = 'A';
break;
... по аналогии для всех case.

И за циклом
printf(BuffOut + Index +1)

Успехов!
0
14 / 14 / 4
Регистрация: 17.10.2011
Сообщений: 54
17.10.2011, 22:35
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
void rev(int a,int b){
    int k;
    for(int i=a;i>0;i=a)
        {k=a%b;a/=b;cout<<k<<' ';}}
void main(){
    setlocale(LC_ALL,"rus");
    int a,b; 
    cout<<"Введите число "; cin>>a; 
    cout<<"Введите систему счисления  "; cin>>b; 
    rev(a,b); cout<<'\n';}
А как здесь перевернуть порядок цифр?
0
2 / 2 / 0
Регистрация: 31.07.2010
Сообщений: 20
17.10.2011, 23:05
При таком использовании cout никак.
Могу предложить альтернативу по аналогии с вышеописанным примером:
C++
1
2
3
4
5
6
7
8
9
10
void rev(int a,int b){
        int k;
        int m[16];  макс=16  ( для примера ); может быть любым в зависимости от потребностей
        int Index = 0;
        for(int i=a;i>0;i=a)
//                {k=a%b;a/=b;cout<<k<<' ';}   старый цикл
                  { k = a % b; a /= b; m[Index++] = k; }         //  новый цикл 1
        for(Index--;Index>=0;Index--) cout<<m[Index]<<' ';  //  новый цикл 2
 
        }
1
14 / 14 / 4
Регистрация: 17.10.2011
Сообщений: 54
17.10.2011, 23:37
Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.10.2011, 23:37
Помогаю со студенческими работами здесь

Перевести данное число из десятичной системы счисления в двоичную, восьмеричную и шестнадцатеричную системы счисления
1. Перевести данное число из десятичной системы счисления в двоичную, восьмеричную и шестнадцатеричную системы счисления. 2. Перевести...

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

Решение системы линейных уравнений и вывод результата в файл
Всем привет. Кто нибудь подскажите код( конечный результат ). вот из других похожих программ элементы кода : 1) #ifndef...

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

В программу для перевода с двоичной системы счисления в десятичную добавить вывод на неправильные символы
Как в программу для перевода с двоичной системы счисления в десятичную добавить вывод на неправильные символы ? const...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru