Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Вывести результаты решения линейного уравнения в Debug.Print - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вывести результаты решения линейного уравнения в Debug.Print (Макросы/Sub)
Вывести результаты решения линейного уравнения в Debug.Print
ant6729 Дата: Среда, 18.07.2018, 15:10 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 469
Репутация: -6 ±
Замечаний: 60% ±

Excel 2010
Всем привет

Есть уравнение 4a+3b+2c+1d = 630

Как средставами VBA можно было бы вывести в Debug.Print значения

a
b
c
d


Сообщение отредактировал ant6729 - Среда, 18.07.2018, 15:33
 
Ответить
СообщениеВсем привет

Есть уравнение 4a+3b+2c+1d = 630

Как средставами VBA можно было бы вывести в Debug.Print значения

a
b
c
d

Автор - ant6729
Дата добавления - 18.07.2018 в 15:10
_Boroda_ Дата: Среда, 18.07.2018, 15:17 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 12761
Репутация: 5228 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
- Прочитайте Правила форума
- Исправьте название темы согласно п.2 Правил форума

deal deal deal Это предпоследнее китайское предупреждение deal deal deal


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение- Прочитайте Правила форума
- Исправьте название темы согласно п.2 Правил форума

deal deal deal Это предпоследнее китайское предупреждение deal deal deal

Автор - _Boroda_
Дата добавления - 18.07.2018 в 15:17
ant6729 Дата: Среда, 18.07.2018, 16:28 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 469
Репутация: -6 ±
Замечаний: 60% ±

Excel 2010
Не знаю, я это только руками могу решить, подбирая значения.
 
Ответить
СообщениеНе знаю, я это только руками могу решить, подбирая значения.

Автор - ant6729
Дата добавления - 18.07.2018 в 16:28
sboy Дата: Среда, 18.07.2018, 17:55 | Сообщение № 4
Группа: Проверенные
Ранг: Старожил
Сообщений: 2020
Репутация: 578 ±
Замечаний: 0% ±

Excel 2010
Не хватит окна Immediate для записи всех результатов решения, да и Excel скорей всего зависнет.
Вы представляете сколько решений даст такое уравнение с 4 неизвестными? явно больше, чем строк в .xlsx
 
Ответить
СообщениеНе хватит окна Immediate для записи всех результатов решения, да и Excel скорей всего зависнет.
Вы представляете сколько решений даст такое уравнение с 4 неизвестными? явно больше, чем строк в .xlsx

Автор - sboy
Дата добавления - 18.07.2018 в 17:55
SLAVICK Дата: Четверг, 19.07.2018, 09:44 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 2249
Репутация: 746 ±
Замечаний: 0% ±

2007,2010,2013,2016
и Excel скорей всего зависнет

Смотря какие начальные данные.
Например для целых неотрицательных чисел листа вполне достаточно.
Решение в лоб:
[vba]
Код

Sub d()
Dim arr(1 To 4), dic As Object
Dim n&, i&, ii&, iii&, iiii&, t&
n = [FindV]
Min = [Min]
Set dic = CreateObject("Scripting.Dictionary")
For i = Min To n / 4
    If i / 10 = i \ 10 Then DoEvents: Application.StatusBar = i & ":" & dic.Count
    For ii = Min To n / 3
        If (i * 4 + ii * 3) > n Then Exit For
        For iii = Min To n / 2
        If (i * 4 + ii * 3 + iii * 2) > n Then Exit For
            For iiii = Min To n / 4
            If (i * 4 + ii * 3 + iii * 2 + iiii) > n Then Exit For
                If (i * 4 + ii * 3 + iii * 2 + iiii) = n Then
                arr(1) = i: arr(2) = ii: arr(3) = iii: arr(4) = iiii
                t = t + 1
                dic(t) = arr
                If t > 1048574 Then GoTo 10
            End If
            Next
        Next
    Next
Next
10
arr1 = dic.items
ReDim arr2(1 To dic.Count, 1 To 4)
For i = 0 To dic.Count - 1
    For ii = 1 To 4
        arr2(i + 1, ii) = arr1(i)(ii)
    Next
Next
[a2].Resize(UBound(arr2), 4) = arr2
Application.StatusBar = False
End Sub
[/vba]
К сообщению приложен файл: 9304118.xlsm(19.1 Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
и Excel скорей всего зависнет

Смотря какие начальные данные.
Например для целых неотрицательных чисел листа вполне достаточно.
Решение в лоб:
[vba]
Код

Sub d()
Dim arr(1 To 4), dic As Object
Dim n&, i&, ii&, iii&, iiii&, t&
n = [FindV]
Min = [Min]
Set dic = CreateObject("Scripting.Dictionary")
For i = Min To n / 4
    If i / 10 = i \ 10 Then DoEvents: Application.StatusBar = i & ":" & dic.Count
    For ii = Min To n / 3
        If (i * 4 + ii * 3) > n Then Exit For
        For iii = Min To n / 2
        If (i * 4 + ii * 3 + iii * 2) > n Then Exit For
            For iiii = Min To n / 4
            If (i * 4 + ii * 3 + iii * 2 + iiii) > n Then Exit For
                If (i * 4 + ii * 3 + iii * 2 + iiii) = n Then
                arr(1) = i: arr(2) = ii: arr(3) = iii: arr(4) = iiii
                t = t + 1
                dic(t) = arr
                If t > 1048574 Then GoTo 10
            End If
            Next
        Next
    Next
Next
10
arr1 = dic.items
ReDim arr2(1 To dic.Count, 1 To 4)
For i = 0 To dic.Count - 1
    For ii = 1 To 4
        arr2(i + 1, ii) = arr1(i)(ii)
    Next
Next
[a2].Resize(UBound(arr2), 4) = arr2
Application.StatusBar = False
End Sub
[/vba]

Автор - SLAVICK
Дата добавления - 19.07.2018 в 09:44
sboy Дата: Четверг, 19.07.2018, 10:22 | Сообщение № 6
Группа: Проверенные
Ранг: Старожил
Сообщений: 2020
Репутация: 578 ±
Замечаний: 0% ±

Excel 2010
Например для целых неотрицательных чисел

не все результаты такой алгоритм выдает
Например мин=0, результат 630
нет решений [vba]
Код
0,0,0,630
0,0,1,628
0,0,2,626
[/vba] и т.д.
 
Ответить
Сообщение
Например для целых неотрицательных чисел

не все результаты такой алгоритм выдает
Например мин=0, результат 630
нет решений [vba]
Код
0,0,0,630
0,0,1,628
0,0,2,626
[/vba] и т.д.

Автор - sboy
Дата добавления - 19.07.2018 в 10:22
SLAVICK Дата: Четверг, 19.07.2018, 14:03 | Сообщение № 7
Группа: Модераторы
Ранг: Старожил
Сообщений: 2249
Репутация: 746 ±
Замечаний: 0% ±

2007,2010,2013,2016
не все результаты такой алгоритм выдает

Блин заметил ошибку - забыл удалить / 4.
Нужно вместо:
[vba]
Код
For iiii = Min To n / 4
[/vba]
так
[vba]
Код
For iiii = Min To n
[/vba]
Так должен все давать.

0,0,1,628
0,0,2,626

может я чего не понял, но:
1+628 = 629
2+626 = 628

Заработался...
А да - забыл сказать что стоит предохранитель на количество строк - если его убрать и писать в блокнот, или в БД - то выдаст все.
К сообщению приложен файл: 6060362.xlsm(19.7 Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
не все результаты такой алгоритм выдает

Блин заметил ошибку - забыл удалить / 4.
Нужно вместо:
[vba]
Код
For iiii = Min To n / 4
[/vba]
так
[vba]
Код
For iiii = Min To n
[/vba]
Так должен все давать.

0,0,1,628
0,0,2,626

может я чего не понял, но:
1+628 = 629
2+626 = 628

Заработался...
А да - забыл сказать что стоит предохранитель на количество строк - если его убрать и писать в блокнот, или в БД - то выдаст все.

Автор - SLAVICK
Дата добавления - 19.07.2018 в 14:03
ant6729 Дата: Четверг, 19.07.2018, 14:08 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 469
Репутация: -6 ±
Замечаний: 60% ±

Excel 2010
Спасибо, но лучше, как я понял, сделать неизвестные статичными. Не менять их. Подобрать их один раз и хватит. В принципе, я это так себе и оставил.
 
Ответить
СообщениеСпасибо, но лучше, как я понял, сделать неизвестные статичными. Не менять их. Подобрать их один раз и хватит. В принципе, я это так себе и оставил.

Автор - ant6729
Дата добавления - 19.07.2018 в 14:08
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Вывести результаты решения линейного уравнения в Debug.Print (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования
© 2010-2018 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!