powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Получение определенного числа из пяти других чисел - как это реализовать
15 сообщений из 40, страница 2 из 2
Получение определенного числа из пяти других чисел - как это реализовать
    #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
15 сообщений из 40, страница 2 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Получение определенного числа из пяти других чисел - как это реализовать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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