Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.04.2013, 21:56   #11
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

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

Последний раз редактировалось mixon-21; 15.04.2013 в 22:13.
mixon-21 вне форума Ответить с цитированием
Старый 15.04.2013, 22:19   #12
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,431
По умолчанию

Весь алгоритм УЖЕ объяснили до меня, так что мне ничего не остается, как выложить готовое решение. Ваша задача - понять, как оно работает.
Код:
#include <iostream>
#include <string>

using namespace std;

const char alp[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

string
conv(unsigned x, unsigned base)
{
    if (base < 2 || base > 36)
        return "";
    if (!x)
        return "0";
    string t = "";
    while (x) {
        t = alp[x % base] + t;
        x /= base;
    }
    return t;
}

int
main()
{
    cout << conv(0, 16) << " 0" << endl;
    cout << conv(27, 16) << " 1B" << endl;
    cout << conv(13, 5) << " 23" << endl;
    cout << conv(35, 18) << " 1H" << endl;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 15.04.2013, 22:27   #13
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Написать функцию, которая получает в качестве аргументов целое положительное число и систему счисления, в которую это число должно переводится (системы счисления от 2 до 36). Например, при переводе числа 27 в систему счисления 16 должно получиться 1B; 13 в 5-ю - 23; 35 в 18-ю - 1H.
Как вариант, рекурсивная функция и вызывающая её функция-обёртка.
Функция-обёртка проверяет, равно ли число 0 и если да, выводит 0 и завершает работу; проверяет, не больше ли основание 36 и в этом случае намекает пользователю, что он офигел; если число отрицательное, выводит '-' и вызывает рекурсивную функцию с (минус аргументом) - положительным числом и основанием; иначе же вызывает рекурсивную функцию с аргументом без изменений и основанием.

Рекурсивная функция проверяет аргумент на равенство 0 и в этом случае завершает работу. Иначе же вызывает сама себя с аргументом, делённым нацело на основание и основанием; затем выводит элемент массива "цифры", индекс которого равен остатку от деления аргумента на основание.
Массив "цифры" - символьный массив (строка) следующего вида: "0123...89ABCDE...XYZ".

Upd:
BDA опередил
Abstraction вне форума Ответить с цитированием
Старый 15.04.2013, 22:28   #14
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Это хорошо, но только это кодировка только в одну сторону - из числа в его запись в нужной СС.
А перекодировка подразумевает из записи числа в одной СС в запись этого же числа в другой СС.
s-andriano вне форума Ответить с цитированием
Старый 18.04.2013, 02:32   #15
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

Подскажите плиз что еще надо дописать

Код:
#include <iostream>

using namespace std;
const char m[]="0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";
void main()
{
	setlocale(LC_ALL,"rus");
	
	
	int a,b;
cout<<"Введите число";
cin>>a;
cout<<"Выберите систему счисления";
cin>>b;
if(b>1&&b<33){
	while (a) {
	if(!a)
	a=m[a%b];	
a/=b;
	
cout<<a;
	
	}


	
}

	}
mixon-21 вне форума Ответить с цитированием
Старый 18.04.2013, 12:16   #16
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Подскажите плиз что еще надо дописать
Например, комментарии.
Объясните, какой смысл Вы вкладываете в эти две строки:
Код:
a=m[a%b];	
a/=b;
Abstraction вне форума Ответить с цитированием
Старый 18.04.2013, 12:18   #17
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

????????????????????
mixon-21 вне форума Ответить с цитированием
Старый 18.04.2013, 12:27   #18
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
????????????????????
Зачем писать a=m[a%b]; a/=b;
?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.04.2013, 12:30   #19
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
????????????????????
У Вас что-то с кодировкой.

Когда Вы писали
Код:
a=m[a%b];
, Вы же считали, что это приведёт к некоторому результату. Вот я и спрашиваю: какой результат Вы ожидаете? Потому что истинный результат, понимай Вы его, Вы бы вряд ли сочли желаемым. Следовательно, Вы не понимаете какой-то элемент языка C++. Следовательно, это неверное понимание необходимо сформулировать и исправить.
Abstraction вне форума Ответить с цитированием
Старый 18.04.2013, 12:34   #20
mixon-21
Я только Учусь
Форумчанин
 
Аватар для mixon-21
 
Регистрация: 06.03.2013
Сообщений: 193
По умолчанию

Как я понимаю нужно в цыкле{
а%б и вывести наэкран остаток
} .Как правильно ему создать условия незнаю сколько ему нужно делить?????????????


int a,b;
cout<<"Введите число";
cin>>a;
cout<<"Выберите систему счисления";
cin>>b;

Мы только изучили цыклы масивы исейчас учим функции. только самое начало.

Последний раз редактировалось mixon-21; 18.04.2013 в 12:40.
mixon-21 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
двоичная система VinDiz Помощь студентам 0 01.03.2012 15:06
Двоичная система счисления.С++ Демик Помощь студентам 6 18.05.2011 16:15
не двоичная система счисления МмлашкО_о Помощь студентам 2 11.01.2011 20:39
двоичная система счисления galaid Паскаль, Turbo Pascal, PascalABC.NET 3 17.05.2009 15:42