Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem sa kombinacijama kvota

[es] :: Visual Basic 6 :: Problem sa kombinacijama kvota

[ Pregleda: 2954 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

fpedja
Beograd

Član broj: 145092
Poruke: 76
*.xdsl.beograd.com.



Profil

icon Problem sa kombinacijama kvota12.05.2007. u 11:58 - pre 168 meseci
Pozdrav,

Imam problem oko programa u VB2005 za pravljenje mogucih kombinacija k elemenata (u mom slucaju kvota) od n elemenata. Naime ako odigrate sistem k od n i prodje n meceva, kako obezbediti da funkcija vrati sve moguce kombinacije k kvota!? Sve ostalo, mnozenje i sabiranje medjusobno tih k kvota je lako! Pokusao sam sa nekim rekurzijama ali mi uvek izostavi neke kombinacije!!

Pomoc!

[Ovu poruku je menjao fpedja dana 12.05.2007. u 16:59 GMT+1]
 
Odgovor na temu

rgdrajko
Beograd

Član broj: 117734
Poruke: 710
80.93.249.*



+3 Profil

icon Re: Problem sa kombinacijama kvota22.05.2007. u 14:12 - pre 167 meseci
To sto tebi treba su permutacije bez ponavljanja.
Posalji deo koda da vidim.
rgdrajko
 
Odgovor na temu

fpedja
Beograd

Član broj: 145092
Poruke: 76
*.xdsl.beograd.com.



Profil

icon Re: Problem sa kombinacijama kvota23.05.2007. u 12:23 - pre 167 meseci
Shvatio sam sta mi je problem, kad su kvote iste. Shvatices zasto (deo oynacen *). Resio sam tako sto sam svaku istu kvotu povecao za 0,000001 ali nije lepo resenje. Nisam znao nista drugo! Ako imas neko resenje posalji ako ne, u svakom slucaju, hvala. Evo koda:

Code:
Function sledKombinacija(ByVal n As Integer, ByRef k As Integer, ByVal komb() As Double, ByRef pomocniNiz() As Double) As Integer
        Dim l As Integer = k
        Dim x As Double
        Dim i, y As Integer


        Do While (l > 0 And komb(l) = pomocniNiz(n))
            l = l - 1
            n = n - 1
        Loop
        If (l < 1) Then
            Return 0
        End If

        x = komb(l)
        For i = 1 To n
            If pomocniNiz(i) = x Then      '*
                y = i                     '*
            End If
        Next

        Do
            komb(l) = pomocniNiz(y + 1)
            y = y + 1
            l = l + 1
        Loop While l <= k
        Return 1

    End Function


Objasnjenje: Niz komb je napunjen sa prvih k kvota iz niza pomocniNiz
 
Odgovor na temu

Ero S Ovoga Sveta

Član broj: 21509
Poruke: 173
*.teol.net.



Profil

icon Re: Problem sa kombinacijama kvota23.05.2007. u 13:34 - pre 167 meseci
E ovako. Neznam Sta ti ta funkcija radi ali mislim da je u ovom greska.
Kada Argument u funkciji definises sa ByVal Bez obzira sta funkcija as njim
radi njegov sadrzaj se nece mijenjati. Definisi Argumente funkcije koje
mijenjas sa ByRef.
 
Odgovor na temu

fpedja
Beograd

Član broj: 145092
Poruke: 76
*.xdsl.beograd.com.



Profil

icon Re: Problem sa kombinacijama kvota23.05.2007. u 16:36 - pre 167 meseci
OK, u pravu si za prosledjivanje, ali nije to problem. Da ti pojasnim, f-ja daje sve kombinacije k elemenata niza pomocniNiz. Komb, kao sto sam vec rekao, je napunjen sa prvih k elemenata niza pomocniNiz. Problem je kod istih elemenata zato sto u f-ji promenljiva y, kod istih elemenata, uzima veci indeks! Ne verujem da postoji, bar ja nisam uspeo da nadjem efikasniji nacin od onog sto sam naveo, da resim to. Mozda neko ima bolju f-ju!
 
Odgovor na temu

rgdrajko
Beograd

Član broj: 117734
Poruke: 710
80.93.249.*



+3 Profil

icon Re: Problem sa kombinacijama kvota23.05.2007. u 23:47 - pre 167 meseci
Evo ti program u Basic-u koji je prepisan iz casopisa Racunari br. 27 daleke 96 godine. Nemam sada vremena da ga prevedem u VB. Pokusaj da ga prevedes u VB. Ako je problem uradicu to kasnije.

Code:

'                                PERMUT.BAS
'                                PERMUT.EXE
' Uradjen: 21.05.1990.
' Verzija: 09.09.1996.


10 REM PERMUTACIJE BEZ PONAVLJANJA
20 REM
30 REM Racunari 27
40 REM
50 REM
60 REM
70 REM


80 DIM EL$(50), IZLAZ(50), POM(50)

85 OPEN "PERMUT.TXT" FOR APPEND AS #1
87 COLOR 7, 0, 0
90 CLS

100 PRINT " PERMUTACIJE BEZ PONAVLJANJA"
140 PRINT
160 PRINT : PRINT

180 REM PERMUTACIJE BEZ PONAVLJANJA

190 GOSUB 980

200 K = N

210 GOSUB 1030
220 GOSUB 1070

222 CLS
224 T$ = TIME$
226 LOCATE 22, 55: PRINT "POCETAK RADA: "; T$

230 FOR I = 1 TO K
240 IZLAZ(I) = I
250 POM(I) = 0
260 NEXT I

270 B = 0: T$ = TIME$

280 KN = N

290 IF N <> 2 THEN 330

300 GOSUB 1250: GOSUB 1320
310 GOSUB 1250: GOSUB 1320
320 GOTO 390

330 N = N - 1

340 GOSUB 290
350 GOSUB 1320

360 POM(N) = POM(N) + 1

370 IF POM(N) = N AND N = KN THEN 1380
380 IF POM(N) = N THEN POM(N) = 0 ELSE GOTO 330

390 N = N + 1

400 RETURN

980 INPUT "Koliko elemenata"; N
990 RETURN

1030 INPUT "Zelite li ispis "; ODG$
1040 ODG$ = LEFT$(ODG$, 1)
1050 ISPIS = NOT (ODG$ = "n" OR ODG$ = "N")
1060 RETURN

1070 PRINT
1080 PRINT
1090 FOR I = 1 TO N
1100 IF ISPIS THEN 1130
1110 EL$(I) = CHR$(I + ASC("a") - 1)
1120 GOTO 1170
1130 PRINT "Unesi "; I; ". element ili Enter";
1140 INPUT EL$(I)
1150 IF EL$(I) = "" THEN EL$(I) = CHR$(I + ASC("A") - 1)
1160 EL$(I) = LEFT$(EL$(I), 1)
1170 NEXT I
1180 PRINT
1190 RETURN

1250 B = B + 1
1260 IF NOT ISPIS THEN 1310
1265 REC$ = ""
1270 FOR L = 1 TO K
1280 'PRINT EL$(IZLAZ(L));
1285 REC$ = REC$ + EL$(IZLAZ(L))
1290 NEXT L
1300 'PRINT "   ";
1305 PRINT #1, REC$
1310 RETURN

1320 R = IZLAZ(KN - N + 1)
1330 FOR I = KN - N + 1 TO KN - 1
1340 IZLAZ(I) = IZLAZ(I + 1)
1350 NEXT I
1360 IZLAZ(KN) = R
1370 RETURN

1380 PRINT #1, ""
1390 PRINT #1, "UKUPNO: "; B
1400 PRINT #1, ""
1410 PRINT #1, "POCETAK RADA: "; T$
1420 PRINT #1, "   KRAJ RADA: "; TIME$
1425 PRINT #1, ""
1430 CLOSE
1450 LOCATE 23, 65: PRINT "   KRAJ RADA: "; TIME$

1460 END


rgdrajko
 
Odgovor na temu

Ero S Ovoga Sveta

Član broj: 21509
Poruke: 173
*.teol.net.



Profil

icon Re: Problem sa kombinacijama kvota24.05.2007. u 01:05 - pre 167 meseci
Pojma nemam sta hoces al probaj ovako.
Definisi onaj "y" kao niz
Code:

Dim y() As Integer

Sad ona for petlja:
Code:
ReDim y(0)
    For i = 1 To n
        If pomocniNiz(i) = x Then
            y(UBound(y)) = i
            ReDim Preserve y(UBound(y) + 1)
        End If
    Next

    ReDim Preserve y(UBound(y) - 1)

Sada u "y" nizu imas sve indexe kad je pomocniNiz(i) = x.
Prodji petljom kroz njega i upisuj sto ti treba.
Ona sledeca petlja "Do" mi nije jasna sta radi. Zasto povecavas "y"? I nju ces morati da izmijenis?
 
Odgovor na temu

fpedja
Beograd

Član broj: 145092
Poruke: 76
*.xdsl.beograd.com.



Profil

icon Re: Problem sa kombinacijama kvota24.05.2007. u 12:11 - pre 167 meseci
Ok, hvala na trudu, obojici!
Inace, y povecavam zbog sledece ideje: ako npr imam elemente 2,3,5,6 a trazim kombinacije od dva el.
Prva: 2,3
Druga: 2,5
Treca: 2,6
Cetvrta: 3,5
...
Odnosno, obezbedjuje mi da povecavam poslednji index (element) i da mi prebaci (u saradnji sa prvom, do while petljom) sa trece na cetvrtu kombinaciju.
 
Odgovor na temu

rgdrajko
Beograd

Član broj: 117734
Poruke: 710
80.93.249.*



+3 Profil

icon Re: Problem sa kombinacijama kvota24.05.2007. u 12:43 - pre 167 meseci
Evo pogledaj dos program Permut.exe iz onog basic koda koji sam ti poslao i primer sa 7 elemenata u fajlu Permut.txt. Kada startujes program unsei broj elemenata(npr. 7), na pitanje zelite li ispis otkucaj d, i onda redom unesi elemente od 1 do 7 i za kraj samo ptitini enter a da nista ne unosis.
rgdrajko
Prikačeni fajlovi
 
Odgovor na temu

[es] :: Visual Basic 6 :: Problem sa kombinacijama kvota

[ Pregleda: 2954 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.