![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.
![]() ![]() |
![]() |
antonioSP |
![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Мужской Репутация: ![]() ![]() ![]() |
Помогите плз с програмкой. Нужно сделать калькулятор считающий в разных системах счисления. В десятично я сделал, а как реализовать в других понятия не имею. Подскажите как лучше и проще это сделать.
|
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
В чем именно у тебя затруднения? Как это оформить, или как производить операции в других системах счисления (имеются в виду именно алгоритмы)?
|
antonioSP |
![]()
Сообщение
#3
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Мужской Репутация: ![]() ![]() ![]() |
Мне как раз не ясно как реализовать, какими алгоритмами и как лучше. Или же работать в заданной системе, или переводить в десятичную, а потом в заданную. Но как это реализовать не знаю.
|
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Погоди... Насколько я помню, на форуме уже поднимался этот вопрос. В любом случае тебе придется переводить данные в какую-то одну систему счисления (о том, как это сделать - здесь: FAQ: Системы Счисления), и работать только в ней...
|
Lapp |
![]()
Сообщение
#5
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Или же работать в заданной системе, или переводить в десятичную, а потом в заданную. Работать (производить действия над числами) можно просто в машинном представлении (тебя не должно волновать, какое оно), а ввод/вывод делать в нужной системе. Но это можно сделать только если тебе хватает разрядности машинного представления. Какая разрядность тебе нужна? -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
antonioSP |
![]()
Сообщение
#6
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Мужской Репутация: ![]() ![]() ![]() |
А можно ли работать в в одной и той же системе счисления, не переходя в десятичную?
|
Lapp |
![]()
Сообщение
#7
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
А можно ли работать в в одной и той же системе счисления, не переходя в десятичную? Уважаемый antonioSP, почему ты не отвечаешь на вопросы - думаешь, только тебе должны отвечать? Пойми, это же не из праздного любопытства! Мы честно стараемся тебе помочь. И без условий на разрядность (то есть сколько цифр - скажем, в 16-ричной записи числа) тебе нужно, помочь тебе трудно. Смотри. 1. Если числа не очень большие (в пределах того, что может обеспечить LongInt, скажем), то заботиться об операциях вообще не нужно. Нужно просто ввести число, то есть расшифровать ту запись, которая есть (двоичная, десятичная или еще какая), а потом работать с просто числом, как обычно. А когда ты произведешь все действия, ты результат выведешь в нужной системе. Это понятно? 2. Если числа большие, то можно реализовать "Очень длинную арифметику", составляя числа из нескольких LongInt (это было на Форуме, поищи). Если это сделано, то в остальном принцип работы тот же, что и в п.1. 3. Можно плюнуть на всю машинную арифметику и реалиовать ее самому на чисто символьной основе ( то есть в пределах операций над цифрами той системы, с которой ты хочешь работать. Это значит, что нужно запрограммировать сложение, вычитание и умножение в столбик, а также деление уголком. При этом ты можешь сделать так, чтобы не привязывать все это к определенному основанию, тогда действия можно будет выполнять в той системе считсления, в которой записаны числа. Только мне это не очень по душе - такая реализация вряд ли будет быстро работать.. А кроме того, я полагаю, в твоем калькуляторе все равно должна присутствовать функция перевода чисел из одной сиситемы в другую.. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
antonioSP |
![]()
Сообщение
#8
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Мужской Репутация: ![]() ![]() ![]() |
Прошу помощи в поиске ошибке в процедуре ToDec для калькулятора, чтобы переводила дробные значения какой-то сс в десятичную. Она ещё не доработана (не работает для чисел в сс>10),но хотелось бы попробывать сначало хотябы с дробными двоичными.
function stepen(a,n:integer):integer; Просьба не смеятся на корявым (пока ещё) алгоритмом ![]() |
volvo |
![]()
Сообщение
#9
|
Гость ![]() |
antonioSP, ошибка далеко не там, где тебе кажется:
function stepen(a,n:integer):integer;и деление на ноль не будет возникать ![]() |
volvo |
![]()
Сообщение
#10
|
Гость ![]() |
А вообще, я бы сделал так:
function ToDec(n:string; radix:longint):real; |
antonioSP |
![]()
Сообщение
#11
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Мужской Репутация: ![]() ![]() ![]() |
Спасибо тебе большое, правда функция не совсем корректно работает. Например если ввести 10 или 10.1 выдаёт один и тотже результат, лан буду сам разбираться.
|
volvo |
![]()
Сообщение
#12
|
Гость ![]() |
Да, правильно. Не добавил еще одно условие:
function ToDec(n:string; radix:longint):real; Проверь сейчас. |
antonioSP |
![]()
Сообщение
#13
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Мужской Репутация: ![]() ![]() ![]() |
Спасибо за помощь, но опять косячок. При вводе дробного значения например в 16-иричной сс с одним знаком после запятой, результат всегда получается *.0625, с двумя знаками после запятой *.06640625 и т.д. причём символ может быть любой не обязательно цифра.
Сообщение отредактировано: antonioSP - |
volvo |
![]()
Сообщение
#14
|
Гость ![]() |
Цитата(antonioSP @ 19.05.2006 17:14) Спасибо за помощь, но опять косячок. Ну само собой ![]() function ToDec(n:string; radix:longint):real; |
antonioSP |
![]()
Сообщение
#15
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Мужской Репутация: ![]() ![]() ![]() |
Цитата Ну само собой Умножить-то найденную степень на значение соотв. разряда забыли... Это я уже заметил и исправил ![]() ![]() Сообщение отредактировано: antonioSP - |
volvo |
![]()
Сообщение
#16
|
Гость ![]() |
Аргумент передаешь в градусах? А Delphi вообще-то принимает в радианах
![]() Делай так: Const |
antonioSP |
![]()
Сообщение
#17
|
Новичок ![]() Группа: Пользователи Сообщений: 16 Пол: Мужской Репутация: ![]() ![]() ![]() |
![]() ![]() |
![]() ![]() |
![]() |
Текстовая версия | 19.04.2025 21:55 |