Перейти к содержимому

Фото
- - - - -

помогите с VBA


  • Вы не можете создать новую тему
  • Please log in to reply
15 ответов в этой теме

#1 JoBzik

JoBzik
  • Пользователь
  • 318 сообщений
  • Откуда:Россия, Санкт-Петербург

Отправлено 11 июня 2008 - 13:24

помогите создать программу, которая из заданных 10 чисел выдавала бы все варианты по 6 чисел.
например:
1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6
1 2 3 4 5 7
1 2 3 4 5 8
1 2 3 4 5 9
1 2 3 4 5 10
2 3 4 5 6 7
..........ИТД
пишите сюда или на [email protected]
спасибо
  • 0
Смерть стоит того, чтобы жить,
А любовь стоит того, чтобы ждать
(Кино, Виктор Цой)

#2 ParadoxL

ParadoxL
  • Постоялец
  • 5 023 сообщений
  • Откуда:Edinburg

Отправлено 13 июня 2008 - 07:17

JoBzik, и что же сложного мы тут видим? Простой перебор по алфавиту ...

Проще всего это сделать так ...
Алфавит 0 ... 9 (1-10 в твоем случаем)
То есть у нас обычная десятиричная система исчисления .... то есть наша задача прокрутить счетчик от 1 0 0 0 0 0 до 9 9 9 9 9 9 ... и всё :)
  • 0
Victoria nulla est, Quam quae confessos animo quoque subjugat hostes ...
Верю в смерть после жизни, любовь после секса и в крем после бритья ...

#3 Cryptoboy

Cryptoboy
  • Пользователь
  • 280 сообщений

Отправлено 13 июня 2008 - 07:26

Incubo, ему вроде нужно, чтоб цифры разные были =) т.е перестановки длины 6 из чисел 1..10
  • 0

#4 ParadoxL

ParadoxL
  • Постоялец
  • 5 023 сообщений
  • Откуда:Edinburg

Отправлено 13 июня 2008 - 07:36

Slаm, ну а я про что? :)
  • 0
Victoria nulla est, Quam quae confessos animo quoque subjugat hostes ...
Верю в смерть после жизни, любовь после секса и в крем после бритья ...

#5 Cryptoboy

Cryptoboy
  • Пользователь
  • 280 сообщений

Отправлено 13 июня 2008 - 07:51

ну твой алгоритм выдаст так же такие как 2 2 3 3 3 5 например
  • 0

#6 ParadoxL

ParadoxL
  • Постоялец
  • 5 023 сообщений
  • Откуда:Edinburg

Отправлено 13 июня 2008 - 08:18

Slаm, ну а ему что надо ... все варианты по 6-ть чисел? то есть перебор всего алфавита ... где длина будет равна 6-и.

ЗЫ! Или я чего-то не понимаю :)

Хорошо ... мы программисты - народ ленивый ... переделаем предыдущий вариант до устраивающего нас ... получится что-то вроде
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
	<title>Combinatorica</title>
	<script>
		var alphabet = [1,2,3,4,5,6,7,8,9,10];
		
		function comb(out) {
			for(var i = 100000;i < 1000000;i++) {
				var z = new String(i);
				var s = "";
				var k = [0,0,0,0,0,0,0,0,0,0];
				var b = false;
				for(var j = 0; j < z.length; j++) {
					if (k[z.charAt(j)] > 0) {
						b = true;
						break;
					} else 
						k[z.charAt(j)] += 1;
					s += " " + alphabet[z.charAt(j)];
				}
				if (!b)
					document.write(s + "<br>");
			}
		}
	
	</script>
</head>

<body>

Понеслася :))))
<span id="output" style="width:100%"></span>

<input type="button" value="calculate" onclick="comb(document.getElementById('output'));return false;">
</body>
</html>

Это предыдущий вариант ... который переберает всё :)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<html>
<head>
	<title>Combinatorica</title>
	<script>
		var alphabet = [1,2,3,4,5,6,7,8,9,10];
		
		function comb(out) {
			for(var i = 100000;i < 1000000;i++) {
				var z = new String(i);
				var s = "";
				for(var j = 0; j < z.length; j++) {
					s += " " + alphabet[z.charAt(j)];
				}
				document.write(s + "<br>");
			}
		}
	
	</script>
</head>

<body>

Понеслася :)))
<span id="output" style="width:100%"></span>

<input type="button" value="calculate" onclick="comb(document.getElementById('output'));return false;">
</body>
</html>

ЗЫ! Специально допущена маленькая ошибка (неверно заданы интервали) ... но это так чтобы жизнь- медом не казалась :)))

А можно расмотреть всё под другим углом ... за алфавит взять позиции, а алфовит за позиции ... и тогда это будет таким же решением ... но без извратов. Всё очень просто :)

ЗЫ! Тут главное не опухнуть :)
  • 0
Victoria nulla est, Quam quae confessos animo quoque subjugat hostes ...
Верю в смерть после жизни, любовь после секса и в крем после бритья ...

#7 JoBzik

JoBzik
  • Пользователь
  • 318 сообщений
  • Откуда:Россия, Санкт-Петербург

Отправлено 27 июня 2008 - 15:39

то есть, в принципе, надо прокрутить все от 1 2 3 4 5 6 до 10 9 8 7 6 5
  • 0
Смерть стоит того, чтобы жить,
А любовь стоит того, чтобы ждать
(Кино, Виктор Цой)

#8 ParadoxL

ParadoxL
  • Постоялец
  • 5 023 сообщений
  • Откуда:Edinburg

Отправлено 27 июня 2008 - 17:08

JoBzik, от 1 1 1 1 1 1 до 10 10 10 10 10 10 ... исключая те где есть два и больше вхождений одинаковых знаков.
  • 0
Victoria nulla est, Quam quae confessos animo quoque subjugat hostes ...
Верю в смерть после жизни, любовь после секса и в крем после бритья ...

#9 JoBzik

JoBzik
  • Пользователь
  • 318 сообщений
  • Откуда:Россия, Санкт-Петербург

Отправлено 01 июля 2008 - 22:02

Incubo, спасибо за помощь

итоговый код в VBA
Sub proga1()
r = 1
i = 1
u = 1
v = 1
Z = 1
j = 1
For a = 1 To 5
  For b = a + 1 To a + 5
	If b > 10 Then Exit For
	For c = b + 1 To b + 5
	  If c > 10 Then Exit For
	  For d = c + 1 To c + 5
		If d > 10 Then Exit For
		For e = d + 1 To d + 5
		  If e > 10 Then Exit For
		  For f = e + 1 To e + 5
			If f > 10 Then Exit For
			Cells(r, 1) = a
			r = r + 1
			 Cells(i, 2) = b
			 i = i + 1
			 Cells(u, 3) = c
			u = u + 1
			 Cells(v, 4) = c
			v = v + 1
			 Cells(Z, 5) = e
			Z = Z + 1
			 Cells(j, 6) = f
			j = j + 1
		  Next
		Next
	  Next
	Next
  Next
Next
	
End Sub

  • 0
Смерть стоит того, чтобы жить,
А любовь стоит того, чтобы ждать
(Кино, Виктор Цой)

#10 ParadoxL

ParadoxL
  • Постоялец
  • 5 023 сообщений
  • Откуда:Edinburg

Отправлено 05 июля 2008 - 11:25

Не, то что ты написал работать не будет!

уже даже первая строчка будет :
123356
Что противоречит условиям задачи. Как собственно и все строчки неверны так как в них попадаются дубликаты.
И во вторых у тебя перебор длится только до
5677910
Если конечно я правильно понял алгоритм (а мне кажется я понял его правильно)
  • 0
Victoria nulla est, Quam quae confessos animo quoque subjugat hostes ...
Верю в смерть после жизни, любовь после секса и в крем после бритья ...

#11 JoBzik

JoBzik
  • Пользователь
  • 318 сообщений
  • Откуда:Россия, Санкт-Петербург

Отправлено 05 июля 2008 - 20:25

извиняюсь... маленькая опечатка..... вот итоговый вариант
Sub proga1()
r = 1
i = 1
u = 1
v = 1
Z = 1
j = 1
For a = 1 To 5
  For b = a + 1 To a + 5
	If b > 10 Then Exit For
	For c = b + 1 To b + 5
	  If c > 10 Then Exit For
	  For d = c + 1 To c + 5
		If d > 10 Then Exit For
		For e = d + 1 To d + 5
		  If e > 10 Then Exit For
		  For f = e + 1 To e + 5
			If f > 10 Then Exit For
			Cells(r, 1) = a
			r = r + 1
			 Cells(i, 2) = b
			 i = i + 1
			 Cells(u, 3) = c
			u = u + 1
			 Cells(v, 4) = c
			v = v + 1
			 Cells(Z, 5) = e
			Z = Z + 1
			 Cells(j, 6) = f
			j = j + 1
		  Next
		Next
	  Next
	Next
  Next
Next
	
End Sub

  • 0
Смерть стоит того, чтобы жить,
А любовь стоит того, чтобы ждать
(Кино, Виктор Цой)

#12 ParadoxL

ParadoxL
  • Постоялец
  • 5 023 сообщений
  • Откуда:Edinburg

Отправлено 05 июля 2008 - 20:34

Всё равно ... смотри какой ответ выдает твоя процедура

1	2	3	3	5	6
1	2	3	3	5	7
1	2	3	3	5	8
1	2	3	3	5	9
1	2	3	3	5	10
1	2	3	3	6	7
1	2	3	3	6	8
1	2	3	3	6	9
1	2	3	3	6	10
1	2	3	3	7	8
1	2	3	3	7	9
1	2	3	3	7	10
1	2	3	3	8	9
1	2	3	3	8	10
1	2	3	3	9	10
1	2	3	3	6	7
1	2	3	3	6	8
1	2	3	3	6	9
1	2	3	3	6	10
1	2	3	3	7	8
1	2	3	3	7	9
1	2	3	3	7	10
1	2	3	3	8	9
1	2	3	3	8	10
1	2	3	3	9	10
1	2	3	3	7	8
1	2	3	3	7	9
1	2	3	3	7	10
1	2	3	3	8	9
1	2	3	3	8	10
1	2	3	3	9	10
1	2	3	3	8	9
1	2	3	3	8	10
1	2	3	3	9	10
1	2	3	3	9	10
1	2	4	4	6	7
1	2	4	4	6	8
1	2	4	4	6	9
1	2	4	4	6	10
1	2	4	4	7	8
1	2	4	4	7	9
1	2	4	4	7	10
1	2	4	4	8	9
1	2	4	4	8	10
1	2	4	4	9	10
1	2	4	4	7	8
1	2	4	4	7	9
1	2	4	4	7	10
1	2	4	4	8	9
1	2	4	4	8	10
1	2	4	4	9	10
1	2	4	4	8	9
1	2	4	4	8	10
1	2	4	4	9	10
1	2	4	4	9	10
1	2	5	5	7	8
1	2	5	5	7	9
1	2	5	5	7	10
1	2	5	5	8	9
1	2	5	5	8	10
1	2	5	5	9	10
1	2	5	5	8	9
1	2	5	5	8	10
1	2	5	5	9	10
1	2	5	5	9	10
1	2	6	6	8	9
1	2	6	6	8	10
1	2	6	6	9	10
1	2	6	6	9	10
1	2	7	7	9	10
1	3	4	4	6	7
1	3	4	4	6	8
1	3	4	4	6	9
1	3	4	4	6	10
1	3	4	4	7	8
1	3	4	4	7	9
1	3	4	4	7	10
1	3	4	4	8	9
1	3	4	4	8	10
1	3	4	4	9	10
1	3	4	4	7	8
1	3	4	4	7	9
1	3	4	4	7	10
1	3	4	4	8	9
1	3	4	4	8	10
1	3	4	4	9	10
1	3	4	4	8	9
1	3	4	4	8	10
1	3	4	4	9	10
1	3	4	4	9	10
1	3	5	5	7	8
1	3	5	5	7	9
1	3	5	5	7	10
1	3	5	5	8	9
1	3	5	5	8	10
1	3	5	5	9	10
1	3	5	5	8	9
1	3	5	5	8	10
1	3	5	5	9	10
1	3	5	5	9	10
1	3	6	6	8	9
1	3	6	6	8	10
1	3	6	6	9	10
1	3	6	6	9	10
1	3	7	7	9	10
1	4	5	5	7	8
1	4	5	5	7	9
1	4	5	5	7	10
1	4	5	5	8	9
1	4	5	5	8	10
1	4	5	5	9	10
1	4	5	5	8	9
1	4	5	5	8	10
1	4	5	5	9	10
1	4	5	5	9	10
1	4	6	6	8	9
1	4	6	6	8	10
1	4	6	6	9	10
1	4	6	6	9	10
1	4	7	7	9	10
1	5	6	6	8	9
1	5	6	6	8	10
1	5	6	6	9	10
1	5	6	6	9	10
1	5	7	7	9	10
1	6	7	7	9	10
2	3	4	4	6	7
2	3	4	4	6	8
2	3	4	4	6	9
2	3	4	4	6	10
2	3	4	4	7	8
2	3	4	4	7	9
2	3	4	4	7	10
2	3	4	4	8	9
2	3	4	4	8	10
2	3	4	4	9	10
2	3	4	4	7	8
2	3	4	4	7	9
2	3	4	4	7	10
2	3	4	4	8	9
2	3	4	4	8	10
2	3	4	4	9	10
2	3	4	4	8	9
2	3	4	4	8	10
2	3	4	4	9	10
2	3	4	4	9	10
2	3	5	5	7	8
2	3	5	5	7	9
2	3	5	5	7	10
2	3	5	5	8	9
2	3	5	5	8	10
2	3	5	5	9	10
2	3	5	5	8	9
2	3	5	5	8	10
2	3	5	5	9	10
2	3	5	5	9	10
2	3	6	6	8	9
2	3	6	6	8	10
2	3	6	6	9	10
2	3	6	6	9	10
2	3	7	7	9	10
2	4	5	5	7	8
2	4	5	5	7	9
2	4	5	5	7	10
2	4	5	5	8	9
2	4	5	5	8	10
2	4	5	5	9	10
2	4	5	5	8	9
2	4	5	5	8	10
2	4	5	5	9	10
2	4	5	5	9	10
2	4	6	6	8	9
2	4	6	6	8	10
2	4	6	6	9	10
2	4	6	6	9	10
2	4	7	7	9	10
2	5	6	6	8	9
2	5	6	6	8	10
2	5	6	6	9	10
2	5	6	6	9	10
2	5	7	7	9	10
2	6	7	7	9	10
3	4	5	5	7	8
3	4	5	5	7	9
3	4	5	5	7	10
3	4	5	5	8	9
3	4	5	5	8	10
3	4	5	5	9	10
3	4	5	5	8	9
3	4	5	5	8	10
3	4	5	5	9	10
3	4	5	5	9	10
3	4	6	6	8	9
3	4	6	6	8	10
3	4	6	6	9	10
3	4	6	6	9	10
3	4	7	7	9	10
3	5	6	6	8	9
3	5	6	6	8	10
3	5	6	6	9	10
3	5	6	6	9	10
3	5	7	7	9	10
3	6	7	7	9	10
4	5	6	6	8	9
4	5	6	6	8	10
4	5	6	6	9	10
4	5	6	6	9	10
4	5	7	7	9	10
4	6	7	7	9	10
5	6	7	7	9	10


Т.е. ни одна из строчек не удовлетворяет условиям задачи.

Я же тебе показал как сделать. Напиши по аналогии только на VBA
  • 0
Victoria nulla est, Quam quae confessos animo quoque subjugat hostes ...
Верю в смерть после жизни, любовь после секса и в крем после бритья ...

#13 JoBzik

JoBzik
  • Пользователь
  • 318 сообщений
  • Откуда:Россия, Санкт-Петербург

Отправлено 05 июля 2008 - 20:42

блин... опять не то послал... запарился просто... всесто второй c идет d
Sub proga1()
r = 1
i = 1
u = 1
v = 1
Z = 1
j = 1
For a = 1 To 5
  For b = a + 1 To a + 5
	If b > 10 Then Exit For
	For c = b + 1 To b + 5
	  If c > 10 Then Exit For
	  For d = c + 1 To c + 5
		If d > 10 Then Exit For
		For e = d + 1 To d + 5
		  If e > 10 Then Exit For
		  For f = e + 1 To e + 5
			If f > 10 Then Exit For
			Cells(r, 1) = a
			r = r + 1
			 Cells(i, 2) = b
			 i = i + 1
			 Cells(u, 3) = c
			u = u + 1
			 Cells(v, 4) = d
			v = v + 1
			 Cells(Z, 5) = e
			Z = Z + 1
			 Cells(j, 6) = f
			j = j + 1
		  Next
		Next
	  Next
	Next
  Next
Next
	
End Sub

  • 0
Смерть стоит того, чтобы жить,
А любовь стоит того, чтобы ждать
(Кино, Виктор Цой)

#14 ParadoxL

ParadoxL
  • Постоялец
  • 5 023 сообщений
  • Откуда:Edinburg

Отправлено 05 июля 2008 - 20:50

:) Теперь что-то похожее на правду ... только у тебя до
5	6	7	8	9	10
а как же
6	5	7	8	9	10
7	6	5	8	9	10
...
10	9	8	7	6	1

  • 0
Victoria nulla est, Quam quae confessos animo quoque subjugat hostes ...
Верю в смерть после жизни, любовь после секса и в крем после бритья ...

#15 JoBzik

JoBzik
  • Пользователь
  • 318 сообщений
  • Откуда:Россия, Санкт-Петербург

Отправлено 05 июля 2008 - 20:55

1	2	3	4	5	6

1	2	3	4	5	7

1	2	3	4	5	8

1	2	3	4	5	9

1	2	3	4	5	10

1	2	3	4	6	7

1	2	3	4	6	8

1	2	3	4	6	9

1	2	3	4	6	10

1	2	3	4	7	8

1	2	3	4	7	9

1	2	3	4	7	10

1	2	3	4	8	9

1	2	3	4	8	10

1	2	3	4	9	10

1	2	3	5	6	7

1	2	3	5	6	8

1	2	3	5	6	9

1	2	3	5	6	10

1	2	3	5	7	8

1	2	3	5	7	9

1	2	3	5	7	10

1	2	3	5	8	9

1	2	3	5	8	10

1	2	3	5	9	10

1	2	3	6	7	8

1	2	3	6	7	9

1	2	3	6	7	10

1	2	3	6	8	9

1	2	3	6	8	10

1	2	3	6	9	10

1	2	3	7	8	9

1	2	3	7	8	10

1	2	3	7	9	10

1	2	3	8	9	10

1	2	4	5	6	7

1	2	4	5	6	8

1	2	4	5	6	9

1	2	4	5	6	10

1	2	4	5	7	8

1	2	4	5	7	9

1	2	4	5	7	10

1	2	4	5	8	9

1	2	4	5	8	10

1	2	4	5	9	10

1	2	4	6	7	8

1	2	4	6	7	9

1	2	4	6	7	10

1	2	4	6	8	9

1	2	4	6	8	10

1	2	4	6	9	10

1	2	4	7	8	9

1	2	4	7	8	10

1	2	4	7	9	10

1	2	4	8	9	10

1	2	5	6	7	8

1	2	5	6	7	9

1	2	5	6	7	10

1	2	5	6	8	9

1	2	5	6	8	10

1	2	5	6	9	10

1	2	5	7	8	9

1	2	5	7	8	10

1	2	5	7	9	10

1	2	5	8	9	10

1	2	6	7	8	9

1	2	6	7	8	10

1	2	6	7	9	10

1	2	6	8	9	10

1	2	7	8	9	10

1	3	4	5	6	7

1	3	4	5	6	8

1	3	4	5	6	9

1	3	4	5	6	10

1	3	4	5	7	8

1	3	4	5	7	9

1	3	4	5	7	10

1	3	4	5	8	9

1	3	4	5	8	10

1	3	4	5	9	10

1	3	4	6	7	8

1	3	4	6	7	9

1	3	4	6	7	10

1	3	4	6	8	9

1	3	4	6	8	10

1	3	4	6	9	10

1	3	4	7	8	9

1	3	4	7	8	10

1	3	4	7	9	10

1	3	4	8	9	10

1	3	5	6	7	8

1	3	5	6	7	9

1	3	5	6	7	10

1	3	5	6	8	9

1	3	5	6	8	10

1	3	5	6	9	10

1	3	5	7	8	9

1	3	5	7	8	10

1	3	5	7	9	10

1	3	5	8	9	10

1	3	6	7	8	9

1	3	6	7	8	10

1	3	6	7	9	10

1	3	6	8	9	10

1	3	7	8	9	10

1	4	5	6	7	8

1	4	5	6	7	9

1	4	5	6	7	10

1	4	5	6	8	9

1	4	5	6	8	10

1	4	5	6	9	10

1	4	5	7	8	9

1	4	5	7	8	10

1	4	5	7	9	10

1	4	5	8	9	10

1	4	6	7	8	9

1	4	6	7	8	10

1	4	6	7	9	10

1	4	6	8	9	10

1	4	7	8	9	10

1	5	6	7	8	9

1	5	6	7	8	10

1	5	6	7	9	10

1	5	6	8	9	10

1	5	7	8	9	10

1	6	7	8	9	10

2	3	4	5	6	7

2	3	4	5	6	8

2	3	4	5	6	9

2	3	4	5	6	10

2	3	4	5	7	8

2	3	4	5	7	9

2	3	4	5	7	10

2	3	4	5	8	9

2	3	4	5	8	10

2	3	4	5	9	10

2	3	4	6	7	8

2	3	4	6	7	9

2	3	4	6	7	10

2	3	4	6	8	9

2	3	4	6	8	10

2	3	4	6	9	10

2	3	4	7	8	9

2	3	4	7	8	10

2	3	4	7	9	10

2	3	4	8	9	10

2	3	5	6	7	8

2	3	5	6	7	9

2	3	5	6	7	10

2	3	5	6	8	9

2	3	5	6	8	10

2	3	5	6	9	10

2	3	5	7	8	9

2	3	5	7	8	10

2	3	5	7	9	10

2	3	5	8	9	10

2	3	6	7	8	9

2	3	6	7	8	10

2	3	6	7	9	10

2	3	6	8	9	10

2	3	7	8	9	10

2	4	5	6	7	8

2	4	5	6	7	9

2	4	5	6	7	10

2	4	5	6	8	9

2	4	5	6	8	10

2	4	5	6	9	10

2	4	5	7	8	9

2	4	5	7	8	10

2	4	5	7	9	10

2	4	5	8	9	10

2	4	6	7	8	9

2	4	6	7	8	10

2	4	6	7	9	10

2	4	6	8	9	10

2	4	7	8	9	10

2	5	6	7	8	9

2	5	6	7	8	10

2	5	6	7	9	10

2	5	6	8	9	10

2	5	7	8	9	10

2	6	7	8	9	10

3	4	5	6	7	8

3	4	5	6	7	9

3	4	5	6	7	10

3	4	5	6	8	9

3	4	5	6	8	10

3	4	5	6	9	10

3	4	5	7	8	9

3	4	5	7	8	10

3	4	5	7	9	10

3	4	5	8	9	10

3	4	6	7	8	9

3	4	6	7	8	10

3	4	6	7	9	10

3	4	6	8	9	10

3	4	7	8	9	10

3	5	6	7	8	9

3	5	6	7	8	10

3	5	6	7	9	10

3	5	6	8	9	10

3	5	7	8	9	10

3	6	7	8	9	10

4	5	6	7	8	9

4	5	6	7	8	10

4	5	6	7	9	10

4	5	6	8	9	10

4	5	7	8	9	10

4	6	7	8	9	10

5	6	7	8	9	10


  • 0
Смерть стоит того, чтобы жить,
А любовь стоит того, чтобы ждать
(Кино, Виктор Цой)

#16 ParadoxL

ParadoxL
  • Постоялец
  • 5 023 сообщений
  • Откуда:Edinburg

Отправлено 05 июля 2008 - 21:14

JoBzik, так нужны просто наборы чисел и порядок соседних не важен? :) Если так ... то думаю правильно :D
  • 0
Victoria nulla est, Quam quae confessos animo quoque subjugat hostes ...
Верю в смерть после жизни, любовь после секса и в крем после бритья ...