С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 426

3 "туплю" при заполнении массива

09.11.2024, 21:09. Показов 740. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Имеется двумерный массив MyArray(2999, 2999). В проге часто надо заполнять всю "строку" или весь "столбец" только нулями или только единицами или только двойками
Кроме этого я ничего не знаю:
Visual Basic
1
2
3
For i = 0 To 2999
     MyArray(123, i) = 1
Next x
Вопросы:
1. Существуют ли какие-то быстрые способы сделать такое заполнение?
2. Пытался замерить скорость приведённого мной цикла:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Option Explicit
'
Private Declare Function GetTickCount Lib "kernel32" () As Long
Dim MyArray(2999, 2999) As Byte
Dim tmr As Double
Dim i, j As Integer
 
Private Sub cmdCommand1_Click()
tmr = GetTickCount()
For i = 0 To 2999
MyArray(123, i) = 1
Next i
lblLabel1 = GetTickCount() - tmr
End Sub
выдаёт 0 - могу ли я считать что происходит так быстро, что до второго тика дело не доходит? или у меня в коде ошибка?

3. Что именно находится в ячейках MyArray() при Dim MyArray(2999, 2999) As Byte - именно 0 или что-то другое, то есть могу ли я потом ставить условие
Visual Basic
1
If MyArray(x,y) = 0 Then ...
если я сам нули не записывал в массив
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.11.2024, 21:09
Ответы с готовыми решениями:

MemoryError при заполнении массива
Добрый день, столкнулся с MemoryError при заполнении массива данными. Действительно, получается очень большое количество, однако это...

Ошибка при заполнении массива
Всем привет! Пытаюсь заполнить массив через StringGrid, но при заполнении выдает ошибку "econverterror with message is not a valid...

Глюк при заполнении массива
Заполняю массив float row float j=0; for (int i=0;i<501;i++) { row=j; cout<<j<<endl; j += 0.02; ...

12
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
09.11.2024, 21:27
Цитата Сообщение от giaber Посмотреть сообщение
могу ли я считать что происходит так быстро, что до второго тика дело не доходит?
Да, конечно 2999 интераций это очень мало для современных компьютеров и процессоров, чтобы появилась разница в скорости нужно обрабатывать миллионами, а то и десятками (или даже сотнями) миллионов интераций. Поэкпеременируйте и поставьте 3 млн вместо 3 тыс. И увидете какая скорость.

Добавлено через 40 секунд
А так 3 тысячи конечно будет обрабатывать мгновенно.

Добавлено через 22 секунды
Так что более быстрый способ вам искать не нужно.
1
sleep
 Аватар для I can
4916 / 4567 / 838
Регистрация: 13.04.2015
Сообщений: 9,703
09.11.2024, 21:29
Цитата Сообщение от giaber Посмотреть сообщение
если я сам нули не записывал в массив
Там нули.
2
sleep
 Аватар для I can
4916 / 4567 / 838
Регистрация: 13.04.2015
Сообщений: 9,703
09.11.2024, 21:33
Цитата Сообщение от giaber Посмотреть сообщение
так быстро
Вот смотри на 9 миллионах итераций какая маленькая разница
Миниатюры
3 "туплю" при заполнении массива  
2
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 426
09.11.2024, 21:45  [ТС]
Всем БОЛЬШОЕ спасибо! Всё прояснили!
0
 Аватар для Mikle Quits
759 / 278 / 14
Регистрация: 21.01.2023
Сообщений: 397
10.11.2024, 16:41
С помощью CopyMemory() можно ускорить очистку строк, но не столбцов (тут элементы в памяти расположены не подряд).
Когда я писал софтрендер, я сначала сделал очистку экрана так:
Visual Basic
1
2
3
4
5
6
7
8
9
Public Sub SR_ClearCBuffer(ByVal c As Long)
  Dim x As Long, y As Long
 
  For y = 0 To SR_Height - 1
    For x = 0 To SR_Width - 1
      CBuffer(x) = c
    Next x
  Next y
End Sub
Потом оптимизировал так:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Public Sub SR_ClearCBuffer(ByVal c As Long)
  Dim x As Long, y As Long
 
  For x = 0 To SR_Width - 1
    CBuffer(x) = c
  Next x
  x = SR_Width * 4
  For y = SR_Width To SR_Width * (SR_Height - 1) Step SR_Width
    CopyMemory CBuffer(y), CBuffer(y - SR_Width), x
  Next y
End Sub
Получил ускорение в 10 раз.
1
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 426
10.11.2024, 18:52  [ТС]
Mikle Quits Спасибо! Записал себе в библиотеку кодов, но, к сожалению, в моём случае без столбцов теряет смысл использовать
0
 Аватар для Mikle Quits
759 / 278 / 14
Регистрация: 21.01.2023
Сообщений: 397
10.11.2024, 19:34
Я там выше старый вариант написал по памяти неправильно. Было проще, массив то одномерный:
Visual Basic
1
2
3
4
5
6
7
Public Sub SR_ClearCBuffer(ByVal c As Long)
  Dim x As Long
 
  For x = 0 To SR_Width * SR_Height - 1
    CBuffer(x) = c
  Next x
End Sub
1
Модератор
10046 / 3892 / 883
Регистрация: 22.02.2013
Сообщений: 5,846
Записей в блоге: 79
11.11.2024, 00:08
giaber, при компиляции со всеми оптимизациями твой код будет работать довольно быстро. Если после компиляции скорость не устроит то можно сделать многими способами. К примеру можно замапить массив на UDT и доступ тогда будет такой же быстрый как и в С например. Скорость нужно мерить через QPC.
1
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 426
11.11.2024, 13:24  [ТС]
Спасибо, The trick! Когда (и если) закончу проект потом буду шлифовать подобные нюансы
0
Испарился
 Аватар для HackerVlad
1741 / 637 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
11.11.2024, 15:23
giaber, а что у вас за проект вообще такой интересно, что вы там такое грандиозное пишите)
0
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 426
11.11.2024, 19:04  [ТС]
Это резалка картинки на маленькие - линиями или фреймами выбираешь нужные куски и прога сохранит их на диск. Когда-то мне понадобилось такое и, как всегда, я "скачал весь интернет", но ни одна прога не устроила меня, ну то-есть работу-то какая-то из них сделала, но все они такое убожество! И тут моя гордость возопила:"Ты гениальный программист или где!? Покажи им всем что такое нормальная прога!" И вот прошло уже 5 лет, а прога всё еще в работе, гордость куда-то спряталась, затихарилась, не видно-не слышно, и я остался один на один со своей ламерской реальностью.
Ну, а если серьёзно, то когда/если она будет сделана, то получится довольно навороченная штучка, тем более для фреймов мне The Trick такой модуль подарил - пальчики оближешь! Полупрозрачные, цветные с регулировкой на лету обоих этих параметров - красота! "Галантерейщик и кардинал - это сила!" (с)
PS
На скриншоте Leandro-вские фреймы, но The Trick-овские точно так выглядят
Миниатюры
3 "туплю" при заполнении массива   3 "туплю" при заполнении массива  
1
1383 / 838 / 90
Регистрация: 08.02.2017
Сообщений: 3,511
Записей в блоге: 1
12.11.2024, 04:02
Быстрое заполнение будет когда есть готовый массив, заполненный двойками. Его можно скопировать целиком с помощью copymemory в целевой массив
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.11.2024, 04:02
Помогаю со студенческими работами здесь

Ошибка при заполнении массива
Объявляю и пытаюсь заполнить так: TArray__1<System::Byte> *buffer; buffer = new TArray__1 <System::Byte> (6); buffer='r';...

Ошибка при заполнении массива
Нужно заполнить массив в четных индексах 1-цей , а в нечетных значением i / 5; using System; using System.Collections.Generic; ...

Ошибка при заполнении массива
Есть код: Random r = new Random(); int k = r.Next(0, 10000); int kk = { k }; for (int i = 0; i < k; i++) { kk = i; //Вот...

Ошибка при заполнении массива
массив представляет собой таблицу исходных данных для транспортной задачи. тарифы для перевозок вводится норм. остается заполнить кол-во...

Ошибка при заполнении массива
Здравствуйте. Есть класс, в котором объявлены 2 поля и 2-мерный массив. Создал метод, который задает кол-во строк и столбцов, а затем...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru