Iskopao sam ti ovaj
antikvitet iz zbirke rešenih zadataka u BASIC-u jer računa ovo što tebi treba - kombinacije bez ponavljanja, pa vidi kako možeš da ga iskoristiš. Nisam se preterano udubljivao u tvoj "zadatak", iako si ga prilično detaljno opisao (što je za pohvalu s obzirom na to koliko njih preferira
haiku ovde), ali razumećeš ako nemam naviku da za drugog završavam komercijalne poslove; sem ako mi nije poslodavac, razume se. Elem, kod je prilično
gadan, napisan je u maniru koji se odavno preporučuje za izbegavanje ali, kako s'ono kaže, poklonjenom kodu
koji radi ono što sam ne umem da napišem, ne gleda se u sintaksu. ;)
Code:
' KOMBINACIJE BEZ PONAVLJANJA KLASE bC [BYTE]
' OD UNETIH ELEMENATA BEZ RAZDVAJANJA [STRING]
' A ZA PROIZVOLJAN BROJ KARAKTERA U STRINGU.
' KOMBINACIJE SE STAMPAJU U PRVE DVE KOLONE
' KOJE SE PRETHODNO OBRISU [A:B].
'
Option Explicit
Sub Kombinacije()
Dim bC As Byte
Dim bCif As Byte
Dim bRow As Byte
Dim bL As Byte
Dim bS As Byte
Dim bEl As Byte
Dim strSviEl As String
Dim strC As String
Dim strInp As String
Dim blArr() As Boolean
strInp = InputBox("K = ", "Kombinacije")
bC = CByte(strInp)
strSviEl = InputBox("Elementi: ", "Kombinacije")
strInp = InputBox("Broj cifara po elementu: ", "Kombinacije")
bCif = CByte(strInp)
bEl = Len(strSviEl)
ReDim blArr(1 To bEl) As Boolean
Range("A:B").ClearContents
Range("A1").Value = "Kombinacije klase K = " & bC
Range("A2").Value = "Od elemenata " & strSviEl & ":"
bRow = 1
Nod1: bL = 1
Nod2: If blArr(bL) = False Then GoTo Nod3
blArr(bL) = False
bL = bL + bCif
If bL < bEl + 1 Then GoTo Nod2
Exit Sub
Nod3: blArr(bL) = True
bS = 0
For bL = 1 To bEl Step bCif
If blArr(bL) Then Let bS = bS + 1
Next bL
If bS <> bC Then GoTo Nod1
For bL = 1 To bEl Step bCif
If blArr(bL) Then Let strC = strC & Mid(strSviEl, bL, bCif)
Next bL
Cells(bRow + 3, 1).Value = CStr(bRow) & ")"
Cells(bRow + 3, 2).Value = "'" & strC
bRow = bRow + 1
strC = ""
GoTo Nod1
End Sub
Ubaci kod u
Excel, čiji objekti su upotrebljeni za ispis, da bi video efekte. Programčić je namenjen za opšti slučaj pa računa kombinacije samo za unetu klasu, a ako sam dobro shvatio, tebi je potreban ispis za sve klase počev od 1 pa do tražene (koja je opet, čini mi se, fiksna). To naravno nije teško prilagoditi a ti ćeš, nadam se, umeti sam da završiš i za ostale zahteve (koje nisam sasvim razumeo, btw).
U programu se elementi unose integralno, svi su u jednom stringu, ali je dozvoljena proizvoljna širina (može biti >1) tako bi, eventualno mogao da koristiš kombinacije adresa ćelija. Recimo, najbolje je videti na primeru, ako je klasa = 4, elementi "12345", br.karak. po elem. = 1, dobiješ ovo na izlazu:
Citat:
Kombinacije klase K = 4
Od elemenata 12345:
1) 1234
2) 1235
3) 1245
4) 1345
5) 2345
a ako je klasa = 3, elementi "B2C2B3C4", br.karak. po elem. = 2:
Citat:
Kombinacije klase K = 3
Od elemenata B2C2B3C4:
1) B2C2B3
2) B2C2C4
3) B2B3C4
4) C2B3C4
Naravno, mogao bi programčić da prilagodiš i tako da radi kao makro f-ja pa da joj iz ćelija prosleđuješ potrebne argumente. Izlazni string onda možeš iskoristiti preko f-je INDIRECT(), npr. S tim da bi onda bilo poželjno dodati f-ji još i razne provere ispravnosti i druge kontrole grešaka što sve ovde nedostaje.
Have you found helpful examples, solutions or ideas-in-work, please consider the
following:
• Citation of *actual page* you are going to using is welcome.
• Have you saw "Value Added" examples you are going to incorporate to your
profitable blog, daily job or any money making venture: How about online donation?
↗Ana & Vlade Divac Foundation
Hvala!