[ Pocev-od-mene @ 11.04.2013. 00:36 ] @
Pozdrav ljudi,

Imam problem što nemogu shvatiti na koji način da kreiram ovu petlju. Naime uradio sam sve sa if ali da nebi pisao još 100 ifova moram riješiti na drugi način i to izgleda ovako:
nosivost predstavlja tonu znači 16000 je 16 tona, a PUTATINA1 predstavlja novac to govorim radi lakšeg razumjevanja problema.


If nosivost > 14999 And nosivost < 16000 Then
PUTARINA1 = 480
End If
If nosivost > 15999 And nosivost < 17000 Then
PUTARINA1 = 520
End If


Sad slijedi problem kaže " za svaku tonu iznad 17 dodaj na PUTARINA1 40 maraka"

Što znači kad bi ja sad unio u formi u polje nosivost broj 20332, u PUTARINA1 bi mi trebala iznositi 680 jer je to 4 tone preko 17, a 4*40= 160 i plus ovih zadnjih 520 dobijemo taj broj.

Pokušao sam na razne načine for i while ali nisam uspio jer nemogu zamisliti kako definisati problem.
[ FOX028 @ 11.04.2013. 05:50 ] @
Ne razumem zasto bi koristio petlju, mislim da bi to mogao ovako da odradis:

Code:
If nosivost > 14999 And nosivost < 16000 Then
    PUTARINA1 = 480
ElseIf nosivost > 15999 And nosivost < 17000 Then
    PUTARINA1 = 520
ElseIf nosivost > 16999 Then
    PUTARINA1 = 520 + (Int((nosivost - 17000) / 1000) + 1) * 40
End If
[ Getsbi @ 11.04.2013. 05:55 ] @
Pokušaj sa strukturom Select Case......End Select. Pregeldnija je i što je još važnije brža je.
[ Pocev-od-mene @ 11.04.2013. 11:20 ] @
FOX028 Hvala sve radi ispravno, a za select case bi mi isto trebao primjer da bi skontao kako ide ;)
[ FOX028 @ 11.04.2013. 11:56 ] @
Evo primer za Select Case

Code:
Select Case nosivost
    Case 14999 To 15999
        PUTARINA1 = 480
    Case 16000 To 16999
        PUTARINA1 = 520
    Case Is > 16999
        PUTARINA1 = 520 + (Int((nosivost - 17000) / 1000) + 1) * 40
End Select



[ Zidar @ 11.04.2013. 14:43 ] @
Umesto da kodirate potencijalno promenljive vrednosti, zasto ne napravite lookup tabelu. Ovako nekako:
Tablea: tblPutarina_LKP
Code:

NosivostOd, NosivostDo, Putarina
14999         15999           480
16000        16999            520
16999        999999             -1



Pseudo code:
Code:

dim PutarinaIzTabele deciml
DIM Putarina1 decimal

PutarinaIzTabele  = dlookup("Putarina","tblPutarina_LKP", cstr(me!Nosivost) & " BETWEEN [NosivosOd] AND [NosivostDo]")

If PutarinaIzTabele  = -1 THEN
        PUTARINA1 = 520 + (Int((me!nosivost - 17000) / 1000) + 1) * 40
ELSE 
        Putarina1 = PutarinaIzTabele  
ENDIF


Na ovaj nacin sebi omogucujete da se putarina menja kroz vreme, pa i granice nosivosti, a da ne morate da prepravljate kod kad se to desi. Putarina se ne manja bas svaki dan, ali se menja. Granice se menjaju jos redje, ali je moguce. Problem je sto kad se to desi, ko zna ko ce odrzavati program i program moze da se zaglavi i stane samo zato sto u tom momentu niko vise ne zna kakao da promeni kod.

[ Pocev-od-mene @ 11.04.2013. 22:21 ] @
Svaka čast i hvala momci,

ovdje se stvarno za jedan dan može mnogo novoga naučiti, svaka od vaših metoda radi perfektno i poslužit će mi u mnogim budućim situacijama, sad je samo ostalo kao i svaki put da vam se još jednom zahvalim, hvala na primjerima i dijelenju znanja!
[ captPicard @ 15.04.2013. 10:20 ] @
Idem malo cjepidlačiti :)

Kada već parametriziramo, bilo bi zgodno uvaliti i onaj *40 u tablicu, npr. dodati jednu kolonu "Mnozitelj", pa bi tabela izgledala ovako:

Citat:
Zidar: Umesto da kodirate potencijalno promenljive vrednosti, zasto ne napravite lookup tabelu. Ovako nekako:
Tablea: tblPutarina_LKP
Code:

NosivostOd, NosivostDo, Putarina, Mnozitelj
14999         15999           480   ,  1
16000        16999            520   ,  1
16999        999999             -1  ,  40

[ Zidar @ 15.04.2013. 18:02 ] @
Captai is right

U stvari, celu formulu bi trebalo preradiati:

PUTARINA1 = 520 + (Int((me!nosivost - 17000) / 1000) + 1) * 40


520: A = MAX ("Putarina","tblPutarina_LKP","Putarina <> -1" )

17000: B = 1 + MAX("NosivostOd","tblPutarina_LKP")

Mnozitelj: M = MAX("Mnozitelj", "tblPutarina_LKP", "Putarina = -1" )


Ono 1000 je verovatno konstanta sa opravdanim razlogom, a ostalo mzoe da se izracuna, koristeci tabelu sa prosirenom strukturemo, onako kako je Captain uradio.

Formula bi onda bila:

PUTARINA1 = A+ (Int((me!nosivost - B) / 1000) + 1) * M


Ako neko ume da skine i ono 1000, bilo bi dobro, ali izgleda da ne mora jer to verovatno pretvara kilograme u tone?