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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2013, 19:10   #11
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от DaH1eL Посмотреть сообщение
да уж и как мне быть? Даже скопипастить негде
Для начала прочитайте, что я Вам уже ответил в первом предложении поста №9.
s-andriano вне форума Ответить с цитированием
Старый 14.03.2013, 19:12   #12
DaH1eL
Пользователь
 
Регистрация: 13.03.2013
Сообщений: 10
По умолчанию

Цитата:
Сообщение от s-andriano Посмотреть сообщение
Для начала прочитайте, что я Вам уже ответил в первом предложении поста №9.
извиняюсь я перепутал, но факт остается фактом как сделать наоборот

Цитата:
Сообщение от s-andriano Посмотреть сообщение
Для начала прочитайте, что я Вам уже ответил в первом предложении поста №9.
аа черт я запутался

Последний раз редактировалось Stilet; 16.03.2013 в 13:47.
DaH1eL вне форума Ответить с цитированием
Старый 14.03.2013, 19:39   #13
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Давайте напишем программу для решения задачи в общем виде (то бишь перевод числа N из системы счисления с основанием X1, в систему счисления с основанием X2)
Конечно можно сразу осуществлять этот перевод, я же предлагаю сначала перевести число в десятичную с.с., а затем в с.с. с основанием X2.

Чтобы упростить Вам задачу до минимума, предлагаю Вам такой вариант : Вы пишите перевод из с.с. с основанием X1 в 10 с.с., а я Вам даю код 2 части задачи.

Для начала вспомним, как перевести число в 10 с.с. Для этого больше подойдет схема Горнера (тоесть дано число 123ABC в 16 с.с. - в 10 с.с. это будет так :
Код:
1*16^5 + 2*16^4 + 3*16^3 + 10*16^2 + 11*16 + 12
, чтобы не мучаться с возведением в степень (кстати, его тоже можно достаточно хорошо реализовать)
Побалуемся.. и получим в результате это :
Код:
(((((1*16+ 2) * 16 + 3)*16 + 10) * 16 + 11) * 16 + 12)
)

Вот впринципе и всё что Вам нужно чтобы успешно написать программку, единственное, может возникнуть проблема с перевод чисел из с.с. > 10. Т.к. там есть буквы, но это тоже не проблема..
Подсказка :
Код:
если s[какое-то] - это не цифра, то
                 t := Ord(s[какое-то]) - что-то#1
         иначе
                 t ;= Ord(s[какое-то]) - что-то#2
         ....

Последний раз редактировалось Poma][a; 14.03.2013 в 19:54.
Poma][a вне форума Ответить с цитированием
Старый 14.03.2013, 19:52   #14
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Poma][a, по-моему, Вы немного ошиблись:
123ABC в 16 с.с. в 10 с.с. будет 1*16^5 + 2*16^4 + 3*16^3 + 10*16^2 + 11*16 + 12
Так что прошу исправить

УПД Да, пожалуйста.
Цитата:
с чего это меня так угораздило??
Так четверг - конец недели, почти.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 14.03.2013 в 19:59.
BDA вне форума Ответить с цитированием
Старый 14.03.2013, 19:56   #15
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Poma][a, по-моему Вы немного ошиблись:
Ага.. Странно, с чего это меня так угораздило??
Спасибо!
Poma][a вне форума Ответить с цитированием
Старый 14.03.2013, 19:57   #16
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от 'Poma
Конечно можно сразу осуществлять этот перевод, я же предлагаю сначала перевести число в десятичную с.с., а затем в с.с. с основанием X2.
В принципе ход мысли верный, но гораздо удобнее в качестве промежуточного представление использовать не 10-чную систему, а внутреннее представление (которое, как известно, в двоичной системе).
s-andriano вне форума Ответить с цитированием
Старый 14.03.2013, 20:00   #17
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
но гораздо удобнее в качестве промежуточного представление использовать не 10-чную систему
А чем, если не секрет?
Я выбрал 10-ную т.к. нашел свою программку перевода из 10-ой в другую с.с.
Poma][a вне форума Ответить с цитированием
Старый 14.03.2013, 21:16   #18
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
А чем, если не секрет?
Вы сами можете найти ответ на этот вопрос, если сформулируете, зачем нужно использовать промежуточное представление числа вместо того, чтобы сразу переводить, скажем, из 13-чной в 7-чную.
s-andriano вне форума Ответить с цитированием
Старый 14.03.2013, 22:43   #19
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
зачем нужно использовать промежуточное представление числа вместо того, чтобы сразу переводить, скажем, из 13-чной в 7-чную.
Хм.. Потому что я не знаю как перевести из одной системы счисления в другую БЕЗ перевода в 10 с.с.

Вот что накропал в сети :
Цитата:
3) Для перевода чисел из любой системы счисления в любую необходимо исходное число перевести в десятичную систему по первому правилу (умножением), полученное десятичное число перевести в искомую систему по второму правилу (деление).
Poma][a вне форума Ответить с цитированием
Старый 14.03.2013, 23:02   #20
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Цитата:
Сообщение от Poma][a Посмотреть сообщение
Хм.. Потому что я не знаю как перевести из одной системы счисления в другую БЕЗ перевода в 10 с.с.

Вот что накропал в сети :
Начнем со второго:

2. Как Вы думаете, зачем принято указывать источник информации?
Оказывается, еще и затем, чтобы определить:
- достоин этот источник доверия,
- относится ли он вообще к рассматриваемому вопросу (что особенно важно для короткой фразы, выдернутой из контекста).

Теперь вернемся к первому.

1. Судя по тому, что Вы писали в посте
Код:
1*16^5 + 2*16^4 + 3*16^3 + 10*16^2 + 11*16 + 12
Вам не нужна десятичная система сама по себе.
Просто таблицу умножения (да и таблицу сложения) Вы знаете только для десятичной системы.
Да и тот отрывок, который Вы привели "из сети" относится не к программному, а к ручному преобразованию чисел.
И десятичная система здесь выбирается исключительно для удобства.

Компьютер работает только в двоичной системе (строго говоря, их этого правила есть исключения, но они нам неинтересны).
Причем, в отличие от человека, для него текстовое представление информации, к которому привык человек, не является ни естественным, ни удобным.
А удобно для него внутреннее представление, которое, собственно, Вы и использовали в той формуле, которую я отквотил из Вашего сообщения.
Только компьютер при этом переводит число не в десятичную систему, а во внутреннее представление, т.е. в двоичную.

И то промежуточное представление (которое в случае человека - десятичное, а в случае компьютера - внутреннее двоичное) нам нужно для удобства, т.е. для существенного упрощения алгоритма.
Потому как компьютер может аппаратно найти остаток от деления одного числа во внутреннем представлении на другое, а для операций с числами в текстовом виде нам бы пришлось самим писать всю арифметику.

Для примера? попытайтесь написать программу, которая делит одно число в виде строки цифр на другое такое же число без их преобразования во внутреннее представление.
Например, как без преобразования разделить "123" на "11", получив в качестве частного "11" и в качестве остатка "2".
s-andriano вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Програмка на языке Pascal Tatyana Kur Помощь студентам 1 07.11.2011 22:36
Си програмка Nebojitel Общие вопросы C/C++ 8 15.07.2011 20:54
Задачи на Pascal ABC (обьясните хотябы суть) Joker_SoloD Помощь студентам 1 08.12.2010 15:15
Програмка Spiderik Паскаль, Turbo Pascal, PascalABC.NET 1 17.04.2010 09:12