![]() |
|
|
![]()
|
|
| Zero |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
Привет народ, вот мне в голову пришла идея, сделать свою задачу универсальной для ввода значений, т.е. чтобы вам было по понятнее, то скажу так, как сделать тип чтобы в него можно было записать большое кол-во символов?
Пример
Это сообщение отредактировал(а) Zero - 9.12.2004, 18:53 |
||||
|
|||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 4 Всего: 360 |
Массив из букв
Или создавай свой тип на N бит |
|||
|
||||
| Zero |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
Это я не понял... а как он будет связан с типом Integer???
А это я сам пытался сделать, но не получается. sergej.z, ты не мог бы пример привести??? |
||||
|
|||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 4 Всего: 360 |
На паскале тяжеловато мне
На Си это выглядело бы примерно так:
|
|||
|
||||
| S.A.P. |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2664 Регистрация: 11.6.2004 Репутация: нет Всего: 71 |
Могу на С++ сделать. На паскале вряд ли выйтет
Добавлено @ 19:35 sergej.z уже код написать успел |
|||
|
||||
| Zero |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
А я кроме Object Pascal, и ему подобных, не заню... (микроасемблер не в счёт) |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Самое компактное из тех что легко обрабатывать и в(ы)водить - Array of BCD.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 4 Всего: 360 |
На паскале можно было бы опередлить функции
add, subtract, multiply итд. |
|||
|
||||
| Zero |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
|
||||
|
|||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 4 Всего: 360 |
Я бы рад, но к сож. мне надо много восстанавливать в голове
Может кто нить сможет? |
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: нет Всего: 20 |
sergej.z
Плюс в с++ можно создать динамический массив, где размер его элентов, будет ограничиваться лишь мощностью компьтера... -можно даже прогу сделать, чтобы юзверя её запускали, и мерились, чей комп круче... |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Zero
Придется создавать процедуры присвоения, сравнения, сложения... т.е. просто пишешь свой класс. Если надо - потом перегружаешь существующие функции и операторы... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| III.nfo |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 18.10.2004 Репутация: 2 Всего: 2 |
Можно число в файл кидать. Тогда число ограничено только размерами диска.
|
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
III.nfo
Вряд ли... А если диск на 120 Г? хотя... обрабатывать можно и по частям... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Zero |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
|
||||
|
|||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 4 Всего: 360 |
Какие бы ты преобразования с число не делал, всё делается по частям Правда, если весь Жд одним числом занять, то ни для второго, ни для результата их сложения места уже не останется |
|||
|
||||
| Zero |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
Ладно, скажу ещё так, чтобы вам понятнее было чё это за большое число, короче у меня в проге исп. цикл Фор, где это число и будет окончанием чикла, и если и поэтому с файлом тут работать никак нельзя...
Да и ещё при подсчёте в цикле это число будет ещё в одном месте исп. поэтому замена здесь ни как не пойдёт, чисто нужен алгоритм создания такого типа. Недаром, я выложил эту тему в раздел алгоритмов, а не Delphi, Kulix and Pascal, где я в основном нахожусь. |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: нет Всего: 207 |
У меня есть написанная мной библиотека которая работает с числами неограниченной разрядности, причём довольно быстро, например возведение 9999 в степень 9999 делается меньше чем за минуту (ответ с точностью до единицы).
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Zero |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
Vit, а немог бы ты скинуть кусок кода, который связан с преобразованем типа, в неограниченую разрядность, интересно бы посмотреть суть алгоритма...
конечно в определённых случаях точность ни сильно на что-либо влияет, а в данном случае она может искозить весь результат, я надеюсь в твоём алгоритме точность не всегда искожается. И кстати я был бы рад услышать мнение Дельфиста, что ты думаешь на счёт типов, можно ли его искуственно повысеть в разрядности??? Буду рад услышать любой ответ, бусть даже "нет", тогда буду знать что можно искать др. вариант. |
||||
|
|||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: нет Всего: 20 |
"массиву присвоить число, и обрабатывать его? (типа разделить на чё-нибудь и т.п.)"
Конечно, просто представляй, что число в массиве разбито на разряды, ДЫк первый(matr[0]) - это допустим десятки в случае (matr[] = { 1, 0}) А пользователь будет думать, что это действительно очень большое число, а для компьютера, это будет всего лишь набор цифр... НО с ними можно работать, точнее производить арифметические операции(+, -, /, Ну если будешь пользоваться данным методом не забывай, простые свойства массивов : matr[6] = { 1,0,0,0,0} - это число 10000 к примеру : если число в массиве - нуль, так тут вообще всё просто... Чтобы узнать максимальный разряд числа в массиве, то нужно просто подсчитать кол-во элементов в нём, соответсвенно всё зависит от языка разработки... А если надо будет постоянно производить изменение числа, то надо юзать дин. массив. Это сообщение отредактировал(а) En_t_end - 10.12.2004, 12:08 |
|||
|
||||
| Zero |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
А как на счёт того, что я собираюсь использвать такой цикл:
Это сообщение отредактировал(а) Zero - 10.12.2004, 17:06 |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 20 Всего: 454 |
Главное, чтобы для него был переопределен оператор сложения. А массив он там или нет - пусть метод класса разбирается - он-то знает... а для программы это целое число - просто какое-то ненормально длинное... -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| III.nfo |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 39 Регистрация: 18.10.2004 Репутация: 2 Всего: 2 |
А нельзя ли кусками обрабатывать? Т.Е. обработал кусок - пишешь его куда-нибудь, едем далее... Тем более, сомневаюсь, что число будет более 1 МБ по длине
Так вопрос был про оч-чень большое число. |
||||
|
|||||
| Zero |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
Кусками, конечно можно, и я даже могу переделать др. способом, но это уже будет нето, ведь у меня учебная прога, и я хочу разобратся в том как сделать такой тип, чтобы он мог бы включать кучю разрядов. Если бы у меня было задание "сделать так, неважно как", то я бы сделал что-нибудь, вчасности если бы на практике делал, то там только можно исп. так...
Akina, а ты всётаки знаеш как сделать то что я просил или нет??? И ещё, интересно:
|
||||||
|
|||||||
| neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Зачем перегружать операторы? Можно ведь просто написать функции сложения, умножения .. ит.д. (то, что Вит предлагал.). Важно лишь в каком формате Вит представил числа.
Тут говорили на счет компактности... Так на самом деле компактнее всего хранить числа в формате PACKED BCD (упакованный двоично-десятичный). Кстати и операции для такого типа довольно быстры, нежели для простого массива разрядов. Правда это дело придется писать на ассемблере. Проще всего узнать у Вита о его числах. Добавлено @ 00:49 Если надо я написал функции ADD, SUBTRACT, MULTIPLY на ассемблере. Работают довольно быстро, но с массивом разрядов, по-моему (уже не помню -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
| En_t_end |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2074 Регистрация: 4.12.2004 Репутация: нет Всего: 20 |
ТОЧНО, как же я сразу не догадался... ведь надо переводить обычное десятичное число в двоичное, но если оно слишком велико, то разбиваем его соответсвенно правилу разрядов... дальше делаем с ним ар. операции, через ассемблерные вставки... переводим число обратно в десят. формат, но если оно большее разбиваем его на разряды и т.д и т.п... Так можно работать с просто-офигенно большими числами...
|
|||
|
||||
| Fedor |
|
|||
![]() Днепрянин ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2090 Регистрация: 8.2.2003 Где: Великий Репутация: 2 Всего: 32 |
Zero зайди на algolist.manual.ru там есть статья по работе с длинными числами. Описан алгоритм сложения, вычитания, деления и умножения. Попробуй еще в инете поискать книгу или статьи Окулова. Там ве хорошо это расписано
-------------------- Мы - Днепряне. Мы всех сильней. |
|||
|
||||
| Zero |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2169 Регистрация: 23.10.2004 Где: Россия, г. Рязань Репутация: нет Всего: 24 |
Ладно, народ спасибо всем за участие, впринцепе на свой вопрос я ответ получил, т.е. я так и думал что через раздел Type, его не сделать, а на всякий случай спросил у вас, но раз непосредственного способа я не получил значит действительно сделать его так нельзя...
Ещё раз, Спаисбо всем за участие и ответы!!! Добавлено @ 11:49
neutrino, тебе тоже спасибо за попытку оказать ещё одну помощь, но я в асемблере не умею программировать... |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |