Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.06.2009, 11:42   #1
Maxs
Заблокирован
 
Регистрация: 06.04.2009
Сообщений: 130
По умолчанию Задача на VBA Диофантово уравнение

17.Задано Диофантово уравнение вида x2+y2 +z2 = 3*x*y*z. Вывести возможные решения до 10.
Подскажите плз. хоть алгоритм. Или как находить возможные решения?
Maxs вне форума Ответить с цитированием
Старый 10.06.2009, 15:36   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Код:
Sub test()
    e = 0.000001
    For x = 0 To 10 Step 0.05
        For y = 0 To 10 Step 0.05
            For z = 0 To 10 Step 0.05
                If Abs(x ^ 2 + y ^ 2 + z ^ 2 - 3 * x * y * z) < e Then
                    Debug.Print "x = " & x, "y = " & y, "z = " & z
                    i = i + 1: Cells(i, 1) = x: Cells(i, 2) = y: Cells(i, 3) = z
                End If
            Next z
        Next y
        DoEvents
    Next x
End Sub
Если программа будет работать не в Excel, убери строку i = i + 1: Cells(i, 1) = x: Cells(i, 2) = y: Cells(i, 3) = z

Вот результат:
Код:
0	0	0
0,7	2,8	3,5
0,7	3,5	2,8
0,7	3,5	4,55
0,7	4,55	3,5
0,75	1,5	1,5
0,75	3,75	6
0,75	6	3,75
0,75	6	9,75
0,75	9,75	6
1	1	1
1	1	2
1	2	1
1	2	5
1	5	2
1,1	1,1	2,75
1,1	2,75	1,1
1,5	0,75	1,5
1,5	1,5	0,75
1,5	1,5	6
1,5	6	1,5
1,8	1,8	9
1,8	9	1,8
2	1	1
2	1	5
2	5	1
2,75	1,1	1,1
2,8	0,7	3,5
2,8	3,5	0,7
3,5	0,7	2,8
3,5	0,7	4,55
3,5	2,8	0,7
3,5	4,55	0,7
3,75	0,75	6
3,75	6	0,75
4,55	0,7	3,5
4,55	3,5	0,7
5	1	2
5	2	1
6	0,75	3,75
6	0,75	9,75
6	1,5	1,5
6	3,75	0,75
6	9,75	0,75
9	1,8	1,8
9,75	0,75	6
9,75	6	0,75
EducatedFool вне форума Ответить с цитированием
Старый 10.06.2009, 20:32   #3
Maxs
Заблокирован
 
Регистрация: 06.04.2009
Сообщений: 130
По умолчанию

Спасибо!
Вот к этой задача я даже не знаю как подступиться:
Вывести все варианты размена 43 рублей монетами по 1, 2, 5, 10 рублей. Определить количество вариантов.
Maxs вне форума Ответить с цитированием
Старый 10.06.2009, 21:12   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Здесь уже встречались твои задачи.

Причём человек, создавший ту тему, как и ты, из г. Кирова.
Встреться с ним, и обсуди решение Ваших задач.
Или ту тему тоже ты создал?

Цитата:
Вот к этой задача я даже не знаю как подступиться
Так на то тебе и дали эти задачи, чтобы ты начал хоть немного, но думать.
Если есть желание разобраться - пытайся решить сам, и выкладывай свои наработки. Если такого желания нет - готовься платить...
EducatedFool вне форума Ответить с цитированием
Старый 11.06.2009, 11:35   #5
Maxs
Заблокирован
 
Регистрация: 06.04.2009
Сообщений: 130
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Здесь уже встречались твои задачи.

Причём человек, создавший ту тему, как и ты, из г. Кирова.
Встреться с ним, и обсуди решение Ваших задач.
Или ту тему тоже ты создал?


Так на то тебе и дали эти задачи, чтобы ты начал хоть немного, но думать.
Если есть желание разобраться - пытайся решить сам, и выкладывай свои наработки. Если такого желания нет - готовься платить...
Видимо по тому же учебнику учатся. Осталось решить только эту задачу. Вот мои наработки:
m - массив монет
v(vi,j) - это массив вариантов. vi - номер варианта. j - это монета
Код:
Dim m(4), i,v(,),vi,j As Integer
m(1) = 1
m(2) = 2
m(3) = 5
m(4) = 10
i=0
vi=1
j=0
Do
Do
j=j+1
Redim v(vi,j)
Randomize
v(vi,j)=m(3*Rnd()+1)
i=i+v(vi,j)
if i>43 then
i=i-v(vi,j)
Loop While i<=43
vi=vi+1
j=0
ш=0
Loop While Как тут написать, пока варианты есть?
Я вобще запутался. Не знаю как перебирать варианты. Сделал рандомно.

Последний раз редактировалось Maxs; 11.06.2009 в 11:40.
Maxs вне форума Ответить с цитированием
Старый 11.06.2009, 13:39   #6
Anatole
Форумчанин
 
Аватар для Anatole
 
Регистрация: 07.04.2009
Сообщений: 245
По умолчанию

Цитата:
Сделал рандомно.
При чём здесь случайности, если твоя задача подчиняется строгой математической зависимости:
n1*1+n2*2+n3*5+n4*10=43
где n1,n2,n3,n4 - количество монет стоимостью соответственно 1, 2, 5, 10 руб. при чем изменяются они от 0 до ... (верхний предел для каждой из монет найдёш сам). Вот и перебирай варианты.
Всякое безобразие должно быть единообразным. Тогда это называется порядком.
Anatole вне форума Ответить с цитированием
Старый 11.06.2009, 14:05   #7
Maxs
Заблокирован
 
Регистрация: 06.04.2009
Сообщений: 130
По умолчанию

Цитата:
Сообщение от Anatole Посмотреть сообщение
При чём здесь случайности, если твоя задача подчиняется строгой математической зависимости:
n1*1+n2*2+n3*5+n4*10=43
где n1,n2,n3,n4 - количество монет стоимостью соответственно 1, 2, 5, 10 руб. при чем изменяются они от 0 до ... (верхний предел для каждой из монет найдёш сам). Вот и перебирай варианты.
Получилось! Спасибо за подсказку!
Код:
Dim m(4), i, j, k, l, kol, o As Integer
m(1) = 1
m(2) = 2
m(3) = 5
m(4) = 10
kol = 0
For i = 0 To 43
For j = 0 To 21
For k = 0 To 8
For o = 0 To 4
If m(1) * i + m(2) * j + m(3) * k + m(4) * o = 43 Then
kol = kol + 1
Debug.Print m(1) * i; " + "; m(2) * j; " + "; m(3) * k; " + "; m(4) * o
Else
End If
Next o
Next k
Next j
Next i
Debug.Print kol
Maxs вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на VBA Zhene4ka2607 Помощь студентам 1 08.06.2009 14:48
Задача по VBA NitriNKa Помощь студентам 8 23.05.2009 15:46
Задача по VBA!! NitriNKa Помощь студентам 3 22.04.2009 11:02
VBA Excel задача Slicker Microsoft Office Excel 2 04.11.2008 14:06