Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Получение определенного числа из пяти других чисел - как это реализовать / 25 сообщений из 40, страница 1 из 2
19.07.2011, 15:12
    #37357906
Namik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение определенного числа из пяти других чисел - как это реализовать
Доброго Вам времени суток
Уважаемые господа

при наличии времени прошу Вас помочь

вот пример

есть пять событий / дат

Первое упоминание о Манне 843 г. до н.э.
Перестала существовать Ассирия 605 г. до н.э.
Перестала существовать Мидия 550 г. до н.э.
Большой поход Саргона II против Манны 714 г. до н.э.
Атропат стал сатрапом Мидии 328 г. до н.э.

посредством калькулятора и математическими операциями
я подготовил следующий тест

Первое упоминание о Манне
+ Перестала существовать Ассирия
– Перестала существовать Мидия
+ Большой поход Саргона II против Манны
– Атропат стал сатрапом Мидии

/ 4

= 321 г. Атропатская Мидия стала самостоятельной

обратите внимание
путем сложения вычитания и конечного деления, я из пяти дат получил нужную для меня шестую дату

как я упомянул я делал это калькулятором

у меня вопрос
как это можно реализовать на компьютере

т.е. нужно следующее (я вижу это так но может Вы подскажите что то другое)

шесть текстовых боксов
в первые пять я вношу любые исторические даты
а в шестой текстовый бокс ту дату которую я хотел бы получить путем математических операций из выше записанных дат (пять текстовых боксов)

деление или или умножение допускается на коэффициент от 1 до 10


подскажите пожалуйста как это реализовать


С Уважением
Намик
...
Рейтинг: 0 / 0
19.07.2011, 15:23
    #37357939
majestic-mike
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение определенного числа из пяти других чисел - как это реализовать
Namik,

Какой то странный вопрос - всё сделать именно так как вы и говорите - если речь идёт о VB проекте - созадать форму, разместить на ней необходимые компоненты пользовательского интерфейса, назначить для них обработчики - реализовав в них отклик на действия пользователя и собственно те вычисления, о которых вы говорите... или вам нужен кто-то кто это сделает? ;)
...
Рейтинг: 0 / 0
19.07.2011, 15:32
    #37357955
Namik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение определенного числа из пяти других чисел - как это реализовать
majestic-mike спасибо за ответ

не понимаю как Вы это увидели в моем тексте (я старался выразить свою мысль точно - видимо не получилось)

мне нужен алгоритм который перебирал бы математические операции
и дал бы мне тот результат который мне нужен

собрать каркас (форму и т.д. я могу)
а вот просчитать этот алгоритм не получается

с калькулятором я работал так

первую дату прибавил
вторую отнял
третью прибавил и т.д. разделил на 2 - не получилось

пошел по новой
первую дату прибавил вторую прибавил третью отнял и т..д разделил на три, потом 4...

и вот в таком духе
пока не получил желаемое

а как это указать в программе я не знаю

С Уважением
Намик
...
Рейтинг: 0 / 0
19.07.2011, 15:44
    #37357982
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение определенного числа из пяти других чисел - как это реализовать
Намик, то есть вы хотите сделать ПЕРЕБОР комбинаций с шестью параметрами
пять первых параметров меняются в значениях -1 и 1 (множитель)
еще один параметр меняется в диапазоне 2-10

таки образом, надо перебрать 2*2*2*2*2*9=288 различных комбинаций, пока не найдется нужная.

Я правильно понял?
...
Рейтинг: 0 / 0
19.07.2011, 15:47
    #37357988
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение определенного числа из пяти других чисел - как это реализовать
А нет, там еще деление или умножение и от 1 до 10, комбинаций побольше...
...
Рейтинг: 0 / 0
19.07.2011, 16:05
    #37358035
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение определенного числа из пяти других чисел - как это реализовать
Namik...
и вот в таком духе
пока не получил желаемое
...
Осталось формально определить желаемое и можно браться за реализацию.
...
Рейтинг: 0 / 0
19.07.2011, 16:05
    #37358036
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение определенного числа из пяти других чисел - как это реализовать
> Автор: Namik
> подскажите пожалуйста как это реализовать


Прямо как задание мамы и очень похоже на систему уравнений, только на
вскидку не понятно какого порядка.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
19.07.2011, 16:11
    #37358050
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение определенного числа из пяти других чисел - как это реализовать
скукотищаОсталось формально определить желаемое и можно браться за реализацию. Желаемое записано в шестом текстбоксе
...
Рейтинг: 0 / 0
19.07.2011, 16:16
    #37358062
majestic-mike
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение определенного числа из пяти других чисел - как это реализовать
Namik,

а там ещё может быть момент, в котором не все даты из тех, что перебираются - могут быть задействованы? верно?
...
Рейтинг: 0 / 0
19.07.2011, 16:32
    #37358072
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение определенного числа из пяти других чисел - как это реализовать
ну тогда множитель можно перебирать от -1 до 1 (включая 0)
...
Рейтинг: 0 / 0
19.07.2011, 16:39
    #37358086
Namik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение определенного числа из пяти других чисел - как это реализовать
Благодарю Вас за ответы

Игорь Горбонос - Ваша ссылка у меня почему то не открывается

Shocker.Pro - все верно

majestic-mike - все даты должны быть задействованы - это тест который позволяет проверить за один раз знание 6 дат - первые события (пять дат) он видит - должен знать даты а получив шестой - должен назвать событие

на один тест - его перебор на калькуляторе я потратил около 3-х часов (таких тестов я сделал 21)


С Уважением и Благодарностью
Намик
...
Рейтинг: 0 / 0
19.07.2011, 16:56
    #37358121
majestic-mike
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение определенного числа из пяти других чисел - как это реализовать
Namikна один тест - его перебор на калькуляторе я потратил около 3-х часов (таких тестов я сделал 21)

Восхищён вашим терпением :)

Скажите, а если с указанных 5 дат - ну никак ни с какимим коэффициентами нельзя составить результирующую... что должна делать программа в этой ситуации?
...
Рейтинг: 0 / 0
19.07.2011, 17:00
    #37358125
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение определенного числа из пяти других чисел - как это реализовать
> Автор: Namik
> Игорь Горбонос - Ваша ссылка у меня почему то не открывается


Открывается, нужно просто прочитать текст на странице :)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
19.07.2011, 17:07
    #37358149
Namik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение определенного числа из пяти других чисел - как это реализовать
Игорь Горбонос - прочитал :) неужели у меня также - убиваете Вы меня :)

majestic-mike - я об этом не думал - так как у меня все получалось :)
ну в таком случае - программа выдаст сообщение - "Не могу"

С Уважением и Благодарностью
Намик
...
Рейтинг: 0 / 0
19.07.2011, 17:39
    #37358206
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение определенного числа из пяти других чисел - как это реализовать
NamikShocker.Pro - все верно
Ну тогда поехали дальше - насколько жестко вы хотите заложитьформулу или, по-другому, насколько масштабируемо должно быть ваше приложение?

Вариант 1) В программу жестко зашивается указанная вами формула (a+b+c+d+e+f)*g и к ней создается только цикл перебора жестко известных вариантов

Вариант 2) В каком-то виде создается интерпретатор формул и создается схема закладывания в него формул, параметров, их диапазонов и т.п.

Второй вариант гораздо сложней, но получается более универсальный продукт
...
Рейтинг: 0 / 0
19.07.2011, 17:43
    #37358215
Namik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение определенного числа из пяти других чисел - как это реализовать
Shocker.Pro - второй вариант

я сам когда перебирал калькулятором то сам делал такой перебор + + -+-/ или +-+-+ /

С Уважением и Благодарность
Намик
...
Рейтинг: 0 / 0
19.07.2011, 17:50
    #37358227
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение определенного числа из пяти других чисел - как это реализовать
NamikShocker.Pro - второй вариант
Ну что ж, серьезный проект. Думаю, топик разрастется до страниц двадцати и займет не меньше месяца.

Итак, тогда вам следует определиться для начала с тем, какие в принципе могут быть формулы (то есть ограничить возможные вариации для реализации). Вряд ли там будет квадратный корень.... в общем нужно задать какой-то шаблон для формул, куда влезут все возможные варианты
...
Рейтинг: 0 / 0
19.07.2011, 17:50
    #37358228
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение определенного числа из пяти других чисел - как это реализовать
Namik,
посмотрите, может понравится...
Код: plaintext
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.
Function coffeegrounds$(a)
' параметры:
' a - массив из шести _целых_ _положительных_ (проверять как оно будет с отрицательными - тяжко мне) чисел
' a(0)...a(4) - имеемое
' a(5) - желаемое
' возвращаемое значение:
'   выражение для получения желаемого из имеемого
'   или грустный смайлик

Dim k%, i%, ii%, iOK%
Dim sum2%, s$
    
    For k =  0  To  31 
        sum2 =  0 
        For i =  0  To  4 
            ii =  2  ^ ( 4  - i)
            sum2 = sum2 + (- 1 ) ^ ((k And ii) \ ii) * CInt(a(i))
        Next i
        
        If sum2 = CInt(a( 5 )) Then
               iOK =  1 : Exit For
        ElseIf sum2 > CInt(a( 5 )) Then
            If sum2 Mod CInt(a( 5 )) =  0  Then iOK = sum2 \ CInt(a( 5 )): Exit For
        End If
    Next k
    
    If iOK >  0  Then
        If (k And  16 ) \  16  =  0  Then s = a( 0 ) Else s = "- " & a( 0 )
        For i =  1  To  4 
            ii =  2  ^ ( 4  - i)
            s = s & vbCrLf & IIf(((k And ii) \ ii) =  0 , "+ ", "- ") & a(i)
        Next i
        If iOK >  1  Then s = s & vbCrLf & "/ " & iOK
        s = s & vbCrLf & "= " & a( 5 )
        coffeegrounds = s
    Else
        coffeegrounds = " :("
    End If
End Function
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
?coffeegrounds(array( 843 , 605 , 550 , 714 , 328 , 321 ))
 843 
+  605 
-  550 
+  714 
-  328 
/  4 
=  321 

Код: plaintext
1.
2.
?coffeegrounds(array( 843 , 605 , 550 , 714 , 328 , 324 ))
 :(

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
?coffeegrounds(array( 843 , 605 , 550 , 714 , 328 , 254 ))
-  843 
+  605 
-  550 
+  714 
+  328 
=  254 
...
Рейтинг: 0 / 0
19.07.2011, 18:05
    #37358249
Namik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение определенного числа из пяти других чисел - как это реализовать
Shocker.Pro - благодарю Вас

[quot Shocker.Pro]Namik
Итак, тогда вам следует определиться для начала с тем, какие в принципе могут быть формулы (то есть ограничить возможные вариации для реализации).

правильно ли я Вас понял - Вы имеет ввиду определиться с возможным перебором

т.е.
1. вариант +-+-+ / коэффициент
2. вариант +++-+ / коэффициент
3. вариант ++-++ / коэффициент

если нет прошу Вас пояснить


Скукотища - благодарю Вас (отрицательных чисел не будет)
буду смотреть Ваш вариант - еще раз спасибо

С Уважением и Благодарностью
Намик
...
Рейтинг: 0 / 0
19.07.2011, 18:15
    #37358263
Namik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение определенного числа из пяти других чисел - как это реализовать
Shocker.Pro

я вычислял еще и по другому

1. если я видел что из 5 дат я не могу получить 6 то я иногда (раза 4-5) использовал 4 даты - но не меньше
2. иногда я просто брал цифры и пересчитывал их и сопоставлял полученный результат с хронологической таблицей (списком дат)

может эти моменты как то упростят вопрос

С Уважением и Благодарностью
Намик
...
Рейтинг: 0 / 0
19.07.2011, 18:22
    #37358278
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение определенного числа из пяти других чисел - как это реализовать
Namikправильно ли я Вас понял - Вы имеет ввиду определиться с возможным перебором
неправильно поняли.

Еще раз - вариант 1) - это просто тупо предложенная формула:
(a+b+c+d+e+f)*g
обращаю внимание, что формула именно такова, меняются исходные данные, переменные a-f перебираются в двух вариантах (отрицательные и положительные), а переменная g принимает 19 возможных значений - 1-10 и 1/2-1/10

под это скукотища уже наваял код.

вараинт 2) - это возможность для пользователя программировать саму формулу, возможные варианты арифметических действий, количество аргументов и т.п.
...
Рейтинг: 0 / 0
19.07.2011, 18:29
    #37358288
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение определенного числа из пяти других чисел - как это реализовать
Shocker.Pro...
переменная g принимает 19 возможных значений - 1-10 и 1/2-1/10

под это скукотища уже наваял код.
... только для g <= 1
...
Рейтинг: 0 / 0
19.07.2011, 19:20
    #37358338
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение определенного числа из пяти других чисел - как это реализовать
скукотищаShocker.Proпод это скукотища уже наваял код.
... только для g <= 1 Namikделение или или умножение допускается на коэффициент от 1 до 10
...
Рейтинг: 0 / 0
19.07.2011, 19:33
    #37358355
Namik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение определенного числа из пяти других чисел - как это реализовать
Shocker.Pro

и деление и умножение допускается на коэффициент (однако как показала моя практика больше будет делений)

тогда вариант второй

варианты арифметических действий

+ , - , / , * с заданными датами (но / и * только в последнем случае - как видно в тесте)
количество аргументов от 4 до 6 заданных данных (я имею ввиду поиск искомой даты среди 4, 5, 6 дат)
и аргумент искомой даты (то что надо найти)

С Уважением и Благодарностью
Намик
...
Рейтинг: 0 / 0
19.07.2011, 22:24
    #37358473
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получение определенного числа из пяти других чисел - как это реализовать
Namik,
псевдо алгоритм
1. получаем искомую дату и массив исходных дат (4 или 5 или 6 или ... ) элементов
2. пробуем получить искомую дату из _всех_ элементов массива исходных дат, используя только сложение и вычитание.
3. если в п.2 постигла неудача, - пробуем получить исходную дату из "сумм" п.2 делением или умножением этих "сумм" на целый коэффициент
4. если в п.2 или в п.3 удалось получить искомую дату, - формируем "строку формулы" и отдаем клиенту,
иначе - сообщаем, что получить искомую дату не удалось
Код: plaintext
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.
60.
61.
62.
63.
64.
65.
66.
67.
68.
Function coffeegrounds2$(a, b%)
' параметры:
' a - массив N (хоть два хоть двадцать) _целых_ _положительных_  чисел
'   a(0)...a(N-1) - исходные "даты"
' b - искомая "дата"
' возвращаемое значение:
'   выражение для получения искомой "даты" из массива исходных
'   или грустный смайлик в случае, если "операця прошла успешно, но пациент умер"
'   или 'некорректные данные', - если первый параметр не является массивом

Dim k&, k2&, i%, ii%, iOK%
Dim sum2&, s$, N%, N2

    If Not IsArray(a) Then coffeegrounds2 = "некорректные данные": Exit Function
    N = UBound(a)
    N2 =  2 & ^ N

' получение возможных "сумм" из элементов массива исходных дат
    For k =  0  To  2 & * N2 -  1 
        sum2 =  0 : ii = N2
        For i =  0  To N
            sum2 = sum2 + (- 1 ) ^ ((k And ii) \ ii) * CInt(a(i))
            ii = ii \  2 
        Next i
        
' проверка соответствия "суммы" искомой дате
        If sum2 = b Then
        ' найдено точное соответствие - устанавливаем флаг ( iOK ), запоминаем маску ( k2 ), выходим из цикла
               iOK =  1 : k2 = k: Exit For
        ElseIf sum2 >  0  And iOK =  0  Then
        ' точное соответствиие не найдено, "сумма" больше положительна, флаг iOK ещё не установлен

        ' определяем, можно ли получить искомую дану из суммы делением или умножением
        ' если можно - устанавливаем флаг ( iOK ), запоминаем маску ( k2 )
        '  (!) из цикла не выходим, - возможно существует "сумма" с точным соответствием до которой ещё не добрались
            If sum2 > b Then
                If sum2 Mod b =  0  Then iOK = sum2 \ b: k2 = k
            ElseIf sum2 < b Then
                If b Mod sum2 =  0  Then iOK = (- 1 ) * b \ sum2: k2 = k
            End If
        End If
    Next k

' если флаг iOK не установлен - сообщаем о неудаче
' иначе - формируем строку "формулы"
    If iOK =  0  Then
         coffeegrounds2 = " :("
    Else
        ' строки с +/- исходными датами
        ii =  2  ^ N
        s = a( 0 )
        If (k2 And ii) \ ii >  0  Then s = "- " & s
        For i =  1  To N
            ii = ii \  2 
            s = s & vbCrLf & IIf(((k2 And ii) \ ii) =  0 , "+ ", "- ") & a(i)
        Next i
        
        ' если использовалось деление или умножение
        If iOK >  1  Then
            s = s & vbCrLf & "/ " & iOK
        ElseIf iOK < - 1  Then
            s = s & vbCrLf & "x " & (- 1 ) * iOK
        End If
        
        s = s & vbCrLf & "= " & b
        coffeegrounds2 = s
    End If
End Function
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
?coffeegrounds2(array( 843 , 605 , 550 , 714 , 328 ),  321 )
 843 
+  605 
-  550 
+  714 
-  328 
/  4 
=  321 
ЗЫ: (!) у пользователя (пока) нет возможности программировать формулу/алгоритм вычислений
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Получение определенного числа из пяти других чисел - как это реализовать / 25 сообщений из 40, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]