Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 |

 

  Вопрос: Помогите новичку. Проблема с циклами Добавлено: 24.08.11 15:28  

Автор вопроса:  Дмитрий

Ответить

  Ответы Всего ответов: 22  

Номер ответа: 16
Автор ответа:
 ---Fix---



ICQ: 348680795 

Вопросов: 12
Ответов: 33
 Профиль | | #16 Добавлено: 29.08.11 10:45
Я новичек: что такое рекурсия

http://lmgtfy.com/?q=%D1%87%D1%82%D0%BE+%D1%82%D0%B0%D0%BA%D0%BE%D0%B5+%D1%80%D0%B5%D0%BA%D1%83%D1%80%D1%81%D0%B8%D1%8F

  1. Private sub prcRecursive(byval y as integer)
  2. '...
  3. For i1=1 To y
  4. if НадоЕщеОдинЦикл=true then
  5. Call prcRecursive(НовоеКоличествоИтерацийВЦикле)
  6. endif
  7. Next
  8. End Sub

Ответить

Номер ответа: 17
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #17
Добавлено: 29.08.11 18:21
У меня была как-то давно статья про алгоритмы перебора комбинаторные.
http://www.vbnet.ru/articles/showarticle.aspx?id=74

Там были и варианты без рекурсии и с рекурсией кажется тоже.

Ответить

Номер ответа: 18
Автор ответа:
 Дмитрий



Вопросов: 9
Ответов: 18
 Профиль | | #18 Добавлено: 24.09.11 16:31
Попробывал так:
  1. Public Class Form1
  2.     Dim max As Integer
  3.     Dim col As Integer
  4.     Dim M() As Integer
  5.     Dim z As Integer
  6.     Dim k As Integer
  7.  
  8.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  9.         ' dgv1 - Дата грид
  10.         max = 5 ' данные для проверки
  11.         col = 11 ' Данные для проверки
  12.         ReDim M(max + 1)
  13.         M(0) = 0
  14.         For i = 1 To max
  15.             M(i) = M(i - 1) + 1
  16.             dgv1.ColumnCount = dgv1.ColumnCount + 1
  17.             dgv1(i - 1, 0).Value = M(i)
  18.         Next
  19.         z = max
  20.         k = 0
  21. e1:
  22.         If z = 0 Then
  23.             GoTo e2
  24.         End If
  25. e:
  26.         If M(z + 1) > col - max + z Then
  27.             z = z - 1
  28.             GoTo e
  29.         Else
  30.             M(z + 1) = M(z + 1) + 1
  31.             If z < max Then
  32.                 For i = z + 1 To max
  33.                     M(i + 1) = M(i) + 1
  34.                 Next
  35.             End If
  36.         End If
  37.         k = k + 1
  38.         For i = 1 To max
  39.             dgv1(i - 1, k).Value = M(i)
  40.         Next
  41.         GoTo e1
  42. e2:
  43.     End Sub
  44. End Class

Ответить

Номер ответа: 19
Автор ответа:
 Дмитрий



Вопросов: 9
Ответов: 18
 Профиль | | #19 Добавлено: 24.09.11 16:33
Выдает ошибку на строке 39:
"Index was out of range. Must be non-negative and less than the size of the collection.
Parameter name: index"
Что не так сделал?
Помогите!

Ответить

Номер ответа: 20
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #20 Добавлено: 24.09.11 18:27
Это значит что ты пытаешься обратиться к элементу по индексу, которого нет в коллекции (или меньше нуля, или больше чем максимальный индекс в коллекции)

Ответить

Номер ответа: 21
Автор ответа:
 Дмитрий



Вопросов: 9
Ответов: 18
 Профиль | | #21 Добавлено: 26.09.11 20:04
 У меня получилось, одна проблема дата грид получается пустой кроме последней строчки(хотя это уже не проблема) промежуточные результаты правильные. Мне это уже не важно можно прямо в БД вносить( по крайней мере для меня так лучше). Выкладываю код может кому-то поможет. всем спасибо, кто пытался помочь. Только один вопрос один еще возник (объясните тупому) как матрицу перенести в модуль??
  1. Public Class Form1
  2.     Dim max As Integer
  3.     Dim col As Integer
  4.     Dim M() As Integer
  5.     Dim z As Integer
  6.     Dim k As Integer
  7.     Dim l As Integer
  8.     Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  9.         ' dgv1 - Дата грид
  10.         max = 4 ' данные для проверки
  11.         col = 10 ' Данные для проверки
  12.         ReDim M(max + 1)
  13.         M(0) = 0
  14.         For i = 1 To max
  15.             M(i) = M(i - 1) + 1
  16.             dgv1.ColumnCount = dgv1.ColumnCount + 1
  17.             dgv1(i - 1, 0).Value = M(i)
  18.         Next
  19.         z = max
  20.         k = 0
  21. e1:
  22.         If z = 0
  23.             GoTo e2
  24.         End If
  25.         If M(z) = col - max + z Then
  26.             z = z - 1
  27.             GoTo e1
  28.         Else
  29.             M(z) = M(z) + 1
  30.             If z < max Then
  31.                 For i = z + 1 To max
  32.                     M(i) = M(i - 1) + 1
  33.                 Next
  34.                 z = max
  35.             End If
  36.         End If
  37.         k = k + 1
  38.         dgv1.RowCount = dgv1.RowCount + 1
  39.         For i = 1 To max
  40.             dgv1(i - 1, k).Value = M(i)
  41.         Next
  42.         GoTo e1
  43. e2:
  44.     End Sub
  45. End Class

Хочу поместить сие в модуль.

Ответить

Номер ответа: 22
Автор ответа:
 Дмитрий



Вопросов: 9
Ответов: 18
 Профиль | | #22 Добавлено: 26.09.11 20:17
Например массив (9, 12, 34, 45, 59, 60) разложить по 5 элементов (в примере выше) max=5, col=6, то биш
9, 12, 34, 45, 59
9, 12, 34, 45, 60
9, 12, 34, 59, 60
9, 12, 45, 59, 60
9, 34, 45, 59, 60
12, 34, 45, 59, 60
Причем max и col может быть разное и использываться в разных формах, для этого и передача матрицы в модуль.

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам