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

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

09.11.2024, 21:09. Показов 791. Ответов 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
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
09.11.2024, 21:27
Цитата Сообщение от giaber Посмотреть сообщение
могу ли я считать что происходит так быстро, что до второго тика дело не доходит?
Да, конечно 2999 интераций это очень мало для современных компьютеров и процессоров, чтобы появилась разница в скорости нужно обрабатывать миллионами, а то и десятками (или даже сотнями) миллионов интераций. Поэкпеременируйте и поставьте 3 млн вместо 3 тыс. И увидете какая скорость.

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

Добавлено через 22 секунды
Так что более быстрый способ вам искать не нужно.
1
dive
 Аватар для I can
4963 / 4660 / 845
Регистрация: 13.04.2015
Сообщений: 9,853
09.11.2024, 21:29
Цитата Сообщение от giaber Посмотреть сообщение
если я сам нули не записывал в массив
Там нули.
2
dive
 Аватар для I can
4963 / 4660 / 845
Регистрация: 13.04.2015
Сообщений: 9,853
09.11.2024, 21:33
Цитата Сообщение от giaber Посмотреть сообщение
так быстро
Вот смотри на 9 миллионах итераций какая маленькая разница
Миниатюры
3 "туплю" при заполнении массива  
2
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 429
09.11.2024, 21:45  [ТС]
Всем БОЛЬШОЕ спасибо! Всё прояснили!
0
 Аватар для Mikle Quits
779 / 296 / 17
Регистрация: 21.01.2023
Сообщений: 500
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
Сообщений: 429
10.11.2024, 18:52  [ТС]
Mikle Quits Спасибо! Записал себе в библиотеку кодов, но, к сожалению, в моём случае без столбцов теряет смысл использовать
0
 Аватар для Mikle Quits
779 / 296 / 17
Регистрация: 21.01.2023
Сообщений: 500
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
Модератор
10057 / 3902 / 884
Регистрация: 22.02.2013
Сообщений: 5,853
Записей в блоге: 79
11.11.2024, 00:08
giaber, при компиляции со всеми оптимизациями твой код будет работать довольно быстро. Если после компиляции скорость не устроит то можно сделать многими способами. К примеру можно замапить массив на UDT и доступ тогда будет такой же быстрый как и в С например. Скорость нужно мерить через QPC.
1
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 429
11.11.2024, 13:24  [ТС]
Спасибо, The trick! Когда (и если) закончу проект потом буду шлифовать подобные нюансы
0
Испарился
 Аватар для HackerVlad
1742 / 638 / 45
Регистрация: 10.09.2021
Сообщений: 2,769
11.11.2024, 15:23
giaber, а что у вас за проект вообще такой интересно, что вы там такое грандиозное пишите)
0
101 / 38 / 0
Регистрация: 16.09.2014
Сообщений: 429
11.11.2024, 19:04  [ТС]
Это резалка картинки на маленькие - линиями или фреймами выбираешь нужные куски и прога сохранит их на диск. Когда-то мне понадобилось такое и, как всегда, я "скачал весь интернет", но ни одна прога не устроила меня, ну то-есть работу-то какая-то из них сделала, но все они такое убожество! И тут моя гордость возопила:"Ты гениальный программист или где!? Покажи им всем что такое нормальная прога!" И вот прошло уже 5 лет, а прога всё еще в работе, гордость куда-то спряталась, затихарилась, не видно-не слышно, и я остался один на один со своей ламерской реальностью.
Ну, а если серьёзно, то когда/если она будет сделана, то получится довольно навороченная штучка, тем более для фреймов мне The Trick такой модуль подарил - пальчики оближешь! Полупрозрачные, цветные с регулировкой на лету обоих этих параметров - красота! "Галантерейщик и кардинал - это сила!" (с)
PS
На скриншоте Leandro-вские фреймы, но The Trick-овские точно так выглядят
Миниатюры
3 "туплю" при заполнении массива   3 "туплю" при заполнении массива  
1
1390 / 846 / 92
Регистрация: 08.02.2017
Сообщений: 3,612
Записей в блоге: 2
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
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru