Конвертация чисел из любой системы исчисления в любую другую.

Вы это к чему? Всем и так известно, что Паскаль проще.

Не проще, а одно и тоже, хотя чуть строже и некоторым нагляднее.

Другое дело, что я не совсем понимаю конечную цель… Например, если это как класс, то возможны интересные операции между различными системами счисления вроде 123(5) + 456(12) - 7.81(10) + DE.AD(16) / 2(3) + 7Z(26) и т.д.

Кроме того, возможно, что “параллельное” решение в различных системах поможет смягчить числобоязнь.

3 лайка

Да гдеж это пушут? написал по вашему, и ничего не вышло. var ii:integer:=123(5) + 456(12) - 7.81(10) + DE.AD(16) / 2(3) + 7Z(26); richTextBox1.Text:=ii.ToString;

конечных целей столько сколько комбинаций в числе PI …)))))))))) что за глупые вопросы.

Прочитайте внимательно. NRA говорил про то чтоб реализовать что то такое:

type
  Num = record
    val: string;//Вообще - string не годится))) медленно и памяти сожрёт...
    base: integer;
    
    constructor(val: string; base: integer);
    begin
      self.val := val;
      self.base := base;
    end;
  end;

begin
  new Num('123',5) + new Num('456',12) - new Num('7.81',10);//ToDo и т.д.
end.

ну можно использовать динамический массив char, порции то надо как то разделять, а можно заносить порции в массив, НО предварительно их тоже нужно конвертить и в итоге время также будет потрачено. стринг - это и есть динамический массив char. Но дело даже не в этом, конвертация происходит к примеру в BigInteger, и все последующие вычисления уже с ним, а конвертация нужна лишь для загрузки в Biginteger и визуального вывода в определенной системе счисления. Как дополнения конечно можно сделать, чтоб ричность писалась в скобочках, и скобочки будут как идентификатор числа, которое нужно конветнуть.

Я имел в виду для систем счисления типа 2 4 16 и т.п. - хранить числом, а для остальных - массивом байт. Хотя, конечно, хранить всё в виде BigInteger и конвертировать только для вывода в виде строки - должно быть быстрее.

В π нет комбинаций и иррациональное число однозначно равно длине окружности к диаметру круга, и в чём же единая цель?

Как верно указал Сергей, имеется в виду нечто более практичное, чем просто смена исчисления. Или вы просто решили поставленную задачку?

любое число это комбинация цифр, и пи это тоже число, главное ты понял смысл. В бесконечности, бесконечное количество конечных целей. Ограничения объекта определяют можешь ли ты идентифицировать этот объект или нет. по этому, если заранее не известна цель, то можно постепенно расширять границы в сторону бесконечности пока , что нибудь ни придумаешь, НО для этого должно что то быть, чтоб было за счет чего расширяться…))) главное поймать эмоциональную волну, а если ты ее упустишь и займешься разработкой того чем ее ловить, то волна может и не повториться исказившись твоим новым наработанным ассоциативным планом при разработки ответвлений. это типа низкоуровневого программирования, после которого не остается сил на высокий уровень. в общем пусть будет чтоб было для экспериментов, а там куда кривая выведет…))) а то не проверишь и будешь свою мозговую оперативку держать загруженной догадками с открытыми вопросами. оно как получается, а может быть так, а может быть этак, пока все варианты переберешь, вопросы по всплывают, и мозг в место того чтоб начать реализацию начнет защищаться, в итоге заблокирует твое желание что то делать…))) мне нужно было я сделал, потому как не знал стандартных методов, к примеру конвертировать ячейки памяти у которых 256-и ричьная система исчисления, в итоге алгоритм показал что он может конвертить любые исчисления, а с памятью работаю постоянно. к примеру когда не было Biginteger пришлось свою библиотеку писать, далее возник вопрос как гипер числа представить в 10-и ричьной системе, вот и все.

1 лайк

А можно подробнее?

куда подробней то, писал на асме, гипер числа- значет огромные или длинные числа, не вмещающиеся в один регистр 32-х или 64 разрядный, к примеру слаживал ячейки памяти и переносил флаг в другую ячейку, но это получалось 256-и ричьная система, а хочется то привычное исполнение 10-и, да и 2- ричьное исполнение нужно было. К стати, поковырял выложенные исходники на GitHub и понял, в PascalABC используют Visual Basic…)))

Звучит как интересная но очень мудрёная альтернатива BigInteger. Если действительно реализовать низкоуровнево и сделать обёртку на паскале - это должно работать быстрее, но если обычным массивом байт - в BigInteger так сделано, поэтому преимущества не будет.

Опять мысли из области “В Майкрософт сидят болваны, не могли нормально .NET написать”

А не замахнуться ли нам на Вильяма, понимаете ли, нашего Шекспира? © “Берегись автомобиля”

для моих целей этого было достаточно, по байтно заливается в регистры, сначала работал с 32-х разрядным асмом, затем все перевел на 64-х разрядный, там уже чуть побыстрей. Да понятно алгоритмов куча, есть на ютубе разжевывают как сделать быстрее, все равно упирается все в регистры.

есть в документации такая вещь как STEP, может кто подскажет как ее использовать?,так она просто не светится но в документации есть, изменял немного в модуле PABCSystem.pas саму функцию, чтоб она появилась, убирал слово extensionmethod и функция появлялась, и генерила она простой бесконечный счетчик другая с шагом, так и не понял для чего это нужно, если при вызове нельзя указать простой ограничитель, бред какойто счетчик называть бесконечными последовательностями, при этом любую последовательность можно рандомить или брать из массива, все остальное счетчик с шагом или без, комбинаторикой тут и не пахнет… image

extensionmethod-ы пишутся после переменной с тем же типом как у первого параметра (который всегда Self). Вот пример для Step(integer, integer):

begin
  1.Step(2).Take(5)
  .Select(i->Sqr(i))
  .ForEach(procedure(i)->Writeln(i));
end.

Это допустим можно через for (хотя будет выглядеть менее красиво), а вот с real - становится на много удобнее for.

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

P.S. Это надо спрашивать в помощи новичкам, потому что оффтоп относительно “Конвертация чисел из…”. @Gleb перенесите пожалуйста в “Помощь новичкам” эти 2 сообщения.

А что вы называете регистром? Слышал что то похожее вроде связанное с ассемблером, можете объяснить в терминах понятных паскалисту?))) Или, лучше, объяснить что такое регистр и как это работало подробнее.

регистры это ячейки быстрой памяти находящейся в процессоре, на них построена вся логика процессора, на них строятся все вычисления, переменные также используют регистры именно из за ограниченности регистров большинство типов очень короткие такие как Integer, именно из за величены регистров процессор считается 16-и 32-х или 64-х разрядный, величина регистра это одна порция с которой работает процессор за один такт своей частоты, частота микропроцессора очень важна для последовательных линейных вычислений, ибо за один раз больше чем влезает в регистр микропроцессор не может обработать больше информации, а так как повышение частоты для увеличения скорости вычисления разогревает микропроцессор физически, то таким образом увеличить частоту пока не получается, из за не возможности охладить его бюджетно(дорого), вот и придумали многоядерность, это несколько процессоров в одном(независимое выполнение нескольких процессов, все остальное иллюзия одновременности), но для линейных вычислений это не помогает, так как нельзя узнать (x) = (y)+1, если (y) еще не вычислен, тут важна скорость вычисления завязанная на частоте микропроцессора играющего с регистрами… ну как то так. Аsm - это и есть ассемблер. (Да к стати, к примеру в PascalABC операция обмена значений двух переменных делается с использованием создания третьей переменной, это функция swap(a,b), а вот в АСМе, на уровне микропроцессора есть, есть команда XCHG %RSI,%RDX - выполняется за один такт микропроцессора, заметь регистры 64-х разрядные, регистры сравнимы с типом int64) К примеру есть такой зверь Lazarus, он может воспринимать чистый код с Delphi, также FreePascal, так вот там можно делать ассемблерные вставки, но самое главное что он понимает 64-х разрядные ассемблерные вставки, что не скажешь даже про VisualStudio 2017 и Delphi, они могут только 32-х разрядные вставки, а чтоб использовать 64-х разрядные вставки нужно подсоединять как отдельный модуль, не удобно.