| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > системы исчесления |
| Автор: DESert 29.12.2005, 12:36 | ||
помогите плиз написать функцию
которая переводит число x в систему исчесления base у меня никак не получается или идею подскажите Добавлено @ 12:39 язык обычный Си |
| Автор: pablo 29.12.2005, 12:52 |
| вам вот сюда: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcstdlib/html/vclrfHex_ios.asp |
| Автор: chaos 29.12.2005, 12:54 | ||
а если ему надо перевести в 7ую систему счисления Добавлено @ 12:55 все что тебе надо: понимать на пальцах как осуществляется перевод Добавлено @ 12:56 это конечно если тебе надо переводить в нестандартную систему, а если только 10 8 и 16 то это раз плюнуть |
| Автор: DESert 29.12.2005, 13:03 |
| проблема в том, что base < 201 !!! то есть любое число до 201... что с эти делать непонятно |
| Автор: Aleksandor 29.12.2005, 13:04 |
| Ну не знаю Если надо например перевести строку символов в память машины в виде числа то есть функция strtol. Обратное преобразование - ultoa Или если переводим двоичное число х в систему кратную 2 то можно так- в двоичную: если бит 0 пишем 0, если 1 то 1 в восьмеричную: соответственно каждые 3 бита это числа от 0 до 7 в 16ричную: каждые 4 бита - числа от 0 до F Чтобы перевести в 10-ную нужно найти сумму произведений цифры на основание системы в степени на 1 меньшей порядка цифры. например число 0101101 (двоичное) переводим в десятичное 2 в степени 0 = 1 2 в степени 2 = 4 2 в степени 3 = 8 2 в степени 5 = 32 итого 32+8+4+1 = 45 (десятичное) А из десятичной можно перевести в любую другую- Делишь с остатком число на основание нужной степени, потом результат ещё раз и т. д. пока не останется 0. Тогда все остатки записываешь в обратном порядке. Они и образуют число в нужной системе. Только нужно не забывать, что если основание больше 10, то цифра может быть больше 9, а значит заменяется на букву. |
| Автор: chaos 29.12.2005, 13:07 |
| разберись как переводят 10->2 и 2->10 и ты сможешь написать функцию каторая переводит в любую систему!!!! |
| Автор: DESert 29.12.2005, 13:12 | ||
| а можно ли из двоичной перевести в любую систему счсиления? Добавлено @ 13:13
так это понятно... но как из 2->n - ричную... тут не могу сообразить |
| Автор: DESert 29.12.2005, 14:28 | ||
Подскжите!! в чём ошибка!!!
|
| Автор: DESert 29.12.2005, 14:47 | ||
не рабоает... |
| Автор: Exekutor 29.12.2005, 14:50 | ||||
такого не может быть. Делай частное типа float |
| Автор: DESert 29.12.2005, 15:08 | ||
как так не может быть?... просто целочисленно разделит меня больше волнует putchat() с printf() всё работает хорошо, но по условию задачи нужно с putchar() Добавлено @ 15:10 а в том коде я нашел ошибку |
| Автор: Exekutor 29.12.2005, 15:12 | ||||
| что говорит? Добавлено @ 15:14
у тебя получится ноль. Используй float
или поменяй строчки местами Добавлено @ 15:20 И потом - зачем тебе массив? |
| Автор: RomaRS 29.12.2005, 15:33 | ||||||
ИМХО float в вычислениях использовать не стоит... Лучше double, float только для хранения темповых данных. |
| Автор: Exekutor 29.12.2005, 15:39 |
| Интересно, а что DESert думает делать если массива в 50 элементов ему не хватит? Почему бы не использовать одно переменную? Неисповедимы пути... |
| Автор: DESert 29.12.2005, 15:43 | ||||
массив, чтобы там остатки от деления хранить, а потом в обратном порядке выводить...
в chastnoe запишется результат целочисленного деления, что мне и надо вторая трочка - остаток от деления x на base кстати, эта функция переводит любое число в любую разрядность вот что у меня работает:
а вот если поставить вместо printf() putchar(), то всё уже неправильно... может быть знаете почему? Добавлено @ 15:45 можно и одну переменную- не в этом вопрос совсем |
| Автор: Exekutor 29.12.2005, 15:50 | ||
может, это у меня что-то с мозгами, но мне кажется, что ты не получишь здесь остатка. Для получения целочисленного остатка от деления двух чисел в с++ имеется специальная функция, только я ее не помню... Добавлено @ 15:54 может, putchar() надо передавать не один параметр? Я никогда ей не пользовался |
| Автор: DESert 29.12.2005, 16:22 | ||||||
здесь я не получу остатка:
а получю следующее: пусть x = 6 base = 4 то x/base = 1 , а остаток: x - (x/base) * base = 6 - (6/4) *4 = 2 , где 6/4=1 только не говорите, что можно сократить 4-ки...
putchar(int c), а выдает белиберду, вместо с |
| Автор: Void 29.12.2005, 17:51 | ||
А что ты ожидаешь от этой функции, я не понял? Параметр c - это код символа, который она выведет в stdout. |
| Автор: DESert 29.12.2005, 17:57 |
| я ожидаю, чтобы она выдала число, а не код.. т.е. putchar(3) выдаст на экран 3 |
| Автор: Void 29.12.2005, 18:02 |
| DESert Ну так и пользуйся printf("%d", number), в чем проблема-то? Зачем жаловаться, что функция чего-то не делает, если она этого не должна делать |
| Автор: DESert 29.12.2005, 18:07 | ||
ну я ж не совсем того еще если б можно было использовать printf(), то всё было бы отлично, а по условию задачи нужен злополучный putchar()... а как его использовать правильно не знаю |
| Автор: Void 29.12.2005, 18:27 | ||
| DESert ОК, тогда делаем так. base по условию меньше 201. Значит мы можем воспользоваться обозначением цифр в виде символов ASCII, как это обычно принято. При этом цифры 0..9 будут отображаться как обычно, а все что больше - как символы алфавита:
|
| Автор: Aleksandor 29.12.2005, 18:27 | ||
| printf форматирует вывод, а putchar нет если условия задачи позволяют можно сначала в буфер вывести, а из буфера уже putc
|