Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты данной рассылки

Гаряка Асмик
Статус: Профессор
Рейтинг: 6888
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2664
∙ повысить рейтинг »
Абаянцев Юрий Леонидович aka Ayl
Статус: Профессионал
Рейтинг: 2265
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / C/C++

Номер выпуска:1628
Дата выхода:24.01.2011, 18:30
Администратор рассылки:Киселёва Алёна aka Verena (Профессор)
Подписчиков / экспертов:322 / 186
Вопросов / ответов:1 / 2

Вопрос № 181939: Здравствуйте! У меня возникли сложности с таким вопросом: Написать программу на C, перевода из любой системы счисления в любую...



Вопрос № 181939:

Здравствуйте! У меня возникли сложности с таким вопросом:
Написать программу на C, перевода из любой системы счисления в любую

Отправлен: 19.01.2011, 14:06
Вопрос задал: Наталия (Посетитель)
Всего ответов: 2
Страница вопроса »


Отвечает Гаряка Асмик (Профессор) :
Здравствуйте, Наталия!

Здесь предлагается возможность перевода из любой системы счисления в любую от двоичной до 128-ричной. В последней после цифр используются буквы: сначала строчные латинские, затем заглавные латинские, а потом то же с кириллицей. Всего получается 128 символов. Переводить можно числа с любым количеством знаков. Но здесь мы ограничимся 128-разрядными числами.
Код:
// 181939.cpp : Defines the entry point for the console application.
//
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include <windows.h>
#include <locale.h>

const char *NumSet=
"0123456789"\
"abcdef"\
"ghijklmnopqrstuvwxyz"\
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"\
"абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; //128


int convert(int base_in, int base_out, char* num)
{
return 0;
}

int main(int argc, char* argv[])
{
int base1, base2;
char number[32];
char number1[32];
int n=0;

setlocale(LC_CTYPE, "Russian");
printf("\nВведите основания:");
scanf("%d %d",&base1,&base2);

printf("\nВведите число в основании %d:");
scanf("%s", number);
int l=strlen(number)-1;
for(int i=l;i>=0;i--)
{
int pos;
pos=strchr(NumSet,number[i])-NumSet;
n*=base1;
n+=pos;
}
itoa(n,number1,base2);
printf(number1);
return 0;
}


Ответ отправил: Гаряка Асмик (Профессор)
Ответ отправлен: 19.01.2011, 20:17
Номер ответа: 265515
Армения, Ереван
Тел.: 37493385079
Адрес сайта: http://rus-kniga.biz/tv11073127-3155712.html
ICQ # 166073765
Mail.ru-агент: hasmikgaryaka@bk.ru
Абонент Skype: hasmik7

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 265515 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Ответ поддержали (отметили как правильный): 1 чел.



    Отвечает denura (4-й класс) :
    Здравствуйте, Наталия!
    Решение я взял из архива собственных задач (когда-то делал это сам):

    #include<conio.h>
    #include<stdio.h>
    #include<stdlib.h>

    int d,s,s1,s2,n,n1[10];

    void main(void)
    {
    printf("\nВведите число:");
    scanf("%d",&n);
    printf("\nИз какой ситемы в какую:");
    scanf("%d %d",&s1,&s2);
    s=0; d=1;
    while (n) {s=s+d*(n%10); n=n/10; d=d*s1;}
    d=0;
    while (s) {n1[d]=s%s2; s=s/s2; d=d+1;}
    for(s=d-1;s!=-1;s--) printf("%d",n1[s]);
    getch();
    }
    При переводе в системы счисления с основанием более 10, где в представлении числа используются буквы, вид конечного числа будет не совсем корректен.
    -----
    ∙ Отредактировал: Киселёва Алёна aka Verena (Профессор)
    ∙ Дата редактирования: 20.01.2011, 14:21 (время московское)

    Ответ отправил: denura (4-й класс)
    Ответ отправлен: 19.01.2011, 22:29
    Номер ответа: 265517
    Россия, Нижний Новгород

    Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 265517 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:


  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.



    В избранное