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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.92
sheill
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 54
#1

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

23.04.2011, 19:26. Просмотров 3637. Ответов 7
Метки нет (Все метки)

Помогите пожалуйста написать программу для перевода чисел из одной системы в другую. Используемые системы счисления: от двоичной до десятеричной. Нужно сделать возможность выбора системы счисления.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.04.2011, 19:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перевод из одной системы счисления в другую. (C++):

Перевод из одной системы счисления в другую - C++
Суть задачи такова: Написать программу , которая переводит число из 2-й системы счистления в 12-ю через 10-ю. Заранее спасибо!)Язык С++ ...

Перевод из одной системы счисления в другую - C++
перевод чисел(в том числе с дробной частью) из сс q в сс p.(q, p от 2 до 16) помогите протестить: #include <iostream> #include...

Перевод из одной системы счисления в другую - C++
Посмотрите, пожалуйста, кому не сложно код в с++. При компиляции выдает ошибку invalid function declaration Текст задачи: Десятичное...

Перевод из одной системы счисления в другую - C++
Помогите разобраться с переводом из любой системы счисления в любую. Хотел составить программу типа: Основание системы (вход): 15 ...

Перевод из одной системы счисления в другую - C++
Проблема с переводом из двоичной системы в десятичную. Допустим у нас есть такое число 11101101 это 237 моя программа хорошо переводит, но...

Перевод из одной системы счисления в другую - C++
помогите перевести из 8 ричной системы счисления в 16 ричную ----> Перевод из системы по основанию 8 в систему по основанию 16 ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
23.04.2011, 19:42 #2
В чём проблема? Варианты "Нужно написать программу", "Не знаю программирование" и т.п. не принимаю.
sheill
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 54
23.04.2011, 20:22  [ТС] #3
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<ctype.h>
#include<math.h>
#include<stdlib.h>
 
void IsErrorNotation(int i){ /*проверка ошибок ввода*/
    if(i<2||i>16){
        puts("Error: numeric system must be between [2...16]");
        exit(1);
    }
}
 
void IsErrorNumber(char* a, int basefrom){  /*проверка ошибок ввода*/
    if(basefrom<=10){
        for(; *a; ++a){
            if(*a<48||*a>=48+basefrom){
                printf("Error: all inputted number symbols must be between [0...%d]", basefrom-1);
                exit(1);
            }
        }
    }
}
 
int main(){
    int i=0, x=0, basefrom, baseto;
    char a[20]={'\0'}, b[20], *p=a;
    puts("Input initial numeric system [2...16]"); /*исходная система счисления*/
    scanf("%d", &basefrom);
    IsErrorNotation(basefrom);
    puts("Input final numeric system [2...16]"); /*результирующая система счисления*/
    scanf("%d", &baseto);
    IsErrorNotation(baseto);
    getchar();
    printf("Input number in %d notation:\n", basefrom); /*само число*/
    gets(a);
    IsErrorNumber(a, basefrom);
    while(*(p+1)) ++p;
    for(; p>=a; --p, ++i){
        if(*p>'9'){
            *p=toupper(*p);
            *p-=7;
        }
        x+=(*p-48)*pow(basefrom, i);
    }
    printf("number in 10 notation:\n%d\n", x);
    i=0;
    while (x){
        b[i]=x%baseto;
        x/=baseto;
        ++i;
    }
    printf("number in %d notation:\n", baseto);
    while(--i>=0){
        b[i]>9? printf("%c", b[i]+55): printf("%d", b[i]);
    };
}
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
23.04.2011, 21:20 #4
sheill, ага, круто, код. И что? Повторяю вопрос: В чём проблема?
sheill
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 54
23.04.2011, 22:57  [ТС] #5
Этот код не работает вот что пишет:
Код
1>------ Build started: Project: kursovaya, Configuration: Debug Win32 ------
1>Compiling...
1>kursovaya.cpp
1>c:\users\user\documents\visual studio 2008\projects\kursovaya\kursovaya\kursovaya.cpp(28) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>        c:\program files (x86)\microsoft visual studio 9.0\vc\include\stdio.h(306) : see declaration of 'scanf'
1>c:\users\user\documents\visual studio 2008\projects\kursovaya\kursovaya\kursovaya.cpp(31) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>        c:\program files (x86)\microsoft visual studio 9.0\vc\include\stdio.h(306) : see declaration of 'scanf'
1>c:\users\user\documents\visual studio 2008\projects\kursovaya\kursovaya\kursovaya.cpp(35) : warning C4996: 'gets': This function or variable may be unsafe. Consider using gets_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1>        c:\program files (x86)\microsoft visual studio 9.0\vc\include\stdio.h(279) : see declaration of 'gets'
1>c:\users\user\documents\visual studio 2008\projects\kursovaya\kursovaya\kursovaya.cpp(43) : error C2668: 'pow' : ambiguous call to overloaded function
1>        c:\program files (x86)\microsoft visual studio 9.0\vc\include\math.h(575): could be 'long double pow(long double,int)'
1>        c:\program files (x86)\microsoft visual studio 9.0\vc\include\math.h(527): or       'float pow(float,int)'
1>        c:\program files (x86)\microsoft visual studio 9.0\vc\include\math.h(489): or       'double pow(double,int)'
1>        while trying to match the argument list '(int, int)'
1>Build log was saved at "file://c:\Users\user\Documents\Visual Studio 2008\Projects\kursovaya\kursovaya\Debug\BuildLog.htm"
1>kursovaya - 1 error(s), 3 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
23.04.2011, 23:27 #6
Заменить 43 строку на
C++
1
x+=(*p-48)*pow(static_cast< double >(basefrom), i);
sheill
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 54
24.04.2011, 00:54  [ТС] #7
silent_1991, Большое спасибо!)))
gimla
0 / 0 / 0
Регистрация: 12.05.2016
Сообщений: 1
12.05.2016, 10:19 #8
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<ctype.h>
#include<math.h>
#include<stdlib.h>
 
void IsErrorNotation(int i){ /*проверка ошибок ввода*/
    if(i<2||i>16){
        puts("Error: numeric system must be between [2...16]");
        exit(1);
    }
}
 
void IsErrorNumber(char* a, int basefrom){  /*проверка ошибок ввода*/
    if(basefrom<=10){
        for(; *a; ++a){
            if(*a<48||*a>=48+basefrom){
                printf("Error: all inputted number symbols must be between [0...%d]", basefrom-1);
                exit(1);
            }
        }
    }
}
 
int main(){
    int i=0, x=0, basefrom, baseto;
    char a[20]={'\0'}, b[20], *p=a;
    puts("Input numeric system [2...16]"); /*исходная система счисления*/
    scanf("%d", &basefrom);
    IsErrorNotation(basefrom);
    puts("Input final numeric system [2...16]"); /*результирующая система счисления*/
    scanf("%d", &baseto);
    IsErrorNotation(baseto);
    getchar();
    printf("Input number in %d notation:\n", basefrom); /*заданное число*/
    gets(a);
    IsErrorNumber(a, basefrom);
    while(*(p+1)) ++p;
    for(; p>=a; --p, ++i){
        if(*p>'9'){
            *p=toupper(*p);
            *p-=7;
        }
        m+=(*p-48)*pow(static_cast< double >(basefrom), i);
    }
    printf("number in 10 notation:\n%d\n", m);
    i=0;
    while (m){
        b[i]=m%baseto;
        m/=baseto;
        ++i;
    }
    printf("number in %d notation:\n", baseto);
    while(--i>=0){
        b[i]>9? printf("%c", b[i]+55): printf("%d", b[i]);
    };
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2016, 10:19
Привет! Вот еще темы с ответами:

Перевод с одной системы счисления в другую - C++
Приветствую вас, товарищи программисты. Помогите пожалуйста. Не могу решить, маленькую проблемку. Как сделать так, что-бы при вводе...

Перевод из одной системы счисления в другую - C++
Составить программу перевода натурального числа из позиционной системы счисления с основанием m в позиционную систему счисления с...

Перевод из одной системы счисления в другую - C++
Может кто подскажет ссылки где можно почитать про перевод чисел из однйо системы счисления в другую? К примеру из двоичной в...

Перевод из одной системы счисления в другую от 2 до 36 - C++
Помогите пожалуйсто, сколько сижу ничего стоющего не приходит в голову! Дано целое неотрицательное число в I-ричной системе счисления....


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
12.05.2016, 10:19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru