Вопрос № 167567: Доброго времени суток уважаемые эксперты нужна ваша помощь: нужно удалить ошибку в языке программы которая создана для перевода чисел из разных систем счисления в разные(от 2 до 16) проблема состоит в том что перевод из 2 или 8 или 10 сс в ...
Вопрос № 167.567
Доброго времени суток уважаемые эксперты нужна ваша помощь: нужно удалить ошибку в языке программы которая создана для перевода чисел из разных систем счисления в разные(от 2 до 16) проблема состоит в том что перевод из 2 или 8 или 10 сс в 16 проводится не корректно(255 в 10 системе счисления и 51F в 16,т.е. скорей всего не правильно "переворачивается" число) главное для меня что бы программа правильно переводила числа в 4 системах счисления :2,8,10,16. листинг в приложении Заранее
благодарен за ваше внимание к моей проблеме
Отвечает: Тимошенко Дмитрий
Здравствуйте, Бабич Илья Александрович!
Ваш код в целом верен и вполне работоспособен. Ошибка кроется в функции Dec2Num - вам нужно исправить две строки: заменить условие окончания цикла и присвоения результата с ваших
Код:
until Dec<DSys; result := NumRevert(return+IntToStr(Dec));
на
такие
Код:
until Dec=0; result := NumRevert(return);
Замечу, что эта ошибка возникает только при переводе в системы с основанием больше 10, и то не для всех чисел (только для тех, у которых старший разряд получ
ается больше 9-ки). В вашем варианте вы последнюю цифру прибавляли за рамками цикла, соответственно при переводе 255 в Hex, у вас первый разряд получался правильно - F, затем происходил выход из цикла и процедуру переворота передавалась строка 'F'+'15'='F15', т.к. цифры больше 9 у вас в буквы за рамками цикла не преобразуются. После переворота получаем ваше 51F. Еще хочется заметить, не в обиду (все когда-то начинали), что код у вас больно "слабоват". Для примера в приложении
привожу свою реализацию двух функций ValidFormat и new_sqr. Делают они тоже самое что и ваши, только код "несколько короче" . Надеюсь почерпнете для себя интересные вещи. Удачи в программировании.
Приложение:
Ответ отправил: Тимошенко Дмитрий (статус: Студент)
Ответ отправлен: 19.05.2009, 23:05
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 249510 на номер 1151 (Россия) | Еще номера >>
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценка за ответ: 5
Скажите "спасибо" эксперту, который помог Вам!
Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
на короткий номер 1151 (Россия)
Номер ответа и конкретный текст СМС указан внизу каждого ответа.
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.