logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Program do sumowania liczb z listy, aby uzyskać dokładnie 123.55

krzysiekjezewski 28 Gru 2010 12:43 1376 8
REKLAMA
  • #1 8923349
    krzysiekjezewski
    Poziom 10  
    Posty: 6
    w załączniku przesyłam 26 liczb z którymi mam takowy problem: mianowicie chcę otrzymać sumę dokładnie 123.55 z tych 26 liczb które tam są. Wiadomo że wszystkie to za dużo a kombinacji jest trochę dużo żeby to liczyć na piechtę. czy jest jakiś programik służący do czegoś takiego. próbowałem formułek w exelu z tego forum ale jakoś nie wychodziło. Proszę o pomoc
    Załączniki:
    • suma.txt (170 Bajtów) Musisz być zalogowany, aby pobrać ten załącznik.
  • REKLAMA
  • #2 8923401
    KSRhaziel
    Poziom 36  
    Posty: 3248
    Pomógł: 271
    Ocena: 275
    Możesz to zrobić łatwo pętlami, konieczna jednak znajomość jakiegoś języka. W ten sposób dostaniesz wszystkie kombinacje. Na dobrą sprawę w excelu również dasz radę. A to jakiś konkurs, zadanie w szkole?

    EDIT
    No może nie tak łatwo, ale jak się pokombinuje to da się radę ;)
  • REKLAMA
  • #3 8923450
    walek33
    Poziom 29  
    Posty: 1015
    Pomógł: 132
    Ocena: 81
    Poczytaj tutaj lub tutaj. Może coś dobierzesz.
  • #4 8934857
    krzysiekjezewski
    Poziom 10  
    Posty: 6
    To są liczby potrzebne do obliczenia zapotrzebowania na wodę dla miasta - czyli zadanie projektowe bardziej
  • REKLAMA
  • #5 8935834
    adamas_nt
    VIP Zasłużony dla elektroda
    Posty: 5320
    Pomógł: 1508
    Ocena: 659
    Formułami niewiele zdziałasz. Pokombinuj z VBA. Np z lekka przerobiony kod z drugiego linku kolegi walek33. Przy kombinacji pięciu liczb mamy już dwa wyniki. Wklej liczby do arkusza w zakres A1:A26 i uruchom
    Sub szukaj_skladnikow()
    Dim x As Variant
    x = Range("A1:A26")
    suma = 122.55
    
    a = UBound(x, 1)
    
    For i = 1 To a
      For j = i + 1 To a
        kontrol = x(i, 1) + x(j, 1)
        If kontrol = suma Then
          MsgBox x(i, 1) & " + " & x(j, 1) & " = " & suma
          'tu trzeba zapisać gdzieś
        Else
          For k = j + 1 To a
            kontrol = x(i, 1) + x(j, 1) + x(k, 1)
            If kontrol = suma Then
              MsgBox x(i, 1) & " + " & x(j, 1) & " + " & x(k, 1) & " = " & suma
              'tu trzeba zapisać gdzieś
            Else
              For l = k + 1 To a
                kontrol = x(i, 1) + x(j, 1) + x(k, 1) + x(l, 1)
                If kontrol = suma Then
                  MsgBox x(i, 1) & " + " & x(j, 1) & " + " & x(k, 1) & " + " & x(l, 1) & " = " & suma
                  'tu trzeba zapisać gdzieś
                Else
                  For m = l + 1 To a
                    kontrol = x(i, 1) + x(j, 1) + x(k, 1) + x(l, 1) + x(m, 1)
                    If kontrol = suma Then
                      Range("B1:B26").ClearContents
                      Cells(i, 2) = "x": Cells(j, 2) = "x": Cells(k, 2) = "x": Cells(l, 2) = "x": Cells(m, 2) = "x"
                      MsgBox x(i, 1) & " + " & x(j, 1) & " + " & x(k, 1) & " + " & x(l, 1) & " + " & x(m, 1) & " = " & suma
                      'tu trzeba zapisać gdzieś
                    Else
                      'tu kolejna pętla dla kombinacji 6 liczb itd
                    End If
                  Next
                End If
              Next
            End If
          Next
        End If
      Next
    Next
    End Sub


    Program do sumowania liczb z listy, aby uzyskać dokładnie 123.55
  • #6 8956671
    krzysiekjezewski
    Poziom 10  
    Posty: 6
    Fajnie makro oczywiście działa ale jeden mankament jest. U Ciebie adamas_nt jest wynik 122.55 a miał być 123.55. Takie małe przeoczenie ale próbowałem zmienić docelową wartość w kodzie tylko nic to nie dało. Może jakaś podpowiedź jak to zrobić żeby zadziałało bo po podaniu dobrej wartości makro mi nie rusza
  • Pomocny post
    #7 8957910
    marek003
    Poziom 40  
    Posty: 4607
    Pomógł: 801
    Ocena: 488
    Pomysł ciekawy.

    Pozwoliłem się pobawić tym makrem.

    :arrow: do autora
    Makro działą tylko że nie znajduje sumy w kombinacji sum 5 liczb.
    (Można dodać okno z wyjaśnieniem)
    Twoja suma pojawi się (12 kombinacji) jak dodasz jeszcze pętle dla sumy sześciu (6) liczb.

    czyli w miejsce
    'tu kolejna pętla dla kombinacji 6 liczb itd'

    wklej
    For n = m + 1 To a
      kontrol = x(i, 1) + x(j, 1) + x(k, 1) + x(l, 1) + x(m, 1) + x(n, 1)
       If kontrol = suma Then
        Range("B1:B26").ClearContents
        Cells(i, 2) = "x": Cells(j, 2) = "x": Cells(k, 2) = "x": Cells(l, 2) = "x": Cells(m, 2)= "x": Cells(n, 2) = "x"
        MsgBox x(i, 1) & " + " & x(j, 1) & " + " & x(k, 1) & " + " & x(l, 1) & " + " & x(m, 1) & " + " & x(n, 1) & " = " & suma
        'tu trzeba zapisać gdzieś
      Else
          'tu kolejna pętla dla kombinacji 7 liczb itd
      End If
    Next


    Zmienił bym jeszcze dla łatwiejszego podmieniania sumy zapis na początku makra
    suma = 123.55

    na
    suma = Range("C1").Value

    i poszukiwaną sumę wpisujesz w komórkę C1 a makro podpinasz pod przycisk.

    Zapewne zauważyłeś że taki kod (powiększony o powyższy wpis) sprawdza kombinację sum tylko 6 liczb. Dla kombinację większej ilości liczb należałoby dalej tworzyć kolejne pętle aż do 26 dla maksymalnej sumy. Więc może to nie są wszystkie (12 sztuk) kombinacje dla sumy 123,55.

    Zaznaczą (jakby ktoś nie zauważył) że "pokazywanie" X w kolumnie B których tyczy się dana suma jest tylko dla 5 i 6 liczb ale jak ci zależy to sobie z łatwością dodasz do kombinacji sum mniejszych ilości liczb składowych.
  • #8 8958064
    krzysiekjezewski
    Poziom 10  
    Posty: 6
    Hehe domyśliłem, się że makro nie znajduje takich liczb i dlatego nie wyskakuje ale fajnie, że odpisałeś bo bawienie się kodem wychodzi mi średnio na jeża. Dzięki wielkie:) Bardzo pomogłeś
  • REKLAMA
  • #9 8958565
    marek003
    Poziom 40  
    Posty: 4607
    Pomógł: 801
    Ocena: 488
    Zaznaczam że jest to kombinacja 6 liczb z 26.
    Aby sprawdzić czy nie ma dalszych możliwości trzeba by było dodawać następne pętle.
    Np. po dodaniu kolejnej pętli możliwość uzyskania sumy 123,55 wzrosła do 56 kombinacji więc trzeba oczekiwać że dodawanie kolejnych pętli zwiększy te kombinacje.
    Jak chcesz sprawdzić wstaw w
    'tu kolejna pętla dla kombinacji 7 liczb itd'

    kod
    For o = n + 1 To a
     kontrol = x(i, 1) + x(j, 1) + x(k, 1) + x(l, 1) + x(m, 1) + x(n, 1) + x(o, 1)
      If kontrol = suma Then
       Range("B1:B26").ClearContents
       Cells(i, 2) = "x": Cells(j, 2) = "x": Cells(k, 2) = "x": Cells(l, 2) = "x": Cells(m, 2) = "x": Cells(n, 2) = "x": Cells(o, 2) = "x"
       MsgBox x(i, 1) & " + " & x(j, 1) & " + " & x(k, 1) & " + " & x(l, 1) & " + " & x(m, 1) & " + " & x(n, 1) & " + " & x(o, 1) & " = " & suma
        'tu trzeba zapisać gdzieś
      Else
       'tu kolejna pętla dla kombinacji 8 liczb itd
      End If
    Next


    Przy okazji w poprzednim kodzie wkradł się błąd w wyświetlaniu sumowanych wartości przy 6 kombinacjach. (błąd wyświetlanej wartości nie zasady i sumy) Szósta wartość sumy była błędnie wykazywana i równała się piątej. Trzeba w poprzednim kodzie w odpowiedniej linijce zastąpić literkę m literką n
    MsgBox x(i, 1) & " + " & x(j, 1) & " + " & x(k, 1) & " + " & x(l, 1) & " + " & x(m, 1) & " + " & x(n, 1) & " = " & suma

    Naniosłem poprawkę w poprzednim poście.

Podsumowanie tematu

LABEL_AI_GENERATED
Użytkownik poszukuje programu do obliczenia sumy dokładnie 123.55 z 26 liczb. W odpowiedziach zasugerowano użycie pętli w języku programowania, w tym VBA w Excelu, aby uzyskać wszystkie możliwe kombinacje. Wskazano, że formuły w Excelu mogą być niewystarczające, a makra mogą wymagać modyfikacji, aby poprawnie obliczyć sumę. Użytkownicy podzielili się kodem VBA, który można dostosować do różnych kombinacji liczb, co zwiększa szanse na znalezienie odpowiednich zestawów liczb. Wskazano również, że dodawanie kolejnych pętli zwiększa liczbę kombinacji, co może pomóc w osiągnięciu pożądanej sumy.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA