#0
by program345
доброго вечера! задача перевести число из десятичной системы исчисления в любую. вот мой вариант решения: var a,b:integer; procedure q(a,b:integer); var c:integer; d,f:string; begin if a>0 then q(a div b,b); if a>0 then begin c:=a mod b end; case c of 0..9:str(c,d); 10:d:='A'; 11:d:='B'; 12:d:='C'; 13:d:='D'; 14:d:='E'; 15:d:='F'; else writeln('введенное основание не поддерживается!'); end; f:=f+d; write(f); end; begin writeln('введите число: '); readln(a); writeln('в какую систему переводим число: '); readln(b); q(a,b); end. только вот незадача, прога выводит 0 вначале числа и даже if a>0 then не робит. как это можно исправить?
#2
by User_Agronom
Рекурсия... Процедура... Автор, подумай сам. На паскалевских оболочках пошаговый проход нормально организован.
#3
by program345
вот рабочий вариант, но без рекурсии: //! var a,b:integer; procedure q(a,b:integer); var c,f:integer; d,e:string; begin while a>0 do begin c:=a mod b; case c of 0..9:str(c,d); 10:d:='A'; 11:d:='B'; 12:d:='C'; 13:d:='D'; 14:d:='E'; 15:d:='F'; else writeln('перевод в данную систему не поддерживается!!!'); end; e:=e+d; a:=a div b; end; f:=length(e); while f>0 do begin write(e[f]); f:=f-1; end; end; begin writeln('введите число: '); readln(a); writeln('в какую систему переводим число: '); readln(b); q(a,b); end. //!
#4
by User_Agronom
Код языка 1С: Функция Перевод(аЧисло,аОснование) Цифери = "0123456789ABCDEF"; Результат = ""; Пока аЧисло>0 цикл Результат = ""+Сред(Цифери,аЧисло%аОснование+1,1)+Результат; аЧисло = Цел(аЧисло/аОснование); КонецЦикла; Возврат Результат КонецФункции На Паскаль переведи сам.
#5
by User_Agronom
+ В Паскале String можно рассматривать как Array of Char, т.е. один символ можно не вырезать, а получать его по номеру как элемент массива. Учти это!
#6
by Крошка Ру
>>перевести число из десятичной системы исчисления в любую >>'введенное основание не поддерживается!' Вижу противоречие!
#8
by Torquader
На самом деле, нужно понимать, что внутри компьютера число хранится в двоичном виде, и перевод проводится только в момент вывода числа на экран. Реально ->(Машинное представление)->(Любое основание) Для вывода числа в системе с основанием N мы должны последовательно делить число на N, пока оно больше N, а остатки выводить как цифры числа, начиная с самой младшей. Не забываем, что целое число может занимать M-байт в общем случае, поэтому, деление нужно проводить побайтово, пока весь массив байт, кроме последнего не станет равен нолю.
#9
by User_Agronom
...но и в бреду говорил только то, что всем известно: -- Волга впадает в Каспийское море... Лошади кушают овес и сено... А.П. Чехов. Удивил на форуме программистов формальным описанием перевода чисел из одной системы счисления в другую!
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
В этой группе 1С
- Ограничение видимости номенклатуры
- Бух 2.0 Баланс, актив не равен пассиву
- Зачем нужен грамматический род для ЧислоПрописью()?
- 2008 сервер. Время компьютера отстаёт.
- не устанавливается ландшафт при печати
- соединение строки и даты в скд
- УТ : отгружает одно, а в документах пишем другое
- сумма прописью
- Как закрыть управляемую форму? ОбработчикОповещения
- v7: ИспользоватьВладельца() - не работает (правда!)[заработало]
- УТ 11.1 РИБ с фильтром по подразделению - проблема с перемещениями
- 1с 8 обмен УТ 8.1 в БП 8.2 - как частично снять ограничение по датам выгрузки
- Как в google chome запретить открывать большое количество вкладок?
- Нужен алгоритм прохождения лабиринта
- Ошибка обновления конфигурации "Бухгалтерия 3.0"
- v7: Отрицательное сальдо по счету 62.1
- список значений получить значение по представлению
- Как связать табличную часть документа и регистр накопления 1с
- Преобразование значения к типу Булево не может быть выполнено
- Подключение к почте Яндекс