Форум программистов, компьютерный форум, киберфорум
Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.51/63: Рейтинг темы: голосов - 63, средняя оценка - 4.51
0 / 0 / 0
Регистрация: 03.05.2010
Сообщений: 46

Как увеличить максимальный размер массива?

03.05.2010, 01:02. Показов 13942. Ответов 88
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вопрос. Как увеличить максимальный размер массива? Команда типа DIM Y(16383) еще понимается
в QB, ,более уже никак, а мне надо хотя бы DIM Y(300000). Числа в массиве только натуральные, массив только одномерный. Строю скатерть Улама. Большую хочу!
Еще. Как картинку, нарисованную в QB напечатать или сохранить в JPG, например? Из ДОСа не получается..
Спасибо.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.05.2010, 01:02
Ответы с готовыми решениями:

Увеличить размер массива, оставив нетронутыми исходные элементы
1 (с использованием динамического массива): составить программу, в которой описать массив из 10 элементов и заполнить элементы 10...

Как программно увеличить максимальный размер окна в Windows?
Если в винде разрешение экрана 1024х768, то больше этого размера окно расширить нельзя. Можно ли как то убрать это ограничение?

Как динамически увеличить размер массива?
К примеру, задаю массивint Array;читаю данные с устройства и получается так, что данных пришло более 1000 позиций. Дело в том, что я...

88
PB
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
16.05.2010, 19:47
Студворк — интернет-сервис помощи студентам
Эксперимент показал что наибольшее замедление вносит эта строка
Code
1
DRB.f = N / X(i) - Int(N / X(i))
т. е. функция Int и работа с дробными числами.
Перебор массива выполняетя довольно быстро.
0
0 / 0 / 0
Регистрация: 03.05.2010
Сообщений: 46
17.05.2010, 00:15  [ТС]
Потрясно, все летает, все получилось! Огромное спасибо!!! Раздвину окно пошире , увижу побольше..
DRB.f = N / X(i) - Int(N / X(i)) - тут на деление"/", видимо, куча времени уходит? Но без него никак, делить то надо. Пусть так и останется. Ну, можно не делить дважды, а ввести еще переменную и пользовать ее, тогда деление будет одноразовое.
0
PB
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
17.05.2010, 00:26
Цитата Сообщение от sasa999 Посмотреть сообщение
Ну, можно не делить дважды, а ввести еще переменную и пользовать ее, тогда деление будет одноразовое.
Это не даёт прироста производительности, наоборот, увеличивает время на 1 секунду.
Основные тормоза не из-за деления, а из за функции Int, округляющей дробные числа.
Деление выполняет процессор за пару тактов. Это ведь не интерпретатор.

Цитата Сообщение от sasa999 Посмотреть сообщение
Раздвину окно пошире , увижу побольше
Для этого нужно указать желаемый размер в строках
Code
1
2
Width=600  ; Ширина экрана
Height=600 ; Высота экрана
изменить размер окна
Code
1
OpenWindow(0, 0, 0, 600, 640, "ULAM", #PB_Window_ScreenCentered|#PB_Window_MinimizeGadget|#PB_Window_Invisible)
4-тый рагумент - ширина окна, а 5-тый - высота.

Ну и подправить строку
Code
1
If im < 30000 : Goto PS1:  : EndIf      ;REM maksimum 16300
Думаю размер массива изменять не нужно, но при необходимости, можно увеличить и его размер.


Цитата Сообщение от sasa999 Посмотреть сообщение
все летает
Если не секрет, за сколько времени строится скатерть на вашем компе.
0
0 / 0 / 0
Регистрация: 03.05.2010
Сообщений: 46
17.05.2010, 00:58  [ТС]
30000 рисуется за 63сек. Все подправил, все получилось, окно раздвинулось. Разве Int так долго выполняется? Это же просто отбросить все, что после запятой. Это не за один такт разве делается?
0
PB
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
17.05.2010, 01:04
Цитата Сообщение от sasa999 Посмотреть сообщение
Разве Int так долго выполняется? Это же просто отбросить все, что после запятой. Это не за один такт разве делается
Не думаю что у процессора есть специальная инструкция для этого (ассемблер я не знаю), поэтому округление выполняется за нескоько тактов процессора.
Вообще, работа с дробными числами, требует больше времени чем с целыми.
1
PB
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
17.05.2010, 14:32
Скомпилировал программу в FreeBasic в режиме совместимости в QB.
Думал быстрее работать будет, но нет, скорсть постоения 34 секунды, что на 9 секунд больше чем в PureBasic.
Вложения
Тип файла: rar ULAM_FB.rar (49.8 Кб, 26 просмотров)
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
18.05.2010, 05:49
Цитата Сообщение от PB Посмотреть сообщение
Это же просто отбросить все, что после запятой.
Это перевод типов данных, процессор этим не занимается, там чёткие типы данных.
Для этого пишется программа, которая занимает много тактов.
Если работает без сопроцессора(целочисленная арифметика) то всё делается инструкциями процессора - это экстремально быстро если юзаем только регистры. Если сопроцессор, что наиболее вероятно, то при переводе в целое число фиксированного типа(8, 16, 32 бита) нужно проверить границы, очевидно жрёт много времени.
1
0 / 0 / 0
Регистрация: 03.05.2010
Сообщений: 46
19.05.2010, 00:12  [ТС]
Да , согласен, пожалуй что так оно и есть. СОвсем забыл Ассемблер..
0
0 / 0 / 0
Регистрация: 03.05.2010
Сообщений: 46
21.05.2010, 00:39  [ТС]
наблюдаю дальние зоны Улама. Интересно, что то новое открывается, хотя и не очень красивое. Чем больше скатерть, тем больше убеждаюсь в крайней медлительности вычислительных средств.. Двухъядерный годовалый пентюк ненамного лучше 8-милетнего пентюка. Нужна машина на пару-тройку порядков производительней.)) И монитор HD тоже маловат. Конкретно маловат. Странно, нонешнее крутое железо весьма слабо удовлетворяет древним задачам.
0
PB
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
21.05.2010, 11:59
Цитата Сообщение от sasa999 Посмотреть сообщение
Двухъядерный годовалый пентюк ненамного лучше 8-милетнего пентюка
Какая тактовая частота процессора?
Дело в том, что эта прога будет работать с одинаковой скоростью как на одноядернике, так и на 8-ми ядернике.
Здесь намного важнее тактовая частота, а не количество ядер, т. к. по сути, используется всего одно ядро!
Чтобы использовать все ядра процессора в программе, задачу нужно разпараллелить и выполнять в нескольких потоках, но при текущем алгоритме, это невозможно сделать, т. к. результат следующего расчёта зависит от всех предыдущих расчётов.


Цитата Сообщение от sasa999 Посмотреть сообщение
Странно, нынешнее крутое железо весьма слабо удовлетворяет древним задачам.
Может просто стоит изменить алгоритм задачи.
В первую очередь модифицировыать строку DRB.f = N / X(i) - Int(N / X(i))
Нужно избавится от функции Int и по возможности, от работы с дробными числами.
Тогда программа будет выполнятся намного быстрее.
0
PB
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
21.05.2010, 15:33
Изменил формулу нахождения простых чисел, теперь она такая DRB = N % X(i)
Она определяет остаток от деления, типа DRB = MOD(N, X(i)) В QB
Скатерть с размерами 600х600 строится за 7 секунд, а с размерами 800х800 за 20 секунд.
Размер окна и количество точек, задаётся в первых трёх строках программы
Code
1
2
3
Width=600  ; Ширина экрана
Height=600 ; Высота экрана
CountPoint=30000 ; Число точек
Вложения
Тип файла: rar ULAM.rar (64.8 Кб, 23 просмотров)
0
PB
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
21.05.2010, 17:35
Всё таки ассемблер творит чудеса!
Это
Code
1
2
3
4
PRST:   For I = 2 To im/2                ;REM vy4islenie prostogo 4isla
        DRB.l = N % X(i) 
        If DRB = 0 : Goto SOST : EndIf
        Next I
заменил на это
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
PRST:   im1=im/2
        MOV    ecx,dword [v_N]
        MOV    ebp,dword [a_X]
                               ;For I = 2 To im1                ;REM vy4islenie prostogo 4isla
                               
          MOV    esi,2
          MOV    ebx,dword [v_im1]
          For15:
           MOV    eax,ebx
           CMP    eax,esi
           JL    l_next1
        
                               ;DRB = N % X(i)          
          MOV    edi,esi
          SAL    edi,2
          MOV    eax,ecx
          CDQ
          IDIV   dword [ebp+edi]
                                ;If DRB = 0 : Goto SOST : EndIf
          AND    edx,edx
          JNE    l_m1
          JMP    l_sost
m1:
                                 ;Next I
        
          INC    esi
          JNO   l_for15
          Next1:
В итоге, скатерть с размерами 600х600 строится за 3 секунды.
Вложения
Тип файла: rar ULAM.rar (64.9 Кб, 28 просмотров)
0
0 / 0 / 0
Регистрация: 03.05.2010
Сообщений: 46
21.05.2010, 23:51  [ТС]
У меня 835МГц. Другой комп ок.2,5ГГц. Как это избавиться от дробных чисел? Именно это и нужно делать при обнаружении всех делителей очередного кандидата на простое число.
0
PB
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
22.05.2010, 00:51
Цитата Сообщение от sasa999 Посмотреть сообщение
Как это избавиться от дробных чисел? Именно это и нужно делать при обнаружении всех делителей очередного кандидата на простое число.
Нужно лишь узнать делится число на число или нет.
Для этого не обязатель использовать округление и дробные числа, т. е. DRB.f = N / X(i) - Int(N / X(i))
Достаточно выполнить целочисленое деление и узнать остаток от деления (целое число), т .е .
DRB = N % X(i)
Первая и вторая строка, выдаёт нам одинаковый результат, но вторая строка выполняется в несколько раз быстрее, а значит прога будет работать быстрее.
Запусти и сам убедишся - результат тот же, но скорость построения скатерти в 8 раз больше!

Добавлено через 4 минуты
Цитата Сообщение от sasa999 Посмотреть сообщение
Другой комп ок.2,5ГГц
И какое время выполнения?
Я тестировал проги на компе с двухядерным процем Celeron 1.6 ГГц.
Результаты выше.
1
0 / 0 / 0
Регистрация: 03.05.2010
Сообщений: 46
22.05.2010, 14:04  [ТС]
Класс! Но твой DRB = N % X(i) дает ускорение лишь в 2 раза по сравнению с моим DRB.f = N / X(i) - Int(N / X(i)) . Кстати, не совсем понимаю, как читается эта команда N % X(i) (извини, синтаксис так и не выучил, и диалект тем более). З.Ы. на ассемблере пока не пробовал.
0
PB
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
22.05.2010, 14:54
Цитата Сообщение от sasa999 Посмотреть сообщение
Кстати, не совсем понимаю, как читается эта команда N % X(i)
Я уже писал об этом выше

Цитата Сообщение от PB Посмотреть сообщение
Изменил формулу нахождения простых чисел, теперь она такая DRB = N % X(i)
Она определяет остаток от деления, типа DRB = MOD(N, X(i)) в QB
0
0 / 0 / 0
Регистрация: 03.05.2010
Сообщений: 46
24.05.2010, 00:59  [ТС]
C Ассемблерной вставкой быстрее в 2,5 раза. Поле 1000х1000 CountPoint=72000 рисует за 182 сек на
компе 835МГц.
0
0 / 0 / 0
Регистрация: 03.05.2010
Сообщений: 46
26.05.2010, 22:39  [ТС]
На Intel Core Duo 2.2ГГц 2,0Гб ОЗУ W=1280 H=1024 J0=2048 I0=512 DIM(1009000) скатерть строится 1443 сек, но видно только кусок ее 1280х1024, т.е. первый миллион простых чисел.
0
Кормпилятор
 Аватар для Quiet Snow
5044 / 1718 / 409
Регистрация: 25.04.2010
Сообщений: 4,827
Записей в блоге: 2
27.05.2010, 00:59
Круто,PB, слушай а можешь пояснить что делает команда CDQ, я просто под DOS'ом программил на голом асме, щас переучиваюсь(точнее пытаюсь ибо обновременно осваиваю ещё Blitz3D с AutoCad'ом). Как я понимаю Pure Basic допускает асмовые вставочки? Хотелось бы узнать как это делается, ибо заинтригован.

Цитата Сообщение от PB Посмотреть сообщение
Всё таки ассемблер творит чудеса!
Неа, чудо сотворил твой мозг, а асм ещё покуривает в сторонке когда какой-нть ярый демомейкер кодит, эти перцы таких вещей добиваются что от осознания сего факта волосы дыбом.
0
PB
Просто прогер
1292 / 1079 / 13
Регистрация: 13.03.2009
Сообщений: 2,502
27.05.2010, 10:54
Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
можешь пояснить что делает команда CDQ
Инструкция CDQ удваивает размер регистра EAX и сохраняет дополнительные биты в регистре EDX. Преобразование делается используя знаковое расширение.

Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
Как я понимаю Pure Basic допускает асмовые вставочки
Да, нужно только разрешить их в опциях проекта

Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
Хотелось бы узнать как это делается, ибо заинтригован.
В проекте разрешается асм и далее в коде просто добавляются инструкции и всё. Особых заморочек с этим нет.

Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
Неа, чудо сотворил твой мозг
Не совсем.
Это немного доработаный результат компиляции PureBasic.
ASM код сгенерил он, я лишь избавился от постояного обращения к переменным в памяти, путём использования регистров процессора и за счёт этого, получил прибавку в скорости.
Миниатюры
Как увеличить максимальный размер массива?  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.05.2010, 10:54
Помогаю со студенческими работами здесь

Как увеличить размер дин. массива средствами С++
Привет всем!!! Подскажите плз, как увеличить размер (т.е добавить один элемент в конец) динамического массива средствами С++. (new и...

Необходимо увеличить максимальный размер памяти программы до 5 Гигов
Необходимо увеличить максимальный размер памяти программы до 5 Гигов и как я понимаю, выполнить явный вызов деструкторов for (int i = 0;...

Как увеличить размер массива до заданной длины заданным значением?
Как увеличить размер массива до заданной длины заданным значением?

Как можно увеличить размер массива на 1, чтобы добавилась еще одна строка снизу
дан двумерный массив, где i - индекс столбца, j - индекс строки. Как можно увеличить размер массива на 1, чтобы добавилась еще одна строка...

Как в IntelliJ IDEA увеличить размер (размер редактора, кода)?
как в IntelliJ IDEA увеличит размер (размер редактора, кода)?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
80
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru