Задача: Перевод с десятичной Cист. исчислений в 2-ую, 8-чную и 16-ричн

Тема в разделе "C/C++/C#", создана пользователем ermackprogramis, 30 ноя 2010.

Статус темы:
Закрыта.
  1. ermackprogramis

    ermackprogramis Гость

    Нужно перевести с десятичной в эти 3 системы,но с рекурсией у меня не выходит. Как его сделать?Я в этом деле новенький,помогите пожалуйста
     
  2. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Новенький в рекурсии или в системе счисления? Сам пытался что-нибудь делать? Если да - то покажи, а мы уже укажем на недостатки.
     
  3. ermackprogramis

    ermackprogramis Гость

    новенький почти у всём а особенно в рекурсии
     
  4. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Как ответил - так и помогаю. Вот пример рекурсии:
    Код (C++):
    double Factorial( int N )
    {
    double F;
    if ( N <= 1 ) {
    F = 1;
    } else {
    F = Factorial( N - 1 ) * N;
    }
    return F;
    }
     
  5. ermackprogramis

    ermackprogramis Гость

    извини что так ответил, по програмированию знаю немного, мне на завтра нужно здать лабу, как реализовать перевов в эти 3 системы, с помощью рекурсии я не знаю, пробовал через цыкл FOR, что то получилось но сказали что через цыкл нельзя, помоги если не сложно
     
  6. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Показывай что пробовал. Посмотрим что можно зделать.
     
  7. ermackprogramis

    ermackprogramis Гость

    Этот код писал не я но он пашет, как перевести в рекурсию этот код без единого цыкла я не знаю
    Код (C++):
    #include <stdio.h>
    #include <conio.h>

    #include <math.h>
    #include <string.h>
    #pragma hdrstop

    //------------------------------------------------
    #pragma argsused

    int CharToInt(char alpha)
    {
    if(alpha<58 )
    return alpha - 48;
    else
    return alpha - 55;
    }

    int ConvertToDec(char *input , int sinp )
    {
    int sum = 0;
    int pow = 1;
    for(int i = strlen(input)-1; i>=0; i--)
    {
    sum+=CharToInt(input[i]) * pow;
    pow*=sinp;
    }
    return sum;
    }

    char *convertX(int input, int sout, char *out)
    {
    while(input!=0)
    {
    float j = input%sout;
    input/=sout;
    out--;
    if(j<10)
    *out = 48 + j;
    else
    *out = 55 + j;
    }
    return out;
    }

    int main(int argc, char* argv[])
    {
    printf("Enter the number: " );
    char input[32] = "";
    scanf("%s", &input);

    printf("\nEnter from what: ");
    int sinp;
    scanf("%i", &sinp);

    printf("\nEnter to where: ");
    int sout;
    scanf("%i", &sout);

    printf("\n\n= ");

    char output[32];
    output[31] = 0;
    printf("%s", convertX(ConvertToDec(input, sinp), sout, output+31));

    //printf("\n\nNazsmite ljubuju klavisu...");
    //getch();
    system("pause");
    return 0;
    }



    А то мой код, но он только для двоичной
    Код (C++):
    #include <iostream>
    #include <math.h>

    using namespace std;

    int main()
    {
    int dec, bin=0, j;

    cin >> dec;
    for(j=0; dec>0; j++)
    {
    bin+=(dec%2)*pow(10.0,j);
    dec/=2;
    }

    cout <<bin<< endl;
    system("pause");
    return 0;
    }
     
  8. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    ermackprogramis
    Не уходи далеко. Я думаю над твоей задачей.
     
  9. ermackprogramis

    ermackprogramis Гость

    хорошо))))))) спасибо большое
     
  10. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Вот перевод в двоичную систему:
    Код (C++):
    #include <iostream.h>

    void to_bin( char *p, int v, int c )
    {
    p[c - 1] = v & 1 ? '1' : '0';
    v >>= 1;
    if ( v > 0 ) to_bin( p, v, --c );
    }

    int main()
    {
    int     v;
    char    p[33];

    cin >> v;
    memset( p, ' ', 32 );
    p[32] = '\0';
    to_bin( p, v, 32 );
    cout << p;

    return 0;
    }
    Сегодня с ног валюсь, т.ч. в данный момент больше ни чем не помогу.. Возможно завтра, если не сильно буду занят то подумаю на счет других систем счисления.
     
  11. ermackprogramis

    ermackprogramis Гость

    спасибо что зделал это!!! если будет время помоги над другими)))) плиз)))) спасибо
     
  12. ermackprogramis

    ermackprogramis Гость

    Привет,извини что беспокою, что то вышло с теми двумя вариантами?
     
  13. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Привет. А может ты сам попробуешь, а если что не получится то я тебе подскажу!)
     
  14. ermackprogramis

    ermackprogramis Гость

    Код (C++):
    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>

    using namespace std;

    const char *numset = "0123456789ABCDEF";

    void to_bin( char *p, int v, int c )
    {
    p[c - 1] = v & 1 ? '1' : '0';
    v >>= 1;
    if ( v > 0 ) to_bin( p, v, --c );
    }

    void _toOther(int dec, int m, char *str)
    {
    str[0] = numset[dec % m];
    if (dec >= 16)
    _toOther(dec / m, m, str + 1);
    else
    str[1] = 0;
    }

    void toOther(int dec, int m, char *str)
    {
    _toOther(dec, m, str);
    int l = strlen(str);
    for (int i = 0; i < l / 2; i++)
    swap(str[i], str[l - i - 1]);
    }

    int main(int argc, char argv)
    {
    int dec;
    char str[1000];
    scanf("%d", &dec);
    toOther(dec, 16, str);
    printf("%s\n", str);
    toOther(dec, 8, str);
    printf("%s\n", str);
    char    p[33];
    memset( p, ' ', 32 );
    p[32] = '\0';
    to_bin( p, dec, 32 );
    cout << p;
    system("pause");
    }
    Привет взгляни на это пожалуйста, там твой код я вклеил и еще перевод в 16 и 8 системы.Ноу восьмиричную не правильно переводит.ПОдскажи что нам надо сделать что б правильно переводило пожалуйста
     
  15. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Пфф...
    Код (C++):
    #include <iostream.h>

    char *  up_to_hex_table = "0123456789abcdef";

    void to_x( char *p, int v, int radix, int n )
    {
    p[n - 1] = up_to_hex_table[v & (radix - 1)];
    v /= radix;
    if ( v ) to_x( p, v, radix, --n );
    }

    int main()
    {
    int     v;
    char    p[33];
    char * pp;

    cin >> v;
    memset( p, ' ', sizeof( p ) - 1 );
    p[sizeof( p ) - 1] = '\0';

    to_x( p, v, 16, sizeof( p ) - 1 );

    for ( pp = p; *pp; pp++ ) if ( *pp != ' ' ) cout << *pp;

    return 0;
    }
    Не за что. Пожалуйста.

    Добавлено: P.S.: radix - это система счисления.
     
  16. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Так чем тут вся эпопея то закончилась ? ;-)
    Вообще это не самый лучший пример для рекурсии, цикл тут куда более граммотен и актуален, но т.к. задание такое, то видно ничего не поделаешь???
    Тема актуальна еще?

    Добавлено: Если да, то какие именно ее аспекты, а то я смотрю ребята уйму работы по этому топику проделали :)
     
  17. lazybiz

    lazybiz Well-Known Member
    C\C++ Team

    Регистрация:
    3 ноя 2010
    Сообщения:
    1.344
    Симпатии:
    0
    Не знаю) Я его больше не видел...

    Ну почему же?) Как лучше сделать?
     
Загрузка...
Похожие Темы - Задача Перевод десятичной
  1. Янчик
    Ответов:
    0
    Просмотров:
    486
  2. TrishaRay
    Ответов:
    1
    Просмотров:
    782
  3. elzim
    Ответов:
    0
    Просмотров:
    930
  4. ShaoKahn
    Ответов:
    1
    Просмотров:
    1.123
  5. eremin-sanek
    Ответов:
    3
    Просмотров:
    1.107
Статус темы:
Закрыта.

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