![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
/7popok |
![]() ![]()
Сообщение
#1
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Реальное имя: Игорь Репутация: ![]() ![]() ![]() |
Сколько программ перевода в разные системы счисления я видел, и стандартные: 2- 8- 10- 16-, и разные другие, даже из римской в 10- и обратно и в троичную уравновешенную и обратно. Но сколько я ни искал, так и не нашёл переводов в системы со смешанным основанием. Попытался написать такое, но получилось наоборот из P-Q-ичной в Q-ичную. Теперь мучаюсь. Не могу сделать то, что хотел... посмотрите, пожалуйста, кому не лень, и подскажите, что не так... легче было простенькую игрушку на 500 строк написать, чем это, честно...
P.S. Этот код уже с исправлениями частично под то, что я пытался сделать, но на большее меня не хватило. Сообщение отредактировано: /7popok - 24.01.2007 21:03 |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата посмотрите, пожалуйста, кому не лень, и подскажите, что не так... Угу... Обязательно... Только ты сначала приведи 3-4 примера входных и соответствующих им выходных данных (правильных, разумеется, которые ДОЛЖНЫ получиться)... |
/7popok |
![]()
Сообщение
#3
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Реальное имя: Игорь Репутация: ![]() ![]() ![]() |
Угу... Обязательно... Только ты сначала приведи 3-4 примера входных и соответствующих им выходных данных (правильных, разумеется, которые ДОЛЖНЫ получиться)... Входные данные: p=3, q=9, вводимое значение 121. Выходные данные: 10201. Входные данные: p=2, q=10, вводимое значение 33. Выходные данные: 110011. Входные данные: p=6, q=8, вводимое значение -73. Выходные данные: -1021. Сообщение отредактировано: /7popok - 24.01.2007 22:56 |
klem4 |
![]()
Сообщение
#4
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
В тестовом примере у тебя ошибка (во втором) ..
А решение ... уже давно все решено Общие вопросы по математике. Для твоих тестов применяется так: writeln(FromDec(ToDec('121', 9), 3)); -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
/7popok |
![]()
Сообщение
#5
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Реальное имя: Игорь Репутация: ![]() ![]() ![]() |
Я бы не спрашивал, если всё так просто. Всё правильно в примере у меня. Число 33 в десятичной системе счисления - это 110011 в двоично-десятичной. конечно, не мне объяснять вам, програмистам, как переводятся числа, но у меня всё правильно. могу даже алгоритм расписать, если не верите.
|
klem4 |
![]()
Сообщение
#6
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Возможно я чего-то не понимаю, но разьве
33 10 <> 1*20 + 1*2 5 = 1000012? -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
Malice |
![]()
Сообщение
#7
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация: ![]() ![]() ![]() |
klem4, не в двочную, а в двоично-десятичную, т.е. каждый разряд по очереди переводить.
|
/7popok |
![]()
Сообщение
#8
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Реальное имя: Игорь Репутация: ![]() ![]() ![]() |
Основание системы p-q обозначает, что в числах этой с.с. алфавит p-ичной с.с., а при переводе из q-ичной в p-q-ичную с.с. каждый разряд в исходном числе разбивается на N разрядов при условии p^N>q (число N - наименьшее требуемое для выполнения этого условия, и это число целого типа)
|
klem4 |
![]()
Сообщение
#9
|
![]() Perl. Just code it! ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: ![]() ![]() ![]() |
Цитата klem4, не в двочную, а в двоично-десятичную, т.е. каждый разряд по очереди переводить. Ок, это я проглядел, в таком случее: зы Только надо дописать добавление недостающих нулей к каждой четверке разрядов (я сделал просто пробел) function GETPQ(n, p, q: Integer): String; [добавлено]: А с отрицательными числами всетаки трабла, придется свое сочинать ![]() -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
Я бы сделал вот так (с учетом FromDec/ToDec из FAQ-а):
function zeroes(s: string; n: integer): string;С отрицательными чуть позже разберусь... Пока не совсем понятен алгоритм... |
/7popok |
![]()
Сообщение
#11
|
![]() Новичок ![]() Группа: Пользователи Сообщений: 19 Пол: Мужской Реальное имя: Игорь Репутация: ![]() ![]() ![]() |
Спасибо вам, люди, за подсказку, дальше я уже всё написал! С отрицательными числами на самом деле нет ничего страшного. Да и 0 он не выводил, если вводишь начальное значение 0. Теперь со всем этим мозготрёпки нет. Если кому интересно, то вот он весь код от начала и до конца без описания функций FromDec и ToDec.
P.S. Привожу систему тестов. Всё работало правильно. №__P__Q__Вводимое число___Результат_______________Примечания______________ Вид теста 1__2___10_33_______________110011_________________Начальный тест___________Нормальные условия 2__3___9__121______________10201__________________Начальный тест 3__4___8__222______________20202__________________Начальный тест 4__2___8__-73______________-111011________________Отрицательное число 5__3___9__0________________0______________________Нулевой тест_____________Экстремальные условия 6__2___10_20000____________100000000000000000_____Большое число 7__2___3__495______________Сообщение об ошибке____Неверные данные_________Исключительные условия 8__4___8__asd______________Сообщение об ошибке____Неверные данные 9__4___10_#$%@____________Сообщение об ошибке____Неверные данные 10_6___9__232.454___________Сообщение об ошибке____Неверные данные Сообщение отредактировано: /7popok - 25.01.2007 21:50 |
![]() ![]() |
![]() |
Текстовая версия | 20.07.2025 18:40 |