1 Востаннє редагувалося mixon-21 (17.04.2013 17:13:32)

Тема: [C++] система числення в функціях.

Написати функцію, яка отримує в якості аргументів ціле позитивне число і систему числення, в яку це число повинне перекладається (системи числення від 2 до 36). Наприклад, при перекладі числа 27 у систему числення 16 повинно вийти 1B; 13 в 5-у - 23; 35 у 18-у - 1H.  Підскажіть ідею будь-ласка. Код програми писать не треба я сам. Не можу зрозуміть з чого почати.

2

Re: [C++] система числення в функціях.

Можна піти алгоритмом ділення на основу системи числення (ОСЧ).
Суть буде у тому, щоб ділити число на ОСЧ, поки отримана частка не стане меншою від ОСЧ. Коли ж це досягнуто, наступна ітерація ділення дасть цілу частку нуль.
Числом у даній системі числення буде послідовність цифр, що позначали залишок від ділення, у зворотньому порядку. Цифри, відповідно, можуть виражатися як арабськими цифрами, так і літерами (для систем із основою понад 10). Підбір цифри у відповідній системі можна організувати окремою функцією.

3 Востаннє редагувалося mixon-21 (17.04.2013 18:06:46)

Re: [C++] система числення в функціях.

Десь так. Правильно?

#include <iostream>
using namespace std;
void main() {
    setlocale(LC_ALL, "ukr");
    int a, b;
    cout << "Введите число";
    cin >> a;
    cout << "Выберите систему счисления";
    cin >> b;
    while(a)
        if(a<b) {
            a %= b;
            cout << a;
        }
        else
            a /= b;
}

Тільки виходить вічний цикл. Треба щось допрацювать.

4

Re: [C++] система числення в функціях.

Візьміть код в теги code: поважайте учасників форуму.

5

Re: [C++] система числення в функціях.

mixon-21 написав:

Десь так. Правильно?

#include <iostream>
using namespace std;
void main() {
    setlocale(LC_ALL, "ukr");
    int a, b;
    cout << "Введите число";
    cin >> a;
    cout << "Выберите систему счисления";
    cin >> b;
    while(a)
        if(a<b) {
            a %= b;
            cout << a;
        }
        else
            a /= b;
}

Тільки виходить вічний цикл. Треба щось допрацювать.

додати умову завершення циклу, бо ж у вашому коді змінна 'а' завжди існує - тому і зациклило =)
і взагалі, бажано все, що входить у while взяти в дужки (про всяк випадок), тому що компілятор не завжди може зрозуміти вас правильно

Подякували: mixon-211

6 Востаннє редагувалося muroclav (17.04.2013 23:17:58)

Re: [C++] система числення в функціях.

напишіть наприклад так:

while(a!=0 && b!=0)

або так

while(a!=0)

7 Востаннє редагувалося mixon-21 (18.04.2013 10:14:16)

Re: [C++] система числення в функціях.

Підскажіть з розробки програми. Пліз.
[*]Написати функцію, яка отримує в якості аргументів ціле позитивне число і систему числення, в яку це число повинне перекладається (системи числення від 2 до 36). Наприклад, при перекладі числа 27 у систему числення 16 повинно вийти 1B; 13 в 5-у - 23; 35 у 18-у - 1H. [/*]

8

Re: [C++] система числення в функціях.

Позиційна система числення
Bartash каже те й саме що й в статті.

9

Re: [C++] система числення в функціях.

Мало би бути щось на зразок такого:

const char* convert(int num, unsigned int sys)
{
    if( sys<2 || sys>36)
        return "";
        
    string res;
    while(num)
    {
        res += digit(num % sys, sys);
        num /= sys;
    }
    
    return string(res.rbegin(), res.rend()).c_str();
}

На функцію digit() у мене скінчився цикорій.

10

Re: [C++] система числення в функціях.

#include <iostream>
using namespace std;
void main() {
    setlocale(LC_ALL, "ukr");
    int a;
    int b;
    cout << "Введите число";
    cin >> a;
    cout << "Выберите систему счисления";
    cin >> b;
    while(a) {
        cout << a % b;
        a /= b;
    }
}

Підскажіть будь-ласка як перевернути результат?

11

Re: [C++] система числення в функціях.

mixon-21 написав:

як перевернути результат?

Як це зрозуміти?

12

Re: [C++] система числення в функціях.

mixon-21 написав:

Підскажіть будь-ласка як перевернути результат????

У тій реалізації - ніяк.
Потрібна проміжна змінна.
Плюс наведений варіант не виведе літери для систем із основою понад 10.