powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Получение определенного числа из пяти других чисел - как это реализовать
40 сообщений из 40, показаны все 2 страниц
Получение определенного числа из пяти других чисел - как это реализовать
    #37357906
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго Вам времени суток
Уважаемые господа

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

вот пример

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

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

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

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

/ 4

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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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


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

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

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


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

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

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

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

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

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

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

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

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

Итак, тогда вам следует определиться для начала с тем, какие в принципе могут быть формулы (то есть ограничить возможные вариации для реализации). Вряд ли там будет квадратный корень.... в общем нужно задать какой-то шаблон для формул, куда влезут все возможные варианты
...
Рейтинг: 0 / 0
Получение определенного числа из пяти других чисел - как это реализовать
    #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
Получение определенного числа из пяти других чисел - как это реализовать
    #37358249
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro - благодарю Вас

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

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

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

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


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

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

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

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

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

С Уважением и Благодарностью
Намик
...
Рейтинг: 0 / 0
Получение определенного числа из пяти других чисел - как это реализовать
    #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
Получение определенного числа из пяти других чисел - как это реализовать
    #37358288
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro...
переменная g принимает 19 возможных значений - 1-10 и 1/2-1/10

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

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

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

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

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

С Уважением и Благодарностью
Намик
...
Рейтинг: 0 / 0
Получение определенного числа из пяти других чисел - как это реализовать
    #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
Получение определенного числа из пяти других чисел - как это реализовать
    #37358475
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Намик, мне кажется, что вы меня все-таки не очень понимаете. Зайду с другой стороны - кто предполагается в качестве пользователя программы? Программист (вы), который в случае необходимости изменения в алгоритме может внести изменения прямо в код программы, или некий потребитель, который должен получить дружественный интерфейс для закладки формулы и не имеет понятия о программировании?

ЗЫ: А пока мы тут ведем высоконаучную беседу по проектированию, скукотища уже все наваял по первому варианту.
...
Рейтинг: 0 / 0
Получение определенного числа из пяти других чисел - как это реализовать
    #37358556
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro кто предполагается в качестве пользователя программы? Программист (вы)

я и только я

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

теперь мне предстоит задача (я сам её себе поставил)
сделать такое для 7-11 классов

вот и подумал что могу упростить себе задачу и ускорить этот процесс


Вы правы на счет Скукотища
я сейчас подставляю свои данные под его код смотрю как это будет


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

Cкукотища - я вот подготовил простенький интерфейс для тестирования кода который Вы сделали


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

ЗЫ: Позволил себе немного изменить проект, чтобы была возможность задавать произвольное кол-во исходных дат
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Private Sub Command1_Click()
Dim dotv0 As Integer
Dim a%(), i%, ii%

Text1.Text = ""
' выходим если не задана искомая дата
If dotv.Text > "" Then dotv0 = Val(dotv.Text) Else Exit Sub

ReDim a( 5 )
For i =  1  To  6 
    With Me("d" & i)
    If .Text > "" Then a(ii) = Val(.Text): ii = ii +  1 
    End With
Next
' выходим если не задана ни одна исходная дата
If ii =  0  Then Exit Sub

ReDim Preserve a(ii -  1 )

Text1.Text = coffeegrounds2(a, dotv0)
End Sub
...
Рейтинг: 0 / 0
Получение определенного числа из пяти других чисел - как это реализовать
    #37359671
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
скукотищаNamik,
Для полноценного теста не хватает тестовых данных. То есть наборов исходных и искомой дат с результами можно/нельзя.

хронология 11 класса в формате Word подойдет

С Уважением
Намик
...
Рейтинг: 0 / 0
Получение определенного числа из пяти других чисел - как это реализовать
    #37359710
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Namik,
не подойдёт.
Хронология - всего лишь перечень дат, которые будут/могут_быть использованы для составления теста (тот, который для учеников).
Для тесирования программы нужны тестовые наборы дат.
Под тестовым набором имею ввиду 4-6 исходных дат + искомая дата + результат, полученный каким-либо другим путём.

Загружаем в проект тестовый набор дат, сравниваем результат с "ответом в конце учебника".
Сходится - хорошо, загружаем следующий тестовый набор.
Не сходится - ищем причину, если необходимо - вносим изменения в проект.
...
Рейтинг: 0 / 0
Получение определенного числа из пяти других чисел - как это реализовать
    #37359846
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
скукотищаNamik,
Под тестовым набором имею ввиду 4-6 исходных дат + искомая дата + результат, полученный каким-либо другим путём.


есть такие даты - файл подклеен

это те тесты которые я подготовил с калькулятором для учеников 6 класса

и еще

1. можно сделать так что бы я сам мог устанавливать коэффициент умножения и деления ?
например я на форме создал бы два дополнительных текстовых поля первое от второе до (а то он мне в одном варианте выдал умножение на 117)

2.
тестируя код я обратил внимание что он использует и отрицательные числа - т.е. от меньшей даты отнимает большую
например от 6 отнимает 321 потом от полученной отрицательной даты отнимает другие,
и на отрицательную дату умножает или делит
можно ли это убрать

С Уважением и Благодарностью
Намик
...
Рейтинг: 0 / 0
Получение определенного числа из пяти других чисел - как это реализовать
    #37359954
Фотография mds_world
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Namik,
при всем уважении к Вам и Вашему труду
Бравый солдат Швейк Фельдфебель начал свертывать цигарку. Швейк между тем разглядывал номер винтовки и вдруг воскликнул:
- Четыре тысячи двести шестьдесят восемь! Такой номер был у одного паровоза в Печках. Этот паровоз стоял на шестнадцатом пути. Его собирались увести на ремонт в депо Лысую-на-Лабе, но не так-то это оказалось просто, господин фельдфебель, потому что у старшего машиниста, которому поручили его туда перегнать, была прескверная память на числа. Тогда начальник дистанции позвал его в свою канцелярию и говорит: "На шестнадцатом пути стоит паровоз номер четыре тысячи двести шестьдесят восемь. Я знаю, у вас плохая память на цифры, а если вам записать номер на бумаге, то вы бумагу эту также потеряете. Если у вас такая плохая память на цифры, послушайте меня повнимательней. Я вам докажу, что очень легко запомнить какой угодно номер. Так слушайте: номер паровоза, который нужно увести в депо в Лысую-на-Лабе,-- четыре тысячи двести шестьдесят восемь. Слушайте внимательно. Первая цифра - четыре, вторая - два. Теперь вы уже помните сорок два, то есть дважды два - четыре, это первая цифра, которая, разделенная на два, равняется двум, и рядом получается четыре и два. Теперь не пугайтесь! Сколько будет дважды четыре^ Восемь, так ведь? Так запомните, что восьмерка в номере четыре тысячи двести шестьдесят восемь будет по порядку последней. После того как вы запомнили, что первая цифра - четыре, вторая - два, четвертая - восемь, нужно ухитриться и запомнить эту самую шестерку, которая стоит перед восьмеркой, а это очень просто. Первая цифра-- четыре, вторая-два. а четыре плюс два - шесть. Теперь вы уже точно знаете, что вторая цифра от конца - шесть; и теперь у вас этот порядок цифр никогда не вылетит из головы. У вас в памяти засел номер четыре тысячи двести шестьдесят восемь. Но вы можете прийти к этому же результату еще проще...
Фельдфебель перестал курить, вытаращил на Швейка глаза и только пролепетал:
- Карре аb! / Снять головной убор! (нем.)/
Швейк продолжал вполне серьезно:
- Тут он начал объяснять более простой способ запоминания номера паровоза четыре тысячи двести шестьдесят восемь. "Восемь без двух - шесть. Теперь вы уже знаете шестьдесят восемь, а шесть минус два - четыре, теперь вы уже знаете четыре и шестьдесят восемь, и если вставить эту двойку, то все это составит четыре - два - шесть - восемь. Не очень трудно сделать это иначе, при помощи умножения и деления. Результат будет тот же самый. Запомните,-- сказал начальник дистанции,-что два раза сорок два равняется восьмидесяти четырем. В году двенадцать месяцев. Вычтите теперь двенадцать из восьмидесяти четырех, и останется семьдесят два, вычтите из этого числа еще двенадцать месяцев, останется шестьдесят. Итак, у нас определенная шестерка, а ноль зачеркнем. Теперь уже у нас сорок два, шестьдесят восемь, четыре. Зачеркнем ноль, зачеркнем и четверку сзади, и мы преспокойно опять получили четыре тысячи двести шестьдесят восемь, то есть номер паровоза, который следует отправить в депо в Лысую-на-Лабе. И с помощью деления, как я уже говорил, это также очень легко. Вычисляем коэффициент, согласно таможенному тарифу..." Вам дурно, господин фельдфебель? Если хотите, я начну, например, с "General de charge! Fertig! Hoch an! Feuer!" / Стрельба залпами! (франц.) Готовьсь! На прицел! Пли! (нем.)/ Черт подери! Господину капитану не следовало посылать вас на солнце. Побегу за носилками.
Пришел доктор и констатировал, что налицо либо солнечный удар, либо острое воспаление мозговых оболочек.
Когда фельдфебель пришел в себя, около него стоял Швейк и говорил:
- Чтобы докончить... Вы думаете, господин фельдфебель, этот машинист запомнил? Он перепутал и все помножил на три, так как вспомнил святую троицу. Паровоза он не нашел. Так он и до сих пор стоит ня шестнадцатом пути.
...
Рейтинг: 0 / 0
Получение определенного числа из пяти других чисел - как это реализовать
    #37359956
скукотища
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Namik,
1. можно сделать так что бы я сам мог устанавливать коэффициент умножения и деления ?Да
Код: 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.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
Function coffeegrounds4$(a, b%, minCoef%, maxCoef%)
' (!) проверка переданных параметров не производится
' параметры:
' a - массив N (хоть два хоть двадцать) _целых_ _положительных_  чисел
'   a(0)...a(N-1) - исходные "даты"
' b - искомая "дата"
' minCoef - минимальный коэффициент деления/умножения
' maxCoef - максимальный коэффициент деления/умножения
' возвращаемое значение:
'   выражение для получения искомой "даты" из массива исходных
'   или грустный смайлик в случае, если "операця прошла успешно, но пациент умер"
'   или 'некорректные данные', - если первый параметр не является массивом

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 )
            If sum2 > b Then
                If sum2 Mod b =  0  Then iOK = sum2 \ b
            ElseIf sum2 < b Then
                If b Mod sum2 =  0  Then iOK = b \ sum2
            End If

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

        End If
    Next k

' если флаг iOK не установлен - сообщаем о неудаче
' иначе - формируем строку "формулы"
    If iOK =  0  Then
         coffeegrounds4 = " :("
    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
        coffeegrounds4 = s
    End If
End Function


например от 6 отнимает 321 потом от полученной отрицательной даты отнимает другие
знак, с которым та или иная исходная дата попадет в _окончательную_ сумму вычисляется налету.
Код: plaintext
1.
2.
3.
        For i =  0  To N
            sum2 = sum2 + (- 1 ) ^ ((k And ii) \ ii) * CInt(a(i))
            ii = ii \  2 
        Next i
Для того, чтобы сделать вывод, стот или не стоит продолжать "добавление" исходных дат, когда _промежуточная_ сумма становится отрицательной, надо знать величины ещё не обработанных исходных дат и знаки, с которыми они войдут в _окончательную_ сумму.
Быстрее будет закончить вычисление "суммы", после чего сравнитть её с нулем. Так и реализовано.

и на отрицательную дату умножает или делитЭто может быть только дата, введённая в поле dotv.
В функции coffeegrounds2 нет проверки входых параметров.
можно ли это убратьДа. Сделать проверку параметров перед передачей их функции coffeegrounds2 ( или в самой функции перед вычислением "сумм" )
...
Рейтинг: 0 / 0
Получение определенного числа из пяти других чисел - как это реализовать
    #37360025
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо - mds_world - Вы подкололи :)
да многие школьники не в восторге от этих тестов (они говорят примерно так - хорошо что Вы не пишите тесты для экзаменов на аттестат и поступления в ВУЗ :))
но есть и те которым нравится

Cкукотища - Благодарю Вас
понял, тестирую

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

Namikхорошо что Вы не пишите тесты для экзаменов на аттестат и поступления в ВУЗ
правильно тут "подскажЕте" и "пишЕте".
К сожалению, процесс идет последнее время лавинообразно, чем больше людей делают ошибки в этих словах, тем больше читающих привыкают к неправильному написанию и в свою очередь делают эти ошибки.
Ни в коем случае не ради "обидеть"
С уважением
...
Рейтинг: 0 / 0
Получение определенного числа из пяти других чисел - как это реализовать
    #37360133
timtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Namik,

Обучать детей на программах которые написаны без понимания - это кощунство!!
...
Рейтинг: 0 / 0
Получение определенного числа из пяти других чисел - как это реализовать
    #37360154
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветствую Вас Shocker.Pro - решили пойти другим путем

timtim - а почему без понимания ?!

данная программа пишется для облегчения моего труда по созданию "математически-исторических" тестов
до этого я готовил их при помощи калькулятора (обратился на форум за помощью - мне её оказывают)
ответили бы отказом - я также работал бы с калькулятором

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

С Уважением
Намик
...
Рейтинг: 0 / 0
Получение определенного числа из пяти других чисел - как это реализовать
    #37362675
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Namikвот пример

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


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

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

/ 4

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


А если это задание будет выглядеть так?

Код: plaintext
1.
2.
3.
4.
5.
6.
Сложите годы (до н.э.), соответствующие событиям:
- Первое упоминание о Манне.
- Перестала существовать Ассирия
- Перестала существовать Мидия
- Большой поход Саргона II против Манны
- Атропат стал сатрапом Мидии
Отнимите от полученной суммы 2719. Назовите событие, произошедшее в полученный год...

Насколько я понимаю, всё-таки упор делается на историю, потому вычисления должны быть элементарными, такими, чтобы ошибка в них была маловероятной даже для абсолютного лирика.
...
Рейтинг: 0 / 0
Получение определенного числа из пяти других чисел - как это реализовать
    #37363308
Namik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте Akina
в практике использования этих тестов, проблем со сложением, вычитанием, делением и умножением не было

были проблемы другого рода
- ученик говорил что тест составлен неверно, так как он вычисляет все даты правильно а в конце получает непонятную дату

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

а так да, Вы правы, такие тесты можно использовать (но я пошел другим путем )))))


Благодарю Вас

С Уважением
Намик
...
Рейтинг: 0 / 0
40 сообщений из 40, показаны все 2 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Получение определенного числа из пяти других чисел - как это реализовать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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