Iskanje seštevka celih števil

Pomoč pri delu z MS Excelom
Odgovori
zvonem
Prispevkov: 95
Pridružen: Če Sep 29, 2005 10:54 pm

Iskanje seštevka celih števil

Odgovor Napisal/-a zvonem »

Malo čuden naslov vprašanja, ampak vseeno: zanima me, kako bi v Excelu napisal formulo :oops: - bolj verjetno bo to makro ali funkcija - da bi mi izpisal vse možne številke, katerih seštevek da zahtevano število. Npr.: 4 dobimo, če seštejemo 2 in 2, 1 in 3 (zaporedje ni pomembno) ali 3 dobimo, če seštejemo 1 in 2 itd.
dule33
Prispevkov: 7
Pridružen: To Avg 16, 2005 7:50 am
Kraj: Kranj

Odgovor Napisal/-a dule33 »

Kaj ko bi poskusil z dodatkom Reševalec (Solver)?
Stenly
Prispevkov: 223
Pridružen: Sr Jul 27, 2005 11:29 pm

Odgovor Napisal/-a Stenly »

Pozdravljen zvonem

Pravzaprav mi ni jasno, čemu to potrebujeto, niti iz koliko števil naj bi bila sešteta vaša izbrana številka. Prilagam pa kodo.

Koda: Izberi vse

Sub Makro1()
'
nase_stevilo = 4

  For i = 0 To 9
   For j = 0 To 9

     If i + j = nase_stevilo Then MsgBox nase_stevilo & " = " & i & " + " & j

   Next j
  Next i
'
End Sub
Lp
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Pozdravljeni,

problem boste morali opisati malce podrobneje, saj ni jasno ali vas zanimajo samo seštevki parov števil ali pa vse kombinacije (npr. 4 = 1+1+1+1). Slednjih je seveda pri večjih številih zelo zelo veliko. Zanimiva naloga, ki jo lahko rešte z uporabo preproste srednješolske matematike (koliko je vseh (različnih!) možnosti? :) ).

No če pa vas zanima samo seštevek dveh števil pa imate delno rešitev podano že v odgovoru pred mojim. Predlagana rešitev ima samo dve pomanjklivosti. Možno je dobiti rešitev za največ število 18 in rešitev bo dajala 2x iste rezultate (npr 1+3 in 3+1).
lp,
Matjaž Prtenjak
Administrator
zvonem
Prispevkov: 95
Pridružen: Če Sep 29, 2005 10:54 pm

Odgovor Napisal/-a zvonem »

Stenliyev odgovor je deloma zadovoljiv. Pomankljivost je v mojih podatkih. Zanima me namreč samo ena kombinacija (permutacija - :oops: pozabil sem pravilni matematični izraz) in to tiste, pri katerih se dve enaki številki ne ponovita. Npr.: število 4 je možno zapisati kot: 0+4, 1+3, 2+2, 3+1, 4+0. Od napisanih kombinacij me zanima samo: 1+3 (ali 3+1). Torej: ne sme se pojaviti 0, ne smeta se pojaviti enaki številki (2+2), ne sme se pojaviti številka 0 in ne sme se pojaviti kombinacija z enakimi številkami samo v drugem vrstnem redu.
A je kaj bolj razumljivo :?:
zvonem
Prispevkov: 95
Pridružen: Če Sep 29, 2005 10:54 pm

Odgovor Napisal/-a zvonem »

Še nekaj. Stenlyeva rešitev ima še eno pomankljivost. Poda samo rešitev seštevka dveh številk. Mene zanimajo kombinacije seštevka vseh rešitev pod pogji, ki sem jih podal v prejšnjem zapisu. Npr.: za številko 7 so zanimive rešitve: 6+1, 5+2, 4+3, 4+2+1. Za številko 9 so zanimive: 8+1, 7+2, 6+3, 5+4, 6+2+1, 5+3+1, 4+3+2.
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Pozdravljeni,

:) Poem pa je rešitev povsem trivialna. Potrebno se je zapeljati do polovice števila in pač pisati račune:

Koda: Izberi vse

Sub NajdiKombinacije(stevilo As Integer)
    Dim stevec As Integer
    
    For stevec = 1 To stevilo / 2 - 1
        Debug.Print stevec & " + " & (stevilo - stevec) & " = " & stevilo
    Next
End Sub
PS: To so kombinacije :)
lp,
Matjaž Prtenjak
Administrator
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

:( :( :( ,

Vmes ste vleteli z novo zahtevo. Gornja rešitev vam pokriva prejšnjo zahtevo po DVEH ŠTEVKAH. Kako ste sedaj prišli že na 3???
lp,
Matjaž Prtenjak
Administrator
zvonem
Prispevkov: 95
Pridružen: Če Sep 29, 2005 10:54 pm

Odgovor Napisal/-a zvonem »

Ker me zanimajo možne kombinacije brez ponavljanja, brez ničle in z vsemi možnimi števkami. Nažalost sem se pogruntal, ko sem Stenliyevo rešitev poizkusil na dvomestni številki. Rešitev lahko zajema tudi večmestno rešitev, npr.: za 12 je ena od rešitev tudi 11+1.
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

:? :?,

Vi sploh ne veste kako definirati problem, kako bi potem našli rešitev? Z nekaj predstave in truda sklepam, da potrebujete vse možne kombinacije seštevkov nekega števila, kjer se:
  • Dve števili znotraj seštevka ne ponovita
  • Dva seštevka z istimi števili v drugačnem zaporedju ne ponovita
Če je temu tako in sklepam, da je, potem imate rešitev podano spodaj. Rešitev preizkusite, ker ne zagotavljam, da je povsem pravilna (nekje 80% sem prepričan, da deluje pravilno, veliko testov pa nisem spuščal)

Koda: Izberi vse

Sub RazbijStevilo_tmp(Spredaj As String, ZacniPri As Integer, Stevilo As Integer)
    Dim stevec As Integer
    
    For stevec = ZacniPri To Stevilo / 2
        Dim st1 As String, st2 As String
        st1 = stevec & " "
        st2 = (Stevilo - stevec) & " "
        If ((InStr(1, Spredaj, st1) = 0) And (InStr(1, Spredaj, st2) = 0) And (stevec < (Stevilo - stevec))) Then
            Debug.Print Spredaj & stevec & " + " & st2
            RazbijStevilo_tmp Spredaj & stevec & " + ", stevec + 1, (Stevilo - stevec)
        End If
    Next
End Sub

Sub RazbijStevilo(Stevilo As Integer)
    RazbijStevilo_tmp "", 1, Stevilo
End Sub
Proceduro zaženete tako, da v 'Immidiate' okno zapišete

Koda: Izberi vse

Razbijstevilo <nako število>
in pritisnete ENTER.

Za število 12 dobite sledeče rešitve

Koda: Izberi vse

Razbijstevilo 12
1 + 11 
1 + 2 + 9 
1 + 2 + 3 + 6 
1 + 2 + 4 + 5 
1 + 3 + 8 
1 + 4 + 7 
1 + 5 + 6 
2 + 10 
2 + 3 + 7 
2 + 4 + 6 
3 + 9 
3 + 4 + 5 
4 + 8 
5 + 7 
Rešitev deluje rekurzivno, tako da najprej razbije 12 na 1 + 11 in potem 11 razbija dalje, brez uporabe 1. Tako dobi 1+2+9 in potem 9 razbija dalje brez uporabe 1 in 2... Ko porabi 1 poskusi z 2 in nato dalje...
lp,
Matjaž Prtenjak
Administrator
zvonem
Prispevkov: 95
Pridružen: Če Sep 29, 2005 10:54 pm

Odgovor Napisal/-a zvonem »

Matjaž! Makro deluje tako, kot sem si zamislil. Zanima me še, kako bi makro spremenil vv funkcijo tako, da bi mi rešitve podala v stolpcu. Npr. v "A1" vpišem število, v stolpcu b pa bi funkcija izpisala režitve. Sicer sem makro spremenilv v funkcijo (nova funkcija je v seznamu funkcij), kot rezultat pa mi izpiše #VREDN! Hvala za pomoč in razumevanje :oops:
admin
Site Admin
Prispevkov: 3692
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Pozdravljeni,

To ne bo šlo. Funkcija lahko spremeni samo vsebino celice v kateri se nahaja. Z drugimi besedami to pomeni, da če je funkcija zapisana v celici A1, lahko spreminja samo vsebino celice A1 in nobene druge!
lp,
Matjaž Prtenjak
Administrator
Odgovori