Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Lazarus, Free Pascal, CodeTyphon
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.08.2016, 02:41   #1
Danilkoo832832
 
Регистрация: 22.08.2016
Сообщений: 5
По умолчанию Random и BigInteger (Pascal ABC)

Random не работает с BigInteger из-за ошибки "Нельзя преобразовать тип system.numerics.biginteger к integer".
Как это можно обойти(Библиотеки дописывать не охото) и можно ли вообще?
Если нет то как написать свою функцию рандом(можно с ручным вводом сида)?
Danilkoo832832 вне форума Ответить с цитированием
Старый 22.08.2016, 13:59   #2
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

А опишите задачу подробнее, может статься, что тут другое решение.
Ну и минимальный тестовый пример приведите.
FPaul вне форума Ответить с цитированием
Старый 22.08.2016, 14:46   #3
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,689
По умолчанию

А integer к system.numerics.biginteger можно?
Вообще не знаю про АБС, но уж если так хочется большие произвольные числа, то можно рандомить по разрядам (или по нескольким сразу), что-то типа
Код:
for i := 1 to 100 do myBigInt := myBigInt *10 + random(10)
eoln вне форума Ответить с цитированием
Старый 23.08.2016, 00:01   #4
Danilkoo832832
 
Регистрация: 22.08.2016
Сообщений: 5
По умолчанию

Biginteger и integer плохо совместимы, из-за этого random не может производить никаких манипуляций с biginteger
Код:
var R_num,BInt:BigInteger;//Biginteger Тип с произвольной величиной числа
    R_BInt:string;
begin
  read(r_bint);
  bint:=biginteger.Parse(r_bint);
  r_num:=random(bint);
  write(r_num);
end.
Цитата:
А integer к system.numerics.biginteger можно?
Да можно.
Рандом по разрядам плохая идея.
Danilkoo832832 вне форума Ответить с цитированием
Старый 23.08.2016, 08:21   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Рандом по разрядам плохая идея.
а чем?

на стековефлоу искали?
попробуйте такой код адаптировать под свой паскаль:
Код:
var rng = new RNGCryptoServiceProvider();
byte[] bytes = new byte[n / 8];
rng.GetBytes(bytes);

BigInteger p = new BigInteger(bytes);
кстати, у Вас не PascalABC, у Вас PascalABC.NET (это абсолютно разные диалекты/компиляторы).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 29.08.2016, 03:06   #6
Danilkoo832832
 
Регистрация: 22.08.2016
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а чем?
Тем что надо будет постоянно сравнивать рандомное число с максимальным его значением.

Код:
var rng = new RNGCryptoServiceProvider();
byte[] bytes = new byte[n / 8];
rng.GetBytes(bytes);

BigInteger p = new BigInteger(bytes);
Непонятен мне данный код.
P.S. Паскаль знаю плохо. Можете ли вы еще посоветовать какую-то литературу по языку?
Danilkoo832832 вне форума Ответить с цитированием
Старый 29.08.2016, 10:09   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Тем что надо будет постоянно сравнивать рандомное число с максимальным его значением.
о, а что такое "максимальное" значение? Откуда возникло это ограничение?
очевидно, что в каждом разряде не может быть больше 9. максимальное значение определяется числом разрядов: 999..(9)..9

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


Цитата:
Непонятен мне данный код.
допускаю.
что конкретно в нём непонятно?
Имхо, он вообще в Паскаль АБЦ.НЕТ не должен компилится! Его нужно допиливать до кондиции.

Цитата:
P.S. Паскаль знаю плохо. Можете ли вы еще посоветовать какую-то литературу по языку?
Pascal ABC.NET - это не стандартный Паскаль. Я не знаю, зачем Вы выбрали именно его, но, раз Вам это нужно, изучайте программирование под .NET
Данный Паскаль - это скорее обёртка над фреймворком.
А ещё лучше, если Вам нужен .NET - то переходите на его родной язык - C#
и литературы больше, и IDE есть, и реализация родная.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.08.2016, 02:25   #8
Danilkoo832832
 
Регистрация: 22.08.2016
Сообщений: 5
По умолчанию

Цитата:
максимальное значение определяется числом разрядов: 999..(9)..9
Ну вот мне надо взять рандомное число из диапазона 0-5476432783247
Если рандомить по разрядам то может получиться число 9324326552779. 9324326552779>5476432783247

Цитата:
А ещё лучше, если Вам нужен .NET - то переходите на его родной язык - C#
и литературы больше, и IDE есть, и реализация родная.
Я думал начать с c#, но решил изучить основу pascal abc.net(Он для начального изучения вроде как легче), а потом уже перейти на c#
Danilkoo832832 вне форума Ответить с цитированием
Старый 30.08.2016, 09:45   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Ну вот мне надо взять рандомное число из диапазона 0-5476432783247
первую цифру числа получайте из диапазона 0-5 ( Random(5) )
вторую цифру числа получайте из диапазона 0-4 ( Random(4) )
третью цифру числа получайте из диапазона 0-7 ( Random(7) )
четвёртую цифру числа получайте из диапазона 0-6 ( Random(6) )
и т.д.
для этих целей удобно воспользоваться константным массивом.


а вообще, Вы пытаетесь использовать BigInteger там, где он не особо нужен.
есть такой тип данных - int64
возьмите его.
у него максимально допустимое значение
знаковое 9223372036854775807
беззнаковое 18446744073709551615 (см. MSDN - Data Type Ranges или Int64.MaxValue в .NET)
Вам хватит такого диапазона?



Цитата:
Я думал начать с c#, но решил изучить основу pascal abc.net(Он для начального изучения вроде как легче), а потом уже перейти на c#
на мой взгляд - это ошибка. Потому что Pascal ABC.NET это как морская свинка - не имеет отношения ни к морю, ни к свиньям. Это и не чистый Паскаль и не совсем .NET
Не стоило начинать с него.
Тогда уже возьмите "чистый" Паскаль (FreePascal, for example)
или, начинайте прямо с C#
вон, у microsoft были уроки "c# для школьников"
всё это, конечно, исключительно моё личное мнение (IMHO).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 30.08.2016, 14:37   #10
Danilkoo832832
 
Регистрация: 22.08.2016
Сообщений: 5
По умолчанию

Цитата:
Вам хватит такого диапазона?
Нет не хватит.
Цитата:
Тогда уже возьмите "чистый" Паскаль (FreePascal, for example).
Вроде в pascal abc.net есть все возможности FP(могу ошибаться).
Danilkoo832832 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
BigInteger в Math.Biginteger; Artorios Общие вопросы по Java, Java SE, Kotlin 1 19.11.2013 02:21
Random (Pascal) spinogryz_ua Помощь студентам 3 23.01.2013 00:13
Random (pascal) spinogryz_ua Помощь студентам 6 09.01.2013 13:50
в Pascal ABC.Net ошибка:"невозможно явно преобразовать тип integer к System.random" ameks94 Паскаль, Turbo Pascal, PascalABC.NET 3 23.12.2012 02:04
pascal random S0ap Помощь студентам 2 10.07.2011 17:49