Форум программистов, компьютерный форум, киберфорум
Microsoft Access
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.69/29: Рейтинг темы: голосов - 29, средняя оценка - 4.69
73 / 47 / 9
Регистрация: 24.03.2014
Сообщений: 470

Сложить между собой поля записей в таблице нарастающим итогом

25.11.2015, 00:25. Показов 5951. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Друзья, такая задача:
есть таблица записей - индекс и числовое поле. Необходимо запросом вывести оба поля и добавить еще одно, в которое суммировались бы все числовые поля предыдущих записей и текущей:


id Числовое поле Новое поле из запроса 
1 5 5 (не с чем складывать, первая запись)
2 4 9 (4+5)
3 3 12 (3+9)
4 2 14 (2+12)
Как это сделать в vba мне понятно, там вообще проблем нет.
Но у меня таких записей в таблице несколько десятков тысяч, вот я и подумал, что sql будет быстрее. Вот только реализовать не понимаю как (как обратиться к числовому полю предыдущей записи в запросе)?

Вообще к этому общий вопрос - при необходимости выполнения сложных математических операций (корень, степень) при большом массиве записей (несколько сотен тысяч) что будет разумнее? Через vba, вынести таблицы на sql-сервер, запросам в jetsql акса?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.11.2015, 00:25
Ответы с готовыми решениями:

Посчитать последовательность нарастающим итогом
Добрый вечер! У меня возникла проблема с vba. Существует какая-то последовательность чисел (например 1,2,3,4,5) Необходимо написать их...

Свод нарастающим итогом из нескольких листов
Здравствуйте, уважаемые программисты!!! Очень нужна Ваша помощь!!!! Есть файл Excel, каждый лист соответствует месяцу. На листе отражены...

Форма с таблицей в которой поле считается нарастающим итогом
Поле СОСТОИТ сущности ДВИЖЕНИЕ должно считаться как СОСТОИТ_ПРЕДЫДУЩЕЕ + ПРИБЫЛО - УБЫЛО и так для каждой записи. Форма должна быть строго...

22
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
25.11.2015, 00:51
Запрос нарастающим итогом имеет например такую структуру
SQL
1
2
3
SELECT id, [Числовое поле], 
  (SELECT SUM([Числовое поле]) FROM Таблица t WHERE Таблица.id>=t.id) AS [Нарастающий итог]
FROM Таблица
Надо иметь в виду, что запросы нарастающим итогом медленные. Время выполнения пропорционально N^2 поскольку для каждой записи надо вычислять сумму меньших по id. Поэтому, если не требуется нарастающий итог для всего набора данных, то имеет смысл его сначала отфильтровать, а потом уже выполнять запрос нарастающим итогом.

Ну и вопрос: а зачем все это делать в запросе? В отчете нарастающий итого легко делается встроенными средствами.

Добавлено через 4 минуты
Математические операции Jet SQL как раз неплохо обрабатывает, достаточно быстро. А вот более или менее сложные запросы с подзапросами типа нарастающего итога или скользящего среднего у него получаются хуже. Серверные БД в этом плане быстрее.

Ну а на ВБА, что считать если Вам нужен результат для каждой записи? Только разве что записывать во временную таблицу или свободный рекордсет.
3
73 / 47 / 9
Регистрация: 24.03.2014
Сообщений: 470
25.11.2015, 01:00  [ТС]
Цитата Сообщение от mobile Посмотреть сообщение
Ну и вопрос: а зачем все это делать в запросе? В отчете нарастающий итого легко делается встроенными средствами.
Да дело в том, что это только промежуточный этап. Далее, получившиеся значения должны быть также обработаны (условно еще одно поле, которое заполняется через IIF - если сумма меньше какого-то значения, проставляется текстовая литера - то есть пока сумма не больше определнного значения набор записей получит одну и ту же текстовую маркировку).

Добавлено через 2 минуты
Цитата Сообщение от mobile Посмотреть сообщение
Ну а на ВБА, что считать если Вам нужен результат для каждой записи? Только разве что записывать во временную таблицу или свободный рекордсет.
Я рассчитываю индекс вариации и модель XYZ для каждой записи таблицы (если это о чем-то говорит). Сама таблица имеет запись и значения ее за 12 месяцев (12 полей). Собственно в VBA я это уже написал, но к сожалению на таком количестве записей скорость просто кошмар.. А чистый SQL всегда быстрее, поэтому и задумался.

Добавлено через 4 минуты
Цитата Сообщение от mobile Посмотреть сообщение
Надо иметь в виду, что запросы нарастающим итогом медленные. Время выполнения пропорционально N^2 поскольку для каждой записи надо вычислять сумму меньших по id.
А если добавить поле в таблицу и заполнять его запросом на обновление - тоже такая же пропорция по скорости будет?
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
25.11.2015, 01:15
Цитата Сообщение от Eujine Посмотреть сообщение
если сумма меньше какого-то значения, проставляется текстовая литера - то есть пока сумма не больше определнного значения набор записей получит одну и ту же текстовую маркировку).
Для этой операции не требуется запрос нарастающим итогом. По сравнению с ним поиск можно ускорить в сотни, если не в тысячи раз. Нужно воспользоваться любым методом поиска, хоть половинного деления, золотого сечения или любым другим.
Идея поиска в следующем:
- задаем эпсилон: величину допуска. Если расчетная величина отличается от заданной меньше чем на эпсилон, поиск считается удачным и прекращается.
- задаем величину суммы для поиска, пусть для определенности: сумма
- Делаем бесконечный цикл
- - Создаем запрос с Top 50 Percent
- - Находим Сумму и сравниваем с заданным значением. Если Сумма меньше эпсилон, прекращаем поиск.
Если разница больше эпсилон, меняем параметр в Top N Percent, например в сторону уменьшения (делим N пополам) если найденная сумма больше заданного значения. Или увеличиваем, если найденная сумма меньше заданного значения
- Повторяем цикл пока не будет найдена сходимость с заданной точностью.

Вот такой простейший цикл для поиска по половинному делению. Простейший подсчет показывает, что для таблицы в 100 тысяч записей, нужно будет максимум 17 раз выполнить запрос. Вместо 100 тысяч повторений, как в запросе нарастающим итогом
0
73 / 47 / 9
Регистрация: 24.03.2014
Сообщений: 470
25.11.2015, 01:25  [ТС]
Цитата Сообщение от mobile Посмотреть сообщение
- задаем эпсилон: величину допуска. Если расчетная величина отличается от заданной меньше чем на эпсилон, поиск считается удачным и прекращается.
- задаем величину суммы для поиска, пусть для определенности: сумма
- Делаем бесконечный цикл
- - Создаем запрос с Top 50 Percent
- - Находим Сумму и сравниваем с заданным значением. Если Сумма меньше эпсилон, прекращаем поиск.
Если разница больше эпсилон, меняем параметр в Top N Percent, например в сторону уменьшения (делим N пополам) если найденная сумма больше заданного значения. Или увеличиваем, если найденная сумма меньше заданного значения
А можно на каком-нибудь простейшем примере проиллюстрировать идею? Я что-то на ночь не могу уловить суть ((
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
25.11.2015, 06:32
Лучший ответ Сообщение было отмечено alvk как решение

Решение

Даю функцию, которая находит ID методом половинного деления для первых, упорядоченных по ид записей, сумма числового поля которых не превосходит заданного числа. Обращение к функции (пример):
Visual Basic
1
Kol=Poisk2del("ИмяТаблицы","ИмяСумовогоПоля","ИмяКлючаИлиСчетчика", 10000, 0.001)
Сама функция:
Visual Basic
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
Public Function Poisk2del(tbl, fld, id, summa, eps)
'tbl   - имя таблицы
'fld   - имя сумового поля
'id    - имя ключевого поля (например счетчик)
'summa - заданное значение суммы
'eps   - предельна величина дробления интервала. Рекомендуется в интервале 0.01-0.001
    Dim s, i, delta, idsled, idcur, idPred, sumcur
    Dim idMin, idMax, N As Long
    Dim db As dao.Database
    Dim t1, t2
    
    t1 = VBA.Timer
    Set db = CurrentDb
    idMin = DMin(id, tbl): idMax = DMax(id, tbl)
    N = DMax(id, tbl, id & "<=" & Int((idMax - idMin) / 2)): delta = N / 2
    
    Do While True
        i = i + 1
        idcur = DMax(id, tbl, id & "<=" & N)
        sumcur = DSum(fld, tbl, id & "<=" & idcur)
        
        If idcur = idMax Or idcur = idMin Or Abs(delta) < eps Or sumcur = summa Then
        'Значение найдено или параметры поиска больше не изменяются. Поиск прекращен
            Poisk2del = idcur
            GoTo finis
        End If
        
        If sumcur < summa Then
            idsled = DMax(id, tbl, id & "<" & idcur)
            If DSum(fld, tbl, id & "=" & idsled) > summa Then 'Значение найдено, поиск прекращен
                Poisk2del = idcur
                GoTo finis
            Else
                N = N + delta '+ 0.5
                GoTo NextStep
            End If
        Else
            idsled = DMin(id, tbl, id & ">" & idcur)
            If DSum(fld, tbl, id & "=" & idsled) > summa Then 'Значение найдено, поиск прекращен
                Poisk2del = idcur
                GoTo finis
            Else
                N = N - delta '- 0.5
                GoTo NextStep
            End If
        End If
NextStep:
        If idPred = idcur Then 'Значения повторяются. Поиск прекращен.
            Poisk2del = idcur  'Значение найдено
            GoTo finis
        End If
        delta = delta / 2
        idPred = idcur
        Debug.Print i, Round(N, 5), Round(delta, 6), idcur, idsled, sumcur, DSum(fld, tbl, id & "=" & idsled)
    Loop
finis:
    t2 = VBA.Timer
    Debug.Print t2 - t1
End Function
Испытывал на нескольких таблицах - 18000 записей, 383000 и миллион записей. В первом случае отрабатывает за полторы секунды. Во втором (383000) на не ключевом счетчике 60 сек., на ключевом 6 сек. В случае миллиона с ключевым полем счетчика от минуты до 2.
Запрос нарастающим итогом для 18000 записей длился 330 сек. Для остальных запрос не делал - будет работать сутками.

Добавлено через 19 минут
Длинный Debug.Print остался от отладки. Его можно выкинуть. А Debug.Print t2 - t1 выводит в область отладки время исполнения в секундах. Возможно пригодится...
3
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
25.11.2015, 09:49
Цитата Сообщение от Eujine Посмотреть сообщение
Да дело в том, что это только промежуточный этап. Далее, получившиеся значения должны быть также обработаны (условно еще одно поле, которое заполняется через IIF - если сумма меньше какого-то значения, проставляется текстовая литера - то есть пока сумма не больше определнного значения набор записей получит одну и ту же текстовую маркировку).
Я правильно понимаю, что вам сами значения сумм не нужны, но нужно знать номер суммы, в которую попадает та или иная строчка?

Если да, то я бы сделала примерно так: модуль с двумя статичными переменными, одна из которых накапливает сумму, другая - хранит номер суммы. И две функции: одна обнуляет переменные, другая обрабатывает:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Dim Amt As Currency
Dim LastMarker As Integer
 
Public Function InitF()
    LastMarker = 0
    Amt = 0
End Function
 
Public Function GetMark(Val As Double) As Integer
Const MaxAmt As Currency = 2200
    Amt = Amt + Val
    If Amt > MaxAmt Then
        LastMarker = LastMarker + Amt \ MaxAmt
        Amt = Amt Mod MaxAmt
    End If
    GetMark = LastMarker
End Function
Инициализирующую функцию запускаем руками, маркирующую - запросом:

SQL
1
2
SELECT Таблица.ID, Таблица.Сумма, GetMark([Таблица.Сумма]) AS Mark
FROM Таблица ORDER BY ID;
Добавлено через 18 минут
P.S. в функции подразумевается, что если при добавлении очередного слагаемого накопительная сумма вышла больше эталонной - то не все слагаемое, а только сумма превышения начинает накапливаться в следующую сумму. Скажем, эталонная сумма 10, а слагаемые 3, 4, 5 - то 5 маркируется как первый элемент следующей суммы, но в следующую накапливается не вся 5, а только 2 - превышение предыдущего эталона.

Добавлено через 42 минуты
Мдя, что-то я упустила из виду случай точной кратности накопившейся суммы и эталонной - неправильно считает в этом случае. Нужно будет поправить на досуге. Извините за непрверенный код.
1
73 / 47 / 9
Регистрация: 24.03.2014
Сообщений: 470
25.11.2015, 10:11  [ТС]
Цитата Сообщение от mobile Посмотреть сообщение
которая находит ID методом половинного деления для первых, упорядоченных по ид записей, сумма числового поля которых не превосходит заданного числа
Вопрос - а если мне последовательно нужно обработать массив записей из принципа: сначала найти все те, сумма которых не превышает число X, затем оставшуюся часть массива записей где сумма не превышает число Y, но при этом больше числа X (то есть мне нужно например все записи суммой до 100, а потом из оставшихся записей все, у которых сумма между 100 и 200)..?
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
25.11.2015, 10:15
Eujine, добавьте лишнее поле в вашей таблице и один раз занесите в него накопительные суммы. А потом запросами отбирайте что хотите )
0
73 / 47 / 9
Регистрация: 24.03.2014
Сообщений: 470
25.11.2015, 10:30  [ТС]
Цитата Сообщение от texnik-san Посмотреть сообщение
P.S. в функции подразумевается, что если при добавлении очередного слагаемого накопительная сумма вышла больше эталонной - то не все слагаемое, а только сумма превышения начинает накапливаться в следующую сумму. Скажем, эталонная сумма 10, а слагаемые 3, 4, 5 - то 5 маркируется как первый элемент следующей суммы, но в следующую накапливается не вся 5, а только 2 - превышение предыдущего эталона.
Спасибо за вариант, но у меня немного иная ситуация - мне нужно просто определить принадлежность ко множеству отдельной записи.
Другими словами имеем, допустим, десять записей с числовыми значениями конкретного поля от 1 до 10, которые отсортированы в порядке уменьшения (сортировку можно закрепить счетчиком). И есть три множества - сумма до 20 (назовем ее группой А), от 20 до 40 (группа В) и все, что больше 40 (группа С). Мне нужно получить на выходе результат типа: к группе А относятся записи 10 и 9 (10+9 = 19, следующая запись при суммировании уже превысит предел множества, поэтому сюда попадать не должна); к группе В - записи 8, 7, 6 (они попадут сюда, потому что 19+8+7+6 = 40, то есть попадают в интервал от 20 до 40, а запись 5 уже снова за пределами множества); ну и к группе С отойдут записи с 5 по 1 (думаю, тут логика ясна).

Добавлено через 2 минуты
texnik-san, лишнее поле в таблицу? )) Выше уважаемый mobile, уже написал, почему подсчет накопительной суммы нежелателен при таком количестве записей - у меня нет нескольких суток на обработку таких запросов.
Еще раз, проблема в количестве записей. Речь идет о сотнях тысяч.
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
25.11.2015, 10:41
Eujine, последовательно, в порядке возрастания пределов запускаете Poisk2del с параметром Summa равным сначала 19 - функция даст верхнюю границу первого множества A, затем с Summa=40, получим верхнюю границу второго множества B, где ID между Poisk2del(,,,19,) и Poisk2del(,,,40,). Все оставшиеся попадают в группу C где ID больше Poisk2del(,,,40,).
1
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
25.11.2015, 10:43
Цитата Сообщение от Eujine Посмотреть сообщение
почему подсчет накопительной суммы нежелателен при таком количестве записей
Речь шла о вычислении накопительной суммы "на лету" подзапросом каждый раз при выполении запроса. Но вычислить сумму ОДИН РАЗ в начале алгоритма, сохранить, и во всех остальных вычислениях использовать этот сохраненный результат - почему нет?

Цитата Сообщение от Eujine Посмотреть сообщение
И есть три множества - сумма до 20 (назовем ее группой А), от 20 до 40 (группа В) и все, что больше 40 (группа С)
Можно считать, что предельные значения каждой группы и буквенные обозначения хранятся в таблице?
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
25.11.2015, 10:50
Если данные таблицы не могут редактироваться, а только добавляться, то вариант texnik-san может быть применен. Но если редактироваться могут, то вариант с хранимой вычисленной суммой нежизнеспособен - придется после каждой редакции заново пересчитывать всю огромную таблицу. Ну или по меньшей мере ту ее часть, где ID больше изменяемой записи
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
25.11.2015, 11:11
Сделала без предварительно вычисленных сумм, с таблицей интервалов и их буквенных обозначений.

Макрос запускает инициализирующую функцию и открывет запрос. ОДИН проход.
Вложения
Тип файла: rar Накопительные.rar (38.4 Кб, 15 просмотров)
0
73 / 47 / 9
Регистрация: 24.03.2014
Сообщений: 470
25.11.2015, 11:17  [ТС]
texnik-san, а в формате mdb нет примера? у меня 2003-ий..

Добавлено через 35 секунд
Цитата Сообщение от texnik-san Посмотреть сообщение
Можно считать, что предельные значения каждой группы и буквенные обозначения хранятся в таблице?
Да. Это константы.
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
25.11.2015, 12:05
Момент, я хочу еще немного оптимизировать (есть мысль как).

Добавлено через 44 минуты
Хм. Я определенно проигрываю mobile по скорости.
0
73 / 47 / 9
Регистрация: 24.03.2014
Сообщений: 470
25.11.2015, 13:05  [ТС]
Медленно идем дальше. Дошел до итоговой стадии - подсчет коэффициента вариации. Есть конечно вариант считать его как
Visual Basic
1
(DStDevP("Числовое поле", "tbl") / DAvg("Числовое поле", "tbl")) * 100
но вот проблема - у меня массив данных для расчета выражен не во многих записях одного поля, а в нескольких полях для каждой записи... Вопрос, как перебрать диапазон полей одной записи? Для расчета коэффициента нужно значение каждого поля в диапазоне...

Есть еще одно решение - но я его писал и тестил только в формате обычного калькулятора. Так сказать калькулятор дисперсии, среднеквадратичного отклонения и коэффициента вариации:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
   Dim N As Integer, i As Integer
   Dim q(), s, s_2, D_g As Double
 
   N = Val(InputBox("Укажите количество элементов диапазона"))
   ReDim q(1 To N)
   
   For i = 1 To N
      q(i) = Val(InputBox("Значение элемента № " & i))
      s = s + q(i)
      s_2 = s_2 + q(i) ^ 2
   Next i
   
   D_g = s_2 / N - (s / N) ^ 2
   x = Sqr(D_g)
   s = s / N
   y = Round(((x / s) * 100), 4)
 
MsgBox ("Дисперсия: " & D_g)
MsgBox ("Среднеквадратичное отклонение: " & x)
MsgBox ("Коэффициент вариации (в процентах): " & y)
0
Эксперт MS Access
26826 / 14506 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
25.11.2015, 13:24
Цитата Сообщение от Eujine Посмотреть сообщение
у меня массив данных для расчета выражен не во многих записях одного поля, а в нескольких полях для каждой записи...
Eujine, Вы считаете коэффициент вариации по каждой записи отдельно? Тогда может быть создать запрос с юнионами и тогда все числовые поля, входящие в расчет, станут одним полем. Типа такого
SQL
1
2
3
4
5
6
7
8
SELECT id, [ЧислПоле1] AS x FROM tbl
UNION ALL
SELECT id, [ЧислПоле2] AS x FROM tbl
UNION ALL
SELECT id, [ЧислПоле3] AS x FROM tbl
UNION ALL
....................................
SELECT id, [ЧислПолеN] AS x FROM tbl
И уже для этого запроса считать коэффициенты, группируя по ID. Единственное ограничение - если числовых полей больше 50 (не помню точно цифру, но что-то вроде 50), то юнион откажется играть.
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
25.11.2015, 13:29
Я за вами не успеваю. вот mdb наконец-то оптимизированного метода, время уже быстрее, чем у mobille.

Кроме того, вспомнила, что для случая, когда интервалы, на которые нужно разбивать числа, равные - для этой цели у Аксес есть встроенная функция. Имя не помню, но если нужно - по списку пробегусь и найду.
Вложения
Тип файла: rar Накопительные.rar (3.76 Мб, 26 просмотров)
0
шапоклякистка 8-го дня
 Аватар для texnik-san
3681 / 2241 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
25.11.2015, 13:34
PS: при сохранении в mdb не поняла, почему vb перестал понимать типы данных database и dao.recorset, а также параметр метода execute. Это какую ж библиотеку он не смог найти?

Добавлено через 1 минуту
Цитата Сообщение от mobile Посмотреть сообщение
Единственное ограничение - если числовых полей больше 50 (не помню точно цифру, но что-то вроде 50), то юнион откажется играть.
Даже если сначала сделать два запроса по 25 юнионов, а потом эти два свести юнионом в один?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.11.2015, 13:34
Помогаю со студенческими работами здесь

Макрос создания нового листа в Эксель с названием от 1 и далее нарастающим итогом
Добрый вечер! Очень нужна помощь, уважаемые программисты!!! Необходим макрос для кнопки, при нажатии которой, создается новый лист в...

Два одномерных массива поэлементно сложить между собой - третий - сложить каждый элементы - вывести на экран
2 одномерных массива - сложить между собой - третий - сложить каждый элементы - вывести на экран. Помогите написать программу на...

Как связать между собой два поля (список значений одного поля зависит от значения другого поля)
Есть таблица: предмет, КодТипаМатериала (список), КодМатериала (список) для примера: стул, ткань, чёрное сукно ...

2 Матрицы NxM сложить между собой
Всем добрый вечер, буду очень благодарен, если поможете с данным заданием Не особо понимаю, как это реализовать Могу парочку массивов...

Поиск записей в одной таблице, где значения ключевого поля не совпадают с полем в другой таблице
Имеется Access XP, надо создать запрос для поиска записей в таблице ТОВАРЫ,где значения ключевого поля (Артикул) не совпадают со значениями...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru