Страницы: 1
RSS
VBA. Реализация Таблицы сложения Узоровой
 
   Добрый день!

В связи с тем, что книжные магазины в нашем городе не работают, а детям учиться надо. Женой была поставлена задача сделать таблицу сложения как у Узоровой и Нефедовой.

Реализовал все при помощи макроса, но рендом получился не идеальный. Иногда попадаются одни и те же примеры подряд или через пример.
Если не будет другого решения то реализую проверку, подскажите может есть другой способ реализовать эту задачу?
Скрытый текст
 
Попробуйте такой код, возможно повторений будет меньше
Код
Sub mysum2()
    Dim i As Long, j As Long, txt As String
    Randomize
    For j = 1 To 9 Step 2
        For i = 1 To 50
            txt = fSum(0, 9, 1, 10, txt)
            Cells(i, j) = txt
    Next i, j
End Sub

Function fSum(min1 As Long, max1 As Long, min2 As Long, max2 As Long, Optional t2 As String = "") As String
    Dim znak As Long, s As Long, r1 As Long, r2 As Long, t1 As String
    Do
        r1 = Int(Rnd * (max1 - min1 + 1) + min1)
        r2 = Int(Rnd * (max1 - min1 + 1) + min1)
        znak = Int(Rnd * 2)
        If znak = 0 Then s = r1 - r2 Else s = r1 + r2
        t1 = r1 & IIf(znak = 0, " - ", " + ") & r2 & " ="
    Loop While s < min2 Or s > max2 Or t1 = t2
    fSum = t1
End Function
Изменено: MCH - 24.07.2020 15:58:47
 
galvadas, Приветствую

Хотел уточнить, по какому принципу Вы хотели уменьшить повторения?
- я так понимаю в столбце..

Если брать всю таблицу, то она состоит из 252 примеров для решения, а уникальных примеров такого множества возможно лишь 117, т.е. повторения будут

+ добавлю свой вариант, заранее извиняюсь за извращение
(в файле откл. автомат. вычисления, F9 для новой вариации)
 
Цитата
MCH написал:
Попробуйте такой код, возможно повторений будет меньше
Спасибо, да действительно повторений меньше

Цитата
Vladimir K написал:
+ добавлю свой вариант, заранее извиняюсь за извращение
Вам так же спасибо, вариант рабочий, повторений практически нет, единственный минус это плохая вариативность, те есть если надо сделать в будущем сложение до 20 или до 100 прописывать варианты очень долго, но в моей постановки задачи такого требования не было поэтому, еще раз спасибо за вариант очень интересный.
 
Цитата
galvadas написал:
если надо сделать в будущем сложение до 20 или до 100
- Можно кодом нагенерить все сочетания в коллекцию (без повторов), затем из неё случайным образом выбирать, каждый раз коллекцию сокращая - так повторов точно не будет.
 
Формульное решение:
=ИНДЕКС(ПОДСТАВИТЬ(ПОДСТАВИТЬ(СТРОКА($1:$11)-1&" + "&СТОЛБЕЦ($A:$L)-СТРОКА($1:$11)-0,5;",5";" =");"+ -";"- ");СЛУЧМЕЖДУ(1;11);СЛУЧМЕЖДУ(1;12))
Повторения, конечно, есть, но обычно не больше 6 раз. Расширен диапазон примеров, есть такие значения как "Х - Х ="
 
Светлый,спасибо
в формуле ошибка
СТОЛБЕЦ($A:$L) массив от 1 до 9
СЛУЧМЕЖДУ(1;12) а здесь адрес от 1 до 12

поправил размер массива, все работает, еще раз спасибо
Изменено: galvadas - 28.07.2020 09:47:15
 
Конечный результат, может кому пригодиться.
Изменено: galvadas - 29.07.2020 13:12:41
Страницы: 1
Наверх