Модераторы: volvo877, Snowy, MetalFan

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> перевод в десятичную систему исчисления 
V
    Опции темы
navi
Дата 9.4.2008, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 28.4.2007
Где: Moldova

Репутация: нет
Всего: нет



здравствуйте! помогите please c переводом из системы исчисления по основанию b<9 в десятичную. smile помогите очень нужно.
смjтрел в темах именно такой вопрос не нашёл...
ах да:
входные данные: само число и основание  b. 
--------------------
 Хакер не преступник! Взлом ради искусства! Смысл в свободе!
PM MAIL Skype   Вверх
volvo877
Дата 10.4.2008, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Если число, которое надо перевести в 10 с/с задано именно числом, а не строкой (бред, конечно, но задачи бывают разные), то вот так:
Код
function todec(n, radix: longint): longint;
var
  mult, s: longint;
begin
  mult := 1; s := 0;
  while n > 0 do begin
    s := s + mult * (n mod 10);
    n := n div 10;
    mult := mult * radix;
  end;
  todec := s;
end;


begin
  writeln(todec(751, 8));
end.

751(8) -> 489(10)
PM MAIL   Вверх
navi
  Дата 10.4.2008, 00:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 28.4.2007
Где: Moldova

Репутация: нет
Всего: нет



Цитата(volvo877 @  10.4.2008,  00:03 Найти цитируемый пост)
Если число, которое надо перевести в 10 с/с задано именно числом

извиняюсь за неточность число вводится строкой.

--------------------
 Хакер не преступник! Взлом ради искусства! Смысл в свободе!
PM MAIL Skype   Вверх
volvo877
Дата 10.4.2008, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(navi @  9.4.2008,  23:13 Найти цитируемый пост)
число вводится строкой.

Тогда все проще:

Код
function todec(n: string; radix: longint): longint;
var
  s, i: longint;
const
  digit: string[16] = '0123456789ABCDEF';
begin
  s := 0;
  while (n[1] = '0') and (length(n) > 1) do delete(n, 1, 1);
  for i := 1 to length(n) do s := s * radix + pos(n[i], digit) - 1;

  todec := s;
end;


begin
  writeln(todec('751', 8));
end.

PM MAIL   Вверх
6pika4u
Дата 18.5.2008, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 18.5.2008

Репутация: нет
Всего: нет



Ребят,а как сделать обратную здачу?
PM MAIL   Вверх
Dobermann
Дата 18.5.2008, 15:53 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 992
Регистрация: 7.1.2008

Репутация: нет
Всего: 0



Цитата

Ребят,а как сделать обратную здачу?

Нетрудно.... =)
Код

var a: array[1..20] of 0..1;
n,k,kol: integer;
begin
  writeln('>'); readln(n);
  kol:=0;
  while n>0 do
    begin
      kol:=kol+1; a[kol]:=n mod 2; n:=n div 2;
    end;
  writeln('2-я запись: ');
  for k:=kol downto 1 do write(a[k]);
  readln
end.

PM   Вверх
Agentum
Дата 10.12.2008, 12:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 10.12.2008

Репутация: нет
Всего: нет



Ребят,как перевести числа из систем счисления с основанием от 2 до 35 в десятичную?напишите пожалуйста алгоритм.
PM MAIL   Вверх
volvo877
Дата 10.12.2008, 12:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(Agentum @  10.12.2008,  11:08 Найти цитируемый пост)
как перевести числа из систем счисления с основанием от 2 до 35 в десятичную?
digit в программе из 4-го поста заменить на
Код
  digit: string[36] = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';

PM MAIL   Вверх
Agentum
Дата 10.12.2008, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 10.12.2008

Репутация: нет
Всего: нет



Спасибо.А как сделать перевод букв из нижнего регистра в верхний и выполнить проверку на правильность ввода числа в данной системе счисления?
PM MAIL   Вверх
volvo877
Дата 10.12.2008, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(Agentum @  10.12.2008,  16:31 Найти цитируемый пост)
как сделать перевод букв из нижнего регистра в верхний
Есть функция UpCase.

Цитата(Agentum @  10.12.2008,  16:31 Найти цитируемый пост)
выполнить проверку на правильность ввода числа в данной системе счисления
Что-то вроде этого:
Код
function isCorrect(s: string; radix: longint): boolean;
var i, p: integer;
begin
  isCorrect := false;
  for i := 1 to length(s) do begin
    p := pos(s[i], digit);
    if (p = 0) or (p > radix) then exit; { возвращаем false }
  end;
  isCorrect := true;
end;

(s - строка, в которой содержится запись числа, radix - система счисления)
PM MAIL   Вверх
Agentum
Дата 10.12.2008, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 10.12.2008

Репутация: нет
Всего: нет



А функция апкейс случайно не требует модуля wincrt?
PM MAIL   Вверх
volvo877
Дата 10.12.2008, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(Agentum @  10.12.2008,  20:12 Найти цитируемый пост)
А функция апкейс случайно не требует модуля wincrt? 
Нет, не требует... Она содержится в модуле system, ничего подключать не надо...
PM MAIL   Вверх
Agentum
Дата 10.12.2008, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 10.12.2008

Репутация: нет
Всего: нет



И еще...вот в проверке.как мне проверить,если в числе есть буква(ну например буква B,означающая 11),а система счисления например 11,где не может быть буквы В?
PM MAIL   Вверх
volvo877
Дата 10.12.2008, 22:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Я уже написал выше, смотри внимательнее... Функция IsCorrect проверяет наличие запрещенных для данной системы счисления символов...
PM MAIL   Вверх
Agentum
Дата 11.12.2008, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 10.12.2008

Репутация: нет
Всего: нет



И еще один глупый вопрос...если вводят число с минусом как его удалить,а затем поставить на место после перевода? 
PM MAIL   Вверх
Agentum
Дата 11.12.2008, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 10.12.2008

Репутация: нет
Всего: нет



Блин еще вопрос.Как правильно обратиться к функции upcase?напишите пожалуйста правильно для данной программы.
PM MAIL   Вверх
Agentum
Дата 11.12.2008, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 10.12.2008

Репутация: нет
Всего: нет



Все,спасибо.Разобрался с апкейс.только еще один вопрос...проверка правильности ввода числа не совсем работает:(она не проверяет число на лишние буквы...
PM MAIL   Вверх
Montr
Дата 12.12.2008, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 12.12.2008

Репутация: нет
Всего: нет



Попробуй заменить
Цитата

  digit: string[36] = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';

на
Цитата

  digit: string[16] = '0123456789ABCDEF';

PM MAIL   Вверх
volvo877
Дата 12.12.2008, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Montr, очень умный, да? Я специально заменил на полную строку, чтобы можно было работать с системами счисления до 36...

Agentum, мне надоело заниматься телепатией: это у тебя не работает, то у тебя не работает... Все работает. Есть проблемы - приводи программу полностью и показывай при каких данных есть ошибка! Все.
PM MAIL   Вверх
Agentum
Дата 12.12.2008, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 10.12.2008

Репутация: нет
Всего: нет



Хорошо,извини пожалуйста,спешу просто.Сегодня выложу код и покажу,что она делает неправильно(ну или я напортачил)
PM MAIL   Вверх
Agentum
Дата 13.12.2008, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 10.12.2008

Репутация: нет
Всего: нет



Так...с проверками я разобрался.Возник вопрос при переводе чисел с точкой...как переделать функцию,чтобы она переводила дробные части чисел,то есть часть строки после точки?
PM MAIL   Вверх
volvo877
Дата 13.12.2008, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Цитата(Agentum @  13.12.2008,  14:48 Найти цитируемый пост)
Возник вопрос при переводе чисел с точкой...как переделать функцию,чтобы она переводила дробные части чисел,то есть часть строки после точки? 
У меня в профиле зайди по второй ссылке из списка "Любимые места в сети", там есть решение этой задачи...
PM MAIL   Вверх
Agentum
Дата 13.12.2008, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 10.12.2008

Репутация: нет
Всего: нет



По второй ссылке нет ничего.:(
PM MAIL   Вверх
Agentum
Дата 13.12.2008, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 10.12.2008

Репутация: нет
Всего: нет



Вот нашел по первой ссылке
2. перевод X radix-> X 10

Код
function to_dec(n: string; radix: longint): real;
var
 _int, stepen: longint;
 _frac: real;
  s: string;
 i, p: byte;
begin
 p := pos('.', n);
 if p = 0 then s := n
 else s := copy(n, 1, p - 1);
 {
  В вышеприведенных строках в строку s записывается либо целая часть числа,
  либо все число, если у него нет дробной части
 }
  _int := todec(s, radix); { Переводим целую часть в 10 систему счисления }
 _frac := 0.0;
  {
  Если есть вещественная часть - то выполняем ее перевод
  в систему с основанием radix
 }
 if (p <> 0) and (p < length(n)) then begin
   s := copy(n, p + 1, 255); { Копируем в s только дробную часть, безо всяких точек }
   { Удаляем лишние ведомые нули (справа) }
  while s[length(s)] = '0' do delete(s, length(s), 1);
   {
   по алгоритму нужно последовательно умножать цифры на числа,
   являющиеся обратными соответствующей степени системы счисления
  }
  stepen := 1; { Здесь будет храниться текущая степень системы счисления }
  for i := 1 to length(s) do begin
   stepen := stepen * radix;
    {
    собственно, алгоритм -умножаем цифру на обратное число
    и добавляем в аккумулятор
   }
   _frac := _frac + pred(pos(upcase(s[i]), digit)) / stepen;
  end;
  end;
 { собираем из двух частей результат: }
 to_dec := _int + _frac;
end;


Это сообщение отредактировал(а) volvo877 - 14.12.2008, 09:28
PM MAIL   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0627 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.