Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Excel VBA, CAD, Софт, ОС, Windows, Ubuntu, Android, VPS
Win Api, Assembler, C++, Java, Pascal, Lazarus, Delphi, OpenGL, DirectX
C#, Qt, .NET, ASP.NET, Windows Forms, ADO.NET, Framework, WPF, UWP, WinRT, XAML
HTML, CSS, JavaScript, Ajax, PHP, Perl, Python, Ruby, SQL, WordPress, API, XML, JSON, ActionScript, Flash

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

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

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

icq: 421277094
По умолчанию

А integer к system.numerics.biginteger можно?
Вообще не знаю про АБС, но уж если так хочется большие произвольные числа, то можно рандомить по разрядам (или по нескольким сразу), что-то типа
Код:

for i := 1 to 100 do myBigInt := myBigInt *10 + random(10)

eoln вне форума   Ответить с цитированием
Старый 23.08.2016, 01:01   #4
Danilkoo832832
 
Регистрация: 22.08.2016
Сообщений: 5
Репутация: 10
По умолчанию

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, 09:21   #5
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 21,400
Репутация: 4869
По умолчанию

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

на стековефлоу искали?
попробуйте такой код адаптировать под свой паскаль:
Код:

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, 04:06   #6
Danilkoo832832
 
Регистрация: 22.08.2016
Сообщений: 5
Репутация: 10
По умолчанию

Цитата:
Сообщение от 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, 11:09   #7
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 21,400
Репутация: 4869
По умолчанию

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

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


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

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

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

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

Цитата:
Ну вот мне надо взять рандомное число из диапазона 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, 15:37   #10
Danilkoo832832
 
Регистрация: 22.08.2016
Сообщений: 5
Репутация: 10
По умолчанию

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



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
BigInteger в Math.Biginteger; Artorios Общие вопросы по Java, Java SE 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 Паскаль 3 23.12.2012 02:04
pascal random S0ap Помощь студентам 2 10.07.2011 17:49




02:55.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Покупайте на сайте www.skinon.ru уникальные чехлы и наклейки для телефонов.
купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru