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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 5.00
Konkin
0 / 0 / 0
Регистрация: 03.12.2010
Сообщений: 30
#1

Перевод систем счисления. - C++

03.12.2010, 23:46. Просмотров 2509. Ответов 3
Метки нет (Все метки)

Здравствуйте, сразу оговорюсь: занимаюсь программированием три дня. Я вот пытался сделать программу по переводу числа из 16-ричной системы в 10-ную.
В Визуал Студио 2008 строю решение. Все работает.

Однако вопросы:
1. Как задать чтобы буквы A, B, C, D, E, F, чтобы имели соответственно числовые значения (10, 11, 12 и т.д.)? Куда это писать в программе? Смысл такой чтоб, когда я вводил допустим число 12D, то мне D приходилось бы не в ручную писать как 13, а чтоб программа сама понимала что D=13.
2. Я смог написать программу для количества цифр в числе равное 3. Как избавится от этого ограничения? Чтобы подобный алгоритмы как тут, распространялись и на 4-ехзначные и на 5-тизначные и т.д. числа?
3. Каким образом сделать так, чтобы программа не могла посчитать, если я ввожу её цифры не из шестнадцатеричной системы счисления? Допустим ввожу 17. Надо чтоб она выдала надпись типа "счет невозможен". Как это реализовать? Использовать функцию if-else?

Буду рад вашей помощи. Вот код:

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
// Перевод числа из 16 в 10.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <locale.h>
#include <math.h>
#include <conio.h>
 
int _tmain(int argc, _TCHAR* argv[])
{
        int S, a, b, c, N[3], m, z, e;
        float x=16;
 
 
        setlocale(LC_ALL, "russian");
        printf("Программа по переводу числа (при количестве цифр равное 3)\n");
        printf("из шестнадцатеричной системы\n");
        printf("в десятичную согласно алгоритму:\n\n");
        printf("(a1*16^n)+(a2*16^(n-1)+ ... + (an*16^0)");
        printf("\n\nНажмите любую клавишу\n\n");
        _getch();
        printf("Введите первую цифру заданного числа: ");
        scanf_s("%d", &m);
        printf("Введите вторую цифру заданного числа: ");
        scanf_s("%d", &z);
        printf("Введите третью цифру заданного числа: ");
        scanf_s("%d", &e);
        {
                for(int i = 2; i>=0; i--)
                        N[i]=i;
        }
 
        a= m* pow(x,N[2]);
        b= z* pow(x,N[1]);
        c= e* pow(x,N[0]);
    S=a+b+c;
        printf("Результат в десятичной системе счисления: %d", S);
        printf("\n\nСпасибо за пользование моей программой");
        _getch();
        return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2010, 23:46     Перевод систем счисления.
Посмотрите здесь:

Программа обучения переводу чисел из десятичной системы счисления в 2 10 и 16 систем счисления C++
C++ Программа перевода систем счисления
C++ перевод чисел из систем счисления
C++ перевод систем счисления
C++ Перевод натурального числа из десятичной системы счисления в систему счисления по основанию
Задача: преобразование систем счисления C++
C++ Перевод чисел из двоичной системы счисления в систему счисления кратной степеням двойки и обратно
C++ направьте на путь истинный) перевод систем счисления
C++ Перевод строки из 2-ной системы счисления в 8-ную систему счисления
C++ Перевод систем счисления
Функция перевода систем счисления C++
Универсальный конвертер систем счисления C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DarkEL
1 / 1 / 0
Регистрация: 07.01.2010
Сообщений: 8
04.12.2010, 00:01     Перевод систем счисления. #2
Сори, нет времени разбираться именно в твоём вопросе, но я недавно сделал лабу по переводу из любой системы счисления в любую (от двоичной до тридцатишестиричной).Поковыряй код, может интересно будет)

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
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <math.h>
#include <windows.h>
 
char user_number[100],result[100],result2[100];
long int bufer;
int sys1,sys2;
char alph[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
char* zamena(char*);
int number(char);
char symbol(int);
int vbufer(char*,int);
char* perevod(int,int);
void main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    puts("введите число");
    gets(user_number);fflush(stdin);
    puts("введите исходную систему счисления (от 2 до 36)");
    scanf("%d",&sys1);fflush(stdin);
    puts("введите систему счисления результата (от 2 до 36) ");
    scanf("%d",&sys2);fflush(stdin);
    bufer=vbufer(user_number,sys1);
    strcpy(result,perevod(bufer,sys2));
    strcpy(result2,zamena(result));
    printf("%s",result2);
    getch();
}
char* zamena(char* res)
{
    char buf;
    char buf1[100];
    memset(buf1, 0, 100);
    for(int i=strlen(res);i!=0;i--)
    { res[i-1]=symbol(res[i-1]);
    buf1[strlen(res)-i]=res[i-1];
    }
    return buf1;
}
int number(char symbol)
{
    int numb=0;
    for(int i=0;symbol!=alph[i];i++)
    {
        numb+=1;
    }
    return numb;
}
 
int vbufer(char* usernumb,int system)
{ 
    int buf=0;
    for(int i=strlen(usernumb);i>0;i--)
    {
        buf+=number(usernumb[i-1])*pow((double)system,(double)(strlen(usernumb)-i));
    }
    return buf;
 
}
char* perevod(int arg,int notation)
{
    char res[100];
    memset(res, 0, 100);
    int buf=arg;
    for(int i=0;buf>=notation;i++)
    {
        res[i]=buf%notation+'0';
        buf=buf/notation;
    }
    res[strlen(res)]=buf+'0';
    return res;
}
char symbol(int numb)
{
    char symb;
    symb=alph[numb-'0'];
    return symb;
}
Konkin
0 / 0 / 0
Регистрация: 03.12.2010
Сообщений: 30
04.12.2010, 22:45  [ТС]     Перевод систем счисления. #3
Up тему
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
05.12.2010, 10:15     Перевод систем счисления. #4
как перевести из 16 в 10 код:
с++
C++
1
2
3
4
5
6
7
#include<iostream>
using namespace std;
int main(void){
int n;
cin>>hex>>n;
cout<<n;
}
/
С
C
1
2
3
4
5
6
7
#include<iostream>
int main()
{
int n;
scanf("%x",&n);
printf("%i\n",n);
}


Я вот пытался сделать программу по переводу числа из 16-ричной системы в 10-ную.
допустим хочется всё же самому, дабы попрактиковаться.

1. читаем введённое число как строку, помещаем в массив char,

2. читаем строковый массив от конца к началу, обрабатывая каждый элемент так:
2.1 результат = ноль. счетчик ноль.
2.2 число = если 0-9, то 0 -9 если abcd, то 10-15(Можно и через swich)
2.3 результат = результат+ число*16^счетчик.

3 когда прошли весь массив, выводим результат.
Yandex
Объявления
05.12.2010, 10:15     Перевод систем счисления.
Ответ Создать тему
Опции темы

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