Задача: Системы исчисление [перевод из системы в систему dec,hex, 4-на

Тема в разделе "C/C++/C#", создана пользователем -, 8 сен 2009.

Статус темы:
Закрыта.
  1. Гость

    Привет тем кто это читает...

    задача заключается в следующем...нужно сложить/вычесть два числа в шестнадцатиричной ссч,а вывод результата должен быть в четверичной системе!!!причем прога должна сообщать, если при сложении произошло переполнение,а при вычитании мы получили отрицательный результат!!! все бы ничего,но не могу сделать перевод из шестнадцатиричной системы в четверичной!!!даже примерно не знаю как делать!!!

    помогите пожалуйста,просить больше некого...думаю для вас это не слишком тяжелая задача...
     
  2. Гость

    как ты хранишь шестнадцатеричные цифры?
    переполнение чего?
    в каком формате нужно представить результат - сохранить в переменную или просто вывести на экран?
    Задача действительно очень простая, перевод из системы в систему - один из обязательных примитивов.
    Ответь на вопросы - кину набросок кода
     
  3. European

    Регистрация:
    4 сен 2006
    Сообщения:
    2.580
    Симпатии:
    0
    Как чего? Арифметическое переполнение...
     
  4. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Код (C++):
    /*Cложить/вычесть два числа в шестнадцатиричной ссч,а вывод результата должен быть в четверичной системе!!!*/

    /*
    codeby.net
    Autor: DarkKnight125
    */

    #include <iostream>

    using namespace std;

    class Overflow{};
    const char SS_16[] = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    const char SS_4[] = {'0','1','2','3'};

    int tranclate16to10 (char *ch)
    {
    int Iter = 1; //Множитель
    int Result = 0; //Результат
    for (int i=strlen(ch)-1; i >= 0; i--)
    {
    bool isGood = false; //Если символ входит в 16-ый диапозон 0..F
    for (int j=0; j < strlen(SS_16); j++)
    {
    if (ch[i] == SS_16[j])
    {
    Result += Iter * j;
    Iter*=16;
    isGood = true;
    break;
    }
    }
    if (!isGood) return -1; //Вернем -1 если какой то из символов не входит в 16-ый диапозон
    }
    return Result;
    }

    char* tranclate10to4(int Value)
    {
    char* buffer = new char[65];
    memset(buffer,0,65);
    char* tmp = buffer;

    while (int(Value / 4) != 0)
    {
    *tmp = SS_4[Value%4];
    tmp++;
    Value = (int)Value/4;
    }
    *tmp = SS_4[Value%4];

    char* Result = new char[65];
    memset(Result,0,65);
    tmp = Result;
    for (int i=strlen(buffer)-1; i >= 0; i--)
    {
    *tmp = buffer[i];
    tmp++;
    }
    delete[] buffer;
    return Result;
    }
    void main(void)
    {
    setlocale(LC_ALL,"Russian");
    char ch1[9];
    char ch2[9];

    int a = 0,b = 0, Result = 0;
    cout<<"Введите 1-ое число (16-системе счислений) : ";
    cin.getline(ch1,8);
    cout<<"Введите 2-ое (16-системе счислений) : ";
    cin.getline(ch2,8);
    a = tranclate16to10(ch1);
    b = tranclate16to10(ch2);

    if (a == -1 || b == -1)
    {
    cout<<endl<<"Error : Ошибка ввода шестнацатиричного числа"<<endl;
    return;
    }

    cout<<endl<<"1. Сложение"<<endl<<"2. Вычитание"<<endl<<endl
    <<"Сделайте выбор : ";
    int Input;
    cin>>Input;
    switch (Input)
    {
    case 1:
    try{
    Result = a+b;
    if (Result < 0)
    throw Overflow();

    }
    catch(Overflow)
    {
    cout<<endl<<"Error : Ошибка переполнение"<<endl;
    return;
    }; break;
    case 2:
    Result = a - b;
    if (Result<0)
    {
    cout<<endl<<"Error : Ошибка отрицательный результат"<<endl;

    return;
    }
    break;
    default:
    cout<<endl<<"Error : Ошибка при выборе операции"<<endl;
    return;
    }

    cout<<endl<<endl<<"Результат"<<endl;
    cout<<tranclate10to4(Result)<<" (четверичной системе)"<<endl;
    cout<<Result<<" (Десятичная система)";

    }
     
Загрузка...
Похожие Темы - Задача Системы исчисление
  1. Янчик
    Ответов:
    0
    Просмотров:
    474
  2. TrishaRay
    Ответов:
    1
    Просмотров:
    778
  3. elzim
    Ответов:
    0
    Просмотров:
    929
  4. ShaoKahn
    Ответов:
    0
    Просмотров:
    1.116
  5. eremin-sanek
    Ответов:
    3
    Просмотров:
    1.104
Статус темы:
Закрыта.

Поделиться этой страницей