Консультация № 176052
15.01.2010, 00:51
45.00 руб.
0 8 1
Уважаемые эксперты, утром нужна работающая программа, иначе из универа выгонят

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

Обсуждение

давно
Профессионал
304622
583
15.01.2010, 08:23
общий
это ответ
Здравствуйте, pikvar.

Из контекста задачи исходное число, полагаю, надо вводить, как строку. Далее. Любое число в позиционной системе записи -- это сумма произведений значений цифр на основание в степени, соответсвующей позиции. Соответсвенно, и в программа осуществляется суммирование в цикле перебирающем по очереди цифры исходного числа. А теперь программа ...

Приложение:
const dd='.'; {Знак десятичной точки. Можно задать другой}

var s:string;
i,n:integer;
f,r:real;
begin
{Пятеричное число сичтывается в виде строки}
readln(s);
{Ищется положение десятичной точки}
n:=pos(dd,s);
{Если её нет, значит она как бы за последним знаком}
if n=0 then n:=length(s)+1;
{В r суммируется результат. Нальное значение - 0}
r:=0;
{Множитель -- основание 5 в некоторой степени.
Начальной значение 5 в степени 0}
f:=1;
{Перебираются цифры целой части. Справа налево,
т.е. по увеличению степени основания}
for i:=n-1 downto 1 do
begin
{Цифра в текущей позиции преобразуется
в число (48 -- ASCII-код символа '0'),
домножается на основание в текущей степени
и добавляется к результату}
r:=r+f*(ord(s[i])-48);
{Множитель домножается на основание}
f:=f*5;
end;
{То же в обратную сторону -- для дробной части числа}
{Начальное значение 5 в степени -1}
f:=0.2;
{От позиции следующей за десятичной
точкой до конца исходного числа}
for i:=n+1 to length(s) do
begin
r:=r+f*(ord(s[i])-48);
f:=f/5;
end;
{Нижеследующее -- некое украшательство :). Для
вывода результата с тем же количеством знаков,
что и в исходном числе. Можно и убрать.}
n:=length(s)-n;
{На тот случай, если десятичная точка не задана.
Тоже в принципе необязательно.}
if n<0 then n:=0;
{Вывод результата}
writeln(r:0:n);
readln;
end.
давно
Старший Модератор
31795
6196
18.01.2010, 14:34
общий
Сергей Бендер:
Вы вводите строку, а проверку на соответсвие системы счисления не проводите: r:=r+f*(ord(s[ i ] )-48);
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Профессионал
304622
583
18.01.2010, 16:08
общий
Зенченко Константин Николаевич:
Цитата: Зенченко Константин Николаевич
а проверку на соответсвие системы счисления не проводите


В каком смысле? Проверку, чтобы все символы введённой строки были от '0' до '4'?
давно
Профессионал
304622
583
18.01.2010, 16:11
общий
Зенченко Константин Николаевич:
Выгнали, небось, бедняжку из универа. Не заглядывает.
давно
Старший Модератор
31795
6196
18.01.2010, 16:24
общий
Сергей Бендер:
Цитата: Сергей Бендер
Проверку, чтобы все символы введённой строки были от '0' до '4'

Да, именно в перед указанной строкой должна быть проверка на допустимые символы. Т.к. даже "5" в любом разряде даст неверный результат.

И ещё формирование в таком виде
Мхn+ ... + Вх2 + Вх1 + Aх0 и т.д.
не совсем удачно, лучше делать так
((((М)*х. . . )*х+С)*х+В)*х+А
проще сама реализация.

Цитата: Сергей Бендер
Выгнали, небось, бедняжку из универа. Не заглядывает

Возможно.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Профессионал
304622
583
18.01.2010, 16:58
общий
Цитата: Зенченко Константин Николаевич
Да, именно в перед указанной строкой должна быть проверка на допустимые символы.


М-м-м. Наверно, это всё-таки больше вопрос вежливости. Ведь строго говоря, условия задачи этого не требуют, да и в программистской практике бывает и так и этак делают.

А у вас здесь очень ценят, когда делают "зашиту от дурака"?

Цитата: Зенченко Константин Николаевич

И ещё формирование в таком виде
Мхn+ ... + Cх2 + Вх1 + Aх0 и т.д.
не совсем удачно, лучше делать так
((((М)*х. . . )*х+С)*х+В)*х+А
проще сама реализация.


Х-м-м! Если я правильно понял, в это варианте избавляемся от одной переменной и одного умножения на итерации?
давно
Старший Модератор
31795
6196
18.01.2010, 17:28
общий
Сергей Бендер:
Цитата: условие задачи
чисел из пятеричной системы

Это подразумевает, что доступны цифры только "0" : "4".
Цитата: Сергей Бендер
А у вас здесь очень ценят, когда делают "зашиту от дурака"

Ценят профессиональный подход к ответам на вопросы.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
28.01.2010, 10:12
общий
Спасибо всем, не выгнали. Она была решена еще на одном сайте в 2 часа ночи, так что там оказались быстрее.
Форма ответа